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
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { z, ZodError } from "zod";
|
|
1
2
|
import { getDatabase, runInTransaction } from "../db.js";
|
|
3
|
+
import { createSleepSession, createSleepSessionSchema, createWorkoutSession, createWorkoutSessionSchema, deleteSleepSession, deleteWorkoutSession, getSleepSessionById, getWorkoutSessionById, listSleepSessions, listWorkoutSessions, updateSleepSession, updateSleepSessionSchema, updateWorkoutSession, updateWorkoutSessionSchema } from "../health.js";
|
|
2
4
|
import { createInsight, deleteInsight, getInsightById, listInsights, updateInsight } from "../repositories/collaboration.js";
|
|
3
5
|
import { createCalendarEvent, createTaskTimebox, createWorkBlockTemplate, deleteCalendarEvent, deleteTaskTimebox, deleteWorkBlockTemplate, getCalendarEventById, getTaskTimeboxById, getWorkBlockTemplateById, listCalendarEvents, listTaskTimeboxes, listWorkBlockTemplates, updateCalendarEvent, updateTaskTimebox, updateWorkBlockTemplate } from "../repositories/calendar.js";
|
|
4
6
|
import { createNote, deleteNote, getNoteById, listNotes, unlinkNotesForEntity, updateNote } from "../repositories/notes.js";
|
|
@@ -155,6 +157,28 @@ const CRUD_ENTITY_CAPABILITIES = {
|
|
|
155
157
|
update: (id, patch) => updateTaskTimebox(id, patch),
|
|
156
158
|
hardDelete: (id) => deleteTaskTimebox(id)
|
|
157
159
|
},
|
|
160
|
+
sleep_session: {
|
|
161
|
+
entityType: "sleep_session",
|
|
162
|
+
routeBase: "/api/v1/health/sleep",
|
|
163
|
+
deleteMode: "immediate",
|
|
164
|
+
inBin: false,
|
|
165
|
+
list: () => listSleepSessions(),
|
|
166
|
+
get: (id) => getSleepSessionById(id),
|
|
167
|
+
create: (data, context) => createSleepSession(data, context),
|
|
168
|
+
update: (id, patch, context) => updateSleepSession(id, patch, context),
|
|
169
|
+
hardDelete: (id, context) => deleteSleepSession(id, context)
|
|
170
|
+
},
|
|
171
|
+
workout_session: {
|
|
172
|
+
entityType: "workout_session",
|
|
173
|
+
routeBase: "/api/v1/health/workouts",
|
|
174
|
+
deleteMode: "immediate",
|
|
175
|
+
inBin: false,
|
|
176
|
+
list: () => listWorkoutSessions(),
|
|
177
|
+
get: (id) => getWorkoutSessionById(id),
|
|
178
|
+
create: (data, context) => createWorkoutSession(data, context),
|
|
179
|
+
update: (id, patch, context) => updateWorkoutSession(id, patch, context),
|
|
180
|
+
hardDelete: (id, context) => deleteWorkoutSession(id, context)
|
|
181
|
+
},
|
|
158
182
|
psyche_value: {
|
|
159
183
|
entityType: "psyche_value",
|
|
160
184
|
routeBase: "/api/v1/psyche/values",
|
|
@@ -335,6 +359,8 @@ const CREATE_ENTITY_SCHEMAS = {
|
|
|
335
359
|
calendar_event: createCalendarEventSchema,
|
|
336
360
|
work_block_template: createWorkBlockTemplateSchema,
|
|
337
361
|
task_timebox: createTaskTimeboxSchema,
|
|
362
|
+
sleep_session: createSleepSessionSchema,
|
|
363
|
+
workout_session: createWorkoutSessionSchema,
|
|
338
364
|
psyche_value: createPsycheValueSchema,
|
|
339
365
|
behavior_pattern: createBehaviorPatternSchema,
|
|
340
366
|
behavior: createBehaviorSchema,
|
|
@@ -362,6 +388,8 @@ const UPDATE_ENTITY_SCHEMAS = {
|
|
|
362
388
|
calendar_event: updateCalendarEventSchema,
|
|
363
389
|
work_block_template: updateWorkBlockTemplateSchema,
|
|
364
390
|
task_timebox: updateTaskTimeboxSchema,
|
|
391
|
+
sleep_session: updateSleepSessionSchema,
|
|
392
|
+
workout_session: updateWorkoutSessionSchema,
|
|
365
393
|
psyche_value: updatePsycheValueSchema,
|
|
366
394
|
behavior_pattern: updateBehaviorPatternSchema,
|
|
367
395
|
behavior: updateBehaviorSchema,
|
|
@@ -377,11 +405,151 @@ const UPDATE_ENTITY_SCHEMAS = {
|
|
|
377
405
|
preference_item: updatePreferenceItemSchema,
|
|
378
406
|
questionnaire_instrument: updateQuestionnaireInstrumentSchema
|
|
379
407
|
};
|
|
408
|
+
function getCreateSchema(entityType) {
|
|
409
|
+
return CREATE_ENTITY_SCHEMAS[entityType];
|
|
410
|
+
}
|
|
411
|
+
function getUpdateSchema(entityType) {
|
|
412
|
+
return UPDATE_ENTITY_SCHEMAS[entityType];
|
|
413
|
+
}
|
|
414
|
+
function unwrapSchema(schema) {
|
|
415
|
+
if (schema instanceof z.ZodOptional || schema instanceof z.ZodNullable) {
|
|
416
|
+
return unwrapSchema(schema.unwrap());
|
|
417
|
+
}
|
|
418
|
+
if (schema instanceof z.ZodDefault) {
|
|
419
|
+
return unwrapSchema(schema.removeDefault());
|
|
420
|
+
}
|
|
421
|
+
if (schema instanceof z.ZodEffects) {
|
|
422
|
+
return unwrapSchema(schema.innerType());
|
|
423
|
+
}
|
|
424
|
+
return schema;
|
|
425
|
+
}
|
|
426
|
+
function isRequiredField(schema) {
|
|
427
|
+
if (schema instanceof z.ZodOptional) {
|
|
428
|
+
return false;
|
|
429
|
+
}
|
|
430
|
+
if (schema instanceof z.ZodDefault) {
|
|
431
|
+
return false;
|
|
432
|
+
}
|
|
433
|
+
return true;
|
|
434
|
+
}
|
|
435
|
+
function collectRequiredTopLevelFields(schema) {
|
|
436
|
+
const unwrapped = unwrapSchema(schema);
|
|
437
|
+
if (!(unwrapped instanceof z.ZodObject)) {
|
|
438
|
+
return [];
|
|
439
|
+
}
|
|
440
|
+
return Object.entries(unwrapped.shape)
|
|
441
|
+
.filter(([, fieldSchema]) => isRequiredField(fieldSchema))
|
|
442
|
+
.map(([key]) => key)
|
|
443
|
+
.sort();
|
|
444
|
+
}
|
|
445
|
+
function extractAllowedTopLevelFields(schema) {
|
|
446
|
+
const unwrapped = unwrapSchema(schema);
|
|
447
|
+
if (!(unwrapped instanceof z.ZodObject)) {
|
|
448
|
+
return [];
|
|
449
|
+
}
|
|
450
|
+
return Object.keys(unwrapped.shape).sort();
|
|
451
|
+
}
|
|
452
|
+
function buildExampleValue(schema) {
|
|
453
|
+
const unwrapped = unwrapSchema(schema);
|
|
454
|
+
if (unwrapped instanceof z.ZodString) {
|
|
455
|
+
return "string";
|
|
456
|
+
}
|
|
457
|
+
if (unwrapped instanceof z.ZodNumber) {
|
|
458
|
+
return 0;
|
|
459
|
+
}
|
|
460
|
+
if (unwrapped instanceof z.ZodBoolean) {
|
|
461
|
+
return false;
|
|
462
|
+
}
|
|
463
|
+
if (unwrapped instanceof z.ZodArray) {
|
|
464
|
+
return [];
|
|
465
|
+
}
|
|
466
|
+
if (unwrapped instanceof z.ZodRecord) {
|
|
467
|
+
return {};
|
|
468
|
+
}
|
|
469
|
+
if (unwrapped instanceof z.ZodEnum) {
|
|
470
|
+
return unwrapped.options[0];
|
|
471
|
+
}
|
|
472
|
+
if (unwrapped instanceof z.ZodLiteral) {
|
|
473
|
+
return unwrapped.value;
|
|
474
|
+
}
|
|
475
|
+
if (unwrapped instanceof z.ZodUnion) {
|
|
476
|
+
return buildExampleValue(unwrapped.options[0] ?? z.string());
|
|
477
|
+
}
|
|
478
|
+
if (unwrapped instanceof z.ZodObject) {
|
|
479
|
+
const objectValue = {};
|
|
480
|
+
for (const [key, fieldSchema] of Object.entries(unwrapped.shape)) {
|
|
481
|
+
if (!isRequiredField(fieldSchema)) {
|
|
482
|
+
continue;
|
|
483
|
+
}
|
|
484
|
+
objectValue[key] = buildExampleValue(fieldSchema);
|
|
485
|
+
}
|
|
486
|
+
return objectValue;
|
|
487
|
+
}
|
|
488
|
+
return "value";
|
|
489
|
+
}
|
|
490
|
+
function buildMinimalExamplePayload(schema) {
|
|
491
|
+
const unwrapped = unwrapSchema(schema);
|
|
492
|
+
if (!(unwrapped instanceof z.ZodObject)) {
|
|
493
|
+
return {};
|
|
494
|
+
}
|
|
495
|
+
const requiredFields = collectRequiredTopLevelFields(schema);
|
|
496
|
+
const example = {};
|
|
497
|
+
for (const field of requiredFields) {
|
|
498
|
+
example[field] = buildExampleValue(unwrapped.shape[field]);
|
|
499
|
+
}
|
|
500
|
+
return example;
|
|
501
|
+
}
|
|
502
|
+
function formatIssuePath(path) {
|
|
503
|
+
return path.length > 0 ? path.map(String).join(".") : "body";
|
|
504
|
+
}
|
|
505
|
+
function buildValidationOperationError(input) {
|
|
506
|
+
const issues = input.error.issues.map((issue) => {
|
|
507
|
+
const allowedValues = "options" in issue && Array.isArray(issue.options)
|
|
508
|
+
? [...issue.options]
|
|
509
|
+
: undefined;
|
|
510
|
+
return {
|
|
511
|
+
path: formatIssuePath(issue.path),
|
|
512
|
+
message: issue.message,
|
|
513
|
+
code: issue.code,
|
|
514
|
+
...(allowedValues ? { allowedValues } : {})
|
|
515
|
+
};
|
|
516
|
+
});
|
|
517
|
+
const missingRequiredFields = Array.from(new Set(input.error.issues
|
|
518
|
+
.filter((issue) => issue.code === "invalid_type" &&
|
|
519
|
+
"received" in issue &&
|
|
520
|
+
issue.received === "undefined" &&
|
|
521
|
+
issue.path.length > 0)
|
|
522
|
+
.map((issue) => formatIssuePath(issue.path)))).sort();
|
|
523
|
+
const invalidValueGuidance = input.error.issues
|
|
524
|
+
.filter((issue) => "options" in issue && Array.isArray(issue.options))
|
|
525
|
+
.map((issue) => ({
|
|
526
|
+
path: formatIssuePath(issue.path),
|
|
527
|
+
allowedValues: [...(issue.options ?? [])],
|
|
528
|
+
message: issue.message
|
|
529
|
+
}));
|
|
530
|
+
return {
|
|
531
|
+
code: input.code,
|
|
532
|
+
message: input.message,
|
|
533
|
+
operationType: input.operationType,
|
|
534
|
+
entityType: input.entityType,
|
|
535
|
+
clientRef: input.clientRef,
|
|
536
|
+
routeHint: `/api/v1/entities/${input.operationType}`,
|
|
537
|
+
toolHint: input.operationType === "search"
|
|
538
|
+
? "forge_search_entities"
|
|
539
|
+
: `forge_${input.operationType}_entities`,
|
|
540
|
+
summary: `${input.entityType} ${input.operationType} payload failed validation.`,
|
|
541
|
+
issues,
|
|
542
|
+
missingRequiredFields,
|
|
543
|
+
invalidValueGuidance,
|
|
544
|
+
allowedTopLevelFields: extractAllowedTopLevelFields(input.schema),
|
|
545
|
+
minimalExamplePayload: buildMinimalExamplePayload(input.schema)
|
|
546
|
+
};
|
|
547
|
+
}
|
|
380
548
|
function parseCreateInput(entityType, data) {
|
|
381
|
-
return
|
|
549
|
+
return getCreateSchema(entityType).parse(data);
|
|
382
550
|
}
|
|
383
551
|
function parseUpdatePatch(entityType, patch) {
|
|
384
|
-
return
|
|
552
|
+
return getUpdateSchema(entityType).parse(patch);
|
|
385
553
|
}
|
|
386
554
|
function toOperationError(code, message) {
|
|
387
555
|
return {
|
|
@@ -506,6 +674,8 @@ function matchesLinkedTo(entityType, entity, linkedTo) {
|
|
|
506
674
|
case "insight":
|
|
507
675
|
return entity.entityType === linkedTo.entityType && entity.entityId === linkedTo.id;
|
|
508
676
|
case "calendar_event":
|
|
677
|
+
case "sleep_session":
|
|
678
|
+
case "workout_session":
|
|
509
679
|
return (Array.isArray(entity.links) &&
|
|
510
680
|
entity.links.some((link) => typeof link === "object" &&
|
|
511
681
|
link !== null &&
|
|
@@ -654,6 +824,22 @@ export function createEntities(input, context) {
|
|
|
654
824
|
return { ok: true, entityType: entry.entityType, clientRef: entry.clientRef, id: String(entity.id ?? ""), entity };
|
|
655
825
|
}
|
|
656
826
|
catch (error) {
|
|
827
|
+
if (error instanceof ZodError) {
|
|
828
|
+
return {
|
|
829
|
+
ok: false,
|
|
830
|
+
entityType: entry.entityType,
|
|
831
|
+
clientRef: entry.clientRef,
|
|
832
|
+
error: buildValidationOperationError({
|
|
833
|
+
code: "validation_failed",
|
|
834
|
+
message: "Entity create payload validation failed.",
|
|
835
|
+
operationType: "create",
|
|
836
|
+
entityType: entry.entityType,
|
|
837
|
+
clientRef: entry.clientRef,
|
|
838
|
+
schema: getCreateSchema(entry.entityType),
|
|
839
|
+
error
|
|
840
|
+
})
|
|
841
|
+
};
|
|
842
|
+
}
|
|
657
843
|
return {
|
|
658
844
|
ok: false,
|
|
659
845
|
entityType: entry.entityType,
|
|
@@ -679,6 +865,23 @@ export function updateEntities(input, context) {
|
|
|
679
865
|
return { ok: true, entityType: entry.entityType, id: entry.id, clientRef: entry.clientRef, entity };
|
|
680
866
|
}
|
|
681
867
|
catch (error) {
|
|
868
|
+
if (error instanceof ZodError) {
|
|
869
|
+
return {
|
|
870
|
+
ok: false,
|
|
871
|
+
entityType: entry.entityType,
|
|
872
|
+
id: entry.id,
|
|
873
|
+
clientRef: entry.clientRef,
|
|
874
|
+
error: buildValidationOperationError({
|
|
875
|
+
code: "validation_failed",
|
|
876
|
+
message: "Entity update payload validation failed.",
|
|
877
|
+
operationType: "update",
|
|
878
|
+
entityType: entry.entityType,
|
|
879
|
+
clientRef: entry.clientRef,
|
|
880
|
+
schema: getUpdateSchema(entry.entityType),
|
|
881
|
+
error
|
|
882
|
+
})
|
|
883
|
+
};
|
|
884
|
+
}
|
|
682
885
|
return {
|
|
683
886
|
ok: false,
|
|
684
887
|
entityType: entry.entityType,
|