catence 0.2.0-beta.6 → 0.2.0-beta.7

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.
@@ -3,7 +3,7 @@
3
3
  * Keep these values synchronized with release/manifest.json; release checks
4
4
  * deliberately reject drift before a package can be published.
5
5
  */
6
- export declare const CATENCE_RUNTIME_VERSION = "0.2.0-beta.6";
6
+ export declare const CATENCE_RUNTIME_VERSION = "0.2.0-beta.7";
7
7
  export declare const CATENCE_PROTOCOL_VERSION = 1;
8
8
  export type CatenceRuntimeCapabilities = {
9
9
  mcp: true;
@@ -3,7 +3,7 @@
3
3
  * Keep these values synchronized with release/manifest.json; release checks
4
4
  * deliberately reject drift before a package can be published.
5
5
  */
6
- export const CATENCE_RUNTIME_VERSION = '0.2.0-beta.6';
6
+ export const CATENCE_RUNTIME_VERSION = '0.2.0-beta.7';
7
7
  export const CATENCE_PROTOCOL_VERSION = 1;
8
8
  export function catenceRuntimeHealth() {
9
9
  return {
@@ -59,13 +59,24 @@ that already holds only Console artifacts (`config.json`, `console/`).
59
59
 
60
60
  ### 3. Store provider credentials (stdin only, never shell history)
61
61
 
62
+ Garmin (`email`, `password`), Intervals.icu (`apiKey`, `athleteId`), and Strava
63
+ (`clientId`, `clientSecret`):
64
+
62
65
  ```sh
66
+ # Garmin
63
67
  printf %s 'alex@example.com' | catence-data --athlete alex secret set --provider garmin --field email --value-stdin
64
68
  printf %s 'your-garmin-password' | catence-data --athlete alex secret set --provider garmin --field password --value-stdin
69
+ # Intervals.icu
65
70
  printf %s 'intervals-api-key' | catence-data --athlete alex secret set --provider intervals --field apiKey --value-stdin
66
71
  printf %s '12345' | catence-data --athlete alex secret set --provider intervals --field athleteId --value-stdin
72
+ # Strava (create an API application at https://www.strava.com/settings/api)
73
+ printf %s 'strava-client-id' | catence-data --athlete alex secret set --provider strava --field clientId --value-stdin
74
+ printf %s 'strava-client-secret' | catence-data --athlete alex secret set --provider strava --field clientSecret --value-stdin
67
75
  ```
68
76
 
77
+ Set only the providers you actually sync; `secret set` accepts each field
78
+ independently.
79
+
69
80
  ### 4. Sync data and build retrieval context
70
81
 
71
82
  ```sh
@@ -153,14 +164,35 @@ docker compose -f catence-deploy/docker-compose.yml --env-file catence-deploy/.e
153
164
 
154
165
  ### 4. Store provider credentials
155
166
 
167
+ Garmin (`email`, `password`), Intervals.icu (`apiKey`, `athleteId`), and Strava
168
+ (`clientId`, `clientSecret`), one `printf` per field:
169
+
156
170
  ```sh
157
- printf %s 'value' | docker compose -f catence-deploy/docker-compose.yml --env-file catence-deploy/.env run --rm -T \
171
+ # Garmin
172
+ printf %s 'alex@example.com' | docker compose -f catence-deploy/docker-compose.yml --env-file catence-deploy/.env run --rm -T \
173
+ --entrypoint catence-data console --athlete alex secret set \
174
+ --provider garmin --field email --value-stdin
175
+ printf %s 'your-garmin-password' | docker compose -f catence-deploy/docker-compose.yml --env-file catence-deploy/.env run --rm -T \
176
+ --entrypoint catence-data console --athlete alex secret set \
177
+ --provider garmin --field password --value-stdin
178
+ # Intervals.icu
179
+ printf %s 'intervals-api-key' | docker compose -f catence-deploy/docker-compose.yml --env-file catence-deploy/.env run --rm -T \
158
180
  --entrypoint catence-data console --athlete alex secret set \
159
181
  --provider intervals --field apiKey --value-stdin
182
+ printf %s '12345' | docker compose -f catence-deploy/docker-compose.yml --env-file catence-deploy/.env run --rm -T \
183
+ --entrypoint catence-data console --athlete alex secret set \
184
+ --provider intervals --field athleteId --value-stdin
185
+ # Strava (create an API application at https://www.strava.com/settings/api)
186
+ printf %s 'strava-client-id' | docker compose -f catence-deploy/docker-compose.yml --env-file catence-deploy/.env run --rm -T \
187
+ --entrypoint catence-data console --athlete alex secret set \
188
+ --provider strava --field clientId --value-stdin
189
+ printf %s 'strava-client-secret' | docker compose -f catence-deploy/docker-compose.yml --env-file catence-deploy/.env run --rm -T \
190
+ --entrypoint catence-data console --athlete alex secret set \
191
+ --provider strava --field clientSecret --value-stdin
160
192
  ```
161
193
 
162
- Use the same `--entrypoint catence-data` pattern for `sync`, `backfill`, and
163
- `auth strava`.
194
+ Set only the providers you actually sync. Use the same `--entrypoint
195
+ catence-data` pattern for `sync`, `backfill`, and `auth strava`.
164
196
 
165
197
  ### 5. Configure the model
166
198
 
@@ -176,7 +208,54 @@ docker compose -f catence-deploy/docker-compose.yml --env-file catence-deploy/.e
176
208
  With `--home <dir>` (bind mount), edit `<dir>/config.json` on the host
177
209
  instead. To add OpenCode Go models, see [model discovery](#model-discovery-opencode-go).
178
210
 
179
- ### 6. Expose the Console safely
211
+ ### 6. Verify with doctor
212
+
213
+ `catence-console doctor` checks each profile's environment variables and the
214
+ local Catence runtime. The deploy scaffold includes a helper for it:
215
+
216
+ ```sh
217
+ ./catence-deploy/doctor.sh
218
+ ```
219
+
220
+ The helper runs the doctor *inside the running container* with `exec` — the
221
+ container's own loopback holds the live MCP server at `127.0.0.1:8787`, and the
222
+ provider keys from `.env` are already in its environment. (A `docker compose
223
+ run` container has a separate loopback and would report the runtime as
224
+ unreachable.) The equivalent long form is:
225
+
226
+ ```sh
227
+ docker compose -f catence-deploy/docker-compose.yml --env-file catence-deploy/.env exec console \
228
+ /opt/catence-console/bin/catence-console doctor --home /data --mcp-url http://127.0.0.1:8787/mcp
229
+ ```
230
+
231
+ Expect `"ready": true` once the model key is set; missing keys show up per
232
+ profile without ever printing their values.
233
+
234
+ ### 7. Sync, backfill, and inspect athlete data
235
+
236
+ The deploy scaffold includes a helper that runs `catence-data` *inside the
237
+ running container* with `exec`, so the athlete's provider secrets from the
238
+ data volume are already available:
239
+
240
+ ```sh
241
+ ./catence-deploy/sync.sh --athlete alex sync # incremental sync, all providers
242
+ ./catence-deploy/sync.sh --athlete alex backfill 2026-01-01 # full backfill from a date
243
+ ./catence-deploy/sync.sh --athlete alex status # coverage and errors
244
+ ./catence-deploy/sync.sh athletes # list athlete IDs
245
+ ```
246
+
247
+ `sync` defaults to `--provider all`; extra flags pass through, for example
248
+ `./catence-deploy/sync.sh --athlete alex sync --refresh` or
249
+ `./catence-deploy/sync.sh --athlete alex backfill 2026-01-01 --provider garmin`.
250
+ Set a default athlete with `export CATENCE_ATHLETE=alex` to drop the
251
+ `--athlete` argument. The equivalent long form is:
252
+
253
+ ```sh
254
+ docker compose -f catence-deploy/docker-compose.yml --env-file catence-deploy/.env exec console \
255
+ catence-data sync --athlete alex --provider all --home /data
256
+ ```
257
+
258
+ ### 8. Expose the Console safely
180
259
 
181
260
  Keep the Console port bound to `127.0.0.1` (the default) and front it with a
182
261
  Cloudflare Tunnel or reverse proxy at HTTPS. Never expose Catence's MCP port
@@ -306,6 +306,14 @@ prints credential values.
306
306
  catence-console doctor --home "$HOME/.catence" --mcp-url http://127.0.0.1:8787/mcp
307
307
  ```
308
308
 
309
+ On Docker, the deploy scaffold includes a helper that runs it inside the
310
+ running container (`exec`, not `run` — the container's loopback hosts the live
311
+ MCP server and the `.env` provider keys are in its environment):
312
+
313
+ ```sh
314
+ ./catence-deploy/doctor.sh
315
+ ```
316
+
309
317
  ## Docker: generating the Console login hash
310
318
 
311
319
  `deploy-console.sh` writes a small helper into the deployment directory. Run it
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "catence",
3
- "version": "0.2.0-beta.6",
3
+ "version": "0.2.0-beta.7",
4
4
  "description": "Local MCP access to normalized Garmin, Intervals.icu, and targeted Strava fitness data.",
5
5
  "license": "AGPL-3.0-or-later",
6
6
  "repository": {