forge-openclaw-plugin 0.2.27 → 0.2.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/assets/{board-C6jCchjI.js → board-DPFvZf-D.js} +2 -2
- package/dist/assets/{board-C6jCchjI.js.map → board-DPFvZf-D.js.map} +1 -1
- package/dist/assets/index-Auw3JrdE.css +1 -0
- package/dist/assets/index-D1H7myQH.js +85 -0
- package/dist/assets/index-D1H7myQH.js.map +1 -0
- package/dist/assets/{motion-DFHrH2rd.js → motion-Bvwc85ch.js} +2 -2
- package/dist/assets/{motion-DFHrH2rd.js.map → motion-Bvwc85ch.js.map} +1 -1
- package/dist/assets/{table-ZL7Di_u3.js → table-FJQTJvUR.js} +2 -2
- package/dist/assets/{table-ZL7Di_u3.js.map → table-FJQTJvUR.js.map} +1 -1
- package/dist/assets/{ui-CKNPpz7q.js → ui-GXFcgvSw.js} +2 -2
- package/dist/assets/{ui-CKNPpz7q.js.map → ui-GXFcgvSw.js.map} +1 -1
- package/dist/assets/{vendor-DoNZuFhn.js → vendor-Cwf49UMz.js} +204 -204
- package/dist/assets/vendor-Cwf49UMz.js.map +1 -0
- package/dist/index.html +7 -7
- package/dist/server/server/src/app.js +244 -2
- package/dist/server/server/src/openapi.js +799 -2
- package/dist/server/server/src/repositories/calendar.js +151 -0
- package/dist/server/server/src/services/life-force-model.js +20 -0
- package/dist/server/server/src/services/life-force.js +1333 -97
- package/dist/server/server/src/types.js +21 -1
- package/dist/server/src/lib/snapshot-normalizer.js +2 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/skills/forge-openclaw/SKILL.md +17 -0
- package/skills/forge-openclaw/entity_conversation_playbooks.md +238 -0
- package/skills/forge-openclaw/psyche_entity_playbooks.md +57 -0
- package/dist/assets/index-DVvS8iiU.css +0 -1
- package/dist/assets/index-zYB-9Dfo.js +0 -85
- package/dist/assets/index-zYB-9Dfo.js.map +0 -1
- package/dist/assets/vendor-DoNZuFhn.js.map +0 -1
package/dist/index.html
CHANGED
|
@@ -13,14 +13,14 @@
|
|
|
13
13
|
/>
|
|
14
14
|
<link rel="icon" type="image/png" href="/forge/assets/favicon-BCHm9dUV.ico" />
|
|
15
15
|
<link rel="alternate icon" href="/forge/assets/favicon-BCHm9dUV.ico" />
|
|
16
|
-
<script type="module" crossorigin src="/forge/assets/index-
|
|
17
|
-
<link rel="modulepreload" crossorigin href="/forge/assets/vendor-
|
|
18
|
-
<link rel="modulepreload" crossorigin href="/forge/assets/board-
|
|
19
|
-
<link rel="modulepreload" crossorigin href="/forge/assets/ui-
|
|
20
|
-
<link rel="modulepreload" crossorigin href="/forge/assets/motion-
|
|
21
|
-
<link rel="modulepreload" crossorigin href="/forge/assets/table-
|
|
16
|
+
<script type="module" crossorigin src="/forge/assets/index-D1H7myQH.js"></script>
|
|
17
|
+
<link rel="modulepreload" crossorigin href="/forge/assets/vendor-Cwf49UMz.js">
|
|
18
|
+
<link rel="modulepreload" crossorigin href="/forge/assets/board-DPFvZf-D.js">
|
|
19
|
+
<link rel="modulepreload" crossorigin href="/forge/assets/ui-GXFcgvSw.js">
|
|
20
|
+
<link rel="modulepreload" crossorigin href="/forge/assets/motion-Bvwc85ch.js">
|
|
21
|
+
<link rel="modulepreload" crossorigin href="/forge/assets/table-FJQTJvUR.js">
|
|
22
22
|
<link rel="stylesheet" crossorigin href="/forge/assets/vendor-DT3pnAKJ.css">
|
|
23
|
-
<link rel="stylesheet" crossorigin href="/forge/assets/index-
|
|
23
|
+
<link rel="stylesheet" crossorigin href="/forge/assets/index-Auw3JrdE.css">
|
|
24
24
|
</head>
|
|
25
25
|
<body class="bg-canvas text-ink antialiased">
|
|
26
26
|
<div id="root"></div>
|
|
@@ -2530,6 +2530,19 @@ const AGENT_ONBOARDING_ENTITY_CATALOG = [
|
|
|
2530
2530
|
],
|
|
2531
2531
|
fieldGuide: []
|
|
2532
2532
|
}),
|
|
2533
|
+
enrichOnboardingEntityGuide({
|
|
2534
|
+
entityType: "work_adjustment",
|
|
2535
|
+
purpose: "A truthful signed minute correction on an existing task or project when work happened outside a live run.",
|
|
2536
|
+
minimumCreateFields: [],
|
|
2537
|
+
relationshipRules: [
|
|
2538
|
+
"Work adjustments are action-heavy corrections, not normal CRUD entities.",
|
|
2539
|
+
"Use forge_adjust_work_minutes when the target task or project already exists and only tracked minutes need to change."
|
|
2540
|
+
],
|
|
2541
|
+
searchHints: [
|
|
2542
|
+
"Confirm the target task or project first, then apply only the signed minute delta that is actually true."
|
|
2543
|
+
],
|
|
2544
|
+
fieldGuide: []
|
|
2545
|
+
}),
|
|
2533
2546
|
enrichOnboardingEntityGuide({
|
|
2534
2547
|
entityType: "questionnaire_run",
|
|
2535
2548
|
purpose: "One user-owned answer session against a questionnaire instrument version.",
|
|
@@ -2543,6 +2556,32 @@ const AGENT_ONBOARDING_ENTITY_CATALOG = [
|
|
|
2543
2556
|
],
|
|
2544
2557
|
fieldGuide: []
|
|
2545
2558
|
}),
|
|
2559
|
+
enrichOnboardingEntityGuide({
|
|
2560
|
+
entityType: "preference_judgment",
|
|
2561
|
+
purpose: "One pairwise preference outcome between two items inside a domain and context.",
|
|
2562
|
+
minimumCreateFields: [],
|
|
2563
|
+
relationshipRules: [
|
|
2564
|
+
"Preference judgments are action-heavy records, not batch CRUD entities.",
|
|
2565
|
+
"Use the dedicated judgment route so the profile, evidence, and comparison history stay aligned."
|
|
2566
|
+
],
|
|
2567
|
+
searchHints: [
|
|
2568
|
+
"Confirm the left and right items, the outcome, and the active context before storing a new judgment."
|
|
2569
|
+
],
|
|
2570
|
+
fieldGuide: []
|
|
2571
|
+
}),
|
|
2572
|
+
enrichOnboardingEntityGuide({
|
|
2573
|
+
entityType: "preference_signal",
|
|
2574
|
+
purpose: "One direct preference signal such as favorite, veto, bookmark, neutral, or compare-later.",
|
|
2575
|
+
minimumCreateFields: [],
|
|
2576
|
+
relationshipRules: [
|
|
2577
|
+
"Preference signals are action-heavy records, not batch CRUD entities.",
|
|
2578
|
+
"Use the dedicated signal route so the profile and evidence model stay aligned."
|
|
2579
|
+
],
|
|
2580
|
+
searchHints: [
|
|
2581
|
+
"Confirm the item, signal type, and context before storing a new direct signal."
|
|
2582
|
+
],
|
|
2583
|
+
fieldGuide: []
|
|
2584
|
+
}),
|
|
2546
2585
|
enrichOnboardingEntityGuide({
|
|
2547
2586
|
entityType: "calendar_connection",
|
|
2548
2587
|
purpose: "A stored external calendar provider connection and its selected calendars.",
|
|
@@ -2582,6 +2621,45 @@ const AGENT_ONBOARDING_ENTITY_CATALOG = [
|
|
|
2582
2621
|
}
|
|
2583
2622
|
]
|
|
2584
2623
|
}),
|
|
2624
|
+
enrichOnboardingEntityGuide({
|
|
2625
|
+
entityType: "movement",
|
|
2626
|
+
purpose: "The specialized Movement surface for day, month, all-time, timeline, trip, place, selection, and manual overlay work.",
|
|
2627
|
+
minimumCreateFields: [],
|
|
2628
|
+
relationshipRules: [
|
|
2629
|
+
"Movement is a specialized domain surface, not a normal batch CRUD entity family.",
|
|
2630
|
+
"Read and mutate it through the dedicated movement routes published under specializedDomainSurfaces."
|
|
2631
|
+
],
|
|
2632
|
+
searchHints: [
|
|
2633
|
+
"Clarify whether the user wants a behavioral query, one trip or place, a missing-gap overlay, a manual add or update, or a link before choosing the route."
|
|
2634
|
+
],
|
|
2635
|
+
fieldGuide: []
|
|
2636
|
+
}),
|
|
2637
|
+
enrichOnboardingEntityGuide({
|
|
2638
|
+
entityType: "life_force",
|
|
2639
|
+
purpose: "The specialized Life Force surface for the current energy overview, profile edits, weekday templates, and fatigue signals.",
|
|
2640
|
+
minimumCreateFields: [],
|
|
2641
|
+
relationshipRules: [
|
|
2642
|
+
"Life Force is a specialized domain surface, not a normal batch CRUD entity family.",
|
|
2643
|
+
"Use the dedicated overview, profile, weekday-template, and fatigue-signal routes."
|
|
2644
|
+
],
|
|
2645
|
+
searchHints: [
|
|
2646
|
+
"Clarify whether the user wants explanation, durable model changes, or a real-time tired or recovered signal before choosing the route."
|
|
2647
|
+
],
|
|
2648
|
+
fieldGuide: []
|
|
2649
|
+
}),
|
|
2650
|
+
enrichOnboardingEntityGuide({
|
|
2651
|
+
entityType: "workbench",
|
|
2652
|
+
purpose: "The specialized Workbench surface for flow catalog work, flow CRUD, execution, run history, published outputs, node results, and latest-node-output reads.",
|
|
2653
|
+
minimumCreateFields: [],
|
|
2654
|
+
relationshipRules: [
|
|
2655
|
+
"Workbench is a specialized execution surface, not a normal batch CRUD entity family.",
|
|
2656
|
+
"Use the dedicated workbench flow, run, output, and node-result routes."
|
|
2657
|
+
],
|
|
2658
|
+
searchHints: [
|
|
2659
|
+
"Clarify whether the user wants flow discovery, editing, execution, published output, run inspection, or node-level output before choosing the route."
|
|
2660
|
+
],
|
|
2661
|
+
fieldGuide: []
|
|
2662
|
+
}),
|
|
2585
2663
|
enrichOnboardingEntityGuide({
|
|
2586
2664
|
entityType: "self_observation",
|
|
2587
2665
|
purpose: "The note-backed Psyche self-observation calendar surface for observed events and reflections.",
|
|
@@ -2625,6 +2703,7 @@ const AGENT_ONBOARDING_ENTITY_CATALOG = [
|
|
|
2625
2703
|
const AGENT_ONBOARDING_CONVERSATION_RULES = [
|
|
2626
2704
|
"Ask only for what is missing or unclear instead of walking the user through every optional field.",
|
|
2627
2705
|
"Start by saying what seems to matter here or what the record is becoming, then ask the next useful question.",
|
|
2706
|
+
"Whenever possible, make the direction of the intake visible before the question by naming what you think the user is trying to preserve, clarify, decide, schedule, or make easier.",
|
|
2628
2707
|
"Before each question, decide the one missing thing you are trying to clarify and why it matters for the record.",
|
|
2629
2708
|
"Use a progression of concrete example or intent, working name, purpose or meaning, placement in Forge, operational details, and linked context.",
|
|
2630
2709
|
"Ask one to three focused questions at a time. One is usually best when the user is uncertain or emotionally loaded.",
|
|
@@ -2632,6 +2711,7 @@ const AGENT_ONBOARDING_CONVERSATION_RULES = [
|
|
|
2632
2711
|
"If the user already answered the normal opening question, do not repeat it. Move to the next missing clarification.",
|
|
2633
2712
|
"Do not over-therapize logistical entities. For tasks, calendar events, work blocks, timeboxes, and task runs, one brief confirming sentence plus one question is usually enough.",
|
|
2634
2713
|
"After each substantive answer, briefly say what is becoming clearer and ask only for the next thing that still changes the record shape or usefulness.",
|
|
2714
|
+
"For strategic, reflective, or emotionally meaningful non-Psyche records, ask what feels important to keep true before you ask for labels, dates, or taxonomy.",
|
|
2635
2715
|
"For reusable records such as tags, event types, emotion definitions, preference contexts, or questionnaires, ask what distinction or decision the record should help with before you ask for wording.",
|
|
2636
2716
|
"When useful, help the user name, define, and connect the record in that order: offer a working label, clarify what belongs inside it, then ask about links only after the record itself feels steady.",
|
|
2637
2717
|
"When the meaning is clearer than the wording, offer a tentative title or formulation yourself and invite correction instead of forcing the user to wordsmith alone.",
|
|
@@ -2639,7 +2719,9 @@ const AGENT_ONBOARDING_CONVERSATION_RULES = [
|
|
|
2639
2719
|
"Once the record is clear enough to name, stop exploring broadly and ask only for the last structural detail that still matters.",
|
|
2640
2720
|
"If the record is already clear enough to save, save it instead of performing a ceremonial extra question.",
|
|
2641
2721
|
"If the user accepts the wording or record shape, move to the write instead of reopening the intake.",
|
|
2642
|
-
"When updating an entity, start with what is changing, what should stay true, and what prompted the update now."
|
|
2722
|
+
"When updating an entity, start with what is changing, what should stay true, and what prompted the update now.",
|
|
2723
|
+
"For action-heavy flows such as work adjustments, preference judgments, preference signals, and specialized Movement, Life Force, or Workbench work, first ask what the user is trying to understand, change, add, update, link, or run, then choose the dedicated action or surface route instead of forcing the request into generic CRUD.",
|
|
2724
|
+
"For Movement specifically, treat missing-data corrections as user-defined overlay boxes unless the user is editing an already-recorded stay or trip. When the user already gave a clear instruction like 'that missing block was home', act after only the last ambiguity is resolved."
|
|
2643
2725
|
];
|
|
2644
2726
|
const AGENT_ONBOARDING_ENTITY_CONVERSATION_PLAYBOOKS = [
|
|
2645
2727
|
{
|
|
@@ -2662,6 +2744,7 @@ const AGENT_ONBOARDING_ENTITY_CONVERSATION_PLAYBOOKS = [
|
|
|
2662
2744
|
"Ask what this piece of work is trying to make true.",
|
|
2663
2745
|
"Reflect the emerging boundary so the user can hear what is in scope.",
|
|
2664
2746
|
"Ask what outcome would make the project feel real or complete for now.",
|
|
2747
|
+
"Ask what belongs inside the boundary and what can stay out if the scope still feels muddy.",
|
|
2665
2748
|
"Ask which goal it belongs under.",
|
|
2666
2749
|
"Land on a working name once the scope is clear.",
|
|
2667
2750
|
"Clarify status, owner, and notes only after the scope is clear."
|
|
@@ -2696,6 +2779,7 @@ const AGENT_ONBOARDING_ENTITY_CONVERSATION_PLAYBOOKS = [
|
|
|
2696
2779
|
askSequence: [
|
|
2697
2780
|
"Ask what the recurring behavior is in plain language.",
|
|
2698
2781
|
"Ask whether doing it is aligned or a slip.",
|
|
2782
|
+
"Ask what an honest hit or miss would look like in an ordinary week.",
|
|
2699
2783
|
"Ask about cadence and what counts as an honest check-in in practice.",
|
|
2700
2784
|
"Ask about links only if they will help later review."
|
|
2701
2785
|
]
|
|
@@ -2717,6 +2801,7 @@ const AGENT_ONBOARDING_ENTITY_CONVERSATION_PLAYBOOKS = [
|
|
|
2717
2801
|
coachingGoal: "Preserve the useful context and link it to the right places without turning the note into a dump.",
|
|
2718
2802
|
askSequence: [
|
|
2719
2803
|
"Ask what the note needs to preserve.",
|
|
2804
|
+
"Ask what sentence future-you would need to recover from this note later.",
|
|
2720
2805
|
"Ask what entities it should stay attached to.",
|
|
2721
2806
|
"Ask whether it should be durable or temporary.",
|
|
2722
2807
|
"Ask about tags or author only if they help retrieval or handoff."
|
|
@@ -2797,6 +2882,17 @@ const AGENT_ONBOARDING_ENTITY_CONVERSATION_PLAYBOOKS = [
|
|
|
2797
2882
|
"Start the run instead of turning it into a longer intake."
|
|
2798
2883
|
]
|
|
2799
2884
|
},
|
|
2885
|
+
{
|
|
2886
|
+
focus: "work_adjustment",
|
|
2887
|
+
openingQuestion: "Which task or project should this time correction belong to?",
|
|
2888
|
+
coachingGoal: "Correct tracked minutes truthfully without pretending a live run happened.",
|
|
2889
|
+
askSequence: [
|
|
2890
|
+
"Ask what existing task or project the minutes belong to.",
|
|
2891
|
+
"Ask whether time should be added or removed.",
|
|
2892
|
+
"Ask what real work or correction the adjustment is meant to capture.",
|
|
2893
|
+
"Ask for a short audit note only if the reason would otherwise be unclear later."
|
|
2894
|
+
]
|
|
2895
|
+
},
|
|
2800
2896
|
{
|
|
2801
2897
|
focus: "self_observation",
|
|
2802
2898
|
openingQuestion: "What did you notice most clearly in that moment?",
|
|
@@ -2804,6 +2900,7 @@ const AGENT_ONBOARDING_ENTITY_CONVERSATION_PLAYBOOKS = [
|
|
|
2804
2900
|
askSequence: [
|
|
2805
2901
|
"Ask what was observed.",
|
|
2806
2902
|
"Reflect the moment without pretending it is already a finished interpretation.",
|
|
2903
|
+
"Ask for the smallest concrete slice if the observation still feels vague or global.",
|
|
2807
2904
|
"Ask when it happened or became noticeable unless timing is already clear.",
|
|
2808
2905
|
"Ask what it may connect to: pattern, belief, value, mode, task, project, or note.",
|
|
2809
2906
|
"Ask for tags or extra context only if that will help later review."
|
|
@@ -2849,6 +2946,7 @@ const AGENT_ONBOARDING_ENTITY_CONVERSATION_PLAYBOOKS = [
|
|
|
2849
2946
|
askSequence: [
|
|
2850
2947
|
"Ask what makes this item worth including in the catalog.",
|
|
2851
2948
|
"Ask what catalog or domain it belongs to if that is still unclear.",
|
|
2949
|
+
"Ask what would make the comparison confusing or unfair if the label stayed as-is.",
|
|
2852
2950
|
"Ask for a short clarifying description only if the label would be ambiguous later.",
|
|
2853
2951
|
"Ask about aliases or tags only if they help retrieval."
|
|
2854
2952
|
]
|
|
@@ -2876,6 +2974,28 @@ const AGENT_ONBOARDING_ENTITY_CONVERSATION_PLAYBOOKS = [
|
|
|
2876
2974
|
"Ask what makes the item distinct enough to compare usefully only if it is still a comparison candidate."
|
|
2877
2975
|
]
|
|
2878
2976
|
},
|
|
2977
|
+
{
|
|
2978
|
+
focus: "preference_judgment",
|
|
2979
|
+
openingQuestion: "What comparison are you actually trying to settle here?",
|
|
2980
|
+
coachingGoal: "Capture one pairwise preference decision with the right context instead of only logging a left-versus-right click.",
|
|
2981
|
+
askSequence: [
|
|
2982
|
+
"Ask what comparison the user is actually trying to settle.",
|
|
2983
|
+
"Ask which context or domain this judgment belongs to.",
|
|
2984
|
+
"Ask whether the result is left, right, tie, or skip.",
|
|
2985
|
+
"Ask for reason tags or strength only if they will improve later interpretation."
|
|
2986
|
+
]
|
|
2987
|
+
},
|
|
2988
|
+
{
|
|
2989
|
+
focus: "preference_signal",
|
|
2990
|
+
openingQuestion: "What do you want Forge to remember about this item right now?",
|
|
2991
|
+
coachingGoal: "Store a direct preference signal such as favorite, veto, bookmark, or compare-later with enough context to interpret it later.",
|
|
2992
|
+
askSequence: [
|
|
2993
|
+
"Ask what item the user wants to mark.",
|
|
2994
|
+
"Ask what signal they want to give it.",
|
|
2995
|
+
"Ask what domain or context this belongs to if that is still unclear.",
|
|
2996
|
+
"Ask about strength only if the user is expressing a gradient rather than a simple mark."
|
|
2997
|
+
]
|
|
2998
|
+
},
|
|
2879
2999
|
{
|
|
2880
3000
|
focus: "questionnaire_instrument",
|
|
2881
3001
|
openingQuestion: "What would this questionnaire help someone notice or track?",
|
|
@@ -2895,9 +3015,45 @@ const AGENT_ONBOARDING_ENTITY_CONVERSATION_PLAYBOOKS = [
|
|
|
2895
3015
|
askSequence: [
|
|
2896
3016
|
"Ask which questionnaire run this is about.",
|
|
2897
3017
|
"Ask whether the user wants to start, continue, review, or complete it.",
|
|
3018
|
+
"If the user wants to continue or finish, ask what state they are in right now before asking for more content.",
|
|
2898
3019
|
"If answering is still in progress, ask only for the next answer or note that matters."
|
|
2899
3020
|
]
|
|
2900
3021
|
},
|
|
3022
|
+
{
|
|
3023
|
+
focus: "movement",
|
|
3024
|
+
openingQuestion: "Are you trying to understand where you stayed and traveled, change one stay or trip, or answer a question about your movement behavior?",
|
|
3025
|
+
coachingGoal: "Clarify whether the user wants a time-in-place query, travel-history review, a missing-gap overlay, one stay or trip change, one place summary, or a link before choosing the dedicated movement route.",
|
|
3026
|
+
askSequence: [
|
|
3027
|
+
"Ask whether the user is trying to query behavior, add something manually, update an existing movement item, or link movement to another Forge entity.",
|
|
3028
|
+
"Ask whether the focus is a stay, a trip, a place, a timeline window, or a selected span.",
|
|
3029
|
+
"Ask for the time window, place, or movement item that makes the question concrete.",
|
|
3030
|
+
"Ask what they are trying to notice, preserve, or answer through that movement context.",
|
|
3031
|
+
"If the request is filling a missing-data gap, use a user-defined movement box rather than a raw stay or trip patch.",
|
|
3032
|
+
"When the user already gave a concrete correction like 'I stayed home during that missing block', confirm only the interval or place if needed, then create the overlay and read the timeline back."
|
|
3033
|
+
]
|
|
3034
|
+
},
|
|
3035
|
+
{
|
|
3036
|
+
focus: "life_force",
|
|
3037
|
+
openingQuestion: "Do you want to understand the current energy picture, change how Forge models it, or log how you feel right now?",
|
|
3038
|
+
coachingGoal: "Clarify whether the job is overview, profile change, weekday-template editing, or a real-time fatigue signal before choosing the dedicated life-force route.",
|
|
3039
|
+
askSequence: [
|
|
3040
|
+
"Ask whether the job is overview, profile change, weekday-template change, or fatigue signaling.",
|
|
3041
|
+
"Ask what part of the current energy picture feels most important or inaccurate.",
|
|
3042
|
+
"Ask what should stay true if they are changing profile or template assumptions.",
|
|
3043
|
+
"Route to the dedicated life-force path once the lane is clear."
|
|
3044
|
+
]
|
|
3045
|
+
},
|
|
3046
|
+
{
|
|
3047
|
+
focus: "workbench",
|
|
3048
|
+
openingQuestion: "Are you trying to inspect a flow, change it, run it, or inspect one run's outputs?",
|
|
3049
|
+
coachingGoal: "Clarify whether the user wants flow discovery, editing, execution, run history, published outputs, or node-level inspection before using the dedicated workbench route family.",
|
|
3050
|
+
askSequence: [
|
|
3051
|
+
"Ask whether the job is flow discovery, one flow edit, execution, run history, published output, node-level inspection, or latest-node-output lookup.",
|
|
3052
|
+
"Ask which flow, slug, run, or node the request is about.",
|
|
3053
|
+
"Ask what the user is trying to learn, repair, or publish through that flow.",
|
|
3054
|
+
"Route to the dedicated workbench route family once the execution lane is clear."
|
|
3055
|
+
]
|
|
3056
|
+
},
|
|
2901
3057
|
{
|
|
2902
3058
|
focus: "event_type",
|
|
2903
3059
|
openingQuestion: "What kind of moment keeps happening that you want future reports to name the same way each time?",
|
|
@@ -2952,6 +3108,7 @@ const AGENT_ONBOARDING_PSYCHE_PLAYBOOKS = [
|
|
|
2952
3108
|
notes: [
|
|
2953
3109
|
"Use an ACT-style values clarification stance: values are directions to live toward, not boxes to complete.",
|
|
2954
3110
|
"Ask one or two questions at a time, reflect back the user's language, and only then move toward naming committed actions or linked work items.",
|
|
3111
|
+
"Reflect the pain, longing, or importance that makes the value alive before narrowing to action.",
|
|
2955
3112
|
"If the user says they want to understand it first, start with one orienting question before offering a formulation or save suggestion."
|
|
2956
3113
|
]
|
|
2957
3114
|
},
|
|
@@ -3036,7 +3193,8 @@ const AGENT_ONBOARDING_PSYCHE_PLAYBOOKS = [
|
|
|
3036
3193
|
"Keep the user close to observable behavior rather than jumping straight to labels.",
|
|
3037
3194
|
"When the behavior clearly belongs inside a larger loop, suggest linking or also mapping the related behavior_pattern.",
|
|
3038
3195
|
"If the user asks for understanding before storage, ask about the recent example and function of the move before classifying it.",
|
|
3039
|
-
"Ask what the move is trying to do for the user before moving into replacement planning."
|
|
3196
|
+
"Ask what the move is trying to do for the user before moving into replacement planning.",
|
|
3197
|
+
"Name the immediate protective job before discussing costs or alternatives."
|
|
3040
3198
|
]
|
|
3041
3199
|
},
|
|
3042
3200
|
{
|
|
@@ -3698,6 +3856,10 @@ function buildAgentOnboardingPayload(request) {
|
|
|
3698
3856
|
calendar: "A connected calendar source mirrored into Forge. Calendar state combines provider events, recurring work blocks, and task timeboxes.",
|
|
3699
3857
|
workBlock: "A recurring half-day or custom time window such as Main Activity, Secondary Activity, Third Activity, Rest, Holiday, or Custom. Work blocks can allow or block work by default, can define active date bounds, and remain editable through the calendar surface.",
|
|
3700
3858
|
taskTimebox: "A planned or live calendar slot tied to a task. Timeboxes can be suggested in advance or created automatically from active task runs.",
|
|
3859
|
+
workAdjustment: "A work adjustment is a truthful signed minute correction on an existing task or project when real work happened but no live run was active.",
|
|
3860
|
+
movement: "Forge Movement is the first-class mobility surface. It is a timeline of stays and trips: stays capture time spent in the same place, and trips capture travel between places. Use it for time-in-place questions, travel-history review, specific stay or trip edits, selected-span aggregates, known places, and links to other Forge records rather than pretending stays and trips are normal batch CRUD entities.",
|
|
3861
|
+
lifeForce: "Life Force is Forge's energy-budget and fatigue model. Read it through the dedicated life-force payload and update it through focused profile, weekday-template, and fatigue-signal routes rather than generic entity CRUD.",
|
|
3862
|
+
workbench: "Workbench is Forge's graph-flow execution system. Treat flows, runs, published outputs, node results, and latest-node-output reads as a dedicated API family instead of a normal entity-batch surface.",
|
|
3701
3863
|
psyche: "Forge Psyche is the reflective domain for values, patterns, behaviors, beliefs, modes, and trigger reports. It is sensitive and should be handled deliberately."
|
|
3702
3864
|
},
|
|
3703
3865
|
psycheSubmoduleModel: {
|
|
@@ -3825,6 +3987,82 @@ function buildAgentOnboardingPayload(request) {
|
|
|
3825
3987
|
writeModel: "Create or update an observed note with frontmatter.observedAt. Manual reflections usually carry the Self-observation tag, while movement sync can also publish rolling observed notes tagged movement."
|
|
3826
3988
|
}
|
|
3827
3989
|
},
|
|
3990
|
+
specializedDomainSurfaces: {
|
|
3991
|
+
movement: {
|
|
3992
|
+
summary: "Dedicated movement workspace API. Use these routes for stays, trips, time-in-place questions, visited places, trip detail, selected-span aggregates, and user-defined overlays.",
|
|
3993
|
+
readRoutes: {
|
|
3994
|
+
day: "/api/v1/movement/day",
|
|
3995
|
+
month: "/api/v1/movement/month",
|
|
3996
|
+
allTime: "/api/v1/movement/all-time",
|
|
3997
|
+
timeline: "/api/v1/movement/timeline",
|
|
3998
|
+
places: "/api/v1/movement/places",
|
|
3999
|
+
tripDetail: "/api/v1/movement/trips/:id",
|
|
4000
|
+
selection: "/api/v1/movement/selection",
|
|
4001
|
+
settings: "/api/v1/movement/settings"
|
|
4002
|
+
},
|
|
4003
|
+
writeRoutes: {
|
|
4004
|
+
placeCreate: "/api/v1/movement/places",
|
|
4005
|
+
placeUpdate: "/api/v1/movement/places/:id",
|
|
4006
|
+
userBoxCreate: "/api/v1/movement/user-boxes",
|
|
4007
|
+
userBoxPreflight: "/api/v1/movement/user-boxes/preflight",
|
|
4008
|
+
userBoxUpdate: "/api/v1/movement/user-boxes/:id",
|
|
4009
|
+
automaticBoxInvalidate: "/api/v1/movement/automatic-boxes/:id/invalidate",
|
|
4010
|
+
stayUpdate: "/api/v1/movement/stays/:id",
|
|
4011
|
+
tripUpdate: "/api/v1/movement/trips/:id",
|
|
4012
|
+
tripPointUpdate: "/api/v1/movement/trips/:id/points/:pointId"
|
|
4013
|
+
},
|
|
4014
|
+
notes: [
|
|
4015
|
+
"Movement is not a normal batch CRUD entity family. It is a dedicated record of stays and trips: a stay means the user remained in the same place for a span of time, and a trip means they traveled between places.",
|
|
4016
|
+
"Use /api/v1/movement/day, /month, /all-time, /timeline, or /selection when the user wants behavioral answers such as how long they stayed at home, when they traveled, which places dominated a period, or what happened across a selected span.",
|
|
4017
|
+
"Use the movement write routes when the user wants to add a place or manual overlay, update a specific stay or trip, or attach movement context to another Forge record. If the user is filling a missing-data gap, the usual write path is a user-defined overlay box rather than a raw stay or trip patch.",
|
|
4018
|
+
"For an explicit statement like 'that missing block was me staying home', do not reopen broad intake. Preflight only if timing overlap is unclear, then create a user-defined `stay` box for that interval and read the updated timeline back."
|
|
4019
|
+
]
|
|
4020
|
+
},
|
|
4021
|
+
lifeForce: {
|
|
4022
|
+
summary: "Dedicated life-force API. Use it to read the current energy budget, drains, recommendations, and warnings, then patch only the parts that are meant to be user-controlled.",
|
|
4023
|
+
readRoutes: {
|
|
4024
|
+
overview: "/api/v1/life-force"
|
|
4025
|
+
},
|
|
4026
|
+
writeRoutes: {
|
|
4027
|
+
profile: "/api/v1/life-force/profile",
|
|
4028
|
+
weekdayTemplate: "/api/v1/life-force/templates/:weekday",
|
|
4029
|
+
fatigueSignal: "/api/v1/life-force/fatigue-signals"
|
|
4030
|
+
},
|
|
4031
|
+
notes: [
|
|
4032
|
+
"Life Force is a focused domain surface, not a batch CRUD entity type.",
|
|
4033
|
+
"Use GET /api/v1/life-force for the current overview payload with stats, drains, recommendations, and current-curve state.",
|
|
4034
|
+
"Patch the profile only for durable personal settings, update weekday templates only for the curve itself, and post fatigue signals for real-time tired or recovered observations."
|
|
4035
|
+
]
|
|
4036
|
+
},
|
|
4037
|
+
workbench: {
|
|
4038
|
+
summary: "Dedicated graph-flow API. Use it for flow catalog reads, flow CRUD, execution, run history, published outputs, node results, and latest successful node outputs.",
|
|
4039
|
+
readRoutes: {
|
|
4040
|
+
listFlows: "/api/v1/workbench/flows",
|
|
4041
|
+
flowById: "/api/v1/workbench/flows/:id",
|
|
4042
|
+
flowBySlug: "/api/v1/workbench/flows/by-slug/:slug",
|
|
4043
|
+
publishedOutput: "/api/v1/workbench/flows/:id/output",
|
|
4044
|
+
runs: "/api/v1/workbench/flows/:id/runs",
|
|
4045
|
+
runDetail: "/api/v1/workbench/flows/:id/runs/:runId",
|
|
4046
|
+
runNodes: "/api/v1/workbench/flows/:id/runs/:runId/nodes",
|
|
4047
|
+
nodeResult: "/api/v1/workbench/flows/:id/runs/:runId/nodes/:nodeId",
|
|
4048
|
+
latestNodeOutput: "/api/v1/workbench/flows/:id/nodes/:nodeId/output",
|
|
4049
|
+
boxCatalog: "/api/v1/workbench/catalog/boxes"
|
|
4050
|
+
},
|
|
4051
|
+
writeRoutes: {
|
|
4052
|
+
createFlow: "/api/v1/workbench/flows",
|
|
4053
|
+
updateFlow: "/api/v1/workbench/flows/:id",
|
|
4054
|
+
deleteFlow: "/api/v1/workbench/flows/:id",
|
|
4055
|
+
runFlow: "/api/v1/workbench/flows/:id/run",
|
|
4056
|
+
runByPayload: "/api/v1/workbench/run",
|
|
4057
|
+
chatFlow: "/api/v1/workbench/flows/:id/chat"
|
|
4058
|
+
},
|
|
4059
|
+
notes: [
|
|
4060
|
+
"Workbench is a dedicated execution surface, not a batch CRUD entity family.",
|
|
4061
|
+
"Use the flow routes when the agent needs stable public input contracts, published outputs, node-level results, or reusable execution history.",
|
|
4062
|
+
"Prefer the dedicated output and node-result routes over reverse-engineering raw traces."
|
|
4063
|
+
]
|
|
4064
|
+
}
|
|
4065
|
+
},
|
|
3828
4066
|
readModelOnlySurfaces: {
|
|
3829
4067
|
sleepOverview: "/api/v1/health/sleep",
|
|
3830
4068
|
sportsOverview: "/api/v1/health/fitness",
|
|
@@ -3908,6 +4146,10 @@ function buildAgentOnboardingPayload(request) {
|
|
|
3908
4146
|
weeklyReview: "/api/v1/reviews/weekly",
|
|
3909
4147
|
sleepOverview: "/api/v1/health/sleep",
|
|
3910
4148
|
sportsOverview: "/api/v1/health/fitness",
|
|
4149
|
+
lifeForce: "/api/v1/life-force",
|
|
4150
|
+
movementTimeline: "/api/v1/movement/timeline",
|
|
4151
|
+
movementAllTime: "/api/v1/movement/all-time",
|
|
4152
|
+
workbenchFlows: "/api/v1/workbench/flows",
|
|
3911
4153
|
wikiSettings: "/api/v1/wiki/settings",
|
|
3912
4154
|
wikiSearch: "/api/v1/wiki/search",
|
|
3913
4155
|
wikiHealth: "/api/v1/wiki/health",
|