volute 0.45.2 → 0.46.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 (62) hide show
  1. package/README.md +3 -3
  2. package/dist/{activity-events-BUR2RYTJ.js → activity-events-NF6VWTJQ.js} +1 -1
  3. package/dist/{auth-FLAEXXZK.js → auth-CCFAU4GQ.js} +2 -2
  4. package/dist/{chat-76MRWWQX.js → chat-ZIQQS25U.js} +1 -1
  5. package/dist/chunk-4YU7HF4L.js +237 -0
  6. package/dist/{chunk-OP4JG2BS.js → chunk-5ZQZDDIK.js} +6 -2
  7. package/dist/{chunk-FR6S2KNN.js → chunk-BJZ4PV7R.js} +1 -1
  8. package/dist/{chunk-NYC5U6K7.js → chunk-E3DA4HYV.js} +4 -4
  9. package/dist/{chunk-YT7PEESJ.js → chunk-JO5IO4FH.js} +245 -124
  10. package/dist/{chunk-7ZUB63PS.js → chunk-KGIXX4NM.js} +1 -1
  11. package/dist/{chunk-EJVPTVTI.js → chunk-KQSFTPIM.js} +1 -1
  12. package/dist/{chunk-T6HYVHPG.js → chunk-OV7ZQ2GH.js} +1 -1
  13. package/dist/{clock-K43IMROX.js → chunk-PJ45FQPT.js} +21 -16
  14. package/dist/{chunk-UYLGEDVD.js → chunk-YXSUMLTC.js} +44 -267
  15. package/dist/{chunk-7C44R625.js → chunk-ZNMCCHCP.js} +47 -1
  16. package/dist/cli.js +11 -11
  17. package/dist/clock-RHS2JEDL.js +16 -0
  18. package/dist/{cloud-sync-3OJOPZRT.js → cloud-sync-46RS4SDA.js} +9 -8
  19. package/dist/{conversations-JZTD6KLR.js → conversations-CJOOCGNW.js} +2 -2
  20. package/dist/{daemon-restart-TIHKVVVA.js → daemon-restart-VFEI57UO.js} +1 -1
  21. package/dist/daemon.js +249 -170
  22. package/dist/{delete-BFMIGAIB.js → delete-HPLC7ETU.js} +1 -1
  23. package/dist/{delivery-manager-VDVKVA46.js → delivery-manager-JINZRG2W.js} +9 -8
  24. package/dist/{echo-text-6JJOPUD4.js → echo-text-VQPB5L2X.js} +10 -9
  25. package/dist/{export-GGIVO76O.js → export-LY723I3Z.js} +3 -3
  26. package/dist/{extensions-JONTW2HF.js → extensions-ZELQLTSR.js} +9 -8
  27. package/dist/{message-delivery-3C65ZI6L.js → message-delivery-R7JSQGYX.js} +11 -8
  28. package/dist/{mind-DWB6XYCH.js → mind-LHKS55DI.js} +9 -9
  29. package/dist/{mind-activity-tracker-POBLU3LC.js → mind-activity-tracker-3QRNJVR4.js} +2 -2
  30. package/dist/{mind-service-3F4I46CI.js → mind-service-NB2JMWQZ.js} +11 -8
  31. package/dist/mind-sleep-74TGOQBC.js +83 -0
  32. package/dist/{package-A7KXT67Q.js → package-DOD6CPO6.js} +2 -1
  33. package/dist/{scheduler-P6DXLLXI.js → scheduler-WVKII3LA.js} +9 -8
  34. package/dist/{seed-HCP5NYKH.js → seed-CNYIHPOH.js} +1 -1
  35. package/dist/{seed-cmd-ILOGNIFB.js → seed-cmd-AVNUNLZV.js} +2 -2
  36. package/dist/{seed-create-OURS2LS4.js → seed-create-ANXGYSCC.js} +3 -3
  37. package/dist/{seed-sprout-ELDFDAN6.js → seed-sprout-NIUFTX32.js} +5 -3
  38. package/dist/{send-AAIOPJAV.js → send-SPE6DVNJ.js} +6 -0
  39. package/dist/{setup-DQM5VPY4.js → setup-QT2A25SY.js} +1 -1
  40. package/dist/skills/orientation/SKILL.md +1 -1
  41. package/dist/skills/volute-mind/SKILL.md +8 -8
  42. package/dist/skills/volute-mind/references/sleep.md +8 -1
  43. package/dist/{skills-BKINFL7W.js → skills-AKCFA7BN.js} +1 -1
  44. package/dist/{sleep-manager-HCUH4PM4.js → sleep-manager-G6TXSDP7.js} +9 -8
  45. package/dist/{spirit-DBTIW7P4.js → spirit-RPBLLUQ5.js} +2 -2
  46. package/dist/{sprout-W3KC7UGK.js → sprout-SMX42ZBP.js} +1 -1
  47. package/dist/{system-chat-XOALE2RD.js → system-chat-NDAW6YP7.js} +9 -8
  48. package/dist/{turn-tracker-2W6Q2NSR.js → turn-tracker-FOIBNUUA.js} +2 -1
  49. package/dist/{up-FTK7CTO3.js → up-PS6PFS75.js} +1 -1
  50. package/dist/{version-notify-3XMAIQTE.js → version-notify-C5CH7CVP.js} +15 -10
  51. package/dist/web-assets/assets/{index-Bc2m8gRC.js → index-CU6XWICM.js} +3 -3
  52. package/dist/web-assets/index.html +1 -1
  53. package/package.json +2 -1
  54. package/templates/_base/home/VOLUTE.md +6 -2
  55. package/templates/_base/src/lib/context-breakdown.ts +57 -67
  56. package/templates/_base/src/lib/volute-server.ts +2 -2
  57. package/templates/claude/src/agent.ts +78 -42
  58. package/templates/claude/src/lib/session-reaper.ts +31 -0
  59. package/templates/codex/src/agent.ts +62 -40
  60. package/templates/pi/src/agent.ts +55 -38
  61. package/dist/mind-sleep-YMBR3I35.js +0 -47
  62. /package/dist/{chunk-QNQMSWZE.js → chunk-K6T43YBD.js} +0 -0
@@ -28,7 +28,7 @@ var cmd = command({
28
28
  console.error(data.error ?? "Failed to delete mind");
29
29
  process.exit(1);
30
30
  }
31
- console.log(`Removed ${name}.`);
31
+ console.log(`Deleted ${name} from the registry.`);
32
32
  if (flags.force) {
33
33
  console.log("Deleted mind directory.");
34
34
  } else {
@@ -4,22 +4,23 @@ import {
4
4
  getDeliveryManager,
5
5
  initDeliveryManager,
6
6
  tryGetDeliveryManager
7
- } from "./chunk-YT7PEESJ.js";
7
+ } from "./chunk-JO5IO4FH.js";
8
8
  import "./chunk-ZDZISKCL.js";
9
- import "./chunk-FR6S2KNN.js";
9
+ import "./chunk-BJZ4PV7R.js";
10
10
  import "./chunk-QLWG3C2Z.js";
11
- import "./chunk-7ZUB63PS.js";
12
- import "./chunk-OP4JG2BS.js";
11
+ import "./chunk-KGIXX4NM.js";
12
+ import "./chunk-5ZQZDDIK.js";
13
13
  import "./chunk-PFZBNKUH.js";
14
14
  import "./chunk-JZ62SYWR.js";
15
- import "./chunk-EJVPTVTI.js";
15
+ import "./chunk-KQSFTPIM.js";
16
16
  import "./chunk-4JOQZPCE.js";
17
- import "./chunk-UYLGEDVD.js";
17
+ import "./chunk-YXSUMLTC.js";
18
+ import "./chunk-4YU7HF4L.js";
18
19
  import "./chunk-H2X54EHC.js";
19
20
  import "./chunk-IHKGWTGT.js";
20
21
  import "./chunk-F7H6ATM4.js";
21
- import "./chunk-T6HYVHPG.js";
22
- import "./chunk-7C44R625.js";
22
+ import "./chunk-OV7ZQ2GH.js";
23
+ import "./chunk-ZNMCCHCP.js";
23
24
  import "./chunk-T2TP6ZC6.js";
24
25
  import "./chunk-ALKYQULU.js";
25
26
  import "./chunk-ZV7MFISX.js";
@@ -2,25 +2,26 @@
2
2
  import {
3
3
  clearEchoTextCache,
4
4
  echoTextToChannel
5
- } from "./chunk-NYC5U6K7.js";
5
+ } from "./chunk-E3DA4HYV.js";
6
6
  import "./chunk-RXEEYDIB.js";
7
- import "./chunk-YT7PEESJ.js";
7
+ import "./chunk-JO5IO4FH.js";
8
8
  import "./chunk-ZDZISKCL.js";
9
- import "./chunk-FR6S2KNN.js";
9
+ import "./chunk-BJZ4PV7R.js";
10
10
  import "./chunk-QLWG3C2Z.js";
11
- import "./chunk-7ZUB63PS.js";
12
- import "./chunk-OP4JG2BS.js";
11
+ import "./chunk-KGIXX4NM.js";
12
+ import "./chunk-5ZQZDDIK.js";
13
13
  import "./chunk-PFZBNKUH.js";
14
14
  import "./chunk-JZ62SYWR.js";
15
- import "./chunk-EJVPTVTI.js";
15
+ import "./chunk-KQSFTPIM.js";
16
16
  import "./chunk-4JOQZPCE.js";
17
- import "./chunk-UYLGEDVD.js";
17
+ import "./chunk-YXSUMLTC.js";
18
+ import "./chunk-4YU7HF4L.js";
18
19
  import "./chunk-TQJ6ZYVY.js";
19
20
  import "./chunk-H2X54EHC.js";
20
21
  import "./chunk-IHKGWTGT.js";
21
22
  import "./chunk-F7H6ATM4.js";
22
- import "./chunk-T6HYVHPG.js";
23
- import "./chunk-7C44R625.js";
23
+ import "./chunk-OV7ZQ2GH.js";
24
+ import "./chunk-ZNMCCHCP.js";
24
25
  import "./chunk-T2TP6ZC6.js";
25
26
  import "./chunk-LGNUFVMR.js";
26
27
  import "./chunk-ALKYQULU.js";
@@ -24,7 +24,7 @@ var cmd = command({
24
24
  flags: {
25
25
  "include-env": { type: "boolean", description: "Include environment variables" },
26
26
  "include-identity": { type: "boolean", description: "Include identity keys" },
27
- "include-connectors": { type: "boolean", description: "Include connector configs" },
27
+ "include-bridges": { type: "boolean", description: "Include bridge configs" },
28
28
  "include-history": { type: "boolean", description: "Include message history" },
29
29
  "include-sessions": { type: "boolean", description: "Include session data" },
30
30
  "include-src": { type: "boolean", description: "Include source code" },
@@ -46,7 +46,7 @@ var cmd = command({
46
46
  const includeAll = flags.all;
47
47
  const includeEnv = includeAll || flags["include-env"];
48
48
  const includeIdentity = includeAll || flags["include-identity"];
49
- const includeConnectors = includeAll || flags["include-connectors"];
49
+ const includeConnectors = includeAll || flags["include-bridges"];
50
50
  const includeHistory = includeAll || flags["include-history"];
51
51
  const includeSessions = includeAll || flags["include-sessions"];
52
52
  const includeSrc = includeAll || flags["include-src"];
@@ -97,7 +97,7 @@ Exported ${name} \u2192 ${outputPath} (${sizeMB} MB)`);
97
97
  ["src", includeSrc],
98
98
  ["env", includeEnv],
99
99
  ["identity", includeIdentity],
100
- ["connectors", includeConnectors],
100
+ ["bridges", includeConnectors],
101
101
  ["history", includeHistory],
102
102
  ["sessions", includeSessions]
103
103
  ]) {
@@ -13,22 +13,23 @@ import {
13
13
  parseCommandArgs,
14
14
  setExtensionEnabled,
15
15
  uninstallNpmExtension
16
- } from "./chunk-YT7PEESJ.js";
16
+ } from "./chunk-JO5IO4FH.js";
17
17
  import "./chunk-ZDZISKCL.js";
18
- import "./chunk-FR6S2KNN.js";
18
+ import "./chunk-BJZ4PV7R.js";
19
19
  import "./chunk-QLWG3C2Z.js";
20
- import "./chunk-7ZUB63PS.js";
21
- import "./chunk-OP4JG2BS.js";
20
+ import "./chunk-KGIXX4NM.js";
21
+ import "./chunk-5ZQZDDIK.js";
22
22
  import "./chunk-PFZBNKUH.js";
23
23
  import "./chunk-JZ62SYWR.js";
24
- import "./chunk-EJVPTVTI.js";
24
+ import "./chunk-KQSFTPIM.js";
25
25
  import "./chunk-4JOQZPCE.js";
26
- import "./chunk-UYLGEDVD.js";
26
+ import "./chunk-YXSUMLTC.js";
27
+ import "./chunk-4YU7HF4L.js";
27
28
  import "./chunk-H2X54EHC.js";
28
29
  import "./chunk-IHKGWTGT.js";
29
30
  import "./chunk-F7H6ATM4.js";
30
- import "./chunk-T6HYVHPG.js";
31
- import "./chunk-7C44R625.js";
31
+ import "./chunk-OV7ZQ2GH.js";
32
+ import "./chunk-ZNMCCHCP.js";
32
33
  import "./chunk-T2TP6ZC6.js";
33
34
  import "./chunk-ALKYQULU.js";
34
35
  import "./chunk-ZV7MFISX.js";
@@ -1,31 +1,34 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
+ deliverBatch,
3
4
  deliverMessage,
4
5
  linkToolResultToTurn,
5
6
  recordInbound,
6
7
  recordOutbound,
7
8
  resolveSleepAction
8
- } from "./chunk-YT7PEESJ.js";
9
+ } from "./chunk-JO5IO4FH.js";
9
10
  import "./chunk-ZDZISKCL.js";
10
- import "./chunk-FR6S2KNN.js";
11
+ import "./chunk-BJZ4PV7R.js";
11
12
  import "./chunk-QLWG3C2Z.js";
12
- import "./chunk-7ZUB63PS.js";
13
- import "./chunk-OP4JG2BS.js";
13
+ import "./chunk-KGIXX4NM.js";
14
+ import "./chunk-5ZQZDDIK.js";
14
15
  import "./chunk-PFZBNKUH.js";
15
16
  import "./chunk-JZ62SYWR.js";
16
- import "./chunk-EJVPTVTI.js";
17
+ import "./chunk-KQSFTPIM.js";
17
18
  import "./chunk-4JOQZPCE.js";
18
- import "./chunk-UYLGEDVD.js";
19
+ import "./chunk-YXSUMLTC.js";
20
+ import "./chunk-4YU7HF4L.js";
19
21
  import "./chunk-H2X54EHC.js";
20
22
  import "./chunk-IHKGWTGT.js";
21
23
  import "./chunk-F7H6ATM4.js";
22
- import "./chunk-T6HYVHPG.js";
23
- import "./chunk-7C44R625.js";
24
+ import "./chunk-OV7ZQ2GH.js";
25
+ import "./chunk-ZNMCCHCP.js";
24
26
  import "./chunk-T2TP6ZC6.js";
25
27
  import "./chunk-ALKYQULU.js";
26
28
  import "./chunk-ZV7MFISX.js";
27
29
  import "./chunk-K3NQKI34.js";
28
30
  export {
31
+ deliverBatch,
29
32
  deliverMessage,
30
33
  linkToolResultToTurn,
31
34
  recordInbound,
@@ -34,7 +34,7 @@ var cmd = subcommands({
34
34
  },
35
35
  delete: {
36
36
  description: "Delete a mind",
37
- run: (args) => import("./delete-BFMIGAIB.js").then((m) => m.run(args))
37
+ run: (args) => import("./delete-HPLC7ETU.js").then((m) => m.run(args))
38
38
  },
39
39
  list: {
40
40
  description: "List all minds",
@@ -62,31 +62,31 @@ var cmd = subcommands({
62
62
  },
63
63
  export: {
64
64
  description: "Export a mind",
65
- run: (args) => import("./export-GGIVO76O.js").then((m) => m.run(args))
65
+ run: (args) => import("./export-LY723I3Z.js").then((m) => m.run(args))
66
66
  },
67
67
  split: {
68
- description: "Create a variant",
68
+ description: "Split off a variant",
69
69
  run: (args) => import("./split-WBMZXBHF.js").then((m) => m.run(args))
70
70
  },
71
71
  join: {
72
- description: "Merge variant back",
72
+ description: "Join a variant back into its parent",
73
73
  run: (args) => import("./join-ZJV7W6MO.js").then((m) => m.run(args))
74
74
  },
75
75
  sleep: {
76
- description: "Put a mind to sleep",
77
- run: (args) => import("./mind-sleep-YMBR3I35.js").then((m) => m.run(args))
76
+ description: "(legacy) Use 'volute clock sleep' instead",
77
+ run: (args) => import("./mind-sleep-74TGOQBC.js").then((m) => m.run(args))
78
78
  },
79
79
  wake: {
80
- description: "Wake a sleeping mind",
80
+ description: "(legacy) Use 'volute clock wake' instead",
81
81
  run: (args) => import("./mind-wake-LCLGTXA2.js").then((m) => m.run(args))
82
82
  },
83
83
  seed: {
84
84
  description: "(legacy) Use 'volute seed create' instead",
85
- run: (args) => import("./seed-HCP5NYKH.js").then((m) => m.run(args))
85
+ run: (args) => import("./seed-CNYIHPOH.js").then((m) => m.run(args))
86
86
  },
87
87
  sprout: {
88
88
  description: "(legacy) Use 'volute seed sprout' instead",
89
- run: (args) => import("./sprout-W3KC7UGK.js").then((m) => m.run(args))
89
+ run: (args) => import("./sprout-SMX42ZBP.js").then((m) => m.run(args))
90
90
  }
91
91
  },
92
92
  footer: "Mind name can be omitted (where applicable) if VOLUTE_MIND is set."
@@ -4,8 +4,8 @@ import {
4
4
  markIdle,
5
5
  onMindEvent,
6
6
  stopAll
7
- } from "./chunk-EJVPTVTI.js";
8
- import "./chunk-7C44R625.js";
7
+ } from "./chunk-KQSFTPIM.js";
8
+ import "./chunk-ZNMCCHCP.js";
9
9
  import "./chunk-T2TP6ZC6.js";
10
10
  import "./chunk-ALKYQULU.js";
11
11
  import "./chunk-ZV7MFISX.js";
@@ -1,32 +1,35 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
+ buildSeedOrientation,
3
4
  sleepMind,
4
5
  startMindFull,
5
6
  startSpiritFull,
6
7
  stopMindFull,
7
8
  stopSpiritFull,
8
9
  wakeMind
9
- } from "./chunk-YT7PEESJ.js";
10
+ } from "./chunk-JO5IO4FH.js";
10
11
  import "./chunk-ZDZISKCL.js";
11
- import "./chunk-FR6S2KNN.js";
12
+ import "./chunk-BJZ4PV7R.js";
12
13
  import "./chunk-QLWG3C2Z.js";
13
- import "./chunk-7ZUB63PS.js";
14
- import "./chunk-OP4JG2BS.js";
14
+ import "./chunk-KGIXX4NM.js";
15
+ import "./chunk-5ZQZDDIK.js";
15
16
  import "./chunk-PFZBNKUH.js";
16
17
  import "./chunk-JZ62SYWR.js";
17
- import "./chunk-EJVPTVTI.js";
18
+ import "./chunk-KQSFTPIM.js";
18
19
  import "./chunk-4JOQZPCE.js";
19
- import "./chunk-UYLGEDVD.js";
20
+ import "./chunk-YXSUMLTC.js";
21
+ import "./chunk-4YU7HF4L.js";
20
22
  import "./chunk-H2X54EHC.js";
21
23
  import "./chunk-IHKGWTGT.js";
22
24
  import "./chunk-F7H6ATM4.js";
23
- import "./chunk-T6HYVHPG.js";
24
- import "./chunk-7C44R625.js";
25
+ import "./chunk-OV7ZQ2GH.js";
26
+ import "./chunk-ZNMCCHCP.js";
25
27
  import "./chunk-T2TP6ZC6.js";
26
28
  import "./chunk-ALKYQULU.js";
27
29
  import "./chunk-ZV7MFISX.js";
28
30
  import "./chunk-K3NQKI34.js";
29
31
  export {
32
+ buildSeedOrientation,
30
33
  sleepMind,
31
34
  startMindFull,
32
35
  startSpiritFull,
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ parseDuration
4
+ } from "./chunk-PJ45FQPT.js";
5
+ import "./chunk-5T5YMX6S.js";
6
+ import {
7
+ resolveMindName
8
+ } from "./chunk-BTY4WNFE.js";
9
+ import {
10
+ daemonFetch
11
+ } from "./chunk-RBNMDAKB.js";
12
+ import "./chunk-LOPXTW6H.js";
13
+ import {
14
+ command
15
+ } from "./chunk-TXSA4Q3V.js";
16
+ import "./chunk-O7IGP7ZW.js";
17
+ import "./chunk-K3NQKI34.js";
18
+
19
+ // packages/cli/src/commands/mind-sleep.ts
20
+ function resolveWakeAt(input, now = /* @__PURE__ */ new Date()) {
21
+ const durationMs = parseDuration(input);
22
+ if (durationMs !== null) return new Date(now.getTime() + durationMs).toISOString();
23
+ const hm = input.match(/^(\d{1,2}):(\d{2})$/);
24
+ if (hm) {
25
+ const h = Number(hm[1]);
26
+ const m = Number(hm[2]);
27
+ if (h > 23 || m > 59) return null;
28
+ const d = new Date(now);
29
+ d.setHours(h, m, 0, 0);
30
+ if (d <= now) d.setDate(d.getDate() + 1);
31
+ return d.toISOString();
32
+ }
33
+ const date = new Date(input);
34
+ if (Number.isNaN(date.getTime())) return null;
35
+ return date.toISOString();
36
+ }
37
+ var cmd = command({
38
+ name: "volute clock sleep",
39
+ description: "Put a mind to sleep",
40
+ args: [{ name: "name", description: "Mind to sleep (or use --mind / VOLUTE_MIND)" }],
41
+ flags: {
42
+ mind: { type: "string", description: "Mind name" },
43
+ "wake-at": {
44
+ type: "string",
45
+ description: "Wake time: duration (2h30m), local HH:MM, or ISO timestamp"
46
+ }
47
+ },
48
+ run: async ({ args, flags }) => {
49
+ const name = args.name || resolveMindName(flags);
50
+ if (!name) {
51
+ console.error("Provide a mind name as argument, --mind flag, or VOLUTE_MIND env var");
52
+ process.exit(1);
53
+ }
54
+ const body = {};
55
+ if (flags["wake-at"]) {
56
+ const wakeAt = resolveWakeAt(flags["wake-at"]);
57
+ if (!wakeAt) {
58
+ console.error(
59
+ `Invalid --wake-at: ${flags["wake-at"]}
60
+ Accepted forms: a duration (e.g. 2h30m, 45m), a local time (HH:MM, next occurrence), or an ISO timestamp (e.g. 2026-07-08T14:00:00Z).`
61
+ );
62
+ process.exit(1);
63
+ }
64
+ body.wakeAt = wakeAt;
65
+ }
66
+ const res = await daemonFetch(`/api/minds/${encodeURIComponent(name)}/sleep`, {
67
+ method: "POST",
68
+ headers: { "Content-Type": "application/json" },
69
+ body: JSON.stringify(body)
70
+ });
71
+ const data = await res.json();
72
+ if (!res.ok) {
73
+ console.error(data.error || "Failed to put mind to sleep");
74
+ process.exit(1);
75
+ }
76
+ console.log(`${name} is going to sleep`);
77
+ }
78
+ });
79
+ var run = cmd.execute;
80
+ export {
81
+ resolveWakeAt,
82
+ run
83
+ };
@@ -4,7 +4,7 @@ import "./chunk-K3NQKI34.js";
4
4
  // package.json
5
5
  var package_default = {
6
6
  name: "volute",
7
- version: "0.45.2",
7
+ version: "0.46.0",
8
8
  description: "CLI for creating and managing self-modifying AI minds powered by the Claude Agent SDK",
9
9
  type: "module",
10
10
  license: "MIT",
@@ -100,6 +100,7 @@ var package_default = {
100
100
  marked: "^18.0.5",
101
101
  sharp: "^0.35.2",
102
102
  svelte: "^5.56.3",
103
+ "svelte-check": "4.7.1",
103
104
  tsup: "^8.5.1",
104
105
  tsx: "^4.22.4",
105
106
  typescript: "^6.0.3",
@@ -3,22 +3,23 @@ import {
3
3
  Scheduler,
4
4
  getScheduler,
5
5
  initScheduler
6
- } from "./chunk-YT7PEESJ.js";
6
+ } from "./chunk-JO5IO4FH.js";
7
7
  import "./chunk-ZDZISKCL.js";
8
- import "./chunk-FR6S2KNN.js";
8
+ import "./chunk-BJZ4PV7R.js";
9
9
  import "./chunk-QLWG3C2Z.js";
10
- import "./chunk-7ZUB63PS.js";
11
- import "./chunk-OP4JG2BS.js";
10
+ import "./chunk-KGIXX4NM.js";
11
+ import "./chunk-5ZQZDDIK.js";
12
12
  import "./chunk-PFZBNKUH.js";
13
13
  import "./chunk-JZ62SYWR.js";
14
- import "./chunk-EJVPTVTI.js";
14
+ import "./chunk-KQSFTPIM.js";
15
15
  import "./chunk-4JOQZPCE.js";
16
- import "./chunk-UYLGEDVD.js";
16
+ import "./chunk-YXSUMLTC.js";
17
+ import "./chunk-4YU7HF4L.js";
17
18
  import "./chunk-H2X54EHC.js";
18
19
  import "./chunk-IHKGWTGT.js";
19
20
  import "./chunk-F7H6ATM4.js";
20
- import "./chunk-T6HYVHPG.js";
21
- import "./chunk-7C44R625.js";
21
+ import "./chunk-OV7ZQ2GH.js";
22
+ import "./chunk-ZNMCCHCP.js";
22
23
  import "./chunk-T2TP6ZC6.js";
23
24
  import "./chunk-ALKYQULU.js";
24
25
  import "./chunk-ZV7MFISX.js";
@@ -4,7 +4,7 @@ import "./chunk-K3NQKI34.js";
4
4
  // packages/cli/src/commands/seed.ts
5
5
  async function run(args) {
6
6
  console.error("Note: `volute mind seed` is now `volute seed create`");
7
- await import("./seed-create-OURS2LS4.js").then((m) => m.run(args));
7
+ await import("./seed-create-ANXGYSCC.js").then((m) => m.run(args));
8
8
  }
9
9
  export {
10
10
  run
@@ -12,11 +12,11 @@ var cmd = subcommands({
12
12
  commands: {
13
13
  create: {
14
14
  description: "Plant a new seed",
15
- run: (args) => import("./seed-create-OURS2LS4.js").then((m) => m.run(args))
15
+ run: (args) => import("./seed-create-ANXGYSCC.js").then((m) => m.run(args))
16
16
  },
17
17
  sprout: {
18
18
  description: "Complete orientation and become a full mind",
19
- run: (args) => import("./seed-sprout-ELDFDAN6.js").then((m) => m.run(args))
19
+ run: (args) => import("./seed-sprout-NIUFTX32.js").then((m) => m.run(args))
20
20
  },
21
21
  check: {
22
22
  description: "Check seed readiness",
@@ -34,8 +34,8 @@ Choose a model [1-${enabled.length}]: `);
34
34
  }
35
35
  var cmd = command({
36
36
  name: "volute seed create",
37
- description: "Plant a new seed mind",
38
- args: [{ name: "name", required: true, description: "Name for the seed mind" }],
37
+ description: "Plant a new seed",
38
+ args: [{ name: "name", required: true, description: "Name for the seed" }],
39
39
  flags: {
40
40
  template: { type: "string", description: "Template to use" },
41
41
  model: { type: "string", description: "AI model to use" },
@@ -58,7 +58,7 @@ var cmd = command({
58
58
  }
59
59
  if (template !== "claude" && !model) {
60
60
  if (process.env.VOLUTE_MIND || !process.stdin.isTTY) {
61
- const { getSpiritModel } = await import("./spirit-DBTIW7P4.js");
61
+ const { getSpiritModel } = await import("./spirit-RPBLLUQ5.js");
62
62
  const { qualifyModelId } = await import("./ai-service-UODCCE4O.js");
63
63
  const spiritModel = getSpiritModel();
64
64
  if (spiritModel) {
@@ -8,7 +8,10 @@ import {
8
8
  import "./chunk-O7IGP7ZW.js";
9
9
  import {
10
10
  getStandardSkillsWithExtensions
11
- } from "./chunk-7ZUB63PS.js";
11
+ } from "./chunk-KGIXX4NM.js";
12
+ import {
13
+ ORIENTATION_MARKER
14
+ } from "./chunk-4YU7HF4L.js";
12
15
  import "./chunk-H2X54EHC.js";
13
16
  import "./chunk-F7H6ATM4.js";
14
17
  import "./chunk-T2TP6ZC6.js";
@@ -21,7 +24,6 @@ import "./chunk-K3NQKI34.js";
21
24
  // packages/cli/src/commands/seed-sprout.ts
22
25
  import { existsSync, readFileSync } from "fs";
23
26
  import { resolve } from "path";
24
- var ORIENTATION_MARKER = "You don't have a soul yet";
25
27
  var cmd = command({
26
28
  name: "volute seed sprout",
27
29
  description: "Complete orientation and become a full mind (run by the seed itself)",
@@ -73,7 +75,7 @@ var cmd = command({
73
75
  }
74
76
  }
75
77
  const { getClient, urlOf } = await import("./api-client-LC5YRA32.js");
76
- const { mindSkillsDir } = await import("./skills-BKINFL7W.js");
78
+ const { mindSkillsDir } = await import("./skills-AKCFA7BN.js");
77
79
  const client = getClient();
78
80
  const failedSkills = [];
79
81
  for (const skillId of getStandardSkillsWithExtensions()) {
@@ -286,6 +286,12 @@ To reply to a person, use their username from the message prefix (e.g. volute ch
286
286
  const targetName = parsed.identifier.slice(1);
287
287
  const mindSelf = process.env.VOLUTE_MIND;
288
288
  const sender = flags.sender || mindSelf || userInfo().username;
289
+ if (mindSelf && targetName === mindSelf) {
290
+ console.error(
291
+ `Can't send to @${targetName} \u2014 that's your own system channel. System messages there are automated notices; they don't need a reply.`
292
+ );
293
+ process.exit(1);
294
+ }
289
295
  const targetIsMind = await isMind(targetName);
290
296
  waitMindName = targetIsMind ? targetName : void 0;
291
297
  const contextMind = mindSelf ?? targetName;
@@ -221,7 +221,7 @@ async function startDaemonAndOpenBrowser(port, host) {
221
221
  const url = `http://${displayHost === "0.0.0.0" || displayHost === "::" ? "localhost" : displayHost}:${displayPort}`;
222
222
  console.log("\nStarting daemon...");
223
223
  try {
224
- const { run: runUp } = await import("./up-FTK7CTO3.js");
224
+ const { run: runUp } = await import("./up-PS6PFS75.js");
225
225
  await runUp([
226
226
  ...port != null ? ["--port", String(port)] : [],
227
227
  ...host ? ["--host", host] : []
@@ -44,7 +44,7 @@ Once you have a sense of who you are:
44
44
  5. Generate an avatar (if imagegen is available): `imagegen generate "description of your avatar"` then `volute mind profile --avatar images/<file>`
45
45
  6. Run `volute seed sprout` to complete the transformation.
46
46
 
47
- After sprouting, you'll have full mind capabilities (connectors, schedules, variants, etc.).
47
+ After sprouting, you'll have full mind capabilities (bridges to external platforms, schedules, variants, etc.).
48
48
 
49
49
  ## Commands
50
50
 
@@ -28,9 +28,9 @@ You manage yourself through the `volute` CLI. Your mind name is auto-detected vi
28
28
  | `volute mind join <variant-name> [--summary "..." --justification "..." --memory "..."]` | Merge a variant back |
29
29
  | `volute mind upgrade [--diff] [--continue] [--abort]` | Upgrade your server code (--diff to preview) |
30
30
  | `volute clock add --id <name> --cron "..." --message/--script "..."` | Schedule a recurring task |
31
- | `volute clock add --id <name> --in <duration> --message/--script "..."` | Set a one-time timer (10m, 1h, 2h30m) |
32
- | `volute clock list` | List your schedules and timers |
33
- | `volute clock remove --id <id>` | Remove a schedule or timer |
31
+ | `volute clock add --id <name> --in <duration> --message/--script "..."` | Add a one-time schedule (10m, 1h, 2h30m) |
32
+ | `volute clock list` | List your schedules |
33
+ | `volute clock remove --id <id>` | Remove a schedule |
34
34
  | `volute clock status` | Show sleep state + upcoming events |
35
35
  | `volute clock sleep [--wake-at <time>]` | Go to sleep |
36
36
  | `volute clock wake` | Wake up |
@@ -41,7 +41,7 @@ You manage yourself through the `volute` CLI. Your mind name is auto-detected vi
41
41
 
42
42
  ## Clock
43
43
 
44
- The clock system manages your schedules, timers, and sleep/wake cycles. Use `volute clock` for all time-related operations.
44
+ The clock system manages your schedules and sleep/wake cycles. Use `volute clock` for all time-related operations.
45
45
 
46
46
  ### Schedules
47
47
 
@@ -60,9 +60,9 @@ You can also schedule scripts that run and deliver their output as a message (em
60
60
  volute clock add --cron "*/30 * * * *" --script "cat status.txt" --id check-status
61
61
  ```
62
62
 
63
- ### Timers
63
+ ### One-time schedules
64
64
 
65
- Set one-time timers that fire once and then auto-delete:
65
+ Use `--in` for schedules that fire once and then auto-delete:
66
66
 
67
67
  ```sh
68
68
  volute clock add --id check-task --in 30m --message "check on that task"
@@ -144,7 +144,7 @@ For group conversations, use `volute chat create --participants mind-b,mind-c --
144
144
 
145
145
  ## Configuration
146
146
 
147
- Your `.config/volute.json` controls your model, connectors, schedules, and compaction message.
147
+ Your `.config/volute.json` controls your model, schedules, sleep cycle, and profile.
148
148
 
149
149
  ### Profile
150
150
 
@@ -168,7 +168,7 @@ Your profile is synced automatically when you start. Other minds see your profil
168
168
 
169
169
  ### Transparency
170
170
 
171
- The `transparency` setting in `.config/volute.json` controls what observers (web UI, connectors) can see of your activity — including your thinking. Presets:
171
+ The `transparency` setting in `.config/volute.json` controls what observers (web UI, bridges) can see of your activity — including your thinking. Presets:
172
172
 
173
173
  | Preset | Thinking | Text | Tool use | Tool results | Logs | Usage/lifecycle |
174
174
  |--------|----------|------|----------|--------------|------|-----------------|
@@ -29,5 +29,12 @@ When trigger-woken, you get one full turn to respond, then return to sleep when
29
29
  You can go to sleep any time with `volute clock sleep`. Optionally set a wake time:
30
30
 
31
31
  ```sh
32
- volute clock sleep --wake-at "2025-01-15T07:00:00Z"
32
+ volute clock sleep --wake-at 8h # a duration from now (2h30m, 45m, ...)
33
+ volute clock sleep --wake-at 07:30 # local clock time, next occurrence
34
+ volute clock sleep --wake-at "2025-01-15T07:00:00Z" # explicit ISO timestamp
33
35
  ```
36
+
37
+ `--wake-at` accepts a duration, a local `HH:MM` time (the next time it comes
38
+ around), or an ISO timestamp — whichever is easiest. It overrides your wake
39
+ schedule for that night: you will wake at the time you asked for, even if a
40
+ scheduled wake cron would have fired earlier.
@@ -27,7 +27,7 @@ import {
27
27
  syncBuiltinSkills,
28
28
  uninstallSkill,
29
29
  updateSkill
30
- } from "./chunk-7ZUB63PS.js";
30
+ } from "./chunk-KGIXX4NM.js";
31
31
  import "./chunk-H2X54EHC.js";
32
32
  import "./chunk-F7H6ATM4.js";
33
33
  import "./chunk-T2TP6ZC6.js";
@@ -5,22 +5,23 @@ import {
5
5
  getSleepManagerIfReady,
6
6
  initSleepManager,
7
7
  matchesGlob
8
- } from "./chunk-YT7PEESJ.js";
8
+ } from "./chunk-JO5IO4FH.js";
9
9
  import "./chunk-ZDZISKCL.js";
10
- import "./chunk-FR6S2KNN.js";
10
+ import "./chunk-BJZ4PV7R.js";
11
11
  import "./chunk-QLWG3C2Z.js";
12
- import "./chunk-7ZUB63PS.js";
13
- import "./chunk-OP4JG2BS.js";
12
+ import "./chunk-KGIXX4NM.js";
13
+ import "./chunk-5ZQZDDIK.js";
14
14
  import "./chunk-PFZBNKUH.js";
15
15
  import "./chunk-JZ62SYWR.js";
16
- import "./chunk-EJVPTVTI.js";
16
+ import "./chunk-KQSFTPIM.js";
17
17
  import "./chunk-4JOQZPCE.js";
18
- import "./chunk-UYLGEDVD.js";
18
+ import "./chunk-YXSUMLTC.js";
19
+ import "./chunk-4YU7HF4L.js";
19
20
  import "./chunk-H2X54EHC.js";
20
21
  import "./chunk-IHKGWTGT.js";
21
22
  import "./chunk-F7H6ATM4.js";
22
- import "./chunk-T6HYVHPG.js";
23
- import "./chunk-7C44R625.js";
23
+ import "./chunk-OV7ZQ2GH.js";
24
+ import "./chunk-ZNMCCHCP.js";
24
25
  import "./chunk-T2TP6ZC6.js";
25
26
  import "./chunk-ALKYQULU.js";
26
27
  import "./chunk-ZV7MFISX.js";