forge-openclaw-plugin 0.2.25 → 0.2.26

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 (189) hide show
  1. package/dist/assets/{board-VmF4FAfr.js → board-ta0rUHOf.js} +3 -3
  2. package/dist/assets/{board-VmF4FAfr.js.map → board-ta0rUHOf.js.map} +1 -1
  3. package/dist/assets/index-Ro0ZF_az.css +1 -0
  4. package/dist/assets/index-ytlpSj23.js +79 -0
  5. package/dist/assets/index-ytlpSj23.js.map +1 -0
  6. package/dist/assets/{motion-DvkU14p-.js → motion-fBKPB6yw.js} +2 -2
  7. package/dist/assets/{motion-DvkU14p-.js.map → motion-fBKPB6yw.js.map} +1 -1
  8. package/dist/assets/{table-DgiPof9E.js → table-C-IGTQni.js} +2 -2
  9. package/dist/assets/{table-DgiPof9E.js.map → table-C-IGTQni.js.map} +1 -1
  10. package/dist/assets/{ui-nYfoC0Gq.js → ui-DInOpaYF.js} +2 -2
  11. package/dist/assets/{ui-nYfoC0Gq.js.map → ui-DInOpaYF.js.map} +1 -1
  12. package/dist/assets/vendor-lE3tZJcC.js +876 -0
  13. package/dist/assets/vendor-lE3tZJcC.js.map +1 -0
  14. package/dist/index.html +7 -8
  15. package/dist/openclaw/local-runtime.d.ts +3 -1
  16. package/dist/openclaw/local-runtime.js +51 -15
  17. package/dist/openclaw/plugin-entry-shared.js +24 -2
  18. package/dist/openclaw/plugin-sdk-types.d.ts +17 -0
  19. package/dist/openclaw/tools.js +0 -3
  20. package/dist/server/server/migrations/001_core.sql +411 -0
  21. package/dist/server/server/migrations/002_psyche.sql +392 -0
  22. package/dist/server/server/migrations/003_habits.sql +30 -0
  23. package/dist/server/server/migrations/004_habit_links.sql +8 -0
  24. package/dist/server/server/migrations/005_habit_psyche_links.sql +24 -0
  25. package/dist/server/server/migrations/006_work_adjustments.sql +14 -0
  26. package/dist/server/server/migrations/007_weekly_review_closures.sql +17 -0
  27. package/dist/server/server/migrations/008_calendar_execution.sql +147 -0
  28. package/dist/server/server/migrations/009_true_calendar_events.sql +195 -0
  29. package/dist/server/server/migrations/010_calendar_selection_state.sql +6 -0
  30. package/dist/server/server/migrations/011_calendar_timezone_backfill.sql +11 -0
  31. package/dist/server/server/migrations/012_work_block_ranges.sql +7 -0
  32. package/dist/server/server/migrations/013_microsoft_local_auth_settings.sql +8 -0
  33. package/dist/server/server/migrations/014_note_tags_and_ephemeral.sql +8 -0
  34. package/dist/server/server/migrations/015_multi_user_and_strategies.sql +244 -0
  35. package/dist/server/server/migrations/016_health_companion.sql +158 -0
  36. package/dist/server/server/migrations/016_strategy_contracts_and_user_graph.sql +22 -0
  37. package/dist/server/server/migrations/017_preferences.sql +131 -0
  38. package/dist/server/server/migrations/018_preference_catalogs.sql +31 -0
  39. package/dist/server/server/migrations/019_wiki_memory.sql +255 -0
  40. package/dist/server/server/migrations/020_wiki_page_hierarchy.sql +11 -0
  41. package/dist/server/server/migrations/021_hide_evidence_from_wiki_index.sql +3 -0
  42. package/dist/server/server/migrations/022_wiki_ingest_background.sql +85 -0
  43. package/dist/server/server/migrations/023_diagnostic_logs.sql +28 -0
  44. package/dist/server/server/migrations/024_questionnaires.sql +96 -0
  45. package/dist/server/server/migrations/025_ai_model_connections.sql +26 -0
  46. package/dist/server/server/migrations/026_custom_theme_settings.sql +2 -0
  47. package/dist/server/server/migrations/027_ai_processors.sql +31 -0
  48. package/dist/server/server/migrations/028_movement_domain.sql +136 -0
  49. package/dist/server/server/migrations/029_watch_micro_capture.sql +23 -0
  50. package/dist/server/server/migrations/030_surface_layouts.sql +5 -0
  51. package/dist/server/server/migrations/031_ai_processor_runtime_upgrades.sql +10 -0
  52. package/dist/server/server/migrations/032_ai_connectors.sql +44 -0
  53. package/dist/server/server/migrations/033_movement_trip_point_sync.sql +36 -0
  54. package/dist/server/server/migrations/034_movement_segment_sync.sql +49 -0
  55. package/dist/server/server/migrations/035_google_local_auth_settings.sql +2 -0
  56. package/dist/server/server/migrations/036_google_local_auth_client_secret.sql +2 -0
  57. package/dist/server/{app.js → server/src/app.js} +242 -111
  58. package/dist/server/server/src/connectors/box-registry.js +188 -0
  59. package/dist/server/{db.js → server/src/db.js} +4 -0
  60. package/dist/server/server/src/debug.js +19 -0
  61. package/dist/server/{openapi.js → server/src/openapi.js} +2 -2
  62. package/dist/server/{repositories → server/src/repositories}/ai-connectors.js +286 -23
  63. package/dist/server/{repositories → server/src/repositories}/calendar.js +1 -1
  64. package/dist/server/{repositories → server/src/repositories}/settings.js +51 -3
  65. package/dist/server/{services → server/src/services}/calendar-runtime.js +775 -58
  66. package/dist/server/server/src/services/google-calendar-oauth-config.js +176 -0
  67. package/dist/server/{types.js → server/src/types.js} +137 -19
  68. package/dist/server/{web.js → server/src/web.js} +21 -2
  69. package/dist/server/src/components/customization/utility-widgets.js +330 -0
  70. package/dist/server/src/components/workbench-boxes/health/health-boxes.js +92 -0
  71. package/dist/server/src/components/workbench-boxes/kanban/kanban-boxes.js +128 -0
  72. package/dist/server/src/components/workbench-boxes/movement/movement-boxes.js +37 -0
  73. package/dist/server/src/components/workbench-boxes/notes/notes-boxes.js +114 -0
  74. package/dist/server/src/components/workbench-boxes/projects/projects-boxes.js +57 -0
  75. package/dist/server/src/components/workbench-boxes/shared/define-workbench-box.js +4 -0
  76. package/dist/server/src/components/workbench-boxes/shared/generic-node-view.js +13 -0
  77. package/dist/server/src/components/workbench-boxes/today/today-boxes.js +63 -0
  78. package/dist/server/src/lib/api-error.js +37 -0
  79. package/dist/server/src/lib/api.js +1859 -0
  80. package/dist/server/src/lib/calendar-name-deduper.js +144 -0
  81. package/dist/server/src/lib/diagnostics.js +67 -0
  82. package/dist/server/src/lib/psyche-types.js +1 -0
  83. package/dist/server/src/lib/questionnaire-types.js +1 -0
  84. package/dist/server/src/lib/runtime-paths.js +24 -0
  85. package/dist/server/src/lib/schemas.js +234 -0
  86. package/dist/server/src/lib/snapshot-normalizer.js +374 -0
  87. package/dist/server/src/lib/theme-system.js +319 -0
  88. package/dist/server/src/lib/types.js +1 -0
  89. package/dist/server/src/lib/utils.js +22 -0
  90. package/dist/server/src/lib/workbench/boxes.js +16 -0
  91. package/dist/server/src/lib/workbench/nodes.js +15 -0
  92. package/dist/server/src/lib/workbench/registry.js +73 -0
  93. package/dist/server/src/lib/workbench/runtime.js +181 -0
  94. package/openclaw.plugin.json +1 -1
  95. package/package.json +1 -1
  96. package/server/index.js +68 -0
  97. package/server/migrations/035_google_local_auth_settings.sql +2 -0
  98. package/server/migrations/036_google_local_auth_client_secret.sql +2 -0
  99. package/skills/forge-openclaw/SKILL.md +3 -0
  100. package/skills/forge-openclaw/entity_conversation_playbooks.md +213 -24
  101. package/skills/forge-openclaw/psyche_entity_playbooks.md +82 -3
  102. package/dist/assets/index-CFCKDIMH.js +0 -67
  103. package/dist/assets/index-CFCKDIMH.js.map +0 -1
  104. package/dist/assets/index-ZPY6U1TU.css +0 -1
  105. package/dist/assets/vendor-D9PTEPSB.js +0 -824
  106. package/dist/assets/vendor-D9PTEPSB.js.map +0 -1
  107. package/dist/assets/viz-Cqb6s--o.js +0 -34
  108. package/dist/assets/viz-Cqb6s--o.js.map +0 -1
  109. package/dist/server/connectors/box-registry.js +0 -257
  110. /package/dist/server/{demo-data.js → server/src/demo-data.js} +0 -0
  111. /package/dist/server/{discovery-advertiser.js → server/src/discovery-advertiser.js} +0 -0
  112. /package/dist/server/{e2e-server.js → server/src/e2e-server.js} +0 -0
  113. /package/dist/server/{errors.js → server/src/errors.js} +0 -0
  114. /package/dist/server/{health.js → server/src/health.js} +0 -0
  115. /package/dist/server/{index.js → server/src/index.js} +0 -0
  116. /package/dist/server/{managers → server/src/managers}/base.js +0 -0
  117. /package/dist/server/{managers → server/src/managers}/contracts.js +0 -0
  118. /package/dist/server/{managers → server/src/managers}/platform/api-gateway-manager.js +0 -0
  119. /package/dist/server/{managers → server/src/managers}/platform/audit-manager.js +0 -0
  120. /package/dist/server/{managers → server/src/managers}/platform/authentication-manager.js +0 -0
  121. /package/dist/server/{managers → server/src/managers}/platform/authorization-manager.js +0 -0
  122. /package/dist/server/{managers → server/src/managers}/platform/background-job-manager.js +0 -0
  123. /package/dist/server/{managers → server/src/managers}/platform/configuration-manager.js +0 -0
  124. /package/dist/server/{managers → server/src/managers}/platform/database-manager.js +0 -0
  125. /package/dist/server/{managers → server/src/managers}/platform/event-bus-manager.js +0 -0
  126. /package/dist/server/{managers → server/src/managers}/platform/external-service-manager.js +0 -0
  127. /package/dist/server/{managers → server/src/managers}/platform/health-manager.js +0 -0
  128. /package/dist/server/{managers → server/src/managers}/platform/llm-manager.js +0 -0
  129. /package/dist/server/{managers → server/src/managers}/platform/migration-manager.js +0 -0
  130. /package/dist/server/{managers → server/src/managers}/platform/openai-responses-provider.js +0 -0
  131. /package/dist/server/{managers → server/src/managers}/platform/search-index-manager.js +0 -0
  132. /package/dist/server/{managers → server/src/managers}/platform/secrets-manager.js +0 -0
  133. /package/dist/server/{managers → server/src/managers}/platform/session-manager.js +0 -0
  134. /package/dist/server/{managers → server/src/managers}/platform/storage-manager.js +0 -0
  135. /package/dist/server/{managers → server/src/managers}/platform/token-manager.js +0 -0
  136. /package/dist/server/{managers → server/src/managers}/platform/transaction-manager.js +0 -0
  137. /package/dist/server/{managers → server/src/managers}/platform/trusted-network.js +0 -0
  138. /package/dist/server/{managers → server/src/managers}/runtime.js +0 -0
  139. /package/dist/server/{managers → server/src/managers}/type-guards.js +0 -0
  140. /package/dist/server/{movement.js → server/src/movement.js} +0 -0
  141. /package/dist/server/{preferences-seeds.js → server/src/preferences-seeds.js} +0 -0
  142. /package/dist/server/{preferences-types.js → server/src/preferences-types.js} +0 -0
  143. /package/dist/server/{psyche-types.js → server/src/psyche-types.js} +0 -0
  144. /package/dist/server/{questionnaire-flow.js → server/src/questionnaire-flow.js} +0 -0
  145. /package/dist/server/{questionnaire-seeds.js → server/src/questionnaire-seeds.js} +0 -0
  146. /package/dist/server/{questionnaire-types.js → server/src/questionnaire-types.js} +0 -0
  147. /package/dist/server/{repositories → server/src/repositories}/activity-events.js +0 -0
  148. /package/dist/server/{repositories → server/src/repositories}/ai-processors.js +0 -0
  149. /package/dist/server/{repositories → server/src/repositories}/collaboration.js +0 -0
  150. /package/dist/server/{repositories → server/src/repositories}/deleted-entities.js +0 -0
  151. /package/dist/server/{repositories → server/src/repositories}/diagnostic-logs.js +0 -0
  152. /package/dist/server/{repositories → server/src/repositories}/domains.js +0 -0
  153. /package/dist/server/{repositories → server/src/repositories}/entity-ownership.js +0 -0
  154. /package/dist/server/{repositories → server/src/repositories}/event-log.js +0 -0
  155. /package/dist/server/{repositories → server/src/repositories}/goals.js +0 -0
  156. /package/dist/server/{repositories → server/src/repositories}/habits.js +0 -0
  157. /package/dist/server/{repositories → server/src/repositories}/model-settings.js +0 -0
  158. /package/dist/server/{repositories → server/src/repositories}/notes.js +0 -0
  159. /package/dist/server/{repositories → server/src/repositories}/preferences.js +0 -0
  160. /package/dist/server/{repositories → server/src/repositories}/projects.js +0 -0
  161. /package/dist/server/{repositories → server/src/repositories}/psyche.js +0 -0
  162. /package/dist/server/{repositories → server/src/repositories}/questionnaires.js +0 -0
  163. /package/dist/server/{repositories → server/src/repositories}/rewards.js +0 -0
  164. /package/dist/server/{repositories → server/src/repositories}/strategies.js +0 -0
  165. /package/dist/server/{repositories → server/src/repositories}/surface-layouts.js +0 -0
  166. /package/dist/server/{repositories → server/src/repositories}/tags.js +0 -0
  167. /package/dist/server/{repositories → server/src/repositories}/task-runs.js +0 -0
  168. /package/dist/server/{repositories → server/src/repositories}/tasks.js +0 -0
  169. /package/dist/server/{repositories → server/src/repositories}/users.js +0 -0
  170. /package/dist/server/{repositories → server/src/repositories}/weekly-reviews.js +0 -0
  171. /package/dist/server/{repositories → server/src/repositories}/wiki-memory.js +0 -0
  172. /package/dist/server/{repositories → server/src/repositories}/work-adjustments.js +0 -0
  173. /package/dist/server/{seed-demo.js → server/src/seed-demo.js} +0 -0
  174. /package/dist/server/{services → server/src/services}/context.js +0 -0
  175. /package/dist/server/{services → server/src/services}/dashboard.js +0 -0
  176. /package/dist/server/{services → server/src/services}/entity-crud.js +0 -0
  177. /package/dist/server/{services → server/src/services}/gamification.js +0 -0
  178. /package/dist/server/{services → server/src/services}/insights.js +0 -0
  179. /package/dist/server/{services → server/src/services}/openai-codex-oauth.js +0 -0
  180. /package/dist/server/{services → server/src/services}/projects.js +0 -0
  181. /package/dist/server/{services → server/src/services}/psyche-observation-calendar.js +0 -0
  182. /package/dist/server/{services → server/src/services}/psyche.js +0 -0
  183. /package/dist/server/{services → server/src/services}/relations.js +0 -0
  184. /package/dist/server/{services → server/src/services}/reviews.js +0 -0
  185. /package/dist/server/{services → server/src/services}/run-recovery.js +0 -0
  186. /package/dist/server/{services → server/src/services}/tagging.js +0 -0
  187. /package/dist/server/{services → server/src/services}/task-run-watchdog.js +0 -0
  188. /package/dist/server/{services → server/src/services}/work-time.js +0 -0
  189. /package/dist/server/{watch-mobile.js → server/src/watch-mobile.js} +0 -0
@@ -0,0 +1,392 @@
1
+ CREATE TABLE IF NOT EXISTS domains (
2
+ id TEXT PRIMARY KEY,
3
+ slug TEXT NOT NULL UNIQUE,
4
+ title TEXT NOT NULL,
5
+ description TEXT NOT NULL DEFAULT '',
6
+ theme_color TEXT NOT NULL,
7
+ sensitive INTEGER NOT NULL DEFAULT 0,
8
+ created_at TEXT NOT NULL,
9
+ updated_at TEXT NOT NULL
10
+ );
11
+
12
+ INSERT OR IGNORE INTO domains (id, slug, title, description, theme_color, sensitive, created_at, updated_at) VALUES
13
+ ('domain_health', 'health', 'Health', 'Physical vitality, recovery, and body stewardship.', '#ef4444', 0, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
14
+ ('domain_mastery', 'mastery', 'Mastery', 'Skill building, deliberate practice, and craft.', '#f5efe6', 0, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
15
+ ('domain_love', 'love', 'Love', 'Relationships, intimacy, attachment, and shared life.', '#7dd3fc', 0, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
16
+ ('domain_wealth', 'wealth', 'Wealth', 'Financial stability, leverage, and freedom.', '#f59e0b', 0, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
17
+ ('domain_creativity', 'creativity', 'Creativity', 'Original work, authorship, and expression.', '#c0c1ff', 0, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
18
+ ('domain_contribution', 'contribution', 'Contribution', 'Service, meaning, and impact on others.', '#4edea3', 0, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
19
+ ('domain_spirituality', 'spirituality', 'Spirituality', 'Inner life, ritual, meaning, and transcendence.', '#8b5cf6', 0, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
20
+ ('domain_adventure', 'adventure', 'Adventure', 'Novelty, courage, movement, and lived expansion.', '#fb7185', 0, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
21
+ ('domain_psyche', 'psyche', 'Psyche', 'Values-led therapeutic reflection, pattern change, and trigger analysis.', '#6ee7b7', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
22
+
23
+ CREATE TABLE IF NOT EXISTS psyche_values (
24
+ id TEXT PRIMARY KEY,
25
+ domain_id TEXT NOT NULL REFERENCES domains(id) ON DELETE CASCADE,
26
+ title TEXT NOT NULL,
27
+ description TEXT NOT NULL DEFAULT '',
28
+ valued_direction TEXT NOT NULL DEFAULT '',
29
+ why_it_matters TEXT NOT NULL DEFAULT '',
30
+ linked_goal_ids_json TEXT NOT NULL DEFAULT '[]',
31
+ linked_project_ids_json TEXT NOT NULL DEFAULT '[]',
32
+ linked_task_ids_json TEXT NOT NULL DEFAULT '[]',
33
+ committed_actions_json TEXT NOT NULL DEFAULT '[]',
34
+ created_at TEXT NOT NULL,
35
+ updated_at TEXT NOT NULL
36
+ );
37
+
38
+ CREATE TABLE IF NOT EXISTS behavior_patterns (
39
+ id TEXT PRIMARY KEY,
40
+ domain_id TEXT NOT NULL REFERENCES domains(id) ON DELETE CASCADE,
41
+ title TEXT NOT NULL,
42
+ description TEXT NOT NULL DEFAULT '',
43
+ target_behavior TEXT NOT NULL DEFAULT '',
44
+ cue_contexts_json TEXT NOT NULL DEFAULT '[]',
45
+ short_term_payoff TEXT NOT NULL DEFAULT '',
46
+ long_term_cost TEXT NOT NULL DEFAULT '',
47
+ preferred_response TEXT NOT NULL DEFAULT '',
48
+ linked_value_ids_json TEXT NOT NULL DEFAULT '[]',
49
+ linked_schema_labels_json TEXT NOT NULL DEFAULT '[]',
50
+ linked_mode_labels_json TEXT NOT NULL DEFAULT '[]',
51
+ created_at TEXT NOT NULL,
52
+ updated_at TEXT NOT NULL
53
+ );
54
+
55
+ CREATE TABLE IF NOT EXISTS trigger_reports (
56
+ id TEXT PRIMARY KEY,
57
+ domain_id TEXT NOT NULL REFERENCES domains(id) ON DELETE CASCADE,
58
+ title TEXT NOT NULL,
59
+ status TEXT NOT NULL DEFAULT 'draft',
60
+ event_situation TEXT NOT NULL DEFAULT '',
61
+ occurred_at TEXT,
62
+ emotions_json TEXT NOT NULL DEFAULT '[]',
63
+ thoughts_json TEXT NOT NULL DEFAULT '[]',
64
+ behaviors_json TEXT NOT NULL DEFAULT '[]',
65
+ consequences_json TEXT NOT NULL DEFAULT '{}',
66
+ linked_pattern_ids_json TEXT NOT NULL DEFAULT '[]',
67
+ linked_value_ids_json TEXT NOT NULL DEFAULT '[]',
68
+ linked_goal_ids_json TEXT NOT NULL DEFAULT '[]',
69
+ linked_project_ids_json TEXT NOT NULL DEFAULT '[]',
70
+ linked_task_ids_json TEXT NOT NULL DEFAULT '[]',
71
+ mode_overlays_json TEXT NOT NULL DEFAULT '[]',
72
+ schema_links_json TEXT NOT NULL DEFAULT '[]',
73
+ next_moves_json TEXT NOT NULL DEFAULT '[]',
74
+ event_type_id TEXT REFERENCES event_types(id) ON DELETE SET NULL,
75
+ custom_event_type TEXT NOT NULL DEFAULT '',
76
+ linked_behavior_ids_json TEXT NOT NULL DEFAULT '[]',
77
+ linked_belief_ids_json TEXT NOT NULL DEFAULT '[]',
78
+ linked_mode_ids_json TEXT NOT NULL DEFAULT '[]',
79
+ mode_timeline_json TEXT NOT NULL DEFAULT '[]',
80
+ created_at TEXT NOT NULL,
81
+ updated_at TEXT NOT NULL
82
+ );
83
+
84
+ CREATE TABLE IF NOT EXISTS schema_catalog (
85
+ id TEXT PRIMARY KEY,
86
+ slug TEXT NOT NULL UNIQUE,
87
+ title TEXT NOT NULL,
88
+ family TEXT NOT NULL,
89
+ description TEXT NOT NULL DEFAULT '',
90
+ created_at TEXT NOT NULL,
91
+ updated_at TEXT NOT NULL
92
+ );
93
+
94
+ INSERT OR IGNORE INTO schema_catalog (id, slug, title, family, description, created_at, updated_at) VALUES
95
+ ('schema_abandonment', 'abandonment', 'Abandonment', 'disconnection_rejection', 'Expectation that close connection will not remain stable or available.', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
96
+ ('schema_mistrust', 'mistrust_abuse', 'Mistrust / Abuse', 'disconnection_rejection', 'Expectation that others will hurt, humiliate, manipulate, or exploit.', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
97
+ ('schema_emotional_deprivation', 'emotional_deprivation', 'Emotional Deprivation', 'disconnection_rejection', 'Expectation that emotional support, empathy, or protection will not be met.', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
98
+ ('schema_defectiveness', 'defectiveness_shame', 'Defectiveness / Shame', 'disconnection_rejection', 'Sense of being bad, unlovable, inferior, or shameful at the core.', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
99
+ ('schema_social_isolation', 'social_isolation', 'Social Isolation', 'disconnection_rejection', 'Sense of being fundamentally different, outside, or not belonging.', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
100
+ ('schema_failure', 'failure', 'Failure', 'impaired_autonomy', 'Expectation of inevitable failure or inadequacy relative to peers.', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
101
+ ('schema_dependence', 'dependence_incompetence', 'Dependence / Incompetence', 'impaired_autonomy', 'Belief that one cannot handle responsibilities competently without help.', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
102
+ ('schema_vulnerability', 'vulnerability_to_harm', 'Vulnerability to Harm', 'impaired_autonomy', 'Exaggerated fear that catastrophe or collapse is always near.', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
103
+ ('schema_subjugation', 'subjugation', 'Subjugation', 'other_directedness', 'Chronic surrender of needs or preferences to avoid conflict, guilt, or retaliation.', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
104
+ ('schema_self_sacrifice', 'self_sacrifice', 'Self-Sacrifice', 'other_directedness', 'Excessive focus on meeting others'' needs at the cost of one''s own.', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
105
+ ('schema_unrelenting', 'unrelenting_standards', 'Unrelenting Standards', 'overvigilance_inhibition', 'Pressure to meet very high standards and avoid mistakes at all costs.', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
106
+ ('schema_punitiveness', 'punitiveness', 'Punitiveness', 'overvigilance_inhibition', 'Belief that mistakes deserve harsh punishment rather than repair.', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
107
+
108
+ CREATE TABLE IF NOT EXISTS event_types (
109
+ id TEXT PRIMARY KEY,
110
+ domain_id TEXT NOT NULL REFERENCES domains(id) ON DELETE CASCADE,
111
+ label TEXT NOT NULL,
112
+ description TEXT NOT NULL DEFAULT '',
113
+ system INTEGER NOT NULL DEFAULT 0,
114
+ created_at TEXT NOT NULL,
115
+ updated_at TEXT NOT NULL
116
+ );
117
+
118
+ INSERT OR IGNORE INTO event_types (id, domain_id, label, description, system, created_at, updated_at) VALUES
119
+ ('event_feedback', 'domain_psyche', 'Feedback', 'Performance feedback, correction, or evaluation from someone important.', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
120
+ ('event_silence', 'domain_psyche', 'Silence after outreach', 'A meaningful delay or silence after vulnerability, initiative, or contact.', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
121
+ ('event_conflict', 'domain_psyche', 'Conflict', 'Tension, disagreement, rupture, or perceived relational threat.', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
122
+ ('event_performance', 'domain_psyche', 'Performance pressure', 'Moments where competence, output, or comparison felt sharply relevant.', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
123
+ ('event_change', 'domain_psyche', 'Unexpected change', 'Plans shifted or certainty collapsed faster than the system could adapt.', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
124
+ ('event_intimacy', 'domain_psyche', 'Intimacy', 'Closeness, exposure, or emotional contact that stirred vulnerability.', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
125
+
126
+ CREATE TABLE IF NOT EXISTS emotion_definitions (
127
+ id TEXT PRIMARY KEY,
128
+ domain_id TEXT NOT NULL REFERENCES domains(id) ON DELETE CASCADE,
129
+ label TEXT NOT NULL,
130
+ description TEXT NOT NULL DEFAULT '',
131
+ category TEXT NOT NULL DEFAULT '',
132
+ system INTEGER NOT NULL DEFAULT 0,
133
+ created_at TEXT NOT NULL,
134
+ updated_at TEXT NOT NULL
135
+ );
136
+
137
+ INSERT OR IGNORE INTO emotion_definitions (id, domain_id, label, description, category, system, created_at, updated_at) VALUES
138
+ ('emotion_fear', 'domain_psyche', 'Fear', 'Alarm, danger, dread, or anticipatory threat.', 'threat', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
139
+ ('emotion_sadness', 'domain_psyche', 'Sadness', 'Loss, grief, emptiness, or heaviness.', 'loss', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
140
+ ('emotion_shame', 'domain_psyche', 'Shame', 'Exposure, defectiveness, humiliation, or collapse of worth.', 'self_evaluation', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
141
+ ('emotion_guilt', 'domain_psyche', 'Guilt', 'Sense of having failed, harmed, or violated a value.', 'self_evaluation', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
142
+ ('emotion_anger', 'domain_psyche', 'Anger', 'Boundary activation, protest, frustration, or heat.', 'boundary', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
143
+ ('emotion_loneliness', 'domain_psyche', 'Loneliness', 'Disconnection, distance, or lack of emotional contact.', 'attachment', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
144
+ ('emotion_relief', 'domain_psyche', 'Relief', 'Release after pressure, fear, or ambiguity.', 'release', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
145
+ ('emotion_joy', 'domain_psyche', 'Joy', 'Warmth, pleasure, delight, or expansion.', 'positive', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
146
+ ('emotion_frustration', 'domain_psyche', 'Frustration', 'Blocked movement, thwarted desire, or pressure build-up.', 'boundary', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
147
+ ('emotion_disgust', 'domain_psyche', 'Disgust', 'Repulsion, contamination, or recoil.', 'threat', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
148
+
149
+ CREATE TABLE IF NOT EXISTS psyche_behaviors (
150
+ id TEXT PRIMARY KEY,
151
+ domain_id TEXT NOT NULL REFERENCES domains(id) ON DELETE CASCADE,
152
+ kind TEXT NOT NULL,
153
+ title TEXT NOT NULL,
154
+ description TEXT NOT NULL DEFAULT '',
155
+ common_cues_json TEXT NOT NULL DEFAULT '[]',
156
+ urge_story TEXT NOT NULL DEFAULT '',
157
+ short_term_payoff TEXT NOT NULL DEFAULT '',
158
+ long_term_cost TEXT NOT NULL DEFAULT '',
159
+ replacement_move TEXT NOT NULL DEFAULT '',
160
+ repair_plan TEXT NOT NULL DEFAULT '',
161
+ linked_pattern_ids_json TEXT NOT NULL DEFAULT '[]',
162
+ linked_value_ids_json TEXT NOT NULL DEFAULT '[]',
163
+ linked_schema_ids_json TEXT NOT NULL DEFAULT '[]',
164
+ linked_mode_ids_json TEXT NOT NULL DEFAULT '[]',
165
+ created_at TEXT NOT NULL,
166
+ updated_at TEXT NOT NULL
167
+ );
168
+
169
+ CREATE TABLE IF NOT EXISTS belief_entries (
170
+ id TEXT PRIMARY KEY,
171
+ domain_id TEXT NOT NULL REFERENCES domains(id) ON DELETE CASCADE,
172
+ schema_id TEXT REFERENCES schema_catalog(id) ON DELETE SET NULL,
173
+ statement TEXT NOT NULL,
174
+ belief_type TEXT NOT NULL,
175
+ origin_note TEXT NOT NULL DEFAULT '',
176
+ confidence INTEGER NOT NULL DEFAULT 60,
177
+ evidence_for_json TEXT NOT NULL DEFAULT '[]',
178
+ evidence_against_json TEXT NOT NULL DEFAULT '[]',
179
+ flexible_alternative TEXT NOT NULL DEFAULT '',
180
+ linked_value_ids_json TEXT NOT NULL DEFAULT '[]',
181
+ linked_behavior_ids_json TEXT NOT NULL DEFAULT '[]',
182
+ linked_mode_ids_json TEXT NOT NULL DEFAULT '[]',
183
+ linked_report_ids_json TEXT NOT NULL DEFAULT '[]',
184
+ created_at TEXT NOT NULL,
185
+ updated_at TEXT NOT NULL
186
+ );
187
+
188
+ CREATE TABLE IF NOT EXISTS mode_profiles (
189
+ id TEXT PRIMARY KEY,
190
+ domain_id TEXT NOT NULL REFERENCES domains(id) ON DELETE CASCADE,
191
+ family TEXT NOT NULL,
192
+ archetype TEXT NOT NULL DEFAULT '',
193
+ title TEXT NOT NULL,
194
+ persona TEXT NOT NULL DEFAULT '',
195
+ imagery TEXT NOT NULL DEFAULT '',
196
+ symbolic_form TEXT NOT NULL DEFAULT '',
197
+ facial_expression TEXT NOT NULL DEFAULT '',
198
+ fear TEXT NOT NULL DEFAULT '',
199
+ burden TEXT NOT NULL DEFAULT '',
200
+ protective_job TEXT NOT NULL DEFAULT '',
201
+ origin_context TEXT NOT NULL DEFAULT '',
202
+ first_appearance_at TEXT,
203
+ linked_pattern_ids_json TEXT NOT NULL DEFAULT '[]',
204
+ linked_behavior_ids_json TEXT NOT NULL DEFAULT '[]',
205
+ linked_value_ids_json TEXT NOT NULL DEFAULT '[]',
206
+ created_at TEXT NOT NULL,
207
+ updated_at TEXT NOT NULL
208
+ );
209
+
210
+ CREATE TABLE IF NOT EXISTS mode_guide_sessions (
211
+ id TEXT PRIMARY KEY,
212
+ summary TEXT NOT NULL,
213
+ answers_json TEXT NOT NULL DEFAULT '[]',
214
+ results_json TEXT NOT NULL DEFAULT '[]',
215
+ created_at TEXT NOT NULL,
216
+ updated_at TEXT NOT NULL
217
+ );
218
+
219
+ CREATE INDEX IF NOT EXISTS idx_psyche_values_domain ON psyche_values(domain_id, created_at DESC);
220
+ CREATE INDEX IF NOT EXISTS idx_behavior_patterns_domain ON behavior_patterns(domain_id, created_at DESC);
221
+ CREATE INDEX IF NOT EXISTS idx_trigger_reports_domain ON trigger_reports(domain_id, created_at DESC);
222
+ CREATE INDEX IF NOT EXISTS idx_trigger_reports_status ON trigger_reports(status, created_at DESC);
223
+ CREATE INDEX IF NOT EXISTS idx_event_types_domain ON event_types(domain_id, system DESC, label);
224
+ CREATE INDEX IF NOT EXISTS idx_emotion_definitions_domain ON emotion_definitions(domain_id, system DESC, label);
225
+ CREATE INDEX IF NOT EXISTS idx_psyche_behaviors_domain ON psyche_behaviors(domain_id, kind, updated_at DESC);
226
+ CREATE INDEX IF NOT EXISTS idx_belief_entries_domain ON belief_entries(domain_id, updated_at DESC);
227
+ CREATE INDEX IF NOT EXISTS idx_belief_entries_schema ON belief_entries(schema_id, updated_at DESC);
228
+ CREATE INDEX IF NOT EXISTS idx_mode_profiles_domain ON mode_profiles(domain_id, family, updated_at DESC);
229
+
230
+ ALTER TABLE behavior_patterns
231
+ ADD COLUMN linked_mode_ids_json TEXT NOT NULL DEFAULT '[]';
232
+
233
+ ALTER TABLE behavior_patterns
234
+ ADD COLUMN linked_belief_ids_json TEXT NOT NULL DEFAULT '[]';
235
+
236
+ ALTER TABLE schema_catalog
237
+ ADD COLUMN schema_type TEXT NOT NULL DEFAULT 'maladaptive';
238
+
239
+ UPDATE schema_catalog
240
+ SET schema_type = 'maladaptive'
241
+ WHERE schema_type IS NULL OR trim(schema_type) = '';
242
+
243
+ INSERT OR IGNORE INTO schema_catalog (
244
+ id,
245
+ slug,
246
+ title,
247
+ family,
248
+ description,
249
+ schema_type,
250
+ created_at,
251
+ updated_at
252
+ ) VALUES
253
+ (
254
+ 'schema_adaptive_stable_attachment',
255
+ 'stable_attachment',
256
+ 'Stable Attachment',
257
+ 'disconnection_rejection',
258
+ 'The belief that your close relationships are stable, loyal, and enduring.',
259
+ 'adaptive',
260
+ CURRENT_TIMESTAMP,
261
+ CURRENT_TIMESTAMP
262
+ ),
263
+ (
264
+ 'schema_adaptive_emotional_fulfilment',
265
+ 'emotional_fulfilment',
266
+ 'Emotional Fulfilment',
267
+ 'disconnection_rejection',
268
+ 'The belief that someone in your life can meet your needs for care, attachment, and emotional safety.',
269
+ 'adaptive',
270
+ CURRENT_TIMESTAMP,
271
+ CURRENT_TIMESTAMP
272
+ ),
273
+ (
274
+ 'schema_adaptive_social_belonging',
275
+ 'social_belonging',
276
+ 'Social Belonging',
277
+ 'disconnection_rejection',
278
+ 'The belief that you belong, fit in, and are accepted in groups and relationships.',
279
+ 'adaptive',
280
+ CURRENT_TIMESTAMP,
281
+ CURRENT_TIMESTAMP
282
+ ),
283
+ (
284
+ 'schema_adaptive_competence',
285
+ 'competence',
286
+ 'Competence',
287
+ 'impaired_autonomy',
288
+ 'The belief that you can handle daily problems, make decisions, and function capably in ordinary life.',
289
+ 'adaptive',
290
+ CURRENT_TIMESTAMP,
291
+ CURRENT_TIMESTAMP
292
+ ),
293
+ (
294
+ 'schema_adaptive_developed_self',
295
+ 'developed_self',
296
+ 'Developed Self',
297
+ 'impaired_autonomy',
298
+ 'The belief that you can live as your own person with mature boundaries and healthy independence from your parents.',
299
+ 'adaptive',
300
+ CURRENT_TIMESTAMP,
301
+ CURRENT_TIMESTAMP
302
+ ),
303
+ (
304
+ 'schema_adaptive_success',
305
+ 'success',
306
+ 'Success',
307
+ 'impaired_autonomy',
308
+ 'The belief that you are capable, effective, and able to do well in work, study, and achievement settings.',
309
+ 'adaptive',
310
+ CURRENT_TIMESTAMP,
311
+ CURRENT_TIMESTAMP
312
+ ),
313
+ (
314
+ 'schema_adaptive_empathic_consideration',
315
+ 'empathic_consideration',
316
+ 'Empathic Consideration',
317
+ 'other_directedness',
318
+ 'The belief that other people matter too and that you can respect different views without losing yourself.',
319
+ 'adaptive',
320
+ CURRENT_TIMESTAMP,
321
+ CURRENT_TIMESTAMP
322
+ ),
323
+ (
324
+ 'schema_adaptive_healthy_self_discipline',
325
+ 'healthy_self_discipline',
326
+ 'Healthy Self-Discipline',
327
+ 'overvigilance_inhibition',
328
+ 'The ability to stay with routines, persist through difficulty, and trade short-term comfort for long-term aims.',
329
+ 'adaptive',
330
+ CURRENT_TIMESTAMP,
331
+ CURRENT_TIMESTAMP
332
+ ),
333
+ (
334
+ 'schema_adaptive_healthy_self_care',
335
+ 'healthy_self_care',
336
+ 'Healthy Self-Care',
337
+ 'other_directedness',
338
+ 'The belief that your own needs matter too and that making room for rest, care, and boundaries is legitimate.',
339
+ 'adaptive',
340
+ CURRENT_TIMESTAMP,
341
+ CURRENT_TIMESTAMP
342
+ ),
343
+ (
344
+ 'schema_adaptive_self_directedness',
345
+ 'self_directedness',
346
+ 'Self-Directedness',
347
+ 'healthy_selfhood',
348
+ 'The belief that your own view of yourself matters more than performing for approval or admiration.',
349
+ 'adaptive',
350
+ CURRENT_TIMESTAMP,
351
+ CURRENT_TIMESTAMP
352
+ ),
353
+ (
354
+ 'schema_adaptive_optimism',
355
+ 'optimism',
356
+ 'Optimism',
357
+ 'healthy_selfhood',
358
+ 'The belief that good outcomes are possible and that life does not need to be ruled by catastrophe.',
359
+ 'adaptive',
360
+ CURRENT_TIMESTAMP,
361
+ CURRENT_TIMESTAMP
362
+ ),
363
+ (
364
+ 'schema_adaptive_emotional_openness',
365
+ 'emotional_openness',
366
+ 'Emotional Openness',
367
+ 'healthy_selfhood',
368
+ 'The willingness to express feelings, affection, and emotional truth with people you trust.',
369
+ 'adaptive',
370
+ CURRENT_TIMESTAMP,
371
+ CURRENT_TIMESTAMP
372
+ ),
373
+ (
374
+ 'schema_adaptive_realistic_expectations',
375
+ 'realistic_expectations',
376
+ 'Realistic Expectations',
377
+ 'overvigilance_inhibition',
378
+ 'The belief that good enough is acceptable, goals can be realistic, and mistakes do not cancel your worth.',
379
+ 'adaptive',
380
+ CURRENT_TIMESTAMP,
381
+ CURRENT_TIMESTAMP
382
+ ),
383
+ (
384
+ 'schema_adaptive_self_compassion',
385
+ 'self_compassion',
386
+ 'Self-Compassion',
387
+ 'overvigilance_inhibition',
388
+ 'The belief that you deserve kindness, forgiveness, and humane self-talk when you struggle or make mistakes.',
389
+ 'adaptive',
390
+ CURRENT_TIMESTAMP,
391
+ CURRENT_TIMESTAMP
392
+ );
@@ -0,0 +1,30 @@
1
+ CREATE TABLE IF NOT EXISTS habits (
2
+ id TEXT PRIMARY KEY,
3
+ title TEXT NOT NULL,
4
+ description TEXT NOT NULL DEFAULT '',
5
+ status TEXT NOT NULL DEFAULT 'active',
6
+ polarity TEXT NOT NULL DEFAULT 'positive',
7
+ frequency TEXT NOT NULL DEFAULT 'daily',
8
+ target_count INTEGER NOT NULL DEFAULT 1,
9
+ week_days_json TEXT NOT NULL DEFAULT '[]',
10
+ linked_behavior_id TEXT REFERENCES psyche_behaviors(id) ON DELETE SET NULL,
11
+ reward_xp INTEGER NOT NULL DEFAULT 12,
12
+ penalty_xp INTEGER NOT NULL DEFAULT 8,
13
+ created_at TEXT NOT NULL,
14
+ updated_at TEXT NOT NULL
15
+ );
16
+
17
+ CREATE TABLE IF NOT EXISTS habit_check_ins (
18
+ id TEXT PRIMARY KEY,
19
+ habit_id TEXT NOT NULL REFERENCES habits(id) ON DELETE CASCADE,
20
+ date_key TEXT NOT NULL,
21
+ status TEXT NOT NULL,
22
+ note TEXT NOT NULL DEFAULT '',
23
+ delta_xp INTEGER NOT NULL DEFAULT 0,
24
+ created_at TEXT NOT NULL,
25
+ updated_at TEXT NOT NULL,
26
+ UNIQUE (habit_id, date_key)
27
+ );
28
+
29
+ CREATE INDEX IF NOT EXISTS idx_habits_status ON habits(status, updated_at DESC);
30
+ CREATE INDEX IF NOT EXISTS idx_habit_check_ins_habit_date ON habit_check_ins(habit_id, date_key DESC);
@@ -0,0 +1,8 @@
1
+ ALTER TABLE habits
2
+ ADD COLUMN linked_goal_ids_json TEXT NOT NULL DEFAULT '[]';
3
+
4
+ ALTER TABLE habits
5
+ ADD COLUMN linked_project_ids_json TEXT NOT NULL DEFAULT '[]';
6
+
7
+ ALTER TABLE habits
8
+ ADD COLUMN linked_task_ids_json TEXT NOT NULL DEFAULT '[]';
@@ -0,0 +1,24 @@
1
+ ALTER TABLE habits
2
+ ADD COLUMN linked_value_ids_json TEXT NOT NULL DEFAULT '[]';
3
+
4
+ ALTER TABLE habits
5
+ ADD COLUMN linked_pattern_ids_json TEXT NOT NULL DEFAULT '[]';
6
+
7
+ ALTER TABLE habits
8
+ ADD COLUMN linked_behavior_ids_json TEXT NOT NULL DEFAULT '[]';
9
+
10
+ ALTER TABLE habits
11
+ ADD COLUMN linked_belief_ids_json TEXT NOT NULL DEFAULT '[]';
12
+
13
+ ALTER TABLE habits
14
+ ADD COLUMN linked_mode_ids_json TEXT NOT NULL DEFAULT '[]';
15
+
16
+ ALTER TABLE habits
17
+ ADD COLUMN linked_report_ids_json TEXT NOT NULL DEFAULT '[]';
18
+
19
+ UPDATE habits
20
+ SET linked_behavior_ids_json = CASE
21
+ WHEN linked_behavior_id IS NULL OR trim(linked_behavior_id) = '' THEN '[]'
22
+ ELSE json_array(linked_behavior_id)
23
+ END
24
+ WHERE linked_behavior_ids_json = '[]';
@@ -0,0 +1,14 @@
1
+ CREATE TABLE IF NOT EXISTS work_adjustments (
2
+ id TEXT PRIMARY KEY,
3
+ entity_type TEXT NOT NULL,
4
+ entity_id TEXT NOT NULL,
5
+ requested_delta_minutes INTEGER NOT NULL,
6
+ applied_delta_minutes INTEGER NOT NULL,
7
+ note TEXT NOT NULL DEFAULT '',
8
+ actor TEXT,
9
+ source TEXT NOT NULL,
10
+ created_at TEXT NOT NULL
11
+ );
12
+
13
+ CREATE INDEX IF NOT EXISTS idx_work_adjustments_entity
14
+ ON work_adjustments(entity_type, entity_id, created_at DESC);
@@ -0,0 +1,17 @@
1
+ CREATE TABLE IF NOT EXISTS weekly_review_closures (
2
+ id TEXT PRIMARY KEY,
3
+ week_key TEXT NOT NULL UNIQUE,
4
+ week_start_date TEXT NOT NULL,
5
+ week_end_date TEXT NOT NULL,
6
+ window_label TEXT NOT NULL,
7
+ actor TEXT,
8
+ source TEXT NOT NULL,
9
+ reward_id TEXT NOT NULL,
10
+ activity_event_id TEXT NOT NULL,
11
+ created_at TEXT NOT NULL,
12
+ FOREIGN KEY (reward_id) REFERENCES reward_ledger(id) ON DELETE RESTRICT,
13
+ FOREIGN KEY (activity_event_id) REFERENCES activity_events(id) ON DELETE RESTRICT
14
+ );
15
+
16
+ CREATE INDEX IF NOT EXISTS idx_weekly_review_closures_created_at
17
+ ON weekly_review_closures(created_at DESC);
@@ -0,0 +1,147 @@
1
+ ALTER TABLE projects ADD COLUMN scheduling_rules_json TEXT NOT NULL DEFAULT '{}';
2
+ ALTER TABLE tasks ADD COLUMN scheduling_rules_json TEXT;
3
+ ALTER TABLE tasks ADD COLUMN planned_duration_seconds INTEGER;
4
+ ALTER TABLE task_runs ADD COLUMN override_reason TEXT;
5
+
6
+ CREATE TABLE IF NOT EXISTS stored_secrets (
7
+ id TEXT PRIMARY KEY,
8
+ cipher_text TEXT NOT NULL,
9
+ description TEXT NOT NULL DEFAULT '',
10
+ created_at TEXT NOT NULL,
11
+ updated_at TEXT NOT NULL
12
+ );
13
+
14
+ CREATE TABLE IF NOT EXISTS calendar_connections (
15
+ id TEXT PRIMARY KEY,
16
+ provider TEXT NOT NULL,
17
+ label TEXT NOT NULL,
18
+ account_label TEXT NOT NULL DEFAULT '',
19
+ status TEXT NOT NULL DEFAULT 'connected',
20
+ config_json TEXT NOT NULL DEFAULT '{}',
21
+ credentials_secret_id TEXT NOT NULL,
22
+ forge_calendar_id TEXT,
23
+ last_synced_at TEXT,
24
+ last_sync_error TEXT,
25
+ created_at TEXT NOT NULL,
26
+ updated_at TEXT NOT NULL,
27
+ FOREIGN KEY (credentials_secret_id) REFERENCES stored_secrets(id) ON DELETE RESTRICT,
28
+ FOREIGN KEY (forge_calendar_id) REFERENCES calendar_calendars(id) ON DELETE SET NULL
29
+ );
30
+
31
+ CREATE TABLE IF NOT EXISTS calendar_calendars (
32
+ id TEXT PRIMARY KEY,
33
+ connection_id TEXT NOT NULL,
34
+ remote_id TEXT NOT NULL,
35
+ title TEXT NOT NULL,
36
+ description TEXT NOT NULL DEFAULT '',
37
+ color TEXT NOT NULL DEFAULT '#7dd3fc',
38
+ timezone TEXT NOT NULL DEFAULT 'UTC',
39
+ is_primary INTEGER NOT NULL DEFAULT 0,
40
+ can_write INTEGER NOT NULL DEFAULT 1,
41
+ forge_managed INTEGER NOT NULL DEFAULT 0,
42
+ sync_cursor TEXT,
43
+ remote_etag TEXT,
44
+ last_synced_at TEXT,
45
+ created_at TEXT NOT NULL,
46
+ updated_at TEXT NOT NULL,
47
+ UNIQUE(connection_id, remote_id),
48
+ FOREIGN KEY (connection_id) REFERENCES calendar_connections(id) ON DELETE CASCADE
49
+ );
50
+
51
+ CREATE TABLE IF NOT EXISTS calendar_events (
52
+ id TEXT PRIMARY KEY,
53
+ connection_id TEXT NOT NULL,
54
+ calendar_id TEXT NOT NULL,
55
+ remote_id TEXT NOT NULL,
56
+ remote_href TEXT,
57
+ remote_etag TEXT,
58
+ ownership TEXT NOT NULL DEFAULT 'external',
59
+ status TEXT NOT NULL DEFAULT 'confirmed',
60
+ title TEXT NOT NULL,
61
+ description TEXT NOT NULL DEFAULT '',
62
+ location TEXT NOT NULL DEFAULT '',
63
+ start_at TEXT NOT NULL,
64
+ end_at TEXT NOT NULL,
65
+ is_all_day INTEGER NOT NULL DEFAULT 0,
66
+ availability TEXT NOT NULL DEFAULT 'busy',
67
+ event_type TEXT NOT NULL DEFAULT '',
68
+ categories_json TEXT NOT NULL DEFAULT '[]',
69
+ raw_payload_json TEXT NOT NULL DEFAULT '{}',
70
+ remote_updated_at TEXT,
71
+ deleted_at TEXT,
72
+ created_at TEXT NOT NULL,
73
+ updated_at TEXT NOT NULL,
74
+ UNIQUE(connection_id, calendar_id, remote_id),
75
+ FOREIGN KEY (connection_id) REFERENCES calendar_connections(id) ON DELETE CASCADE,
76
+ FOREIGN KEY (calendar_id) REFERENCES calendar_calendars(id) ON DELETE CASCADE
77
+ );
78
+
79
+ CREATE INDEX IF NOT EXISTS idx_calendar_events_calendar_start
80
+ ON calendar_events(calendar_id, start_at, end_at);
81
+
82
+ CREATE INDEX IF NOT EXISTS idx_calendar_events_connection_updated
83
+ ON calendar_events(connection_id, updated_at);
84
+
85
+ CREATE TABLE IF NOT EXISTS work_block_templates (
86
+ id TEXT PRIMARY KEY,
87
+ title TEXT NOT NULL,
88
+ kind TEXT NOT NULL,
89
+ color TEXT NOT NULL DEFAULT '#60a5fa',
90
+ timezone TEXT NOT NULL DEFAULT 'UTC',
91
+ weekdays_json TEXT NOT NULL DEFAULT '[]',
92
+ start_minute INTEGER NOT NULL,
93
+ end_minute INTEGER NOT NULL,
94
+ blocking_state TEXT NOT NULL DEFAULT 'blocked',
95
+ created_at TEXT NOT NULL,
96
+ updated_at TEXT NOT NULL
97
+ );
98
+
99
+ CREATE TABLE IF NOT EXISTS work_block_instances (
100
+ id TEXT PRIMARY KEY,
101
+ template_id TEXT NOT NULL,
102
+ date_key TEXT NOT NULL,
103
+ start_at TEXT NOT NULL,
104
+ end_at TEXT NOT NULL,
105
+ title TEXT NOT NULL,
106
+ kind TEXT NOT NULL,
107
+ color TEXT NOT NULL DEFAULT '#60a5fa',
108
+ blocking_state TEXT NOT NULL DEFAULT 'blocked',
109
+ calendar_event_id TEXT,
110
+ created_at TEXT NOT NULL,
111
+ updated_at TEXT NOT NULL,
112
+ UNIQUE(template_id, date_key, start_at, end_at),
113
+ FOREIGN KEY (template_id) REFERENCES work_block_templates(id) ON DELETE CASCADE,
114
+ FOREIGN KEY (calendar_event_id) REFERENCES calendar_events(id) ON DELETE SET NULL
115
+ );
116
+
117
+ CREATE INDEX IF NOT EXISTS idx_work_block_instances_date
118
+ ON work_block_instances(date_key, start_at, end_at);
119
+
120
+ CREATE TABLE IF NOT EXISTS task_timeboxes (
121
+ id TEXT PRIMARY KEY,
122
+ task_id TEXT NOT NULL,
123
+ project_id TEXT,
124
+ connection_id TEXT,
125
+ calendar_id TEXT,
126
+ remote_event_id TEXT,
127
+ linked_task_run_id TEXT,
128
+ status TEXT NOT NULL DEFAULT 'planned',
129
+ source TEXT NOT NULL DEFAULT 'manual',
130
+ title TEXT NOT NULL,
131
+ starts_at TEXT NOT NULL,
132
+ ends_at TEXT NOT NULL,
133
+ override_reason TEXT,
134
+ created_at TEXT NOT NULL,
135
+ updated_at TEXT NOT NULL,
136
+ FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE,
137
+ FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE SET NULL,
138
+ FOREIGN KEY (connection_id) REFERENCES calendar_connections(id) ON DELETE SET NULL,
139
+ FOREIGN KEY (calendar_id) REFERENCES calendar_calendars(id) ON DELETE SET NULL,
140
+ FOREIGN KEY (linked_task_run_id) REFERENCES task_runs(id) ON DELETE SET NULL
141
+ );
142
+
143
+ CREATE INDEX IF NOT EXISTS idx_task_timeboxes_task_start
144
+ ON task_timeboxes(task_id, starts_at, ends_at);
145
+
146
+ CREATE INDEX IF NOT EXISTS idx_task_timeboxes_run
147
+ ON task_timeboxes(linked_task_run_id);