skill-calorie 0.1.1 → 0.2.1

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 (144) hide show
  1. package/SKILL.md +207 -0
  2. package/dist/analysis/anomaly/common.d.ts.map +1 -1
  3. package/dist/analysis/anomaly/common.js +2 -1
  4. package/dist/analysis/anomaly/common.js.map +1 -1
  5. package/dist/analysis/cross.d.ts.map +1 -1
  6. package/dist/analysis/cross.js +3 -2
  7. package/dist/analysis/cross.js.map +1 -1
  8. package/dist/analysis/deficit.d.ts.map +1 -1
  9. package/dist/analysis/deficit.js +4 -0
  10. package/dist/analysis/deficit.js.map +1 -1
  11. package/dist/analysis/diet.js +2 -2
  12. package/dist/analysis/diet.js.map +1 -1
  13. package/dist/analysis/exercise.js +5 -5
  14. package/dist/analysis/exercise.js.map +1 -1
  15. package/dist/analysis/review.js +2 -2
  16. package/dist/analysis/review.js.map +1 -1
  17. package/dist/analysis/series.d.ts +7 -1
  18. package/dist/analysis/series.d.ts.map +1 -1
  19. package/dist/analysis/series.js +22 -6
  20. package/dist/analysis/series.js.map +1 -1
  21. package/dist/analysis/utils.d.ts +7 -0
  22. package/dist/analysis/utils.d.ts.map +1 -1
  23. package/dist/analysis/utils.js +7 -0
  24. package/dist/analysis/utils.js.map +1 -1
  25. package/dist/analysis/weightCompare3.js +2 -2
  26. package/dist/analysis/weightCompare3.js.map +1 -1
  27. package/dist/cli/cmd_read.d.ts +21 -3
  28. package/dist/cli/cmd_read.d.ts.map +1 -1
  29. package/dist/cli/cmd_read.js +480 -53
  30. package/dist/cli/cmd_read.js.map +1 -1
  31. package/dist/cli/keys.d.ts +89 -1
  32. package/dist/cli/keys.d.ts.map +1 -1
  33. package/dist/cli/keys.js +30 -0
  34. package/dist/cli/keys.js.map +1 -1
  35. package/dist/cli/write.d.ts +19 -1
  36. package/dist/cli/write.d.ts.map +1 -1
  37. package/dist/cli/write.js +148 -52
  38. package/dist/cli/write.js.map +1 -1
  39. package/dist/db/readonly.d.ts +3 -0
  40. package/dist/db/readonly.d.ts.map +1 -0
  41. package/dist/db/readonly.js +22 -0
  42. package/dist/db/readonly.js.map +1 -0
  43. package/dist/output.d.ts +82 -0
  44. package/dist/output.d.ts.map +1 -0
  45. package/dist/output.js +305 -0
  46. package/dist/output.js.map +1 -0
  47. package/dist/render/copy.d.ts +20 -0
  48. package/dist/render/copy.d.ts.map +1 -0
  49. package/dist/render/copy.js +36 -0
  50. package/dist/render/copy.js.map +1 -0
  51. package/dist/render/dietDocs.d.ts +45 -0
  52. package/dist/render/dietDocs.d.ts.map +1 -0
  53. package/dist/render/dietDocs.js +561 -0
  54. package/dist/render/dietDocs.js.map +1 -0
  55. package/dist/render/envelope.d.ts +32 -6
  56. package/dist/render/envelope.d.ts.map +1 -1
  57. package/dist/render/envelope.js +71 -0
  58. package/dist/render/envelope.js.map +1 -1
  59. package/dist/render/exercisePort.d.ts +161 -0
  60. package/dist/render/exercisePort.d.ts.map +1 -0
  61. package/dist/render/exercisePort.js +395 -0
  62. package/dist/render/exercisePort.js.map +1 -0
  63. package/dist/render/goal.d.ts.map +1 -1
  64. package/dist/render/goal.js +13 -2
  65. package/dist/render/goal.js.map +1 -1
  66. package/dist/render/goalPlate.d.ts +1 -1
  67. package/dist/render/goalPlate.d.ts.map +1 -1
  68. package/dist/render/goalPlate.js +5 -1
  69. package/dist/render/goalPlate.js.map +1 -1
  70. package/dist/render/helpCenter.d.ts +104 -0
  71. package/dist/render/helpCenter.d.ts.map +1 -0
  72. package/dist/render/helpCenter.js +386 -0
  73. package/dist/render/helpCenter.js.map +1 -0
  74. package/dist/render/html.d.ts +12 -0
  75. package/dist/render/html.d.ts.map +1 -1
  76. package/dist/render/html.js +21 -5
  77. package/dist/render/html.js.map +1 -1
  78. package/dist/render/index.d.ts +8 -1
  79. package/dist/render/index.d.ts.map +1 -1
  80. package/dist/render/index.js +5 -1
  81. package/dist/render/index.js.map +1 -1
  82. package/dist/render/nutritionPort.d.ts +89 -0
  83. package/dist/render/nutritionPort.d.ts.map +1 -0
  84. package/dist/render/nutritionPort.js +183 -0
  85. package/dist/render/nutritionPort.js.map +1 -0
  86. package/dist/render/nutritionPortDocs.d.ts +6 -0
  87. package/dist/render/nutritionPortDocs.d.ts.map +1 -0
  88. package/dist/render/nutritionPortDocs.js +317 -0
  89. package/dist/render/nutritionPortDocs.js.map +1 -0
  90. package/dist/render/photo.d.ts +6 -1
  91. package/dist/render/photo.d.ts.map +1 -1
  92. package/dist/render/photo.js +13 -4
  93. package/dist/render/photo.js.map +1 -1
  94. package/dist/render/planPlate.d.ts +2 -1
  95. package/dist/render/planPlate.d.ts.map +1 -1
  96. package/dist/render/planPlate.js +6 -1
  97. package/dist/render/planPlate.js.map +1 -1
  98. package/dist/render/receipt.d.ts +47 -1
  99. package/dist/render/receipt.d.ts.map +1 -1
  100. package/dist/render/receipt.js +67 -3
  101. package/dist/render/receipt.js.map +1 -1
  102. package/dist/render/sportDocs.d.ts +14 -0
  103. package/dist/render/sportDocs.d.ts.map +1 -0
  104. package/dist/render/sportDocs.js +540 -0
  105. package/dist/render/sportDocs.js.map +1 -0
  106. package/dist/render/sportPortDocs.d.ts +8 -0
  107. package/dist/render/sportPortDocs.d.ts.map +1 -0
  108. package/dist/render/sportPortDocs.js +468 -0
  109. package/dist/render/sportPortDocs.js.map +1 -0
  110. package/dist/render/templates.d.ts +4 -0
  111. package/dist/render/templates.d.ts.map +1 -0
  112. package/dist/render/templates.js +29 -0
  113. package/dist/render/templates.js.map +1 -0
  114. package/dist/render/trendDocs.d.ts +11 -0
  115. package/dist/render/trendDocs.d.ts.map +1 -0
  116. package/dist/render/trendDocs.js +445 -0
  117. package/dist/render/trendDocs.js.map +1 -0
  118. package/dist/render/trendMiscPort.d.ts +127 -0
  119. package/dist/render/trendMiscPort.d.ts.map +1 -0
  120. package/dist/render/trendMiscPort.js +277 -0
  121. package/dist/render/trendMiscPort.js.map +1 -0
  122. package/dist/render/trendMiscPortDocs.d.ts +10 -0
  123. package/dist/render/trendMiscPortDocs.d.ts.map +1 -0
  124. package/dist/render/trendMiscPortDocs.js +397 -0
  125. package/dist/render/trendMiscPortDocs.js.map +1 -0
  126. package/dist/render/wizardPort.d.ts +125 -0
  127. package/dist/render/wizardPort.d.ts.map +1 -0
  128. package/dist/render/wizardPort.js +393 -0
  129. package/dist/render/wizardPort.js.map +1 -0
  130. package/dist/render/wizardPortDocs.d.ts +6 -0
  131. package/dist/render/wizardPortDocs.d.ts.map +1 -0
  132. package/dist/render/wizardPortDocs.js +274 -0
  133. package/dist/render/wizardPortDocs.js.map +1 -0
  134. package/dist/triggers/routing.d.ts +141 -0
  135. package/dist/triggers/routing.d.ts.map +1 -0
  136. package/dist/triggers/routing.js +678 -0
  137. package/dist/triggers/routing.js.map +1 -0
  138. package/package.json +5 -3
  139. package/templates/diet.html +40 -0
  140. package/templates/exercise.html +40 -0
  141. package/templates/goal.html +40 -0
  142. package/templates/help.html +40 -0
  143. package/templates/home.html +40 -0
  144. package/templates/photo-gallery.html +40 -0
@@ -1,9 +1,3 @@
1
- /** T8 #27 + T9 #28 + T10 #29 + #41 · 主视图 + 目标分析盘 + 身体照片 + 读链补齐 envelope 键表(T11 出口复用同一命名;仅 type-only 消费 link-core)。
2
- *
3
- * T8 四主视图 key 另立 view 域:calorie.view_home / calorie.view_diet / calorie.view_exercise / calorie.view_goal(一律 stat)。
4
- * T9 目标分析盘:goal_config / goal_recommend / goal_weight / goal_progress / goal_status / combined / deficit / diet_review / health / ranking / library / search(一律 stat)。
5
- * T10 照片视图 key 挂 calorie.photo_*(gallery/compare/viewer/gif/help/receipt 六键,就近形状)。
6
- */
7
1
  import type { EnvelopeShape } from 'base-link-core';
8
2
  export declare const VIEW_KEYS: {
9
3
  readonly home: string;
@@ -57,4 +51,36 @@ export declare const PHOTO_VIEW_KEYS: {
57
51
  export type PhotoViewName = keyof typeof PHOTO_VIEW_KEYS;
58
52
  export declare const PHOTO_VIEW_SHAPES: Record<PhotoViewName, EnvelopeShape>;
59
53
  export declare function photoShapeFor(key: string): EnvelopeShape;
54
+ export declare const DELIVERY_MODES: readonly ["file", "inline", "text"];
55
+ export type DeliveryMode = (typeof DELIVERY_MODES)[number];
56
+ /** 产物族(**结构判定**,非配置表):描述该产物由哪一类模板/壳产出,供调用方选渲染宿主。 */
57
+ export declare const DELIVERY_TEMPLATES: readonly ["help-shell", "doc-shell", "receipt", "fragment", "text"];
58
+ export type DeliveryTemplate = (typeof DELIVERY_TEMPLATES)[number];
59
+ export interface Delivery {
60
+ /** 交付通道(必填):`file` 落盘绝对路径/`inline` 产物随 envelope 回传/`text` 结构化文本。 */
61
+ readonly mode: DeliveryMode;
62
+ /** 落盘绝对路径(仅 `file` 态,或落盘成功的 `text` 态如 `help.center` 的 text 交付)。 */
63
+ readonly path?: string;
64
+ /** 产物族。 */
65
+ readonly template?: DeliveryTemplate;
66
+ /** 产物 UTF-8 字节数。 */
67
+ readonly bytes?: number;
68
+ }
69
+ /** 产物族判定(首命中即定,纯结构、零配置、零取数):
70
+ * 空/无标签 → `text`;含 #88 速查台壳标记 → `help-shell`;`<!DOCTYPE` → `doc-shell`;
71
+ * `receipt` 形 → `receipt`;其余 → `fragment`。 */
72
+ export declare function deliveryTemplateOf(shape: EnvelopeShape, html: string): DeliveryTemplate;
73
+ /** 交付信号构造(唯一入口):`mode` 闭集校验、`path` 只许绝对路径、`bytes` 非负整数。
74
+ * `template` 缺省按产物结构判定;文本交付由调用方显式给 `'text'`(文本里可能出现 `<N>` 之类
75
+ * 非标签串,结构判定对文本不可靠,故不猜)。 */
76
+ export declare function buildDelivery(input: {
77
+ mode: DeliveryMode;
78
+ path?: string;
79
+ shape: EnvelopeShape;
80
+ html?: string;
81
+ bytes?: number;
82
+ template?: DeliveryTemplate;
83
+ }): Delivery;
84
+ /** 顶层追加 `delivery`(**只追加**:既有五字段 `version/skill/shape/key/data` 一字不改、序不变)。 */
85
+ export declare function withDelivery(env: Record<string, unknown>, delivery: Delivery): Record<string, unknown>;
60
86
  //# sourceMappingURL=envelope.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/render/envelope.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAIpD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCZ,CAAC;AACX,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,SAAS,CAAC;AAE9C,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,aAAa,CAmCvD,CAAC;AAEF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAIvD;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM7G;AAED,eAAO,MAAM,eAAe;;;;;;;CAOlB,CAAC;AACX,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,eAAe,CAAC;AAEzD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,aAAa,EAAE,aAAa,CAOlE,CAAC;AAEF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAIxD"}
1
+ {"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/render/envelope.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAIpD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCZ,CAAC;AACX,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,SAAS,CAAC;AAE9C,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,aAAa,CAmCvD,CAAC;AAEF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAIvD;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM7G;AAED,eAAO,MAAM,eAAe;;;;;;;CAOlB,CAAC;AACX,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,eAAe,CAAC;AAEzD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,aAAa,EAAE,aAAa,CAOlE,CAAC;AAEF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAIxD;AAcD,eAAO,MAAM,cAAc,qCAAsC,CAAC;AAClE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,oDAAoD;AACpD,eAAO,MAAM,kBAAkB,qEAAsE,CAAC;AACtG,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnE,MAAM,WAAW,QAAQ;IACvB,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,mEAAmE;IACnE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW;IACX,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IACrC,oBAAoB;IACpB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;+CAE+C;AAC/C,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAOvF;AAED;;4BAE4B;AAC5B,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B,GAAG,QAAQ,CAwBX;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEtG"}
@@ -1,3 +1,10 @@
1
+ /** T8 #27 + T9 #28 + T10 #29 + #41 · 主视图 + 目标分析盘 + 身体照片 + 读链补齐 envelope 键表(T11 出口复用同一命名;仅 type-only 消费 link-core)。
2
+ *
3
+ * T8 四主视图 key 另立 view 域:calorie.view_home / calorie.view_diet / calorie.view_exercise / calorie.view_goal(一律 stat)。
4
+ * T9 目标分析盘:goal_config / goal_recommend / goal_weight / goal_progress / goal_status / combined / deficit / diet_review / health / ranking / library / search(一律 stat)。
5
+ * T10 照片视图 key 挂 calorie.photo_*(gallery/compare/viewer/gif/help/receipt 六键,就近形状)。
6
+ */
7
+ import { isAbsolute } from 'node:path';
1
8
  import { calorieKey } from '../fetch/shapes.js';
2
9
  import { CalorieRenderError } from './errors.js';
3
10
  export const VIEW_KEYS = {
@@ -108,4 +115,68 @@ export function photoShapeFor(key) {
108
115
  throw new CalorieRenderError('bad-input', '未知照片视图 key:' + key);
109
116
  return PHOTO_VIEW_SHAPES[hit[0]];
110
117
  }
118
+ /* ── #83 · 三态交付契约(M4 HTML-First 铁则 + 渲染失败回执) ────────────────────────────────
119
+ *
120
+ * 旧铁则正本(只读基线 `D:\2Study\StudyNotes\SKILLS\卡路里\SKILL.md:18-19`):
121
+ * 4. HTML-First:唤醒词命中后**只要模板表列出对应 HTML,AI 必须 invoke HTML 工作流(渲染 → 打开),严禁文字答**;
122
+ * 渲染失败处理契约(v2.4.19 增 · #242):render 脚本**必须** invoke,**不得手写 HTML 兜底**;
123
+ * 判定成功 = 退出码 0 且产物 HTML 文件存在;渲染失败(退出码非 0/产物缺失)→ 输出**错误回执**
124
+ * (说明失败原因 + 建议命令),**严禁**手写 HTML 代替渲染产物。
125
+ *
126
+ * 新架构落点(维护者 2026-09-08 拍定**方案 A**):`delivery` 作为 envelope 的**追加字段**
127
+ * (`{mode,path?,template?,bytes?}`,六形状与既有五字段一字不改),stdout 仍守 P9「一行 JSON」。
128
+ * 三态同源:同一个 key、同一份 `data`,绝不各自取数(②③ 的载荷都由该次 envelope 派生)。
129
+ */
130
+ export const DELIVERY_MODES = ['file', 'inline', 'text'];
131
+ /** 产物族(**结构判定**,非配置表):描述该产物由哪一类模板/壳产出,供调用方选渲染宿主。 */
132
+ export const DELIVERY_TEMPLATES = ['help-shell', 'doc-shell', 'receipt', 'fragment', 'text'];
133
+ /** 产物族判定(首命中即定,纯结构、零配置、零取数):
134
+ * 空/无标签 → `text`;含 #88 速查台壳标记 → `help-shell`;`<!DOCTYPE` → `doc-shell`;
135
+ * `receipt` 形 → `receipt`;其余 → `fragment`。 */
136
+ export function deliveryTemplateOf(shape, html) {
137
+ const s = typeof html === 'string' ? html : '';
138
+ if (s.trim() === '' || !/<[a-zA-Z!/]/.test(s))
139
+ return 'text';
140
+ if (s.includes('id="ilife-help-shell"'))
141
+ return 'help-shell';
142
+ if (/^\s*<!DOCTYPE/i.test(s))
143
+ return 'doc-shell';
144
+ if (shape === 'receipt')
145
+ return 'receipt';
146
+ return 'fragment';
147
+ }
148
+ /** 交付信号构造(唯一入口):`mode` 闭集校验、`path` 只许绝对路径、`bytes` 非负整数。
149
+ * `template` 缺省按产物结构判定;文本交付由调用方显式给 `'text'`(文本里可能出现 `<N>` 之类
150
+ * 非标签串,结构判定对文本不可靠,故不猜)。 */
151
+ export function buildDelivery(input) {
152
+ if (!DELIVERY_MODES.includes(input.mode)) {
153
+ throw new CalorieRenderError('bad-input', '交付通道非法:' + String(input.mode) + '(须为 ' + DELIVERY_MODES.join('/') + ')');
154
+ }
155
+ const out = { mode: input.mode };
156
+ if (input.path !== undefined) {
157
+ if (!isAbsolute(input.path))
158
+ throw new CalorieRenderError('bad-input', 'delivery.path 须为绝对路径:' + input.path);
159
+ out.path = input.path;
160
+ }
161
+ if (input.template !== undefined) {
162
+ if (!DELIVERY_TEMPLATES.includes(input.template)) {
163
+ throw new CalorieRenderError('bad-input', '交付产物族非法:' + String(input.template));
164
+ }
165
+ out.template = input.template;
166
+ }
167
+ else {
168
+ out.template = deliveryTemplateOf(input.shape, input.html ?? '');
169
+ }
170
+ if (input.bytes !== undefined) {
171
+ if (!Number.isInteger(input.bytes) || input.bytes < 0) {
172
+ throw new CalorieRenderError('bad-input', 'delivery.bytes 须为非负整数:' + String(input.bytes));
173
+ }
174
+ out.bytes = input.bytes;
175
+ }
176
+ return out;
177
+ }
178
+ /** 顶层追加 `delivery`(**只追加**:既有五字段 `version/skill/shape/key/data` 一字不改、序不变)。 */
179
+ export function withDelivery(env, delivery) {
180
+ return { ...env, delivery };
181
+ }
111
182
  //# sourceMappingURL=envelope.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/render/envelope.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/render/envelope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,161 @@
1
+ /** #111 · 运动移植 6 键取数(t71 需移植 exercise_* 六模板的数据面)。
2
+ *
3
+ * 行源一律 T3 `listWindow`(软删除已排除);分类口径=**库内实填优先、缺失回退
4
+ * `inferCategory`**(旧模板按入库 category 过滤,本层沿旧口径;view.exercise 的纯
5
+ * 推断口径不动,两处差异见证据 R2)。
6
+ * 缺失阻断不返空:窗内无行即 `missing-data`(G5 #100 口径);日期非法即 `bad-input`。
7
+ * 本层只做取数+聚合,不组 HTML(组装归 `render/sportPortDocs.ts`)。
8
+ */
9
+ import type { DatabaseSync } from 'node:sqlite';
10
+ import type { ExerciseRow } from '../fetch/exercise.js';
11
+ /** 库内实填分类优先(去空格),空串/缺失回退按名推断。 */
12
+ export declare function effectiveCategory(r: ExerciseRow): string;
13
+ export interface PortRow {
14
+ date: string;
15
+ time: string | null;
16
+ type: string;
17
+ minutes: number | null;
18
+ burned: number;
19
+ category: string;
20
+ distanceKm: number | null;
21
+ avgHr: number | null;
22
+ loadKg: number | null;
23
+ reps: number | null;
24
+ setIndex: number | null;
25
+ note: string;
26
+ }
27
+ /** 窗内全部行(无行即 missing-data;调用方再按类过滤——过滤致空亦 missing)。 */
28
+ export declare function listPortRows(db: DatabaseSync, start: string, end: string): PortRow[];
29
+ export interface StrengthByMovement {
30
+ movement: string;
31
+ sets: number;
32
+ volumeKg: number | null;
33
+ reps: number | null;
34
+ }
35
+ export interface StrengthView {
36
+ start: string;
37
+ end: string;
38
+ rows: PortRow[];
39
+ movementCount: number;
40
+ totalSets: number;
41
+ totalVolumeKg: number | null;
42
+ totalReps: number | null;
43
+ byMovement: StrengthByMovement[];
44
+ /** 重量轨迹(近 10 个训练日;单侧口径=旧模板:Σ load×reps)。 */
45
+ trail: {
46
+ date: string;
47
+ volumeKg: number | null;
48
+ }[];
49
+ }
50
+ export declare function buildStrengthView(db: DatabaseSync, start: string, end: string): StrengthView;
51
+ export interface CardioByType {
52
+ type: string;
53
+ sessions: number;
54
+ minutes: number | null;
55
+ distanceKm: number | null;
56
+ paceMinPerKm: number | null;
57
+ }
58
+ export interface CardioView {
59
+ start: string;
60
+ end: string;
61
+ rows: PortRow[];
62
+ sessions: number;
63
+ totalMinutes: number | null;
64
+ totalDistanceKm: number | null;
65
+ avgPaceMinPerKm: number | null;
66
+ byType: CardioByType[];
67
+ }
68
+ export declare function buildCardioView(db: DatabaseSync, start: string, end: string): CardioView;
69
+ export interface DistributionBucket {
70
+ category: string;
71
+ sessions: number;
72
+ burned: number;
73
+ minutes: number | null;
74
+ shareByBurned: number | null;
75
+ shareBySessions: number | null;
76
+ }
77
+ export interface DistributionView {
78
+ start: string;
79
+ end: string;
80
+ days: number;
81
+ activeDays: number;
82
+ sessions: number;
83
+ totalBurned: number;
84
+ buckets: DistributionBucket[];
85
+ intakeCal: number | null;
86
+ tdeeTotal: number | null;
87
+ /** 缺口=TDEE×天+运动−摄入(series ADR-0013 口径;缺摄入即 null)。 */
88
+ deficit: number | null;
89
+ }
90
+ export declare function buildDistributionView(db: DatabaseSync, start: string, end: string): DistributionView;
91
+ export interface RecapView {
92
+ start: string;
93
+ end: string;
94
+ sessions: number;
95
+ totalMinutes: number | null;
96
+ totalBurned: number;
97
+ activeDays: number;
98
+ days: number;
99
+ byCategory: {
100
+ category: string;
101
+ sessions: number;
102
+ burned: number;
103
+ }[];
104
+ top5: {
105
+ type: string;
106
+ sessions: number;
107
+ burned: number;
108
+ }[];
109
+ daily: {
110
+ date: string;
111
+ burned: number | null;
112
+ }[];
113
+ summary: string;
114
+ }
115
+ export declare function buildRecapView(db: DatabaseSync, start: string, end: string): RecapView;
116
+ export interface PlannedSession {
117
+ date: string;
118
+ label: string;
119
+ movements: string[];
120
+ plannedSets: number | null;
121
+ hit: boolean;
122
+ actualTypes: string[];
123
+ }
124
+ export interface ReviewView {
125
+ start: string;
126
+ end: string;
127
+ planTitle: string;
128
+ plannedSessions: number;
129
+ hitSessions: number;
130
+ completionPct: number | null;
131
+ plannedMovements: number;
132
+ hitMovements: number;
133
+ movementPct: number | null;
134
+ sessions: PlannedSession[];
135
+ unhit: PlannedSession[];
136
+ }
137
+ export declare function buildReviewView(db: DatabaseSync, start: string, end: string): ReviewView;
138
+ export interface TrendView {
139
+ start: string;
140
+ end: string;
141
+ days: {
142
+ date: string;
143
+ minutes: number | null;
144
+ burned: number | null;
145
+ sessions: number;
146
+ }[];
147
+ weekly: {
148
+ weekStart: string;
149
+ sessions: number;
150
+ burned: number;
151
+ }[];
152
+ activeDays: number;
153
+ totalMinutes: number | null;
154
+ totalBurned: number;
155
+ peak: {
156
+ date: string;
157
+ burned: number;
158
+ } | null;
159
+ }
160
+ export declare function buildTrendView(db: DatabaseSync, start: string, end: string): TrendView;
161
+ //# sourceMappingURL=exercisePort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exercisePort.d.ts","sourceRoot":"","sources":["../../src/render/exercisePort.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAexD,iCAAiC;AACjC,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAIxD;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AAqBD,uDAAuD;AACvD,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,EAAE,CAWpF;AAQD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,4CAA4C;IAC5C,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;CACpD;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CA2C5F;AAID,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAQD,wBAAgB,eAAe,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAyCxF;AAID,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,qDAAqD;IACrD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAID,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAiDpG;AAID,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrE,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3D,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;IACjD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAkDtF;AAQD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,GAAG,EAAE,OAAO,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAYD,wBAAgB,eAAe,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CA8DxF;AAID,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1F,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAClE,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC/C;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAyDtF"}