volute 0.28.0 → 0.29.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 +15 -5
- package/dist/api.d.ts +192 -9
- package/dist/{chat-M4SX42JD.js → chat-KTPOR2JT.js} +1 -1
- package/dist/chunk-A6TUJJ3L.js +19 -0
- package/dist/{chunk-AAPXKR5V.js → chunk-CMILSHZD.js} +138 -285
- package/dist/{chunk-K5NAC55T.js → chunk-CQ7SNKNI.js} +1 -1
- package/dist/{chunk-POSXWWTA.js → chunk-EHZKEMMV.js} +4 -4
- package/dist/{chunk-IAYBDWVG.js → chunk-FLZGS4QH.js} +145 -0
- package/dist/chunk-THUUIU3E.js +232 -0
- package/dist/cli.js +11 -8
- package/dist/clock-DGCBVGYA.js +259 -0
- package/dist/{cloud-sync-HDL6PHZI.js → cloud-sync-KILFGV5Q.js} +6 -5
- package/dist/connectors/discord-bridge.js +1 -1
- package/dist/connectors/slack-bridge.js +1 -1
- package/dist/connectors/telegram-bridge.js +1 -1
- package/dist/{conversations-M2K4253F.js → conversations-P5BL7RMX.js} +7 -1
- package/dist/create-DFCAGEE5.js +70 -0
- package/dist/{daemon-restart-G4B2OYAB.js → daemon-restart-UHOMICXT.js} +1 -1
- package/dist/daemon.js +181 -66
- package/dist/{message-delivery-HV3S6HZV.js → message-delivery-Q7VUMIEI.js} +10 -7
- package/dist/{mind-activity-tracker-EN6XNXPF.js → mind-activity-tracker-WRHFI3YW.js} +1 -1
- package/dist/{mind-manager-S6ILZVX3.js → mind-manager-P66HQDNE.js} +1 -1
- package/dist/{package-CG4RWUGP.js → package-OFKXNKJF.js} +1 -1
- package/dist/pages-watcher-P7QECRE2.js +21 -0
- package/dist/skills/dreaming/references/INSTALL.md +3 -17
- package/dist/skills/volute-mind/SKILL.md +43 -16
- package/dist/{sleep-manager-WMVG2VCL.js → sleep-manager-G4B5GW5P.js} +6 -5
- package/dist/{up-GM2JOH2Y.js → up-W6VAK2XE.js} +1 -1
- package/dist/{version-notify-JDUF4HQJ.js → version-notify-WDHRO3XD.js} +8 -7
- package/dist/web-assets/assets/index-BmKDnWDB.css +1 -0
- package/dist/web-assets/assets/index-CLJMx-GA.js +71 -0
- package/dist/web-assets/index.html +2 -2
- package/package.json +1 -1
- package/templates/_base/src/lib/logger.ts +10 -49
- package/templates/_base/src/lib/router.ts +1 -9
- package/templates/claude/src/lib/stream-consumer.ts +1 -4
- package/templates/pi/src/lib/event-handler.ts +1 -14
- package/dist/chunk-T6HKBWXZ.js +0 -23
- package/dist/create-D7J73A6H.js +0 -45
- package/dist/schedule-QTJMFATP.js +0 -154
- package/dist/web-assets/assets/index-BZGvToHi.css +0 -1
- package/dist/web-assets/assets/index-Cz4TrpzB.js +0 -75
- /package/dist/{chunk-SGVNFZHW.js → chunk-DUAUMCEE.js} +0 -0
- /package/dist/{pages-KJDJX4TA.js → pages-EUJR52AH.js} +0 -0
package/README.md
CHANGED
|
@@ -152,17 +152,27 @@ volute channel read discord:123456789 --mind atlas # recent messages
|
|
|
152
152
|
volute send discord:123456789 "hello" --mind atlas # send a message
|
|
153
153
|
```
|
|
154
154
|
|
|
155
|
-
##
|
|
155
|
+
## Clock
|
|
156
156
|
|
|
157
|
-
|
|
157
|
+
Schedules, timers, and sleep/wake cycles — a mind's daily rhythm.
|
|
158
158
|
|
|
159
159
|
```sh
|
|
160
|
-
|
|
160
|
+
# Recurring schedule
|
|
161
|
+
volute clock add --mind atlas \
|
|
161
162
|
--cron "0 9 * * *" \
|
|
162
163
|
--message "good morning — write your daily log"
|
|
163
164
|
|
|
164
|
-
|
|
165
|
-
volute
|
|
165
|
+
# One-time timer
|
|
166
|
+
volute clock add --mind atlas --in 30m --message "check on that task"
|
|
167
|
+
|
|
168
|
+
# Sleep/wake
|
|
169
|
+
volute clock sleep atlas --wake-at "2025-01-15T07:00:00Z"
|
|
170
|
+
volute clock wake atlas
|
|
171
|
+
|
|
172
|
+
# Status and management
|
|
173
|
+
volute clock status --mind atlas
|
|
174
|
+
volute clock list --mind atlas
|
|
175
|
+
volute clock remove --mind atlas --id <schedule-id>
|
|
166
176
|
```
|
|
167
177
|
|
|
168
178
|
## Pages
|
package/dist/api.d.ts
CHANGED
|
@@ -1449,6 +1449,121 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
|
|
|
1449
1449
|
status: hono_utils_http_status.ContentfulStatusCode;
|
|
1450
1450
|
};
|
|
1451
1451
|
};
|
|
1452
|
+
} & {
|
|
1453
|
+
"/:name/conversations": {
|
|
1454
|
+
$get: {
|
|
1455
|
+
input: {
|
|
1456
|
+
param: {
|
|
1457
|
+
name: string;
|
|
1458
|
+
};
|
|
1459
|
+
};
|
|
1460
|
+
output: {
|
|
1461
|
+
error: string;
|
|
1462
|
+
};
|
|
1463
|
+
outputFormat: "json";
|
|
1464
|
+
status: 404;
|
|
1465
|
+
} | {
|
|
1466
|
+
input: {
|
|
1467
|
+
param: {
|
|
1468
|
+
name: string;
|
|
1469
|
+
};
|
|
1470
|
+
};
|
|
1471
|
+
output: {
|
|
1472
|
+
id: string;
|
|
1473
|
+
mind_name: string | null;
|
|
1474
|
+
channel: string;
|
|
1475
|
+
type: "dm" | "channel";
|
|
1476
|
+
name: string | null;
|
|
1477
|
+
user_id: number | null;
|
|
1478
|
+
title: string | null;
|
|
1479
|
+
created_at: string;
|
|
1480
|
+
updated_at: string;
|
|
1481
|
+
participants: {
|
|
1482
|
+
userId: number;
|
|
1483
|
+
username: string;
|
|
1484
|
+
userType: "brain" | "mind" | "puppet";
|
|
1485
|
+
role: "owner" | "member";
|
|
1486
|
+
displayName?: string | null | undefined;
|
|
1487
|
+
description?: string | null | undefined;
|
|
1488
|
+
avatar?: string | null | undefined;
|
|
1489
|
+
}[];
|
|
1490
|
+
lastMessage?: {
|
|
1491
|
+
role: "user" | "assistant";
|
|
1492
|
+
senderName: string | null;
|
|
1493
|
+
text: string;
|
|
1494
|
+
createdAt: string;
|
|
1495
|
+
} | undefined;
|
|
1496
|
+
}[];
|
|
1497
|
+
outputFormat: "json";
|
|
1498
|
+
status: hono_utils_http_status.ContentfulStatusCode;
|
|
1499
|
+
};
|
|
1500
|
+
};
|
|
1501
|
+
} & {
|
|
1502
|
+
"/:name/conversations/:convId/messages": {
|
|
1503
|
+
$get: {
|
|
1504
|
+
input: {
|
|
1505
|
+
param: {
|
|
1506
|
+
name: string;
|
|
1507
|
+
} & {
|
|
1508
|
+
convId: string;
|
|
1509
|
+
};
|
|
1510
|
+
};
|
|
1511
|
+
output: {
|
|
1512
|
+
error: string;
|
|
1513
|
+
};
|
|
1514
|
+
outputFormat: "json";
|
|
1515
|
+
status: 404;
|
|
1516
|
+
} | {
|
|
1517
|
+
input: {
|
|
1518
|
+
param: {
|
|
1519
|
+
name: string;
|
|
1520
|
+
} & {
|
|
1521
|
+
convId: string;
|
|
1522
|
+
};
|
|
1523
|
+
};
|
|
1524
|
+
output: {
|
|
1525
|
+
error: string;
|
|
1526
|
+
};
|
|
1527
|
+
outputFormat: "json";
|
|
1528
|
+
status: 400;
|
|
1529
|
+
} | {
|
|
1530
|
+
input: {
|
|
1531
|
+
param: {
|
|
1532
|
+
name: string;
|
|
1533
|
+
} & {
|
|
1534
|
+
convId: string;
|
|
1535
|
+
};
|
|
1536
|
+
};
|
|
1537
|
+
output: {
|
|
1538
|
+
items: {
|
|
1539
|
+
id: number;
|
|
1540
|
+
conversation_id: string;
|
|
1541
|
+
role: "user" | "assistant";
|
|
1542
|
+
sender_name: string | null;
|
|
1543
|
+
content: ({
|
|
1544
|
+
type: "text";
|
|
1545
|
+
text: string;
|
|
1546
|
+
} | {
|
|
1547
|
+
type: "tool_use";
|
|
1548
|
+
name: string;
|
|
1549
|
+
input: hono_utils_types.JSONValue;
|
|
1550
|
+
} | {
|
|
1551
|
+
type: "tool_result";
|
|
1552
|
+
output: string;
|
|
1553
|
+
is_error?: boolean | undefined;
|
|
1554
|
+
} | {
|
|
1555
|
+
type: "image";
|
|
1556
|
+
media_type: string;
|
|
1557
|
+
data: string;
|
|
1558
|
+
})[];
|
|
1559
|
+
created_at: string;
|
|
1560
|
+
}[];
|
|
1561
|
+
hasMore: boolean;
|
|
1562
|
+
};
|
|
1563
|
+
outputFormat: "json";
|
|
1564
|
+
status: hono_utils_http_status.ContentfulStatusCode;
|
|
1565
|
+
};
|
|
1566
|
+
};
|
|
1452
1567
|
} & {
|
|
1453
1568
|
"/:name/budget": {
|
|
1454
1569
|
$get: {
|
|
@@ -1876,6 +1991,72 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
|
|
|
1876
1991
|
};
|
|
1877
1992
|
};
|
|
1878
1993
|
}, "/api/minds"> | hono_types.MergeSchemaPath<{
|
|
1994
|
+
"/:name/clock/status": {
|
|
1995
|
+
$get: {
|
|
1996
|
+
input: {
|
|
1997
|
+
param: {
|
|
1998
|
+
name: string;
|
|
1999
|
+
};
|
|
2000
|
+
};
|
|
2001
|
+
output: {
|
|
2002
|
+
error: string;
|
|
2003
|
+
};
|
|
2004
|
+
outputFormat: "json";
|
|
2005
|
+
status: 404;
|
|
2006
|
+
} | {
|
|
2007
|
+
input: {
|
|
2008
|
+
param: {
|
|
2009
|
+
name: string;
|
|
2010
|
+
};
|
|
2011
|
+
};
|
|
2012
|
+
output: {
|
|
2013
|
+
sleep: {
|
|
2014
|
+
sleeping: boolean;
|
|
2015
|
+
sleepingSince: string | null;
|
|
2016
|
+
scheduledWakeAt: string | null;
|
|
2017
|
+
wokenByTrigger: boolean;
|
|
2018
|
+
voluntaryWakeAt: string | null;
|
|
2019
|
+
queuedMessageCount: number;
|
|
2020
|
+
triggerWakeHistory: {
|
|
2021
|
+
channel: string;
|
|
2022
|
+
at: string;
|
|
2023
|
+
}[];
|
|
2024
|
+
} | null;
|
|
2025
|
+
sleepConfig: {
|
|
2026
|
+
enabled?: boolean | undefined;
|
|
2027
|
+
schedule?: {
|
|
2028
|
+
sleep: string;
|
|
2029
|
+
wake: string;
|
|
2030
|
+
} | undefined;
|
|
2031
|
+
wakeTriggers?: {
|
|
2032
|
+
mentions?: boolean | undefined;
|
|
2033
|
+
dms?: boolean | undefined;
|
|
2034
|
+
channels?: string[] | undefined;
|
|
2035
|
+
senders?: string[] | undefined;
|
|
2036
|
+
} | undefined;
|
|
2037
|
+
} | null;
|
|
2038
|
+
schedules: {
|
|
2039
|
+
id: string;
|
|
2040
|
+
cron?: string | undefined;
|
|
2041
|
+
fireAt?: string | undefined;
|
|
2042
|
+
message?: string | undefined;
|
|
2043
|
+
script?: string | undefined;
|
|
2044
|
+
enabled: boolean;
|
|
2045
|
+
whileSleeping?: "skip" | "queue" | "trigger-wake" | undefined;
|
|
2046
|
+
skipWhenSleeping?: boolean | undefined;
|
|
2047
|
+
channel?: string | undefined;
|
|
2048
|
+
}[];
|
|
2049
|
+
upcoming: {
|
|
2050
|
+
id: string;
|
|
2051
|
+
at: string;
|
|
2052
|
+
type: "cron" | "timer";
|
|
2053
|
+
}[];
|
|
2054
|
+
};
|
|
2055
|
+
outputFormat: "json";
|
|
2056
|
+
status: hono_utils_http_status.ContentfulStatusCode;
|
|
2057
|
+
};
|
|
2058
|
+
};
|
|
2059
|
+
} & {
|
|
1879
2060
|
"/:name/schedules": {
|
|
1880
2061
|
$get: {
|
|
1881
2062
|
input: {
|
|
@@ -1896,10 +2077,12 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
|
|
|
1896
2077
|
};
|
|
1897
2078
|
output: {
|
|
1898
2079
|
id: string;
|
|
1899
|
-
cron
|
|
2080
|
+
cron?: string | undefined;
|
|
2081
|
+
fireAt?: string | undefined;
|
|
1900
2082
|
message?: string | undefined;
|
|
1901
2083
|
script?: string | undefined;
|
|
1902
2084
|
enabled: boolean;
|
|
2085
|
+
whileSleeping?: "skip" | "queue" | "trigger-wake" | undefined;
|
|
1903
2086
|
skipWhenSleeping?: boolean | undefined;
|
|
1904
2087
|
channel?: string | undefined;
|
|
1905
2088
|
}[];
|
|
@@ -3381,7 +3564,7 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
|
|
|
3381
3564
|
id: string;
|
|
3382
3565
|
mind_name: string | null;
|
|
3383
3566
|
channel: string;
|
|
3384
|
-
type: "dm" | "
|
|
3567
|
+
type: "dm" | "channel";
|
|
3385
3568
|
name: string | null;
|
|
3386
3569
|
user_id: number | null;
|
|
3387
3570
|
title: string | null;
|
|
@@ -3427,7 +3610,7 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
|
|
|
3427
3610
|
id: string;
|
|
3428
3611
|
mind_name: string | null;
|
|
3429
3612
|
channel: string;
|
|
3430
|
-
type: "dm" | "
|
|
3613
|
+
type: "dm" | "channel";
|
|
3431
3614
|
name: string | null;
|
|
3432
3615
|
user_id: number | null;
|
|
3433
3616
|
title: string | null;
|
|
@@ -4287,7 +4470,7 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
|
|
|
4287
4470
|
id: string;
|
|
4288
4471
|
mind_name: string | null;
|
|
4289
4472
|
channel: string;
|
|
4290
|
-
type: "dm" | "
|
|
4473
|
+
type: "dm" | "channel";
|
|
4291
4474
|
name: string | null;
|
|
4292
4475
|
user_id: number | null;
|
|
4293
4476
|
title: string | null;
|
|
@@ -4372,7 +4555,7 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
|
|
|
4372
4555
|
id: string;
|
|
4373
4556
|
mind_name: string | null;
|
|
4374
4557
|
channel: string;
|
|
4375
|
-
type: "dm" | "
|
|
4558
|
+
type: "dm" | "channel";
|
|
4376
4559
|
name: string | null;
|
|
4377
4560
|
user_id: number | null;
|
|
4378
4561
|
title: string | null;
|
|
@@ -4444,7 +4627,7 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
|
|
|
4444
4627
|
id: string;
|
|
4445
4628
|
mind_name: string | null;
|
|
4446
4629
|
channel: string;
|
|
4447
|
-
type: "dm" | "
|
|
4630
|
+
type: "dm" | "channel";
|
|
4448
4631
|
name: string | null;
|
|
4449
4632
|
user_id: number | null;
|
|
4450
4633
|
title: string | null;
|
|
@@ -4467,7 +4650,7 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
|
|
|
4467
4650
|
id: string;
|
|
4468
4651
|
mind_name: string | null;
|
|
4469
4652
|
channel: string;
|
|
4470
|
-
type: "dm" | "
|
|
4653
|
+
type: "dm" | "channel";
|
|
4471
4654
|
name: string | null;
|
|
4472
4655
|
user_id: number | null;
|
|
4473
4656
|
title: string | null;
|
|
@@ -5018,7 +5201,7 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
|
|
|
5018
5201
|
id: string;
|
|
5019
5202
|
mind_name: string | null;
|
|
5020
5203
|
channel: string;
|
|
5021
|
-
type: "dm" | "
|
|
5204
|
+
type: "dm" | "channel";
|
|
5022
5205
|
name: string | null;
|
|
5023
5206
|
user_id: number | null;
|
|
5024
5207
|
title: string | null;
|
|
@@ -5149,7 +5332,7 @@ declare const routes: hono_hono_base.HonoBase<hono_types.BlankEnv, hono_types.Bl
|
|
|
5149
5332
|
id: string;
|
|
5150
5333
|
mind_name: string | null;
|
|
5151
5334
|
channel: string;
|
|
5152
|
-
type: "dm" | "
|
|
5335
|
+
type: "dm" | "channel";
|
|
5153
5336
|
name: string | null;
|
|
5154
5337
|
user_id: number | null;
|
|
5155
5338
|
title: string | null;
|
|
@@ -16,7 +16,7 @@ async function run(args) {
|
|
|
16
16
|
await import("./read-36UFXN3G.js").then((m) => m.run(subArgs));
|
|
17
17
|
break;
|
|
18
18
|
case "create":
|
|
19
|
-
await import("./create-
|
|
19
|
+
await import("./create-DFCAGEE5.js").then((m) => m.run(subArgs));
|
|
20
20
|
break;
|
|
21
21
|
case "bridge":
|
|
22
22
|
await import("./bridge-FQHZL3MC.js").then((m) => m.run(subArgs));
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// src/lib/slugify.ts
|
|
4
|
+
function slugify(text) {
|
|
5
|
+
return text.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
|
|
6
|
+
}
|
|
7
|
+
function buildVoluteSlug(opts) {
|
|
8
|
+
if (opts.convType === "channel" && opts.convName) {
|
|
9
|
+
return `volute:#${opts.convName}`;
|
|
10
|
+
}
|
|
11
|
+
const other = opts.participants.find((p) => p.username !== opts.mindUsername);
|
|
12
|
+
const otherSlug = other ? slugify(other.username) : "";
|
|
13
|
+
return otherSlug ? `volute:@${otherSlug}` : `volute:${opts.conversationId}`;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export {
|
|
17
|
+
slugify,
|
|
18
|
+
buildVoluteSlug
|
|
19
|
+
};
|