skill-calorie 0.2.3 → 0.2.5
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/SKILL.md +474 -122
- package/dist/.gen-inputs.json +86 -0
- package/dist/analysis/anomaly/common.d.ts +11 -1
- package/dist/analysis/anomaly/common.d.ts.map +1 -1
- package/dist/analysis/anomaly/common.js +11 -12
- package/dist/analysis/anomaly/common.js.map +1 -1
- package/dist/analysis/anomaly/diet.d.ts.map +1 -1
- package/dist/analysis/anomaly/diet.js +11 -3
- package/dist/analysis/anomaly/diet.js.map +1 -1
- package/dist/analysis/commands.d.ts +62 -0
- package/dist/analysis/commands.d.ts.map +1 -0
- package/dist/analysis/commands.js +386 -0
- package/dist/analysis/commands.js.map +1 -0
- package/dist/analysis/contraindications.d.ts.map +1 -1
- package/dist/analysis/contraindications.js +16 -12
- package/dist/analysis/contraindications.js.map +1 -1
- package/dist/analysis/cross.d.ts +3 -0
- package/dist/analysis/cross.d.ts.map +1 -1
- package/dist/analysis/cross.js +54 -26
- package/dist/analysis/cross.js.map +1 -1
- package/dist/analysis/dashboard.d.ts.map +1 -1
- package/dist/analysis/dashboard.js +3 -2
- package/dist/analysis/dashboard.js.map +1 -1
- package/dist/analysis/deficit.d.ts +4 -2
- package/dist/analysis/deficit.d.ts.map +1 -1
- package/dist/analysis/deficit.js +2 -1
- package/dist/analysis/deficit.js.map +1 -1
- package/dist/analysis/exerciseReview.js +1 -1
- package/dist/analysis/exerciseReview.js.map +1 -1
- package/dist/analysis/healthPlate.d.ts +21 -0
- package/dist/analysis/healthPlate.d.ts.map +1 -0
- package/dist/analysis/healthPlate.js +41 -0
- package/dist/analysis/healthPlate.js.map +1 -0
- package/dist/analysis/historyStore.d.ts +30 -0
- package/dist/analysis/historyStore.d.ts.map +1 -0
- package/dist/analysis/historyStore.js +32 -0
- package/dist/analysis/historyStore.js.map +1 -0
- package/dist/analysis/index.d.ts +17 -0
- package/dist/analysis/index.d.ts.map +1 -0
- package/dist/analysis/index.js +17 -0
- package/dist/analysis/index.js.map +1 -0
- package/dist/analysis/multiTrend.d.ts +67 -0
- package/dist/analysis/multiTrend.d.ts.map +1 -0
- package/dist/analysis/multiTrend.js +106 -0
- package/dist/analysis/multiTrend.js.map +1 -0
- package/dist/analysis/multiTrendPage.d.ts +4 -0
- package/dist/analysis/multiTrendPage.d.ts.map +1 -0
- package/dist/analysis/multiTrendPage.js +502 -0
- package/dist/analysis/multiTrendPage.js.map +1 -0
- package/dist/analysis/reportDoc.d.ts +12 -0
- package/dist/analysis/reportDoc.d.ts.map +1 -0
- package/dist/analysis/reportDoc.js +244 -0
- package/dist/analysis/reportDoc.js.map +1 -0
- package/dist/analysis/reportDocBmi.d.ts +4 -0
- package/dist/analysis/reportDocBmi.d.ts.map +1 -0
- package/dist/analysis/reportDocBmi.js +104 -0
- package/dist/analysis/reportDocBmi.js.map +1 -0
- package/dist/analysis/reportDocParts.d.ts +77 -0
- package/dist/analysis/reportDocParts.d.ts.map +1 -0
- package/dist/analysis/reportDocParts.js +249 -0
- package/dist/analysis/reportDocParts.js.map +1 -0
- package/dist/analysis/reportDocScore.d.ts +8 -0
- package/dist/analysis/reportDocScore.d.ts.map +1 -0
- package/dist/analysis/reportDocScore.js +223 -0
- package/dist/analysis/reportDocScore.js.map +1 -0
- package/dist/analysis/reportDocScoreSeries.d.ts +3 -0
- package/dist/analysis/reportDocScoreSeries.d.ts.map +1 -0
- package/dist/analysis/reportDocScoreSeries.js +27 -0
- package/dist/analysis/reportDocScoreSeries.js.map +1 -0
- package/dist/analysis/reportDocTracked.d.ts +10 -0
- package/dist/analysis/reportDocTracked.d.ts.map +1 -0
- package/dist/analysis/reportDocTracked.js +196 -0
- package/dist/analysis/reportDocTracked.js.map +1 -0
- package/dist/analysis/reportPlate.d.ts +163 -0
- package/dist/analysis/reportPlate.d.ts.map +1 -0
- package/dist/analysis/reportPlate.js +251 -0
- package/dist/analysis/reportPlate.js.map +1 -0
- package/dist/analysis/review.d.ts.map +1 -1
- package/dist/analysis/review.js +5 -3
- package/dist/analysis/review.js.map +1 -1
- package/dist/analysis/routes.d.ts +18 -0
- package/dist/analysis/routes.d.ts.map +1 -0
- package/dist/analysis/routes.js +178 -0
- package/dist/analysis/routes.js.map +1 -0
- package/dist/analysis/series.d.ts +31 -6
- package/dist/analysis/series.d.ts.map +1 -1
- package/dist/analysis/series.js +121 -24
- package/dist/analysis/series.js.map +1 -1
- package/dist/analysis/simulate.d.ts +4 -2
- package/dist/analysis/simulate.d.ts.map +1 -1
- package/dist/analysis/simulate.js +22 -8
- package/dist/analysis/simulate.js.map +1 -1
- package/dist/analysis/simulate2.d.ts.map +1 -1
- package/dist/analysis/simulate2.js +47 -12
- package/dist/analysis/simulate2.js.map +1 -1
- package/dist/analysis/trend.d.ts +9 -1
- package/dist/analysis/trend.d.ts.map +1 -1
- package/dist/analysis/trend.js +24 -8
- package/dist/analysis/trend.js.map +1 -1
- package/dist/analysis/utils.d.ts +55 -21
- package/dist/analysis/utils.d.ts.map +1 -1
- package/dist/analysis/utils.js +85 -28
- package/dist/analysis/utils.js.map +1 -1
- package/dist/body/bodyDocs.d.ts +4 -0
- package/dist/body/bodyDocs.d.ts.map +1 -0
- package/dist/body/bodyDocs.js +284 -0
- package/dist/body/bodyDocs.js.map +1 -0
- package/dist/body/bodyPlate.d.ts +145 -0
- package/dist/body/bodyPlate.d.ts.map +1 -0
- package/dist/body/bodyPlate.js +243 -0
- package/dist/body/bodyPlate.js.map +1 -0
- package/dist/body/bodyReadUi.d.ts +47 -0
- package/dist/body/bodyReadUi.d.ts.map +1 -0
- package/dist/body/bodyReadUi.js +164 -0
- package/dist/body/bodyReadUi.js.map +1 -0
- package/dist/body/commands.d.ts +33 -0
- package/dist/body/commands.d.ts.map +1 -0
- package/dist/body/commands.js +19 -0
- package/dist/body/commands.js.map +1 -0
- package/dist/body/compare.d.ts +62 -0
- package/dist/body/compare.d.ts.map +1 -0
- package/dist/body/compare.js +162 -0
- package/dist/body/compare.js.map +1 -0
- package/dist/body/compareCompositionDoc.d.ts +3 -0
- package/dist/body/compareCompositionDoc.d.ts.map +1 -0
- package/dist/body/compareCompositionDoc.js +99 -0
- package/dist/body/compareCompositionDoc.js.map +1 -0
- package/dist/body/compareMeasureDoc.d.ts +3 -0
- package/dist/body/compareMeasureDoc.d.ts.map +1 -0
- package/dist/body/compareMeasureDoc.js +91 -0
- package/dist/body/compareMeasureDoc.js.map +1 -0
- package/dist/body/compareUi.d.ts +12 -0
- package/dist/body/compareUi.d.ts.map +1 -0
- package/dist/body/compareUi.js +27 -0
- package/dist/body/compareUi.js.map +1 -0
- package/dist/body/index.d.ts +17 -0
- package/dist/body/index.d.ts.map +1 -0
- package/dist/body/index.js +17 -0
- package/dist/body/index.js.map +1 -0
- package/dist/body/log.d.ts +29 -0
- package/dist/body/log.d.ts.map +1 -0
- package/dist/body/log.js +196 -0
- package/dist/body/log.js.map +1 -0
- package/dist/body/receipt.d.ts +52 -0
- package/dist/body/receipt.d.ts.map +1 -0
- package/dist/body/receipt.js +248 -0
- package/dist/body/receipt.js.map +1 -0
- package/dist/body/receiptData.d.ts +46 -0
- package/dist/body/receiptData.d.ts.map +1 -0
- package/dist/body/receiptData.js +107 -0
- package/dist/body/receiptData.js.map +1 -0
- package/dist/body/receiptUi.d.ts +9 -0
- package/dist/body/receiptUi.d.ts.map +1 -0
- package/dist/body/receiptUi.js +75 -0
- package/dist/body/receiptUi.js.map +1 -0
- package/dist/body/remove.d.ts +21 -0
- package/dist/body/remove.d.ts.map +1 -0
- package/dist/body/remove.js +78 -0
- package/dist/body/remove.js.map +1 -0
- package/dist/body/routes.d.ts +10 -0
- package/dist/body/routes.d.ts.map +1 -0
- package/dist/body/routes.js +20 -0
- package/dist/body/routes.js.map +1 -0
- package/dist/body/view.d.ts +21 -0
- package/dist/body/view.d.ts.map +1 -0
- package/dist/body/view.js +50 -0
- package/dist/body/view.js.map +1 -0
- package/dist/body/wizard.d.ts +14 -0
- package/dist/body/wizard.d.ts.map +1 -0
- package/dist/body/wizard.js +21 -0
- package/dist/body/wizard.js.map +1 -0
- package/dist/body/wizardDocs.d.ts +4 -0
- package/dist/body/wizardDocs.d.ts.map +1 -0
- package/dist/body/wizardDocs.js +260 -0
- package/dist/body/wizardDocs.js.map +1 -0
- package/dist/body/wizardPlate.d.ts +146 -0
- package/dist/body/wizardPlate.d.ts.map +1 -0
- package/dist/body/wizardPlate.js +260 -0
- package/dist/body/wizardPlate.js.map +1 -0
- package/dist/body/wizardPrompt.d.ts +52 -0
- package/dist/body/wizardPrompt.d.ts.map +1 -0
- package/dist/body/wizardPrompt.js +146 -0
- package/dist/body/wizardPrompt.js.map +1 -0
- package/dist/body/wizardUi.d.ts +11 -0
- package/dist/body/wizardUi.d.ts.map +1 -0
- package/dist/body/wizardUi.js +35 -0
- package/dist/body/wizardUi.js.map +1 -0
- package/dist/cli/cmd_read.d.ts +7 -26
- package/dist/cli/cmd_read.d.ts.map +1 -1
- package/dist/cli/cmd_read.js +68 -1084
- package/dist/cli/cmd_read.js.map +1 -1
- package/dist/cli/config.d.ts +16 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +68 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/delivery.d.ts +35 -0
- package/dist/cli/delivery.d.ts.map +1 -0
- package/dist/cli/delivery.js +224 -0
- package/dist/cli/delivery.js.map +1 -0
- package/dist/cli/health.d.ts +7 -0
- package/dist/cli/health.d.ts.map +1 -0
- package/dist/cli/health.js +21 -0
- package/dist/cli/health.js.map +1 -0
- package/dist/cli/keys.d.ts +302 -165
- package/dist/cli/keys.d.ts.map +1 -1
- package/dist/cli/keys.js +101 -77
- package/dist/cli/keys.js.map +1 -1
- package/dist/cli/readArgs.d.ts +21 -0
- package/dist/cli/readArgs.d.ts.map +1 -0
- package/dist/cli/readArgs.js +73 -0
- package/dist/cli/readArgs.js.map +1 -0
- package/dist/cli/registry.d.ts +12 -0
- package/dist/cli/registry.d.ts.map +1 -0
- package/dist/cli/registry.js +38 -0
- package/dist/cli/registry.js.map +1 -0
- package/dist/cli/write.d.ts +14 -17
- package/dist/cli/write.d.ts.map +1 -1
- package/dist/cli/write.js +18 -946
- package/dist/cli/write.js.map +1 -1
- package/dist/config.d.ts +55 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +64 -0
- package/dist/config.js.map +1 -0
- package/dist/diet/commands.d.ts +42 -0
- package/dist/diet/commands.d.ts.map +1 -0
- package/dist/diet/commands.js +45 -0
- package/dist/diet/commands.js.map +1 -0
- package/dist/diet/dietEngine.d.ts +79 -0
- package/dist/diet/dietEngine.d.ts.map +1 -0
- package/dist/diet/dietEngine.js +173 -0
- package/dist/diet/dietEngine.js.map +1 -0
- package/dist/diet/dietUi.d.ts +14 -0
- package/dist/diet/dietUi.d.ts.map +1 -0
- package/dist/diet/dietUi.js +38 -0
- package/dist/diet/dietUi.js.map +1 -0
- package/dist/diet/edit.d.ts +22 -0
- package/dist/diet/edit.d.ts.map +1 -0
- package/dist/diet/edit.js +96 -0
- package/dist/diet/edit.js.map +1 -0
- package/dist/diet/fieldLabels.d.ts +5 -0
- package/dist/diet/fieldLabels.d.ts.map +1 -0
- package/dist/diet/fieldLabels.js +44 -0
- package/dist/diet/fieldLabels.js.map +1 -0
- package/dist/diet/index.d.ts +22 -0
- package/dist/diet/index.d.ts.map +1 -0
- package/dist/diet/index.js +21 -0
- package/dist/diet/index.js.map +1 -0
- package/dist/diet/library.d.ts +20 -0
- package/dist/diet/library.d.ts.map +1 -0
- package/dist/diet/library.js +52 -0
- package/dist/diet/library.js.map +1 -0
- package/dist/diet/libraryDocs.d.ts +7 -0
- package/dist/diet/libraryDocs.d.ts.map +1 -0
- package/dist/diet/libraryDocs.js +361 -0
- package/dist/diet/libraryDocs.js.map +1 -0
- package/dist/diet/libraryPlate.d.ts +41 -0
- package/dist/diet/libraryPlate.d.ts.map +1 -0
- package/dist/diet/libraryPlate.js +57 -0
- package/dist/diet/libraryPlate.js.map +1 -0
- package/dist/diet/log.d.ts +18 -0
- package/dist/diet/log.d.ts.map +1 -0
- package/dist/diet/log.js +152 -0
- package/dist/diet/log.js.map +1 -0
- package/dist/diet/nutrition.d.ts +37 -0
- package/dist/diet/nutrition.d.ts.map +1 -0
- package/dist/diet/nutrition.js +135 -0
- package/dist/diet/nutrition.js.map +1 -0
- package/dist/diet/nutritionPort.d.ts +126 -0
- package/dist/diet/nutritionPort.d.ts.map +1 -0
- package/dist/diet/nutritionPort.js +248 -0
- package/dist/diet/nutritionPort.js.map +1 -0
- package/dist/diet/nutritionPortDocs.d.ts +106 -0
- package/dist/diet/nutritionPortDocs.d.ts.map +1 -0
- package/dist/diet/nutritionPortDocs.js +651 -0
- package/dist/diet/nutritionPortDocs.js.map +1 -0
- package/dist/diet/precheck.d.ts +7 -0
- package/dist/diet/precheck.d.ts.map +1 -0
- package/dist/diet/precheck.js +194 -0
- package/dist/diet/precheck.js.map +1 -0
- package/dist/diet/precheckLabel.d.ts +4 -0
- package/dist/diet/precheckLabel.d.ts.map +1 -0
- package/dist/diet/precheckLabel.js +191 -0
- package/dist/diet/precheckLabel.js.map +1 -0
- package/dist/diet/precheckParts.d.ts +49 -0
- package/dist/diet/precheckParts.d.ts.map +1 -0
- package/dist/diet/precheckParts.js +69 -0
- package/dist/diet/precheckParts.js.map +1 -0
- package/dist/diet/precheckPort.d.ts +82 -0
- package/dist/diet/precheckPort.d.ts.map +1 -0
- package/dist/diet/precheckPort.js +178 -0
- package/dist/diet/precheckPort.js.map +1 -0
- package/dist/diet/productImport.d.ts +28 -0
- package/dist/diet/productImport.d.ts.map +1 -0
- package/dist/diet/productImport.js +152 -0
- package/dist/diet/productImport.js.map +1 -0
- package/dist/diet/productStore.d.ts +62 -0
- package/dist/diet/productStore.d.ts.map +1 -0
- package/dist/diet/productStore.js +73 -0
- package/dist/diet/productStore.js.map +1 -0
- package/dist/diet/products.d.ts +15 -0
- package/dist/diet/products.d.ts.map +1 -0
- package/dist/diet/products.js +87 -0
- package/dist/diet/products.js.map +1 -0
- package/dist/diet/ranking.d.ts +18 -0
- package/dist/diet/ranking.d.ts.map +1 -0
- package/dist/diet/ranking.js +23 -0
- package/dist/diet/ranking.js.map +1 -0
- package/dist/diet/rankingDocs.d.ts +13 -0
- package/dist/diet/rankingDocs.d.ts.map +1 -0
- package/dist/diet/rankingDocs.js +341 -0
- package/dist/diet/rankingDocs.js.map +1 -0
- package/dist/diet/rankingPlate.d.ts +42 -0
- package/dist/diet/rankingPlate.d.ts.map +1 -0
- package/dist/diet/rankingPlate.js +96 -0
- package/dist/diet/rankingPlate.js.map +1 -0
- package/dist/diet/receipt.d.ts +34 -0
- package/dist/diet/receipt.d.ts.map +1 -0
- package/dist/diet/receipt.js +371 -0
- package/dist/diet/receipt.js.map +1 -0
- package/dist/diet/review.d.ts +36 -0
- package/dist/diet/review.d.ts.map +1 -0
- package/dist/diet/review.js +137 -0
- package/dist/diet/review.js.map +1 -0
- package/dist/diet/reviewDocs.d.ts +72 -0
- package/dist/diet/reviewDocs.d.ts.map +1 -0
- package/dist/diet/reviewDocs.js +312 -0
- package/dist/diet/reviewDocs.js.map +1 -0
- package/dist/diet/routes.d.ts +12 -0
- package/dist/diet/routes.d.ts.map +1 -0
- package/dist/diet/routes.js +108 -0
- package/dist/diet/routes.js.map +1 -0
- package/dist/diet/sourceStatsDocs.d.ts +3 -0
- package/dist/diet/sourceStatsDocs.d.ts.map +1 -0
- package/dist/diet/sourceStatsDocs.js +115 -0
- package/dist/diet/sourceStatsDocs.js.map +1 -0
- package/dist/diet/today.d.ts +14 -0
- package/dist/diet/today.d.ts.map +1 -0
- package/dist/diet/today.js +87 -0
- package/dist/diet/today.js.map +1 -0
- package/dist/diet/todayDocs.d.ts +53 -0
- package/dist/diet/todayDocs.d.ts.map +1 -0
- package/dist/diet/todayDocs.js +238 -0
- package/dist/diet/todayDocs.js.map +1 -0
- package/dist/exercise/cardio.d.ts +11 -0
- package/dist/exercise/cardio.d.ts.map +1 -0
- package/dist/exercise/cardio.js +14 -0
- package/dist/exercise/cardio.js.map +1 -0
- package/dist/exercise/categoryColors.d.ts +23 -0
- package/dist/exercise/categoryColors.d.ts.map +1 -0
- package/dist/exercise/categoryColors.js +28 -0
- package/dist/exercise/categoryColors.js.map +1 -0
- package/dist/exercise/commands.d.ts +20 -0
- package/dist/exercise/commands.d.ts.map +1 -0
- package/dist/exercise/commands.js +22 -0
- package/dist/exercise/commands.js.map +1 -0
- package/dist/exercise/distribution.d.ts +11 -0
- package/dist/exercise/distribution.d.ts.map +1 -0
- package/dist/exercise/distribution.js +14 -0
- package/dist/exercise/distribution.js.map +1 -0
- package/dist/exercise/edit.d.ts +22 -0
- package/dist/exercise/edit.d.ts.map +1 -0
- package/dist/exercise/edit.js +150 -0
- package/dist/exercise/edit.js.map +1 -0
- package/dist/exercise/exerciseStore.d.ts +87 -0
- package/dist/exercise/exerciseStore.d.ts.map +1 -0
- package/dist/exercise/exerciseStore.js +293 -0
- package/dist/exercise/exerciseStore.js.map +1 -0
- package/dist/exercise/fieldLabels.d.ts +5 -0
- package/dist/exercise/fieldLabels.d.ts.map +1 -0
- package/dist/exercise/fieldLabels.js +34 -0
- package/dist/exercise/fieldLabels.js.map +1 -0
- package/dist/exercise/goal.d.ts +16 -0
- package/dist/exercise/goal.d.ts.map +1 -0
- package/dist/exercise/goal.js +46 -0
- package/dist/exercise/goal.js.map +1 -0
- package/dist/exercise/index.d.ts +17 -0
- package/dist/exercise/index.d.ts.map +1 -0
- package/dist/exercise/index.js +17 -0
- package/dist/exercise/index.js.map +1 -0
- package/dist/exercise/log.d.ts +19 -0
- package/dist/exercise/log.d.ts.map +1 -0
- package/dist/exercise/log.js +102 -0
- package/dist/exercise/log.js.map +1 -0
- package/dist/exercise/precheck.d.ts +19 -0
- package/dist/exercise/precheck.d.ts.map +1 -0
- package/dist/exercise/precheck.js +127 -0
- package/dist/exercise/precheck.js.map +1 -0
- package/dist/exercise/recap.d.ts +11 -0
- package/dist/exercise/recap.d.ts.map +1 -0
- package/dist/exercise/recap.js +14 -0
- package/dist/exercise/recap.js.map +1 -0
- package/dist/exercise/receipt.d.ts +43 -0
- package/dist/exercise/receipt.d.ts.map +1 -0
- package/dist/exercise/receipt.js +401 -0
- package/dist/exercise/receipt.js.map +1 -0
- package/dist/exercise/records.d.ts +60 -0
- package/dist/exercise/records.d.ts.map +1 -0
- package/dist/exercise/records.js +317 -0
- package/dist/exercise/records.js.map +1 -0
- package/dist/exercise/routes.d.ts +21 -0
- package/dist/exercise/routes.d.ts.map +1 -0
- package/dist/exercise/routes.js +38 -0
- package/dist/exercise/routes.js.map +1 -0
- package/dist/exercise/sportPortDocs.d.ts +9 -0
- package/dist/exercise/sportPortDocs.d.ts.map +1 -0
- package/dist/exercise/sportPortDocs.js +896 -0
- package/dist/exercise/sportPortDocs.js.map +1 -0
- package/dist/exercise/sportUi.d.ts +79 -0
- package/dist/exercise/sportUi.d.ts.map +1 -0
- package/dist/exercise/sportUi.js +237 -0
- package/dist/exercise/sportUi.js.map +1 -0
- package/dist/exercise/strength.d.ts +11 -0
- package/dist/exercise/strength.d.ts.map +1 -0
- package/dist/exercise/strength.js +14 -0
- package/dist/exercise/strength.js.map +1 -0
- package/dist/exercise/trend.d.ts +11 -0
- package/dist/exercise/trend.d.ts.map +1 -0
- package/dist/exercise/trend.js +14 -0
- package/dist/exercise/trend.js.map +1 -0
- package/dist/fetch/audit.d.ts +2 -0
- package/dist/fetch/audit.d.ts.map +1 -1
- package/dist/fetch/audit.js +11 -10
- package/dist/fetch/audit.js.map +1 -1
- package/dist/fetch/batch.js +1 -1
- package/dist/fetch/batch.js.map +1 -1
- package/dist/fetch/body.d.ts +104 -1
- package/dist/fetch/body.d.ts.map +1 -1
- package/dist/fetch/body.js +203 -31
- package/dist/fetch/body.js.map +1 -1
- package/dist/fetch/cli.js +11 -5
- package/dist/fetch/cli.js.map +1 -1
- package/dist/fetch/diet.d.ts +6 -5
- package/dist/fetch/diet.d.ts.map +1 -1
- package/dist/fetch/diet.js +19 -25
- package/dist/fetch/diet.js.map +1 -1
- package/dist/fetch/index.d.ts +5 -7
- package/dist/fetch/index.d.ts.map +1 -1
- package/dist/fetch/index.js +7 -6
- package/dist/fetch/index.js.map +1 -1
- package/dist/fetch/profile.d.ts +24 -3
- package/dist/fetch/profile.d.ts.map +1 -1
- package/dist/fetch/profile.js +43 -14
- package/dist/fetch/profile.js.map +1 -1
- package/dist/fetch/xunji-catalog.d.ts +5 -0
- package/dist/fetch/xunji-catalog.d.ts.map +1 -1
- package/dist/fetch/xunji-catalog.js +22 -1
- package/dist/fetch/xunji-catalog.js.map +1 -1
- package/dist/goal/commands.d.ts +35 -0
- package/dist/goal/commands.d.ts.map +1 -0
- package/dist/goal/commands.js +21 -0
- package/dist/goal/commands.js.map +1 -0
- package/dist/goal/goalExtraPlate.d.ts +45 -0
- package/dist/goal/goalExtraPlate.d.ts.map +1 -0
- package/dist/goal/goalExtraPlate.js +97 -0
- package/dist/goal/goalExtraPlate.js.map +1 -0
- package/dist/goal/goalHistory.d.ts +24 -0
- package/dist/goal/goalHistory.d.ts.map +1 -0
- package/dist/goal/goalHistory.js +46 -0
- package/dist/goal/goalHistory.js.map +1 -0
- package/dist/goal/goalPlate.d.ts +24 -0
- package/dist/goal/goalPlate.d.ts.map +1 -0
- package/dist/goal/goalPlate.js +34 -0
- package/dist/goal/goalPlate.js.map +1 -0
- package/dist/goal/goalPlates.d.ts +66 -0
- package/dist/goal/goalPlates.d.ts.map +1 -0
- package/dist/goal/goalPlates.js +114 -0
- package/dist/goal/goalPlates.js.map +1 -0
- package/dist/goal/goalRecommendDoc.d.ts +6 -0
- package/dist/goal/goalRecommendDoc.d.ts.map +1 -0
- package/dist/goal/goalRecommendDoc.js +107 -0
- package/dist/goal/goalRecommendDoc.js.map +1 -0
- package/dist/goal/goalStore.d.ts +56 -0
- package/dist/goal/goalStore.d.ts.map +1 -0
- package/dist/goal/goalStore.js +111 -0
- package/dist/goal/goalStore.js.map +1 -0
- package/dist/goal/goalWeightDoc.d.ts +7 -0
- package/dist/goal/goalWeightDoc.d.ts.map +1 -0
- package/dist/goal/goalWeightDoc.js +107 -0
- package/dist/goal/goalWeightDoc.js.map +1 -0
- package/dist/goal/index.d.ts +13 -0
- package/dist/goal/index.d.ts.map +1 -0
- package/dist/goal/index.js +13 -0
- package/dist/goal/index.js.map +1 -0
- package/dist/goal/nutritionGoal.d.ts +115 -0
- package/dist/goal/nutritionGoal.d.ts.map +1 -0
- package/dist/goal/nutritionGoal.js +168 -0
- package/dist/goal/nutritionGoal.js.map +1 -0
- package/dist/goal/precheck.d.ts +14 -0
- package/dist/goal/precheck.d.ts.map +1 -0
- package/dist/goal/precheck.js +213 -0
- package/dist/goal/precheck.js.map +1 -0
- package/dist/goal/read.d.ts +53 -0
- package/dist/goal/read.d.ts.map +1 -0
- package/dist/goal/read.js +154 -0
- package/dist/goal/read.js.map +1 -0
- package/dist/goal/receipt.d.ts +38 -0
- package/dist/goal/receipt.d.ts.map +1 -0
- package/dist/goal/receipt.js +290 -0
- package/dist/goal/receipt.js.map +1 -0
- package/dist/goal/resultDocs.d.ts +23 -0
- package/dist/goal/resultDocs.d.ts.map +1 -0
- package/dist/goal/resultDocs.js +279 -0
- package/dist/goal/resultDocs.js.map +1 -0
- package/dist/goal/routes.d.ts +12 -0
- package/dist/goal/routes.d.ts.map +1 -0
- package/dist/goal/routes.js +29 -0
- package/dist/goal/routes.js.map +1 -0
- package/dist/goal/set.d.ts +97 -0
- package/dist/goal/set.d.ts.map +1 -0
- package/dist/goal/set.js +103 -0
- package/dist/goal/set.js.map +1 -0
- package/dist/goal/write.d.ts +30 -0
- package/dist/goal/write.d.ts.map +1 -0
- package/dist/goal/write.js +102 -0
- package/dist/goal/write.js.map +1 -0
- package/dist/health.d.ts +41 -0
- package/dist/health.d.ts.map +1 -0
- package/dist/health.js +501 -0
- package/dist/health.js.map +1 -0
- package/dist/help-missing.json +35 -0
- package/dist/home/commands.d.ts +11 -0
- package/dist/home/commands.d.ts.map +1 -0
- package/dist/home/commands.js +8 -0
- package/dist/home/commands.js.map +1 -0
- package/dist/home/exercise.d.ts +27 -0
- package/dist/home/exercise.d.ts.map +1 -0
- package/dist/home/exercise.js +60 -0
- package/dist/home/exercise.js.map +1 -0
- package/dist/home/goalProgressDocs.d.ts +27 -0
- package/dist/home/goalProgressDocs.d.ts.map +1 -0
- package/dist/home/goalProgressDocs.js +363 -0
- package/dist/home/goalProgressDocs.js.map +1 -0
- package/dist/home/home.d.ts +38 -0
- package/dist/home/home.d.ts.map +1 -0
- package/dist/home/home.js +78 -0
- package/dist/home/home.js.map +1 -0
- package/dist/home/homeDocs.d.ts +8 -0
- package/dist/home/homeDocs.d.ts.map +1 -0
- package/dist/home/homeDocs.js +307 -0
- package/dist/home/homeDocs.js.map +1 -0
- package/dist/home/homeViewParts.d.ts +42 -0
- package/dist/home/homeViewParts.d.ts.map +1 -0
- package/dist/home/homeViewParts.js +316 -0
- package/dist/home/homeViewParts.js.map +1 -0
- package/dist/home/index.d.ts +13 -0
- package/dist/home/index.d.ts.map +1 -0
- package/dist/home/index.js +13 -0
- package/dist/home/index.js.map +1 -0
- package/dist/home/routes.d.ts +10 -0
- package/dist/home/routes.d.ts.map +1 -0
- package/dist/home/routes.js +47 -0
- package/dist/home/routes.js.map +1 -0
- package/dist/home/today.d.ts +50 -0
- package/dist/home/today.d.ts.map +1 -0
- package/dist/home/today.js +255 -0
- package/dist/home/today.js.map +1 -0
- package/dist/index.d.ts +24 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -9
- package/dist/index.js.map +1 -1
- package/dist/migrate/migrate.js +3 -3
- package/dist/migrate/migrate.js.map +1 -1
- package/dist/output.d.ts +22 -11
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +68 -128
- package/dist/output.js.map +1 -1
- package/dist/paths.d.ts +6 -2
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +28 -17
- package/dist/paths.js.map +1 -1
- package/dist/photo/commands.d.ts +55 -0
- package/dist/photo/commands.d.ts.map +1 -0
- package/dist/photo/commands.js +25 -0
- package/dist/photo/commands.js.map +1 -0
- package/dist/photo/compare.d.ts +24 -0
- package/dist/photo/compare.d.ts.map +1 -0
- package/dist/photo/compare.js +48 -0
- package/dist/photo/compare.js.map +1 -0
- package/dist/photo/compareDoc.d.ts +5 -0
- package/dist/photo/compareDoc.d.ts.map +1 -0
- package/dist/photo/compareDoc.js +221 -0
- package/dist/photo/compareDoc.js.map +1 -0
- package/dist/photo/dir.d.ts +5 -0
- package/dist/photo/dir.d.ts.map +1 -0
- package/dist/photo/dir.js +23 -0
- package/dist/photo/dir.js.map +1 -0
- package/dist/photo/gallery.d.ts +16 -0
- package/dist/photo/gallery.d.ts.map +1 -0
- package/dist/photo/gallery.js +45 -0
- package/dist/photo/gallery.js.map +1 -0
- package/dist/photo/galleryDoc.d.ts +12 -0
- package/dist/photo/galleryDoc.d.ts.map +1 -0
- package/dist/photo/galleryDoc.js +291 -0
- package/dist/photo/galleryDoc.js.map +1 -0
- package/dist/photo/gif.d.ts +28 -0
- package/dist/photo/gif.d.ts.map +1 -0
- package/dist/photo/gif.js +281 -0
- package/dist/photo/gif.js.map +1 -0
- package/dist/photo/gifDoc.d.ts +52 -0
- package/dist/photo/gifDoc.d.ts.map +1 -0
- package/dist/photo/gifDoc.js +317 -0
- package/dist/photo/gifDoc.js.map +1 -0
- package/dist/photo/help.d.ts +4 -0
- package/dist/photo/help.d.ts.map +1 -0
- package/dist/photo/help.js +87 -0
- package/dist/photo/help.js.map +1 -0
- package/dist/photo/helpCenter.d.ts +137 -0
- package/dist/photo/helpCenter.d.ts.map +1 -0
- package/dist/photo/helpCenter.js +475 -0
- package/dist/photo/helpCenter.js.map +1 -0
- package/dist/photo/helpDoc.d.ts +5 -0
- package/dist/photo/helpDoc.d.ts.map +1 -0
- package/dist/photo/helpDoc.js +205 -0
- package/dist/photo/helpDoc.js.map +1 -0
- package/dist/photo/helpDocContent.d.ts +77 -0
- package/dist/photo/helpDocContent.d.ts.map +1 -0
- package/dist/photo/helpDocContent.js +120 -0
- package/dist/photo/helpDocContent.js.map +1 -0
- package/dist/photo/helpDocCss.d.ts +5 -0
- package/dist/photo/helpDocCss.d.ts.map +1 -0
- package/dist/photo/helpDocCss.js +119 -0
- package/dist/photo/helpDocCss.js.map +1 -0
- package/dist/photo/helpFile.d.ts +26 -0
- package/dist/photo/helpFile.d.ts.map +1 -0
- package/dist/photo/helpFile.js +90 -0
- package/dist/photo/helpFile.js.map +1 -0
- package/dist/photo/helpLookup.d.ts +18 -0
- package/dist/photo/helpLookup.d.ts.map +1 -0
- package/dist/photo/helpLookup.js +58 -0
- package/dist/photo/helpLookup.js.map +1 -0
- package/dist/photo/helpPaths.d.ts +22 -0
- package/dist/photo/helpPaths.d.ts.map +1 -0
- package/dist/photo/helpPaths.js +22 -0
- package/dist/photo/helpPaths.js.map +1 -0
- package/dist/photo/helpShell.d.ts +16 -0
- package/dist/photo/helpShell.d.ts.map +1 -0
- package/dist/photo/helpShell.js +27 -0
- package/dist/photo/helpShell.js.map +1 -0
- package/dist/photo/index.d.ts +13 -0
- package/dist/photo/index.d.ts.map +1 -0
- package/dist/photo/index.js +13 -0
- package/dist/photo/index.js.map +1 -0
- package/dist/photo/manage.d.ts +13 -0
- package/dist/photo/manage.d.ts.map +1 -0
- package/dist/photo/manage.js +64 -0
- package/dist/photo/manage.js.map +1 -0
- package/dist/photo/photo.d.ts +118 -0
- package/dist/photo/photo.d.ts.map +1 -0
- package/dist/photo/photo.js +279 -0
- package/dist/photo/photo.js.map +1 -0
- package/dist/photo/photoThumb.d.ts +38 -0
- package/dist/photo/photoThumb.d.ts.map +1 -0
- package/dist/photo/photoThumb.js +83 -0
- package/dist/photo/photoThumb.js.map +1 -0
- package/dist/photo/photoUi.d.ts +39 -0
- package/dist/photo/photoUi.d.ts.map +1 -0
- package/dist/photo/photoUi.js +233 -0
- package/dist/photo/photoUi.js.map +1 -0
- package/dist/photo/photos.d.ts +78 -0
- package/dist/photo/photos.d.ts.map +1 -0
- package/dist/photo/photos.js +194 -0
- package/dist/photo/photos.js.map +1 -0
- package/dist/photo/picker.d.ts +41 -0
- package/dist/photo/picker.d.ts.map +1 -0
- package/dist/photo/picker.js +132 -0
- package/dist/photo/picker.js.map +1 -0
- package/dist/photo/pickerDoc.d.ts +12 -0
- package/dist/photo/pickerDoc.d.ts.map +1 -0
- package/dist/photo/pickerDoc.js +231 -0
- package/dist/photo/pickerDoc.js.map +1 -0
- package/dist/photo/receipt.d.ts +23 -0
- package/dist/photo/receipt.d.ts.map +1 -0
- package/dist/photo/receipt.js +331 -0
- package/dist/photo/receipt.js.map +1 -0
- package/dist/photo/receiptUi.d.ts +42 -0
- package/dist/photo/receiptUi.d.ts.map +1 -0
- package/dist/photo/receiptUi.js +147 -0
- package/dist/photo/receiptUi.js.map +1 -0
- package/dist/photo/routes.d.ts +10 -0
- package/dist/photo/routes.d.ts.map +1 -0
- package/dist/photo/routes.js +29 -0
- package/dist/photo/routes.js.map +1 -0
- package/dist/photo/store.d.ts +10 -0
- package/dist/photo/store.d.ts.map +1 -0
- package/dist/photo/store.js +44 -0
- package/dist/photo/store.js.map +1 -0
- package/dist/photo/templates.d.ts +4 -0
- package/dist/photo/templates.d.ts.map +1 -0
- package/dist/photo/templates.js +29 -0
- package/dist/photo/templates.js.map +1 -0
- package/dist/photo/viewerDoc.d.ts +5 -0
- package/dist/photo/viewerDoc.d.ts.map +1 -0
- package/dist/photo/viewerDoc.js +255 -0
- package/dist/photo/viewerDoc.js.map +1 -0
- package/dist/photo/wizard.d.ts +15 -0
- package/dist/photo/wizard.d.ts.map +1 -0
- package/dist/photo/wizard.js +25 -0
- package/dist/photo/wizard.js.map +1 -0
- package/dist/photo/wizardPort.d.ts +70 -0
- package/dist/photo/wizardPort.d.ts.map +1 -0
- package/dist/photo/wizardPort.js +232 -0
- package/dist/photo/wizardPort.js.map +1 -0
- package/dist/photo/wizardPortDocs.d.ts +6 -0
- package/dist/photo/wizardPortDocs.d.ts.map +1 -0
- package/dist/photo/wizardPortDocs.js +322 -0
- package/dist/photo/wizardPortDocs.js.map +1 -0
- package/dist/photo/wizardUi.d.ts +24 -0
- package/dist/photo/wizardUi.d.ts.map +1 -0
- package/dist/photo/wizardUi.js +101 -0
- package/dist/photo/wizardUi.js.map +1 -0
- package/dist/profile/commands.d.ts +32 -0
- package/dist/profile/commands.d.ts.map +1 -0
- package/dist/profile/commands.js +11 -0
- package/dist/profile/commands.js.map +1 -0
- package/dist/profile/index.d.ts +17 -0
- package/dist/profile/index.d.ts.map +1 -0
- package/dist/profile/index.js +17 -0
- package/dist/profile/index.js.map +1 -0
- package/dist/profile/labels.d.ts +10 -0
- package/dist/profile/labels.d.ts.map +1 -0
- package/dist/profile/labels.js +52 -0
- package/dist/profile/labels.js.map +1 -0
- package/dist/profile/read.d.ts +13 -0
- package/dist/profile/read.d.ts.map +1 -0
- package/dist/profile/read.js +24 -0
- package/dist/profile/read.js.map +1 -0
- package/dist/profile/receipt.d.ts +10 -0
- package/dist/profile/receipt.d.ts.map +1 -0
- package/dist/profile/receipt.js +19 -0
- package/dist/profile/receipt.js.map +1 -0
- package/dist/profile/routes.d.ts +8 -0
- package/dist/profile/routes.d.ts.map +1 -0
- package/dist/profile/routes.js +9 -0
- package/dist/profile/routes.js.map +1 -0
- package/dist/profile/setup.d.ts +26 -7
- package/dist/profile/setup.d.ts.map +1 -1
- package/dist/profile/setup.js +184 -78
- package/dist/profile/setup.js.map +1 -1
- package/dist/profile/update.d.ts +1 -1
- package/dist/profile/update.d.ts.map +1 -1
- package/dist/profile/update.js +33 -13
- package/dist/profile/update.js.map +1 -1
- package/dist/profile/view.d.ts +35 -4
- package/dist/profile/view.d.ts.map +1 -1
- package/dist/profile/view.js +132 -22
- package/dist/profile/view.js.map +1 -1
- package/dist/profile/write.d.ts +16 -0
- package/dist/profile/write.d.ts.map +1 -0
- package/dist/profile/write.js +75 -0
- package/dist/profile/write.js.map +1 -0
- package/dist/render/analysisPlate.d.ts +4 -4
- package/dist/render/analysisPlate.d.ts.map +1 -1
- package/dist/render/analysisPlate.js +5 -22
- package/dist/render/analysisPlate.js.map +1 -1
- package/dist/render/diet.d.ts +10 -6
- package/dist/render/diet.d.ts.map +1 -1
- package/dist/render/diet.js +8 -23
- package/dist/render/diet.js.map +1 -1
- package/dist/render/dietDocs.d.ts +19 -19
- package/dist/render/dietDocs.d.ts.map +1 -1
- package/dist/render/dietDocs.js +158 -457
- package/dist/render/dietDocs.js.map +1 -1
- package/dist/render/exercisePort.d.ts +4 -2
- package/dist/render/exercisePort.d.ts.map +1 -1
- package/dist/render/exercisePort.js +4 -3
- package/dist/render/exercisePort.js.map +1 -1
- package/dist/render/goalExtra.d.ts.map +1 -1
- package/dist/render/goalExtra.js +2 -1
- package/dist/render/goalExtra.js.map +1 -1
- package/dist/render/goalPlate.d.ts +2 -2
- package/dist/render/goalPlate.d.ts.map +1 -1
- package/dist/render/goalPlate.js +3 -3
- package/dist/render/goalPlate.js.map +1 -1
- package/dist/render/helpShell.d.ts +1 -1
- package/dist/render/helpShell.d.ts.map +1 -1
- package/dist/render/html.d.ts +34 -24
- package/dist/render/html.d.ts.map +1 -1
- package/dist/render/html.js +38 -88
- package/dist/render/html.js.map +1 -1
- package/dist/render/index.d.ts +34 -33
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +30 -18
- package/dist/render/index.js.map +1 -1
- package/dist/render/insightPlate.d.ts +17 -0
- package/dist/render/insightPlate.d.ts.map +1 -1
- package/dist/render/insightPlate.js +109 -1
- package/dist/render/insightPlate.js.map +1 -1
- package/dist/render/pageChromeCss.d.ts +24 -0
- package/dist/render/pageChromeCss.d.ts.map +1 -0
- package/dist/render/pageChromeCss.js +45 -0
- package/dist/render/pageChromeCss.js.map +1 -0
- package/dist/render/planCopyBlock.d.ts +32 -0
- package/dist/render/planCopyBlock.d.ts.map +1 -0
- package/dist/render/planCopyBlock.js +34 -0
- package/dist/render/planCopyBlock.js.map +1 -0
- package/dist/render/planEditor.d.ts +94 -0
- package/dist/render/planEditor.d.ts.map +1 -0
- package/dist/render/planEditor.js +38 -0
- package/dist/render/planEditor.js.map +1 -0
- package/dist/render/planEditorCss.d.ts +13 -0
- package/dist/render/planEditorCss.d.ts.map +1 -0
- package/dist/render/planEditorCss.js +140 -0
- package/dist/render/planEditorCss.js.map +1 -0
- package/dist/render/planEditorDocs.d.ts +7 -0
- package/dist/render/planEditorDocs.d.ts.map +1 -0
- package/dist/render/planEditorDocs.js +56 -0
- package/dist/render/planEditorDocs.js.map +1 -0
- package/dist/render/planEditorPort.d.ts +45 -0
- package/dist/render/planEditorPort.d.ts.map +1 -0
- package/dist/render/planEditorPort.js +217 -0
- package/dist/render/planEditorPort.js.map +1 -0
- package/dist/render/planEditorRuntime.d.ts +15 -0
- package/dist/render/planEditorRuntime.d.ts.map +1 -0
- package/dist/render/planEditorRuntime.js +427 -0
- package/dist/render/planEditorRuntime.js.map +1 -0
- package/dist/render/planPlate.d.ts +84 -4
- package/dist/render/planPlate.d.ts.map +1 -1
- package/dist/render/planPlate.js +155 -7
- package/dist/render/planPlate.js.map +1 -1
- package/dist/render/planWizardCss.d.ts +21 -0
- package/dist/render/planWizardCss.d.ts.map +1 -0
- package/dist/render/planWizardCss.js +121 -0
- package/dist/render/planWizardCss.js.map +1 -0
- package/dist/render/planWizardDocs.d.ts +8 -0
- package/dist/render/planWizardDocs.d.ts.map +1 -0
- package/dist/render/planWizardDocs.js +151 -0
- package/dist/render/planWizardDocs.js.map +1 -0
- package/dist/render/receipt.d.ts +1 -1
- package/dist/render/receipt.d.ts.map +1 -1
- package/dist/render/receipt.js +1 -1
- package/dist/render/receipt.js.map +1 -1
- package/dist/render/sportDocs.d.ts +17 -12
- package/dist/render/sportDocs.d.ts.map +1 -1
- package/dist/render/sportDocs.js +370 -525
- package/dist/render/sportDocs.js.map +1 -1
- package/dist/render/sportPortDocs.d.ts +3 -2
- package/dist/render/sportPortDocs.d.ts.map +1 -1
- package/dist/render/sportPortDocs.js +810 -389
- package/dist/render/sportPortDocs.js.map +1 -1
- package/dist/render/trendDocs.d.ts +16 -6
- package/dist/render/trendDocs.d.ts.map +1 -1
- package/dist/render/trendDocs.js +293 -252
- package/dist/render/trendDocs.js.map +1 -1
- package/dist/render/trendMiscPort.d.ts +9 -24
- package/dist/render/trendMiscPort.d.ts.map +1 -1
- package/dist/render/trendMiscPort.js +13 -34
- package/dist/render/trendMiscPort.js.map +1 -1
- package/dist/render/trendMiscPortDocs.d.ts +1 -2
- package/dist/render/trendMiscPortDocs.d.ts.map +1 -1
- package/dist/render/trendMiscPortDocs.js +256 -107
- package/dist/render/trendMiscPortDocs.js.map +1 -1
- package/dist/render/trendPredictDocs.d.ts +16 -0
- package/dist/render/trendPredictDocs.d.ts.map +1 -0
- package/dist/render/trendPredictDocs.js +1131 -0
- package/dist/render/trendPredictDocs.js.map +1 -0
- package/dist/render/wizardPort.d.ts +9 -62
- package/dist/render/wizardPort.d.ts.map +1 -1
- package/dist/render/wizardPort.js +20 -180
- package/dist/render/wizardPort.js.map +1 -1
- package/dist/render/wizardPortDocs.d.ts +5 -5
- package/dist/render/wizardPortDocs.d.ts.map +1 -1
- package/dist/render/wizardPortDocs.js +273 -215
- package/dist/render/wizardPortDocs.js.map +1 -1
- package/dist/render/workoutMovementTable.d.ts +10 -0
- package/dist/render/workoutMovementTable.d.ts.map +1 -0
- package/dist/render/workoutMovementTable.js +153 -0
- package/dist/render/workoutMovementTable.js.map +1 -0
- package/dist/render/workoutPlanCss.d.ts +15 -0
- package/dist/render/workoutPlanCss.d.ts.map +1 -0
- package/dist/render/workoutPlanCss.js +217 -0
- package/dist/render/workoutPlanCss.js.map +1 -0
- package/dist/render/workoutPlanDocs.d.ts +23 -0
- package/dist/render/workoutPlanDocs.d.ts.map +1 -0
- package/dist/render/workoutPlanDocs.js +244 -0
- package/dist/render/workoutPlanDocs.js.map +1 -0
- package/dist/render/workoutPlanLook.d.ts +16 -0
- package/dist/render/workoutPlanLook.d.ts.map +1 -0
- package/dist/render/workoutPlanLook.js +135 -0
- package/dist/render/workoutPlanLook.js.map +1 -0
- package/dist/shared/alive.d.ts +22 -0
- package/dist/shared/alive.d.ts.map +1 -0
- package/dist/shared/alive.js +22 -0
- package/dist/shared/alive.js.map +1 -0
- package/dist/shared/commandSpec.d.ts +83 -0
- package/dist/shared/commandSpec.d.ts.map +1 -0
- package/dist/shared/commandSpec.js +2 -0
- package/dist/shared/commandSpec.js.map +1 -0
- package/dist/shared/conclusionLine.d.ts +3 -0
- package/dist/shared/conclusionLine.d.ts.map +1 -0
- package/dist/shared/conclusionLine.js +21 -0
- package/dist/shared/conclusionLine.js.map +1 -0
- package/dist/shared/contentSuffix.d.ts +17 -0
- package/dist/shared/contentSuffix.d.ts.map +1 -0
- package/dist/shared/contentSuffix.js +125 -0
- package/dist/shared/contentSuffix.js.map +1 -0
- package/dist/shared/copyArea.d.ts +30 -11
- package/dist/shared/copyArea.d.ts.map +1 -1
- package/dist/shared/copyArea.js +68 -13
- package/dist/shared/copyArea.js.map +1 -1
- package/dist/shared/copyBlock.d.ts +4 -0
- package/dist/shared/copyBlock.d.ts.map +1 -0
- package/dist/shared/copyBlock.js +26 -0
- package/dist/shared/copyBlock.js.map +1 -0
- package/dist/shared/docPage.d.ts +26 -4
- package/dist/shared/docPage.d.ts.map +1 -1
- package/dist/shared/docPage.js +84 -10
- package/dist/shared/docPage.js.map +1 -1
- package/dist/shared/emptyGuide.d.ts +9 -0
- package/dist/shared/emptyGuide.d.ts.map +1 -0
- package/dist/shared/emptyGuide.js +31 -0
- package/dist/shared/emptyGuide.js.map +1 -0
- package/dist/shared/fieldLabel.d.ts +5 -0
- package/dist/shared/fieldLabel.d.ts.map +1 -0
- package/dist/shared/fieldLabel.js +42 -0
- package/dist/shared/fieldLabel.js.map +1 -0
- package/dist/shared/healthRate.d.ts +21 -0
- package/dist/shared/healthRate.d.ts.map +1 -0
- package/dist/shared/healthRate.js +21 -0
- package/dist/shared/healthRate.js.map +1 -0
- package/dist/shared/kcalPerKg.d.ts +16 -0
- package/dist/shared/kcalPerKg.d.ts.map +1 -0
- package/dist/shared/kcalPerKg.js +16 -0
- package/dist/shared/kcalPerKg.js.map +1 -0
- package/dist/shared/meal.d.ts +46 -0
- package/dist/shared/meal.d.ts.map +1 -0
- package/dist/shared/meal.js +75 -0
- package/dist/shared/meal.js.map +1 -0
- package/dist/shared/nutritionRange.d.ts +28 -0
- package/dist/shared/nutritionRange.d.ts.map +1 -0
- package/dist/shared/nutritionRange.js +28 -0
- package/dist/shared/nutritionRange.js.map +1 -0
- package/dist/shared/operationHead.d.ts +21 -0
- package/dist/shared/operationHead.d.ts.map +1 -0
- package/dist/shared/operationHead.js +73 -0
- package/dist/shared/operationHead.js.map +1 -0
- package/dist/shared/pageKit.d.ts +25 -0
- package/dist/shared/pageKit.d.ts.map +1 -0
- package/dist/shared/pageKit.js +56 -0
- package/dist/shared/pageKit.js.map +1 -0
- package/dist/shared/pageStrips.d.ts +81 -0
- package/dist/shared/pageStrips.d.ts.map +1 -0
- package/dist/shared/pageStrips.js +166 -0
- package/dist/shared/pageStrips.js.map +1 -0
- package/dist/shared/params.d.ts +54 -0
- package/dist/shared/params.d.ts.map +1 -0
- package/dist/shared/params.js +176 -0
- package/dist/shared/params.js.map +1 -0
- package/dist/shared/planCopyBlock.d.ts +32 -0
- package/dist/shared/planCopyBlock.d.ts.map +1 -0
- package/dist/shared/planCopyBlock.js +34 -0
- package/dist/shared/planCopyBlock.js.map +1 -0
- package/dist/shared/receiptParts.d.ts +9 -0
- package/dist/shared/receiptParts.d.ts.map +1 -0
- package/dist/shared/receiptParts.js +40 -0
- package/dist/shared/receiptParts.js.map +1 -0
- package/dist/shared/sceneEnvelope.d.ts +32 -0
- package/dist/shared/sceneEnvelope.d.ts.map +1 -0
- package/dist/shared/sceneEnvelope.js +12 -0
- package/dist/shared/sceneEnvelope.js.map +1 -0
- package/dist/shared/sourceLine.d.ts +10 -0
- package/dist/shared/sourceLine.d.ts.map +1 -0
- package/dist/shared/sourceLine.js +39 -0
- package/dist/shared/sourceLine.js.map +1 -0
- package/dist/shared/time.d.ts +28 -0
- package/dist/shared/time.d.ts.map +1 -0
- package/dist/shared/time.js +37 -0
- package/dist/shared/time.js.map +1 -0
- package/dist/shared/writeParts.d.ts +61 -0
- package/dist/shared/writeParts.d.ts.map +1 -0
- package/dist/shared/writeParts.js +79 -0
- package/dist/shared/writeParts.js.map +1 -0
- package/dist/triggers/help-lookup.d.ts +41 -5
- package/dist/triggers/help-lookup.d.ts.map +1 -1
- package/dist/triggers/help-lookup.js +100 -51
- package/dist/triggers/help-lookup.js.map +1 -1
- package/dist/triggers/index.js +1 -1
- package/dist/triggers/routeSpec.d.ts +66 -0
- package/dist/triggers/routeSpec.d.ts.map +1 -0
- package/dist/triggers/routeSpec.js +21 -0
- package/dist/triggers/routeSpec.js.map +1 -0
- package/dist/triggers/routes.generated.d.ts +17 -0
- package/dist/triggers/routes.generated.d.ts.map +1 -0
- package/dist/triggers/routes.generated.js +519 -0
- package/dist/triggers/routes.generated.js.map +1 -0
- package/dist/triggers/routing.d.ts +11 -34
- package/dist/triggers/routing.d.ts.map +1 -1
- package/dist/triggers/routing.js +12 -528
- package/dist/triggers/routing.js.map +1 -1
- package/dist/triggers/scene-01-home.js +9 -9
- package/dist/triggers/scene-01-home.js.map +1 -1
- package/dist/triggers/scene-02-diet.js +62 -62
- package/dist/triggers/scene-02-diet.js.map +1 -1
- package/dist/triggers/scene-03-weight.js +54 -54
- package/dist/triggers/scene-03-weight.js.map +1 -1
- package/dist/triggers/scene-04-exercise.js +33 -33
- package/dist/triggers/scene-04-exercise.js.map +1 -1
- package/dist/triggers/scene-05-workout.js +32 -32
- package/dist/triggers/scene-05-workout.js.map +1 -1
- package/dist/triggers/scene-06-goal.d.ts +1 -1
- package/dist/triggers/scene-06-goal.d.ts.map +1 -1
- package/dist/triggers/scene-06-goal.js +25 -24
- package/dist/triggers/scene-06-goal.js.map +1 -1
- package/dist/triggers/scene-07-profile.js +1 -1
- package/dist/triggers/scene-07-profile.js.map +1 -1
- package/dist/triggers/scene-08-body.js +10 -10
- package/dist/triggers/scene-08-body.js.map +1 -1
- package/dist/triggers/scene-09-photo.js +10 -10
- package/dist/triggers/scene-09-photo.js.map +1 -1
- package/dist/triggers/scene-10-analysis.js +176 -176
- package/dist/triggers/scene-10-analysis.js.map +1 -1
- package/dist/triggers/wake-assets.d.ts.map +1 -1
- package/dist/triggers/wake-assets.js +21 -11
- package/dist/triggers/wake-assets.js.map +1 -1
- package/dist/weight/commands.d.ts +24 -0
- package/dist/weight/commands.d.ts.map +1 -0
- package/dist/weight/commands.js +19 -0
- package/dist/weight/commands.js.map +1 -0
- package/dist/weight/compare.d.ts +60 -0
- package/dist/weight/compare.d.ts.map +1 -0
- package/dist/weight/compare.js +570 -0
- package/dist/weight/compare.js.map +1 -0
- package/dist/weight/edit.d.ts +13 -0
- package/dist/weight/edit.d.ts.map +1 -0
- package/dist/weight/edit.js +87 -0
- package/dist/weight/edit.js.map +1 -0
- package/dist/weight/fieldLabels.d.ts +5 -0
- package/dist/weight/fieldLabels.d.ts.map +1 -0
- package/dist/weight/fieldLabels.js +23 -0
- package/dist/weight/fieldLabels.js.map +1 -0
- package/dist/weight/figures.d.ts +87 -0
- package/dist/weight/figures.d.ts.map +1 -0
- package/dist/weight/figures.js +221 -0
- package/dist/weight/figures.js.map +1 -0
- package/dist/weight/history.d.ts +85 -0
- package/dist/weight/history.d.ts.map +1 -0
- package/dist/weight/history.js +771 -0
- package/dist/weight/history.js.map +1 -0
- package/dist/weight/index.d.ts +21 -0
- package/dist/weight/index.d.ts.map +1 -0
- package/dist/weight/index.js +20 -0
- package/dist/weight/index.js.map +1 -0
- package/dist/weight/log.d.ts +40 -0
- package/dist/weight/log.d.ts.map +1 -0
- package/dist/weight/log.js +355 -0
- package/dist/weight/log.js.map +1 -0
- package/dist/weight/logReceipt.d.ts +28 -0
- package/dist/weight/logReceipt.d.ts.map +1 -0
- package/dist/weight/logReceipt.js +259 -0
- package/dist/weight/logReceipt.js.map +1 -0
- package/dist/weight/plate.d.ts +77 -0
- package/dist/weight/plate.d.ts.map +1 -0
- package/dist/weight/plate.js +60 -0
- package/dist/weight/plate.js.map +1 -0
- package/dist/weight/plateDocs.d.ts +83 -0
- package/dist/weight/plateDocs.d.ts.map +1 -0
- package/dist/weight/plateDocs.js +179 -0
- package/dist/weight/plateDocs.js.map +1 -0
- package/dist/weight/receipt.d.ts +23 -0
- package/dist/weight/receipt.d.ts.map +1 -0
- package/dist/weight/receipt.js +178 -0
- package/dist/weight/receipt.js.map +1 -0
- package/dist/weight/records.d.ts +109 -0
- package/dist/weight/records.d.ts.map +1 -0
- package/dist/weight/records.js +212 -0
- package/dist/weight/records.js.map +1 -0
- package/dist/weight/review.d.ts +114 -0
- package/dist/weight/review.d.ts.map +1 -0
- package/dist/weight/review.js +651 -0
- package/dist/weight/review.js.map +1 -0
- package/dist/weight/routes.d.ts +7 -0
- package/dist/weight/routes.d.ts.map +1 -0
- package/dist/weight/routes.js +68 -0
- package/dist/weight/routes.js.map +1 -0
- package/dist/weight/volatility.d.ts +78 -0
- package/dist/weight/volatility.d.ts.map +1 -0
- package/dist/weight/volatility.js +203 -0
- package/dist/weight/volatility.js.map +1 -0
- package/dist/weight/volatilityDoc.d.ts +10 -0
- package/dist/weight/volatilityDoc.d.ts.map +1 -0
- package/dist/weight/volatilityDoc.js +395 -0
- package/dist/weight/volatilityDoc.js.map +1 -0
- package/dist/weight/weightCompare.d.ts +70 -0
- package/dist/weight/weightCompare.d.ts.map +1 -0
- package/dist/weight/weightCompare.js +221 -0
- package/dist/weight/weightCompare.js.map +1 -0
- package/dist/weight/weightCompare2.d.ts +66 -0
- package/dist/weight/weightCompare2.d.ts.map +1 -0
- package/dist/weight/weightCompare2.js +218 -0
- package/dist/weight/weightCompare2.js.map +1 -0
- package/dist/weight/weightCompare3.d.ts +18 -0
- package/dist/weight/weightCompare3.d.ts.map +1 -0
- package/dist/weight/weightCompare3.js +222 -0
- package/dist/weight/weightCompare3.js.map +1 -0
- package/dist/weight/weightUi.d.ts +126 -0
- package/dist/weight/weightUi.d.ts.map +1 -0
- package/dist/weight/weightUi.js +226 -0
- package/dist/weight/weightUi.js.map +1 -0
- package/dist/workout/commands.d.ts +43 -0
- package/dist/workout/commands.d.ts.map +1 -0
- package/dist/workout/commands.js +36 -0
- package/dist/workout/commands.js.map +1 -0
- package/dist/workout/contraindication.d.ts +11 -0
- package/dist/workout/contraindication.d.ts.map +1 -0
- package/dist/workout/contraindication.js +11 -0
- package/dist/workout/contraindication.js.map +1 -0
- package/dist/workout/dayPhrase.d.ts +13 -0
- package/dist/workout/dayPhrase.d.ts.map +1 -0
- package/dist/workout/dayPhrase.js +15 -0
- package/dist/workout/dayPhrase.js.map +1 -0
- package/dist/workout/fieldLabels.d.ts +5 -0
- package/dist/workout/fieldLabels.d.ts.map +1 -0
- package/dist/workout/fieldLabels.js +45 -0
- package/dist/workout/fieldLabels.js.map +1 -0
- package/dist/workout/index.d.ts +21 -0
- package/dist/workout/index.d.ts.map +1 -0
- package/dist/workout/index.js +20 -0
- package/dist/workout/index.js.map +1 -0
- package/dist/workout/land.d.ts +45 -0
- package/dist/workout/land.d.ts.map +1 -0
- package/dist/workout/land.js +280 -0
- package/dist/workout/land.js.map +1 -0
- package/dist/workout/landBatch.d.ts +62 -0
- package/dist/workout/landBatch.d.ts.map +1 -0
- package/dist/workout/landBatch.js +227 -0
- package/dist/workout/landBatch.js.map +1 -0
- package/dist/workout/landBatchPages.d.ts +31 -0
- package/dist/workout/landBatchPages.d.ts.map +1 -0
- package/dist/workout/landBatchPages.js +111 -0
- package/dist/workout/landBatchPages.js.map +1 -0
- package/dist/workout/landPages.d.ts +41 -0
- package/dist/workout/landPages.d.ts.map +1 -0
- package/dist/workout/landPages.js +132 -0
- package/dist/workout/landPages.js.map +1 -0
- package/dist/workout/landRunner.d.ts +40 -0
- package/dist/workout/landRunner.d.ts.map +1 -0
- package/dist/workout/landRunner.js +134 -0
- package/dist/workout/landRunner.js.map +1 -0
- package/dist/workout/movementType.d.ts +14 -0
- package/dist/workout/movementType.d.ts.map +1 -0
- package/dist/workout/movementType.js +16 -0
- package/dist/workout/movementType.js.map +1 -0
- package/dist/workout/plan.d.ts +21 -0
- package/dist/workout/plan.d.ts.map +1 -0
- package/dist/workout/plan.js +44 -0
- package/dist/workout/plan.js.map +1 -0
- package/dist/workout/planCopyBlock.d.ts +9 -0
- package/dist/workout/planCopyBlock.d.ts.map +1 -0
- package/dist/workout/planCopyBlock.js +9 -0
- package/dist/workout/planCopyBlock.js.map +1 -0
- package/dist/workout/planEditor.d.ts +94 -0
- package/dist/workout/planEditor.d.ts.map +1 -0
- package/dist/workout/planEditor.js +38 -0
- package/dist/workout/planEditor.js.map +1 -0
- package/dist/workout/planEditorCss.d.ts +13 -0
- package/dist/workout/planEditorCss.d.ts.map +1 -0
- package/dist/workout/planEditorCss.js +140 -0
- package/dist/workout/planEditorCss.js.map +1 -0
- package/dist/workout/planEditorDocs.d.ts +7 -0
- package/dist/workout/planEditorDocs.d.ts.map +1 -0
- package/dist/workout/planEditorDocs.js +56 -0
- package/dist/workout/planEditorDocs.js.map +1 -0
- package/dist/workout/planEditorPort.d.ts +45 -0
- package/dist/workout/planEditorPort.d.ts.map +1 -0
- package/dist/workout/planEditorPort.js +217 -0
- package/dist/workout/planEditorPort.js.map +1 -0
- package/dist/workout/planEditorRuntime.d.ts +15 -0
- package/dist/workout/planEditorRuntime.d.ts.map +1 -0
- package/dist/workout/planEditorRuntime.js +427 -0
- package/dist/workout/planEditorRuntime.js.map +1 -0
- package/dist/workout/planStore.d.ts +157 -0
- package/dist/workout/planStore.d.ts.map +1 -0
- package/dist/workout/planStore.js +280 -0
- package/dist/workout/planStore.js.map +1 -0
- package/dist/workout/precheckPrompt.d.ts +7 -0
- package/dist/workout/precheckPrompt.d.ts.map +1 -0
- package/dist/workout/precheckPrompt.js +35 -0
- package/dist/workout/precheckPrompt.js.map +1 -0
- package/dist/workout/progress.d.ts +12 -0
- package/dist/workout/progress.d.ts.map +1 -0
- package/dist/workout/progress.js +16 -0
- package/dist/workout/progress.js.map +1 -0
- package/dist/workout/receipt.d.ts +15 -0
- package/dist/workout/receipt.d.ts.map +1 -0
- package/dist/workout/receipt.js +128 -0
- package/dist/workout/receipt.js.map +1 -0
- package/dist/workout/review.d.ts +12 -0
- package/dist/workout/review.d.ts.map +1 -0
- package/dist/workout/review.js +15 -0
- package/dist/workout/review.js.map +1 -0
- package/dist/workout/reviewDocs.d.ts +3 -0
- package/dist/workout/reviewDocs.d.ts.map +1 -0
- package/dist/workout/reviewDocs.js +222 -0
- package/dist/workout/reviewDocs.js.map +1 -0
- package/dist/workout/reviewDocsCss.d.ts +5 -0
- package/dist/workout/reviewDocsCss.d.ts.map +1 -0
- package/dist/workout/reviewDocsCss.js +128 -0
- package/dist/workout/reviewDocsCss.js.map +1 -0
- package/dist/workout/routes.d.ts +13 -0
- package/dist/workout/routes.d.ts.map +1 -0
- package/dist/workout/routes.js +49 -0
- package/dist/workout/routes.js.map +1 -0
- package/dist/workout/wizard.d.ts +14 -0
- package/dist/workout/wizard.d.ts.map +1 -0
- package/dist/workout/wizard.js +20 -0
- package/dist/workout/wizard.js.map +1 -0
- package/dist/workout/write.d.ts +78 -0
- package/dist/workout/write.d.ts.map +1 -0
- package/dist/workout/write.js +607 -0
- package/dist/workout/write.js.map +1 -0
- package/dist/workout/xunjiBackfill.d.ts +36 -0
- package/dist/workout/xunjiBackfill.d.ts.map +1 -0
- package/dist/workout/xunjiBackfill.js +177 -0
- package/dist/workout/xunjiBackfill.js.map +1 -0
- package/dist/workout/xunjiPush.d.ts +33 -0
- package/dist/workout/xunjiPush.d.ts.map +1 -0
- package/dist/workout/xunjiPush.js +215 -0
- package/dist/workout/xunjiPush.js.map +1 -0
- package/dist/workout/xunjiRunner.d.ts +35 -0
- package/dist/workout/xunjiRunner.d.ts.map +1 -0
- package/dist/workout/xunjiRunner.js +110 -0
- package/dist/workout/xunjiRunner.js.map +1 -0
- package/dist/xunji/backfill.d.ts +65 -0
- package/dist/xunji/backfill.d.ts.map +1 -0
- package/dist/xunji/backfill.js +156 -0
- package/dist/xunji/backfill.js.map +1 -0
- package/dist/xunji/catalog.d.ts +55 -0
- package/dist/xunji/catalog.d.ts.map +1 -0
- package/dist/xunji/catalog.js +132 -0
- package/dist/xunji/catalog.js.map +1 -0
- package/dist/xunji/cli.d.ts +3 -0
- package/dist/xunji/cli.d.ts.map +1 -0
- package/dist/xunji/cli.js +15 -0
- package/dist/xunji/cli.js.map +1 -0
- package/dist/xunji/exitMap.d.ts +37 -0
- package/dist/xunji/exitMap.d.ts.map +1 -0
- package/dist/xunji/exitMap.js +42 -0
- package/dist/xunji/exitMap.js.map +1 -0
- package/dist/xunji/fetch.d.ts +76 -0
- package/dist/xunji/fetch.d.ts.map +1 -0
- package/dist/xunji/fetch.js +159 -0
- package/dist/xunji/fetch.js.map +1 -0
- package/dist/xunji/index.d.ts +21 -0
- package/dist/xunji/index.d.ts.map +1 -0
- package/dist/xunji/index.js +18 -0
- package/dist/xunji/index.js.map +1 -0
- package/dist/xunji/key.d.ts +37 -0
- package/dist/xunji/key.d.ts.map +1 -0
- package/dist/xunji/key.js +100 -0
- package/dist/xunji/key.js.map +1 -0
- package/dist/xunji/overlay-plan.d.ts +79 -0
- package/dist/xunji/overlay-plan.d.ts.map +1 -0
- package/dist/xunji/overlay-plan.js +145 -0
- package/dist/xunji/overlay-plan.js.map +1 -0
- package/dist/xunji/planSource.d.ts +40 -0
- package/dist/xunji/planSource.d.ts.map +1 -0
- package/dist/xunji/planSource.js +78 -0
- package/dist/xunji/planSource.js.map +1 -0
- package/dist/xunji/push.d.ts +55 -0
- package/dist/xunji/push.d.ts.map +1 -0
- package/dist/xunji/push.js +69 -0
- package/dist/xunji/push.js.map +1 -0
- package/dist/xunji/rateLimit.d.ts +49 -0
- package/dist/xunji/rateLimit.d.ts.map +1 -0
- package/dist/xunji/rateLimit.js +108 -0
- package/dist/xunji/rateLimit.js.map +1 -0
- package/dist/xunji/request.d.ts +48 -0
- package/dist/xunji/request.d.ts.map +1 -0
- package/dist/xunji/request.js +60 -0
- package/dist/xunji/request.js.map +1 -0
- package/dist/xunji/retry.d.ts +50 -0
- package/dist/xunji/retry.d.ts.map +1 -0
- package/dist/xunji/retry.js +106 -0
- package/dist/xunji/retry.js.map +1 -0
- package/dist/xunji/rows.d.ts +32 -0
- package/dist/xunji/rows.d.ts.map +1 -0
- package/dist/xunji/rows.js +74 -0
- package/dist/xunji/rows.js.map +1 -0
- package/dist/xunji/run-sync.d.ts +106 -0
- package/dist/xunji/run-sync.d.ts.map +1 -0
- package/dist/xunji/run-sync.js +223 -0
- package/dist/xunji/run-sync.js.map +1 -0
- package/dist/xunji/run.d.ts +54 -0
- package/dist/xunji/run.d.ts.map +1 -0
- package/dist/xunji/run.js +300 -0
- package/dist/xunji/run.js.map +1 -0
- package/dist/xunji/store.d.ts +31 -0
- package/dist/xunji/store.d.ts.map +1 -0
- package/dist/xunji/store.js +60 -0
- package/dist/xunji/store.js.map +1 -0
- package/dist/xunji/subcommands.d.ts +64 -0
- package/dist/xunji/subcommands.d.ts.map +1 -0
- package/dist/xunji/subcommands.js +202 -0
- package/dist/xunji/subcommands.js.map +1 -0
- package/dist/xunji/upsert.d.ts +61 -0
- package/dist/xunji/upsert.d.ts.map +1 -0
- package/dist/xunji/upsert.js +100 -0
- package/dist/xunji/upsert.js.map +1 -0
- package/package.json +6 -9
- package/src/xunji/data//350/256/255/350/256/260/345/256/230/346/226/271/345/212/250/344/275/234.json +1099 -0
- package/templates/help.html +1 -1
- package/workflows/08-/350/272/253/344/275/223/347/273/206/350/212/202.md +60 -0
- package/workflows/09-/350/272/253/346/235/220/347/205/247/347/211/207.md +98 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/** 推送限频:45 秒常量(唯一定义地)+ 窗口判定 + 跨进程节流器。
|
|
2
|
+
*
|
|
3
|
+
* 老口径(只读参照 `xunji_bridge/push.py:29`、`push.py:156-158`、`run_sync.py:178-190`):
|
|
4
|
+
* - 常量 `RATE_LIMIT_SECONDS = 45`(老 `push.py:29`,注释“训记写 API 限频要求(应用层策略)”);
|
|
5
|
+
* - 老实现只守“同一天内第 2 个 session 起”(`push.py:156-158` 的 `if i > 0`),跨天不守
|
|
6
|
+
* (`run-sync` 逐天起子进程,天与天之间无 sleep)、`--dry-run` 不守、`overlay` 不守。
|
|
7
|
+
*
|
|
8
|
+
* 本票决议(票面点名“本票内定并写进口径”):
|
|
9
|
+
* - **按段逐个守**:每次 upsert 调用前都看“距上次 upsert 过去了多久”,窗口内先睡够再调
|
|
10
|
+
* (老行为“睡够再调”保留,见 `push.py:157-158`;`--dry-run` 仍不守不记,老 `:156` 同述);
|
|
11
|
+
* - **跨天/跨进程也守**(把“跨天不守”当缺陷修掉):上次调用时刻落在盘上状态文件里,
|
|
12
|
+
* 不同进程的两次 `push-plan` 照样排开(老读侧已有同法先例:`auth.py:40` 的
|
|
13
|
+
* `~/.mavis/xunji_bridge_rate.json` 跨进程状态);
|
|
14
|
+
* - 时钟/睡眠/状态文件**全可注入**:生产走真实时间与 `<状态目录>/xunji_push_rate.json`
|
|
15
|
+
* (状态目录=配置 `xunji.stateDir`,空=`~/.mavis`;见 `xunjiStateDir()`),
|
|
16
|
+
* 测试一律注入(不许睡真 45 秒,更不许碰真机状态文件)。
|
|
17
|
+
*/
|
|
18
|
+
import { homedir } from 'node:os';
|
|
19
|
+
import { dirname, join } from 'node:path';
|
|
20
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
|
|
21
|
+
import { loadCalorieConfig } from '../config.js';
|
|
22
|
+
/** 训记写接口限频窗口(秒)。老 `push.py:29` 同值;全模块只此一处,别处引用。 */
|
|
23
|
+
export const RATE_LIMIT_SECONDS = 45;
|
|
24
|
+
/** 状态文件目录的**唯一定义地**(读侧限频/写侧限频/同步状态三份状态文件都落这儿):
|
|
25
|
+
* 配置里 `xunji.stateDir` 非空即用它,空串=老落点 `~/.mavis`(老 `auth.py:40`/`run_sync.py:32` 同路径)。
|
|
26
|
+
* #676:这里原先各自硬写 `join(homedir(), '.mavis')`,三处同式;收成一处,配置也只读一处。 */
|
|
27
|
+
export function xunjiStateDir() {
|
|
28
|
+
const configured = loadCalorieConfig().values.xunji.stateDir;
|
|
29
|
+
return configured !== '' ? configured : join(homedir(), '.mavis');
|
|
30
|
+
}
|
|
31
|
+
/** 缺省状态文件:状态目录下与读侧分开的一份(读侧是 `xunji_bridge_rate.json`,`auth.py:40`)。 */
|
|
32
|
+
export function defaultRateLimitPath() {
|
|
33
|
+
return join(xunjiStateDir(), 'xunji_push_rate.json');
|
|
34
|
+
}
|
|
35
|
+
/** 窗口内还差多少毫秒(纯函数):无历史/已出窗返 0,窗内返剩余量(>0)。 */
|
|
36
|
+
export function rateLimitWaitMs(lastCallMs, nowMs, windowSeconds = RATE_LIMIT_SECONDS) {
|
|
37
|
+
if (lastCallMs === null)
|
|
38
|
+
return 0;
|
|
39
|
+
const wait = lastCallMs + windowSeconds * 1000 - nowMs;
|
|
40
|
+
return wait > 0 ? wait : 0;
|
|
41
|
+
}
|
|
42
|
+
/** 读上次调用时刻(毫秒;文件不在/坏内容一律当“无历史”,不抛——坏文件不许堵死推送)。 */
|
|
43
|
+
function readLastCallMs(statePath) {
|
|
44
|
+
let raw;
|
|
45
|
+
try {
|
|
46
|
+
raw = readFileSync(statePath, 'utf8');
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
const parsed = JSON.parse(raw);
|
|
53
|
+
const iso = parsed?.last_upsert_iso;
|
|
54
|
+
if (typeof iso !== 'string' || iso === '')
|
|
55
|
+
return null;
|
|
56
|
+
const ms = Date.parse(iso);
|
|
57
|
+
return Number.isFinite(ms) ? ms : null;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/** 写本次调用时刻(原子写:先写 `.tmp` 再改名,老 `auth.py:218-222` 同法;写坏不抛,由调用方记备注)。 */
|
|
64
|
+
function writeLastCallMs(statePath, nowMs) {
|
|
65
|
+
try {
|
|
66
|
+
mkdirSync(dirname(statePath), { recursive: true });
|
|
67
|
+
const tmp = statePath + '.tmp';
|
|
68
|
+
writeFileSync(tmp, JSON.stringify({ last_upsert_iso: new Date(nowMs).toISOString() }, null, 2), 'utf8');
|
|
69
|
+
renameSync(tmp, statePath);
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/** 建节流器(`windowSeconds` 只供测试加速窗口换算;生产一律缺省 45 秒)。 */
|
|
77
|
+
export function createRateLimiter(deps = {}, windowSeconds = RATE_LIMIT_SECONDS) {
|
|
78
|
+
const now = deps.now ?? Date.now;
|
|
79
|
+
const sleep = deps.sleep ??
|
|
80
|
+
((ms) => new Promise((resolve) => { setTimeout(resolve, ms); }));
|
|
81
|
+
const statePath = deps.statePath === undefined ? defaultRateLimitPath() : deps.statePath;
|
|
82
|
+
let memLastMs = null;
|
|
83
|
+
let memUsed = false;
|
|
84
|
+
return {
|
|
85
|
+
async guard(dryRun) {
|
|
86
|
+
if (dryRun)
|
|
87
|
+
return { waitedMs: 0, stateSaved: true };
|
|
88
|
+
const at = now();
|
|
89
|
+
const last = statePath === null ? (memUsed ? memLastMs : null) : (readLastCallMs(statePath) ?? memLastMs);
|
|
90
|
+
const wait = rateLimitWaitMs(last, at, windowSeconds);
|
|
91
|
+
if (wait > 0)
|
|
92
|
+
await sleep(wait);
|
|
93
|
+
const stamped = now();
|
|
94
|
+
if (statePath === null) {
|
|
95
|
+
memLastMs = stamped;
|
|
96
|
+
memUsed = true;
|
|
97
|
+
return { waitedMs: wait, stateSaved: true };
|
|
98
|
+
}
|
|
99
|
+
memLastMs = stamped;
|
|
100
|
+
return { waitedMs: wait, stateSaved: writeLastCallMs(statePath, stamped) };
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/** 状态文件是否存在(测试断言“落盘了没有”用;生产不用它做判定)。 */
|
|
105
|
+
export function rateLimitStateExists(statePath) {
|
|
106
|
+
return existsSync(statePath);
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=rateLimit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rateLimit.js","sourceRoot":"","sources":["../../src/xunji/rateLimit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/** 推送请求形状:训练 session → 训记 `res[]` 项 + upsert 包体组装。
|
|
2
|
+
*
|
|
3
|
+
* 口径(严格模仿老实现,代码新写;只读参照 `xunji_bridge/push.py:81-110`、`upsert.py:90-96`):
|
|
4
|
+
* - `res[].datestr` 用传入的 `YYYY-MM-DD` 原样(**不转时间戳**);
|
|
5
|
+
* - `localid = 0`(新建;更新语义是 `overlay-plan` 那条的活,归 #610);
|
|
6
|
+
* - `start = end = 0`(避训记 BUG,老 `push.py:84-89` 注释同述);
|
|
7
|
+
* - `movements[].name` **原样上报**:推送前**不校验**动作库(老 `push.py` 不 import `catalog`;
|
|
8
|
+
* “先审计”是调用链的第一步,不是推送本身的能力);
|
|
9
|
+
* - 每条 set 写死 `done: false`,重量/次数/单位各自标量化(缺省 `"0"`/`"0"`/`"kg"`,
|
|
10
|
+
* 老 `push.py:95-100`;`weight` 缺时回退读 `load`,兼容两种库内写法)。
|
|
11
|
+
*
|
|
12
|
+
* 本件是纯函数:不读库、不调网、不读时钟——同输入必得同输出(挡板断言直接调它)。
|
|
13
|
+
*/
|
|
14
|
+
import type { PlanSessionRow } from '../workout/index.js';
|
|
15
|
+
/** 训记 `res[]` 里一条 set 的形状(上报口径,老 `push.py:95-100`)。 */
|
|
16
|
+
export interface XunjiSet {
|
|
17
|
+
readonly done: boolean;
|
|
18
|
+
readonly weight: string;
|
|
19
|
+
readonly unit: string;
|
|
20
|
+
readonly reps: string;
|
|
21
|
+
}
|
|
22
|
+
/** 训记 `res[]` 里一个 movement 的形状(上报口径:只留 `name + sets` 两键)。 */
|
|
23
|
+
export interface XunjiMovement {
|
|
24
|
+
readonly name: string;
|
|
25
|
+
readonly sets: readonly XunjiSet[];
|
|
26
|
+
}
|
|
27
|
+
/** 训记 `res[]` 的一项(一次推送的最小单位,老 `push.py:103-110` 六键)。 */
|
|
28
|
+
export interface XunjiResItem {
|
|
29
|
+
readonly datestr: string;
|
|
30
|
+
readonly localid: number;
|
|
31
|
+
readonly title: string;
|
|
32
|
+
readonly start: number;
|
|
33
|
+
readonly end: number;
|
|
34
|
+
readonly movements: readonly XunjiMovement[];
|
|
35
|
+
}
|
|
36
|
+
/** upsert 包体(老 `upsert.py:90-96` 五键;`res` 透传,本件不改它一字)。 */
|
|
37
|
+
export interface UpsertPayload {
|
|
38
|
+
readonly schema_version: 'train_open_api_v2';
|
|
39
|
+
readonly client_request_id: string;
|
|
40
|
+
readonly dry_run: boolean;
|
|
41
|
+
readonly include_full_data: boolean;
|
|
42
|
+
readonly res: readonly XunjiResItem[];
|
|
43
|
+
}
|
|
44
|
+
/** 一天里一个 session → 训记 `res[]` 一项(老 `_session_to_res`,`push.py:81-110`)。 */
|
|
45
|
+
export declare function sessionToResItem(dateStr: string, session: Pick<PlanSessionRow, 'session_label' | 'movements'>): XunjiResItem;
|
|
46
|
+
/** 组 upsert 包体(`res` 透传;调用方已备好的 `res[]` 进来是什么出去就是什么)。 */
|
|
47
|
+
export declare function buildUpsertPayload(resList: readonly XunjiResItem[], clientRequestId: string, includeFullData: boolean): UpsertPayload;
|
|
48
|
+
//# sourceMappingURL=request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/xunji/request.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAExE,uDAAuD;AACvD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,6DAA6D;AAC7D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,QAAQ,EAAE,CAAC;CACpC;AAED,wDAAwD;AACxD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,SAAS,aAAa,EAAE,CAAC;CAC9C;AAED,0DAA0D;AAC1D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,cAAc,EAAE,mBAAmB,CAAC;IAC7C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,GAAG,EAAE,SAAS,YAAY,EAAE,CAAC;CACvC;AA2BD,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,eAAe,GAAG,WAAW,CAAC,GAAG,YAAY,CAU5H;AAED,yDAAyD;AACzD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,OAAO,GACvB,aAAa,CAQf"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/** 推送请求形状:训练 session → 训记 `res[]` 项 + upsert 包体组装。
|
|
2
|
+
*
|
|
3
|
+
* 口径(严格模仿老实现,代码新写;只读参照 `xunji_bridge/push.py:81-110`、`upsert.py:90-96`):
|
|
4
|
+
* - `res[].datestr` 用传入的 `YYYY-MM-DD` 原样(**不转时间戳**);
|
|
5
|
+
* - `localid = 0`(新建;更新语义是 `overlay-plan` 那条的活,归 #610);
|
|
6
|
+
* - `start = end = 0`(避训记 BUG,老 `push.py:84-89` 注释同述);
|
|
7
|
+
* - `movements[].name` **原样上报**:推送前**不校验**动作库(老 `push.py` 不 import `catalog`;
|
|
8
|
+
* “先审计”是调用链的第一步,不是推送本身的能力);
|
|
9
|
+
* - 每条 set 写死 `done: false`,重量/次数/单位各自标量化(缺省 `"0"`/`"0"`/`"kg"`,
|
|
10
|
+
* 老 `push.py:95-100`;`weight` 缺时回退读 `load`,兼容两种库内写法)。
|
|
11
|
+
*
|
|
12
|
+
* 本件是纯函数:不读库、不调网、不读时钟——同输入必得同输出(挡板断言直接调它)。
|
|
13
|
+
*/
|
|
14
|
+
/** 任意值安全转上报串(老 `_safe_str`,`push.py:32-43`):标量转串,非标量退回缺省。 */
|
|
15
|
+
function safeStr(v, fallback) {
|
|
16
|
+
if (v === null || v === undefined)
|
|
17
|
+
return fallback;
|
|
18
|
+
if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean')
|
|
19
|
+
return String(v);
|
|
20
|
+
return fallback;
|
|
21
|
+
}
|
|
22
|
+
/** 一条库内 set → 上报 set(`done` 写死 false;`weight` 缺时回退 `load`)。 */
|
|
23
|
+
function toXunjiSet(s) {
|
|
24
|
+
const rec = (typeof s === 'object' && s !== null ? s : {});
|
|
25
|
+
const weight = 'weight' in rec && rec.weight !== undefined && rec.weight !== null ? rec.weight : rec.load;
|
|
26
|
+
return {
|
|
27
|
+
done: false,
|
|
28
|
+
weight: safeStr(weight, '0'),
|
|
29
|
+
unit: safeStr(rec.unit ?? 'kg', 'kg'),
|
|
30
|
+
reps: safeStr(rec.reps, '0'),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/** 一个库内动作 → 上报 movement(`name` 原样,只过标量化;`sets` 缺时为空表)。 */
|
|
34
|
+
function toXunjiMovement(m) {
|
|
35
|
+
const sets = Array.isArray(m.sets) ? m.sets : [];
|
|
36
|
+
return { name: safeStr(m.name ?? '', ''), sets: sets.map(toXunjiSet) };
|
|
37
|
+
}
|
|
38
|
+
/** 一天里一个 session → 训记 `res[]` 一项(老 `_session_to_res`,`push.py:81-110`)。 */
|
|
39
|
+
export function sessionToResItem(dateStr, session) {
|
|
40
|
+
const movements = Array.isArray(session.movements) ? session.movements : [];
|
|
41
|
+
return {
|
|
42
|
+
datestr: dateStr,
|
|
43
|
+
localid: 0,
|
|
44
|
+
title: session.session_label ?? '',
|
|
45
|
+
start: 0,
|
|
46
|
+
end: 0,
|
|
47
|
+
movements: movements.map(toXunjiMovement),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/** 组 upsert 包体(`res` 透传;调用方已备好的 `res[]` 进来是什么出去就是什么)。 */
|
|
51
|
+
export function buildUpsertPayload(resList, clientRequestId, includeFullData) {
|
|
52
|
+
return {
|
|
53
|
+
schema_version: 'train_open_api_v2',
|
|
54
|
+
client_request_id: clientRequestId,
|
|
55
|
+
dry_run: false,
|
|
56
|
+
include_full_data: includeFullData,
|
|
57
|
+
res: resList,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/xunji/request.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAqCH,6DAA6D;AAC7D,SAAS,OAAO,CAAC,CAAU,EAAE,QAAgB;IAC3C,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACnD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/F,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,+DAA+D;AAC/D,SAAS,UAAU,CAAC,CAAU;IAC5B,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IACtF,MAAM,MAAM,GAAG,QAAQ,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IAC1G,OAAO;QACL,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;QAC5B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI,CAAC;QACrC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;KAC7B,CAAC;AACJ,CAAC;AAED,0DAA0D;AAC1D,SAAS,eAAe,CAAC,CAAe;IACtC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,OAA4D;IAC5G,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE;QAClC,KAAK,EAAE,CAAC;QACR,GAAG,EAAE,CAAC;QACN,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,kBAAkB,CAChC,OAAgC,EAChC,eAAuB,EACvB,eAAwB;IAExB,OAAO;QACL,cAAc,EAAE,mBAAmB;QACnC,iBAAiB,EAAE,eAAe;QAClC,OAAO,EAAE,KAAK;QACd,iBAAiB,EAAE,eAAe;QAClC,GAAG,EAAE,OAAO;KACb,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/** 训记错误分类 + 退避重试(老 `xunji_bridge/errors.py` 的分类要点与重试口径,代码新写)。
|
|
2
|
+
*
|
|
3
|
+
* 分类(只读参照 `errors.py:39-46` 的 7 类 + `:128-180` 的判定序;本件只收推送链用得到的分支):
|
|
4
|
+
* - `auth`:HTTP 401/403,或正文含 apikey 缺失/无效(老 `:142-148`)。
|
|
5
|
+
* 注意:此 `auth` 盖两支——本地缺 KEY(无 HTTP 状态码)与服务端 401/403(有状态码);
|
|
6
|
+
* 退出码由 `exitMap.ts#exitForFailure` 按有无状态码分流(2 vs 3,老实况,#595 §八·2);
|
|
7
|
+
* - `vip_required`:正文含 仅VIP/vip required(老 `:135-140`);
|
|
8
|
+
* - `rate_limit`:HTTP 429,或正文含 too frequent/frequent(老 `:151-157`),缺省 45 秒;
|
|
9
|
+
* - `validation`:HTTP 400(老 `:160-165`);
|
|
10
|
+
* - `server`:HTTP 5xx(老 `:168-173`);
|
|
11
|
+
* - `network`:超时/连接错(老 `:109-111` 的 NETWORK;本仓超时由 `AbortController` 触发,见 `upsert.ts`);
|
|
12
|
+
* - `unknown`:其余(老 `:176-180`)。
|
|
13
|
+
* 软错误同判:HTTP 200 但 `success:false`/含 `error` 键/`res` 是 "too frequent" 串,
|
|
14
|
+
* 走同一套分类(老 `:79-103`)。
|
|
15
|
+
*
|
|
16
|
+
* 重试(老 `retry_with_backoff(max_retries=2, sleep_base=5)`,`upsert.py:134-135`):
|
|
17
|
+
* - 最多调 3 次(首调 + 2 次重试),退避 5 秒、10 秒,限频优先用服务端 `retry_after`
|
|
18
|
+
* (老 `errors.py:276-282` 的 `5, 10` 与 `retry_after` 优先);
|
|
19
|
+
* - `auth`/`vip_required`/`validation` **不重试**(老 `:270-274`,票面点名);
|
|
20
|
+
* - 睡眠可注入(测试挡板;生产真实 sleep)。
|
|
21
|
+
*/
|
|
22
|
+
/** 训记错误 7 类(老 `ErrorType`,`errors.py:39-46`)。 */
|
|
23
|
+
export type XunjiErrorKind = 'auth' | 'rate_limit' | 'vip_required' | 'validation' | 'server' | 'network' | 'unknown';
|
|
24
|
+
/** 一次失败的结构化读数(老 `classify_error` 的 5 键,`errors.py:62-70`)。 */
|
|
25
|
+
export interface XunjiFailure {
|
|
26
|
+
readonly error_type: XunjiErrorKind;
|
|
27
|
+
readonly message: string;
|
|
28
|
+
readonly retry_after: number | null;
|
|
29
|
+
readonly raw_body: unknown;
|
|
30
|
+
readonly code: number | null;
|
|
31
|
+
}
|
|
32
|
+
/** HTTP 状态 + 已解析正文 → 结构化失败(老 `_classify_by_code_and_body`,`errors.py:128-180`)。 */
|
|
33
|
+
export declare function classifyStatusBody(code: number | null, body: unknown, rawBody: unknown): XunjiFailure;
|
|
34
|
+
/** 异常(超时/连接错/JSON 解析失败)→ 结构化失败(老 `classify_error` 的 Exception 分支,`:106-117`)。 */
|
|
35
|
+
export declare function classifyThrown(e: unknown): XunjiFailure;
|
|
36
|
+
/** 2xx 正文的软错误检测(老 `:83-93`):命中即按失败走分类,否则当成功。 */
|
|
37
|
+
export declare function softFailureOf(body: unknown): XunjiFailure | null;
|
|
38
|
+
/** 单次调用的两种结局:成功透传正文,失败带结构化读数(`attempts` 只在 >1 时回写,老规矩)。 */
|
|
39
|
+
export type XunjiCallOutcome = {
|
|
40
|
+
readonly ok: true;
|
|
41
|
+
readonly response: unknown;
|
|
42
|
+
readonly attempts: number;
|
|
43
|
+
} | {
|
|
44
|
+
readonly ok: false;
|
|
45
|
+
readonly failure: XunjiFailure;
|
|
46
|
+
readonly attempts: number;
|
|
47
|
+
};
|
|
48
|
+
/** 重试包装(老 `retry_with_backoff`,`errors.py:242-295`;`call` 抛错也按失败走分类重试)。 */
|
|
49
|
+
export declare function retryWithBackoff(call: () => Promise<XunjiCallOutcome>, maxRetries?: number, sleepBaseMs?: number, sleep?: (ms: number) => Promise<void>): Promise<XunjiCallOutcome>;
|
|
50
|
+
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/xunji/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,iDAAiD;AACjD,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,YAAY,GACZ,cAAc,GACd,YAAY,GACZ,QAAQ,GACR,SAAS,GACT,SAAS,CAAC;AAEd,8DAA8D;AAC9D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAkBD,mFAAmF;AACnF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,YAAY,CAuBrG;AAED,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,GAAG,YAAY,CASvD;AAED,gDAAgD;AAChD,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAQhE;AAED,2DAA2D;AAC3D,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtF,2EAA2E;AAC3E,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,EACrC,UAAU,SAAI,EACd,WAAW,SAAO,EAClB,KAAK,GAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAwE,GAC1G,OAAO,CAAC,gBAAgB,CAAC,CAmB3B"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/** 训记错误分类 + 退避重试(老 `xunji_bridge/errors.py` 的分类要点与重试口径,代码新写)。
|
|
2
|
+
*
|
|
3
|
+
* 分类(只读参照 `errors.py:39-46` 的 7 类 + `:128-180` 的判定序;本件只收推送链用得到的分支):
|
|
4
|
+
* - `auth`:HTTP 401/403,或正文含 apikey 缺失/无效(老 `:142-148`)。
|
|
5
|
+
* 注意:此 `auth` 盖两支——本地缺 KEY(无 HTTP 状态码)与服务端 401/403(有状态码);
|
|
6
|
+
* 退出码由 `exitMap.ts#exitForFailure` 按有无状态码分流(2 vs 3,老实况,#595 §八·2);
|
|
7
|
+
* - `vip_required`:正文含 仅VIP/vip required(老 `:135-140`);
|
|
8
|
+
* - `rate_limit`:HTTP 429,或正文含 too frequent/frequent(老 `:151-157`),缺省 45 秒;
|
|
9
|
+
* - `validation`:HTTP 400(老 `:160-165`);
|
|
10
|
+
* - `server`:HTTP 5xx(老 `:168-173`);
|
|
11
|
+
* - `network`:超时/连接错(老 `:109-111` 的 NETWORK;本仓超时由 `AbortController` 触发,见 `upsert.ts`);
|
|
12
|
+
* - `unknown`:其余(老 `:176-180`)。
|
|
13
|
+
* 软错误同判:HTTP 200 但 `success:false`/含 `error` 键/`res` 是 "too frequent" 串,
|
|
14
|
+
* 走同一套分类(老 `:79-103`)。
|
|
15
|
+
*
|
|
16
|
+
* 重试(老 `retry_with_backoff(max_retries=2, sleep_base=5)`,`upsert.py:134-135`):
|
|
17
|
+
* - 最多调 3 次(首调 + 2 次重试),退避 5 秒、10 秒,限频优先用服务端 `retry_after`
|
|
18
|
+
* (老 `errors.py:276-282` 的 `5, 10` 与 `retry_after` 优先);
|
|
19
|
+
* - `auth`/`vip_required`/`validation` **不重试**(老 `:270-274`,票面点名);
|
|
20
|
+
* - 睡眠可注入(测试挡板;生产真实 sleep)。
|
|
21
|
+
*/
|
|
22
|
+
/** 不重试的三类(老 `errors.py:270-274`;本票验收点名,单列常量不断言错位)。 */
|
|
23
|
+
const NO_RETRY = new Set(['auth', 'vip_required', 'validation']);
|
|
24
|
+
/** 正文里找 `retry after Ns`(老 `_parse_retry_after` 覆盖的 `(\d+)\s*s` 那一支)。 */
|
|
25
|
+
function parseRetryAfterMs(body) {
|
|
26
|
+
const pick = (v) => (typeof v === 'string' ? v : '');
|
|
27
|
+
const text = [body]
|
|
28
|
+
.filter((b) => typeof b === 'object' && b !== null)
|
|
29
|
+
.map((b) => [pick(b.retry_after), pick(b.retryAfter), pick(b.message), pick(b.msg), pick(b.error), pick(b.res)].join(' '))
|
|
30
|
+
.join(' ');
|
|
31
|
+
const m = /(\d+)\s*s/.exec(text);
|
|
32
|
+
if (!m)
|
|
33
|
+
return null;
|
|
34
|
+
const n = Number(m[1]);
|
|
35
|
+
return Number.isFinite(n) ? n : null;
|
|
36
|
+
}
|
|
37
|
+
/** HTTP 状态 + 已解析正文 → 结构化失败(老 `_classify_by_code_and_body`,`errors.py:128-180`)。 */
|
|
38
|
+
export function classifyStatusBody(code, body, rawBody) {
|
|
39
|
+
const lowered = JSON.stringify(body ?? rawBody ?? '').toLowerCase();
|
|
40
|
+
if (lowered.includes('仅vip') || lowered.includes('vip required') || lowered.includes('仅 vip')) {
|
|
41
|
+
return { error_type: 'vip_required', message: '训记仅 VIP 可用,需要会员权限', retry_after: null, raw_body: rawBody, code };
|
|
42
|
+
}
|
|
43
|
+
if (code === 401 ||
|
|
44
|
+
code === 403 ||
|
|
45
|
+
(lowered.includes('apikey') && (lowered.includes('missing') || lowered.includes('invalid')))) {
|
|
46
|
+
return { error_type: 'auth', message: '训记 API KEY 缺失或无效', retry_after: null, raw_body: rawBody, code };
|
|
47
|
+
}
|
|
48
|
+
if (code === 429 || lowered.includes('too frequent') || lowered.includes('frequent')) {
|
|
49
|
+
const after = parseRetryAfterMs(body) ?? 45;
|
|
50
|
+
return { error_type: 'rate_limit', message: '训记限频(需等 ' + after + 's)', retry_after: after, raw_body: rawBody, code };
|
|
51
|
+
}
|
|
52
|
+
if (code === 400) {
|
|
53
|
+
return { error_type: 'validation', message: '请求字段错(400)', retry_after: null, raw_body: rawBody, code };
|
|
54
|
+
}
|
|
55
|
+
if (code !== null && code >= 500 && code < 600) {
|
|
56
|
+
return { error_type: 'server', message: '训记服务端错(' + code + ')', retry_after: null, raw_body: rawBody, code };
|
|
57
|
+
}
|
|
58
|
+
return { error_type: 'unknown', message: '未分类错误(code=' + String(code) + ')', retry_after: null, raw_body: rawBody, code };
|
|
59
|
+
}
|
|
60
|
+
/** 异常(超时/连接错/JSON 解析失败)→ 结构化失败(老 `classify_error` 的 Exception 分支,`:106-117`)。 */
|
|
61
|
+
export function classifyThrown(e) {
|
|
62
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
63
|
+
if (e instanceof Error && (e.name === 'AbortError' || e.name === 'TimeoutError' || /timed out|timeout|aborted/i.test(msg))) {
|
|
64
|
+
return { error_type: 'network', message: '训记调用超时:' + msg, retry_after: null, raw_body: msg, code: null };
|
|
65
|
+
}
|
|
66
|
+
if (/ECONN|ENOTFOUND|EAI_AGAIN|fetch failed|network/i.test(msg)) {
|
|
67
|
+
return { error_type: 'network', message: '网络错误:' + msg, retry_after: null, raw_body: msg, code: null };
|
|
68
|
+
}
|
|
69
|
+
return { error_type: 'unknown', message: '未知错误:' + msg, retry_after: null, raw_body: msg, code: null };
|
|
70
|
+
}
|
|
71
|
+
/** 2xx 正文的软错误检测(老 `:83-93`):命中即按失败走分类,否则当成功。 */
|
|
72
|
+
export function softFailureOf(body) {
|
|
73
|
+
if (typeof body !== 'object' || body === null)
|
|
74
|
+
return null;
|
|
75
|
+
const rec = body;
|
|
76
|
+
const resStr = typeof rec.res === 'string' ? rec.res : '';
|
|
77
|
+
if (rec.success === false || 'error' in rec || resStr.toLowerCase().includes('too frequent')) {
|
|
78
|
+
return classifyStatusBody(200, body, body);
|
|
79
|
+
}
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
/** 重试包装(老 `retry_with_backoff`,`errors.py:242-295`;`call` 抛错也按失败走分类重试)。 */
|
|
83
|
+
export async function retryWithBackoff(call, maxRetries = 2, sleepBaseMs = 5000, sleep = (ms) => new Promise((resolve) => { setTimeout(resolve, ms); })) {
|
|
84
|
+
let last = { ok: true, response: null, attempts: 0 };
|
|
85
|
+
for (let i = 0; i <= maxRetries; i += 1) {
|
|
86
|
+
let out;
|
|
87
|
+
try {
|
|
88
|
+
out = await call();
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
const failure = classifyThrown(e);
|
|
92
|
+
out = { ok: false, failure, attempts: i + 1 };
|
|
93
|
+
}
|
|
94
|
+
last = { ...out, attempts: i + 1 };
|
|
95
|
+
if (out.ok)
|
|
96
|
+
return last;
|
|
97
|
+
if (NO_RETRY.has(out.failure.error_type))
|
|
98
|
+
return last;
|
|
99
|
+
if (i < maxRetries) {
|
|
100
|
+
const wait = out.failure.retry_after !== null ? out.failure.retry_after * 1000 : sleepBaseMs * 2 ** i;
|
|
101
|
+
await sleep(wait);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return last;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/xunji/retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** 训记响应 → `exercise_log` 行(老 `adapters/xunji_adapter.py:xunji_response_to_rows`,代码新写)。
|
|
2
|
+
*
|
|
3
|
+
* 口径(逐条对老 `:28-69`):
|
|
4
|
+
* - 一 train 一 localid(转串)+ title + datestr;difficulty 取 train 级(老 `:35`);
|
|
5
|
+
* - 只收 `done` 的 set(老 `:38-39` 未完成不同步);
|
|
6
|
+
* - `load_kg` 走单位换算(`exerciseStore.convertLoadKg`,即老 `convert_load_kg`);
|
|
7
|
+
* - `reps` 范围串 `"12-16"` 取最大(老 `:44-48`),转坏即 0(老 `:50-53`);
|
|
8
|
+
* - 热量=容量 × 0.08(`exerciseStore.estimateCaloriesFromTraining`,即老公式);
|
|
9
|
+
* - 分类走动作名推断(`exerciseStore.inferCategory`,即老 `_infer_category`)。
|
|
10
|
+
*
|
|
11
|
+
* 本件是纯函数:不读库、不调网、不读时钟——同输入必得同输出(挡板断言直接调它)。
|
|
12
|
+
* 跨能力引用走运动门(R2 收口 #613:`exercise/index.js#exerciseBackfillBridge` 唯一缝合点,
|
|
13
|
+
* 定义仍在 `exerciseStore.ts`,本件不深引对方内部件)。
|
|
14
|
+
*/
|
|
15
|
+
/** 回写一行(`store.ts` 落库的输入形状;`setIndex` 缺时为 null)。 */
|
|
16
|
+
export interface XunjiBackfillRow {
|
|
17
|
+
readonly date: string;
|
|
18
|
+
readonly exerciseType: string;
|
|
19
|
+
readonly reps: number;
|
|
20
|
+
readonly setIndex: number | null;
|
|
21
|
+
readonly loadKg: number;
|
|
22
|
+
readonly caloriesBurned: number;
|
|
23
|
+
readonly category: string;
|
|
24
|
+
readonly difficulty: string | null;
|
|
25
|
+
readonly xunjiLocalid: string;
|
|
26
|
+
readonly xunjiTitle: string;
|
|
27
|
+
}
|
|
28
|
+
/** set 的次数:范围串取最大(老 `:44-48`),转坏即 0(老 `:50-53`)。 */
|
|
29
|
+
export declare function parseSetReps(raw: unknown): number;
|
|
30
|
+
/** 训记 GET 响应 → 回写行列表(每行一个完成的 set;形状不对即空表,不抛)。 */
|
|
31
|
+
export declare function xunjiResponseToRows(response: unknown): XunjiBackfillRow[];
|
|
32
|
+
//# sourceMappingURL=rows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../../src/xunji/rows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,oDAAoD;AACpD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAcD,oDAAoD;AACpD,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAOjD;AAMD,iDAAiD;AACjD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAkCzE"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/** 训记响应 → `exercise_log` 行(老 `adapters/xunji_adapter.py:xunji_response_to_rows`,代码新写)。
|
|
2
|
+
*
|
|
3
|
+
* 口径(逐条对老 `:28-69`):
|
|
4
|
+
* - 一 train 一 localid(转串)+ title + datestr;difficulty 取 train 级(老 `:35`);
|
|
5
|
+
* - 只收 `done` 的 set(老 `:38-39` 未完成不同步);
|
|
6
|
+
* - `load_kg` 走单位换算(`exerciseStore.convertLoadKg`,即老 `convert_load_kg`);
|
|
7
|
+
* - `reps` 范围串 `"12-16"` 取最大(老 `:44-48`),转坏即 0(老 `:50-53`);
|
|
8
|
+
* - 热量=容量 × 0.08(`exerciseStore.estimateCaloriesFromTraining`,即老公式);
|
|
9
|
+
* - 分类走动作名推断(`exerciseStore.inferCategory`,即老 `_infer_category`)。
|
|
10
|
+
*
|
|
11
|
+
* 本件是纯函数:不读库、不调网、不读时钟——同输入必得同输出(挡板断言直接调它)。
|
|
12
|
+
* 跨能力引用走运动门(R2 收口 #613:`exercise/index.js#exerciseBackfillBridge` 唯一缝合点,
|
|
13
|
+
* 定义仍在 `exerciseStore.ts`,本件不深引对方内部件)。
|
|
14
|
+
*/
|
|
15
|
+
import { exerciseBackfillBridge } from '../exercise/index.js';
|
|
16
|
+
function asRecord(v) {
|
|
17
|
+
return typeof v === 'object' && v !== null ? v : {};
|
|
18
|
+
}
|
|
19
|
+
function asList(v) {
|
|
20
|
+
return Array.isArray(v) ? v : [];
|
|
21
|
+
}
|
|
22
|
+
function asText(v, fallback) {
|
|
23
|
+
return typeof v === 'string' ? v : fallback;
|
|
24
|
+
}
|
|
25
|
+
/** set 的次数:范围串取最大(老 `:44-48`),转坏即 0(老 `:50-53`)。 */
|
|
26
|
+
export function parseSetReps(raw) {
|
|
27
|
+
if (typeof raw === 'string' && raw.includes('-')) {
|
|
28
|
+
const parts = raw.split('-').map((x) => Number(x.trim())).filter((n) => Number.isInteger(n));
|
|
29
|
+
return parts.length > 0 ? Math.max(...parts) : 0;
|
|
30
|
+
}
|
|
31
|
+
const n = Number(raw);
|
|
32
|
+
return Number.isInteger(n) ? n : 0;
|
|
33
|
+
}
|
|
34
|
+
function parseSetIndex(raw) {
|
|
35
|
+
return typeof raw === 'number' && Number.isFinite(raw) ? raw : null;
|
|
36
|
+
}
|
|
37
|
+
/** 训记 GET 响应 → 回写行列表(每行一个完成的 set;形状不对即空表,不抛)。 */
|
|
38
|
+
export function xunjiResponseToRows(response) {
|
|
39
|
+
const rows = [];
|
|
40
|
+
const trains = asList(asRecord(asRecord(response).res).trains);
|
|
41
|
+
for (const t of trains) {
|
|
42
|
+
const train = asRecord(t);
|
|
43
|
+
const localid = String(train.localid ?? '');
|
|
44
|
+
const title = asText(train.title, '');
|
|
45
|
+
const datestr = asText(train.datestr, '');
|
|
46
|
+
const rawDifficulty = train.difficulty;
|
|
47
|
+
const difficulty = typeof rawDifficulty === 'string' ? rawDifficulty : null;
|
|
48
|
+
for (const m of asList(train.movements)) {
|
|
49
|
+
const move = asRecord(m);
|
|
50
|
+
const name = asText(move.name, '');
|
|
51
|
+
for (const s of asList(move.sets)) {
|
|
52
|
+
const set = asRecord(s);
|
|
53
|
+
if (set.done !== true)
|
|
54
|
+
continue;
|
|
55
|
+
const load = exerciseBackfillBridge.convertLoadKg(set.weight ?? '0', set.unit ?? 'kg');
|
|
56
|
+
const reps = parseSetReps(set.reps ?? 0);
|
|
57
|
+
rows.push({
|
|
58
|
+
date: datestr,
|
|
59
|
+
exerciseType: name,
|
|
60
|
+
reps,
|
|
61
|
+
setIndex: parseSetIndex(set.index),
|
|
62
|
+
loadKg: load,
|
|
63
|
+
caloriesBurned: exerciseBackfillBridge.estimateCaloriesFromTraining(load * reps),
|
|
64
|
+
category: exerciseBackfillBridge.inferCategory(name),
|
|
65
|
+
difficulty,
|
|
66
|
+
xunjiLocalid: localid,
|
|
67
|
+
xunjiTitle: title,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return rows;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=rows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rows.js","sourceRoot":"","sources":["../../src/xunji/rows.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/** 一条链跑完:补计划 → 记心愿 → 推送 → 回写(老 `sync_plan.py` 四步 + `run_sync.py`,代码新写)。
|
|
2
|
+
*
|
|
3
|
+
* 口径(逐条对老):
|
|
4
|
+
* - 四步顺序固定(老 `sync_plan.py:329-332`):补计划(飞书日历)→ 记心愿(飞书 task)→
|
|
5
|
+
* 推送(串行 N 天 `push-plan`,45 秒限频)→ 回写(一次 `backfill --days N`);
|
|
6
|
+
* - 天数缺省 3、起始偏移缺省 0(今天)、`dry-run` 只建状态文件不实际跑(老 `run_sync.py:168-175`);
|
|
7
|
+
* - 状态文件与老同件名同写法(`<状态目录>/xunji_bridge_sync_state.json`,目录=配置 `xunji.stateDir`,
|
|
8
|
+
* 空=`~/.mavis`;原子写,供外部轮询;老 `run_sync.py:32/52-58`);
|
|
9
|
+
* - 推送逐天记结果、回写记汇总(老 `:184-190/:221-225` 的摘要形状)。
|
|
10
|
+
*
|
|
11
|
+
* 修掉的老缺陷(不照抄):老 `run_sync.py` 只在超时/抛错时判失败,子进程的 rc
|
|
12
|
+
* (如推送 `fail_count > 0` 退 3)只记进 `results[].rc`、不进最终状态——推送全失败
|
|
13
|
+
* 也可能 `status: completed` 退 0(`__main__:157-160` 只看 `status == "failed"`)。
|
|
14
|
+
* 新仓任一步失败即停:状态 `failed` + `failed_step` 点名哪一步(`推送 YYYY-MM-DD`/
|
|
15
|
+
* `回写`/`补计划`/`记心愿`)+ 非 0 退出(码复用 `exitMap`:无 KEY→2,其余→3,用法错→1)。
|
|
16
|
+
*
|
|
17
|
+
* 跨技能两步(补计划/记心愿)缺省跳过:作息管家/备忘录不在本仓,默认实现只记
|
|
18
|
+
* `skipped` 不算失败;#614 接线后由调用方注入真实现(见证据件过渡债务 R3)。
|
|
19
|
+
*/
|
|
20
|
+
import type { BackfillDeps } from './backfill.js';
|
|
21
|
+
import type { PushDayDeps } from './push.js';
|
|
22
|
+
import type { DayPlanSource } from './planSource.js';
|
|
23
|
+
import type { XunjiSubcommand } from './subcommands.js';
|
|
24
|
+
import type { XunjiRun } from './run.js';
|
|
25
|
+
/** 四步的代号(顺序固定:plan → wish → push → backfill)。 */
|
|
26
|
+
export type RunSyncPhase = 'plan' | 'wish' | 'push' | 'backfill';
|
|
27
|
+
/** 四步的人话名(失败点名用这四个词,`key.ts` 的 `does` 同词)。 */
|
|
28
|
+
export declare const RUN_SYNC_PHASE_LABEL: Record<RunSyncPhase, string>;
|
|
29
|
+
/** 一步的成功(含 `skipped`:没跑但不算失败,如缺省的补计划/记心愿)。 */
|
|
30
|
+
export interface RunSyncStepOk {
|
|
31
|
+
readonly ok: true;
|
|
32
|
+
readonly skipped?: boolean;
|
|
33
|
+
readonly note?: string;
|
|
34
|
+
readonly detail?: unknown;
|
|
35
|
+
}
|
|
36
|
+
/** 一步的失败(`code` 取值复用 `XUNJI_EXIT_CODES` 的 1/2/3,不另造码表)。 */
|
|
37
|
+
export interface RunSyncStepFail {
|
|
38
|
+
readonly ok: false;
|
|
39
|
+
readonly code: 1 | 2 | 3;
|
|
40
|
+
readonly error: string;
|
|
41
|
+
readonly detail?: unknown;
|
|
42
|
+
}
|
|
43
|
+
/** 一步的结局(ok 即过;`skipped` 的 ok 也是 true,不触发失败停链)。 */
|
|
44
|
+
export type RunSyncStepResult = RunSyncStepOk | RunSyncStepFail;
|
|
45
|
+
/** `runSync` 的注入缝(四步皆可换;缺省=推送/回写真跑,补计划/记心愿跳过)。 */
|
|
46
|
+
export interface RunSyncDeps {
|
|
47
|
+
/** 今天(`YYYY-MM-DD`;缺省本地今天;测试钉住它)。 */
|
|
48
|
+
readonly todayISO?: string;
|
|
49
|
+
/** 补计划(缺省跳过:作息管家不在本仓,#614 接线)。 */
|
|
50
|
+
readonly plan?: (dates: readonly string[]) => Promise<RunSyncStepResult>;
|
|
51
|
+
/** 记心愿(缺省跳过:备忘录不在本仓,#614 接线)。 */
|
|
52
|
+
readonly wish?: (dates: readonly string[]) => Promise<RunSyncStepResult>;
|
|
53
|
+
/** 推一天(缺省读本仓计划+`pushDayPlan` 真推)。 */
|
|
54
|
+
readonly pushDay?: (dateStr: string) => Promise<RunSyncStepResult>;
|
|
55
|
+
/** 回写(缺省 `backfillRange` 真写)。 */
|
|
56
|
+
readonly backfill?: (endISO: string, days: number) => Promise<RunSyncStepResult>;
|
|
57
|
+
/** 缺省推一天的取数口(读卡路里库,只读)。 */
|
|
58
|
+
readonly planSource?: DayPlanSource;
|
|
59
|
+
/** 缺省推一天的透传件(upsert/限频;测试挡板从这里进)。 */
|
|
60
|
+
readonly pushDeps?: PushDayDeps;
|
|
61
|
+
/** 缺省回写的透传件(拉取/开库;测试挡板从这里进)。 */
|
|
62
|
+
readonly backfillDeps?: BackfillDeps;
|
|
63
|
+
/** 状态文件(缺省老路径;传 null 即不写,测试用 tmp)。 */
|
|
64
|
+
readonly statePath?: string | null;
|
|
65
|
+
}
|
|
66
|
+
/** 链里一步的记录(`date` 只推送那步有;`code` 只失败有)。 */
|
|
67
|
+
export interface RunSyncPhaseEntry {
|
|
68
|
+
readonly phase: RunSyncPhase;
|
|
69
|
+
readonly label: string;
|
|
70
|
+
readonly ok: boolean;
|
|
71
|
+
readonly skipped?: boolean;
|
|
72
|
+
readonly date?: string;
|
|
73
|
+
readonly note?: string;
|
|
74
|
+
readonly error?: string;
|
|
75
|
+
readonly code?: 1 | 2 | 3;
|
|
76
|
+
readonly detail?: unknown;
|
|
77
|
+
}
|
|
78
|
+
/** 整条链的最终状态(老 `run_sync` 状态文件同键 + 点名 `failed_step`/`failed_code`)。 */
|
|
79
|
+
export interface RunSyncState {
|
|
80
|
+
readonly status: 'running' | 'completed' | 'failed';
|
|
81
|
+
readonly started_at: string;
|
|
82
|
+
readonly finished_at: string | null;
|
|
83
|
+
readonly total_days: number;
|
|
84
|
+
readonly current_day: number;
|
|
85
|
+
readonly phase: RunSyncPhase | null;
|
|
86
|
+
readonly results: readonly RunSyncPhaseEntry[];
|
|
87
|
+
readonly error_summary: string | null;
|
|
88
|
+
readonly failed_step: string | null;
|
|
89
|
+
readonly failed_code: 1 | 2 | 3 | null;
|
|
90
|
+
}
|
|
91
|
+
/** 缺省状态文件(老 `run_sync.py:32` 同件名;目录=`xunjiStateDir()`,外部轮询读它)。 */
|
|
92
|
+
export declare function defaultRunSyncStatePath(): string;
|
|
93
|
+
/** `YYYY-MM-DD` 加 N 天(调用方保证形状;纯函数)。 */
|
|
94
|
+
export declare function addDaysISO(startISO: string, offset: number): string;
|
|
95
|
+
/** 跑整条链(`days`/`startOffset` 由分派层校验;任一步失败即停并点名)。 */
|
|
96
|
+
export declare function runSync(opts: {
|
|
97
|
+
readonly days?: number;
|
|
98
|
+
readonly startOffset?: number;
|
|
99
|
+
readonly dryRun?: boolean;
|
|
100
|
+
readonly deps?: RunSyncDeps;
|
|
101
|
+
}): Promise<RunSyncState>;
|
|
102
|
+
type Values = Readonly<Record<string, string | boolean | readonly string[]>>;
|
|
103
|
+
/** `run-sync` 子命令的分派(`run.ts` 调;失败即非 0 并点名哪一步)。 */
|
|
104
|
+
export declare function runRunSyncCommand(sub: XunjiSubcommand, values: Values, deps?: RunSyncDeps): Promise<XunjiRun>;
|
|
105
|
+
export {};
|
|
106
|
+
//# sourceMappingURL=run-sync.d.ts.map
|