forge-openclaw-plugin 0.2.26 → 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 +60 -3
- package/dist/assets/{board-ta0rUHOf.js → board-DPFvZf-D.js} +2 -2
- package/dist/assets/{board-ta0rUHOf.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/knowledge-graph-layout.worker-DRvzPxhP.js +2 -0
- package/dist/assets/knowledge-graph-layout.worker-DRvzPxhP.js.map +1 -0
- package/dist/assets/{motion-fBKPB6yw.js → motion-Bvwc85ch.js} +2 -2
- package/dist/assets/{motion-fBKPB6yw.js.map → motion-Bvwc85ch.js.map} +1 -1
- package/dist/assets/{table-C-IGTQni.js → table-FJQTJvUR.js} +2 -2
- package/dist/assets/{table-C-IGTQni.js.map → table-FJQTJvUR.js.map} +1 -1
- package/dist/assets/{ui-DInOpaYF.js → ui-GXFcgvSw.js} +2 -2
- package/dist/assets/{ui-DInOpaYF.js.map → ui-GXFcgvSw.js.map} +1 -1
- package/dist/assets/vendor-Cwf49UMz.js +1247 -0
- package/dist/assets/vendor-Cwf49UMz.js.map +1 -0
- package/dist/index.html +7 -7
- package/dist/openclaw/local-runtime.js +16 -0
- package/dist/openclaw/routes.d.ts +27 -0
- package/dist/openclaw/routes.js +16 -12
- package/dist/server/server/migrations/037_workbench_public_inputs_and_run_inputs.sql +5 -0
- package/dist/server/server/migrations/038_data_management_settings.sql +11 -0
- package/dist/server/server/migrations/039_life_force_and_action_points.sql +114 -0
- package/dist/server/server/migrations/040_screen_time_domain.sql +89 -0
- package/dist/server/server/migrations/041_companion_source_states.sql +21 -0
- package/dist/server/server/migrations/042_movement_boxes.sql +47 -0
- package/dist/server/server/migrations/043_movement_box_overlap_overrides.sql +26 -0
- package/dist/server/server/src/app.js +1900 -91
- package/dist/server/server/src/connectors/box-registry.js +44 -9
- package/dist/server/server/src/data-management-types.js +107 -0
- package/dist/server/server/src/db.js +68 -4
- package/dist/server/server/src/demo-data.js +2 -2
- package/dist/server/server/src/health.js +702 -18
- package/dist/server/server/src/managers/platform/llm-manager.js +7 -4
- package/dist/server/server/src/managers/platform/mock-workbench-provider.js +149 -0
- package/dist/server/server/src/managers/platform/secrets-manager.js +18 -1
- package/dist/server/server/src/managers/runtime.js +9 -0
- package/dist/server/server/src/movement.js +1971 -112
- package/dist/server/server/src/openapi.js +1390 -105
- package/dist/server/server/src/psyche-types.js +9 -1
- package/dist/server/server/src/repositories/activity-events.js +8 -0
- package/dist/server/server/src/repositories/ai-connectors.js +522 -74
- package/dist/server/server/src/repositories/calendar.js +151 -0
- package/dist/server/server/src/repositories/habits.js +37 -1
- package/dist/server/server/src/repositories/model-settings.js +13 -3
- package/dist/server/server/src/repositories/notes.js +3 -0
- package/dist/server/server/src/repositories/settings.js +380 -18
- package/dist/server/server/src/repositories/tasks.js +170 -10
- package/dist/server/server/src/runtime-data-root.js +82 -0
- package/dist/server/server/src/screen-time.js +802 -0
- package/dist/server/server/src/services/data-management.js +788 -0
- package/dist/server/server/src/services/entity-crud.js +205 -2
- package/dist/server/server/src/services/knowledge-graph.js +1455 -0
- package/dist/server/server/src/services/life-force-model.js +217 -0
- package/dist/server/server/src/services/life-force.js +2506 -0
- package/dist/server/server/src/services/psyche-observation-calendar.js +383 -16
- package/dist/server/server/src/types.js +307 -14
- package/dist/server/server/src/web.js +228 -13
- package/dist/server/src/components/customization/utility-widgets.js +136 -27
- package/dist/server/src/components/ui/info-tooltip.js +25 -0
- package/dist/server/src/components/workbench-boxes/calendar/calendar-boxes.js +78 -0
- package/dist/server/src/components/workbench-boxes/goals/goals-boxes.js +62 -0
- package/dist/server/src/components/workbench-boxes/habits/habits-boxes.js +62 -0
- package/dist/server/src/components/workbench-boxes/health/health-boxes.js +63 -8
- package/dist/server/src/components/workbench-boxes/insights/insights-boxes.js +50 -0
- package/dist/server/src/components/workbench-boxes/kanban/kanban-boxes.js +62 -54
- package/dist/server/src/components/workbench-boxes/movement/movement-boxes.js +18 -8
- package/dist/server/src/components/workbench-boxes/notes/notes-boxes.js +56 -38
- package/dist/server/src/components/workbench-boxes/overview/overview-boxes.js +65 -0
- package/dist/server/src/components/workbench-boxes/preferences/preferences-boxes.js +78 -0
- package/dist/server/src/components/workbench-boxes/projects/projects-boxes.js +35 -30
- package/dist/server/src/components/workbench-boxes/psyche/psyche-boxes.js +88 -0
- package/dist/server/src/components/workbench-boxes/questionnaires/questionnaires-boxes.js +61 -0
- package/dist/server/src/components/workbench-boxes/review/review-boxes.js +53 -0
- package/dist/server/src/components/workbench-boxes/shared/define-workbench-box.js +3 -1
- package/dist/server/src/components/workbench-boxes/shared/generic-node-view.js +39 -3
- package/dist/server/src/components/workbench-boxes/strategies/strategies-boxes.js +62 -0
- package/dist/server/src/components/workbench-boxes/tasks/tasks-boxes.js +76 -0
- package/dist/server/src/components/workbench-boxes/today/today-boxes.js +47 -32
- package/dist/server/src/components/workbench-boxes/wiki/wiki-boxes.js +60 -0
- package/dist/server/src/lib/api.js +280 -21
- package/dist/server/src/lib/data-management-types.js +1 -0
- package/dist/server/src/lib/entity-visuals.js +279 -0
- package/dist/server/src/lib/knowledge-graph-types.js +276 -0
- package/dist/server/src/lib/knowledge-graph.js +470 -0
- package/dist/server/src/lib/schemas.js +4 -0
- package/dist/server/src/lib/snapshot-normalizer.js +45 -1
- package/dist/server/src/lib/workbench/contracts.js +229 -0
- package/dist/server/src/lib/workbench/nodes.js +200 -0
- package/dist/server/src/lib/workbench/registry.js +52 -5
- package/dist/server/src/lib/workbench/runtime.js +254 -38
- package/dist/server/src/lib/workbench/tool-catalog.js +68 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/server/migrations/037_workbench_public_inputs_and_run_inputs.sql +5 -0
- package/server/migrations/038_data_management_settings.sql +11 -0
- package/server/migrations/039_life_force_and_action_points.sql +114 -0
- package/server/migrations/040_screen_time_domain.sql +89 -0
- package/server/migrations/041_companion_source_states.sql +21 -0
- package/server/migrations/042_movement_boxes.sql +47 -0
- package/server/migrations/043_movement_box_overlap_overrides.sql +26 -0
- package/skills/forge-openclaw/SKILL.md +41 -11
- package/skills/forge-openclaw/entity_conversation_playbooks.md +448 -34
- package/skills/forge-openclaw/psyche_entity_playbooks.md +170 -17
- package/dist/assets/index-Ro0ZF_az.css +0 -1
- package/dist/assets/index-ytlpSj23.js +0 -79
- package/dist/assets/index-ytlpSj23.js.map +0 -1
- package/dist/assets/vendor-lE3tZJcC.js +0 -876
- package/dist/assets/vendor-lE3tZJcC.js.map +0 -1
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
export const LIFE_FORCE_BASELINE_DAILY_AP = 200;
|
|
2
|
+
export const DEFAULT_TASK_TOTAL_AP = 100;
|
|
3
|
+
export const DEFAULT_TASK_EXPECTED_DURATION_SECONDS = 24 * 60 * 60;
|
|
4
|
+
export const TASK_SPLIT_THRESHOLD_SECONDS = 2 * DEFAULT_TASK_EXPECTED_DURATION_SECONDS;
|
|
5
|
+
export const MIN_LIFE_FORCE_POINT_GAP_MINUTES = 20;
|
|
6
|
+
const COST_RELEVANT_STAT_KEYS = [
|
|
7
|
+
"activation",
|
|
8
|
+
"focus",
|
|
9
|
+
"vigor",
|
|
10
|
+
"composure",
|
|
11
|
+
"flow"
|
|
12
|
+
];
|
|
13
|
+
export function clamp(value, min, max) {
|
|
14
|
+
return Math.min(max, Math.max(min, value));
|
|
15
|
+
}
|
|
16
|
+
export function resolveTaskExpectedDurationSeconds(plannedDurationSeconds) {
|
|
17
|
+
return Math.max(60, plannedDurationSeconds ?? DEFAULT_TASK_EXPECTED_DURATION_SECONDS);
|
|
18
|
+
}
|
|
19
|
+
export function resolveActionCostBand(totalCostAp) {
|
|
20
|
+
if (totalCostAp <= 10) {
|
|
21
|
+
return "tiny";
|
|
22
|
+
}
|
|
23
|
+
if (totalCostAp <= 35) {
|
|
24
|
+
return "light";
|
|
25
|
+
}
|
|
26
|
+
if (totalCostAp <= 120) {
|
|
27
|
+
return "standard";
|
|
28
|
+
}
|
|
29
|
+
if (totalCostAp <= 220) {
|
|
30
|
+
return "heavy";
|
|
31
|
+
}
|
|
32
|
+
return "brutal";
|
|
33
|
+
}
|
|
34
|
+
export function resolveBandTotalCostAp(costBand) {
|
|
35
|
+
switch (costBand) {
|
|
36
|
+
case "tiny":
|
|
37
|
+
return 12;
|
|
38
|
+
case "light":
|
|
39
|
+
return 40;
|
|
40
|
+
case "heavy":
|
|
41
|
+
return 180;
|
|
42
|
+
case "brutal":
|
|
43
|
+
return 280;
|
|
44
|
+
case "standard":
|
|
45
|
+
default:
|
|
46
|
+
return DEFAULT_TASK_TOTAL_AP;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export function buildDefaultTaskActionProfile(input) {
|
|
50
|
+
const expectedDurationSeconds = resolveTaskExpectedDurationSeconds(input.expectedDurationSeconds);
|
|
51
|
+
const totalCostAp = Math.max(1, input.totalCostAp ??
|
|
52
|
+
resolveBandTotalCostAp(input.costBand) ??
|
|
53
|
+
DEFAULT_TASK_TOTAL_AP);
|
|
54
|
+
const sustainRateApPerHour = (totalCostAp / expectedDurationSeconds) * 3600;
|
|
55
|
+
const now = new Date().toISOString();
|
|
56
|
+
const costBand = input.costBand ?? resolveActionCostBand(totalCostAp);
|
|
57
|
+
return {
|
|
58
|
+
id: input.id ?? "profile_task_default",
|
|
59
|
+
profileKey: input.profileKey ?? "task_default",
|
|
60
|
+
title: input.title ?? "Default task",
|
|
61
|
+
entityType: "task",
|
|
62
|
+
mode: "rate",
|
|
63
|
+
startupAp: 0,
|
|
64
|
+
totalCostAp,
|
|
65
|
+
expectedDurationSeconds,
|
|
66
|
+
sustainRateApPerHour,
|
|
67
|
+
demandWeights: {
|
|
68
|
+
activation: 0.2,
|
|
69
|
+
focus: 0.45,
|
|
70
|
+
vigor: 0.05,
|
|
71
|
+
composure: 0.05,
|
|
72
|
+
flow: 0.25
|
|
73
|
+
},
|
|
74
|
+
doubleCountPolicy: "primary_only",
|
|
75
|
+
sourceMethod: input.sourceMethod ?? "seeded",
|
|
76
|
+
costBand,
|
|
77
|
+
recoveryEffect: 0,
|
|
78
|
+
metadata: {},
|
|
79
|
+
createdAt: now,
|
|
80
|
+
updatedAt: now
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export function buildTaskActionPointSummary(input) {
|
|
84
|
+
const expectedDurationSeconds = resolveTaskExpectedDurationSeconds(input.plannedDurationSeconds);
|
|
85
|
+
const totalCostAp = Math.max(0, input.totalCostAp ?? DEFAULT_TASK_TOTAL_AP);
|
|
86
|
+
const sustainRateApPerHour = (totalCostAp / expectedDurationSeconds) * 3600;
|
|
87
|
+
const spentTodayAp = Math.max(0, input.spentTodayAp ?? 0);
|
|
88
|
+
const spentTotalAp = Math.max(0, input.spentTotalAp ?? 0);
|
|
89
|
+
return {
|
|
90
|
+
costBand: resolveActionCostBand(totalCostAp),
|
|
91
|
+
totalCostAp,
|
|
92
|
+
expectedDurationSeconds,
|
|
93
|
+
sustainRateApPerHour,
|
|
94
|
+
spentTodayAp,
|
|
95
|
+
spentTotalAp,
|
|
96
|
+
remainingAp: Math.max(0, totalCostAp - spentTotalAp)
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
export function buildTaskSplitSuggestion(input) {
|
|
100
|
+
const expectedDurationSeconds = resolveTaskExpectedDurationSeconds(input.plannedDurationSeconds);
|
|
101
|
+
const thresholdSeconds = expectedDurationSeconds * 2;
|
|
102
|
+
const totalTrackedSeconds = Math.max(0, input.totalTrackedSeconds ?? 0);
|
|
103
|
+
const projectedTotalSeconds = Math.max(totalTrackedSeconds, input.projectedTotalSeconds ?? totalTrackedSeconds);
|
|
104
|
+
if (totalTrackedSeconds >= thresholdSeconds) {
|
|
105
|
+
return {
|
|
106
|
+
shouldSplit: true,
|
|
107
|
+
reason: "This task has already absorbed more than two expected days of work.",
|
|
108
|
+
thresholdSeconds
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
if (projectedTotalSeconds >= thresholdSeconds) {
|
|
112
|
+
return {
|
|
113
|
+
shouldSplit: true,
|
|
114
|
+
reason: "The current live plan would push this task beyond twice its expected duration.",
|
|
115
|
+
thresholdSeconds
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
shouldSplit: false,
|
|
120
|
+
reason: null,
|
|
121
|
+
thresholdSeconds
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
export function computeLifeForceLevelMultiplier(level) {
|
|
125
|
+
return 1 + Math.max(0, level - 1) * 0.03;
|
|
126
|
+
}
|
|
127
|
+
export function computeStatCostModifier(level) {
|
|
128
|
+
return clamp(1 - Math.max(0, level - 1) * 0.02, 0.55, 1.25);
|
|
129
|
+
}
|
|
130
|
+
export function computeActionCostModifier(weights, levels) {
|
|
131
|
+
const relief = COST_RELEVANT_STAT_KEYS.reduce((sum, key) => {
|
|
132
|
+
const level = Math.max(1, levels[key] ?? 1);
|
|
133
|
+
return sum + weights[key] * Math.max(0, level - 1) * 0.02;
|
|
134
|
+
}, 0);
|
|
135
|
+
return clamp(Number((1 - relief).toFixed(4)), 0.55, 1.25);
|
|
136
|
+
}
|
|
137
|
+
export function computeCurveArea(points) {
|
|
138
|
+
if (points.length < 2) {
|
|
139
|
+
return 0;
|
|
140
|
+
}
|
|
141
|
+
let total = 0;
|
|
142
|
+
for (let index = 0; index < points.length - 1; index += 1) {
|
|
143
|
+
const left = points[index];
|
|
144
|
+
const right = points[index + 1];
|
|
145
|
+
const hours = (right.minuteOfDay - left.minuteOfDay) / 60;
|
|
146
|
+
total += ((left.rateApPerHour + right.rateApPerHour) / 2) * hours;
|
|
147
|
+
}
|
|
148
|
+
return total;
|
|
149
|
+
}
|
|
150
|
+
export function normalizeCurveToBudget(points, budgetAp) {
|
|
151
|
+
const area = computeCurveArea(points);
|
|
152
|
+
if (area <= 0 || budgetAp <= 0) {
|
|
153
|
+
return points.map((point) => ({ ...point, rateApPerHour: 0 }));
|
|
154
|
+
}
|
|
155
|
+
const scale = budgetAp / area;
|
|
156
|
+
return points.map((point) => ({
|
|
157
|
+
...point,
|
|
158
|
+
rateApPerHour: Math.max(0, Number((point.rateApPerHour * scale).toFixed(4)))
|
|
159
|
+
}));
|
|
160
|
+
}
|
|
161
|
+
export function computeCurveHandleMaxRate(points, index, budgetAp, minPointGapMinutes = MIN_LIFE_FORCE_POINT_GAP_MINUTES) {
|
|
162
|
+
if (index <= 0 || index >= points.length - 1) {
|
|
163
|
+
return points[index]?.rateApPerHour ?? 0;
|
|
164
|
+
}
|
|
165
|
+
const previous = points[index - 1];
|
|
166
|
+
const current = points[index];
|
|
167
|
+
const next = points[index + 1];
|
|
168
|
+
let fixedArea = 0;
|
|
169
|
+
for (let cursor = 0; cursor < points.length - 1; cursor += 1) {
|
|
170
|
+
if (cursor === index - 1 || cursor === index) {
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
const left = points[cursor];
|
|
174
|
+
const right = points[cursor + 1];
|
|
175
|
+
fixedArea +=
|
|
176
|
+
((left.rateApPerHour + right.rateApPerHour) / 2) *
|
|
177
|
+
((right.minuteOfDay - left.minuteOfDay) / 60);
|
|
178
|
+
}
|
|
179
|
+
const leftHours = Math.max(minPointGapMinutes / 60, (current.minuteOfDay - previous.minuteOfDay) / 60);
|
|
180
|
+
const rightHours = Math.max(minPointGapMinutes / 60, (next.minuteOfDay - current.minuteOfDay) / 60);
|
|
181
|
+
return Math.max(0, (2 * (budgetAp - fixedArea) -
|
|
182
|
+
previous.rateApPerHour * leftHours -
|
|
183
|
+
next.rateApPerHour * rightHours) /
|
|
184
|
+
(leftHours + rightHours));
|
|
185
|
+
}
|
|
186
|
+
export function buildDefaultSplitTitles(title) {
|
|
187
|
+
const cleaned = title.trim();
|
|
188
|
+
if (cleaned.length === 0) {
|
|
189
|
+
return {
|
|
190
|
+
firstTitle: "Split task part 1",
|
|
191
|
+
secondTitle: "Split task part 2"
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
firstTitle: `${cleaned} - part 1`,
|
|
196
|
+
secondTitle: `${cleaned} - part 2`
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
export function interpolateCurveRate(points, minuteOfDay) {
|
|
200
|
+
if (points.length === 0) {
|
|
201
|
+
return 0;
|
|
202
|
+
}
|
|
203
|
+
if (minuteOfDay <= points[0].minuteOfDay) {
|
|
204
|
+
return points[0].rateApPerHour;
|
|
205
|
+
}
|
|
206
|
+
for (let index = 0; index < points.length - 1; index += 1) {
|
|
207
|
+
const left = points[index];
|
|
208
|
+
const right = points[index + 1];
|
|
209
|
+
if (minuteOfDay <= right.minuteOfDay) {
|
|
210
|
+
const span = Math.max(1, right.minuteOfDay - left.minuteOfDay);
|
|
211
|
+
const progress = (minuteOfDay - left.minuteOfDay) / span;
|
|
212
|
+
return (left.rateApPerHour +
|
|
213
|
+
(right.rateApPerHour - left.rateApPerHour) * progress);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return points[points.length - 1].rateApPerHour;
|
|
217
|
+
}
|