forge-openclaw-plugin 0.2.60 → 0.2.65

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 (59) hide show
  1. package/README.md +121 -51
  2. package/dist/assets/{board-B1V3M__K.js → board-DUwMfZvN.js} +1 -1
  3. package/dist/assets/index-B9VOpR7r.css +1 -0
  4. package/dist/assets/index-DoHjjze2.js +90 -0
  5. package/dist/assets/{motion-CltSTItx.js → motion-Crg3QyXD.js} +1 -1
  6. package/dist/assets/{table-B-VrSFx8.js → table-CTlDeYRs.js} +1 -1
  7. package/dist/assets/{ui-DUqM4jkt.js → ui-CJPaElbj.js} +1 -1
  8. package/dist/assets/{vendor-C0otBhgu.js → vendor-BdrT2htV.js} +217 -207
  9. package/dist/companion-iroh/darwin-arm64/forge-companion-iroh +0 -0
  10. package/dist/companion-iroh/darwin-x64/forge-companion-iroh +0 -0
  11. package/dist/companion-iroh/linux-x64/forge-companion-iroh +0 -0
  12. package/dist/companion-iroh-src/Cargo.lock +4559 -0
  13. package/dist/companion-iroh-src/Cargo.toml +37 -0
  14. package/dist/companion-iroh-src/src/lib.rs +279 -0
  15. package/dist/companion-iroh-src/src/main.rs +478 -0
  16. package/dist/companion-iroh-src/src/protocol.rs +129 -0
  17. package/dist/gamification-previews/dark-fantasy-item-trophy-tasks-anvil-marathon.webp +0 -0
  18. package/dist/gamification-previews/dark-fantasy-item-trophy-xp-levels-the-first-heat.webp +0 -0
  19. package/dist/gamification-previews/dark-fantasy-item-unlock-streaks-molten-crown-fire.webp +0 -0
  20. package/dist/gamification-previews/dark-fantasy-mascot.webp +0 -0
  21. package/dist/gamification-previews/dramatic-smithie-item-trophy-tasks-anvil-marathon.webp +0 -0
  22. package/dist/gamification-previews/dramatic-smithie-item-trophy-xp-levels-the-first-heat.webp +0 -0
  23. package/dist/gamification-previews/dramatic-smithie-item-unlock-streaks-molten-crown-fire.webp +0 -0
  24. package/dist/gamification-previews/dramatic-smithie-mascot.webp +0 -0
  25. package/dist/gamification-previews/mind-locksmith-item-trophy-tasks-anvil-marathon.webp +0 -0
  26. package/dist/gamification-previews/mind-locksmith-item-trophy-xp-levels-the-first-heat.webp +0 -0
  27. package/dist/gamification-previews/mind-locksmith-item-unlock-streaks-molten-crown-fire.webp +0 -0
  28. package/dist/gamification-previews/mind-locksmith-mascot.webp +0 -0
  29. package/dist/index.html +7 -7
  30. package/dist/openclaw/parity.js +27 -0
  31. package/dist/openclaw/plugin-entry-shared.js +2 -2
  32. package/dist/openclaw/plugin-sdk-types.d.ts +2 -1
  33. package/dist/openclaw/routes.d.ts +4 -0
  34. package/dist/openclaw/routes.js +112 -3
  35. package/dist/openclaw/tools.js +32 -4
  36. package/dist/server/server/migrations/059_data_backup_retention.sql +2 -0
  37. package/dist/server/server/src/app.js +288 -61
  38. package/dist/server/server/src/data-management-types.js +2 -0
  39. package/dist/server/server/src/discovery-advertiser.js +13 -0
  40. package/dist/server/server/src/health.js +58 -3
  41. package/dist/server/server/src/movement.js +16 -1
  42. package/dist/server/server/src/openapi.js +410 -9
  43. package/dist/server/server/src/repositories/rewards.js +60 -0
  44. package/dist/server/server/src/services/companion-iroh.js +425 -0
  45. package/dist/server/server/src/services/data-management.js +32 -2
  46. package/dist/server/server/src/services/doctor.js +762 -0
  47. package/dist/server/server/src/services/gamification.js +75 -3
  48. package/dist/server/server/src/services/life-force.js +166 -25
  49. package/dist/server/server/src/web.js +88 -12
  50. package/dist/server/src/lib/api.js +9 -0
  51. package/dist/server/src/lib/gamification-catalog.js +1 -1
  52. package/openclaw.plugin.json +85 -3
  53. package/package.json +10 -6
  54. package/server/migrations/059_data_backup_retention.sql +2 -0
  55. package/skills/forge-openclaw/SKILL.md +80 -19
  56. package/skills/forge-openclaw/entity_conversation_playbooks.md +283 -25
  57. package/skills/forge-openclaw/psyche_entity_playbooks.md +82 -0
  58. package/dist/assets/index-BwKAPo98.css +0 -1
  59. package/dist/assets/index-Dy7c-dRY.js +0 -90
@@ -18,6 +18,12 @@ Forge correctly, and gather only the structure that still matters.
18
18
  - The first question should usually clarify whether the user is trying to understand,
19
19
  preserve, decide, schedule, or change something, not just which field or provider
20
20
  they want.
21
+ - Before asking, decide the API posture internally: shared batch entity route,
22
+ specialized CRUD surface, action workflow, or specialized domain route. If that
23
+ posture is unclear, ask the one user-facing question that will choose it.
24
+ - Do not let API uncertainty leak out as vague wording. With the user, ask about the
25
+ real thing: the time window, flow, run, feeling, boundary, owner, or decision that
26
+ would change the action.
21
27
  - First identify the user's job when the lane is not already explicit:
22
28
  are they trying to add, update, review, compare, navigate, link, or run something?
23
29
  - Before every question, decide the one missing thing you are trying to clarify.
@@ -27,6 +33,9 @@ Forge correctly, and gather only the structure that still matters.
27
33
  - Prefer one clean question to a stacked sentence with several asks.
28
34
  - Reflect briefly when the user gives meaning, ambivalence, or emotionally loaded
29
35
  context that matters to the record.
36
+ - Avoid generic reflections such as "that sounds important" unless you name what is
37
+ important in plain language. A useful reflection should make the next question feel
38
+ earned.
30
39
  - Especially for goals, habits, notes, and updates, reflect what the user is trying to
31
40
  preserve, change, or make true before you ask for structure.
32
41
  - For emotionally meaningful non-Psyche records such as goals, habits, notes, and many
@@ -105,6 +114,24 @@ With the user, say the human thing:
105
114
  The API path still matters, but it should not leak into the question unless the user
106
115
  is explicitly asking about implementation.
107
116
 
117
+ ## Dedicated surface lane translation
118
+
119
+ Use this when Movement, Life Force, or Workbench work needs a route choice. The route
120
+ choice is an internal classification step, not a user-facing menu.
121
+
122
+ - Translate "day, month, all-time, timeline, trip detail, or selection" into "which
123
+ time window or specific stay/trip should we look at?"
124
+ - Translate "overview, profile, weekdayTemplate, or fatigueSignal" into "is this about
125
+ your current state, a durable assumption, a repeated weekday rhythm, or how you feel
126
+ right now?"
127
+ - Translate "listFlows, boxCatalog, runDetail, nodeResult, latestNodeOutput, or
128
+ publishedOutput" into "do you need the saved flow, its inputs, one run, one node, or
129
+ the public result?"
130
+ - If the user already gave the concrete object, time window, weekday, flow, run, or
131
+ node, skip the route menu entirely and ask only for the missing product detail.
132
+ - Once the lane is selected, use the exact route key internally and do not invent a
133
+ friendlier path.
134
+
108
135
  ## Psyche and memory routing
109
136
 
110
137
  Self-observation is not the default container for psychological material. Use it only
@@ -200,6 +227,9 @@ Use this quick split before the conversation gets too detailed.
200
227
  `/api/v1/entities/search`, `/api/v1/entities/create`,
201
228
  `/api/v1/entities/update`, `/api/v1/entities/delete`, and
202
229
  `/api/v1/entities/restore`.
230
+ - Every normal entity section below inherits that batch-route default unless its own
231
+ route note says otherwise. Do not invent one-off entity endpoints for ordinary
232
+ stored records.
203
233
  - `wiki_page` and `calendar_connection` are specialized CRUD areas. Use the wiki
204
234
  page routes and calendar connection setup or sync routes instead of pretending they
205
235
  are simple batch records.
@@ -207,6 +237,10 @@ Use this quick split before the conversation gets too detailed.
207
237
  `preference_signal`, and `self_observation` are action workflows. Start from what
208
238
  the user is trying to do, then use the dedicated action tool or note-backed write
209
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.
210
244
  - Movement, Life Force, and Workbench are specialized domain areas. Use their
211
245
  dedicated route families for timelines and overlays, energy profile/templates and
212
246
  fatigue signals, and Workbench flow execution or result artifacts. When available,
@@ -216,6 +250,65 @@ Use this quick split before the conversation gets too detailed.
216
250
  - Once the route posture is clear, keep the questioning focused on the missing detail
217
251
  that selects the route or payload. Do not ask route-neutral reflective questions
218
252
  after the action path is already obvious.
253
+ - If the tool schema and live onboarding disagree about a specialized route key or
254
+ path, treat that as a contract mismatch to fix. Do not guess a nearby route.
255
+
256
+ ## Full Route Posture Matrix
257
+
258
+ Use this as an internal checklist when simulating or handling an entity flow. Do not
259
+ read this table to the user. It exists so the agent can ask natural questions while
260
+ still knowing the exact write/read family before it acts.
261
+
262
+ - `goal`, `project`, `strategy`, `task`, `habit`, `tag`, `note`, `insight`,
263
+ `calendar_event`, `work_block_template`, and `task_timebox`: normal stored Forge
264
+ entities. Search, create, update, delete, and restore through the shared batch
265
+ entity routes.
266
+ - `preference_catalog`, `preference_catalog_item`, `preference_context`, and
267
+ `preference_item`: normal stored Preferences records. Use shared batch entity
268
+ routes for CRUD; switch to Preferences action routes only for judgments, signals,
269
+ game starts, merges, entity seeding, or explicit score overrides.
270
+ - `questionnaire_instrument`: normal stored questionnaire CRUD for ordinary authoring
271
+ and edits. Use questionnaire action routes only for clone, draft, and publish
272
+ state.
273
+ - `sleep_session` and `workout_session`: normal stored health records for ordinary
274
+ CRUD. Use health overview/read helpers for review and reflective update helpers only
275
+ when enriching one already-known record after review.
276
+ - `psyche_value`, `behavior_pattern`, `behavior`, `belief_entry`, `mode_profile`,
277
+ `mode_guide_session`, `trigger_report`, `event_type`, and `emotion_definition`:
278
+ psychologically meaningful records, but normal stored entities for API purposes.
279
+ Search and mutate through shared batch entity routes after the formulation is clear.
280
+ - `wiki_page`: specialized CRUD. Use wiki page/search/upsert routes so page rows,
281
+ backlinks, spaces, aliases, and metadata stay coherent.
282
+ - `calendar_connection`: specialized CRUD. Use provider discovery, connection CRUD,
283
+ selected-calendar rediscovery, sync, and delete routes rather than batch entity
284
+ tools.
285
+ - `task_run`: action workflow. Use task-run start, heartbeat, focus, complete, and
286
+ release routes; never treat status changes as proof of live work.
287
+ - `work_adjustment`: action workflow. Use the signed work-adjustment route for real
288
+ minutes that happened outside a live run.
289
+ - `preference_judgment` and `preference_signal`: action workflows. Use the dedicated
290
+ Preferences judgment and signal routes, not batch CRUD.
291
+ - `questionnaire_run`: action workflow. Use questionnaire run start, read, update, and
292
+ complete routes.
293
+ - `self_observation`: read-model and note-backed workflow. Read the self-observation
294
+ calendar, then create or update an observed `note` with `frontmatter.observedAt`
295
+ only when a lightweight episode observation is the right container.
296
+ - `sleep_overview`: read-model-only health surface. Use the sleep overview route or
297
+ `forge_get_sleep_overview` when the user wants to review recent nights, regularity,
298
+ score, stages, or recovery patterns before deciding whether a specific
299
+ `sleep_session` needs reflective enrichment.
300
+ - `sports_overview`: read-model-only health surface. Use the sports overview route or
301
+ `forge_get_sports_overview` when the user wants to review workouts, training load,
302
+ effort, type distribution, or recovery context before deciding whether a specific
303
+ `workout_session` needs reflective enrichment.
304
+ - `movement`: specialized domain surface. Use the dedicated movement routes for day,
305
+ month, all-time, timeline, places, trip detail, selection aggregates, manual
306
+ overlays, and repair actions.
307
+ - `life_force`: specialized domain surface. Use the dedicated Life Force routes for
308
+ overview, profile updates, weekday templates, and fatigue signals.
309
+ - `workbench`: specialized domain surface. Use the dedicated Workbench routes for
310
+ flow catalog/detail, flow CRUD, execution, run history, published output, node
311
+ result, and latest-node-output work.
219
312
 
220
313
  ## Active-listening patterns
221
314
 
@@ -314,8 +407,8 @@ exists.
314
407
  - If the next answer would not change the route, wording, timing, links, or useful
315
408
  interpretation, stop asking and act.
316
409
  - Close cleanly:
317
- once the user says the wording or route lands, summarize once and move to the read
318
- or write.
410
+ once the user says the wording or next action lands, summarize once and move to the
411
+ read or write.
319
412
 
320
413
  When an adjacent record becomes visible:
321
414
 
@@ -344,8 +437,10 @@ Use this quick internal check before every follow-up question.
344
437
  1. What is the one thing still unknown?
345
438
  2. Does that unknown affect the entity shape, the wording, the placement, or the
346
439
  operational detail?
347
- 3. What is the smallest question that would answer that unknown?
348
- 4. If the user already gave enough to act, stop asking and move to a short summary or
440
+ 3. Does it affect the API posture: batch CRUD, specialized CRUD, action workflow, or
441
+ specialized domain route?
442
+ 4. What is the smallest question that would answer that unknown?
443
+ 5. If the user already gave enough to act, stop asking and move to a short summary or
349
444
  the write.
350
445
 
351
446
  Useful calibration heuristics:
@@ -360,6 +455,8 @@ Useful calibration heuristics:
360
455
  once and then return to the one missing structural detail.
361
456
  - If the next question would only decorate the record and not change its usefulness,
362
457
  skip it.
458
+ - If the next question would not change the API path, payload, wording, timing, or
459
+ useful links, skip it.
363
460
 
364
461
  ## Abstract And Reusable Record Moves
365
462
 
@@ -777,6 +874,8 @@ Routing rule:
777
874
  book or article, keep a concept, or build a reusable explanation, consider
778
875
  `wiki_page` before `note`. Use `note` for temporary evidence, work logs, or linked
779
876
  detail; use `wiki_page` for durable memory.
877
+ - Use the wiki tools and `/api/v1/wiki/pages` family for page reads and writes. Do
878
+ not route `wiki_page` through batch entity CRUD.
780
879
 
781
880
  Ready to save when:
782
881
 
@@ -922,6 +1021,13 @@ Preferred opening question:
922
1021
 
923
1022
  - "Which task should I start?"
924
1023
 
1024
+ Route note:
1025
+
1026
+ - `task_run` is an action workflow. Start live work with `/api/v1/tasks/:id/runs`.
1027
+ Use `/api/v1/task-runs/:id/heartbeat`, `/focus`, `/complete`, and `/release` for
1028
+ the rest of the run lifecycle. Do not represent live work by only changing task
1029
+ status.
1030
+
925
1031
  ## Work Adjustment
926
1032
 
927
1033
  Aim: correct tracked minutes truthfully without pretending a live run happened.
@@ -939,6 +1045,12 @@ Helpful follow-up lanes:
939
1045
  - whether the adjustment is positive or negative
940
1046
  - what truthful reason should stay attached to the correction
941
1047
 
1048
+ Route note:
1049
+
1050
+ - `work_adjustment` is an action workflow. Use the dedicated work-adjustment tool or
1051
+ `/api/v1/work-adjustments` path after the target and signed minute correction are
1052
+ clear. Do not create a fake task run or invent a standalone batch CRUD entity.
1053
+
942
1054
  Ready to act when:
943
1055
 
944
1056
  - the target task or project is clear
@@ -987,7 +1099,8 @@ Route note:
987
1099
 
988
1100
  - `self_observation` is note-backed. Read the calendar first, then create or update an
989
1101
  observed `note` with `frontmatter.observedAt` instead of inventing a standalone CRUD
990
- write.
1102
+ write. The read path is `/api/v1/psyche/self-observation/calendar`; the stored
1103
+ write is a linked `note` through the shared batch entity route.
991
1104
  - Do not promote self-observation over functional analysis. If the user is describing
992
1105
  a loop, use `behavior_pattern`; if they are describing one emotionally meaningful
993
1106
  episode, use `trigger_report`; if a part-state is central, use `mode_guide_session`
@@ -1062,6 +1175,82 @@ Preferred opening question:
1062
1175
 
1063
1176
  - "What about this workout feels most worth remembering or connecting?"
1064
1177
 
1178
+ ## Sleep Overview
1179
+
1180
+ Aim: review sleep patterns before deciding whether one night needs a reflective update
1181
+ or a planning follow-up.
1182
+
1183
+ Arc:
1184
+
1185
+ 1. Ask what the user wants to understand from the sleep picture: one night, a recent
1186
+ trend, regularity, recovery, stages, or links to work and Psyche context.
1187
+ 2. Read the sleep overview before asking the user to reconstruct metrics from memory.
1188
+ 3. Reflect the practical question the user is trying to answer from the overview.
1189
+ 4. Move to `sleep_session` enrichment only when one specific night needs context,
1190
+ tags, notes, or links.
1191
+
1192
+ Helpful follow-up lanes:
1193
+
1194
+ - which night or date range matters
1195
+ - whether the question is recovery, regularity, stages, schedule drift, or links
1196
+ - what decision the sleep review should help with
1197
+
1198
+ Route note:
1199
+
1200
+ - `sleep_overview` is a read-model-only surface. Use `forge_get_sleep_overview` or
1201
+ `/api/v1/health/sleep` for review. Do not create, update, or delete
1202
+ `sleep_overview` through batch CRUD.
1203
+ - If the review reveals that one night needs reflective context, switch to the stored
1204
+ `sleep_session` batch route or reflective update helper for that known session.
1205
+
1206
+ Ready to review when:
1207
+
1208
+ - the user's practical sleep question is clear
1209
+ - the relevant night or date range is clear enough
1210
+
1211
+ Preferred opening question:
1212
+
1213
+ - "What are you trying to understand from your sleep picture right now?"
1214
+
1215
+ ## Sports Overview
1216
+
1217
+ Aim: review workout and training-load context before deciding whether one workout
1218
+ needs a reflective update or recovery follow-up.
1219
+
1220
+ Arc:
1221
+
1222
+ 1. Ask what the user wants to understand from the sports picture: one workout, a
1223
+ recent training trend, effort, volume, type mix, recovery, or links to mood and
1224
+ goals.
1225
+ 2. Read the sports overview before asking the user to reconstruct metrics from memory.
1226
+ 3. Reflect the practical decision the review should support.
1227
+ 4. Move to `workout_session` enrichment only when one specific workout needs context,
1228
+ tags, notes, or links.
1229
+
1230
+ Helpful follow-up lanes:
1231
+
1232
+ - which workout or date range matters
1233
+ - whether the question is load, effort, activity type, recovery, mood, or links
1234
+ - what decision the sports review should help with
1235
+
1236
+ Route note:
1237
+
1238
+ - `sports_overview` is a read-model-only surface. Use `forge_get_sports_overview` or
1239
+ `/api/v1/health/fitness` for review. Do not create, update, or delete
1240
+ `sports_overview` through batch CRUD.
1241
+ - If the review reveals that one workout needs reflective context, switch to the
1242
+ stored `workout_session` batch route or reflective update helper for that known
1243
+ session.
1244
+
1245
+ Ready to review when:
1246
+
1247
+ - the user's practical training or recovery question is clear
1248
+ - the relevant workout or date range is clear enough
1249
+
1250
+ Preferred opening question:
1251
+
1252
+ - "What are you trying to understand from your workout picture right now?"
1253
+
1065
1254
  ## Calendar Connection
1066
1255
 
1067
1256
  Aim: connect the right provider deliberately without turning setup into a credential
@@ -1076,13 +1265,29 @@ Arc:
1076
1265
  real use case.
1077
1266
  4. Ask only for the next provider-specific step that still matters, such as auth flow,
1078
1267
  label, or calendar selection.
1079
- 5. Move into the actual connection flow once the setup goal is clear.
1268
+ 5. If the user is updating or removing an existing connection, ask which connection
1269
+ and what exact lifecycle action they want before touching credentials or sync.
1270
+ 6. Move into the actual connection flow once the setup goal is clear.
1080
1271
 
1081
1272
  Helpful follow-up lanes:
1082
1273
 
1083
1274
  - what calendar workflow the user wants to unlock
1084
1275
  - whether writable projection matters
1085
1276
  - whether the provider requires a local sign-in step instead of manual fields
1277
+ - whether this is new setup, rediscovery, selected-calendar update, sync, or removal
1278
+
1279
+ Route note:
1280
+
1281
+ - `calendar_connection` is a specialized CRUD surface, not a batch CRUD entity.
1282
+ - Use `GET /api/v1/calendar/connections` to read existing connections.
1283
+ - Use `POST /api/v1/calendar/discovery` for Apple or custom CalDAV discovery and
1284
+ `GET /api/v1/calendar/macos-local/discovery` for calendars already configured on
1285
+ this Mac.
1286
+ - Use `GET /api/v1/calendar/connections/:id/discovery` before changing selected
1287
+ calendars on an existing connection.
1288
+ - Use `POST /api/v1/calendar/connections`, `PATCH /api/v1/calendar/connections/:id`,
1289
+ `POST /api/v1/calendar/connections/:id/sync`, or
1290
+ `DELETE /api/v1/calendar/connections/:id` for the connection lifecycle.
1086
1291
 
1087
1292
  Ready to act when:
1088
1293
 
@@ -1190,6 +1395,9 @@ Direct action rules:
1190
1395
 
1191
1396
  - If the user is clearly talking about a missing-data gap that should become a stay or
1192
1397
  trip, use a user-defined movement box.
1398
+ - Treat day, month, all-time, timeline, trip detail, and selection as internal read
1399
+ lanes. With the user, ask for the useful time window, place, selected span, stay, or
1400
+ trip instead of listing route choices.
1193
1401
  - Preflight with `/api/v1/movement/user-boxes/preflight` when overlap or exact timing
1194
1402
  is unclear, then create the overlay with `/api/v1/movement/user-boxes`.
1195
1403
  - Use `kind: "stay"` when the user stayed in one place and `kind: "trip"` when they
@@ -1301,6 +1509,15 @@ Lane-to-route map:
1301
1509
 
1302
1510
  Direct action rules:
1303
1511
 
1512
+ - In onboarding, this surface may be keyed as `lifeForce` and also as the entity-style
1513
+ alias `life_force`. Treat both names as the same dedicated Life Force route family,
1514
+ not as batch CRUD.
1515
+ - Treat overview, profile, weekday-template, and fatigue-signal lanes as internal
1516
+ route choices. With the user, ask whether this is a current read, a durable
1517
+ assumption, a repeated weekday rhythm, or a right-now state instead of reciting route
1518
+ names.
1519
+ - The overview route key is `overview` and the concrete runtime path is
1520
+ `GET /api/v1/life-force`. Do not invent `/api/v1/life-force/overview`.
1304
1521
  - If the user is describing a durable baseline such as work capacity, recovery style,
1305
1522
  or action-point assumptions, patch the profile instead of logging a fatigue signal.
1306
1523
  - If the user is describing a repeatable weekday rhythm, update that weekday template
@@ -1381,6 +1598,13 @@ Direct action rules:
1381
1598
 
1382
1599
  - If the user needs the stable public contract of a flow, prefer the flow detail or
1383
1600
  published-output routes before a run-history read.
1601
+ - Treat saved-flow catalog, box catalog, run history, run detail, node result, latest
1602
+ node output, and published output as internal read lanes. With the user, ask whether
1603
+ they need the saved flow, its input contract, one run, one node, or the public
1604
+ result instead of listing route keys.
1605
+ - For flow catalog questions, use `GET /api/v1/workbench/flows`; for available box
1606
+ inputs, use `GET /api/v1/workbench/catalog/boxes`. Do not blur those into one vague
1607
+ "catalog" read when the user needs a runnable flow versus an input-box contract.
1384
1608
  - If the user wants to execute a known saved flow, use `/api/v1/workbench/flows/:id/run`.
1385
1609
  - If the user wants payload-first execution without depending on a saved flow id, use
1386
1610
  `/api/v1/workbench/run`.
@@ -1566,7 +1790,9 @@ Route note:
1566
1790
 
1567
1791
  - `questionnaire_instrument` is normal stored CRUD for ordinary create, update,
1568
1792
  delete, and search work. Use clone, draft, and publish action routes only when the
1569
- user is working with instrument version state.
1793
+ user is working with instrument version state. Questionnaire action paths live under
1794
+ `/api/v1/psyche/questionnaires`, including `/:id/clone`, `/:id/draft`, and
1795
+ `/:id/publish`.
1570
1796
 
1571
1797
  Ready to act when:
1572
1798
 
@@ -1599,7 +1825,10 @@ Helpful follow-up lanes:
1599
1825
  Route note:
1600
1826
 
1601
1827
  - `questionnaire_run` is an action workflow. Use the questionnaire run start, read,
1602
- update, and complete routes instead of treating answers as generic batch CRUD.
1828
+ update, and complete routes instead of treating answers as generic batch CRUD:
1829
+ `/api/v1/psyche/questionnaires/:id/runs`,
1830
+ `/api/v1/psyche/questionnaire-runs/:id`, and
1831
+ `/api/v1/psyche/questionnaire-runs/:id/complete`.
1603
1832
 
1604
1833
  Ready to act when:
1605
1834
 
@@ -1612,26 +1841,38 @@ Preferred opening question:
1612
1841
 
1613
1842
  ## Event Type
1614
1843
 
1615
- Aim: create a reusable incident category that will actually help future reports stay
1616
- consistent.
1844
+ Aim: bridge into the Psyche playbook for a reusable incident category without
1845
+ flattening the lived episode into cold taxonomy. `event_type` is a Psyche taxonomy
1846
+ record: use the deeper Event Type guidance in `psyche_entity_playbooks.md` when the
1847
+ user is exploring meaning, and keep this section as the route and handoff reminder.
1617
1848
 
1618
1849
  Arc:
1619
1850
 
1620
- 1. Ask what kind of moment or incident this label should capture in lived terms.
1621
- 2. Reflect the repeated moment back in plain language before narrowing the wording.
1622
- 3. Ask how narrow or broad it should be.
1623
- 4. Ask what would count as inside versus outside the category if that boundary is
1624
- still fuzzy.
1625
- 5. Offer a concise label if the lived meaning is clearer than the wording.
1626
- 6. Ask for a short description only if the label could be ambiguous later.
1851
+ 1. Ask what kind of emotionally meaningful moment keeps recurring and why naming it
1852
+ consistently would help future trigger reports.
1853
+ 2. Reflect the repeated moment back in plain language by naming the emotional or
1854
+ relational stake before narrowing the wording.
1855
+ 3. Ask for one recent example if the boundary is still abstract.
1856
+ 4. Clarify what belongs inside this event type and what should stay outside it.
1857
+ 5. Offer one concise candidate label once the repeated moment is clear.
1858
+ 6. Link it to trigger reports, beliefs, patterns, modes, or emotion definitions only
1859
+ after the category itself feels accurate.
1627
1860
 
1628
1861
  If the user already offered a candidate label, keep the wording provisional and ask
1629
1862
  what kinds of moments belong inside it before you ask whether the label is right.
1630
1863
 
1864
+ Route note:
1865
+
1866
+ - `event_type` is psychologically meaningful but still uses shared batch CRUD for
1867
+ storage. Search and mutate it through the shared entity routes after the lived
1868
+ category, boundary, and wording are clear enough. Do not treat it as a generic tag
1869
+ or route it through `self_observation`.
1870
+
1631
1871
  Ready to save when:
1632
1872
 
1633
- - the label is stable
1634
- - the intended category is clear enough that future reports will use it consistently
1873
+ - the repeated moment is understandable in plain language
1874
+ - the boundary is clear enough for future reports to use consistently
1875
+ - the label feels accurate enough or has one candidate wording to confirm
1635
1876
 
1636
1877
  Preferred opening question:
1637
1878
 
@@ -1639,25 +1880,42 @@ Preferred opening question:
1639
1880
 
1640
1881
  ## Emotion Definition
1641
1882
 
1642
- Aim: define one reusable emotion entry clearly enough that future reports stay precise.
1883
+ Aim: `emotion_definition` is a Psyche taxonomy record, so bridge into the Psyche
1884
+ playbook for a reusable emotion entry by its lived signature, not by a dictionary
1885
+ definition. Use the deeper Emotion Definition guidance in
1886
+ `psyche_entity_playbooks.md` when the user is exploring the feeling.
1643
1887
 
1644
1888
  Arc:
1645
1889
 
1646
- 1. Ask what this feeling is like in lived terms when the user says it.
1647
- 2. Reflect the felt signature back in plain language before you settle the label.
1890
+ 1. Ask when this feeling was present recently and what made it recognizable.
1891
+ 2. Reflect the felt signature back in plain language before asking for category or
1892
+ label polish.
1648
1893
  3. Ask what distinguishes it from nearby emotions if that matters.
1649
- 4. Offer a concise label if the felt meaning is clearer than the wording.
1650
- 5. Ask for a short description only if later reports would benefit from it.
1894
+ 4. Ask what the feeling tends to signal, protect, warn about, long for, or demand.
1895
+ 5. Offer one concise definition in the user's language and invite correction.
1896
+ 6. Link it to trigger reports, modes, beliefs, or patterns only after the definition
1897
+ feels steady.
1651
1898
 
1652
1899
  Helpful follow-up lanes:
1653
1900
 
1654
1901
  - what tells the user this is that feeling and not a nearby one
1902
+ - body signal, urge, image, thought, or relational meaning that identifies it
1655
1903
  - what kind of moments this emotion name should be used for later
1904
+ - what the feeling usually warns about, longs for, protects, or demands
1905
+
1906
+ Route note:
1907
+
1908
+ - `emotion_definition` is psychologically meaningful but still uses shared batch CRUD
1909
+ for storage. Search and mutate it through the shared entity routes after the felt
1910
+ signature, boundary, and wording are clear enough. Do not treat it as a generic
1911
+ dictionary item.
1656
1912
 
1657
1913
  Ready to save when:
1658
1914
 
1659
1915
  - the label is clear
1660
- - the meaning is clear enough to reuse later
1916
+ - the felt signature is clear enough to recognize later
1917
+ - the boundary from nearby feelings is clear enough when it matters
1918
+ - the definition can be written in language the user recognizes
1661
1919
 
1662
1920
  Preferred opening question:
1663
1921
 
@@ -188,6 +188,65 @@ material without a usable formulation.
188
188
  defending the formulation.
189
189
  - Do not use hypotheses as diagnosis, certainty, or replacement belief work. They are
190
190
  collaborative formulations that can be saved, revised, or discarded.
191
+ - Hypotheses are not decorative reassurance. Use them when they help the user see a
192
+ function, prediction, protection, payoff, cost, or value conflict that their own
193
+ example already supports.
194
+ - If a user is circling around a behavior pattern, mode, belief, or trigger report
195
+ after one concrete example is visible, offer one careful hypothesis and then one
196
+ question that tests or corrects it.
197
+ - Do not make the user supply every interpretation alone. If the sequence is clear
198
+ enough, do the formulation work in plain language and invite correction.
199
+
200
+ ## Hypothesis To Record Bridge
201
+
202
+ Once a hypothesis lands or is corrected, turn it into a saveable Forge shape instead
203
+ of leaving it as warm reflective prose.
204
+
205
+ - Name what the hypothesis is becoming: a belief sentence, functional loop, behavior,
206
+ mode, trigger report, value, event type, or emotion definition.
207
+ - Translate the accepted hypothesis into the smallest useful record fields: title,
208
+ core sentence, cue, protection, payoff, cost, preferred response, fear, body signal,
209
+ or linked episode.
210
+ - Ask one confirmation question about accuracy, not another broad exploration
211
+ question.
212
+ - If the user corrects the hypothesis, revise the formulation once in their language
213
+ and then ask whether that corrected version is true enough to save.
214
+ - If adjacent Psyche records became visible, mention them as optional links after the
215
+ primary record is stable. Do not switch containers midstream unless the user wants
216
+ that.
217
+ - Save through shared batch entity routes only after the user accepts the working
218
+ wording or explicitly asks to save.
219
+
220
+ ## Psyche Hypothesis Map
221
+
222
+ Use these shapes after at least one concrete example is clear. The hypothesis should
223
+ help the user understand function, meaning, protection, cost, or connection. Keep it
224
+ short, tentative, and correctable.
225
+
226
+ - `psyche_value`: hypothesize about the longing or pain that makes the value alive
227
+ now, and what ordinary behavior would show movement toward it.
228
+ - `behavior_pattern`: hypothesize about the cue, body/emotion shift, meaning,
229
+ behavior or urge, short-term payoff, long-term cost, and what a replacement response
230
+ would still need to protect.
231
+ - `behavior`: hypothesize about the immediate problem the move solves, the cue or
232
+ urge that pulls it online, and whether it functions as away, committed, or recovery
233
+ behavior.
234
+ - `belief_entry`: hypothesize about the rule, prediction, or self/other/world sentence
235
+ the moment seems to activate, then ask whether that wording lands.
236
+ - `mode_profile`: hypothesize about the protective job, feared danger, burden, and
237
+ possible mode family only after the part's lived voice or posture is visible.
238
+ - `mode_guide_session`: hypothesize about what the active part is trying to stop,
239
+ force, prevent, or secure right now while keeping candidate mode labels provisional.
240
+ - `trigger_report`: hypothesize about the episode chain only after the situation,
241
+ felt stake, meaning, action, and consequence are at least partly visible.
242
+ - `event_type`: hypothesize about the repeated emotional or relational stake that
243
+ makes future reports need the same category.
244
+ - `emotion_definition`: hypothesize about the feeling's body signature, urge, warning,
245
+ protection, or longing, and what distinguishes it from nearby emotions.
246
+ - schema themes: hypothesize through the concrete container that best fits the
247
+ material: belief sentence, recurring functional loop, active mode, one trigger
248
+ episode, or durable wiki explanation. Do not flatten schema work into a loose
249
+ self-observation.
191
250
 
192
251
  ## Therapeutic Direction Check
193
252
 
@@ -320,6 +379,29 @@ Do not ask the user to pick the container first. Reflect the active meaning in p
320
379
  language, ask for one recent moment or one belief sentence, then choose the record that
321
380
  will preserve the structure best.
322
381
 
382
+ ## Psyche API Posture
383
+
384
+ Psyche records are psychologically meaningful, but they are still normal stored Forge
385
+ entities for API purposes. Once the formulation is clear and the user has consented to
386
+ save or update it, use the shared batch entity routes for `psyche_value`,
387
+ `behavior_pattern`, `behavior`, `belief_entry`, `mode_profile`,
388
+ `mode_guide_session`, `trigger_report`, `event_type`, and `emotion_definition`.
389
+
390
+ Keep the route decision internal. With the user, keep talking about the lived moment,
391
+ belief sentence, pattern, mode, value, report, event kind, or feeling signature.
392
+ Do not ask them about batch CRUD, payloads, or route families.
393
+
394
+ Use `forge_search_entities` before creating when a duplicate is plausible. Use
395
+ `forge_create_entities` or `forge_update_entities` after the wording, record type,
396
+ and useful links are clear enough. Preserve nuance in a linked `note` when the
397
+ experience is richer than the normalized fields.
398
+
399
+ Do not divert Psyche material into `self_observation` just because it started as an
400
+ episode. Use `trigger_report` for one emotionally meaningful incident, use
401
+ `behavior_pattern` for a recurring functional loop, use `belief_entry` for one
402
+ explicit sentence, and use `mode_guide_session` or `mode_profile` when a part-state is
403
+ central.
404
+
323
405
  ## Lane chooser
324
406
 
325
407
  After each real answer, choose the next best lane. Do not mix several lanes at once.