volute 0.23.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.
- package/README.md +5 -5
- package/dist/{activity-events-3WHHCOBB.js → activity-events-4O37J7PD.js} +2 -2
- package/dist/api.d.ts +306 -15
- package/dist/{channel-BOOMFULW.js → channel-HZOSHGNF.js} +1 -1
- package/dist/{chunk-QIXPN3OO.js → chunk-2767L2RZ.js} +5 -5
- package/dist/{chunk-SGPEZ32F.js → chunk-33XAVCS4.js} +16 -0
- package/dist/{chunk-VT5QODNE.js → chunk-3AIBT4TW.js} +4 -3
- package/dist/{chunk-RK627D57.js → chunk-4TJ72QQ3.js} +2 -2
- package/dist/{chunk-A4S7H6G6.js → chunk-BFK6SOEJ.js} +1 -1
- package/dist/{chunk-HGCDWKSP.js → chunk-E7GOKNOT.js} +1 -1
- package/dist/{chunk-M5CNKH4J.js → chunk-NOBRGACV.js} +7 -7
- package/dist/{chunk-ISWZ6QUK.js → chunk-OOW675I3.js} +778 -108
- package/dist/{chunk-TFS25FIM.js → chunk-P3W36ZGD.js} +1 -1
- package/dist/{chunk-JG4CCJOA.js → chunk-TQDITGES.js} +33 -15
- package/dist/{chunk-KFI7TQJ6.js → chunk-TRQEV3CD.js} +9 -5
- package/dist/cli.js +18 -18
- package/dist/{cloud-sync-PI47U2LT.js → cloud-sync-DIU3OCPV.js} +6 -8
- package/dist/{connector-PYT5UOTZ.js → connector-M6XFI6GM.js} +1 -1
- package/dist/{create-WIDA3M4C.js → create-VDQJER52.js} +1 -1
- package/dist/{daemon-client-ZHCDL4RS.js → daemon-client-JOVQZ52X.js} +1 -1
- package/dist/{daemon-restart-RMGOOGPE.js → daemon-restart-YMPEATQH.js} +5 -5
- package/dist/daemon.js +665 -813
- package/dist/{delete-LOIANQGD.js → delete-2MRR4JX5.js} +1 -1
- package/dist/{down-WSUASL5E.js → down-674SX2IZ.js} +2 -2
- package/dist/{env-4PHIHTF4.js → env-2FPOZK37.js} +1 -1
- package/dist/{export-XD6PJBQP.js → export-IKFAPRAO.js} +1 -1
- package/dist/{file-X4L5TTOL.js → file-KT3UIQM3.js} +1 -1
- package/dist/{history-HTEKRNID.js → history-46WZN5CN.js} +1 -1
- package/dist/{import-EAXTHHXL.js → import-FRDPQPJ2.js} +1 -1
- package/dist/{log-SRO5Q6AD.js → log-6SGSSR3D.js} +1 -1
- package/dist/{logs-HNTNNBDW.js → logs-HRBONI5I.js} +1 -1
- package/dist/{merge-B6SYTGI7.js → merge-KSFJKX6T.js} +1 -1
- package/dist/{message-delivery-FHV4NO2F.js → message-delivery-S7BCNV6Y.js} +5 -5
- package/dist/{mind-BTXR5B3C.js → mind-KPLCRKQA.js} +17 -17
- package/dist/{mind-activity-tracker-PGC3DBJ7.js → mind-activity-tracker-NMDDEV3K.js} +3 -3
- package/dist/{mind-manager-KMY4GA2J.js → mind-manager-ZNRIYEK3.js} +2 -2
- package/dist/{mind-sleep-FWRBIFBS.js → mind-sleep-GHPTSAYN.js} +1 -1
- package/dist/{mind-wake-LJK2YU5X.js → mind-wake-BJDJFMDF.js} +1 -1
- package/dist/{package-CUBJ4PKS.js → package-S5YF25XV.js} +1 -1
- package/dist/{pull-GRQAXM2E.js → pull-D32SPFVU.js} +1 -1
- package/dist/{restart-CIDAKGG2.js → restart-5BMNV7KU.js} +1 -1
- package/dist/{schedule-NLR3LZLY.js → schedule-YEFDLVMJ.js} +1 -1
- package/dist/{seed-3H2MRREW.js → seed-6FEKB3YC.js} +1 -1
- package/dist/{send-RP2TA7SG.js → send-IISDYFCL.js} +1 -1
- package/dist/{service-7BFXDI6J.js → service-FASYWLTC.js} +3 -3
- package/dist/{setup-SSIIXQMI.js → setup-BMLM2UTK.js} +1 -1
- package/dist/{shared-2OGT3NSL.js → shared-LWMNTTZN.js} +4 -4
- package/dist/{skill-Q2Y6PQ3L.js → skill-BQOFACEI.js} +1 -1
- package/dist/skills/volute-mind/SKILL.md +71 -1
- package/dist/{sleep-manager-2TMQ65E4.js → sleep-manager-XXSWQQLE.js} +5 -5
- package/dist/{sprout-UKCYBGHK.js → sprout-CGSW4CF5.js} +3 -3
- package/dist/{start-JR6CUUWF.js → start-C7XITZ5O.js} +1 -1
- package/dist/{status-5XDGYHKP.js → status-LYS4NUOZ.js} +1 -1
- package/dist/{status-H2MKDN6L.js → status-SIRPLEZC.js} +4 -3
- package/dist/{stop-VKPGK25U.js → stop-CVKBSLXY.js} +1 -1
- package/dist/tailscale-AJ4VL5XK.js +49 -0
- package/dist/{up-Z5JRG2M2.js → up-OMHACRJL.js} +2 -2
- package/dist/{update-ELC6MEUT.js → update-7XCZMYBT.js} +7 -7
- package/dist/{upgrade-GXW2EQY3.js → upgrade-7RUIXGOO.js} +1 -1
- package/dist/{variant-A4I7PHXS.js → variant-UGREB4G5.js} +4 -4
- package/dist/{version-notify-LKABEJSA.js → version-notify-SZ75QRGO.js} +5 -5
- package/dist/web-assets/assets/index-Bx9WDoaQ.js +69 -0
- package/dist/web-assets/assets/index-Clz8OhmJ.css +1 -0
- package/dist/web-assets/index.html +2 -2
- package/drizzle/0013_user_profiles.sql +3 -0
- package/drizzle/0014_conversation_reads.sql +7 -0
- package/drizzle/meta/0013_snapshot.json +7 -0
- package/drizzle/meta/_journal.json +14 -0
- package/package.json +1 -1
- package/templates/_base/src/lib/format-prefix.ts +18 -2
- package/templates/_base/src/lib/routing.ts +2 -1
- package/templates/_base/src/lib/types.ts +8 -0
- package/dist/chunk-G5KRTU2F.js +0 -76
- package/dist/web-assets/assets/index-CZ26vsyY.js +0 -69
- package/dist/web-assets/assets/index-DyyAvJwW.css +0 -1
- /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:
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
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-
|
|
7
|
-
import "./chunk-
|
|
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: {
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
pollHealthDown,
|
|
6
6
|
readDaemonConfig,
|
|
7
7
|
stopService
|
|
8
|
-
} from "./chunk-
|
|
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 =
|
|
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 ??
|
|
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
|
|
117
|
-
if (await pollHealthDown(
|
|
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:
|
|
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 ??
|
|
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:
|
|
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-
|
|
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-
|
|
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()), {
|