forge-openclaw-plugin 0.2.93 → 0.2.94

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.
@@ -3165,6 +3165,7 @@ export function buildOpenApiDocument() {
3165
3165
  "notes",
3166
3166
  "sleep",
3167
3167
  "fitness",
3168
+ "trainingLoad",
3168
3169
  "vitals",
3169
3170
  "lifeForce",
3170
3171
  "domains",
@@ -3228,6 +3229,11 @@ export function buildOpenApiDocument() {
3228
3229
  additionalProperties: true,
3229
3230
  description: "Compact sports summary with recent workout IDs and the full fitness route."
3230
3231
  },
3232
+ trainingLoad: {
3233
+ type: "object",
3234
+ additionalProperties: true,
3235
+ description: "Compact cardiovascular training-load summary with acute/chronic load, intensity distribution, and the full training-load route."
3236
+ },
3231
3237
  vitals: {
3232
3238
  type: "object",
3233
3239
  additionalProperties: true,
@@ -5161,6 +5167,42 @@ export function buildOpenApiDocument() {
5161
5167
  sessions: arrayOf({ $ref: "#/components/schemas/WorkoutSession" })
5162
5168
  }
5163
5169
  };
5170
+ const trainingLoadViewData = {
5171
+ type: "object",
5172
+ additionalProperties: false,
5173
+ required: [
5174
+ "summary",
5175
+ "zoneTotals",
5176
+ "recentZoneTotals",
5177
+ "intensityDistribution",
5178
+ "recentIntensityDistribution",
5179
+ "dailyLoad",
5180
+ "weeklyLoad",
5181
+ "activityBreakdown",
5182
+ "vitalsTrend",
5183
+ "sessionSignals",
5184
+ "targetModel"
5185
+ ],
5186
+ properties: {
5187
+ summary: { type: "object", additionalProperties: true },
5188
+ zoneTotals: arrayOf({ type: "object", additionalProperties: true }),
5189
+ recentZoneTotals: arrayOf({ type: "object", additionalProperties: true }),
5190
+ intensityDistribution: arrayOf({
5191
+ type: "object",
5192
+ additionalProperties: true
5193
+ }),
5194
+ recentIntensityDistribution: arrayOf({
5195
+ type: "object",
5196
+ additionalProperties: true
5197
+ }),
5198
+ dailyLoad: arrayOf({ type: "object", additionalProperties: true }),
5199
+ weeklyLoad: arrayOf({ type: "object", additionalProperties: true }),
5200
+ activityBreakdown: arrayOf({ type: "object", additionalProperties: true }),
5201
+ vitalsTrend: arrayOf({ type: "object", additionalProperties: true }),
5202
+ sessionSignals: arrayOf({ type: "object", additionalProperties: true }),
5203
+ targetModel: { type: "object", additionalProperties: true }
5204
+ }
5205
+ };
5164
5206
  const document = {
5165
5207
  openapi: "3.1.0",
5166
5208
  info: {
@@ -5272,6 +5314,7 @@ export function buildOpenApiDocument() {
5272
5314
  WorkoutSession: workoutSession,
5273
5315
  SleepViewData: sleepViewData,
5274
5316
  FitnessViewData: fitnessViewData,
5317
+ TrainingLoadViewData: trainingLoadViewData,
5275
5318
  PsycheMetricsViewData: psycheMetricsViewData,
5276
5319
  PsycheOverviewPayload: psycheOverviewPayload,
5277
5320
  Insight: insight,
@@ -5563,6 +5606,22 @@ export function buildOpenApiDocument() {
5563
5606
  }
5564
5607
  }
5565
5608
  },
5609
+ "/api/v1/health/training-load": {
5610
+ get: {
5611
+ summary: "Read the Forge cardiovascular training load and target overview surface",
5612
+ responses: {
5613
+ "200": jsonResponse({
5614
+ type: "object",
5615
+ required: ["trainingLoad"],
5616
+ properties: {
5617
+ trainingLoad: {
5618
+ $ref: "#/components/schemas/TrainingLoadViewData"
5619
+ }
5620
+ }
5621
+ }, "Training load overview")
5622
+ }
5623
+ }
5624
+ },
5566
5625
  "/api/v1/health/workouts": {
5567
5626
  post: {
5568
5627
  summary: "Create one manual workout session",
@@ -1734,6 +1734,12 @@ export function getFitnessView(userIds) {
1734
1734
  const suffix = search.size > 0 ? `?${search.toString()}` : "";
1735
1735
  return request(`/api/v1/health/fitness${suffix}`);
1736
1736
  }
1737
+ export function getTrainingLoadView(userIds) {
1738
+ const search = new URLSearchParams();
1739
+ appendUserIds(search, coerceUserIds(userIds));
1740
+ const suffix = search.size > 0 ? `?${search.toString()}` : "";
1741
+ return request(`/api/v1/health/training-load${suffix}`);
1742
+ }
1737
1743
  export function getWorkoutDetail(workoutId, resolution = "adaptive") {
1738
1744
  const search = new URLSearchParams({ resolution });
1739
1745
  return request(`/api/v1/health/workouts/${workoutId}/detail?${search.toString()}`);
@@ -2,7 +2,7 @@
2
2
  "id": "forge-openclaw-plugin",
3
3
  "name": "Forge",
4
4
  "description": "Curated OpenClaw adapter for the Forge collaboration API, UI entrypoint, and localhost auto-start runtime.",
5
- "version": "0.2.93",
5
+ "version": "0.2.94",
6
6
  "activation": {
7
7
  "onStartup": true,
8
8
  "onCapabilities": [
@@ -51,6 +51,7 @@
51
51
  "forge_get_self_observation_calendar",
52
52
  "forge_get_sleep_overview",
53
53
  "forge_get_sports_overview",
54
+ "forge_get_training_load_overview",
54
55
  "forge_get_ui_entrypoint",
55
56
  "forge_get_user_directory",
56
57
  "forge_get_weekly_review",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forge-openclaw-plugin",
3
- "version": "0.2.93",
3
+ "version": "0.2.94",
4
4
  "description": "Curated OpenClaw adapter for the Forge collaboration API, UI entrypoint, and localhost auto-start runtime.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -199,14 +199,16 @@ Wiki navigation and search rule:
199
199
  Health rule:
200
200
 
201
201
  - Sleep and sports records are first-class health surfaces, not generic notes or tasks.
202
- - Use `forge_get_sleep_overview` and `forge_get_sports_overview` for review and trend reading.
202
+ - Use `forge_get_sleep_overview`, `forge_get_sports_overview`, and
203
+ `forge_get_training_load_overview` for health review and trend reading.
203
204
  - In `forge_get_agent_onboarding.entityRouteModel.readModelOnlySurfaces`, operator,
204
- calendar, self-observation, sleep, and sports read models are published with
205
+ calendar, self-observation, sleep, sports, and training-load read models are published with
205
206
  both camelCase names and entity-style aliases where useful, including
206
207
  `operatorOverview`, `operatorContext`, `calendarOverview`, `sleepOverview`,
207
- `sportsOverview`, `operator_overview`, `operator_context`,
208
- `calendar_overview`, `self_observation`, `sleep_overview`, and
209
- `sports_overview`. Treat those as read-only surfaces, not batch CRUD entities.
208
+ `sportsOverview`, `trainingLoad`, `operator_overview`, `operator_context`,
209
+ `calendar_overview`, `self_observation`, `sleep_overview`,
210
+ `sports_overview`, and `training_load`. Treat those as read-only surfaces,
211
+ not batch CRUD entities.
210
212
  - Use `forge_get_operator_overview` for a broad Forge status read, `forge_get_operator_context`
211
213
  for current work and risk, and `forge_get_calendar_overview` before calendar-aware
212
214
  planning or scheduling mutations.
@@ -524,7 +526,7 @@ Use the wiki tools for SQLite-backed memory work:
524
526
  `forge_get_wiki_settings`, `forge_list_wiki_pages`, `forge_get_wiki_page`, `forge_search_wiki`, `forge_upsert_wiki_page`, `forge_get_wiki_health`, `forge_sync_wiki_vault`, `forge_reindex_wiki_embeddings`, `forge_ingest_wiki_source`
525
527
 
526
528
  Use the health tools for review and reflective enrichment, not as the default CRUD architecture:
527
- `forge_get_sleep_overview`, `forge_get_sports_overview`, `forge_update_sleep_session`, `forge_update_workout_session`
529
+ `forge_get_sleep_overview`, `forge_get_sports_overview`, `forge_get_training_load_overview`, `forge_update_sleep_session`, `forge_update_workout_session`
528
530
 
529
531
  Use the dedicated domain routes for specialized surfaces that are not simple batch entities:
530
532
 
@@ -679,9 +681,10 @@ Use the health tools when the request is about sleep or sports review:
679
681
 
680
682
  - `forge_get_sleep_overview` to inspect recent nights, averages, regularity, stage breakdown, and linked reflective context
681
683
  - `forge_get_sports_overview` to inspect training volume, workout types, effort trends, habit-generated sessions, and linked context
684
+ - `forge_get_training_load_overview` to inspect cardiovascular load, HR zone balance, acute/chronic stress, high-intensity pressure, VO2max context, and training target fit
682
685
  - `forge_update_sleep_session` to add sleep-quality notes, tags, or links back to Forge entities after review
683
686
  - `forge_update_workout_session` to add subjective effort, mood, meaning, tags, or links on one workout after review
684
- - remember that the UI route is `/sports` while the backend overview route is `/api/v1/health/fitness`
687
+ - remember that the UI route is `/sports` while the backend overview route is `/api/v1/health/fitness`; the dedicated training-load UI is `/training-load` and its backend route is `/api/v1/health/training-load`
685
688
 
686
689
  Use these exact health batch payload shapes when the user is creating or editing the stored records themselves:
687
690
 
@@ -776,6 +779,7 @@ When the user asks which Forge tools are available, list exactly these tools:
776
779
  `forge_get_current_work`
777
780
  `forge_get_sleep_overview`
778
781
  `forge_get_sports_overview`
782
+ `forge_get_training_load_overview`
779
783
  `forge_update_sleep_session`
780
784
  `forge_update_workout_session`
781
785
  `forge_get_preferences_workspace`
@@ -257,10 +257,10 @@ Use this quick split before the conversation gets too detailed.
257
257
  the user is trying to do, then use the dedicated action tool or note-backed write
258
258
  model.
259
259
  - `operator_overview`, `operator_context`, `calendar_overview`, `sleep_overview`,
260
- and `sports_overview` are read-model-only surfaces. Use them when the user wants
261
- to understand current Forge state, work risk, calendar commitments, nights,
262
- workouts, training load, recovery context, or health patterns before deciding
263
- whether a stored entity needs creation or enrichment.
260
+ `sports_overview`, and `training_load` are read-model-only surfaces. Use them
261
+ when the user wants to understand current Forge state, work risk, calendar
262
+ commitments, nights, workouts, cardiovascular load, recovery context, or health
263
+ patterns before deciding whether a stored entity needs creation or enrichment.
264
264
  - Movement, Life Force, and Workbench are specialized domain areas. Use their
265
265
  dedicated route families for timelines and overlays, energy profile/templates and
266
266
  fatigue signals, and Workbench flow execution or result artifacts. When available,
@@ -332,9 +332,17 @@ still knowing the exact write/read family before it acts.
332
332
  score, stages, or recovery patterns before deciding whether a specific
333
333
  `sleep_session` needs reflective enrichment.
334
334
  - `sports_overview`: read-model-only health surface. Use the sports overview route or
335
- `forge_get_sports_overview` when the user wants to review workouts, training load,
336
- effort, type distribution, or recovery context before deciding whether a specific
337
- `workout_session` needs reflective enrichment.
335
+ `forge_get_sports_overview` when the user wants to review workouts, effort, type
336
+ distribution, or recovery context before deciding whether a specific
337
+ `workout_session` needs reflective enrichment. Use
338
+ `forge_get_training_load_overview` or `/api/v1/health/training-load` for
339
+ cardiovascular load, HR zone balance, acute/chronic stress, VO2max context, or
340
+ training target questions.
341
+ - `training_load`: read-model-only health surface. Use
342
+ `forge_get_training_load_overview` or `/api/v1/health/training-load` when the
343
+ user wants training-load trends, acute/chronic ratio, HR zone distribution,
344
+ threshold exposure, VO2max/resting-HR context, or optimization targets before
345
+ deciding whether a specific `workout_session` needs notes or links.
338
346
  - `movement`: specialized domain surface. Use the dedicated movement routes for day,
339
347
  month, all-time, timeline, places, trip detail, selection aggregates, manual
340
348
  overlays, and repair actions.
@@ -1360,14 +1368,15 @@ Preferred opening question:
1360
1368
 
1361
1369
  ## Sports Overview
1362
1370
 
1363
- Aim: review workout and training-load context before deciding whether one workout
1364
- needs a reflective update or recovery follow-up.
1371
+ Aim: review workout context before deciding whether one workout needs a
1372
+ reflective update, and route deeper cardiovascular load questions to the
1373
+ training-load read model.
1365
1374
 
1366
1375
  Arc:
1367
1376
 
1368
1377
  1. Ask what the user wants to understand from the sports picture: one workout, a
1369
- recent training trend, effort, volume, type mix, recovery, or links to mood and
1370
- goals.
1378
+ recent training trend, effort, volume, type mix, recovery, zone balance, or
1379
+ links to mood and goals.
1371
1380
  2. Read the sports overview before asking the user to reconstruct metrics from memory.
1372
1381
  3. Reflect the practical decision the review should support.
1373
1382
  4. Move to `workout_session` enrichment only when one specific workout needs context,
@@ -1382,8 +1391,12 @@ Helpful follow-up lanes:
1382
1391
  Route note:
1383
1392
 
1384
1393
  - `sports_overview` is a read-model-only surface. Use `forge_get_sports_overview` or
1385
- `/api/v1/health/fitness` for review. Do not create, update, or delete
1394
+ `/api/v1/health/fitness` for session review. Do not create, update, or delete
1386
1395
  `sports_overview` through batch CRUD.
1396
+ - For cardiovascular load, HR zone distribution, acute/chronic load, VO2max
1397
+ context, or training target questions, use `forge_get_training_load_overview`
1398
+ or `/api/v1/health/training-load`. Treat `training_load` as read-model-only,
1399
+ not a batch CRUD entity.
1387
1400
  - If the review reveals that one workout needs reflective context, switch to the
1388
1401
  stored `workout_session` batch route or reflective update helper for that known
1389
1402
  session.
@@ -1397,6 +1410,50 @@ Preferred opening question:
1397
1410
 
1398
1411
  - "What are you trying to understand from your workout picture right now?"
1399
1412
 
1413
+ ## Training Load
1414
+
1415
+ Aim: review cardiovascular load and training targets before deciding whether one
1416
+ workout needs reflective enrichment or a recovery/target adjustment.
1417
+
1418
+ Arc:
1419
+
1420
+ 1. Ask what practical decision the user wants to support: build aerobic base,
1421
+ control overload risk, preserve hard-day quality, understand combat-sport
1422
+ intensity, or compare recent load against chronic base.
1423
+ 2. Read the training-load overview before asking the user to reconstruct zones,
1424
+ VO2max, or recent hard sessions from memory.
1425
+ 3. Reflect the load signal with explicit confidence: HR coverage, sensor limits,
1426
+ recent sample count, and whether kickboxing/wrist HR may be noisy.
1427
+ 4. Move to `workout_session` enrichment only when one specific workout needs
1428
+ notes, tags, context, or links.
1429
+
1430
+ Helpful follow-up lanes:
1431
+
1432
+ - whether the question is adaptation, overload risk, zone target, VO2max trend,
1433
+ sport contribution, or one recent session
1434
+ - which date range matters if the default 7-day and 28-day windows are not enough
1435
+ - whether the user is optimizing health, performance, recovery, or a specific
1436
+ upcoming training block
1437
+
1438
+ Route note:
1439
+
1440
+ - `training_load` is a read-model-only surface. Use
1441
+ `forge_get_training_load_overview` or `/api/v1/health/training-load` for
1442
+ cardiovascular load, HR zone distribution, acute/chronic load, VO2max context,
1443
+ and training target analysis. Do not create, update, or delete `training_load`
1444
+ through batch CRUD.
1445
+ - If one workout needs subjective effort, meaning, social context, or links,
1446
+ switch to the stored `workout_session` batch route or reflective update helper.
1447
+
1448
+ Ready to review when:
1449
+
1450
+ - the user's practical adaptation or recovery question is clear
1451
+ - the relevant time window or default 7-day/28-day comparison is acceptable
1452
+
1453
+ Preferred opening question:
1454
+
1455
+ - "What training-load decision are you trying to support right now?"
1456
+
1400
1457
  ## Calendar Overview
1401
1458
 
1402
1459
  Aim: review commitments, work blocks, provider state, and existing timeboxes before