volute 0.30.1 → 0.31.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 (169) hide show
  1. package/dist/{accept-E3PAH3QJ.js → accept-GAKQ3MEH.js} +4 -4
  2. package/dist/{activity-events-BKBPPUBP.js → activity-events-T5ZRCVAL.js} +2 -2
  3. package/dist/{ai-service-VAJT5UBS.js → ai-service-UWUPM4T6.js} +5 -3
  4. package/dist/api.d.ts +238 -111
  5. package/dist/{archive-WWDBWYN2.js → archive-YBNSJYZZ.js} +2 -2
  6. package/dist/auth-T5AW2USD.js +43 -0
  7. package/dist/{bridge-RO37CUFM.js → bridge-4AJ3EY26.js} +4 -4
  8. package/dist/{chat-TCUNPFGO.js → chat-7YLT7FI3.js} +8 -8
  9. package/dist/{chunk-EFVHR7KH.js → chunk-4OUOFS23.js} +24 -5
  10. package/dist/{chunk-G3GBKZGG.js → chunk-57OKQMP3.js} +54 -2
  11. package/dist/chunk-6QIUN46C.js +38 -0
  12. package/dist/{chunk-FSM45XD5.js → chunk-AAO77TZX.js} +1 -1
  13. package/dist/{chunk-DTC6EH5I.js → chunk-BC3P3QCK.js} +1 -1
  14. package/dist/{chunk-P7VFDSSG.js → chunk-BNC43CSY.js} +2 -2
  15. package/dist/{chunk-QVAQ5454.js → chunk-BWKIHH7B.js} +3080 -2099
  16. package/dist/{chunk-IKHDUZRH.js → chunk-DAXJKPHZ.js} +2 -2
  17. package/dist/{chunk-P27RV5WM.js → chunk-EKDWA7E4.js} +3 -1
  18. package/dist/{chunk-S5LR3XYJ.js → chunk-EMPFLFTG.js} +1 -1
  19. package/dist/{chunk-2C2VXEBB.js → chunk-FAHDKPEH.js} +18 -56
  20. package/dist/{chunk-W5OOPLNP.js → chunk-HDKY4TWU.js} +3 -3
  21. package/dist/{chunk-EFP3PE6C.js → chunk-HR5JKIDG.js} +2 -12
  22. package/dist/{chunk-JGFRDMR6.js → chunk-LX6T3GKQ.js} +1 -1
  23. package/dist/{chunk-2NDZC3S7.js → chunk-NOWVQ7AL.js} +447 -299
  24. package/dist/{chunk-ZWKTUQEL.js → chunk-NV3TYNWX.js} +1 -1
  25. package/dist/{chunk-NSBFETWP.js → chunk-PNQCXLSV.js} +7 -26
  26. package/dist/chunk-R5QJBZZG.js +175 -0
  27. package/dist/{chunk-MDPCSXZ4.js → chunk-S2TZLSDH.js} +4 -4
  28. package/dist/{chunk-FXHXHI2A.js → chunk-SNVPRRT7.js} +3 -6
  29. package/dist/{chunk-UPA6COHU.js → chunk-WRS3B556.js} +5 -5
  30. package/dist/{chunk-HHTXM4JT.js → chunk-X62AXPR7.js} +36 -4
  31. package/dist/cli.js +74 -23
  32. package/dist/{clock-G3ALCMLJ.js → clock-LJCG426D.js} +10 -8
  33. package/dist/{cloud-sync-JV4LJOK3.js → cloud-sync-O3LXIRN6.js} +13 -13
  34. package/dist/{conversations-7KVQV7EZ.js → conversations-RKKGP5IA.js} +7 -7
  35. package/dist/{create-VQSQHJQW.js → create-TL623TFC.js} +1 -1
  36. package/dist/{create-JTLS7GX3.js → create-WUTIIRI2.js} +4 -4
  37. package/dist/daemon-client-CVGM25DM.js +11 -0
  38. package/dist/{daemon-restart-4JGBHEJ4.js → daemon-restart-EZP7XH3V.js} +6 -7
  39. package/dist/daemon.js +1879 -1727
  40. package/dist/{db-HMFPIRO2.js → db-SW5PL6QA.js} +1 -1
  41. package/dist/{delete-JESHKE7F.js → delete-Z6HAG35F.js} +1 -1
  42. package/dist/down-TS4XQBA4.js +13 -0
  43. package/dist/{env-CLXXT7M2.js → env-NHESNNSP.js} +4 -4
  44. package/dist/{export-EGA5M5PB.js → export-EVMP7GWY.js} +3 -3
  45. package/dist/{extension-WZ4SUPJB.js → extension-LR7EW3JF.js} +5 -6
  46. package/dist/{extensions-ECO4RPFQ.js → extensions-NGEJI7JH.js} +7 -7
  47. package/dist/{files-4VEJDASH.js → files-3SM7V33S.js} +5 -5
  48. package/dist/{history-EJMMLXDO.js → history-PQD3LXEP.js} +4 -4
  49. package/dist/{import-YCGPMBSI.js → import-PR2OCGQJ.js} +3 -3
  50. package/dist/{join-2GBJKZEN.js → join-R4EN5CWQ.js} +1 -1
  51. package/dist/{list-Q6O7FGAN.js → list-B4XNUOFO.js} +4 -4
  52. package/dist/{login-RL6AU2SM.js → login-62JVY6A2.js} +4 -4
  53. package/dist/{login-RET5WESK.js → login-URWP6S2N.js} +2 -2
  54. package/dist/{logout-CGAGJN3L.js → logout-NXJQJDLI.js} +2 -2
  55. package/dist/{logout-JRPBEMMR.js → logout-ZK2N62T3.js} +2 -2
  56. package/dist/message-delivery-UJHCLVU4.js +30 -0
  57. package/dist/{mind-LUWRQUQ5.js → mind-E2ZV2WRX.js} +17 -17
  58. package/dist/{mind-activity-tracker-VYN2ZZ2M.js → mind-activity-tracker-ASNZBMLC.js} +3 -3
  59. package/dist/{mind-list-V5WW5DUA.js → mind-list-BEI7E5WY.js} +2 -2
  60. package/dist/mind-manager-IPA6DZXD.js +26 -0
  61. package/dist/{mind-sleep-R6PTNNW4.js → mind-sleep-CANABWJI.js} +4 -4
  62. package/dist/{mind-status-I4ISFJ6I.js → mind-status-6WKZVUOP.js} +2 -2
  63. package/dist/{mind-wake-67ZQEWAV.js → mind-wake-RZKLH2IN.js} +4 -4
  64. package/dist/{package-OYUD4ZJ4.js → package-NU4CA7OU.js} +3 -3
  65. package/dist/{pages-watcher-Z3PKNROC.js → pages-watcher-72OVPRMH.js} +4 -3
  66. package/dist/read-THL362EI.js +74 -0
  67. package/dist/{register-NZDSTLP3.js → register-QAQELAS6.js} +4 -4
  68. package/dist/{registry-ODSALQQL.js → registry-ASXCQCNH.js} +1 -1
  69. package/dist/{reject-2HZOJEIJ.js → reject-AYPBNPNL.js} +4 -4
  70. package/dist/{restart-QHS3NT64.js → restart-6SKPV3T2.js} +4 -4
  71. package/dist/{sandbox-O5FUSF43.js → sandbox-6ZEWQDVU.js} +3 -3
  72. package/dist/{seed-WUQMPLDM.js → seed-OWX2AW75.js} +36 -12
  73. package/dist/{send-OAN3RYYY.js → send-ZO4BTWXK.js} +5 -5
  74. package/dist/{setup-QMDK5RZX.js → setup-7CFITEQN.js} +2 -4
  75. package/dist/{setup-XJH3E7YM.js → setup-ZXBXG7E4.js} +6 -8
  76. package/dist/{skill-FZIN4W4Q.js → skill-YFXP67A2.js} +4 -4
  77. package/dist/skills/dreaming/references/INSTALL.md +2 -3
  78. package/dist/skills/dreaming/scripts/dream.ts +3 -25
  79. package/dist/skills/volute-mind/SKILL.md +1 -1
  80. package/dist/sleep-manager-TPS6OGCA.js +30 -0
  81. package/dist/{split-EXYGGGQN.js → split-MI62KJUU.js} +1 -1
  82. package/dist/{sprout-AXQ6H5DB.js → sprout-FDVI2CGN.js} +5 -6
  83. package/dist/{start-MTOVL6SY.js → start-D64BRKPH.js} +4 -4
  84. package/dist/{status-ZRO37MWR.js → status-ZZWBYFGE.js} +4 -5
  85. package/dist/{stop-OK5WEPVC.js → stop-OP2CTXCO.js} +4 -4
  86. package/dist/system-chat-B43GIXQU.js +30 -0
  87. package/dist/{systems-W3BBMSOZ.js → systems-EQPPT4B7.js} +5 -5
  88. package/dist/{tailscale-BM72RXCJ.js → tailscale-6DJKUMNF.js} +1 -1
  89. package/dist/up-TDXEP3VA.js +16 -0
  90. package/dist/{update-PLPHMMZ2.js → update-KUJXATRS.js} +4 -5
  91. package/dist/{update-check-CVCN7MF6.js → update-check-5WVSU37T.js} +2 -2
  92. package/dist/{upgrade-I6NPCYUU.js → upgrade-KBHCWX6T.js} +1 -1
  93. package/dist/{version-notify-2NTWVEHL.js → version-notify-75ELVKPV.js} +17 -21
  94. package/dist/web-assets/assets/index-BM1cTzBg.js +72 -0
  95. package/dist/web-assets/assets/index-BfJkKTPF.css +1 -0
  96. package/dist/web-assets/ext-theme.css +1 -0
  97. package/dist/web-assets/index.html +2 -2
  98. package/drizzle/0000_baseline.sql +152 -0
  99. package/drizzle/0001_add_conversation_private.sql +1 -0
  100. package/drizzle/0002_turns.sql +21 -0
  101. package/drizzle/0003_turn_feed_links.sql +11 -0
  102. package/drizzle/meta/0000_snapshot.json +3 -223
  103. package/drizzle/meta/0001_snapshot.json +3 -294
  104. package/drizzle/meta/0002_snapshot.json +3 -335
  105. package/drizzle/meta/0003_snapshot.json +3 -413
  106. package/drizzle/meta/_journal.json +8 -106
  107. package/package.json +3 -3
  108. package/packages/extensions/notes/dist/ui/assets/{index-DgawVO5g.css → index-B8GdTnXs.css} +1 -1
  109. package/packages/extensions/notes/dist/ui/assets/index-CDpGTCWb.js +2 -0
  110. package/packages/extensions/notes/dist/ui/index.html +2 -2
  111. package/packages/extensions/notes/skills/notes/SKILL.md +8 -8
  112. package/packages/extensions/pages/skills/pages/SKILL.md +7 -4
  113. package/packages/extensions/pages/skills/pages/scripts/pages.mjs +58 -0
  114. package/templates/_base/.init/.config/bin/volute +27 -0
  115. package/templates/_base/src/lib/auto-commit.ts +82 -43
  116. package/templates/_base/src/lib/daemon-client.ts +19 -23
  117. package/templates/_base/src/lib/router.ts +17 -1
  118. package/templates/_base/src/lib/startup.ts +6 -8
  119. package/templates/_base/src/lib/volute-server.ts +2 -5
  120. package/templates/claude/src/agent.ts +2 -1
  121. package/templates/claude/src/lib/hooks/auto-commit.ts +7 -3
  122. package/templates/claude/src/server.ts +0 -9
  123. package/templates/pi/package.json.tmpl +1 -1
  124. package/templates/pi/src/agent.ts +1 -1
  125. package/templates/pi/src/lib/event-handler.ts +5 -3
  126. package/dist/chunk-7D47T4RB.js +0 -84
  127. package/dist/chunk-CVH6Y2YG.js +0 -59
  128. package/dist/chunk-LIRWLNAK.js +0 -729
  129. package/dist/daemon-client-BCTFGVCZ.js +0 -9
  130. package/dist/down-NGBMGORS.js +0 -14
  131. package/dist/message-delivery-6YMVNOEC.js +0 -28
  132. package/dist/migrate-registry-to-db-FK35IPEH.js +0 -110
  133. package/dist/mind-manager-YFCOIAAX.js +0 -18
  134. package/dist/read-WQMPTSN2.js +0 -46
  135. package/dist/sleep-manager-O7YQFCV5.js +0 -30
  136. package/dist/up-BXUAIDXB.js +0 -17
  137. package/dist/web-assets/assets/index--kREqKl9.js +0 -72
  138. package/dist/web-assets/assets/index-BXYTG0nJ.css +0 -1
  139. package/drizzle/0000_flaky_mariko_yashida.sql +0 -34
  140. package/drizzle/0001_careless_warpath.sql +0 -12
  141. package/drizzle/0002_wealthy_the_call.sql +0 -6
  142. package/drizzle/0003_clean_ego.sql +0 -12
  143. package/drizzle/0004_magical_silverclaw.sql +0 -1
  144. package/drizzle/0005_rename_agents_to_minds.sql +0 -11
  145. package/drizzle/0006_mind_history.sql +0 -20
  146. package/drizzle/0007_system_prompts.sql +0 -5
  147. package/drizzle/0008_volute_channels.sql +0 -24
  148. package/drizzle/0009_shared_skills.sql +0 -9
  149. package/drizzle/0010_delivery_queue.sql +0 -12
  150. package/drizzle/0011_rename_human_to_brain.sql +0 -1
  151. package/drizzle/0012_activity.sql +0 -11
  152. package/drizzle/0013_user_profiles.sql +0 -3
  153. package/drizzle/0014_conversation_reads.sql +0 -7
  154. package/drizzle/0015_notes.sql +0 -23
  155. package/drizzle/0016_note_reactions_and_replies.sql +0 -15
  156. package/drizzle/0017_minds.sql +0 -16
  157. package/drizzle/meta/0004_snapshot.json +0 -410
  158. package/drizzle/meta/0005_snapshot.json +0 -410
  159. package/drizzle/meta/0006_snapshot.json +0 -7
  160. package/drizzle/meta/0007_snapshot.json +0 -7
  161. package/drizzle/meta/0008_snapshot.json +0 -7
  162. package/drizzle/meta/0009_snapshot.json +0 -7
  163. package/drizzle/meta/0010_snapshot.json +0 -7
  164. package/drizzle/meta/0011_snapshot.json +0 -7
  165. package/drizzle/meta/0012_snapshot.json +0 -7
  166. package/drizzle/meta/0013_snapshot.json +0 -7
  167. package/packages/extensions/notes/dist/ui/assets/index-qUWoeC4c.js +0 -2
  168. package/packages/extensions/notes/skills/notes/scripts/notes.mjs +0 -185
  169. package/templates/_base/home/public/.gitkeep +0 -0
@@ -1,417 +1,7 @@
1
1
  {
2
+ "id": "0003_turn_feed_links",
3
+ "prevId": "0002_turns",
2
4
  "version": "6",
3
5
  "dialect": "sqlite",
4
- "id": "b96d5915-4500-42f4-8638-28f0526d41f0",
5
- "prevId": "b76b7e15-3489-4a1d-ac23-977cf267d174",
6
- "tables": {
7
- "agent_messages": {
8
- "name": "agent_messages",
9
- "columns": {
10
- "id": {
11
- "name": "id",
12
- "type": "integer",
13
- "primaryKey": true,
14
- "notNull": true,
15
- "autoincrement": true
16
- },
17
- "agent": {
18
- "name": "agent",
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
- "role": {
32
- "name": "role",
33
- "type": "text",
34
- "primaryKey": false,
35
- "notNull": true,
36
- "autoincrement": false
37
- },
38
- "sender": {
39
- "name": "sender",
40
- "type": "text",
41
- "primaryKey": false,
42
- "notNull": false,
43
- "autoincrement": false
44
- },
45
- "content": {
46
- "name": "content",
47
- "type": "text",
48
- "primaryKey": false,
49
- "notNull": true,
50
- "autoincrement": false
51
- },
52
- "created_at": {
53
- "name": "created_at",
54
- "type": "text",
55
- "primaryKey": false,
56
- "notNull": true,
57
- "autoincrement": false,
58
- "default": "(datetime('now'))"
59
- }
60
- },
61
- "indexes": {
62
- "idx_agent_messages_agent": {
63
- "name": "idx_agent_messages_agent",
64
- "columns": ["agent"],
65
- "isUnique": false
66
- },
67
- "idx_agent_messages_channel": {
68
- "name": "idx_agent_messages_channel",
69
- "columns": ["agent", "channel"],
70
- "isUnique": false
71
- }
72
- },
73
- "foreignKeys": {},
74
- "compositePrimaryKeys": {},
75
- "uniqueConstraints": {},
76
- "checkConstraints": {}
77
- },
78
- "conversation_participants": {
79
- "name": "conversation_participants",
80
- "columns": {
81
- "conversation_id": {
82
- "name": "conversation_id",
83
- "type": "text",
84
- "primaryKey": false,
85
- "notNull": true,
86
- "autoincrement": false
87
- },
88
- "user_id": {
89
- "name": "user_id",
90
- "type": "integer",
91
- "primaryKey": false,
92
- "notNull": true,
93
- "autoincrement": false
94
- },
95
- "role": {
96
- "name": "role",
97
- "type": "text",
98
- "primaryKey": false,
99
- "notNull": true,
100
- "autoincrement": false,
101
- "default": "'member'"
102
- },
103
- "joined_at": {
104
- "name": "joined_at",
105
- "type": "text",
106
- "primaryKey": false,
107
- "notNull": true,
108
- "autoincrement": false,
109
- "default": "(datetime('now'))"
110
- }
111
- },
112
- "indexes": {
113
- "idx_cp_unique": {
114
- "name": "idx_cp_unique",
115
- "columns": ["conversation_id", "user_id"],
116
- "isUnique": true
117
- },
118
- "idx_cp_user_id": {
119
- "name": "idx_cp_user_id",
120
- "columns": ["user_id"],
121
- "isUnique": false
122
- }
123
- },
124
- "foreignKeys": {
125
- "conversation_participants_conversation_id_conversations_id_fk": {
126
- "name": "conversation_participants_conversation_id_conversations_id_fk",
127
- "tableFrom": "conversation_participants",
128
- "tableTo": "conversations",
129
- "columnsFrom": ["conversation_id"],
130
- "columnsTo": ["id"],
131
- "onDelete": "cascade",
132
- "onUpdate": "no action"
133
- },
134
- "conversation_participants_user_id_users_id_fk": {
135
- "name": "conversation_participants_user_id_users_id_fk",
136
- "tableFrom": "conversation_participants",
137
- "tableTo": "users",
138
- "columnsFrom": ["user_id"],
139
- "columnsTo": ["id"],
140
- "onDelete": "cascade",
141
- "onUpdate": "no action"
142
- }
143
- },
144
- "compositePrimaryKeys": {},
145
- "uniqueConstraints": {},
146
- "checkConstraints": {}
147
- },
148
- "conversations": {
149
- "name": "conversations",
150
- "columns": {
151
- "id": {
152
- "name": "id",
153
- "type": "text",
154
- "primaryKey": true,
155
- "notNull": true,
156
- "autoincrement": false
157
- },
158
- "agent_name": {
159
- "name": "agent_name",
160
- "type": "text",
161
- "primaryKey": false,
162
- "notNull": true,
163
- "autoincrement": false
164
- },
165
- "channel": {
166
- "name": "channel",
167
- "type": "text",
168
- "primaryKey": false,
169
- "notNull": true,
170
- "autoincrement": false
171
- },
172
- "user_id": {
173
- "name": "user_id",
174
- "type": "integer",
175
- "primaryKey": false,
176
- "notNull": false,
177
- "autoincrement": false
178
- },
179
- "title": {
180
- "name": "title",
181
- "type": "text",
182
- "primaryKey": false,
183
- "notNull": false,
184
- "autoincrement": false
185
- },
186
- "created_at": {
187
- "name": "created_at",
188
- "type": "text",
189
- "primaryKey": false,
190
- "notNull": true,
191
- "autoincrement": false,
192
- "default": "(datetime('now'))"
193
- },
194
- "updated_at": {
195
- "name": "updated_at",
196
- "type": "text",
197
- "primaryKey": false,
198
- "notNull": true,
199
- "autoincrement": false,
200
- "default": "(datetime('now'))"
201
- }
202
- },
203
- "indexes": {
204
- "idx_conversations_agent_name": {
205
- "name": "idx_conversations_agent_name",
206
- "columns": ["agent_name"],
207
- "isUnique": false
208
- },
209
- "idx_conversations_user_id": {
210
- "name": "idx_conversations_user_id",
211
- "columns": ["user_id"],
212
- "isUnique": false
213
- },
214
- "idx_conversations_updated_at": {
215
- "name": "idx_conversations_updated_at",
216
- "columns": ["updated_at"],
217
- "isUnique": false
218
- }
219
- },
220
- "foreignKeys": {
221
- "conversations_user_id_users_id_fk": {
222
- "name": "conversations_user_id_users_id_fk",
223
- "tableFrom": "conversations",
224
- "tableTo": "users",
225
- "columnsFrom": ["user_id"],
226
- "columnsTo": ["id"],
227
- "onDelete": "no action",
228
- "onUpdate": "no action"
229
- }
230
- },
231
- "compositePrimaryKeys": {},
232
- "uniqueConstraints": {},
233
- "checkConstraints": {}
234
- },
235
- "messages": {
236
- "name": "messages",
237
- "columns": {
238
- "id": {
239
- "name": "id",
240
- "type": "integer",
241
- "primaryKey": true,
242
- "notNull": true,
243
- "autoincrement": true
244
- },
245
- "conversation_id": {
246
- "name": "conversation_id",
247
- "type": "text",
248
- "primaryKey": false,
249
- "notNull": true,
250
- "autoincrement": false
251
- },
252
- "role": {
253
- "name": "role",
254
- "type": "text",
255
- "primaryKey": false,
256
- "notNull": true,
257
- "autoincrement": false
258
- },
259
- "sender_name": {
260
- "name": "sender_name",
261
- "type": "text",
262
- "primaryKey": false,
263
- "notNull": false,
264
- "autoincrement": false
265
- },
266
- "content": {
267
- "name": "content",
268
- "type": "text",
269
- "primaryKey": false,
270
- "notNull": true,
271
- "autoincrement": false
272
- },
273
- "created_at": {
274
- "name": "created_at",
275
- "type": "text",
276
- "primaryKey": false,
277
- "notNull": true,
278
- "autoincrement": false,
279
- "default": "(datetime('now'))"
280
- }
281
- },
282
- "indexes": {
283
- "idx_messages_conversation_id": {
284
- "name": "idx_messages_conversation_id",
285
- "columns": ["conversation_id"],
286
- "isUnique": false
287
- }
288
- },
289
- "foreignKeys": {
290
- "messages_conversation_id_conversations_id_fk": {
291
- "name": "messages_conversation_id_conversations_id_fk",
292
- "tableFrom": "messages",
293
- "tableTo": "conversations",
294
- "columnsFrom": ["conversation_id"],
295
- "columnsTo": ["id"],
296
- "onDelete": "cascade",
297
- "onUpdate": "no action"
298
- }
299
- },
300
- "compositePrimaryKeys": {},
301
- "uniqueConstraints": {},
302
- "checkConstraints": {}
303
- },
304
- "sessions": {
305
- "name": "sessions",
306
- "columns": {
307
- "id": {
308
- "name": "id",
309
- "type": "text",
310
- "primaryKey": true,
311
- "notNull": true,
312
- "autoincrement": false
313
- },
314
- "user_id": {
315
- "name": "user_id",
316
- "type": "integer",
317
- "primaryKey": false,
318
- "notNull": true,
319
- "autoincrement": false
320
- },
321
- "created_at": {
322
- "name": "created_at",
323
- "type": "integer",
324
- "primaryKey": false,
325
- "notNull": true,
326
- "autoincrement": false
327
- }
328
- },
329
- "indexes": {},
330
- "foreignKeys": {
331
- "sessions_user_id_users_id_fk": {
332
- "name": "sessions_user_id_users_id_fk",
333
- "tableFrom": "sessions",
334
- "tableTo": "users",
335
- "columnsFrom": ["user_id"],
336
- "columnsTo": ["id"],
337
- "onDelete": "cascade",
338
- "onUpdate": "no action"
339
- }
340
- },
341
- "compositePrimaryKeys": {},
342
- "uniqueConstraints": {},
343
- "checkConstraints": {}
344
- },
345
- "users": {
346
- "name": "users",
347
- "columns": {
348
- "id": {
349
- "name": "id",
350
- "type": "integer",
351
- "primaryKey": true,
352
- "notNull": true,
353
- "autoincrement": true
354
- },
355
- "username": {
356
- "name": "username",
357
- "type": "text",
358
- "primaryKey": false,
359
- "notNull": true,
360
- "autoincrement": false
361
- },
362
- "password_hash": {
363
- "name": "password_hash",
364
- "type": "text",
365
- "primaryKey": false,
366
- "notNull": true,
367
- "autoincrement": false
368
- },
369
- "role": {
370
- "name": "role",
371
- "type": "text",
372
- "primaryKey": false,
373
- "notNull": true,
374
- "autoincrement": false,
375
- "default": "'pending'"
376
- },
377
- "user_type": {
378
- "name": "user_type",
379
- "type": "text",
380
- "primaryKey": false,
381
- "notNull": true,
382
- "autoincrement": false,
383
- "default": "'human'"
384
- },
385
- "created_at": {
386
- "name": "created_at",
387
- "type": "text",
388
- "primaryKey": false,
389
- "notNull": true,
390
- "autoincrement": false,
391
- "default": "(datetime('now'))"
392
- }
393
- },
394
- "indexes": {
395
- "users_username_unique": {
396
- "name": "users_username_unique",
397
- "columns": ["username"],
398
- "isUnique": true
399
- }
400
- },
401
- "foreignKeys": {},
402
- "compositePrimaryKeys": {},
403
- "uniqueConstraints": {},
404
- "checkConstraints": {}
405
- }
406
- },
407
- "views": {},
408
- "enums": {},
409
- "_meta": {
410
- "schemas": {},
411
- "tables": {},
412
- "columns": {}
413
- },
414
- "internal": {
415
- "indexes": {}
416
- }
6
+ "tables": {}
417
7
  }
@@ -5,127 +5,29 @@
5
5
  {
6
6
  "idx": 0,
7
7
  "version": "6",
8
- "when": 1770339392813,
9
- "tag": "0000_flaky_mariko_yashida",
8
+ "when": 1772600000000,
9
+ "tag": "0000_baseline",
10
10
  "breakpoints": true
11
11
  },
12
12
  {
13
13
  "idx": 1,
14
14
  "version": "6",
15
- "when": 1770403902722,
16
- "tag": "0001_careless_warpath",
15
+ "when": 1773700000000,
16
+ "tag": "0001_add_conversation_private",
17
17
  "breakpoints": true
18
18
  },
19
19
  {
20
20
  "idx": 2,
21
21
  "version": "6",
22
- "when": 1770672071268,
23
- "tag": "0002_wealthy_the_call",
22
+ "when": 1773800000000,
23
+ "tag": "0002_turns",
24
24
  "breakpoints": true
25
25
  },
26
26
  {
27
27
  "idx": 3,
28
28
  "version": "6",
29
- "when": 1770770603615,
30
- "tag": "0003_clean_ego",
31
- "breakpoints": true
32
- },
33
- {
34
- "idx": 4,
35
- "version": "6",
36
- "when": 1771037065968,
37
- "tag": "0004_magical_silverclaw",
38
- "breakpoints": true
39
- },
40
- {
41
- "idx": 5,
42
- "version": "6",
43
- "when": 1771200000000,
44
- "tag": "0005_rename_agents_to_minds",
45
- "breakpoints": true
46
- },
47
- {
48
- "idx": 6,
49
- "version": "6",
50
- "when": 1771400000000,
51
- "tag": "0006_mind_history",
52
- "breakpoints": true
53
- },
54
- {
55
- "idx": 7,
56
- "version": "6",
57
- "when": 1771600000000,
58
- "tag": "0007_system_prompts",
59
- "breakpoints": true
60
- },
61
- {
62
- "idx": 8,
63
- "version": "6",
64
- "when": 1771700000000,
65
- "tag": "0008_volute_channels",
66
- "breakpoints": true
67
- },
68
- {
69
- "idx": 9,
70
- "version": "6",
71
- "when": 1771800000000,
72
- "tag": "0009_shared_skills",
73
- "breakpoints": true
74
- },
75
- {
76
- "idx": 10,
77
- "version": "6",
78
- "when": 1771900000000,
79
- "tag": "0010_delivery_queue",
80
- "breakpoints": true
81
- },
82
- {
83
- "idx": 11,
84
- "version": "6",
85
- "when": 1772000000000,
86
- "tag": "0011_rename_human_to_brain",
87
- "breakpoints": true
88
- },
89
- {
90
- "idx": 12,
91
- "version": "6",
92
- "when": 1772100000000,
93
- "tag": "0012_activity",
94
- "breakpoints": true
95
- },
96
- {
97
- "idx": 13,
98
- "version": "6",
99
- "when": 1772200000000,
100
- "tag": "0013_user_profiles",
101
- "breakpoints": true
102
- },
103
- {
104
- "idx": 14,
105
- "version": "6",
106
- "when": 1772300000000,
107
- "tag": "0014_conversation_reads",
108
- "breakpoints": true
109
- },
110
- {
111
- "idx": 15,
112
- "version": "6",
113
- "when": 1772400000000,
114
- "tag": "0015_notes",
115
- "breakpoints": true
116
- },
117
- {
118
- "idx": 16,
119
- "version": "6",
120
- "when": 1772500000000,
121
- "tag": "0016_note_reactions_and_replies",
122
- "breakpoints": true
123
- },
124
- {
125
- "idx": 17,
126
- "version": "6",
127
- "when": 1772600000000,
128
- "tag": "0017_minds",
29
+ "when": 1774800000000,
30
+ "tag": "0003_turn_feed_links",
129
31
  "breakpoints": true
130
32
  }
131
33
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "volute",
3
- "version": "0.30.1",
3
+ "version": "0.31.0",
4
4
  "description": "CLI for creating and managing self-modifying AI minds powered by the Claude Agent SDK",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -66,6 +66,7 @@
66
66
  "@hono/node-server": "^1.19.9",
67
67
  "@hono/zod-validator": "^0.7.6",
68
68
  "@libsql/client": "^0.17.0",
69
+ "@mariozechner/pi-ai": "^0.58.1",
69
70
  "@slack/bolt": "^4.6.0",
70
71
  "adm-zip": "^0.5.16",
71
72
  "bcryptjs": "^3.0.3",
@@ -75,13 +76,12 @@
75
76
  "hono": "^4.11.7",
76
77
  "libsql": "^0.5.22",
77
78
  "telegraf": "^4.16.3",
78
- "@mariozechner/pi-ai": "^0.52.7",
79
79
  "zod": "^4.3.6"
80
80
  },
81
81
  "devDependencies": {
82
82
  "@anthropic-ai/claude-agent-sdk": "^0.2.34",
83
83
  "@biomejs/biome": "2.3.14",
84
- "@mariozechner/pi-coding-agent": "^0.52.7",
84
+ "@mariozechner/pi-coding-agent": "^0.58.1",
85
85
  "@sveltejs/vite-plugin-svelte": "^6.2.4",
86
86
  "@types/adm-zip": "^0.5.7",
87
87
  "@types/bcryptjs": "^2.4.6",
@@ -1 +1 @@
1
- .comment-section.svelte-1ku848x{display:flex;flex-direction:column;gap:12px}.section-header.svelte-1ku848x{font-family:var(--sans);font-size:14px;font-weight:500;color:var(--text-1);margin:0}.comment-list.svelte-1ku848x{display:flex;flex-direction:column;gap:10px}.comment.svelte-1ku848x{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px}.comment-header.svelte-1ku848x{display:flex;align-items:baseline;gap:8px;margin-bottom:4px}.author.svelte-1ku848x{font-size:13px;font-weight:500;color:var(--accent)}.date.svelte-1ku848x{font-size:12px;color:var(--text-2)}.delete-btn.svelte-1ku848x{margin-left:auto;background:none;border:none;font-size:12px;color:var(--text-2);cursor:pointer;padding:0;transition:color .15s}.delete-btn.svelte-1ku848x:hover{color:#e55}.comment-body.svelte-1ku848x{font-size:14px;color:var(--text-0);white-space:pre-wrap;word-break:break-word}.compose.svelte-1ku848x{display:flex;gap:8px}.compose-input.svelte-1ku848x{flex:1;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);padding:8px 12px;color:var(--text-0);font-family:var(--sans);font-size:14px;resize:none;outline:none;transition:border-color .15s}.compose-input.svelte-1ku848x:focus{border-color:var(--border-bright)}.submit-btn.svelte-1ku848x{padding:0 14px;background:var(--bg-3);color:var(--text-2);border:none;border-radius:var(--radius);font-size:13px;font-weight:500;cursor:pointer;transition:all .15s;align-self:flex-end}.submit-btn.active.svelte-1ku848x{background:var(--accent-dim);color:var(--accent)}.submit-btn.svelte-1ku848x:disabled{cursor:default}.note-view.svelte-1n5zw0o{max-width:640px;margin:0 auto}.back-btn.svelte-1n5zw0o{background:none;border:none;color:var(--text-2);font-size:13px;cursor:pointer;padding:0;margin-bottom:16px}.back-btn.svelte-1n5zw0o:hover{color:var(--text-1)}.error.svelte-1n5zw0o{font-size:13px;color:var(--red);margin-bottom:12px}.status.svelte-1n5zw0o{color:var(--text-2);font-size:14px;padding:32px 0;text-align:center}.note.svelte-1n5zw0o{margin-bottom:32px}.reply-to-link.svelte-1n5zw0o{background:none;border:none;font-size:13px;color:var(--text-2);cursor:pointer;padding:0;margin-bottom:16px;display:block;text-align:left}.reply-to-link.svelte-1n5zw0o:hover{color:var(--accent)}.reply-arrow.svelte-1n5zw0o{opacity:.6}.reply-ref.svelte-1n5zw0o{color:var(--text-1);font-style:italic}.reply-to-link.svelte-1n5zw0o:hover .reply-ref:where(.svelte-1n5zw0o){color:var(--accent)}.title.svelte-1n5zw0o{font-family:var(--display);font-size:26px;font-weight:400;color:var(--text-0);margin:0 0 10px;line-height:1.3;letter-spacing:-.01em}.meta.svelte-1n5zw0o{display:flex;align-items:baseline;gap:6px}.author.svelte-1n5zw0o{font-size:14px;color:var(--text-1);font-weight:500}.sep.svelte-1n5zw0o{color:var(--text-2);font-size:12px}.date.svelte-1n5zw0o{font-size:13px;color:var(--text-2)}.divider.svelte-1n5zw0o{height:1px;background:var(--border);margin:16px 0 20px}.content.svelte-1n5zw0o{font-size:15px;color:var(--text-0);line-height:1.7;white-space:pre-wrap;word-break:break-word}.reactions-bar.svelte-1n5zw0o{display:flex;gap:6px;margin-top:20px;flex-wrap:wrap;align-items:center}.reaction-pill.svelte-1n5zw0o{font-size:13px;padding:4px 10px;background:var(--bg-3);border:1px solid var(--border);border-radius:14px;color:var(--text-1);cursor:pointer;transition:all .15s}.reaction-pill.svelte-1n5zw0o:hover{border-color:var(--border-bright)}.reaction-pill.active.svelte-1n5zw0o{border-color:var(--accent-border);background:var(--accent-dim)}.add-reaction.svelte-1n5zw0o{color:var(--text-2);font-size:14px}.emoji-form.svelte-1n5zw0o{display:inline-flex}.emoji-input.svelte-1n5zw0o{width:60px;padding:4px 8px;background:var(--bg-3);border:1px solid var(--border);border-radius:14px;color:var(--text-0);font-size:13px;outline:none}.emoji-input.svelte-1n5zw0o:focus{border-color:var(--accent)}.replies-section.svelte-1n5zw0o{border-top:1px solid var(--border);padding-top:20px;margin-bottom:24px}.section-title.svelte-1n5zw0o{font-size:13px;font-weight:500;color:var(--text-2);text-transform:uppercase;letter-spacing:.04em;margin:0 0 12px}.reply-card.svelte-1n5zw0o{display:block;width:100%;text-align:left;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);padding:10px 14px;cursor:pointer;margin-bottom:6px;transition:border-color .15s}.reply-card.svelte-1n5zw0o:hover{border-color:var(--border-bright)}.reply-title.svelte-1n5zw0o{font-size:14px;color:var(--text-0);display:block;margin-bottom:2px}.reply-meta.svelte-1n5zw0o{font-size:12px;color:var(--text-2)}.comments-section.svelte-1n5zw0o{border-top:1px solid var(--border);padding-top:20px}.card.svelte-1hapkk3{display:block;width:100%;padding:20px;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius-lg);cursor:pointer;transition:all .15s ease;text-align:left;font-family:var(--sans)}.card.svelte-1hapkk3:hover{border-color:var(--border-bright)}.reply-indicator.svelte-1hapkk3{font-size:12px;color:var(--text-2);margin-bottom:6px}.header.svelte-1hapkk3{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:8px}.title.svelte-1hapkk3{font-family:var(--display);font-size:17px;font-weight:400;color:var(--text-0);margin:0}.date.svelte-1hapkk3{font-size:12px;color:var(--text-2);white-space:nowrap;flex-shrink:0}.excerpt.svelte-1hapkk3{font-size:14px;color:var(--text-1);margin:0 0 12px;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;line-height:1.5}.meta.svelte-1hapkk3{display:flex;align-items:center;gap:16px;font-size:13px}.author.svelte-1hapkk3{color:var(--accent)}.comments.svelte-1hapkk3{color:var(--text-2)}.reactions.svelte-1hapkk3{display:flex;gap:6px;margin-top:10px;flex-wrap:wrap}.reaction-pill.svelte-1hapkk3{font-size:12px;padding:2px 8px;background:var(--bg-3);border:1px solid var(--border);border-radius:12px;color:var(--text-1)}.notes-page.svelte-vh096i{max-width:700px;margin:0 auto}.page-header.svelte-vh096i{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px}.page-title.svelte-vh096i{font-family:var(--display);font-size:22px;font-weight:400;color:var(--text-0);margin:0}.note-form.svelte-vh096i{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius-lg);padding:16px;margin-bottom:20px;display:flex;flex-direction:column;gap:10px}.form-input.svelte-vh096i{width:100%;padding:8px 12px;background:var(--bg-3);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-0);font-size:14px;outline:none;box-sizing:border-box}.form-input.svelte-vh096i:focus{border-color:var(--accent)}.form-textarea.svelte-vh096i{width:100%;padding:8px 12px;background:var(--bg-3);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-0);font-size:14px;line-height:1.5;resize:vertical;outline:none;box-sizing:border-box}.form-textarea.svelte-vh096i:focus{border-color:var(--accent)}.form-actions.svelte-vh096i{display:flex;justify-content:flex-end}.btn.svelte-vh096i{font-size:13px;padding:6px 14px;border-radius:var(--radius);cursor:pointer;border:1px solid transparent;transition:opacity .15s}.btn.svelte-vh096i:disabled{opacity:.5;cursor:not-allowed}.btn-write.svelte-vh096i{background:var(--accent-dim);color:var(--accent);border-color:var(--accent-border)}.btn-write.svelte-vh096i:hover{border-color:var(--accent)}.btn-submit.svelte-vh096i{background:var(--accent-dim);color:var(--accent);border-color:var(--accent-border)}.btn-submit.svelte-vh096i:hover:not(:disabled){border-color:var(--accent)}.error.svelte-vh096i{color:var(--red);font-size:13px;margin-bottom:16px}.loading.svelte-vh096i,.empty.svelte-vh096i{color:var(--text-2);font-size:13px;padding:40px 0;text-align:center}.notes-list.svelte-vh096i{display:flex;flex-direction:column;gap:10px}.ext-app.svelte-1r8vfx3{padding:24px;max-width:100%;min-height:100%;animation:fadeIn .2s ease both}
1
+ .comment-section.svelte-1ku848x{display:flex;flex-direction:column;gap:12px}.section-header.svelte-1ku848x{font-family:var(--sans);font-size:14px;font-weight:500;color:var(--text-1);margin:0}.comment-list.svelte-1ku848x{display:flex;flex-direction:column;gap:10px}.comment.svelte-1ku848x{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px}.comment-header.svelte-1ku848x{display:flex;align-items:baseline;gap:8px;margin-bottom:4px}.author.svelte-1ku848x{font-size:13px;font-weight:500;color:var(--accent)}.date.svelte-1ku848x{font-size:12px;color:var(--text-2)}.delete-btn.svelte-1ku848x{margin-left:auto;background:none;border:none;font-size:12px;color:var(--text-2);cursor:pointer;padding:0;transition:color .15s}.delete-btn.svelte-1ku848x:hover{color:#e55}.comment-body.svelte-1ku848x{font-size:14px;color:var(--text-0);white-space:pre-wrap;word-break:break-word}.compose.svelte-1ku848x{display:flex;gap:10px;align-items:flex-start}.compose-avatar.svelte-1ku848x{flex-shrink:0;width:32px;height:32px;margin-top:2px}.avatar-img.svelte-1ku848x{width:32px;height:32px;border-radius:50%;object-fit:cover}.avatar-fallback.svelte-1ku848x{width:32px;height:32px;border-radius:50%;background:var(--bg-3);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;color:var(--text-2)}.compose-box.svelte-1ku848x{flex:1;display:flex;flex-direction:column;gap:6px}.compose-input.svelte-1ku848x{width:100%;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius-lg);padding:8px 12px;color:var(--text-0);font-family:var(--sans);font-size:14px;resize:none;outline:none;transition:border-color .15s;box-sizing:border-box}.compose-input.svelte-1ku848x:focus{border-color:var(--border-bright)}.compose-footer.svelte-1ku848x{display:flex;justify-content:flex-end}.submit-btn.svelte-1ku848x{display:inline-flex;align-items:center;gap:5px;padding:5px 12px;background:var(--bg-3);color:var(--text-2);border:none;border-radius:var(--radius);font-size:13px;font-weight:500;cursor:pointer;transition:all .15s}.submit-btn.active.svelte-1ku848x{background:var(--accent-dim);color:var(--accent)}.submit-btn.svelte-1ku848x:disabled{cursor:default;opacity:.5}.note-view.svelte-1n5zw0o{max-width:640px;margin:0 auto}.back-btn.svelte-1n5zw0o{background:none;border:none;color:var(--text-2);font-size:13px;cursor:pointer;padding:0;margin-bottom:16px}.back-btn.svelte-1n5zw0o:hover{color:var(--text-1)}.error.svelte-1n5zw0o{font-size:13px;color:var(--red);margin-bottom:12px}.status.svelte-1n5zw0o{color:var(--text-2);font-size:14px;padding:32px 0;text-align:center}.note.svelte-1n5zw0o{margin-bottom:32px}.reply-to-link.svelte-1n5zw0o{background:none;border:none;font-size:13px;color:var(--text-2);cursor:pointer;padding:0;margin-bottom:16px;display:block;text-align:left}.reply-to-link.svelte-1n5zw0o:hover{color:var(--accent)}.reply-arrow.svelte-1n5zw0o{opacity:.6}.reply-ref.svelte-1n5zw0o{color:var(--text-1);font-style:italic}.reply-to-link.svelte-1n5zw0o:hover .reply-ref:where(.svelte-1n5zw0o){color:var(--accent)}.title.svelte-1n5zw0o{font-family:var(--display);font-size:26px;font-weight:400;color:var(--text-0);margin:0 0 10px;line-height:1.3;letter-spacing:-.01em}.meta.svelte-1n5zw0o{display:flex;align-items:baseline;gap:6px}.author.svelte-1n5zw0o{font-size:14px;color:var(--text-1);font-weight:500}.sep.svelte-1n5zw0o{color:var(--text-2);font-size:12px}.date.svelte-1n5zw0o{font-size:13px;color:var(--text-2)}.divider.svelte-1n5zw0o{height:1px;background:var(--border);margin:16px 0 20px}.content.svelte-1n5zw0o{font-size:15px;color:var(--text-0);line-height:1.7;white-space:pre-wrap;word-break:break-word}.reactions-bar.svelte-1n5zw0o{display:flex;gap:6px;margin-top:20px;flex-wrap:wrap;align-items:center}.reaction-pill.svelte-1n5zw0o{font-size:13px;padding:4px 10px;background:var(--bg-3);border:1px solid var(--border);border-radius:14px;color:var(--text-1);cursor:pointer;transition:all .15s}.reaction-pill.svelte-1n5zw0o:hover{border-color:var(--border-bright)}.reaction-pill.active.svelte-1n5zw0o{border-color:var(--accent-border);background:var(--accent-dim)}.add-reaction.svelte-1n5zw0o{color:var(--text-2);display:inline-flex;align-items:center;justify-content:center;padding:4px 8px}.emoji-form.svelte-1n5zw0o{display:inline-flex}.emoji-input.svelte-1n5zw0o{width:60px;padding:4px 8px;background:var(--bg-3);border:1px solid var(--border);border-radius:14px;color:var(--text-0);font-size:13px;outline:none}.emoji-input.svelte-1n5zw0o:focus{border-color:var(--accent)}.replies-section.svelte-1n5zw0o{border-top:1px solid var(--border);padding-top:20px;margin-bottom:24px}.section-title.svelte-1n5zw0o{font-size:13px;font-weight:500;color:var(--text-2);text-transform:uppercase;letter-spacing:.04em;margin:0 0 12px}.reply-card.svelte-1n5zw0o{display:block;width:100%;text-align:left;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);padding:10px 14px;cursor:pointer;margin-bottom:6px;transition:border-color .15s}.reply-card.svelte-1n5zw0o:hover{border-color:var(--border-bright)}.reply-title.svelte-1n5zw0o{font-size:14px;color:var(--text-0);display:block;margin-bottom:2px}.reply-meta.svelte-1n5zw0o{font-size:12px;color:var(--text-2)}.comments-section.svelte-1n5zw0o{border-top:1px solid var(--border);padding-top:20px}.card.svelte-1hapkk3{display:block;width:100%;padding:20px;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius-lg);cursor:pointer;transition:all .15s ease;text-align:left;font-family:var(--sans)}.card.svelte-1hapkk3:hover{border-color:var(--border-bright)}.reply-indicator.svelte-1hapkk3{font-size:12px;color:var(--text-2);margin-bottom:6px}.header.svelte-1hapkk3{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:8px}.title.svelte-1hapkk3{font-family:var(--display);font-size:17px;font-weight:400;color:var(--text-0);margin:0}.date.svelte-1hapkk3{font-size:12px;color:var(--text-2);white-space:nowrap;flex-shrink:0}.excerpt.svelte-1hapkk3{font-size:14px;color:var(--text-1);margin:0 0 12px;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;line-height:1.5}.meta.svelte-1hapkk3{display:flex;align-items:center;gap:16px;font-size:13px}.author.svelte-1hapkk3{color:var(--accent)}.comments.svelte-1hapkk3{color:var(--text-2)}.reactions.svelte-1hapkk3{display:flex;gap:6px;margin-top:10px;flex-wrap:wrap}.reaction-pill.svelte-1hapkk3{font-size:12px;padding:2px 8px;background:var(--bg-3);border:1px solid var(--border);border-radius:12px;color:var(--text-1)}.notes-page.svelte-vh096i{max-width:700px;margin:0 auto}.page-header.svelte-vh096i{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px}.page-title.svelte-vh096i{font-family:var(--display);font-size:22px;font-weight:400;color:var(--text-0);margin:0}.note-form.svelte-vh096i{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius-lg);padding:16px;margin-bottom:20px;display:flex;flex-direction:column;gap:10px}.form-input.svelte-vh096i{width:100%;padding:8px 12px;background:var(--bg-3);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-0);font-size:14px;outline:none;box-sizing:border-box}.form-input.svelte-vh096i:focus{border-color:var(--accent)}.form-textarea.svelte-vh096i{width:100%;padding:8px 12px;background:var(--bg-3);border:1px solid var(--border);border-radius:var(--radius);color:var(--text-0);font-size:14px;line-height:1.5;resize:vertical;outline:none;box-sizing:border-box}.form-textarea.svelte-vh096i:focus{border-color:var(--accent)}.form-actions.svelte-vh096i{display:flex;justify-content:flex-end}.btn.svelte-vh096i{font-size:13px;padding:6px 14px;border-radius:var(--radius);cursor:pointer;border:1px solid transparent;transition:opacity .15s}.btn.svelte-vh096i:disabled{opacity:.5;cursor:not-allowed}.btn-write.svelte-vh096i{background:var(--accent-dim);color:var(--accent);border-color:var(--accent-border)}.btn-write.svelte-vh096i:hover{border-color:var(--accent)}.btn-submit.svelte-vh096i{background:var(--accent-dim);color:var(--accent);border-color:var(--accent-border)}.btn-submit.svelte-vh096i:hover:not(:disabled){border-color:var(--accent)}.error.svelte-vh096i{color:var(--red);font-size:13px;margin-bottom:16px}.loading.svelte-vh096i,.empty.svelte-vh096i{color:var(--text-2);font-size:13px;padding:40px 0;text-align:center}.notes-list.svelte-vh096i{display:flex;flex-direction:column;gap:10px}.ext-app.svelte-1r8vfx3{padding:24px;max-width:100%;min-height:100%;animation:fadeIn .2s ease both}