trainbud 0.5.0 → 0.5.2
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/.env.example +11 -11
- package/CHANGELOG.md +757 -675
- package/QUICKSTART.md +185 -182
- package/README.md +329 -322
- package/dist/appDb.d.ts +40 -1
- package/dist/appDb.js +120 -51
- package/dist/cli.js +47 -0
- package/dist/dashboard.js +820 -820
- package/dist/dashboardCharts.js +42 -42
- package/dist/deviceTokens.d.ts +29 -0
- package/dist/deviceTokens.js +49 -0
- package/dist/history/context.js +35 -35
- package/dist/history/schema.js +66 -66
- package/dist/httpServer.js +64 -1
- package/dist/pairApi.js +11 -2
- package/dist/promptApi.js +5 -5
- package/dist/usage.js +17 -17
- package/package.json +82 -77
- package/dist/appDb.d.ts.map +0 -1
- package/dist/appDb.js.map +0 -1
- package/dist/check.d.ts.map +0 -1
- package/dist/check.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/dashboard.d.ts.map +0 -1
- package/dist/dashboard.js.map +0 -1
- package/dist/dashboardCharts.d.ts.map +0 -1
- package/dist/dashboardCharts.js.map +0 -1
- package/dist/dashboardData.d.ts.map +0 -1
- package/dist/dashboardData.js.map +0 -1
- package/dist/detect/baseline.d.ts.map +0 -1
- package/dist/detect/baseline.js.map +0 -1
- package/dist/detect/countdown.d.ts.map +0 -1
- package/dist/detect/countdown.js.map +0 -1
- package/dist/detect/detectors.d.ts.map +0 -1
- package/dist/detect/detectors.js.map +0 -1
- package/dist/detect/findings.d.ts.map +0 -1
- package/dist/detect/findings.js.map +0 -1
- package/dist/detect/forecast.d.ts.map +0 -1
- package/dist/detect/forecast.js.map +0 -1
- package/dist/detect/index.d.ts.map +0 -1
- package/dist/detect/index.js.map +0 -1
- package/dist/detect/sleepQuality.d.ts.map +0 -1
- package/dist/detect/sleepQuality.js.map +0 -1
- package/dist/detect/trimp.d.ts.map +0 -1
- package/dist/detect/trimp.js.map +0 -1
- package/dist/detect/week.d.ts.map +0 -1
- package/dist/detect/week.js.map +0 -1
- package/dist/garmin/auth.d.ts.map +0 -1
- package/dist/garmin/auth.js.map +0 -1
- package/dist/garmin/cache.d.ts.map +0 -1
- package/dist/garmin/cache.js.map +0 -1
- package/dist/garmin/client.d.ts.map +0 -1
- package/dist/garmin/client.js.map +0 -1
- package/dist/garmin/daily.d.ts.map +0 -1
- package/dist/garmin/daily.js.map +0 -1
- package/dist/garmin/garminApiTypes.d.ts.map +0 -1
- package/dist/garmin/garminApiTypes.js.map +0 -1
- package/dist/garmin/garminConnect.d.ts.map +0 -1
- package/dist/garmin/garminConnect.js.map +0 -1
- package/dist/garmin/partial.d.ts.map +0 -1
- package/dist/garmin/partial.js.map +0 -1
- package/dist/garmin/rawApi.d.ts.map +0 -1
- package/dist/garmin/rawApi.js.map +0 -1
- package/dist/garmin/types.d.ts.map +0 -1
- package/dist/garmin/types.js.map +0 -1
- package/dist/history/capture.d.ts.map +0 -1
- package/dist/history/capture.js.map +0 -1
- package/dist/history/context.d.ts.map +0 -1
- package/dist/history/context.js.map +0 -1
- package/dist/history/fallback.d.ts.map +0 -1
- package/dist/history/fallback.js.map +0 -1
- package/dist/history/ingest.d.ts.map +0 -1
- package/dist/history/ingest.js.map +0 -1
- package/dist/history/scheduler.d.ts.map +0 -1
- package/dist/history/scheduler.js.map +0 -1
- package/dist/history/schema.d.ts.map +0 -1
- package/dist/history/schema.js.map +0 -1
- package/dist/history/store.d.ts.map +0 -1
- package/dist/history/store.js.map +0 -1
- package/dist/httpServer.d.ts.map +0 -1
- package/dist/httpServer.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/mcpConfig.d.ts.map +0 -1
- package/dist/mcpConfig.js.map +0 -1
- package/dist/pairApi.d.ts.map +0 -1
- package/dist/pairApi.js.map +0 -1
- package/dist/paths.d.ts.map +0 -1
- package/dist/paths.js.map +0 -1
- package/dist/profile.d.ts.map +0 -1
- package/dist/profile.js.map +0 -1
- package/dist/promptApi.d.ts.map +0 -1
- package/dist/promptApi.js.map +0 -1
- package/dist/promptSuggestions.d.ts.map +0 -1
- package/dist/promptSuggestions.js.map +0 -1
- package/dist/selfTest.d.ts.map +0 -1
- package/dist/selfTest.js.map +0 -1
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/setup.d.ts.map +0 -1
- package/dist/setup.js.map +0 -1
- package/dist/toolErrors.d.ts.map +0 -1
- package/dist/toolErrors.js.map +0 -1
- package/dist/tools/activities.d.ts.map +0 -1
- package/dist/tools/activities.js.map +0 -1
- package/dist/tools/bodyComposition.d.ts.map +0 -1
- package/dist/tools/bodyComposition.js.map +0 -1
- package/dist/tools/context.d.ts.map +0 -1
- package/dist/tools/context.js.map +0 -1
- package/dist/tools/findings.d.ts.map +0 -1
- package/dist/tools/findings.js.map +0 -1
- package/dist/tools/heartRate.d.ts.map +0 -1
- package/dist/tools/heartRate.js.map +0 -1
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/payloads.d.ts.map +0 -1
- package/dist/tools/payloads.js.map +0 -1
- package/dist/tools/recovery.d.ts.map +0 -1
- package/dist/tools/recovery.js.map +0 -1
- package/dist/tools/sleep.d.ts.map +0 -1
- package/dist/tools/sleep.js.map +0 -1
- package/dist/tools/stress.d.ts.map +0 -1
- package/dist/tools/stress.js.map +0 -1
- package/dist/tools/trainingInsights.d.ts.map +0 -1
- package/dist/tools/trainingInsights.js.map +0 -1
- package/dist/tools/types.d.ts.map +0 -1
- package/dist/tools/types.js.map +0 -1
- package/dist/tools/vo2Max.d.ts.map +0 -1
- package/dist/tools/vo2Max.js.map +0 -1
- package/dist/tools/week.d.ts.map +0 -1
- package/dist/tools/week.js.map +0 -1
- package/dist/usage.d.ts.map +0 -1
- package/dist/usage.js.map +0 -1
- package/dist/utils/batch.d.ts.map +0 -1
- package/dist/utils/batch.js.map +0 -1
- package/dist/utils/helpers.d.ts.map +0 -1
- package/dist/utils/helpers.js.map +0 -1
- package/dist/utils/jsonFile.d.ts.map +0 -1
- package/dist/utils/jsonFile.js.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/secretFile.d.ts.map +0 -1
- package/dist/utils/secretFile.js.map +0 -1
- package/dist/utils/stdio.d.ts.map +0 -1
- package/dist/utils/stdio.js.map +0 -1
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js.map +0 -1
- package/dist/watchApi.d.ts.map +0 -1
- package/dist/watchApi.js.map +0 -1
package/QUICKSTART.md
CHANGED
|
@@ -1,182 +1,185 @@
|
|
|
1
|
-
# Quickstart
|
|
2
|
-
|
|
3
|
-
Get TrainBud running in about 5 minutes.
|
|
4
|
-
|
|
5
|
-
## Prerequisites
|
|
6
|
-
|
|
7
|
-
- Node.js 20 or newer ([`.nvmrc`](./.nvmrc) included)
|
|
8
|
-
- A Garmin Connect account with synced device data
|
|
9
|
-
- Garmin Connect **MFA disabled** (the underlying library does not support MFA yet)
|
|
10
|
-
|
|
11
|
-
## Recommended: one-command setup
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
- "
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
npm
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
**
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
trainbud
|
|
164
|
-
trainbud
|
|
165
|
-
trainbud
|
|
166
|
-
trainbud
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
|
175
|
-
|
|
176
|
-
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
1
|
+
# Quickstart
|
|
2
|
+
|
|
3
|
+
Get TrainBud running in about 5 minutes.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- Node.js 20 or newer ([`.nvmrc`](./.nvmrc) included)
|
|
8
|
+
- A Garmin Connect account with synced device data
|
|
9
|
+
- Garmin Connect **MFA disabled** (the underlying library does not support MFA yet)
|
|
10
|
+
|
|
11
|
+
## Recommended: one-command setup
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npx trainbud setup
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
To keep `trainbud` on your PATH instead of typing `npx` every time:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install -g trainbud
|
|
21
|
+
trainbud setup
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Every command below works either way — as `trainbud <command>` if you installed
|
|
25
|
+
globally, or as `npx trainbud <command>` if you did not.
|
|
26
|
+
|
|
27
|
+
The setup wizard will:
|
|
28
|
+
|
|
29
|
+
1. Ask for your Garmin Connect email and password
|
|
30
|
+
2. Save credentials to `.env`
|
|
31
|
+
3. Authenticate with Garmin Connect
|
|
32
|
+
4. Detect Cursor and Claude Desktop on your machine
|
|
33
|
+
5. Offer to add TrainBud to your MCP client config automatically
|
|
34
|
+
6. Optionally run a live API check against every tool
|
|
35
|
+
|
|
36
|
+
After setup, **restart your MCP client completely** (Cursor or Claude Desktop), then ask:
|
|
37
|
+
|
|
38
|
+
- "What did I do today?"
|
|
39
|
+
- "How's my sleep been this week?"
|
|
40
|
+
- "Am I recovered enough to train hard?"
|
|
41
|
+
|
|
42
|
+
### Claude Code: plugin or slash commands
|
|
43
|
+
|
|
44
|
+
**Plugin (recommended)** — skills + MCP in one install:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
/plugin marketplace add Zsadigzade/trainbud
|
|
48
|
+
/plugin install trainbud@trainbud
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Then `/trainbud:trainbud-setup` and `/trainbud:trainbud`.
|
|
52
|
+
|
|
53
|
+
**In-repo skills** — if you cloned the repo and run `claude` here:
|
|
54
|
+
|
|
55
|
+
1. `/trainbud-setup` — guided install + MCP config + live check
|
|
56
|
+
2. Restart MCP client
|
|
57
|
+
3. `/trainbud` — ask any fitness question
|
|
58
|
+
|
|
59
|
+
See [`plugin/README.md`](./plugin/README.md) for plugin details.
|
|
60
|
+
|
|
61
|
+
## Verify without an MCP client
|
|
62
|
+
|
|
63
|
+
After setup, you can confirm Garmin Connect access directly:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
trainbud check
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Example output:
|
|
70
|
+
|
|
71
|
+
```text
|
|
72
|
+
TrainBud live check
|
|
73
|
+
|
|
74
|
+
get_latest_activity ✓ Activity: Morning Run, Distance: 5.2 km, Start: ...
|
|
75
|
+
get_activities_range ✓ 3 activities found
|
|
76
|
+
get_sleep_data ✓ 7 nights retrieved
|
|
77
|
+
get_heart_rate_trends ✓ 30-day trend loaded
|
|
78
|
+
get_recovery_status ✓ Score: 72 (Ready to train)
|
|
79
|
+
get_body_composition ✗ No body composition data found for the last 30 days.
|
|
80
|
+
get_stress_levels ✓ 7-day stress trend loaded
|
|
81
|
+
get_vo2_max_trends ✓ 30-day VO2 max trend loaded
|
|
82
|
+
get_training_insights ✓ Weekly summary generated
|
|
83
|
+
|
|
84
|
+
All 9 checks passed. TrainBud is ready to use.
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Manual setup, or running from source
|
|
88
|
+
|
|
89
|
+
If you prefer to configure files yourself, or you want to run an unreleased
|
|
90
|
+
commit:
|
|
91
|
+
|
|
92
|
+
### 1. Install
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
git clone https://github.com/Zsadigzade/trainbud.git
|
|
96
|
+
cd trainbud
|
|
97
|
+
npm install
|
|
98
|
+
npm link # puts `trainbud` on your PATH; undo with `npm unlink -g trainbud`
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Without `npm link`, every `trainbud <command>` from a clone is
|
|
102
|
+
`node dist/index.js <command>` run from the repo root.
|
|
103
|
+
|
|
104
|
+
### 2. Configure credentials
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
cp .env.example .env
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Edit `.env`:
|
|
111
|
+
|
|
112
|
+
```env
|
|
113
|
+
GARMIN_EMAIL=your@email.com
|
|
114
|
+
GARMIN_PASSWORD=yourpassword
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### 3. Build and authenticate
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
npm run build
|
|
121
|
+
trainbud auth
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
You should see: `Garmin authentication successful. Session saved.`
|
|
125
|
+
|
|
126
|
+
### 4. Connect to Cursor or Claude Desktop
|
|
127
|
+
|
|
128
|
+
**Cursor:** `%USERPROFILE%\.cursor\mcp.json` (Windows) or `~/.cursor/mcp.json` (macOS/Linux)
|
|
129
|
+
|
|
130
|
+
**Claude Desktop (Windows):** `%APPDATA%\Claude\claude_desktop_config.json`
|
|
131
|
+
**Claude Desktop (macOS):** `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
132
|
+
|
|
133
|
+
```json
|
|
134
|
+
{
|
|
135
|
+
"mcpServers": {
|
|
136
|
+
"trainbud": {
|
|
137
|
+
"command": "node",
|
|
138
|
+
"args": ["C:/path/to/trainbud/dist/index.js", "start"],
|
|
139
|
+
"env": {
|
|
140
|
+
"GARMIN_EMAIL": "your@email.com",
|
|
141
|
+
"GARMIN_PASSWORD": "yourpassword"
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Restart your MCP client.
|
|
149
|
+
|
|
150
|
+
## Web AI (claude.ai, ChatGPT)
|
|
151
|
+
|
|
152
|
+
For web AI platforms that require remote MCP connectors:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
trainbud serve
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Then expose via HTTPS tunnel and add to claude.ai Connectors. Full guide: [docs/WEB-MCP.md](./docs/WEB-MCP.md)
|
|
159
|
+
|
|
160
|
+
## Useful commands
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
trainbud setup # Interactive first-time setup (recommended)
|
|
164
|
+
trainbud serve # Remote HTTP MCP for web AI connectors
|
|
165
|
+
trainbud check # Live diagnostics against all tools
|
|
166
|
+
trainbud status # Check session + cache
|
|
167
|
+
trainbud cache clear # Force fresh data fetch
|
|
168
|
+
trainbud auth # Re-login if session expired
|
|
169
|
+
trainbud start # Start MCP server manually (stdio)
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Troubleshooting setup
|
|
173
|
+
|
|
174
|
+
| Issue | Fix |
|
|
175
|
+
|-------|-----|
|
|
176
|
+
| Authentication failed | Verify email/password; disable MFA at connect.garmin.com |
|
|
177
|
+
| MCP client doesn't see tools | Restart the client completely (not just reload window) |
|
|
178
|
+
| Stale data | Run `trainbud cache clear` |
|
|
179
|
+
| `dist/index.js` not found | Run `npm run build` |
|
|
180
|
+
|
|
181
|
+
## Next steps
|
|
182
|
+
|
|
183
|
+
- [README.md](./README.md) — full reference
|
|
184
|
+
- [examples/prompts.md](./examples/prompts.md) — sample questions
|
|
185
|
+
- [docs/VAULT.md](./docs/VAULT.md) — architecture, branding, and design notes (Obsidian vault)
|