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.
- package/dist/assets/{board-DKxKOwax.js → board-D1HbyD4u.js} +1 -1
- package/dist/assets/{index-BNvUaA6y.js → index-DWZd3qT-.js} +44 -44
- package/dist/assets/index-PA_Ih223.css +1 -0
- package/dist/assets/{motion-CM4AfIqo.js → motion-D2OqILg_.js} +1 -1
- package/dist/assets/{table-BUeQ9wzR.js → table-YWWjPjC_.js} +1 -1
- package/dist/assets/{ui-3Wd4pVaA.js → ui-DikPZj8S.js} +1 -1
- package/dist/assets/vendor-BS9OPVNh.js +2181 -0
- package/dist/companion-iroh/darwin-arm64/forge-companion-iroh +0 -0
- package/dist/companion-iroh/darwin-x64/forge-companion-iroh +0 -0
- package/dist/companion-iroh/linux-x64/forge-companion-iroh +0 -0
- package/dist/index.html +7 -7
- package/dist/openclaw/parity.js +1 -0
- package/dist/openclaw/routes.js +5 -0
- package/dist/openclaw/tools.js +7 -0
- package/dist/server/server/src/app.js +64 -2
- package/dist/server/server/src/health.js +337 -2
- package/dist/server/server/src/openapi.js +59 -0
- package/dist/server/src/lib/api.js +6 -0
- package/openclaw.plugin.json +2 -1
- package/package.json +1 -1
- package/skills/forge-openclaw/SKILL.md +11 -7
- package/skills/forge-openclaw/entity_conversation_playbooks.md +69 -12
- package/dist/assets/index-NqIbz_lv.css +0 -1
- package/dist/assets/vendor-BVU0cZC9.js +0 -2171
|
@@ -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()}`);
|
package/openclaw.plugin.json
CHANGED
|
@@ -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.
|
|
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
|
@@ -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
|
|
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
|
|
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`,
|
|
209
|
-
`sports_overview`. Treat those as read-only surfaces,
|
|
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 `
|
|
261
|
-
to understand current Forge state, work risk, calendar
|
|
262
|
-
workouts,
|
|
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,
|
|
336
|
-
|
|
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
|
|
1364
|
-
|
|
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,
|
|
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
|