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.
Files changed (44) hide show
  1. package/README.md +15 -5
  2. package/dist/api.d.ts +192 -9
  3. package/dist/{chat-M4SX42JD.js → chat-KTPOR2JT.js} +1 -1
  4. package/dist/chunk-A6TUJJ3L.js +19 -0
  5. package/dist/{chunk-AAPXKR5V.js → chunk-CMILSHZD.js} +138 -285
  6. package/dist/{chunk-K5NAC55T.js → chunk-CQ7SNKNI.js} +1 -1
  7. package/dist/{chunk-POSXWWTA.js → chunk-EHZKEMMV.js} +4 -4
  8. package/dist/{chunk-IAYBDWVG.js → chunk-FLZGS4QH.js} +145 -0
  9. package/dist/chunk-THUUIU3E.js +232 -0
  10. package/dist/cli.js +11 -8
  11. package/dist/clock-DGCBVGYA.js +259 -0
  12. package/dist/{cloud-sync-HDL6PHZI.js → cloud-sync-KILFGV5Q.js} +6 -5
  13. package/dist/connectors/discord-bridge.js +1 -1
  14. package/dist/connectors/slack-bridge.js +1 -1
  15. package/dist/connectors/telegram-bridge.js +1 -1
  16. package/dist/{conversations-M2K4253F.js → conversations-P5BL7RMX.js} +7 -1
  17. package/dist/create-DFCAGEE5.js +70 -0
  18. package/dist/{daemon-restart-G4B2OYAB.js → daemon-restart-UHOMICXT.js} +1 -1
  19. package/dist/daemon.js +181 -66
  20. package/dist/{message-delivery-HV3S6HZV.js → message-delivery-Q7VUMIEI.js} +10 -7
  21. package/dist/{mind-activity-tracker-EN6XNXPF.js → mind-activity-tracker-WRHFI3YW.js} +1 -1
  22. package/dist/{mind-manager-S6ILZVX3.js → mind-manager-P66HQDNE.js} +1 -1
  23. package/dist/{package-CG4RWUGP.js → package-OFKXNKJF.js} +1 -1
  24. package/dist/pages-watcher-P7QECRE2.js +21 -0
  25. package/dist/skills/dreaming/references/INSTALL.md +3 -17
  26. package/dist/skills/volute-mind/SKILL.md +43 -16
  27. package/dist/{sleep-manager-WMVG2VCL.js → sleep-manager-G4B5GW5P.js} +6 -5
  28. package/dist/{up-GM2JOH2Y.js → up-W6VAK2XE.js} +1 -1
  29. package/dist/{version-notify-JDUF4HQJ.js → version-notify-WDHRO3XD.js} +8 -7
  30. package/dist/web-assets/assets/index-BmKDnWDB.css +1 -0
  31. package/dist/web-assets/assets/index-CLJMx-GA.js +71 -0
  32. package/dist/web-assets/index.html +2 -2
  33. package/package.json +1 -1
  34. package/templates/_base/src/lib/logger.ts +10 -49
  35. package/templates/_base/src/lib/router.ts +1 -9
  36. package/templates/claude/src/lib/stream-consumer.ts +1 -4
  37. package/templates/pi/src/lib/event-handler.ts +1 -14
  38. package/dist/chunk-T6HKBWXZ.js +0 -23
  39. package/dist/create-D7J73A6H.js +0 -45
  40. package/dist/schedule-QTJMFATP.js +0 -154
  41. package/dist/web-assets/assets/index-BZGvToHi.css +0 -1
  42. package/dist/web-assets/assets/index-Cz4TrpzB.js +0 -75
  43. /package/dist/{chunk-SGVNFZHW.js → chunk-DUAUMCEE.js} +0 -0
  44. /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
- ## Schedules
155
+ ## Clock
156
156
 
157
- Cron-based scheduled messages daily check-ins, periodic tasks, whatever you need.
157
+ Schedules, timers, and sleep/wake cycles a mind's daily rhythm.
158
158
 
159
159
  ```sh
160
- volute schedule add --mind atlas \
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
- volute schedule list --mind atlas
165
- volute schedule remove --mind atlas --id <schedule-id>
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: string;
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" | "group" | "channel";
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" | "group" | "channel";
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" | "group" | "channel";
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" | "group" | "channel";
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" | "group" | "channel";
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" | "group" | "channel";
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" | "group" | "channel";
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" | "group" | "channel";
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-D7J73A6H.js").then((m) => m.run(subArgs));
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
+ };