volute 0.22.0 → 0.24.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 (80) hide show
  1. package/README.md +5 -5
  2. package/dist/{activity-events-3WHHCOBB.js → activity-events-4O37J7PD.js} +2 -2
  3. package/dist/api.d.ts +306 -15
  4. package/dist/{channel-BOOMFULW.js → channel-HZOSHGNF.js} +1 -1
  5. package/dist/{chunk-QIXPN3OO.js → chunk-2767L2RZ.js} +5 -5
  6. package/dist/{chunk-SGPEZ32F.js → chunk-33XAVCS4.js} +16 -0
  7. package/dist/{chunk-VT5QODNE.js → chunk-3AIBT4TW.js} +4 -3
  8. package/dist/{chunk-RK627D57.js → chunk-4TJ72QQ3.js} +2 -2
  9. package/dist/{chunk-A4S7H6G6.js → chunk-BFK6SOEJ.js} +1 -1
  10. package/dist/{chunk-HGCDWKSP.js → chunk-E7GOKNOT.js} +1 -1
  11. package/dist/{chunk-VNVCRVYI.js → chunk-NOBRGACV.js} +7 -7
  12. package/dist/{chunk-OSFGKF2T.js → chunk-OOW675I3.js} +839 -129
  13. package/dist/{chunk-TFS25FIM.js → chunk-P3W36ZGD.js} +1 -1
  14. package/dist/{chunk-JNFRY2WU.js → chunk-TQDITGES.js} +33 -15
  15. package/dist/{chunk-KFI7TQJ6.js → chunk-TRQEV3CD.js} +9 -5
  16. package/dist/cli.js +18 -18
  17. package/dist/{cloud-sync-C6WRYRVR.js → cloud-sync-DIU3OCPV.js} +6 -8
  18. package/dist/{connector-PYT5UOTZ.js → connector-M6XFI6GM.js} +1 -1
  19. package/dist/{create-WIDA3M4C.js → create-VDQJER52.js} +1 -1
  20. package/dist/{daemon-client-ZHCDL4RS.js → daemon-client-JOVQZ52X.js} +1 -1
  21. package/dist/{daemon-restart-TPQ2XBRZ.js → daemon-restart-YMPEATQH.js} +5 -5
  22. package/dist/daemon.js +697 -865
  23. package/dist/{delete-LOIANQGD.js → delete-2MRR4JX5.js} +1 -1
  24. package/dist/{down-WSUASL5E.js → down-674SX2IZ.js} +2 -2
  25. package/dist/{env-4PHIHTF4.js → env-2FPOZK37.js} +1 -1
  26. package/dist/{export-XD6PJBQP.js → export-IKFAPRAO.js} +1 -1
  27. package/dist/{file-X4L5TTOL.js → file-KT3UIQM3.js} +1 -1
  28. package/dist/{history-HTEKRNID.js → history-46WZN5CN.js} +1 -1
  29. package/dist/{import-EAXTHHXL.js → import-FRDPQPJ2.js} +1 -1
  30. package/dist/{log-SRO5Q6AD.js → log-6SGSSR3D.js} +1 -1
  31. package/dist/{logs-HNTNNBDW.js → logs-HRBONI5I.js} +1 -1
  32. package/dist/{merge-B6SYTGI7.js → merge-KSFJKX6T.js} +1 -1
  33. package/dist/{message-delivery-WUS4K4ZC.js → message-delivery-S7BCNV6Y.js} +9 -7
  34. package/dist/{mind-BTXR5B3C.js → mind-KPLCRKQA.js} +17 -17
  35. package/dist/{mind-activity-tracker-PGC3DBJ7.js → mind-activity-tracker-NMDDEV3K.js} +3 -3
  36. package/dist/{mind-manager-P5OBDUKI.js → mind-manager-ZNRIYEK3.js} +2 -2
  37. package/dist/{mind-sleep-FWRBIFBS.js → mind-sleep-GHPTSAYN.js} +1 -1
  38. package/dist/{mind-wake-LJK2YU5X.js → mind-wake-BJDJFMDF.js} +1 -1
  39. package/dist/{package-A7PEYJI2.js → package-S5YF25XV.js} +1 -1
  40. package/dist/{pull-GRQAXM2E.js → pull-D32SPFVU.js} +1 -1
  41. package/dist/{restart-CIDAKGG2.js → restart-5BMNV7KU.js} +1 -1
  42. package/dist/{schedule-NLR3LZLY.js → schedule-YEFDLVMJ.js} +1 -1
  43. package/dist/{seed-3H2MRREW.js → seed-6FEKB3YC.js} +1 -1
  44. package/dist/{send-RP2TA7SG.js → send-IISDYFCL.js} +1 -1
  45. package/dist/{service-7BFXDI6J.js → service-FASYWLTC.js} +3 -3
  46. package/dist/{setup-SSIIXQMI.js → setup-BMLM2UTK.js} +1 -1
  47. package/dist/{shared-2OGT3NSL.js → shared-LWMNTTZN.js} +4 -4
  48. package/dist/{skill-Q2Y6PQ3L.js → skill-BQOFACEI.js} +1 -1
  49. package/dist/skills/volute-mind/SKILL.md +71 -1
  50. package/dist/{sleep-manager-3RWUX2ZR.js → sleep-manager-XXSWQQLE.js} +5 -5
  51. package/dist/{sprout-UKCYBGHK.js → sprout-CGSW4CF5.js} +3 -3
  52. package/dist/{start-JR6CUUWF.js → start-C7XITZ5O.js} +1 -1
  53. package/dist/{status-5XDGYHKP.js → status-LYS4NUOZ.js} +1 -1
  54. package/dist/{status-H2MKDN6L.js → status-SIRPLEZC.js} +4 -3
  55. package/dist/{stop-VKPGK25U.js → stop-CVKBSLXY.js} +1 -1
  56. package/dist/tailscale-AJ4VL5XK.js +49 -0
  57. package/dist/{up-JKGC7PPF.js → up-OMHACRJL.js} +2 -2
  58. package/dist/{update-ELC6MEUT.js → update-7XCZMYBT.js} +7 -7
  59. package/dist/{upgrade-GXW2EQY3.js → upgrade-7RUIXGOO.js} +1 -1
  60. package/dist/{variant-A4I7PHXS.js → variant-UGREB4G5.js} +4 -4
  61. package/dist/{version-notify-5FGUAVSF.js → version-notify-SZ75QRGO.js} +5 -5
  62. package/dist/web-assets/assets/index-Bx9WDoaQ.js +69 -0
  63. package/dist/web-assets/assets/index-Clz8OhmJ.css +1 -0
  64. package/dist/web-assets/index.html +2 -2
  65. package/drizzle/0013_user_profiles.sql +3 -0
  66. package/drizzle/0014_conversation_reads.sql +7 -0
  67. package/drizzle/meta/0013_snapshot.json +7 -0
  68. package/drizzle/meta/_journal.json +14 -0
  69. package/package.json +1 -1
  70. package/templates/_base/src/lib/file-handler.ts +6 -1
  71. package/templates/_base/src/lib/format-prefix.ts +18 -2
  72. package/templates/_base/src/lib/routing.ts +2 -1
  73. package/templates/_base/src/lib/types.ts +8 -0
  74. package/templates/claude/src/lib/stream-consumer.ts +10 -1
  75. package/templates/pi/src/lib/content.ts +18 -3
  76. package/templates/pi/src/lib/event-handler.ts +9 -1
  77. package/dist/chunk-G5KRTU2F.js +0 -76
  78. package/dist/web-assets/assets/index-DWBxl4LO.js +0 -69
  79. package/dist/web-assets/assets/index-ZqMd1mx1.css +0 -1
  80. /package/dist/{pages-YSTRWJR4.js → pages-TWR6U7DS.js} +0 -0
package/README.md CHANGED
@@ -26,14 +26,14 @@ volute mind start atlas
26
26
  volute send @atlas "hey, what can you do?"
27
27
  ```
28
28
 
29
- You now have a running AI mind with persistent memory, auto-committing file changes, and session resume across restarts. Open `http://localhost:4200` for the web dashboard.
29
+ You now have a running AI mind with persistent memory, auto-committing file changes, and session resume across restarts. Open `http://localhost:1618` for the web dashboard.
30
30
 
31
31
  ## The daemon
32
32
 
33
33
  One background process runs everything. `volute up` starts it; `volute down` stops it.
34
34
 
35
35
  ```sh
36
- volute up # start (default port 4200)
36
+ volute up # start (default port 1618)
37
37
  volute up --port 8080 # custom port
38
38
  volute down # stop all minds and shut down
39
39
  volute status # check daemon status, version, and minds
@@ -204,7 +204,7 @@ volute env remove API_KEY
204
204
 
205
205
  ## Web dashboard
206
206
 
207
- The daemon serves a web UI at `http://localhost:4200` (or whatever port you chose).
207
+ The daemon serves a web UI at `http://localhost:1618` (or whatever port you chose).
208
208
 
209
209
  - Real-time chat with full tool call visibility
210
210
  - File browser and editor
@@ -250,7 +250,7 @@ Set the model via `home/.config/volute.json` in the mind directory, or the `VOLU
250
250
 
251
251
  ```sh
252
252
  docker build -t volute .
253
- docker run -d -p 4200:4200 -v volute-data:/data -v volute-minds:/minds volute
253
+ docker run -d -p 1618:1618 -v volute-data:/data -v volute-minds:/minds volute
254
254
  ```
255
255
 
256
256
  Or with docker-compose:
@@ -259,7 +259,7 @@ Or with docker-compose:
259
259
  docker compose up -d
260
260
  ```
261
261
 
262
- The container runs with per-mind user isolation enabled — each mind gets its own Linux user, so minds can't see each other's files. Open `http://localhost:4200` for the web dashboard.
262
+ The container runs with per-mind user isolation enabled — each mind gets its own Linux user, so minds can't see each other's files. Open `http://localhost:1618` for the web dashboard.
263
263
 
264
264
  ### Bare metal (Linux / Raspberry Pi)
265
265
 
@@ -3,8 +3,8 @@ import {
3
3
  broadcast,
4
4
  publish,
5
5
  subscribe
6
- } from "./chunk-A4S7H6G6.js";
7
- import "./chunk-SGPEZ32F.js";
6
+ } from "./chunk-BFK6SOEJ.js";
7
+ import "./chunk-33XAVCS4.js";
8
8
  import "./chunk-YUIHSKR6.js";
9
9
  import "./chunk-B2CPS4QU.js";
10
10
  import "./chunk-K3NQKI34.js";
package/dist/api.d.ts CHANGED
@@ -127,11 +127,49 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
127
127
  id: number;
128
128
  username: string;
129
129
  role: "pending" | "mind" | "user" | "admin";
130
+ display_name: string | null;
131
+ description: string | null;
132
+ avatar: string | null;
130
133
  };
131
134
  outputFormat: "json";
132
135
  status: hono_utils_http_status.ContentfulStatusCode;
133
136
  };
134
137
  };
138
+ } & {
139
+ "/avatars/:filename": {
140
+ $get: {
141
+ input: {
142
+ param: {
143
+ filename: string;
144
+ };
145
+ };
146
+ output: {
147
+ error: string;
148
+ };
149
+ outputFormat: "json";
150
+ status: 400;
151
+ } | {
152
+ input: {
153
+ param: {
154
+ filename: string;
155
+ };
156
+ };
157
+ output: {
158
+ error: string;
159
+ };
160
+ outputFormat: "json";
161
+ status: 404;
162
+ } | {
163
+ input: {
164
+ param: {
165
+ filename: string;
166
+ };
167
+ };
168
+ output: NonSharedBuffer;
169
+ outputFormat: "body";
170
+ status: 200;
171
+ };
172
+ };
135
173
  }) | hono_types.MergeSchemaPath<{
136
174
  "/users": {
137
175
  $get: {
@@ -148,6 +186,9 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
148
186
  username: string;
149
187
  role: "admin" | "user" | "pending" | "mind";
150
188
  user_type: "brain" | "mind";
189
+ display_name: string | null;
190
+ description: string | null;
191
+ avatar: string | null;
151
192
  created_at: string;
152
193
  }[];
153
194
  outputFormat: "json";
@@ -163,6 +204,9 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
163
204
  username: string;
164
205
  role: "admin" | "user" | "pending" | "mind";
165
206
  user_type: "brain" | "mind";
207
+ display_name: string | null;
208
+ description: string | null;
209
+ avatar: string | null;
166
210
  created_at: string;
167
211
  }[];
168
212
  outputFormat: "json";
@@ -189,6 +233,166 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
189
233
  };
190
234
  outputFormat: "json";
191
235
  status: 403;
236
+ } | {
237
+ input: {
238
+ param: {
239
+ id: string;
240
+ };
241
+ };
242
+ output: {
243
+ error: string;
244
+ };
245
+ outputFormat: "json";
246
+ status: 400;
247
+ } | {
248
+ input: {
249
+ param: {
250
+ id: string;
251
+ };
252
+ };
253
+ output: {
254
+ ok: true;
255
+ };
256
+ outputFormat: "json";
257
+ status: hono_utils_http_status.ContentfulStatusCode;
258
+ };
259
+ };
260
+ } & {
261
+ "/users/:id/role": {
262
+ $post: {
263
+ input: {
264
+ json: {
265
+ role: "user" | "admin";
266
+ };
267
+ } & {
268
+ param: {
269
+ id: string;
270
+ };
271
+ };
272
+ output: {
273
+ error: string;
274
+ };
275
+ outputFormat: "json";
276
+ status: 403;
277
+ } | {
278
+ input: {
279
+ json: {
280
+ role: "user" | "admin";
281
+ };
282
+ } & {
283
+ param: {
284
+ id: string;
285
+ };
286
+ };
287
+ output: {
288
+ error: string;
289
+ };
290
+ outputFormat: "json";
291
+ status: 400;
292
+ } | {
293
+ input: {
294
+ json: {
295
+ role: "user" | "admin";
296
+ };
297
+ } & {
298
+ param: {
299
+ id: string;
300
+ };
301
+ };
302
+ output: {
303
+ ok: true;
304
+ };
305
+ outputFormat: "json";
306
+ status: hono_utils_http_status.ContentfulStatusCode;
307
+ };
308
+ };
309
+ } & {
310
+ "/users/:id/profile": {
311
+ $put: {
312
+ input: {
313
+ json: {
314
+ display_name?: string | null | undefined;
315
+ description?: string | null | undefined;
316
+ };
317
+ } & {
318
+ param: {
319
+ id: string;
320
+ };
321
+ };
322
+ output: {
323
+ error: string;
324
+ };
325
+ outputFormat: "json";
326
+ status: 403;
327
+ } | {
328
+ input: {
329
+ json: {
330
+ display_name?: string | null | undefined;
331
+ description?: string | null | undefined;
332
+ };
333
+ } & {
334
+ param: {
335
+ id: string;
336
+ };
337
+ };
338
+ output: {
339
+ error: string;
340
+ };
341
+ outputFormat: "json";
342
+ status: 400;
343
+ } | {
344
+ input: {
345
+ json: {
346
+ display_name?: string | null | undefined;
347
+ description?: string | null | undefined;
348
+ };
349
+ } & {
350
+ param: {
351
+ id: string;
352
+ };
353
+ };
354
+ output: {
355
+ ok: true;
356
+ };
357
+ outputFormat: "json";
358
+ status: hono_utils_http_status.ContentfulStatusCode;
359
+ };
360
+ };
361
+ } & {
362
+ "/users/:id": {
363
+ $delete: {
364
+ input: {
365
+ param: {
366
+ id: string;
367
+ };
368
+ };
369
+ output: {
370
+ error: string;
371
+ };
372
+ outputFormat: "json";
373
+ status: 403;
374
+ } | {
375
+ input: {
376
+ param: {
377
+ id: string;
378
+ };
379
+ };
380
+ output: {
381
+ error: string;
382
+ };
383
+ outputFormat: "json";
384
+ status: 400;
385
+ } | {
386
+ input: {
387
+ param: {
388
+ id: string;
389
+ };
390
+ };
391
+ output: {
392
+ error: string;
393
+ };
394
+ outputFormat: "json";
395
+ status: 404;
192
396
  } | {
193
397
  input: {
194
398
  param: {
@@ -230,6 +434,52 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
230
434
  status: hono_utils_http_status.ContentfulStatusCode;
231
435
  };
232
436
  };
437
+ } & {
438
+ "/profile": {
439
+ $put: {
440
+ input: {
441
+ json: {
442
+ display_name?: string | null | undefined;
443
+ description?: string | null | undefined;
444
+ };
445
+ };
446
+ output: {
447
+ ok: true;
448
+ };
449
+ outputFormat: "json";
450
+ status: hono_utils_http_status.ContentfulStatusCode;
451
+ };
452
+ };
453
+ } & {
454
+ "/avatar": {
455
+ $post: {
456
+ input: {};
457
+ output: {
458
+ error: string;
459
+ };
460
+ outputFormat: "json";
461
+ status: 400;
462
+ } | {
463
+ input: {};
464
+ output: {
465
+ ok: true;
466
+ avatar: string;
467
+ };
468
+ outputFormat: "json";
469
+ status: hono_utils_http_status.ContentfulStatusCode;
470
+ };
471
+ };
472
+ } & {
473
+ "/avatar": {
474
+ $delete: {
475
+ input: {};
476
+ output: {
477
+ ok: true;
478
+ };
479
+ outputFormat: "json";
480
+ status: hono_utils_http_status.ContentfulStatusCode;
481
+ };
482
+ };
233
483
  }, "/">, "/api/auth"> | hono_types.MergeSchemaPath<{
234
484
  "/restart": {
235
485
  $post: {
@@ -2285,6 +2535,15 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
2285
2535
  }, "/api/minds"> | hono_types.MergeSchemaPath<{
2286
2536
  "/:name/avatar": {
2287
2537
  $get: {
2538
+ input: {
2539
+ param: {
2540
+ name: string;
2541
+ };
2542
+ };
2543
+ output: NonSharedBuffer;
2544
+ outputFormat: "body";
2545
+ status: 200;
2546
+ } | {
2288
2547
  input: {
2289
2548
  param: {
2290
2549
  name: string;
@@ -2317,15 +2576,6 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
2317
2576
  };
2318
2577
  outputFormat: "json";
2319
2578
  status: 500;
2320
- } | {
2321
- input: {
2322
- param: {
2323
- name: string;
2324
- };
2325
- };
2326
- output: NonSharedBuffer;
2327
- outputFormat: "body";
2328
- status: 200;
2329
2579
  };
2330
2580
  };
2331
2581
  } & {
@@ -2357,9 +2607,9 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
2357
2607
  $get: {
2358
2608
  input: {
2359
2609
  param: {
2360
- name: string;
2361
- } & {
2362
2610
  filename: string;
2611
+ } & {
2612
+ name: string;
2363
2613
  };
2364
2614
  };
2365
2615
  output: {
@@ -2370,9 +2620,9 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
2370
2620
  } | {
2371
2621
  input: {
2372
2622
  param: {
2373
- name: string;
2374
- } & {
2375
2623
  filename: string;
2624
+ } & {
2625
+ name: string;
2376
2626
  };
2377
2627
  };
2378
2628
  output: {
@@ -2383,9 +2633,9 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
2383
2633
  } | {
2384
2634
  input: {
2385
2635
  param: {
2386
- name: string;
2387
- } & {
2388
2636
  filename: string;
2637
+ } & {
2638
+ name: string;
2389
2639
  };
2390
2640
  };
2391
2641
  output: {
@@ -3288,6 +3538,9 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
3288
3538
  username: string;
3289
3539
  userType: "brain" | "mind";
3290
3540
  role: "owner" | "member";
3541
+ displayName?: string | null | undefined;
3542
+ description?: string | null | undefined;
3543
+ avatar?: string | null | undefined;
3291
3544
  }[];
3292
3545
  outputFormat: "json";
3293
3546
  status: hono_utils_http_status.ContentfulStatusCode;
@@ -3588,6 +3841,9 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
3588
3841
  username: string;
3589
3842
  userType: "brain" | "mind";
3590
3843
  role: "owner" | "member";
3844
+ displayName?: string | null | undefined;
3845
+ description?: string | null | undefined;
3846
+ avatar?: string | null | undefined;
3591
3847
  }[];
3592
3848
  lastMessage?: {
3593
3849
  role: "user" | "assistant";
@@ -3842,6 +4098,9 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
3842
4098
  username: string;
3843
4099
  userType: "brain" | "mind";
3844
4100
  role: "owner" | "member";
4101
+ displayName?: string | null | undefined;
4102
+ description?: string | null | undefined;
4103
+ avatar?: string | null | undefined;
3845
4104
  }[];
3846
4105
  outputFormat: "json";
3847
4106
  status: hono_utils_http_status.ContentfulStatusCode;
@@ -3979,6 +4238,9 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
3979
4238
  username: string;
3980
4239
  userType: "brain" | "mind";
3981
4240
  role: "owner" | "member";
4241
+ displayName?: string | null | undefined;
4242
+ description?: string | null | undefined;
4243
+ avatar?: string | null | undefined;
3982
4244
  }[];
3983
4245
  lastMessage?: {
3984
4246
  role: "user" | "assistant";
@@ -4064,6 +4326,9 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
4064
4326
  username: string;
4065
4327
  userType: "brain" | "mind";
4066
4328
  role: "owner" | "member";
4329
+ displayName?: string | null | undefined;
4330
+ description?: string | null | undefined;
4331
+ avatar?: string | null | undefined;
4067
4332
  }[];
4068
4333
  outputFormat: "json";
4069
4334
  status: hono_utils_http_status.ContentfulStatusCode;
@@ -4116,6 +4381,32 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
4116
4381
  status: 400;
4117
4382
  };
4118
4383
  };
4384
+ } & {
4385
+ "/:id/read": {
4386
+ $post: {
4387
+ input: {
4388
+ param: {
4389
+ id: string;
4390
+ };
4391
+ };
4392
+ output: {
4393
+ ok: true;
4394
+ };
4395
+ outputFormat: "json";
4396
+ status: hono_utils_http_status.ContentfulStatusCode;
4397
+ } | {
4398
+ input: {
4399
+ param: {
4400
+ id: string;
4401
+ };
4402
+ };
4403
+ output: {
4404
+ error: string;
4405
+ };
4406
+ outputFormat: "json";
4407
+ status: 404;
4408
+ };
4409
+ };
4119
4410
  } & {
4120
4411
  "/:id": {
4121
4412
  $delete: {
@@ -11,7 +11,7 @@ import {
11
11
  } from "./chunk-D424ZQGI.js";
12
12
  import {
13
13
  daemonFetch
14
- } from "./chunk-KFI7TQJ6.js";
14
+ } from "./chunk-TRQEV3CD.js";
15
15
  import "./chunk-B2CPS4QU.js";
16
16
  import "./chunk-K3NQKI34.js";
17
17
 
@@ -5,7 +5,7 @@ import {
5
5
  pollHealthDown,
6
6
  readDaemonConfig,
7
7
  stopService
8
- } from "./chunk-VT5QODNE.js";
8
+ } from "./chunk-3AIBT4TW.js";
9
9
  import {
10
10
  voluteHome
11
11
  } from "./chunk-B2CPS4QU.js";
@@ -18,12 +18,12 @@ async function stopDaemon() {
18
18
  const pidPath = resolve(home, "daemon.pid");
19
19
  if (!existsSync(pidPath)) {
20
20
  const configPath = resolve(home, "daemon.json");
21
- let port = 4200;
21
+ let port = 1618;
22
22
  let hostname = "localhost";
23
23
  if (existsSync(configPath)) {
24
24
  try {
25
25
  const config = JSON.parse(readFileSync(configPath, "utf-8"));
26
- port = config.port ?? 4200;
26
+ port = config.port ?? 1618;
27
27
  hostname = config.hostname || "localhost";
28
28
  } catch {
29
29
  }
@@ -113,8 +113,8 @@ async function run(_args) {
113
113
  console.error(`Failed to stop service: ${err instanceof Error ? err.message : err}`);
114
114
  process.exit(1);
115
115
  }
116
- const { hostname, port } = readDaemonConfig();
117
- if (await pollHealthDown(hostname, port)) {
116
+ const config = readDaemonConfig();
117
+ if (await pollHealthDown("127.0.0.1", config.internalPort ?? config.port)) {
118
118
  console.log("Daemon stopped.");
119
119
  } else {
120
120
  console.error("Service stopped but daemon may still be responding.");
@@ -11,6 +11,7 @@ var schema_exports = {};
11
11
  __export(schema_exports, {
12
12
  activity: () => activity,
13
13
  conversationParticipants: () => conversationParticipants,
14
+ conversationReads: () => conversationReads,
14
15
  conversations: () => conversations,
15
16
  deliveryQueue: () => deliveryQueue,
16
17
  messages: () => messages,
@@ -28,6 +29,9 @@ var users = sqliteTable("users", {
28
29
  password_hash: text("password_hash").notNull(),
29
30
  role: text("role").notNull().default("pending"),
30
31
  user_type: text("user_type").notNull().default("brain"),
32
+ display_name: text("display_name"),
33
+ description: text("description"),
34
+ avatar: text("avatar"),
31
35
  created_at: text("created_at").notNull().default(sql`(datetime('now'))`)
32
36
  });
33
37
  var conversations = sqliteTable(
@@ -134,6 +138,17 @@ var activity = sqliteTable(
134
138
  index("idx_activity_mind").on(table.mind)
135
139
  ]
136
140
  );
141
+ var conversationReads = sqliteTable(
142
+ "conversation_reads",
143
+ {
144
+ user_id: integer("user_id").notNull().references(() => users.id, { onDelete: "cascade" }),
145
+ conversation_id: text("conversation_id").notNull().references(() => conversations.id, { onDelete: "cascade" }),
146
+ last_read_message_id: integer("last_read_message_id").notNull().default(0)
147
+ },
148
+ (table) => [
149
+ uniqueIndex("idx_conversation_reads_unique").on(table.user_id, table.conversation_id)
150
+ ]
151
+ );
137
152
  var messages = sqliteTable(
138
153
  "messages",
139
154
  {
@@ -182,6 +197,7 @@ export {
182
197
  sharedSkills,
183
198
  deliveryQueue,
184
199
  activity,
200
+ conversationReads,
185
201
  messages,
186
202
  getDb
187
203
  };
@@ -132,17 +132,18 @@ async function restartService(mode) {
132
132
  }
133
133
  function readDaemonConfig() {
134
134
  const configPath = resolve(voluteHome(), "daemon.json");
135
- if (!existsSync(configPath)) return { hostname: "127.0.0.1", port: 4200 };
135
+ if (!existsSync(configPath)) return { hostname: "127.0.0.1", port: 1618 };
136
136
  try {
137
137
  const config = JSON.parse(readFileSync(configPath, "utf-8"));
138
138
  return {
139
139
  hostname: config.hostname || "127.0.0.1",
140
- port: config.port ?? 4200,
140
+ port: config.port ?? 1618,
141
+ internalPort: config.internalPort,
141
142
  token: config.token
142
143
  };
143
144
  } catch {
144
145
  console.error("Warning: could not read daemon config, using defaults.");
145
- return { hostname: "127.0.0.1", port: 4200 };
146
+ return { hostname: "127.0.0.1", port: 1618 };
146
147
  }
147
148
  }
148
149
  function modeLabel(mode) {
@@ -39,7 +39,7 @@ async function run(args) {
39
39
  return;
40
40
  }
41
41
  const wsDir = resolveWorkspace(inputPath);
42
- const { daemonFetch } = await import("./daemon-client-ZHCDL4RS.js");
42
+ const { daemonFetch } = await import("./daemon-client-JOVQZ52X.js");
43
43
  const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
44
44
  const client = getClient();
45
45
  const res = await daemonFetch(urlOf(client.api.minds.import.$url()), {
@@ -91,7 +91,7 @@ async function importArchive(archivePath, nameOverride) {
91
91
  process.exit(1);
92
92
  }
93
93
  try {
94
- const { daemonFetch } = await import("./daemon-client-ZHCDL4RS.js");
94
+ const { daemonFetch } = await import("./daemon-client-JOVQZ52X.js");
95
95
  const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
96
96
  const client = getClient();
97
97
  const res = await daemonFetch(urlOf(client.api.minds.import.$url()), {
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  activity,
4
4
  getDb
5
- } from "./chunk-SGPEZ32F.js";
5
+ } from "./chunk-33XAVCS4.js";
6
6
  import {
7
7
  logger_default
8
8
  } from "./chunk-YUIHSKR6.js";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  publish
4
- } from "./chunk-A4S7H6G6.js";
4
+ } from "./chunk-BFK6SOEJ.js";
5
5
  import {
6
6
  logger_default
7
7
  } from "./chunk-YUIHSKR6.js";