forge-openclaw-plugin 0.2.25 → 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.
- package/README.md +59 -3
- package/dist/assets/{board-VmF4FAfr.js → board-C6jCchjI.js} +3 -3
- package/dist/assets/{board-VmF4FAfr.js.map → board-C6jCchjI.js.map} +1 -1
- package/dist/assets/index-DVvS8iiU.css +1 -0
- package/dist/assets/index-zYB-9Dfo.js +85 -0
- package/dist/assets/index-zYB-9Dfo.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-DvkU14p-.js → motion-DFHrH2rd.js} +2 -2
- package/dist/assets/{motion-DvkU14p-.js.map → motion-DFHrH2rd.js.map} +1 -1
- package/dist/assets/{table-DgiPof9E.js → table-ZL7Di_u3.js} +2 -2
- package/dist/assets/{table-DgiPof9E.js.map → table-ZL7Di_u3.js.map} +1 -1
- package/dist/assets/{ui-nYfoC0Gq.js → ui-CKNPpz7q.js} +2 -2
- package/dist/assets/{ui-nYfoC0Gq.js.map → ui-CKNPpz7q.js.map} +1 -1
- package/dist/assets/vendor-DoNZuFhn.js +1247 -0
- package/dist/assets/vendor-DoNZuFhn.js.map +1 -0
- package/dist/index.html +7 -8
- package/dist/openclaw/local-runtime.d.ts +3 -1
- package/dist/openclaw/local-runtime.js +67 -15
- package/dist/openclaw/plugin-entry-shared.js +24 -2
- package/dist/openclaw/plugin-sdk-types.d.ts +17 -0
- package/dist/openclaw/routes.d.ts +27 -0
- package/dist/openclaw/routes.js +16 -12
- package/dist/openclaw/tools.js +0 -3
- package/dist/server/server/migrations/001_core.sql +411 -0
- package/dist/server/server/migrations/002_psyche.sql +392 -0
- package/dist/server/server/migrations/003_habits.sql +30 -0
- package/dist/server/server/migrations/004_habit_links.sql +8 -0
- package/dist/server/server/migrations/005_habit_psyche_links.sql +24 -0
- package/dist/server/server/migrations/006_work_adjustments.sql +14 -0
- package/dist/server/server/migrations/007_weekly_review_closures.sql +17 -0
- package/dist/server/server/migrations/008_calendar_execution.sql +147 -0
- package/dist/server/server/migrations/009_true_calendar_events.sql +195 -0
- package/dist/server/server/migrations/010_calendar_selection_state.sql +6 -0
- package/dist/server/server/migrations/011_calendar_timezone_backfill.sql +11 -0
- package/dist/server/server/migrations/012_work_block_ranges.sql +7 -0
- package/dist/server/server/migrations/013_microsoft_local_auth_settings.sql +8 -0
- package/dist/server/server/migrations/014_note_tags_and_ephemeral.sql +8 -0
- package/dist/server/server/migrations/015_multi_user_and_strategies.sql +244 -0
- package/dist/server/server/migrations/016_health_companion.sql +158 -0
- package/dist/server/server/migrations/016_strategy_contracts_and_user_graph.sql +22 -0
- package/dist/server/server/migrations/017_preferences.sql +131 -0
- package/dist/server/server/migrations/018_preference_catalogs.sql +31 -0
- package/dist/server/server/migrations/019_wiki_memory.sql +255 -0
- package/dist/server/server/migrations/020_wiki_page_hierarchy.sql +11 -0
- package/dist/server/server/migrations/021_hide_evidence_from_wiki_index.sql +3 -0
- package/dist/server/server/migrations/022_wiki_ingest_background.sql +85 -0
- package/dist/server/server/migrations/023_diagnostic_logs.sql +28 -0
- package/dist/server/server/migrations/024_questionnaires.sql +96 -0
- package/dist/server/server/migrations/025_ai_model_connections.sql +26 -0
- package/dist/server/server/migrations/026_custom_theme_settings.sql +2 -0
- package/dist/server/server/migrations/027_ai_processors.sql +31 -0
- package/dist/server/server/migrations/028_movement_domain.sql +136 -0
- package/dist/server/server/migrations/029_watch_micro_capture.sql +23 -0
- package/dist/server/server/migrations/030_surface_layouts.sql +5 -0
- package/dist/server/server/migrations/031_ai_processor_runtime_upgrades.sql +10 -0
- package/dist/server/server/migrations/032_ai_connectors.sql +44 -0
- package/dist/server/server/migrations/033_movement_trip_point_sync.sql +36 -0
- package/dist/server/server/migrations/034_movement_segment_sync.sql +49 -0
- package/dist/server/server/migrations/035_google_local_auth_settings.sql +2 -0
- package/dist/server/server/migrations/036_google_local_auth_client_secret.sql +2 -0
- 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/{app.js → server/src/app.js} +2112 -414
- package/dist/server/server/src/connectors/box-registry.js +223 -0
- package/dist/server/server/src/data-management-types.js +107 -0
- package/dist/server/{db.js → server/src/db.js} +72 -4
- package/dist/server/server/src/debug.js +19 -0
- package/dist/server/{demo-data.js → server/src/demo-data.js} +2 -2
- package/dist/server/{health.js → server/src/health.js} +702 -18
- package/dist/server/{managers → 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/{managers → server/src/managers}/platform/secrets-manager.js +18 -1
- package/dist/server/{managers → server/src/managers}/runtime.js +9 -0
- package/dist/server/{movement.js → server/src/movement.js} +1971 -112
- package/dist/server/{openapi.js → server/src/openapi.js} +491 -3
- package/dist/server/{psyche-types.js → server/src/psyche-types.js} +9 -1
- package/dist/server/{repositories → server/src/repositories}/activity-events.js +8 -0
- package/dist/server/{repositories → server/src/repositories}/ai-connectors.js +758 -47
- package/dist/server/{repositories → server/src/repositories}/calendar.js +1 -1
- package/dist/server/{repositories → server/src/repositories}/habits.js +37 -1
- package/dist/server/{repositories → server/src/repositories}/model-settings.js +13 -3
- package/dist/server/{repositories → server/src/repositories}/notes.js +3 -0
- package/dist/server/{repositories → server/src/repositories}/settings.js +431 -21
- package/dist/server/{repositories → 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/{services → server/src/services}/calendar-runtime.js +775 -58
- package/dist/server/server/src/services/data-management.js +788 -0
- package/dist/server/{services → server/src/services}/entity-crud.js +205 -2
- package/dist/server/server/src/services/google-calendar-oauth-config.js +176 -0
- package/dist/server/server/src/services/knowledge-graph.js +1455 -0
- package/dist/server/server/src/services/life-force-model.js +197 -0
- package/dist/server/server/src/services/life-force.js +1270 -0
- package/dist/server/server/src/services/psyche-observation-calendar.js +413 -0
- package/dist/server/{types.js → server/src/types.js} +420 -29
- package/dist/server/server/src/web.js +332 -0
- package/dist/server/src/components/customization/utility-widgets.js +439 -0
- 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 +147 -0
- package/dist/server/src/components/workbench-boxes/insights/insights-boxes.js +50 -0
- package/dist/server/src/components/workbench-boxes/kanban/kanban-boxes.js +136 -0
- package/dist/server/src/components/workbench-boxes/movement/movement-boxes.js +47 -0
- package/dist/server/src/components/workbench-boxes/notes/notes-boxes.js +132 -0
- 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 +62 -0
- 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 +6 -0
- package/dist/server/src/components/workbench-boxes/shared/generic-node-view.js +49 -0
- 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 +78 -0
- package/dist/server/src/components/workbench-boxes/wiki/wiki-boxes.js +60 -0
- package/dist/server/src/lib/api-error.js +37 -0
- package/dist/server/src/lib/api.js +2118 -0
- package/dist/server/src/lib/calendar-name-deduper.js +144 -0
- package/dist/server/src/lib/data-management-types.js +1 -0
- package/dist/server/src/lib/diagnostics.js +67 -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/psyche-types.js +1 -0
- package/dist/server/src/lib/questionnaire-types.js +1 -0
- package/dist/server/src/lib/runtime-paths.js +24 -0
- package/dist/server/src/lib/schemas.js +238 -0
- package/dist/server/src/lib/snapshot-normalizer.js +416 -0
- package/dist/server/src/lib/theme-system.js +319 -0
- package/dist/server/src/lib/types.js +1 -0
- package/dist/server/src/lib/utils.js +22 -0
- package/dist/server/src/lib/workbench/boxes.js +16 -0
- package/dist/server/src/lib/workbench/contracts.js +229 -0
- package/dist/server/src/lib/workbench/nodes.js +215 -0
- package/dist/server/src/lib/workbench/registry.js +120 -0
- package/dist/server/src/lib/workbench/runtime.js +397 -0
- package/dist/server/src/lib/workbench/tool-catalog.js +68 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/server/index.js +68 -0
- package/server/migrations/035_google_local_auth_settings.sql +2 -0
- package/server/migrations/036_google_local_auth_client_secret.sql +2 -0
- 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 +27 -11
- package/skills/forge-openclaw/entity_conversation_playbooks.md +411 -46
- package/skills/forge-openclaw/psyche_entity_playbooks.md +195 -20
- package/dist/assets/index-CFCKDIMH.js +0 -67
- package/dist/assets/index-CFCKDIMH.js.map +0 -1
- package/dist/assets/index-ZPY6U1TU.css +0 -1
- package/dist/assets/vendor-D9PTEPSB.js +0 -824
- package/dist/assets/vendor-D9PTEPSB.js.map +0 -1
- package/dist/assets/viz-Cqb6s--o.js +0 -34
- package/dist/assets/viz-Cqb6s--o.js.map +0 -1
- package/dist/server/connectors/box-registry.js +0 -257
- package/dist/server/services/psyche-observation-calendar.js +0 -46
- package/dist/server/web.js +0 -98
- /package/dist/server/{discovery-advertiser.js → server/src/discovery-advertiser.js} +0 -0
- /package/dist/server/{e2e-server.js → server/src/e2e-server.js} +0 -0
- /package/dist/server/{errors.js → server/src/errors.js} +0 -0
- /package/dist/server/{index.js → server/src/index.js} +0 -0
- /package/dist/server/{managers → server/src/managers}/base.js +0 -0
- /package/dist/server/{managers → server/src/managers}/contracts.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/api-gateway-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/audit-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/authentication-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/authorization-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/background-job-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/configuration-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/database-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/event-bus-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/external-service-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/health-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/migration-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/openai-responses-provider.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/search-index-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/session-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/storage-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/token-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/transaction-manager.js +0 -0
- /package/dist/server/{managers → server/src/managers}/platform/trusted-network.js +0 -0
- /package/dist/server/{managers → server/src/managers}/type-guards.js +0 -0
- /package/dist/server/{preferences-seeds.js → server/src/preferences-seeds.js} +0 -0
- /package/dist/server/{preferences-types.js → server/src/preferences-types.js} +0 -0
- /package/dist/server/{questionnaire-flow.js → server/src/questionnaire-flow.js} +0 -0
- /package/dist/server/{questionnaire-seeds.js → server/src/questionnaire-seeds.js} +0 -0
- /package/dist/server/{questionnaire-types.js → server/src/questionnaire-types.js} +0 -0
- /package/dist/server/{repositories → server/src/repositories}/ai-processors.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/collaboration.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/deleted-entities.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/diagnostic-logs.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/domains.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/entity-ownership.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/event-log.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/goals.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/preferences.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/projects.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/psyche.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/questionnaires.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/rewards.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/strategies.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/surface-layouts.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/tags.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/task-runs.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/users.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/weekly-reviews.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/wiki-memory.js +0 -0
- /package/dist/server/{repositories → server/src/repositories}/work-adjustments.js +0 -0
- /package/dist/server/{seed-demo.js → server/src/seed-demo.js} +0 -0
- /package/dist/server/{services → server/src/services}/context.js +0 -0
- /package/dist/server/{services → server/src/services}/dashboard.js +0 -0
- /package/dist/server/{services → server/src/services}/gamification.js +0 -0
- /package/dist/server/{services → server/src/services}/insights.js +0 -0
- /package/dist/server/{services → server/src/services}/openai-codex-oauth.js +0 -0
- /package/dist/server/{services → server/src/services}/projects.js +0 -0
- /package/dist/server/{services → server/src/services}/psyche.js +0 -0
- /package/dist/server/{services → server/src/services}/relations.js +0 -0
- /package/dist/server/{services → server/src/services}/reviews.js +0 -0
- /package/dist/server/{services → server/src/services}/run-recovery.js +0 -0
- /package/dist/server/{services → server/src/services}/tagging.js +0 -0
- /package/dist/server/{services → server/src/services}/task-run-watchdog.js +0 -0
- /package/dist/server/{services → server/src/services}/work-time.js +0 -0
- /package/dist/server/{watch-mobile.js → server/src/watch-mobile.js} +0 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS screen_time_settings (
|
|
2
|
+
user_id TEXT PRIMARY KEY REFERENCES users(id) ON DELETE CASCADE,
|
|
3
|
+
tracking_enabled INTEGER NOT NULL DEFAULT 0,
|
|
4
|
+
sync_enabled INTEGER NOT NULL DEFAULT 1,
|
|
5
|
+
authorization_status TEXT NOT NULL DEFAULT 'not_determined',
|
|
6
|
+
capture_state TEXT NOT NULL DEFAULT 'disabled',
|
|
7
|
+
last_captured_day_key TEXT,
|
|
8
|
+
last_capture_started_at TEXT,
|
|
9
|
+
last_capture_ended_at TEXT,
|
|
10
|
+
metadata_json TEXT NOT NULL DEFAULT '{}',
|
|
11
|
+
created_at TEXT NOT NULL,
|
|
12
|
+
updated_at TEXT NOT NULL
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
CREATE TABLE IF NOT EXISTS screen_time_day_summaries (
|
|
16
|
+
id TEXT PRIMARY KEY,
|
|
17
|
+
user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
18
|
+
pairing_session_id TEXT REFERENCES companion_pairing_sessions(id) ON DELETE SET NULL,
|
|
19
|
+
source_device TEXT NOT NULL DEFAULT 'iPhone',
|
|
20
|
+
date_key TEXT NOT NULL,
|
|
21
|
+
total_activity_seconds INTEGER NOT NULL DEFAULT 0,
|
|
22
|
+
pickup_count INTEGER NOT NULL DEFAULT 0,
|
|
23
|
+
notification_count INTEGER NOT NULL DEFAULT 0,
|
|
24
|
+
first_pickup_at TEXT,
|
|
25
|
+
longest_activity_seconds INTEGER NOT NULL DEFAULT 0,
|
|
26
|
+
top_app_bundle_ids_json TEXT NOT NULL DEFAULT '[]',
|
|
27
|
+
top_category_labels_json TEXT NOT NULL DEFAULT '[]',
|
|
28
|
+
metadata_json TEXT NOT NULL DEFAULT '{}',
|
|
29
|
+
created_at TEXT NOT NULL,
|
|
30
|
+
updated_at TEXT NOT NULL,
|
|
31
|
+
UNIQUE (user_id, source_device, date_key)
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
CREATE INDEX IF NOT EXISTS idx_screen_time_day_summaries_user
|
|
35
|
+
ON screen_time_day_summaries(user_id, date_key DESC);
|
|
36
|
+
|
|
37
|
+
CREATE TABLE IF NOT EXISTS screen_time_hourly_segments (
|
|
38
|
+
id TEXT PRIMARY KEY,
|
|
39
|
+
user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
40
|
+
pairing_session_id TEXT REFERENCES companion_pairing_sessions(id) ON DELETE SET NULL,
|
|
41
|
+
source_device TEXT NOT NULL DEFAULT 'iPhone',
|
|
42
|
+
date_key TEXT NOT NULL,
|
|
43
|
+
hour_index INTEGER NOT NULL,
|
|
44
|
+
started_at TEXT NOT NULL,
|
|
45
|
+
ended_at TEXT NOT NULL,
|
|
46
|
+
total_activity_seconds INTEGER NOT NULL DEFAULT 0,
|
|
47
|
+
pickup_count INTEGER NOT NULL DEFAULT 0,
|
|
48
|
+
notification_count INTEGER NOT NULL DEFAULT 0,
|
|
49
|
+
first_pickup_at TEXT,
|
|
50
|
+
longest_activity_started_at TEXT,
|
|
51
|
+
longest_activity_ended_at TEXT,
|
|
52
|
+
metadata_json TEXT NOT NULL DEFAULT '{}',
|
|
53
|
+
created_at TEXT NOT NULL,
|
|
54
|
+
updated_at TEXT NOT NULL,
|
|
55
|
+
UNIQUE (user_id, source_device, date_key, hour_index)
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
CREATE INDEX IF NOT EXISTS idx_screen_time_hourly_segments_user
|
|
59
|
+
ON screen_time_hourly_segments(user_id, started_at DESC);
|
|
60
|
+
|
|
61
|
+
CREATE TABLE IF NOT EXISTS screen_time_app_usage (
|
|
62
|
+
id TEXT PRIMARY KEY,
|
|
63
|
+
segment_id TEXT NOT NULL REFERENCES screen_time_hourly_segments(id) ON DELETE CASCADE,
|
|
64
|
+
bundle_identifier TEXT NOT NULL,
|
|
65
|
+
display_name TEXT NOT NULL DEFAULT '',
|
|
66
|
+
category_label TEXT,
|
|
67
|
+
total_activity_seconds INTEGER NOT NULL DEFAULT 0,
|
|
68
|
+
pickup_count INTEGER NOT NULL DEFAULT 0,
|
|
69
|
+
notification_count INTEGER NOT NULL DEFAULT 0,
|
|
70
|
+
created_at TEXT NOT NULL,
|
|
71
|
+
updated_at TEXT NOT NULL,
|
|
72
|
+
UNIQUE (segment_id, bundle_identifier)
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
CREATE INDEX IF NOT EXISTS idx_screen_time_app_usage_segment
|
|
76
|
+
ON screen_time_app_usage(segment_id, total_activity_seconds DESC);
|
|
77
|
+
|
|
78
|
+
CREATE TABLE IF NOT EXISTS screen_time_category_usage (
|
|
79
|
+
id TEXT PRIMARY KEY,
|
|
80
|
+
segment_id TEXT NOT NULL REFERENCES screen_time_hourly_segments(id) ON DELETE CASCADE,
|
|
81
|
+
category_label TEXT NOT NULL,
|
|
82
|
+
total_activity_seconds INTEGER NOT NULL DEFAULT 0,
|
|
83
|
+
created_at TEXT NOT NULL,
|
|
84
|
+
updated_at TEXT NOT NULL,
|
|
85
|
+
UNIQUE (segment_id, category_label)
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
CREATE INDEX IF NOT EXISTS idx_screen_time_category_usage_segment
|
|
89
|
+
ON screen_time_category_usage(segment_id, total_activity_seconds DESC);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS companion_pairing_source_states (
|
|
2
|
+
id TEXT PRIMARY KEY,
|
|
3
|
+
pairing_session_id TEXT NOT NULL REFERENCES companion_pairing_sessions(id) ON DELETE CASCADE,
|
|
4
|
+
user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
5
|
+
source_key TEXT NOT NULL,
|
|
6
|
+
desired_enabled INTEGER NOT NULL DEFAULT 1,
|
|
7
|
+
applied_enabled INTEGER NOT NULL DEFAULT 0,
|
|
8
|
+
authorization_status TEXT NOT NULL DEFAULT 'not_determined',
|
|
9
|
+
sync_eligible INTEGER NOT NULL DEFAULT 0,
|
|
10
|
+
last_observed_at TEXT,
|
|
11
|
+
metadata_json TEXT NOT NULL DEFAULT '{}',
|
|
12
|
+
created_at TEXT NOT NULL,
|
|
13
|
+
updated_at TEXT NOT NULL,
|
|
14
|
+
UNIQUE (pairing_session_id, source_key)
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
CREATE INDEX IF NOT EXISTS idx_companion_pairing_source_states_pairing
|
|
18
|
+
ON companion_pairing_source_states(pairing_session_id, source_key);
|
|
19
|
+
|
|
20
|
+
CREATE INDEX IF NOT EXISTS idx_companion_pairing_source_states_user
|
|
21
|
+
ON companion_pairing_source_states(user_id, updated_at DESC);
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS movement_boxes (
|
|
2
|
+
id TEXT PRIMARY KEY,
|
|
3
|
+
user_id TEXT NOT NULL,
|
|
4
|
+
kind TEXT NOT NULL CHECK (kind IN ('stay', 'trip', 'missing')),
|
|
5
|
+
source_kind TEXT NOT NULL CHECK (source_kind IN ('automatic', 'user_defined')),
|
|
6
|
+
origin TEXT NOT NULL CHECK (
|
|
7
|
+
origin IN (
|
|
8
|
+
'recorded',
|
|
9
|
+
'continued_stay',
|
|
10
|
+
'repaired_gap',
|
|
11
|
+
'missing',
|
|
12
|
+
'user_defined',
|
|
13
|
+
'user_invalidated'
|
|
14
|
+
)
|
|
15
|
+
),
|
|
16
|
+
started_at TEXT NOT NULL,
|
|
17
|
+
ended_at TEXT NOT NULL,
|
|
18
|
+
title TEXT NOT NULL DEFAULT '',
|
|
19
|
+
subtitle TEXT NOT NULL DEFAULT '',
|
|
20
|
+
place_label TEXT,
|
|
21
|
+
anchor_external_uid TEXT,
|
|
22
|
+
tags_json TEXT NOT NULL DEFAULT '[]',
|
|
23
|
+
distance_meters REAL,
|
|
24
|
+
average_speed_mps REAL,
|
|
25
|
+
editable INTEGER NOT NULL DEFAULT 0,
|
|
26
|
+
override_count INTEGER NOT NULL DEFAULT 0,
|
|
27
|
+
overridden_automatic_box_ids_json TEXT NOT NULL DEFAULT '[]',
|
|
28
|
+
raw_stay_ids_json TEXT NOT NULL DEFAULT '[]',
|
|
29
|
+
raw_trip_ids_json TEXT NOT NULL DEFAULT '[]',
|
|
30
|
+
raw_point_count INTEGER NOT NULL DEFAULT 0,
|
|
31
|
+
has_legacy_corrections INTEGER NOT NULL DEFAULT 0,
|
|
32
|
+
legacy_origin_key TEXT,
|
|
33
|
+
metadata_json TEXT NOT NULL DEFAULT '{}',
|
|
34
|
+
deleted_at TEXT,
|
|
35
|
+
created_at TEXT NOT NULL,
|
|
36
|
+
updated_at TEXT NOT NULL
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
CREATE INDEX IF NOT EXISTS idx_movement_boxes_user_time
|
|
40
|
+
ON movement_boxes(user_id, started_at, ended_at);
|
|
41
|
+
|
|
42
|
+
CREATE INDEX IF NOT EXISTS idx_movement_boxes_user_source
|
|
43
|
+
ON movement_boxes(user_id, source_kind, deleted_at, started_at);
|
|
44
|
+
|
|
45
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_movement_boxes_legacy_origin
|
|
46
|
+
ON movement_boxes(user_id, legacy_origin_key)
|
|
47
|
+
WHERE legacy_origin_key IS NOT NULL;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
ALTER TABLE movement_boxes
|
|
2
|
+
ADD COLUMN true_started_at TEXT;
|
|
3
|
+
|
|
4
|
+
ALTER TABLE movement_boxes
|
|
5
|
+
ADD COLUMN true_ended_at TEXT;
|
|
6
|
+
|
|
7
|
+
ALTER TABLE movement_boxes
|
|
8
|
+
ADD COLUMN overridden_started_at TEXT;
|
|
9
|
+
|
|
10
|
+
ALTER TABLE movement_boxes
|
|
11
|
+
ADD COLUMN overridden_ended_at TEXT;
|
|
12
|
+
|
|
13
|
+
ALTER TABLE movement_boxes
|
|
14
|
+
ADD COLUMN overridden_by_box_id TEXT;
|
|
15
|
+
|
|
16
|
+
ALTER TABLE movement_boxes
|
|
17
|
+
ADD COLUMN overridden_user_box_ids_json TEXT NOT NULL DEFAULT '[]';
|
|
18
|
+
|
|
19
|
+
ALTER TABLE movement_boxes
|
|
20
|
+
ADD COLUMN override_ranges_json TEXT NOT NULL DEFAULT '[]';
|
|
21
|
+
|
|
22
|
+
ALTER TABLE movement_boxes
|
|
23
|
+
ADD COLUMN is_overridden INTEGER NOT NULL DEFAULT 0;
|
|
24
|
+
|
|
25
|
+
ALTER TABLE movement_boxes
|
|
26
|
+
ADD COLUMN is_fully_hidden INTEGER NOT NULL DEFAULT 0;
|
|
@@ -41,8 +41,9 @@ Wiki navigation and search rule:
|
|
|
41
41
|
Health rule:
|
|
42
42
|
|
|
43
43
|
- Sleep and sports records are first-class health surfaces, not generic notes or tasks.
|
|
44
|
-
- Use `forge_get_sleep_overview` and `forge_get_sports_overview` for review.
|
|
45
|
-
- Use `
|
|
44
|
+
- Use `forge_get_sleep_overview` and `forge_get_sports_overview` for review and trend reading.
|
|
45
|
+
- Use the shared batch entity tools for ordinary `sleep_session` and `workout_session` create, update, delete, and search work. Do not force agents into a large one-route-per-entity mental model when the batch routes already cover the record cleanly.
|
|
46
|
+
- Use `forge_update_sleep_session` and `forge_update_workout_session` only when the job is reflective enrichment on one existing health record after review, such as attaching notes, tags, mood, meaning, or Forge links.
|
|
46
47
|
- Habit-generated workouts and imported HealthKit workouts belong to the same workout record model, so do not invent a separate storage path for sport sessions.
|
|
47
48
|
|
|
48
49
|
Write to Forge only with clear user consent. If the user is just thinking aloud, helping first is usually better than writing immediately. After helping, you may offer one short Forge prompt if the match is strong. If the user agrees, ask only for the missing fields and only one to three focused questions at a time. Do not offer Forge again after a decline unless the user reopens it.
|
|
@@ -56,15 +57,17 @@ Entity conversation rule:
|
|
|
56
57
|
- Prefer a progression of:
|
|
57
58
|
concrete example or intent -> working name -> purpose or meaning -> placement in Forge -> operational details -> linked context.
|
|
58
59
|
- For emotionally meaningful non-Psyche records such as goals, habits, and notes, reflect the meaning before you ask for structure.
|
|
60
|
+
- When the user is vague, ask for one small concrete example, stake, or desired outcome before you ask them to name the record.
|
|
61
|
+
- When the user is clear, say what the record seems to be becoming and ask only for the last missing detail.
|
|
59
62
|
- When updating an entity, start with what is changing, what should stay true, and what prompted the update now.
|
|
60
63
|
- When enough is clear, briefly summarize what you heard in the user's own language before asking for the last missing structural detail.
|
|
61
64
|
- The quick intake prompts later in this file are fallback checkpoints, not a script to read aloud.
|
|
62
65
|
|
|
63
66
|
Forge data location rule:
|
|
64
67
|
|
|
65
|
-
- by default, Forge stores data under the active runtime root at `
|
|
66
|
-
- on a normal OpenClaw install, this usually means `~/.openclaw/extensions/forge-openclaw-plugin/
|
|
67
|
-
- on a linked repo-local install, this usually means `<repo>/openclaw-plugin/
|
|
68
|
+
- by default, Forge stores data under the active runtime root at `forge.sqlite`
|
|
69
|
+
- on a normal OpenClaw install, this usually means `~/.openclaw/extensions/forge-openclaw-plugin/forge.sqlite`
|
|
70
|
+
- on a linked repo-local install, this usually means `<repo>/openclaw-plugin/forge.sqlite`
|
|
68
71
|
- if the user wants the data somewhere else for persistence, backup, or manual control, tell them to set `plugins.entries["forge-openclaw-plugin"].config.dataRoot` and restart the OpenClaw gateway
|
|
69
72
|
- if the user asks where the data is stored or how to move it, explain the current default plainly and show the exact config field
|
|
70
73
|
|
|
@@ -76,6 +79,7 @@ Psyche interview rule:
|
|
|
76
79
|
- Start from a recent concrete example before naming an abstract pattern, belief, or mode.
|
|
77
80
|
- Sound professionally warm and therapist-like: grounded, accurate, reflective, and intentional, not clinical, vague, or lecture-like.
|
|
78
81
|
- After the first real answer, choose one follow-up lane at a time: situation, sequence, meaning, protection, cost, longing/value, or tentative name.
|
|
82
|
+
- For Psyche updates, start with what feels newly true, newly visible, or newly inaccurate, then ask what should stay true before changing the formulation.
|
|
79
83
|
- If the user says they want help understanding a Psyche issue before saving it, ask one orienting question first instead of jumping straight into a full interpretation, diagnosis-like label, save suggestion, replacement belief, or suggested title.
|
|
80
84
|
- In that first exploratory turn, keep the reflection to one or two short sentences, avoid numbered lists or schema dumps, and wait for the user's answer before offering a fuller formulation.
|
|
81
85
|
- In that first exploratory turn, stay in plain prose, end with one question, and do not mention Forge fields or save formatting yet unless the user interrupts to save immediately.
|
|
@@ -279,12 +283,12 @@ Use the batch entity tools for stored records:
|
|
|
279
283
|
`forge_search_entities`, `forge_create_entities`, `forge_update_entities`, `forge_delete_entities`, `forge_restore_entities`
|
|
280
284
|
|
|
281
285
|
These tools operate on:
|
|
282
|
-
`goal`, `project`, `task`, `habit`, `note`, `calendar_event`, `work_block_template`, `task_timebox`, `psyche_value`, `behavior_pattern`, `behavior`, `belief_entry`, `mode_profile`, `mode_guide_session`, `trigger_report`, `event_type`, `emotion_definition`
|
|
286
|
+
`goal`, `project`, `strategy`, `task`, `habit`, `tag`, `note`, `insight`, `calendar_event`, `work_block_template`, `task_timebox`, `psyche_value`, `behavior_pattern`, `behavior`, `belief_entry`, `mode_profile`, `mode_guide_session`, `trigger_report`, `event_type`, `emotion_definition`, `preference_catalog`, `preference_catalog_item`, `preference_context`, `preference_item`, `questionnaire_instrument`, `sleep_session`, `workout_session`
|
|
283
287
|
|
|
284
288
|
Use the wiki tools for file-first memory work:
|
|
285
289
|
`forge_get_wiki_settings`, `forge_list_wiki_pages`, `forge_get_wiki_page`, `forge_search_wiki`, `forge_upsert_wiki_page`, `forge_get_wiki_health`, `forge_sync_wiki_vault`, `forge_reindex_wiki_embeddings`, `forge_ingest_wiki_source`
|
|
286
290
|
|
|
287
|
-
|
|
291
|
+
Use the health tools for review and reflective enrichment, not as the default CRUD architecture:
|
|
288
292
|
`forge_get_sleep_overview`, `forge_get_sports_overview`, `forge_update_sleep_session`, `forge_update_workout_session`
|
|
289
293
|
|
|
290
294
|
Use live work tools for `task_run`:
|
|
@@ -340,7 +344,7 @@ For project deletion and recovery, prefer the generic delete and restore tools:
|
|
|
340
344
|
|
|
341
345
|
For restore operations, each item must include `entityType` and `id`.
|
|
342
346
|
|
|
343
|
-
Batch tools do not create or control `task_run
|
|
347
|
+
Batch tools do not create or control `task_run`.
|
|
344
348
|
|
|
345
349
|
Use the exact route-facing field names. Do not invent friendlier aliases. If a field name is unclear, use `forge_get_agent_onboarding` as the schema source of truth.
|
|
346
350
|
|
|
@@ -373,10 +377,21 @@ Use the health tools when the request is about sleep or sports review:
|
|
|
373
377
|
|
|
374
378
|
- `forge_get_sleep_overview` to inspect recent nights, averages, regularity, stage breakdown, and linked reflective context
|
|
375
379
|
- `forge_get_sports_overview` to inspect training volume, workout types, effort trends, habit-generated sessions, and linked context
|
|
376
|
-
- `forge_update_sleep_session` to add sleep-quality notes, tags, or links back to Forge entities
|
|
377
|
-
- `forge_update_workout_session` to add subjective effort, mood, meaning, tags, or links on one workout
|
|
380
|
+
- `forge_update_sleep_session` to add sleep-quality notes, tags, or links back to Forge entities after review
|
|
381
|
+
- `forge_update_workout_session` to add subjective effort, mood, meaning, tags, or links on one workout after review
|
|
378
382
|
- remember that the UI route is `/sports` while the backend overview route is `/api/v1/health/fitness`
|
|
379
383
|
|
|
384
|
+
Use these exact health batch payload shapes when the user is creating or editing the stored records themselves:
|
|
385
|
+
|
|
386
|
+
- create a manual sleep session:
|
|
387
|
+
`{"operations":[{"entityType":"sleep_session","data":{"startedAt":"2026-04-10T22:45:00.000Z","endedAt":"2026-04-11T06:45:00.000Z","qualitySummary":"Slept cleanly after a light evening.","links":[{"entityType":"habit","entityId":"habit_sleep_hygiene","relationshipType":"supports"}]}}]}`
|
|
388
|
+
- update a sleep session through batch CRUD:
|
|
389
|
+
`{"operations":[{"entityType":"sleep_session","id":"sleep_123","patch":{"notes":"Woke once around 03:00 but settled quickly.","tags":["travel","recovered"]}}]}`
|
|
390
|
+
- create a manual workout session:
|
|
391
|
+
`{"operations":[{"entityType":"workout_session","data":{"workoutType":"walk","startedAt":"2026-04-11T10:00:00.000Z","endedAt":"2026-04-11T10:45:00.000Z","subjectiveEffort":6,"meaningText":"Reset after a long planning block.","links":[{"entityType":"task","entityId":"task_123","relationshipType":"supports"}]}}]}`
|
|
392
|
+
- update a workout session through batch CRUD:
|
|
393
|
+
`{"operations":[{"entityType":"workout_session","id":"workout_123","patch":{"moodAfter":"clear","tags":["zone2"]}}]}`
|
|
394
|
+
|
|
380
395
|
Work-block payload guidance:
|
|
381
396
|
|
|
382
397
|
- `kind` must be one of `main_activity`, `secondary_activity`, `third_activity`, `rest`, `holiday`, or `custom`
|
|
@@ -473,7 +488,8 @@ Additional first-class surfaces:
|
|
|
473
488
|
|
|
474
489
|
- Use the high-level batch routes for basic Preferences CRUD. `preference_catalog`, `preference_catalog_item`, `preference_context`, and `preference_item` all go through `forge_create_entities`, `forge_update_entities`, and `forge_delete_entities`.
|
|
475
490
|
- Use the high-level batch routes for basic questionnaire CRUD too. `questionnaire_instrument` goes through `forge_create_entities`, `forge_update_entities`, and `forge_delete_entities`.
|
|
491
|
+
- Use the high-level batch routes for ordinary health-session CRUD too. `sleep_session` and `workout_session` go through `forge_search_entities`, `forge_create_entities`, `forge_update_entities`, and `forge_delete_entities` by default. Keep the dedicated health tools for review surfaces and reflective enrichment on one record.
|
|
476
492
|
- Keep the dedicated Preferences tools only for real preference actions and read models: `forge_get_preferences_workspace`, `forge_start_preferences_game`, `forge_merge_preferences_contexts`, `forge_enqueue_preferences_item_from_entity`, `forge_submit_preferences_judgment`, `forge_submit_preferences_signal`, and `forge_update_preferences_score`.
|
|
477
493
|
- Keep the dedicated questionnaire tools only for real flow actions and read models: `forge_list_questionnaires`, `forge_get_questionnaire`, `forge_clone_questionnaire`, `forge_ensure_questionnaire_draft`, `forge_publish_questionnaire_draft`, `forge_start_questionnaire_run`, `forge_get_questionnaire_run`, `forge_update_questionnaire_run`, and `forge_complete_questionnaire_run`.
|
|
478
494
|
- Self-observation is note-backed. Read the calendar through `forge_get_self_observation_calendar`, but create or update the stored observation as a `note` tagged `Self-observation` with `frontmatter.observedAt` and links to the relevant `behavior_pattern`, `trigger_report`, or other Forge records.
|
|
479
|
-
- `sleep_session` and `workout_session` are first-class health records.
|
|
495
|
+
- `sleep_session` and `workout_session` are first-class health records. Treat them like ordinary stored entities for CRUD, and use the dedicated health tools for read models or post-review enrichment rather than pretending they live on a special mutation island.
|