catence 0.2.0-beta.13 → 0.2.0-beta.14

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/README.md CHANGED
@@ -24,6 +24,8 @@ Catence helps explore recovery, training load, trends, activity detail, swimming
24
24
 
25
25
  Install Catence and create the first athlete. The default catalog home is `~/.catence`; set `CATENCE_HOME` or pass `--home` to use a different location.
26
26
 
27
+ Every `catence-data` command requires `--athlete <id>`; there is no default athlete. Pair it with `--home <dir>` to select the catalog when not using the default home.
28
+
27
29
  ```sh
28
30
  npm install --global catence@beta # or catence@latest for stable
29
31
  catence-data setup --athlete alex --label "Alex"
@@ -147,9 +149,7 @@ UV_CACHE_DIR=$PWD/.cache/uv uv run --project console --group dev python -m pytes
147
149
 
148
150
  ## Beta releases
149
151
 
150
- Registry betas use distinct npm and Python prerelease formats: for example,
151
- `catence@0.2.0-beta.1` pairs with `catence-console==0.2.0b1` and
152
- `catence-chainlit==0.2.0b1`. The protected `beta` branch verifies candidates;
152
+ Registry betas use distinct npm, console, and UI-runtime prerelease formats. Each `catence@0.2.0-beta.N` npm release maps to a `catence-console==0.2.0bN` wheel, but the console depends on a range of `catence-chainlit` (the UI runtime), so the `catence-chainlit` version does not need to match the npm or console version. For example, `catence@0.2.0-beta.1` pairs with `catence-console==0.2.0b1` and can use any compatible `catence-chainlit` (such as `0.2.0b1`). The protected `beta` branch verifies candidates;
153
153
  a `v0.2.0-beta.1` tag publishes to npm's `beta` channel and creates a GitHub
154
154
  prerelease. Follow [the beta release checklist](release/beta-checklist.md) to
155
155
  publish the UI wheel first, deploy the registry artifacts with Compose, and
@@ -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.13";
6
+ export declare const CATENCE_RUNTIME_VERSION = "0.2.0-beta.14";
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.13';
6
+ export const CATENCE_RUNTIME_VERSION = '0.2.0-beta.14';
7
7
  export const CATENCE_PROTOCOL_VERSION = 1;
8
8
  export function catenceRuntimeHealth() {
9
9
  return {
@@ -225,7 +225,7 @@ export async function importSourceEntity(database, entity) {
225
225
  const rawHash = entity.rawObjectHash;
226
226
  await database.run(`INSERT INTO source_entities
227
227
  (provider, entity_type, remote_id, parent_remote_id, occurred_on, source_updated_at, raw_object_hash, payload_json, extension_json)
228
- VALUES ($provider, $entityType, $remoteId, $parentRemoteId, $occurredOn, $sourceUpdatedAt, $rawHash, $payload, $extension)
228
+ VALUES ($provider::VARCHAR, $entityType::VARCHAR, $remoteId::VARCHAR, $parentRemoteId::VARCHAR, $occurredOn::TIMESTAMPTZ, $sourceUpdatedAt::TIMESTAMPTZ, $rawHash::VARCHAR, $payload::JSON, $extension::JSON)
229
229
  ON CONFLICT (provider, entity_type, remote_id) DO UPDATE SET
230
230
  parent_remote_id = excluded.parent_remote_id, occurred_on = excluded.occurred_on,
231
231
  source_updated_at = excluded.source_updated_at, raw_object_hash = excluded.raw_object_hash,
@@ -236,7 +236,7 @@ export async function importSourceEntity(database, entity) {
236
236
  });
237
237
  await database.run(`INSERT INTO domain_entities
238
238
  (provider, entity_type, remote_id, parent_remote_id, occurred_on, payload_json, extension_json, raw_object_hash)
239
- VALUES ($provider, $entityType, $remoteId, $parentRemoteId, $occurredOn, $payload, $extension, $rawHash)
239
+ VALUES ($provider::VARCHAR, $entityType::VARCHAR, $remoteId::VARCHAR, $parentRemoteId::VARCHAR, $occurredOn::TIMESTAMPTZ, $payload::JSON, $extension::JSON, $rawHash::VARCHAR)
240
240
  ON CONFLICT (provider, entity_type, remote_id) DO UPDATE SET
241
241
  parent_remote_id = excluded.parent_remote_id, occurred_on = excluded.occurred_on,
242
242
  payload_json = excluded.payload_json, extension_json = excluded.extension_json, raw_object_hash = excluded.raw_object_hash`, {
@@ -878,7 +878,7 @@ async function importNutrition(database, provider, date, remoteId, payload, rawH
878
878
  const fields = nutritionFields(payload);
879
879
  await database.run(`INSERT INTO nutrition_days
880
880
  (provider, nutrition_date, energy_kcal, carbohydrates_g, protein_g, fat_g, hydration_ml, metrics_json, raw_object_hash)
881
- VALUES ($provider, $nutritionDate, $energyKcal, $carbohydratesG, $proteinG, $fatG, $hydrationMl, $metrics, $rawHash)
881
+ VALUES ($provider::VARCHAR, $nutritionDate::DATE, $energyKcal::DOUBLE, $carbohydratesG::DOUBLE, $proteinG::DOUBLE, $fatG::DOUBLE, $hydrationMl::DOUBLE, $metrics::JSON, $rawHash::VARCHAR)
882
882
  ON CONFLICT (provider, nutrition_date) DO UPDATE SET
883
883
  energy_kcal = COALESCE(excluded.energy_kcal, nutrition_days.energy_kcal),
884
884
  carbohydrates_g = COALESCE(excluded.carbohydrates_g, nutrition_days.carbohydrates_g),
@@ -891,7 +891,11 @@ async function importNutrition(database, provider, date, remoteId, payload, rawH
891
891
  const itemId = firstString(item, ['id', 'foodId', 'entryId']) ?? `${remoteId}:${index}`;
892
892
  await database.run(`INSERT INTO nutrition_items
893
893
  (provider, remote_item_id, nutrition_date, meal, consumed_at, food_name, quantity, energy_kcal, carbohydrates_g, protein_g, fat_g, payload_json, raw_object_hash)
894
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
894
+ VALUES (
895
+ CAST(? AS VARCHAR), CAST(? AS VARCHAR), CAST(? AS DATE), CAST(? AS VARCHAR),
896
+ CAST(? AS TIMESTAMP), CAST(? AS VARCHAR), CAST(? AS DOUBLE), CAST(? AS DOUBLE),
897
+ CAST(? AS DOUBLE), CAST(? AS DOUBLE), CAST(? AS DOUBLE), CAST(? AS JSON), CAST(? AS VARCHAR)
898
+ )
895
899
  ON CONFLICT (provider, remote_item_id) DO UPDATE SET nutrition_date = excluded.nutrition_date, meal = excluded.meal,
896
900
  consumed_at = excluded.consumed_at, food_name = excluded.food_name, quantity = excluded.quantity, energy_kcal = excluded.energy_kcal,
897
901
  carbohydrates_g = excluded.carbohydrates_g, protein_g = excluded.protein_g, fat_g = excluded.fat_g, payload_json = excluded.payload_json,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "catence",
3
- "version": "0.2.0-beta.13",
3
+ "version": "0.2.0-beta.14",
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": {