forge-openclaw-plugin 0.2.68 → 0.2.70

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.
Files changed (28) hide show
  1. package/dist/assets/{board-DFNV9VAZ.js → board-BfqxFNiQ.js} +1 -1
  2. package/dist/assets/index-BfLQnCNZ.js +91 -0
  3. package/dist/assets/index-DIapFz9v.css +1 -0
  4. package/dist/assets/{motion-CXdn34ih.js → motion-C0ALlgho.js} +1 -1
  5. package/dist/assets/{table-CEq3bTDv.js → table-WcMjnJll.js} +1 -1
  6. package/dist/assets/{ui-g7FaEglG.js → ui-B5I-3U91.js} +1 -1
  7. package/dist/assets/vendor-B-Lq_OG3.css +1 -0
  8. package/dist/assets/vendor-C56o26_3.js +2163 -0
  9. package/dist/index.html +8 -8
  10. package/dist/server/server/migrations/061_health_workout_raw_evidence.sql +95 -0
  11. package/dist/server/server/migrations/062_health_mobile_sync_sessions.sql +55 -0
  12. package/dist/server/server/src/app.js +149 -21
  13. package/dist/server/server/src/health-workout-analytics.js +572 -0
  14. package/dist/server/server/src/health.js +612 -4
  15. package/dist/server/server/src/openapi.js +162 -0
  16. package/dist/server/server/src/psyche-types.js +59 -0
  17. package/dist/server/server/src/services/devrage.js +191 -0
  18. package/dist/server/src/lib/api.js +13 -0
  19. package/openclaw.plugin.json +1 -1
  20. package/package.json +2 -1
  21. package/server/migrations/061_health_workout_raw_evidence.sql +95 -0
  22. package/server/migrations/062_health_mobile_sync_sessions.sql +55 -0
  23. package/skills/forge-openclaw/SKILL.md +35 -6
  24. package/skills/forge-openclaw/entity_conversation_playbooks.md +179 -18
  25. package/dist/assets/index-B0PIKEnz.css +0 -1
  26. package/dist/assets/index-BofyMuFh.js +0 -90
  27. package/dist/assets/vendor-BcOHGipZ.js +0 -1341
  28. package/dist/assets/vendor-DT3pnAKJ.css +0 -1
@@ -0,0 +1,55 @@
1
+ CREATE TABLE IF NOT EXISTS health_mobile_sync_sessions (
2
+ id TEXT PRIMARY KEY,
3
+ pairing_session_id TEXT NOT NULL REFERENCES companion_pairing_sessions(id) ON DELETE CASCADE,
4
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
5
+ status TEXT NOT NULL DEFAULT 'running',
6
+ schema_version TEXT NOT NULL DEFAULT 'healthkit-sync-v2',
7
+ requested_families_json TEXT NOT NULL DEFAULT '[]',
8
+ source_metadata_json TEXT NOT NULL DEFAULT '{}',
9
+ expected_counts_json TEXT NOT NULL DEFAULT '{}',
10
+ received_counts_json TEXT NOT NULL DEFAULT '{}',
11
+ byte_totals_json TEXT NOT NULL DEFAULT '{}',
12
+ affected_workout_ids_json TEXT NOT NULL DEFAULT '[]',
13
+ error_json TEXT NOT NULL DEFAULT '{}',
14
+ started_at TEXT NOT NULL,
15
+ completed_at TEXT,
16
+ failed_at TEXT,
17
+ aborted_at TEXT,
18
+ expired_at TEXT,
19
+ created_at TEXT NOT NULL,
20
+ updated_at TEXT NOT NULL
21
+ );
22
+
23
+ CREATE INDEX IF NOT EXISTS idx_health_mobile_sync_sessions_pairing_status
24
+ ON health_mobile_sync_sessions(pairing_session_id, status, started_at DESC);
25
+
26
+ CREATE TABLE IF NOT EXISTS health_mobile_sync_chunks (
27
+ id TEXT PRIMARY KEY,
28
+ sync_session_id TEXT NOT NULL REFERENCES health_mobile_sync_sessions(id) ON DELETE CASCADE,
29
+ chunk_id TEXT NOT NULL,
30
+ sequence INTEGER NOT NULL,
31
+ family TEXT NOT NULL,
32
+ checksum_sha256 TEXT NOT NULL,
33
+ record_count INTEGER NOT NULL DEFAULT 0,
34
+ byte_count INTEGER NOT NULL DEFAULT 0,
35
+ payload_json TEXT NOT NULL DEFAULT '{}',
36
+ payload_summary_json TEXT NOT NULL DEFAULT '{}',
37
+ received_at TEXT NOT NULL,
38
+ applied_at TEXT,
39
+ created_at TEXT NOT NULL,
40
+ updated_at TEXT NOT NULL,
41
+ UNIQUE(sync_session_id, chunk_id)
42
+ );
43
+
44
+ CREATE INDEX IF NOT EXISTS idx_health_mobile_sync_chunks_session_sequence
45
+ ON health_mobile_sync_chunks(sync_session_id, sequence);
46
+
47
+ CREATE TABLE IF NOT EXISTS health_mobile_sync_family_cursors (
48
+ id TEXT PRIMARY KEY,
49
+ pairing_session_id TEXT NOT NULL REFERENCES companion_pairing_sessions(id) ON DELETE CASCADE,
50
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
51
+ family TEXT NOT NULL,
52
+ cursor_json TEXT NOT NULL DEFAULT '{}',
53
+ updated_at TEXT NOT NULL,
54
+ UNIQUE(pairing_session_id, family)
55
+ );
@@ -111,6 +111,10 @@ Concrete route-key examples for internal use:
111
111
  `{"routeKey":"selection","query":{"from":"2026-05-01T00:00:00.000Z","to":"2026-05-14T23:59:59.999Z","placeIds":["place_home"],"userIds":["user_operator"]}}`
112
112
  - Movement trip detail:
113
113
  `{"routeKey":"tripDetail","pathParams":{"id":"trip_123"}}`
114
+ - Movement settings read:
115
+ `{"routeKey":"settings","query":{"userIds":["user_operator"]}}`
116
+ - Movement settings update:
117
+ `{"routeKey":"settingsUpdate","body":{"trackingEnabled":true,"publishMode":"draft_review","retentionMode":"aggregates_only"}}`
114
118
  - Movement missing-stay correction:
115
119
  first `{"routeKey":"userBoxPreflight","body":{"kind":"stay","startedAt":"2026-05-06T13:00:00.000Z","endedAt":"2026-05-06T15:00:00.000Z","placeLabel":"Home","userId":"user_operator"}}`,
116
120
  then `{"routeKey":"userBoxCreate","body":{"kind":"stay","startedAt":"2026-05-06T13:00:00.000Z","endedAt":"2026-05-06T15:00:00.000Z","placeLabel":"Home","userId":"user_operator","note":"Manual correction after reviewing the timeline."}}`
@@ -126,6 +130,12 @@ Concrete route-key examples for internal use:
126
130
  `{"routeKey":"listFlows","query":{"includeArchived":false}}`
127
131
  - Workbench box catalog:
128
132
  `{"routeKey":"boxCatalog"}`
133
+ - Workbench flow creation:
134
+ `{"routeKey":"createFlow","body":{"title":"Research digest","slug":"research-digest","description":"Turn a topic into a cited digest with a stable published summary.","nodes":[],"edges":[]}}`
135
+ - Workbench flow edit:
136
+ `{"routeKey":"updateFlow","pathParams":{"id":"flow_research_digest"},"body":{"description":"Keep the same input contract but add a stronger evidence-check node."}}`
137
+ - Workbench flow deletion:
138
+ `{"routeKey":"deleteFlow","pathParams":{"id":"flow_research_digest"}}`
129
139
  - Workbench run detail:
130
140
  `{"routeKey":"runDetail","pathParams":{"id":"flow_research_digest","runId":"run_123"}}`
131
141
  - Workbench published output:
@@ -134,6 +144,8 @@ Concrete route-key examples for internal use:
134
144
  `{"routeKey":"latestNodeOutput","pathParams":{"id":"flow_research_digest","nodeId":"node_summary"}}`
135
145
  - Workbench run execution:
136
146
  `{"routeKey":"runFlow","pathParams":{"id":"flow_research_digest"},"body":{"input":{"topic":"question flow quality"}}}`
147
+ - Workbench flow chat follow-up:
148
+ `{"routeKey":"chatFlow","pathParams":{"id":"flow_research_digest"},"body":{"message":"Refine the summary around API route risks and keep the published output stable."}}`
137
149
 
138
150
  Preferences rule:
139
151
 
@@ -173,11 +185,16 @@ Health rule:
173
185
 
174
186
  - Sleep and sports records are first-class health surfaces, not generic notes or tasks.
175
187
  - Use `forge_get_sleep_overview` and `forge_get_sports_overview` for review and trend reading.
176
- - In `forge_get_agent_onboarding.entityRouteModel.readModelOnlySurfaces`, the health
177
- overview routes are published under both the plain names `sleepOverview` and
178
- `sportsOverview` and the entity-style aliases `sleep_overview` and
179
- `sports_overview`. Treat those as read-only overview surfaces, not batch CRUD
180
- entities.
188
+ - In `forge_get_agent_onboarding.entityRouteModel.readModelOnlySurfaces`, operator,
189
+ calendar, self-observation, sleep, and sports read models are published with
190
+ both camelCase names and entity-style aliases where useful, including
191
+ `operatorOverview`, `operatorContext`, `calendarOverview`, `sleepOverview`,
192
+ `sportsOverview`, `operator_overview`, `operator_context`,
193
+ `calendar_overview`, `self_observation`, `sleep_overview`, and
194
+ `sports_overview`. Treat those as read-only surfaces, not batch CRUD entities.
195
+ - Use `forge_get_operator_overview` for a broad Forge status read, `forge_get_operator_context`
196
+ for current work and risk, and `forge_get_calendar_overview` before calendar-aware
197
+ planning or scheduling mutations.
181
198
  - Use the shared batch entity tools for ordinary `sleep_session` and `workout_session` create, update, delete, and search work. Do not force agents into a large one-route-per-entity mental model when the batch routes already cover the record cleanly.
182
199
  - Use `forge_update_sleep_session` and `forge_update_workout_session` only when the job is reflective enrichment on one existing health record after review, such as attaching notes, tags, mood, meaning, or Forge links.
183
200
  - Habit-generated workouts and imported HealthKit workouts belong to the same workout record model, so do not invent a separate storage path for sport sessions.
@@ -486,6 +503,10 @@ through `forge_create_entities` or `forge_update_entities`.
486
503
  `/api/v1/movement/day`, `/api/v1/movement/month`, `/api/v1/movement/all-time`,
487
504
  `/api/v1/movement/timeline`, `/api/v1/movement/places`,
488
505
  `/api/v1/movement/selection`, and `/api/v1/movement/trips/:id`.
506
+ - Use `GET /api/v1/movement/settings` and `PATCH /api/v1/movement/settings` when
507
+ the user wants to inspect or change passive capture, publish mode, retention mode,
508
+ or companion readiness. Do not treat movement settings as a place, stay, trip, or
509
+ batch entity write.
489
510
  - When the user is filling a missing-data gap, the default write path is a user-defined overlay box, not a raw stay or trip patch. Use `POST /api/v1/movement/user-boxes/preflight` if you need to confirm overlap or snap to the nearest missing interval, then `POST /api/v1/movement/user-boxes` with `kind: "stay"` or `kind: "trip"`.
490
511
  - When the user is repairing already-saved movement data, use the repair routes that match the saved object:
491
512
  `PATCH /api/v1/movement/user-boxes/:id`,
@@ -496,7 +517,7 @@ through `forge_create_entities` or `forge_update_entities`.
496
517
  - Use `PATCH /api/v1/movement/stays/:id` or `PATCH /api/v1/movement/trips/:id` only when the user is editing an existing recorded stay or recorded trip. Do not use those routes to fill a missing span.
497
518
  - If the user says something as explicit as "that missing block was me staying home", do not reopen broad intake. Confirm the interval or place only if it is still ambiguous, then create the overlay and read the timeline back.
498
519
  - Life Force lives under `/api/v1/life-force*`. Use `GET /api/v1/life-force` for the current energy overview, `PATCH /api/v1/life-force/profile` for durable profile changes, `PUT /api/v1/life-force/templates/:weekday` for weekday curve edits, and `POST /api/v1/life-force/fatigue-signals` for real-time tired or recovered signals.
499
- - Workbench lives under `/api/v1/workbench/*`. Use those dedicated routes for flow catalog reads, flow CRUD, runs, published outputs, node results, and latest-node-output reads instead of trying to force Workbench through the batch entity routes.
520
+ - Workbench lives under `/api/v1/workbench/*`. Use those dedicated routes for flow catalog reads, flow CRUD, runs, saved-flow chat follow-ups, published outputs, node results, and latest-node-output reads instead of trying to force Workbench through the batch entity routes.
500
521
  - If you need the OpenClaw HTTP mirror instead of the raw Forge runtime path, the
501
522
  same specialized families are exposed under `/forge/v1/movement/*`,
502
523
  `/forge/v1/life-force/*`, and `/forge/v1/workbench/*`.
@@ -505,8 +526,16 @@ through `forge_create_entities` or `forge_update_entities`.
505
526
  `POST /api/v1/workbench/flows` for flow creation,
506
527
  `PATCH /api/v1/workbench/flows/:id` and `DELETE /api/v1/workbench/flows/:id` for saved-flow edits or deletion,
507
528
  `/api/v1/workbench/flows/:id/run` or `/api/v1/workbench/run` for execution,
529
+ `POST /api/v1/workbench/flows/:id/chat` for saved-flow chat follow-ups,
508
530
  `/api/v1/workbench/flows/:id/output` for published outputs, and the run/node routes
509
531
  under `/api/v1/workbench/flows/:id` for run history and node-level inspection.
532
+ - For Workbench flow creation or edits, clarify the stable input contract, intended
533
+ published output, and smallest structural change before asking for raw JSON or node
534
+ payloads. For deletion, confirm the saved flow and whether published outputs or run
535
+ history need preservation elsewhere before using the delete route.
536
+ - For Workbench flow chat follow-ups, use `POST /api/v1/workbench/flows/:id/chat`
537
+ only when the user wants flow-specific conversation. Do not turn that follow-up
538
+ into a new run, note, or generic entity update unless the user asks for that.
510
539
  - If you are unsure which specialized route family applies, check `forge_get_agent_onboarding` and use its `entityRouteModel.specializedDomainSurfaces` section before guessing.
511
540
  - If the truth of the current Movement, Life Force, or Workbench state is still unclear, prefer the dedicated read before the mutation so the correction stays truthful.
512
541
  - After a concrete Movement, Life Force, or Workbench correction, read the relevant specialized view back when the user is trying to understand the result rather than only store it.
@@ -237,10 +237,11 @@ Use this quick split before the conversation gets too detailed.
237
237
  `preference_signal`, and `self_observation` are action workflows. Start from what
238
238
  the user is trying to do, then use the dedicated action tool or note-backed write
239
239
  model.
240
- - `sleep_overview` and `sports_overview` are read-model-only surfaces. Use them when
241
- the user wants to review nights, workouts, training load, recovery context, or
242
- health patterns before deciding whether one stored `sleep_session` or
243
- `workout_session` needs enrichment.
240
+ - `operator_overview`, `operator_context`, `calendar_overview`, `sleep_overview`,
241
+ and `sports_overview` are read-model-only surfaces. Use them when the user wants
242
+ to understand current Forge state, work risk, calendar commitments, nights,
243
+ workouts, training load, recovery context, or health patterns before deciding
244
+ whether a stored entity needs creation or enrichment.
244
245
  - Movement, Life Force, and Workbench are specialized domain areas. Use their
245
246
  dedicated route families for timelines and overlays, energy profile/templates and
246
247
  fatigue signals, and Workbench flow execution or result artifacts. When available,
@@ -282,6 +283,19 @@ still knowing the exact write/read family before it acts.
282
283
  - `calendar_connection`: specialized CRUD. Use provider discovery, connection CRUD,
283
284
  selected-calendar rediscovery, sync, and delete routes rather than batch entity
284
285
  tools.
286
+ - `operator_overview`: read-model-only operator surface. Use
287
+ `forge_get_operator_overview` or `/api/v1/operator/overview` when the user wants
288
+ the current Forge picture, attention cues, or broad status before choosing a
289
+ specific entity action.
290
+ - `operator_context`: read-model-only operator surface. Use
291
+ `forge_get_operator_context` or `/api/v1/operator/context` when the user wants
292
+ current work, active runs, risks, board context, or next moves before mutating
293
+ anything.
294
+ - `calendar_overview`: read-model-only calendar surface. Use
295
+ `forge_get_calendar_overview` or `/api/v1/calendar/overview` when the user wants
296
+ mirrored events, work blocks, timeboxes, provider state, or availability before
297
+ creating a `calendar_event`, `work_block_template`, `task_timebox`, or
298
+ `calendar_connection`.
285
299
  - `task_run`: action workflow. Use task-run start, heartbeat, focus, complete, and
286
300
  release routes; never treat status changes as proof of live work.
287
301
  - `work_adjustment`: action workflow. Use the signed work-adjustment route for real
@@ -1061,6 +1075,81 @@ Preferred opening question:
1061
1075
 
1062
1076
  - "Which task or project should this time correction belong to?"
1063
1077
 
1078
+ ## Operator Overview
1079
+
1080
+ Aim: read the broad Forge state before choosing a specific action, without turning a
1081
+ status check into generic intake.
1082
+
1083
+ Arc:
1084
+
1085
+ 1. Ask what the user is trying to understand about Forge overall.
1086
+ 2. Read the operator overview before asking the user to reconstruct active work,
1087
+ attention cues, or broad status from memory.
1088
+ 3. Reflect the practical decision the overview should support.
1089
+ 4. Move into a specific entity flow only when the overview points to a concrete goal,
1090
+ project, task, habit, note, Psyche record, or follow-up action.
1091
+
1092
+ Helpful follow-up lanes:
1093
+
1094
+ - whether the user wants a broad status read, a priority decision, or a handoff
1095
+ - which owner or user scope matters if several humans or bots are involved
1096
+ - what decision the overview should help them make next
1097
+
1098
+ Route note:
1099
+
1100
+ - `operator_overview` is a read-model-only operator surface. Use
1101
+ `forge_get_operator_overview` or `/api/v1/operator/overview`; do not create,
1102
+ update, or delete `operator_overview` through batch CRUD.
1103
+ - If the read reveals a specific record that needs work, switch to that record's
1104
+ normal route posture after the user chooses the follow-up.
1105
+
1106
+ Ready to review when:
1107
+
1108
+ - the broad question is clear enough
1109
+ - any owner or user scope that changes the read is clear enough
1110
+
1111
+ Preferred opening question:
1112
+
1113
+ - "What are you trying to understand about Forge overall right now?"
1114
+
1115
+ ## Operator Context
1116
+
1117
+ Aim: inspect current work, active runs, risk, and next moves before changing records.
1118
+
1119
+ Arc:
1120
+
1121
+ 1. Ask whether the user is checking current work, risk, blockers, active sessions, or
1122
+ the next move.
1123
+ 2. Read operator context before reopening a create or update intake.
1124
+ 3. Reflect what the read is meant to decide: continue, stop, reprioritize, update, or
1125
+ create.
1126
+ 4. Move to task-run, work-adjustment, task, project, or note flow only when one
1127
+ concrete follow-up is visible.
1128
+
1129
+ Helpful follow-up lanes:
1130
+
1131
+ - current task or active run
1132
+ - blocked or stale work
1133
+ - next move versus broad review
1134
+ - owner or user scope when bot and human work are both present
1135
+
1136
+ Route note:
1137
+
1138
+ - `operator_context` is a read-model-only operator surface. Use
1139
+ `forge_get_operator_context` or `/api/v1/operator/context`; do not mutate it
1140
+ through batch CRUD.
1141
+ - If the user decides to start, complete, release, or adjust work after the read,
1142
+ switch to the dedicated action workflow for that operation.
1143
+
1144
+ Ready to review when:
1145
+
1146
+ - the current-work question is clear
1147
+ - any user or owner scope is clear enough
1148
+
1149
+ Preferred opening question:
1150
+
1151
+ - "What current work, risk, or next move are you trying to check?"
1152
+
1064
1153
  ## Self Observation
1065
1154
 
1066
1155
  Aim: capture one observed episode in a structured chain without letting a loose note
@@ -1251,6 +1340,46 @@ Preferred opening question:
1251
1340
 
1252
1341
  - "What are you trying to understand from your workout picture right now?"
1253
1342
 
1343
+ ## Calendar Overview
1344
+
1345
+ Aim: review commitments, work blocks, provider state, and existing timeboxes before
1346
+ creating or changing calendar records.
1347
+
1348
+ Arc:
1349
+
1350
+ 1. Ask what the user is trying to understand or decide from the calendar picture.
1351
+ 2. Ask for the date range or owner scope only if it changes the read.
1352
+ 3. Read the calendar overview before asking the user to recreate availability from
1353
+ memory.
1354
+ 4. Reflect the practical decision the overview should support.
1355
+ 5. Move to `calendar_event`, `work_block_template`, `task_timebox`, or
1356
+ `calendar_connection` only when a specific follow-up action is visible.
1357
+
1358
+ Helpful follow-up lanes:
1359
+
1360
+ - which day, week, or date range matters
1361
+ - whether the question is availability, conflicts, provider health, work blocks, or
1362
+ existing timeboxes
1363
+ - what scheduling or planning decision the review should support
1364
+
1365
+ Route note:
1366
+
1367
+ - `calendar_overview` is a read-model-only calendar surface. Use
1368
+ `forge_get_calendar_overview` or `/api/v1/calendar/overview`; do not create,
1369
+ update, or delete `calendar_overview` through batch CRUD.
1370
+ - If the review reveals a concrete scheduling action, switch to the stored
1371
+ `calendar_event`, `work_block_template`, or `task_timebox` batch route, or to the
1372
+ specialized `calendar_connection` lifecycle route.
1373
+
1374
+ Ready to review when:
1375
+
1376
+ - the user's practical calendar question is clear
1377
+ - the relevant date range or owner scope is clear enough
1378
+
1379
+ Preferred opening question:
1380
+
1381
+ - "What are you trying to understand or decide from your calendar picture?"
1382
+
1254
1383
  ## Calendar Connection
1255
1384
 
1256
1385
  Aim: connect the right provider deliberately without turning setup into a credential
@@ -1370,8 +1499,9 @@ Preferred opening question:
1370
1499
  ## Movement
1371
1500
 
1372
1501
  Aim: clarify whether the user wants to understand time in place, review travel
1373
- behavior, add or update a stay or trip, inspect one place, or link movement context to
1374
- another Forge record before choosing the dedicated route family.
1502
+ behavior, add or update a stay or trip, inspect one place, change movement operating
1503
+ settings, or link movement context to another Forge record before choosing the
1504
+ dedicated route family.
1375
1505
 
1376
1506
  Arc:
1377
1507
 
@@ -1382,14 +1512,16 @@ Arc:
1382
1512
  3. Ask whether the focus is a stay, a trip, a place, a timeline window, or a selected span.
1383
1513
  4. Ask for the time window, place, or movement item that makes the question concrete.
1384
1514
  5. Ask what they are trying to notice, preserve, or answer through that movement context.
1385
- 6. Choose the dedicated day, month, all-time, timeline, places, trip-detail, or
1386
- selection route once the question shape is clear.
1387
- 7. If the truth of one uncertain span is still unclear, read the timeline or saved-box
1515
+ 6. If the user is changing movement operating behavior, ask whether the change is
1516
+ about passive tracking, publish mode, retention, or companion readiness.
1517
+ 7. Choose the dedicated day, month, all-time, timeline, places, trip-detail,
1518
+ selection, or settings route once the question shape is clear.
1519
+ 8. If the truth of one uncertain span is still unclear, read the timeline or saved-box
1388
1520
  detail before you mutate it.
1389
- 8. Skip the meta lane question when the user already named the exact correction or
1521
+ 9. Skip the meta lane question when the user already named the exact correction or
1390
1522
  review target and only one ambiguity remains.
1391
- 9. Use the dedicated movement route once you know whether the user needs timeline
1392
- review, overlay, place or trip detail, selection summary, or repair.
1523
+ 10. Use the dedicated movement route once you know whether the user needs timeline
1524
+ review, overlay, place or trip detail, selection summary, settings, or repair.
1393
1525
 
1394
1526
  Direct action rules:
1395
1527
 
@@ -1398,6 +1530,11 @@ Direct action rules:
1398
1530
  - Treat day, month, all-time, timeline, trip detail, and selection as internal read
1399
1531
  lanes. With the user, ask for the useful time window, place, selected span, stay, or
1400
1532
  trip instead of listing route choices.
1533
+ - Treat settings as a separate movement lane for passive capture, publish mode, and
1534
+ retention behavior. Ask what operating behavior should change instead of routing it
1535
+ through a place, stay, or trip edit.
1536
+ - Use settings reads before settings writes when the current capture or publish state
1537
+ is uncertain.
1401
1538
  - Preflight with `/api/v1/movement/user-boxes/preflight` when overlap or exact timing
1402
1539
  is unclear, then create the overlay with `/api/v1/movement/user-boxes`.
1403
1540
  - Use `kind: "stay"` when the user stayed in one place and `kind: "trip"` when they
@@ -1427,6 +1564,8 @@ Helpful follow-up lanes:
1427
1564
  - whether the edit is a missing-gap overlay versus a true recorded stay/trip patch
1428
1565
  - whether the user is trying to repair one recorded movement item versus fill a
1429
1566
  missing span
1567
+ - whether they are changing passive capture, publish mode, retention, or companion
1568
+ readiness rather than movement history
1430
1569
 
1431
1570
  Lane-to-route map:
1432
1571
 
@@ -1436,6 +1575,8 @@ Lane-to-route map:
1436
1575
  `/api/v1/movement/all-time`, `/api/v1/movement/places`, or `/api/v1/movement/selection`
1437
1576
  - inspect the full life timeline:
1438
1577
  `/api/v1/movement/timeline`
1578
+ - inspect or change passive capture and publishing settings:
1579
+ `GET /api/v1/movement/settings` or `PATCH /api/v1/movement/settings`
1439
1580
  - create or revise one saved place:
1440
1581
  `/api/v1/movement/places` or `/api/v1/movement/places/:id`
1441
1582
  - inspect one trip:
@@ -1461,6 +1602,7 @@ Ready to act when:
1461
1602
  - the time range, place, stay, trip, or selection is clear enough
1462
1603
  - the user goal is clear enough to tell review, overlay, and repair apart
1463
1604
  - the user goal is clear enough to choose the route
1605
+ - for settings changes, the intended tracking, publish, or retention behavior is clear
1464
1606
 
1465
1607
  Preferred opening question:
1466
1608
 
@@ -1550,18 +1692,25 @@ Arc:
1550
1692
 
1551
1693
  1. Ask what they are trying to learn, repair, publish, or run through Workbench
1552
1694
  before you narrow to flow discovery, editing, execution, or results.
1553
- 2. Ask whether the job is flow discovery, one flow edit, execution, run history, published output, node-level inspection, or latest-node-output lookup.
1695
+ 2. Ask whether the job is flow discovery, one flow edit, execution, run history, published output, node-level inspection, latest-node-output lookup, or a follow-up message in a saved flow chat.
1554
1696
  3. Ask which flow, slug, run, or node the request is about.
1555
1697
  4. Ask whether they need the stable flow contract, one run result, one published
1556
1698
  output, one node result, or the latest node output.
1557
- 5. If the user already named the flow and action clearly, skip the meta lane
1699
+ 5. If the user is creating or editing a flow, clarify the flow's job, stable inputs,
1700
+ expected public output, and the smallest structural change before asking for node
1701
+ details.
1702
+ 6. If the user wants to delete or archive a flow, ask which saved flow is affected
1703
+ and what future run, published output, or public contract should no longer exist.
1704
+ 7. If the user wants to continue a saved flow chat, ask which flow should receive the
1705
+ follow-up and what the message should accomplish.
1706
+ 8. If the user already named the flow and action clearly, skip the meta lane
1558
1707
  question and ask only for the missing run, node, or output scope.
1559
- 6. If the user wants a stable public input contract or published output, prefer those
1708
+ 9. If the user wants a stable public input contract or published output, prefer those
1560
1709
  dedicated reads instead of detouring through run history first.
1561
- 7. If the user is debugging one failed run, ask whether the useful artifact is the run
1710
+ 10. If the user is debugging one failed run, ask whether the useful artifact is the run
1562
1711
  summary, one node result, the latest node output, or the published output before
1563
1712
  you start asking for edits.
1564
- 8. Route to the dedicated workbench route family once the execution lane is clear.
1713
+ 11. Route to the dedicated workbench route family once the execution lane is clear.
1565
1714
 
1566
1715
  Helpful follow-up lanes:
1567
1716
 
@@ -1582,7 +1731,7 @@ Lane-to-route map:
1582
1731
  - run from a payload-first contract:
1583
1732
  `/api/v1/workbench/run`
1584
1733
  - send one follow-up message into a saved flow chat:
1585
- `/api/v1/workbench/flows/:id/chat`
1734
+ `POST /api/v1/workbench/flows/:id/chat`
1586
1735
  - inspect published output or run history:
1587
1736
  `/api/v1/workbench/flows/:id/output` or `/api/v1/workbench/flows/:id/runs`
1588
1737
  - inspect one run or node result:
@@ -1617,12 +1766,24 @@ Direct action rules:
1617
1766
  unless they explicitly want historical debugging.
1618
1767
  - If the user wants to understand what inputs a flow can accept before editing or
1619
1768
  running it, read the box catalog or flow detail before asking for a payload.
1769
+ - For new flows, ask what the flow should reliably produce, what input contract it
1770
+ should accept, and what first node or box should anchor it. Do not start by asking
1771
+ for raw JSON.
1772
+ - For flow edits, ask what behavior should change and how the public contract stays
1773
+ stable, unless the user explicitly wants to change the contract.
1774
+ - For flow deletion, confirm the saved flow and whether published outputs or run
1775
+ history still need to be preserved elsewhere before calling delete.
1776
+ - For flow chat follow-ups, use the saved flow chat route only when the user wants to
1777
+ continue a flow-specific conversation. Do not turn a chat follow-up into a new flow
1778
+ run, note, or generic entity update unless that is what the user asks for.
1620
1779
 
1621
1780
  Ready to act when:
1622
1781
 
1623
1782
  - the workbench lane is clear
1624
1783
  - the flow, run, or node is clear enough
1625
1784
  - the requested read or mutation is clear enough to choose the route
1785
+ - for flow CRUD, the intended stable input, output, or lifecycle effect is clear
1786
+ - for flow chat, the saved flow and follow-up message aim are clear
1626
1787
 
1627
1788
  Preferred opening question:
1628
1789