volute 0.30.1 → 0.32.0

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 (227) hide show
  1. package/README.md +15 -22
  2. package/dist/{accept-E3PAH3QJ.js → accept-74M7I4RZ.js} +5 -4
  3. package/dist/{activity-events-BKBPPUBP.js → activity-events-HETAODOK.js} +3 -2
  4. package/dist/{ai-service-VAJT5UBS.js → ai-service-ZIPCV3MX.js} +20 -5
  5. package/dist/api.d.ts +341 -397
  6. package/dist/{archive-WWDBWYN2.js → archive-INXYFVCW.js} +3 -2
  7. package/dist/auth-6DMGES3I.js +44 -0
  8. package/dist/{bridge-RO37CUFM.js → bridge-BVCBTGPF.js} +5 -4
  9. package/dist/{chat-TCUNPFGO.js → chat-XT4OBJBU.js} +8 -8
  10. package/dist/{chunk-P7VFDSSG.js → chunk-2FLJ63GU.js} +2 -2
  11. package/dist/{chunk-ZWKTUQEL.js → chunk-2NGTS5UU.js} +1 -1
  12. package/dist/{chunk-JGFRDMR6.js → chunk-ALEF47VT.js} +1 -1
  13. package/dist/{chunk-MDPCSXZ4.js → chunk-D5G5YOPL.js} +163 -15
  14. package/dist/{chunk-VGWJSNHS.js → chunk-G53F3JA4.js} +1 -35
  15. package/dist/{chunk-A6TUJJ3L.js → chunk-G6BSYHPK.js} +2 -2
  16. package/dist/{chunk-DTC6EH5I.js → chunk-I5KY25PQ.js} +1 -9
  17. package/dist/{chunk-NSBFETWP.js → chunk-IYDIE3HG.js} +64 -26
  18. package/dist/{chunk-W5OOPLNP.js → chunk-JJ7W6WSB.js} +3 -3
  19. package/dist/{chunk-G3GBKZGG.js → chunk-LGB6JBHI.js} +54 -2
  20. package/dist/chunk-LRCG2JLP.js +251 -0
  21. package/dist/{chunk-FXHXHI2A.js → chunk-LSGWR54X.js} +3 -6
  22. package/dist/{chunk-S5LR3XYJ.js → chunk-M7UL5S3Q.js} +1 -1
  23. package/dist/chunk-PB65JZK2.js +85 -0
  24. package/dist/chunk-PVY5W6QN.js +41 -0
  25. package/dist/{chunk-QVAQ5454.js → chunk-QBQ424EM.js} +3007 -2126
  26. package/dist/{chunk-P27RV5WM.js → chunk-QZANELPX.js} +6 -2
  27. package/dist/{chunk-FSM45XD5.js → chunk-R7E6CRVQ.js} +1 -1
  28. package/dist/{chunk-HHTXM4JT.js → chunk-RPZZSXV3.js} +39 -195
  29. package/dist/{chunk-UPA6COHU.js → chunk-RSX4OPZY.js} +5 -5
  30. package/dist/{chunk-2C2VXEBB.js → chunk-S6NFERDC.js} +21 -57
  31. package/dist/chunk-SKLSMHXO.js +208 -0
  32. package/dist/{chunk-IKHDUZRH.js → chunk-SX5TKJBZ.js} +2 -2
  33. package/dist/chunk-TDRYEPH4.js +185 -0
  34. package/dist/chunk-TSXLLQZW.js +46 -0
  35. package/dist/{chunk-EFVHR7KH.js → chunk-UKVWJRKN.js} +24 -5
  36. package/dist/{chunk-2NDZC3S7.js → chunk-WKF5FEFK.js} +688 -389
  37. package/dist/cli.js +93 -24
  38. package/dist/{clock-G3ALCMLJ.js → clock-2UOZ6JPU.js} +11 -8
  39. package/dist/{cloud-sync-JV4LJOK3.js → cloud-sync-JN3NWKEM.js} +16 -14
  40. package/dist/config-H2H4UIF7.js +72 -0
  41. package/dist/connectors/discord-bridge.js +1 -1
  42. package/dist/connectors/slack-bridge.js +1 -1
  43. package/dist/connectors/telegram-bridge.js +1 -1
  44. package/dist/{conversations-7KVQV7EZ.js → conversations-3O5O6AS3.js} +8 -7
  45. package/dist/{create-JTLS7GX3.js → create-RNLNCORE.js} +5 -4
  46. package/dist/{create-VQSQHJQW.js → create-WBBYI6V7.js} +6 -2
  47. package/dist/daemon-client-6QXHZ7US.js +12 -0
  48. package/dist/{daemon-restart-4JGBHEJ4.js → daemon-restart-NGFHFAUF.js} +7 -7
  49. package/dist/daemon.js +2446 -1999
  50. package/dist/{db-HMFPIRO2.js → db-F34YLV7D.js} +2 -1
  51. package/dist/db-RA45JBFG.js +16 -0
  52. package/dist/{delete-JESHKE7F.js → delete-QTGWEDBI.js} +1 -1
  53. package/dist/delivery-manager-SDVXFD4W.js +28 -0
  54. package/dist/delivery-router-FL45JL7N.js +21 -0
  55. package/dist/down-TB3ESMNP.js +14 -0
  56. package/dist/{env-CLXXT7M2.js → env-RLYQBOOP.js} +5 -4
  57. package/dist/{export-EGA5M5PB.js → export-SUYRLI5Q.js} +4 -3
  58. package/dist/{extension-WZ4SUPJB.js → extension-FQ5D3NCC.js} +6 -6
  59. package/dist/{extensions-ECO4RPFQ.js → extensions-GDYWQXC4.js} +9 -7
  60. package/dist/{files-4VEJDASH.js → files-EAMPO2SJ.js} +6 -5
  61. package/dist/{history-EJMMLXDO.js → history-FO5PHBQ5.js} +9 -4
  62. package/dist/{import-YCGPMBSI.js → import-DDUFE7AY.js} +4 -3
  63. package/dist/{join-2GBJKZEN.js → join-I5QEE3LG.js} +1 -1
  64. package/dist/{list-Q6O7FGAN.js → list-DW2VRTOZ.js} +5 -4
  65. package/dist/{login-RL6AU2SM.js → login-7CHPW2PN.js} +5 -4
  66. package/dist/{login-RET5WESK.js → login-RIJF2F4G.js} +3 -2
  67. package/dist/{logout-CGAGJN3L.js → logout-5MLHZALK.js} +3 -2
  68. package/dist/{logout-JRPBEMMR.js → logout-UZJRGY4Z.js} +3 -2
  69. package/dist/message-delivery-2FIM7QKO.js +32 -0
  70. package/dist/{mind-LUWRQUQ5.js → mind-2B6M7Y25.js} +18 -18
  71. package/dist/{mind-activity-tracker-VYN2ZZ2M.js → mind-activity-tracker-NZZT2NTT.js} +4 -3
  72. package/dist/{mind-list-V5WW5DUA.js → mind-list-WUPMQDYQ.js} +3 -2
  73. package/dist/mind-manager-BNCMGYXW.js +28 -0
  74. package/dist/mind-service-AV273WT4.js +34 -0
  75. package/dist/{mind-sleep-R6PTNNW4.js → mind-sleep-B7BHJLH7.js} +5 -4
  76. package/dist/{mind-status-I4ISFJ6I.js → mind-status-L3EFFRPR.js} +3 -2
  77. package/dist/{mind-wake-67ZQEWAV.js → mind-wake-GY3RFX7Y.js} +5 -4
  78. package/dist/{package-OYUD4ZJ4.js → package-PK6JUFL3.js} +3 -3
  79. package/dist/read-5AMJRO3D.js +75 -0
  80. package/dist/{register-NZDSTLP3.js → register-V2JZZKFK.js} +5 -4
  81. package/dist/{registry-ODSALQQL.js → registry-PJ4S5PHQ.js} +8 -1
  82. package/dist/{reject-2HZOJEIJ.js → reject-33HEZMZ4.js} +5 -4
  83. package/dist/{restart-QHS3NT64.js → restart-3UCMRUVC.js} +5 -4
  84. package/dist/{sandbox-O5FUSF43.js → sandbox-JANNTX6U.js} +4 -3
  85. package/dist/schema-PA3M5ZKH.js +32 -0
  86. package/dist/seed-ALUQ55FF.js +112 -0
  87. package/dist/{send-OAN3RYYY.js → send-3MI36LEF.js} +58 -69
  88. package/dist/{setup-QMDK5RZX.js → setup-SZIARWI6.js} +5 -4
  89. package/dist/{setup-XJH3E7YM.js → setup-WENLVPVP.js} +9 -9
  90. package/dist/{skill-FZIN4W4Q.js → skill-TUVOTW4Z.js} +5 -4
  91. package/dist/skills/dreaming/SKILL.md +6 -4
  92. package/dist/skills/dreaming/references/INSTALL.md +4 -5
  93. package/dist/skills/dreaming/scripts/dream.ts +5 -27
  94. package/dist/skills/dreaming/scripts/wake-context-dreams.sh +1 -1
  95. package/dist/skills/imagegen/SKILL.md +6 -5
  96. package/dist/skills/imagegen/references/INSTALL.md +1 -1
  97. package/dist/skills/resonance/SKILL.md +4 -1
  98. package/dist/skills/resonance/references/INSTALL.md +2 -2
  99. package/dist/skills/resonance/scripts/resonance-hook.sh +2 -0
  100. package/dist/skills/resonance/scripts/resonance.ts +35 -5
  101. package/dist/skills/volute-admin/SKILL.md +83 -0
  102. package/dist/skills/volute-mind/SKILL.md +12 -12
  103. package/dist/skills-XNZK6P4K.js +61 -0
  104. package/dist/sleep-manager-53DZOWW7.js +32 -0
  105. package/dist/spirit-N4W4UQRH.js +217 -0
  106. package/dist/{split-EXYGGGQN.js → split-STOROBYJ.js} +1 -1
  107. package/dist/{sprout-AXQ6H5DB.js → sprout-L2GFOVF7.js} +9 -8
  108. package/dist/{start-MTOVL6SY.js → start-K2NCUUCG.js} +5 -4
  109. package/dist/{status-ZRO37MWR.js → status-TCUMUO6M.js} +5 -5
  110. package/dist/{stop-OK5WEPVC.js → stop-H26JZDXF.js} +5 -4
  111. package/dist/system-chat-NPYFYZVI.js +32 -0
  112. package/dist/{systems-W3BBMSOZ.js → systems-DHBKVYEY.js} +6 -5
  113. package/dist/{tailscale-BM72RXCJ.js → tailscale-XHQBZROW.js} +2 -1
  114. package/dist/{template-hash-3HOR4UAJ.js → template-hash-A6VVKOXJ.js} +2 -1
  115. package/dist/up-6I6BHRTO.js +17 -0
  116. package/dist/{update-PLPHMMZ2.js → update-QVPRF6GR.js} +5 -5
  117. package/dist/{update-check-CVCN7MF6.js → update-check-ZD6OOIYQ.js} +3 -2
  118. package/dist/{upgrade-I6NPCYUU.js → upgrade-O4Q7WJM3.js} +12 -14
  119. package/dist/{version-notify-2NTWVEHL.js → version-notify-TCKWBZZG.js} +22 -23
  120. package/dist/web-assets/assets/index-Bui7U9Uu.css +1 -0
  121. package/dist/web-assets/assets/index-e36DIo1b.js +73 -0
  122. package/dist/web-assets/ext-theme.css +94 -0
  123. package/dist/web-assets/index.html +2 -2
  124. package/drizzle/0000_baseline.sql +152 -0
  125. package/drizzle/0001_add_conversation_private.sql +1 -0
  126. package/drizzle/0002_turns.sql +21 -0
  127. package/drizzle/0003_turn_feed_links.sql +11 -0
  128. package/drizzle/0004_spirits.sql +5 -0
  129. package/drizzle/meta/0000_snapshot.json +3 -223
  130. package/drizzle/meta/0001_snapshot.json +3 -294
  131. package/drizzle/meta/0002_snapshot.json +3 -335
  132. package/drizzle/meta/0003_snapshot.json +3 -413
  133. package/drizzle/meta/0004_snapshot.json +3 -406
  134. package/drizzle/meta/_journal.json +10 -101
  135. package/package.json +3 -3
  136. package/packages/extensions/notes/dist/ui/assets/index-8jWEv9SA.js +61 -0
  137. package/packages/extensions/notes/dist/ui/assets/index-DkaB7Ytd.css +1 -0
  138. package/packages/extensions/notes/dist/ui/index.html +2 -2
  139. package/packages/extensions/notes/skills/notes/SKILL.md +8 -8
  140. package/packages/extensions/pages/skills/pages/SKILL.md +17 -44
  141. package/templates/_base/.init/.config/hooks/pre-prompt/session-activity.ts +40 -0
  142. package/templates/_base/.init/.local/bin/volute +27 -0
  143. package/templates/_base/.init/.local/hooks/pre-prompt/session-activity.ts +40 -0
  144. package/templates/_base/.init/.local/hooks/startup-context.ts +58 -0
  145. package/templates/_base/home/.config/routes.json +1 -1
  146. package/templates/_base/src/lib/auto-commit.ts +82 -43
  147. package/templates/_base/src/lib/daemon-client.ts +40 -36
  148. package/templates/_base/src/lib/format-prefix.ts +1 -0
  149. package/templates/_base/src/lib/hook-loader.ts +155 -0
  150. package/templates/_base/src/lib/router.ts +17 -1
  151. package/templates/_base/src/lib/startup.ts +17 -12
  152. package/templates/_base/src/lib/transparency.ts +2 -2
  153. package/templates/_base/src/lib/volute-server.ts +2 -5
  154. package/templates/claude/.init/.claude/settings.json +1 -1
  155. package/templates/claude/.init/.config/routes.json +2 -2
  156. package/templates/claude/src/agent.ts +97 -14
  157. package/templates/claude/src/lib/hooks/auto-commit.ts +7 -3
  158. package/templates/claude/src/lib/message-channel.ts +7 -2
  159. package/templates/claude/src/server.ts +0 -9
  160. package/templates/codex/.init/.config/routes.json +11 -0
  161. package/templates/codex/.init/AGENTS.md +29 -0
  162. package/templates/codex/home/.config/config.json.tmpl +7 -0
  163. package/templates/codex/package.json.tmpl +20 -0
  164. package/templates/codex/src/agent.ts +553 -0
  165. package/templates/codex/src/lib/content.ts +16 -0
  166. package/templates/codex/src/lib/session-store.ts +56 -0
  167. package/templates/codex/src/server.ts +59 -0
  168. package/templates/codex/volute-template.json +8 -0
  169. package/templates/pi/.init/.config/routes.json +2 -2
  170. package/templates/pi/package.json.tmpl +1 -1
  171. package/templates/pi/src/agent.ts +63 -9
  172. package/templates/pi/src/lib/event-handler.ts +6 -4
  173. package/templates/pi/src/lib/reply-instructions-extension.ts +32 -11
  174. package/dist/chunk-7D47T4RB.js +0 -84
  175. package/dist/chunk-CVH6Y2YG.js +0 -59
  176. package/dist/chunk-EFP3PE6C.js +0 -232
  177. package/dist/chunk-LIRWLNAK.js +0 -729
  178. package/dist/daemon-client-BCTFGVCZ.js +0 -9
  179. package/dist/down-NGBMGORS.js +0 -14
  180. package/dist/message-delivery-6YMVNOEC.js +0 -28
  181. package/dist/migrate-registry-to-db-FK35IPEH.js +0 -110
  182. package/dist/mind-manager-YFCOIAAX.js +0 -18
  183. package/dist/pages-watcher-Z3PKNROC.js +0 -21
  184. package/dist/read-WQMPTSN2.js +0 -46
  185. package/dist/seed-WUQMPLDM.js +0 -71
  186. package/dist/skills/sessions/SKILL.md +0 -49
  187. package/dist/sleep-manager-O7YQFCV5.js +0 -30
  188. package/dist/up-BXUAIDXB.js +0 -17
  189. package/dist/web-assets/assets/index--kREqKl9.js +0 -72
  190. package/dist/web-assets/assets/index-BXYTG0nJ.css +0 -1
  191. package/drizzle/0000_flaky_mariko_yashida.sql +0 -34
  192. package/drizzle/0001_careless_warpath.sql +0 -12
  193. package/drizzle/0002_wealthy_the_call.sql +0 -6
  194. package/drizzle/0003_clean_ego.sql +0 -12
  195. package/drizzle/0004_magical_silverclaw.sql +0 -1
  196. package/drizzle/0005_rename_agents_to_minds.sql +0 -11
  197. package/drizzle/0006_mind_history.sql +0 -20
  198. package/drizzle/0007_system_prompts.sql +0 -5
  199. package/drizzle/0008_volute_channels.sql +0 -24
  200. package/drizzle/0009_shared_skills.sql +0 -9
  201. package/drizzle/0010_delivery_queue.sql +0 -12
  202. package/drizzle/0011_rename_human_to_brain.sql +0 -1
  203. package/drizzle/0012_activity.sql +0 -11
  204. package/drizzle/0013_user_profiles.sql +0 -3
  205. package/drizzle/0014_conversation_reads.sql +0 -7
  206. package/drizzle/0015_notes.sql +0 -23
  207. package/drizzle/0016_note_reactions_and_replies.sql +0 -15
  208. package/drizzle/0017_minds.sql +0 -16
  209. package/drizzle/meta/0005_snapshot.json +0 -410
  210. package/drizzle/meta/0006_snapshot.json +0 -7
  211. package/drizzle/meta/0007_snapshot.json +0 -7
  212. package/drizzle/meta/0008_snapshot.json +0 -7
  213. package/drizzle/meta/0009_snapshot.json +0 -7
  214. package/drizzle/meta/0010_snapshot.json +0 -7
  215. package/drizzle/meta/0011_snapshot.json +0 -7
  216. package/drizzle/meta/0012_snapshot.json +0 -7
  217. package/drizzle/meta/0013_snapshot.json +0 -7
  218. package/packages/extensions/notes/dist/ui/assets/index-DgawVO5g.css +0 -1
  219. package/packages/extensions/notes/dist/ui/assets/index-qUWoeC4c.js +0 -2
  220. package/packages/extensions/notes/skills/notes/scripts/notes.mjs +0 -185
  221. package/templates/_base/.init/.config/hooks/startup-context.sh +0 -46
  222. package/templates/_base/.init/.config/scripts/session-reader.ts +0 -59
  223. package/templates/_base/home/public/.gitkeep +0 -0
  224. package/templates/_base/src/lib/session-monitor.ts +0 -400
  225. package/templates/claude/src/lib/hooks/session-context.ts +0 -32
  226. package/templates/pi/src/lib/session-context-extension.ts +0 -35
  227. /package/templates/_base/.init/{.config → .local}/hooks/wake-context.sh +0 -0
@@ -21,6 +21,7 @@
21
21
  --yellow-dim: #78350f;
22
22
  --blue: #60a5fa;
23
23
  --purple: #c084fc;
24
+ --green: #4ade80;
24
25
  --overlay: rgba(0, 0, 0, 0.6);
25
26
  --yellow-bg: rgba(251, 191, 36, 0.08);
26
27
  --blue-bg: rgba(96, 165, 250, 0.08);
@@ -109,3 +110,96 @@ button:focus-visible {
109
110
  transform: translateY(0);
110
111
  }
111
112
  }
113
+
114
+ /* Markdown rendering */
115
+ .markdown-body {
116
+ word-break: break-word;
117
+ color: var(--text-0);
118
+ line-height: 1.6;
119
+ }
120
+ .markdown-body p {
121
+ margin: 0 0 8px;
122
+ }
123
+ .markdown-body p:last-child {
124
+ margin-bottom: 0;
125
+ }
126
+ .markdown-body pre {
127
+ background: var(--bg-3);
128
+ border: 1px solid var(--border);
129
+ border-radius: var(--radius);
130
+ padding: 10px 12px;
131
+ overflow-x: auto;
132
+ margin: 8px 0;
133
+ font-size: 13px;
134
+ line-height: 1.5;
135
+ }
136
+ .markdown-body code {
137
+ font-family: var(--mono);
138
+ font-size: 13px;
139
+ background: var(--bg-3);
140
+ padding: 1px 4px;
141
+ border-radius: 3px;
142
+ }
143
+ .markdown-body pre code {
144
+ background: none;
145
+ padding: 0;
146
+ }
147
+ .markdown-body a {
148
+ color: var(--blue);
149
+ text-decoration: underline;
150
+ }
151
+ .markdown-body ul,
152
+ .markdown-body ol {
153
+ margin: 4px 0;
154
+ padding-left: 20px;
155
+ }
156
+ .markdown-body li {
157
+ margin: 2px 0;
158
+ }
159
+ .markdown-body h1,
160
+ .markdown-body h2,
161
+ .markdown-body h3,
162
+ .markdown-body h4,
163
+ .markdown-body h5,
164
+ .markdown-body h6 {
165
+ margin: 12px 0 6px;
166
+ font-weight: 600;
167
+ color: var(--text-0);
168
+ }
169
+ .markdown-body h1 {
170
+ font-size: 18px;
171
+ }
172
+ .markdown-body h2 {
173
+ font-size: 16px;
174
+ }
175
+ .markdown-body h3 {
176
+ font-size: 15px;
177
+ }
178
+ .markdown-body blockquote {
179
+ border-left: 3px solid var(--border-bright);
180
+ margin: 8px 0;
181
+ padding: 4px 12px;
182
+ color: var(--text-1);
183
+ }
184
+ .markdown-body table {
185
+ border-collapse: collapse;
186
+ margin: 8px 0;
187
+ }
188
+ .markdown-body th,
189
+ .markdown-body td {
190
+ border: 1px solid var(--border);
191
+ padding: 6px 10px;
192
+ font-size: 13px;
193
+ }
194
+ .markdown-body th {
195
+ background: var(--bg-3);
196
+ font-weight: 600;
197
+ }
198
+ .markdown-body hr {
199
+ border: none;
200
+ border-top: 1px solid var(--border);
201
+ margin: 12px 0;
202
+ }
203
+ .markdown-body img {
204
+ max-width: 100%;
205
+ }
@@ -8,8 +8,8 @@
8
8
  <link rel="preconnect" href="https://fonts.googleapis.com" />
9
9
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
10
10
  <link href="https://fonts.googleapis.com/css2?family=Averia+Serif+Libre:wght@300;400;700&family=Fira+Code:wght@300;400;500;600&family=Averia+Sans+Libre:ital,wght@0,300;0,400;0,500;0,600;1,400&display=swap" rel="stylesheet" />
11
- <script type="module" crossorigin src="/assets/index--kREqKl9.js"></script>
12
- <link rel="stylesheet" crossorigin href="/assets/index-BXYTG0nJ.css">
11
+ <script type="module" crossorigin src="/assets/index-e36DIo1b.js"></script>
12
+ <link rel="stylesheet" crossorigin href="/assets/index-Bui7U9Uu.css">
13
13
  </head>
14
14
  <body>
15
15
  <div id="root"></div>
@@ -0,0 +1,152 @@
1
+ -- Baseline schema: all tables as of v0.30.x
2
+ -- Uses IF NOT EXISTS so existing installs safely skip everything.
3
+
4
+ CREATE TABLE IF NOT EXISTS `users` (
5
+ `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
6
+ `username` text NOT NULL,
7
+ `password_hash` text NOT NULL,
8
+ `role` text NOT NULL DEFAULT 'pending',
9
+ `user_type` text NOT NULL DEFAULT 'brain',
10
+ `display_name` text,
11
+ `description` text,
12
+ `avatar` text,
13
+ `created_at` text NOT NULL DEFAULT (datetime('now'))
14
+ );
15
+ --> statement-breakpoint
16
+ CREATE UNIQUE INDEX IF NOT EXISTS `users_username_unique` ON `users` (`username`);
17
+ --> statement-breakpoint
18
+ CREATE TABLE IF NOT EXISTS `minds` (
19
+ `name` text PRIMARY KEY NOT NULL,
20
+ `port` integer NOT NULL,
21
+ `parent` text REFERENCES `minds`(`name`) ON DELETE CASCADE,
22
+ `dir` text,
23
+ `branch` text,
24
+ `stage` text,
25
+ `template` text,
26
+ `template_hash` text,
27
+ `running` integer NOT NULL DEFAULT 0,
28
+ `created_at` text NOT NULL DEFAULT (datetime('now'))
29
+ );
30
+ --> statement-breakpoint
31
+ CREATE UNIQUE INDEX IF NOT EXISTS `idx_minds_port` ON `minds` (`port`);
32
+ --> statement-breakpoint
33
+ CREATE INDEX IF NOT EXISTS `idx_minds_parent` ON `minds` (`parent`);
34
+ --> statement-breakpoint
35
+ CREATE TABLE IF NOT EXISTS `conversations` (
36
+ `id` text PRIMARY KEY NOT NULL,
37
+ `mind_name` text,
38
+ `channel` text NOT NULL,
39
+ `type` text NOT NULL DEFAULT 'dm',
40
+ `name` text,
41
+ `user_id` integer REFERENCES `users`(`id`),
42
+ `title` text,
43
+ `created_at` text NOT NULL DEFAULT (datetime('now')),
44
+ `updated_at` text NOT NULL DEFAULT (datetime('now'))
45
+ );
46
+ --> statement-breakpoint
47
+ CREATE INDEX IF NOT EXISTS `idx_conversations_mind_name` ON `conversations` (`mind_name`);
48
+ --> statement-breakpoint
49
+ CREATE INDEX IF NOT EXISTS `idx_conversations_user_id` ON `conversations` (`user_id`);
50
+ --> statement-breakpoint
51
+ CREATE INDEX IF NOT EXISTS `idx_conversations_updated_at` ON `conversations` (`updated_at`);
52
+ --> statement-breakpoint
53
+ CREATE UNIQUE INDEX IF NOT EXISTS `idx_conversations_name` ON `conversations` (`name`);
54
+ --> statement-breakpoint
55
+ CREATE TABLE IF NOT EXISTS `messages` (
56
+ `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
57
+ `conversation_id` text NOT NULL REFERENCES `conversations`(`id`) ON DELETE CASCADE,
58
+ `role` text NOT NULL,
59
+ `sender_name` text,
60
+ `content` text NOT NULL,
61
+ `created_at` text NOT NULL DEFAULT (datetime('now'))
62
+ );
63
+ --> statement-breakpoint
64
+ CREATE INDEX IF NOT EXISTS `idx_messages_conversation_id` ON `messages` (`conversation_id`);
65
+ --> statement-breakpoint
66
+ CREATE TABLE IF NOT EXISTS `conversation_participants` (
67
+ `conversation_id` text NOT NULL REFERENCES `conversations`(`id`) ON DELETE CASCADE,
68
+ `user_id` integer NOT NULL REFERENCES `users`(`id`) ON DELETE CASCADE,
69
+ `role` text NOT NULL DEFAULT 'member',
70
+ `joined_at` text NOT NULL DEFAULT (datetime('now'))
71
+ );
72
+ --> statement-breakpoint
73
+ CREATE UNIQUE INDEX IF NOT EXISTS `idx_cp_unique` ON `conversation_participants` (`conversation_id`, `user_id`);
74
+ --> statement-breakpoint
75
+ CREATE INDEX IF NOT EXISTS `idx_cp_user_id` ON `conversation_participants` (`user_id`);
76
+ --> statement-breakpoint
77
+ CREATE TABLE IF NOT EXISTS `sessions` (
78
+ `id` text PRIMARY KEY NOT NULL,
79
+ `user_id` integer NOT NULL REFERENCES `users`(`id`) ON DELETE CASCADE,
80
+ `created_at` integer NOT NULL
81
+ );
82
+ --> statement-breakpoint
83
+ CREATE TABLE IF NOT EXISTS `mind_history` (
84
+ `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
85
+ `mind` text NOT NULL,
86
+ `channel` text,
87
+ `session` text,
88
+ `sender` text,
89
+ `message_id` text,
90
+ `type` text NOT NULL DEFAULT 'inbound',
91
+ `content` text,
92
+ `metadata` text,
93
+ `created_at` text NOT NULL DEFAULT (datetime('now'))
94
+ );
95
+ --> statement-breakpoint
96
+ CREATE INDEX IF NOT EXISTS `idx_mind_history_mind` ON `mind_history` (`mind`);
97
+ --> statement-breakpoint
98
+ CREATE INDEX IF NOT EXISTS `idx_mind_history_mind_channel` ON `mind_history` (`mind`, `channel`);
99
+ --> statement-breakpoint
100
+ CREATE INDEX IF NOT EXISTS `idx_mind_history_mind_type` ON `mind_history` (`mind`, `type`);
101
+ --> statement-breakpoint
102
+ CREATE TABLE IF NOT EXISTS `system_prompts` (
103
+ `key` text PRIMARY KEY NOT NULL,
104
+ `content` text NOT NULL,
105
+ `updated_at` text NOT NULL DEFAULT (datetime('now'))
106
+ );
107
+ --> statement-breakpoint
108
+ CREATE TABLE IF NOT EXISTS `shared_skills` (
109
+ `id` text PRIMARY KEY NOT NULL,
110
+ `name` text NOT NULL,
111
+ `description` text NOT NULL DEFAULT '',
112
+ `author` text NOT NULL,
113
+ `version` integer NOT NULL DEFAULT 1,
114
+ `created_at` text NOT NULL DEFAULT (datetime('now')),
115
+ `updated_at` text NOT NULL DEFAULT (datetime('now'))
116
+ );
117
+ --> statement-breakpoint
118
+ CREATE TABLE IF NOT EXISTS `delivery_queue` (
119
+ `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
120
+ `mind` text NOT NULL,
121
+ `session` text NOT NULL,
122
+ `channel` text,
123
+ `sender` text,
124
+ `status` text NOT NULL DEFAULT 'pending',
125
+ `payload` text NOT NULL,
126
+ `created_at` text NOT NULL DEFAULT (datetime('now'))
127
+ );
128
+ --> statement-breakpoint
129
+ CREATE INDEX IF NOT EXISTS `idx_delivery_queue_mind_session` ON `delivery_queue` (`mind`, `session`);
130
+ --> statement-breakpoint
131
+ CREATE INDEX IF NOT EXISTS `idx_delivery_queue_mind_status` ON `delivery_queue` (`mind`, `status`);
132
+ --> statement-breakpoint
133
+ CREATE TABLE IF NOT EXISTS `activity` (
134
+ `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
135
+ `type` text NOT NULL,
136
+ `mind` text NOT NULL,
137
+ `summary` text NOT NULL,
138
+ `metadata` text,
139
+ `created_at` text NOT NULL DEFAULT (datetime('now'))
140
+ );
141
+ --> statement-breakpoint
142
+ CREATE INDEX IF NOT EXISTS `idx_activity_created_at` ON `activity` (`created_at`);
143
+ --> statement-breakpoint
144
+ CREATE INDEX IF NOT EXISTS `idx_activity_mind` ON `activity` (`mind`);
145
+ --> statement-breakpoint
146
+ CREATE TABLE IF NOT EXISTS `conversation_reads` (
147
+ `user_id` integer NOT NULL REFERENCES `users`(`id`) ON DELETE CASCADE,
148
+ `conversation_id` text NOT NULL REFERENCES `conversations`(`id`) ON DELETE CASCADE,
149
+ `last_read_message_id` integer NOT NULL DEFAULT 0
150
+ );
151
+ --> statement-breakpoint
152
+ CREATE UNIQUE INDEX IF NOT EXISTS `idx_conversation_reads_unique` ON `conversation_reads` (`user_id`, `conversation_id`);
@@ -0,0 +1 @@
1
+ ALTER TABLE `conversations` ADD `private` integer NOT NULL DEFAULT 0;
@@ -0,0 +1,21 @@
1
+ -- First-class turns: track turn lifecycle and link events/messages to turns
2
+
3
+ CREATE TABLE IF NOT EXISTS `turns` (
4
+ `id` text PRIMARY KEY NOT NULL,
5
+ `mind` text NOT NULL,
6
+ `session` text,
7
+ `trigger_event_id` integer,
8
+ `summary_event_id` integer,
9
+ `status` text NOT NULL DEFAULT 'active',
10
+ `created_at` text NOT NULL DEFAULT (datetime('now'))
11
+ );
12
+ --> statement-breakpoint
13
+ CREATE INDEX IF NOT EXISTS `idx_turns_mind` ON `turns` (`mind`);
14
+ --> statement-breakpoint
15
+ CREATE INDEX IF NOT EXISTS `idx_turns_mind_status` ON `turns` (`mind`, `status`);
16
+ --> statement-breakpoint
17
+ ALTER TABLE `mind_history` ADD `turn_id` text;
18
+ --> statement-breakpoint
19
+ CREATE INDEX IF NOT EXISTS `idx_mind_history_turn_id` ON `mind_history` (`turn_id`);
20
+ --> statement-breakpoint
21
+ ALTER TABLE `messages` ADD `source_event_id` integer;
@@ -0,0 +1,11 @@
1
+ -- Link feed items (messages, activities) to turns via turn_id
2
+
3
+ ALTER TABLE `messages` ADD `turn_id` text;
4
+ --> statement-breakpoint
5
+ CREATE INDEX IF NOT EXISTS `idx_messages_turn_id` ON `messages` (`turn_id`);
6
+ --> statement-breakpoint
7
+ ALTER TABLE `activity` ADD `turn_id` text;
8
+ --> statement-breakpoint
9
+ ALTER TABLE `activity` ADD `source_event_id` integer;
10
+ --> statement-breakpoint
11
+ CREATE INDEX IF NOT EXISTS `idx_activity_turn_id` ON `activity` (`turn_id`);
@@ -0,0 +1,5 @@
1
+ ALTER TABLE `minds` ADD `mind_type` text NOT NULL DEFAULT 'mind';
2
+ --> statement-breakpoint
3
+ ALTER TABLE `minds` ADD `created_by` text;
4
+ --> statement-breakpoint
5
+ CREATE INDEX IF NOT EXISTS `idx_minds_mind_type` ON `minds` (`mind_type`);
@@ -1,227 +1,7 @@
1
1
  {
2
+ "id": "0000_baseline",
3
+ "prevId": "",
2
4
  "version": "6",
3
5
  "dialect": "sqlite",
4
- "id": "f864e4fb-4b3d-45e2-8df2-be1e8e95406e",
5
- "prevId": "00000000-0000-0000-0000-000000000000",
6
- "tables": {
7
- "conversations": {
8
- "name": "conversations",
9
- "columns": {
10
- "id": {
11
- "name": "id",
12
- "type": "text",
13
- "primaryKey": true,
14
- "notNull": true,
15
- "autoincrement": false
16
- },
17
- "agent_name": {
18
- "name": "agent_name",
19
- "type": "text",
20
- "primaryKey": false,
21
- "notNull": true,
22
- "autoincrement": false
23
- },
24
- "channel": {
25
- "name": "channel",
26
- "type": "text",
27
- "primaryKey": false,
28
- "notNull": true,
29
- "autoincrement": false
30
- },
31
- "user_id": {
32
- "name": "user_id",
33
- "type": "integer",
34
- "primaryKey": false,
35
- "notNull": false,
36
- "autoincrement": false
37
- },
38
- "title": {
39
- "name": "title",
40
- "type": "text",
41
- "primaryKey": false,
42
- "notNull": false,
43
- "autoincrement": false
44
- },
45
- "created_at": {
46
- "name": "created_at",
47
- "type": "text",
48
- "primaryKey": false,
49
- "notNull": true,
50
- "autoincrement": false,
51
- "default": "(datetime('now'))"
52
- },
53
- "updated_at": {
54
- "name": "updated_at",
55
- "type": "text",
56
- "primaryKey": false,
57
- "notNull": true,
58
- "autoincrement": false,
59
- "default": "(datetime('now'))"
60
- }
61
- },
62
- "indexes": {
63
- "idx_conversations_agent_name": {
64
- "name": "idx_conversations_agent_name",
65
- "columns": ["agent_name"],
66
- "isUnique": false
67
- },
68
- "idx_conversations_user_id": {
69
- "name": "idx_conversations_user_id",
70
- "columns": ["user_id"],
71
- "isUnique": false
72
- },
73
- "idx_conversations_updated_at": {
74
- "name": "idx_conversations_updated_at",
75
- "columns": ["updated_at"],
76
- "isUnique": false
77
- }
78
- },
79
- "foreignKeys": {
80
- "conversations_user_id_users_id_fk": {
81
- "name": "conversations_user_id_users_id_fk",
82
- "tableFrom": "conversations",
83
- "tableTo": "users",
84
- "columnsFrom": ["user_id"],
85
- "columnsTo": ["id"],
86
- "onDelete": "no action",
87
- "onUpdate": "no action"
88
- }
89
- },
90
- "compositePrimaryKeys": {},
91
- "uniqueConstraints": {},
92
- "checkConstraints": {}
93
- },
94
- "messages": {
95
- "name": "messages",
96
- "columns": {
97
- "id": {
98
- "name": "id",
99
- "type": "integer",
100
- "primaryKey": true,
101
- "notNull": true,
102
- "autoincrement": true
103
- },
104
- "conversation_id": {
105
- "name": "conversation_id",
106
- "type": "text",
107
- "primaryKey": false,
108
- "notNull": true,
109
- "autoincrement": false
110
- },
111
- "role": {
112
- "name": "role",
113
- "type": "text",
114
- "primaryKey": false,
115
- "notNull": true,
116
- "autoincrement": false
117
- },
118
- "sender_name": {
119
- "name": "sender_name",
120
- "type": "text",
121
- "primaryKey": false,
122
- "notNull": false,
123
- "autoincrement": false
124
- },
125
- "content": {
126
- "name": "content",
127
- "type": "text",
128
- "primaryKey": false,
129
- "notNull": true,
130
- "autoincrement": false
131
- },
132
- "created_at": {
133
- "name": "created_at",
134
- "type": "text",
135
- "primaryKey": false,
136
- "notNull": true,
137
- "autoincrement": false,
138
- "default": "(datetime('now'))"
139
- }
140
- },
141
- "indexes": {
142
- "idx_messages_conversation_id": {
143
- "name": "idx_messages_conversation_id",
144
- "columns": ["conversation_id"],
145
- "isUnique": false
146
- }
147
- },
148
- "foreignKeys": {
149
- "messages_conversation_id_conversations_id_fk": {
150
- "name": "messages_conversation_id_conversations_id_fk",
151
- "tableFrom": "messages",
152
- "tableTo": "conversations",
153
- "columnsFrom": ["conversation_id"],
154
- "columnsTo": ["id"],
155
- "onDelete": "cascade",
156
- "onUpdate": "no action"
157
- }
158
- },
159
- "compositePrimaryKeys": {},
160
- "uniqueConstraints": {},
161
- "checkConstraints": {}
162
- },
163
- "users": {
164
- "name": "users",
165
- "columns": {
166
- "id": {
167
- "name": "id",
168
- "type": "integer",
169
- "primaryKey": true,
170
- "notNull": true,
171
- "autoincrement": true
172
- },
173
- "username": {
174
- "name": "username",
175
- "type": "text",
176
- "primaryKey": false,
177
- "notNull": true,
178
- "autoincrement": false
179
- },
180
- "password_hash": {
181
- "name": "password_hash",
182
- "type": "text",
183
- "primaryKey": false,
184
- "notNull": true,
185
- "autoincrement": false
186
- },
187
- "role": {
188
- "name": "role",
189
- "type": "text",
190
- "primaryKey": false,
191
- "notNull": true,
192
- "autoincrement": false,
193
- "default": "'pending'"
194
- },
195
- "created_at": {
196
- "name": "created_at",
197
- "type": "text",
198
- "primaryKey": false,
199
- "notNull": true,
200
- "autoincrement": false,
201
- "default": "(datetime('now'))"
202
- }
203
- },
204
- "indexes": {
205
- "users_username_unique": {
206
- "name": "users_username_unique",
207
- "columns": ["username"],
208
- "isUnique": true
209
- }
210
- },
211
- "foreignKeys": {},
212
- "compositePrimaryKeys": {},
213
- "uniqueConstraints": {},
214
- "checkConstraints": {}
215
- }
216
- },
217
- "views": {},
218
- "enums": {},
219
- "_meta": {
220
- "schemas": {},
221
- "tables": {},
222
- "columns": {}
223
- },
224
- "internal": {
225
- "indexes": {}
226
- }
6
+ "tables": {}
227
7
  }