commit 9b0e55397ea2c0a5035c6b5ad61dba28d549e57a Author: zlei9 Date: Sun Mar 29 14:29:25 2026 +0800 Initial commit with translated description diff --git a/SKILL.md b/SKILL.md new file mode 100644 index 0000000..3a89933 --- /dev/null +++ b/SKILL.md @@ -0,0 +1,77 @@ +--- +name: healthcheck +description: "使用JSON文件存储跟踪水和睡眠。" +version: 1.0.2 +tags: health, tracking +--- + +# Health Tracker + +Simple tracking for water intake and sleep using JSON file. + +## Data Format + +File: `{baseDir}/health-data.json` + +```json +{ + "water": [{"time": "ISO8601", "cups": 2}], + "sleep": [{"time": "ISO8601", "action": "sleep|wake"}] +} +``` + +## Add Water Record + +When user says "uống X cốc" or "uống nước X cốc": + +```bash +node -e "const fs=require('fs');const f='{baseDir}/health-data.json';let d={water:[],sleep:[]};try{d=JSON.parse(fs.readFileSync(f))}catch(e){}d.water.push({time:new Date().toISOString(),cups:CUPS});fs.writeFileSync(f,JSON.stringify(d));console.log('Da ghi: '+CUPS+' coc')" +``` + +Replace `CUPS` with number from user input. + +## Add Sleep Record + +When user says "đi ngủ": + +```bash +node -e "const fs=require('fs');const f='{baseDir}/health-data.json';let d={water:[],sleep:[]};try{d=JSON.parse(fs.readFileSync(f))}catch(e){}d.sleep.push({time:new Date().toISOString(),action:'sleep'});fs.writeFileSync(f,JSON.stringify(d));console.log('Da ghi: di ngu')" +``` + +## Add Wake Record + +When user says "thức dậy" or "dậy rồi": + +```bash +node -e "const fs=require('fs');const f='{baseDir}/health-data.json';let d={water:[],sleep:[]};try{d=JSON.parse(fs.readFileSync(f))}catch(e){}const last=d.sleep.filter(s=>s.action==='sleep').pop();d.sleep.push({time:new Date().toISOString(),action:'wake'});fs.writeFileSync(f,JSON.stringify(d));if(last){const h=((new Date()-new Date(last.time))/3600000).toFixed(1);console.log('Da ngu: '+h+' gio')}else{console.log('Da ghi: thuc day')}" +``` + +## View Stats + +When user says "thống kê" or "xem thống kê": + +```bash +node -e "const fs=require('fs');const f='{baseDir}/health-data.json';let d={water:[],sleep:[]};try{d=JSON.parse(fs.readFileSync(f))}catch(e){}console.log('Water:',d.water.length,'records');console.log('Sleep:',d.sleep.length,'records');const today=d.water.filter(w=>new Date(w.time).toDateString()===new Date().toDateString());console.log('Today:',today.reduce((s,w)=>s+w.cups,0),'cups')" +``` + +## Update Record + +To update last water entry: + +```bash +node -e "const fs=require('fs');const f='{baseDir}/health-data.json';let d=JSON.parse(fs.readFileSync(f));d.water[d.water.length-1].cups=NEW_CUPS;fs.writeFileSync(f,JSON.stringify(d));console.log('Updated')" +``` + +## Delete Record + +To delete last water entry: + +```bash +node -e "const fs=require('fs');const f='{baseDir}/health-data.json';let d=JSON.parse(fs.readFileSync(f));d.water.pop();fs.writeFileSync(f,JSON.stringify(d));console.log('Deleted')" +``` + +## Notes + +- Uses Node.js built-in modules only +- File auto-created if missing +- All timestamps in ISO8601 format diff --git a/_meta.json b/_meta.json new file mode 100644 index 0000000..c0e263f --- /dev/null +++ b/_meta.json @@ -0,0 +1,6 @@ +{ + "ownerId": "kn7129pr4xtrwpbxszgx6bmfjx80a9pz", + "slug": "healthcheck", + "version": "1.0.2", + "publishedAt": 1769965007932 +} \ No newline at end of file