forge-openclaw-plugin 0.2.26 → 0.2.27

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