volute 0.20.0 → 0.22.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 (114) hide show
  1. package/README.md +7 -7
  2. package/dist/{activity-events-OMXKXD5N.js → activity-events-3WHHCOBB.js} +3 -4
  3. package/dist/api.d.ts +4294 -0
  4. package/dist/{archive-ZCFOSTKB.js → archive-4ZQYK5MN.js} +4 -2
  5. package/dist/auth-HM2RSPY7.js +37 -0
  6. package/dist/{channel-PUQKGSQM.js → channel-BOOMFULW.js} +2 -2
  7. package/dist/{chunk-UU7A7KLB.js → chunk-A4S7H6G6.js} +5 -7
  8. package/dist/chunk-AKPFNL7L.js +148 -0
  9. package/dist/{chunk-EBGCNDMM.js → chunk-B2CPS4QU.js} +128 -114
  10. package/dist/chunk-G5KRTU2F.js +76 -0
  11. package/dist/{chunk-FCDU5BFX.js → chunk-HFCBO2GL.js} +2 -2
  12. package/dist/{chunk-GZ7DW4YL.js → chunk-HGCDWKSP.js} +2 -2
  13. package/dist/{chunk-7UFKREVW.js → chunk-JNFRY2WU.js} +2 -2
  14. package/dist/{chunk-DYZGP3EW.js → chunk-JTDFJWI2.js} +2 -1
  15. package/dist/{chunk-WC6ZHVRL.js → chunk-KFI7TQJ6.js} +2 -2
  16. package/dist/{chunk-AW7P4EVV.js → chunk-KTJGZ7M7.js} +55 -7
  17. package/dist/{chunk-OGXOMR65.js → chunk-NWPT4ASZ.js} +1 -1
  18. package/dist/{chunk-SCUDS4US.js → chunk-ON3FF5JA.js} +1 -1
  19. package/dist/chunk-OSFGKF2T.js +2651 -0
  20. package/dist/{chunk-TIWH32HP.js → chunk-PHHKNGA3.js} +3 -3
  21. package/dist/{chunk-VDWCHYTS.js → chunk-PHU4DEAJ.js} +1 -1
  22. package/dist/{chunk-7NO7EV5Z.js → chunk-QIXPN3OO.js} +2 -2
  23. package/dist/{chunk-O6ASDHFO.js → chunk-RK627D57.js} +40 -63
  24. package/dist/{chunk-NSE7VJQA.js → chunk-SGPEZ32F.js} +29 -1
  25. package/dist/{chunk-IKMY5X76.js → chunk-TFS25FIM.js} +12 -9
  26. package/dist/{chunk-PUVXOZ6T.js → chunk-VNVCRVYI.js} +118 -69
  27. package/dist/{chunk-32VR2EOH.js → chunk-VT5QODNE.js} +2 -2
  28. package/dist/{chunk-RHEGSQFJ.js → chunk-WSLPZF72.js} +1 -1
  29. package/dist/chunk-XLC342FO.js +29 -0
  30. package/dist/cli.js +57 -119
  31. package/dist/cloud-sync-C6WRYRVR.js +96 -0
  32. package/dist/{connector-JBVNZ7VK.js → connector-PYT5UOTZ.js} +6 -6
  33. package/dist/connectors/discord.js +2 -2
  34. package/dist/connectors/slack.js +2 -2
  35. package/dist/connectors/telegram.js +2 -2
  36. package/dist/{create-HP4OVVHF.js → create-WIDA3M4C.js} +1 -1
  37. package/dist/{daemon-client-ITWUCNFO.js → daemon-client-ZHCDL4RS.js} +2 -2
  38. package/dist/{daemon-restart-KPSWNYTH.js → daemon-restart-TPQ2XBRZ.js} +6 -6
  39. package/dist/daemon.js +2250 -1985
  40. package/dist/{delete-BSU7K3RY.js → delete-LOIANQGD.js} +1 -1
  41. package/dist/down-WSUASL5E.js +14 -0
  42. package/dist/{env-A3LMO777.js → env-4PHIHTF4.js} +2 -2
  43. package/dist/{export-6QBUOQGC.js → export-XD6PJBQP.js} +19 -8
  44. package/dist/{file-C57SK5DK.js → file-X4L5TTOL.js} +2 -2
  45. package/dist/{history-WNK3DFUM.js → history-HTEKRNID.js} +2 -2
  46. package/dist/{import-XEC34Y4Z.js → import-EAXTHHXL.js} +4 -3
  47. package/dist/{log-PPPZDVEF.js → log-SRO5Q6AD.js} +2 -2
  48. package/dist/{login-HNH3EUQV.js → login-UO6AOVEA.js} +4 -4
  49. package/dist/{logout-I5CB5UZS.js → logout-UKD5LA37.js} +2 -2
  50. package/dist/{logs-SF2IMJN4.js → logs-HNTNNBDW.js} +2 -2
  51. package/dist/{merge-33C237A4.js → merge-B6SYTGI7.js} +2 -2
  52. package/dist/message-delivery-WUS4K4ZC.js +21 -0
  53. package/dist/{mind-Z7CKD6DG.js → mind-BTXR5B3C.js} +35 -11
  54. package/dist/{mind-activity-tracker-624QLQLC.js → mind-activity-tracker-PGC3DBJ7.js} +4 -5
  55. package/dist/{mind-manager-3DMYKZPB.js → mind-manager-P5OBDUKI.js} +5 -6
  56. package/dist/mind-sleep-FWRBIFBS.js +41 -0
  57. package/dist/mind-wake-LJK2YU5X.js +36 -0
  58. package/dist/{package-4NHAVUUI.js → package-A7PEYJI2.js} +10 -1
  59. package/dist/{pages-4DGQT7ZA.js → pages-YSTRWJR4.js} +6 -6
  60. package/dist/{publish-TAJUET4I.js → publish-BZNHKUUK.js} +6 -6
  61. package/dist/{pull-XAEWQJ47.js → pull-GRQAXM2E.js} +2 -2
  62. package/dist/{register-VSPCMHKX.js → register-U2UO6TC4.js} +5 -5
  63. package/dist/registry-D2BSQ2X5.js +42 -0
  64. package/dist/{restart-IQKMCK5M.js → restart-CIDAKGG2.js} +3 -6
  65. package/dist/{schedule-FFZG23IW.js → schedule-NLR3LZLY.js} +2 -2
  66. package/dist/{seed-J43YDKXG.js → seed-3H2MRREW.js} +2 -2
  67. package/dist/{send-KVIZIGCE.js → send-RP2TA7SG.js} +132 -36
  68. package/dist/{service-LUR7WDO7.js → service-7BFXDI6J.js} +31 -13
  69. package/dist/{setup-52YRV7VP.js → setup-SSIIXQMI.js} +9 -34
  70. package/dist/{shared-KO35ZM44.js → shared-2OGT3NSL.js} +4 -4
  71. package/dist/{skill-BCVNI6TV.js → skill-Q2Y6PQ3L.js} +2 -2
  72. package/dist/skills/orientation/SKILL.md +2 -2
  73. package/dist/skills/volute-mind/SKILL.md +5 -5
  74. package/dist/sleep-manager-3RWUX2ZR.js +27 -0
  75. package/dist/{sprout-QN7Y4VVO.js → sprout-UKCYBGHK.js} +34 -30
  76. package/dist/{start-I5JYB65M.js → start-JR6CUUWF.js} +3 -6
  77. package/dist/{status-D7E5HHBV.js → status-5XDGYHKP.js} +2 -2
  78. package/dist/{status-4ESFLGH4.js → status-H2MKDN6L.js} +5 -5
  79. package/dist/{status-FU2PFVVF.js → status-LV34BG6G.js} +3 -3
  80. package/dist/{stop-NBVKEFQQ.js → stop-VKPGK25U.js} +2 -5
  81. package/dist/template-hash-BIMA4ILT.js +8 -0
  82. package/dist/{up-FS7CKM6V.js → up-JKGC7PPF.js} +5 -5
  83. package/dist/{update-FJIHDJKM.js → update-ELC6MEUT.js} +5 -5
  84. package/dist/{update-check-MWE5AH4U.js → update-check-F5Z3ALXX.js} +2 -2
  85. package/dist/{upgrade-AIT24B5I.js → upgrade-GXW2EQY3.js} +12 -3
  86. package/dist/{variant-63ZWO2W7.js → variant-A4I7PHXS.js} +16 -24
  87. package/dist/version-notify-5FGUAVSF.js +181 -0
  88. package/dist/web-assets/assets/index-DWBxl4LO.js +69 -0
  89. package/dist/web-assets/assets/index-ZqMd1mx1.css +1 -0
  90. package/dist/web-assets/index.html +2 -2
  91. package/package.json +10 -1
  92. package/templates/_base/.init/.config/prompts.json +1 -0
  93. package/templates/_base/home/.config/config.json.tmpl +4 -1
  94. package/templates/_base/src/lib/logger.ts +68 -23
  95. package/templates/_base/src/lib/startup.ts +12 -3
  96. package/templates/claude/src/agent.ts +150 -29
  97. package/templates/claude/src/lib/hooks/pre-compact.ts +18 -4
  98. package/templates/claude/src/lib/message-channel.ts +6 -0
  99. package/templates/claude/src/lib/stream-consumer.ts +7 -0
  100. package/templates/claude/src/server.ts +3 -1
  101. package/templates/pi/home/.config/config.json.tmpl +4 -1
  102. package/templates/pi/src/agent.ts +87 -0
  103. package/templates/pi/src/lib/event-handler.ts +13 -1
  104. package/templates/pi/src/server.ts +3 -1
  105. package/dist/chunk-5XNT2472.js +0 -36
  106. package/dist/chunk-FGSYHIS3.js +0 -891
  107. package/dist/chunk-UJ6GHNR7.js +0 -675
  108. package/dist/db-C2CJ46ZU.js +0 -10
  109. package/dist/delivery-manager-CSG7LXA4.js +0 -16
  110. package/dist/down-ZY35KMHR.js +0 -14
  111. package/dist/schema-GFH6RV3W.js +0 -26
  112. package/dist/variants-JAGWGBXG.js +0 -26
  113. package/dist/web-assets/assets/index-CUZTZzaW.js +0 -64
  114. package/dist/web-assets/assets/index-adVuCkqy.css +0 -1
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/lib/volute-config.ts
4
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
5
+ import { dirname, resolve } from "path";
6
+ function readJson(path) {
7
+ if (!existsSync(path)) return null;
8
+ try {
9
+ return JSON.parse(readFileSync(path, "utf-8"));
10
+ } catch (err) {
11
+ console.error(`[volute-config] failed to parse ${path}: ${err}`);
12
+ return null;
13
+ }
14
+ }
15
+ function readVoluteConfig(mindDir) {
16
+ const path = resolve(mindDir, "home/.config/volute.json");
17
+ return readJson(path);
18
+ }
19
+ function writeVoluteConfig(mindDir, config) {
20
+ const path = resolve(mindDir, "home/.config/volute.json");
21
+ mkdirSync(dirname(path), { recursive: true });
22
+ writeFileSync(path, `${JSON.stringify(config, null, 2)}
23
+ `);
24
+ }
25
+
26
+ export {
27
+ readVoluteConfig,
28
+ writeVoluteConfig
29
+ };
package/dist/cli.js CHANGED
@@ -9,171 +9,109 @@ if (!process.env.VOLUTE_HOME) {
9
9
  var command = process.argv[2];
10
10
  var args = process.argv.slice(3);
11
11
  if (command === "--version" || command === "-v") {
12
- const { default: pkg } = await import("./package-4NHAVUUI.js");
12
+ const { default: pkg } = await import("./package-A7PEYJI2.js");
13
13
  console.log(pkg.version);
14
14
  process.exit(0);
15
15
  }
16
16
  switch (command) {
17
17
  case "mind":
18
- await import("./mind-Z7CKD6DG.js").then((m) => m.run(args));
18
+ await import("./mind-BTXR5B3C.js").then((m) => m.run(args));
19
19
  break;
20
20
  case "send":
21
- await import("./send-KVIZIGCE.js").then((m) => m.run(args));
21
+ await import("./send-RP2TA7SG.js").then((m) => m.run(args));
22
22
  break;
23
23
  case "history":
24
- await import("./history-WNK3DFUM.js").then((m) => m.run(args));
24
+ await import("./history-HTEKRNID.js").then((m) => m.run(args));
25
25
  break;
26
26
  case "variant":
27
- await import("./variant-63ZWO2W7.js").then((m) => m.run(args));
28
- break;
29
- case "connector":
30
- await import("./connector-JBVNZ7VK.js").then((m) => m.run(args));
27
+ await import("./variant-A4I7PHXS.js").then((m) => m.run(args));
31
28
  break;
32
29
  case "channel":
33
- await import("./channel-PUQKGSQM.js").then((m) => m.run(args));
30
+ await import("./channel-BOOMFULW.js").then((m) => m.run(args));
34
31
  break;
35
32
  case "schedule":
36
- await import("./schedule-FFZG23IW.js").then((m) => m.run(args));
33
+ await import("./schedule-NLR3LZLY.js").then((m) => m.run(args));
37
34
  break;
38
35
  case "skill":
39
- await import("./skill-BCVNI6TV.js").then((m) => m.run(args));
36
+ await import("./skill-Q2Y6PQ3L.js").then((m) => m.run(args));
40
37
  break;
41
38
  case "shared":
42
- await import("./shared-KO35ZM44.js").then((m) => m.run(args));
39
+ await import("./shared-2OGT3NSL.js").then((m) => m.run(args));
43
40
  break;
44
41
  case "file":
45
- await import("./file-C57SK5DK.js").then((m) => m.run(args));
42
+ await import("./file-X4L5TTOL.js").then((m) => m.run(args));
46
43
  break;
47
44
  case "env":
48
- await import("./env-A3LMO777.js").then((m) => m.run(args));
45
+ await import("./env-4PHIHTF4.js").then((m) => m.run(args));
49
46
  break;
50
47
  case "up":
51
- await import("./up-FS7CKM6V.js").then((m) => m.run(args));
48
+ await import("./up-JKGC7PPF.js").then((m) => m.run(args));
52
49
  break;
53
50
  case "down":
54
- await import("./down-ZY35KMHR.js").then((m) => m.run(args));
51
+ await import("./down-WSUASL5E.js").then((m) => m.run(args));
55
52
  break;
56
53
  case "restart":
57
- await import("./daemon-restart-KPSWNYTH.js").then((m) => m.run(args));
58
- break;
59
- case "setup":
60
- await import("./setup-52YRV7VP.js").then((m) => m.run(args));
54
+ await import("./daemon-restart-TPQ2XBRZ.js").then((m) => m.run(args));
61
55
  break;
62
56
  case "service":
63
- await import("./service-LUR7WDO7.js").then((m) => m.run(args));
57
+ await import("./service-7BFXDI6J.js").then((m) => m.run(args));
64
58
  break;
65
59
  case "update":
66
- await import("./update-FJIHDJKM.js").then((m) => m.run(args));
60
+ await import("./update-ELC6MEUT.js").then((m) => m.run(args));
67
61
  break;
68
62
  case "status":
69
- await import("./status-4ESFLGH4.js").then((m) => m.run(args));
70
- break;
71
- case "seed":
72
- await import("./seed-J43YDKXG.js").then((m) => m.run(args));
73
- break;
74
- case "sprout":
75
- await import("./sprout-QN7Y4VVO.js").then((m) => m.run(args));
63
+ await import("./status-H2MKDN6L.js").then((m) => m.run(args));
76
64
  break;
77
65
  case "pages":
78
- await import("./pages-4DGQT7ZA.js").then((m) => m.run(args));
79
- break;
80
- case "register":
81
- await import("./register-VSPCMHKX.js").then((m) => m.run(args));
82
- break;
83
- case "login":
84
- await import("./login-HNH3EUQV.js").then((m) => m.run(args));
66
+ await import("./pages-YSTRWJR4.js").then((m) => m.run(args));
85
67
  break;
86
- case "logout":
87
- await import("./logout-I5CB5UZS.js").then((m) => m.run());
68
+ case "auth":
69
+ await import("./auth-HM2RSPY7.js").then((m) => m.run(args));
88
70
  break;
89
71
  case "--help":
90
72
  case "-h":
91
73
  case void 0:
92
74
  console.log(`volute \u2014 create and manage AI minds
93
75
 
94
- Commands:
95
- volute mind create <name> Create a new mind
96
- volute mind start <name> Start a mind (daemonized)
97
- volute mind stop <name> Stop a mind
98
- volute mind restart <name> Restart a mind
99
- volute mind delete <name> [--force] Delete a mind (--force removes files)
100
- volute mind list List all minds
101
- volute mind status <name> Check mind status
102
- volute mind logs <name> [--follow] Tail mind logs
103
- volute mind upgrade <name> Upgrade mind to latest template
104
- volute mind import <path> Import an OpenClaw workspace
105
-
106
- volute send <target> "<msg>" Send a message (mind DM, channel, etc.)
107
- volute history [--mind <name>] View message history
108
-
109
- volute variant create <name> Create a variant (worktree + server)
110
- volute variant list List variants for a mind
111
- volute variant merge <name> Merge a variant back
112
- volute variant delete <name> Delete a variant
113
-
114
- volute connector connect <type> Enable a connector for a mind
115
- volute connector disconnect <type> Disable a connector for a mind
116
-
117
- volute channel read <uri> Read recent messages from a channel
118
- volute channel list [<platform>] List conversations on a platform
119
- volute channel users <platform> List users on a platform
120
- volute channel create <platform> ... Create a conversation on a platform
121
-
122
- volute schedule list List schedules for a mind
123
- volute schedule add ... Add a cron schedule
124
- volute schedule remove ... Remove a schedule
125
-
126
- volute skill list List shared skills
127
- volute skill list --mind <name> List installed skills for a mind
128
- volute skill info <name> Show details of a shared skill
129
- volute skill install <name> --mind Install a shared skill into a mind
130
- volute skill update <name> --mind Update an installed skill
131
- volute skill publish <name> --mind Publish a mind's skill to shared repo
132
- volute skill remove <name> Remove a shared skill
133
- volute skill uninstall <name> --mind Uninstall a skill from a mind
134
-
135
- volute file send <path> <mind> Send a file to another mind
136
- volute file list List pending incoming files
137
- volute file accept <id> Accept a pending file
138
- volute file reject <id> Reject a pending file
139
- volute file trust <sender> Trust a sender (auto-deliver)
140
- volute file untrust <sender> Remove sender trust
141
-
142
- volute shared merge "<msg>" Merge shared changes to main
143
- volute shared pull Pull latest shared changes
144
- volute shared log Show shared repo history
145
- volute shared status Show pending changes diff
146
-
147
- volute env <set|get|list|remove> Manage environment variables
148
-
149
- volute up [--port N] Start the daemon (default: 4200)
150
- volute down Stop the daemon
151
- volute restart [--port N] Restart the daemon
152
-
153
- volute service install [--port N] Install as system service (auto-start)
154
- volute service uninstall Remove system service
155
- volute service status Check service status
156
- volute setup [--port N] [--host H] Install system service with user isolation
157
- volute setup uninstall [--force] Remove system service + isolation
158
-
159
- volute register [--name <name>] Register a system on volute.systems
160
- volute login [--key <key>] Log in with an existing API key
161
- volute logout Remove stored credentials
162
-
163
- volute pages publish [--mind <name>] Publish mind's pages/ directory
164
- volute pages status [--mind <name>] Show publish status
165
-
166
- volute seed <name> Plant a seed mind (orientation mode)
167
- volute sprout Complete orientation, become a full mind
168
-
169
- volute update Update to latest version
170
- volute status Show daemon status and minds
76
+ Common:
77
+ send <target> "<msg>" Send a message
78
+ history [--channel <ch>] View activity history
79
+ status Show system status
80
+
81
+ Mind:
82
+ mind create <name> Create a new mind
83
+ mind seed <name> Plant a seed mind (orientation mode)
84
+ mind start/stop/restart [name] Control a mind
85
+ mind list List all minds
86
+ mind status [name] Check a mind's status
87
+ mind connect/disconnect <type> Manage connectors
88
+ mind logs [name] [--follow] Tail mind logs
89
+ mind sprout Complete orientation
90
+ mind upgrade/import/export Lifecycle operations
91
+
92
+ Configuration:
93
+ channel Read, list, and manage channels
94
+ variant Create and merge experimental variants
95
+ schedule Manage cron schedules
96
+ skill Browse and install skills
97
+ env Manage environment variables
98
+ file Mind-to-mind file sharing
99
+ shared Collaborative shared repository
100
+ pages Publish web pages
101
+
102
+ System:
103
+ up / down / restart Daemon control
104
+ update Update volute
105
+ service install/uninstall Auto-start service
106
+ auth register/login/logout volute.systems account
171
107
 
172
108
  Options:
173
- --version, -v Show version number
174
- --help, -h Show this help message
109
+ --version, -v Show version number
110
+ --help, -h Show this help message
111
+
112
+ Run 'volute <command> --help' for details.
175
113
 
176
- Mind-scoped commands (send, history, variant, connector, schedule, channel, file, skill, shared, pages)
114
+ Mind-scoped commands (send, history, variant, schedule, channel, file, skill, shared, pages)
177
115
  use --mind <name> or VOLUTE_MIND env var to identify the mind.`);
178
116
  break;
179
117
  default:
@@ -182,7 +120,7 @@ Run 'volute --help' for usage.`);
182
120
  process.exit(1);
183
121
  }
184
122
  if (command !== "update") {
185
- import("./update-check-MWE5AH4U.js").then((m) => m.checkForUpdate()).then((result) => {
123
+ import("./update-check-F5Z3ALXX.js").then((m) => m.checkForUpdate()).then((result) => {
186
124
  if (result.updateAvailable) {
187
125
  console.error(`
188
126
  Update available: ${result.current} \u2192 ${result.latest}`);
@@ -0,0 +1,96 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ getAuthHeaders,
4
+ getWebhookUrl
5
+ } from "./chunk-G5KRTU2F.js";
6
+ import {
7
+ deliverMessage
8
+ } from "./chunk-OSFGKF2T.js";
9
+ import "./chunk-HFCBO2GL.js";
10
+ import "./chunk-HGCDWKSP.js";
11
+ import "./chunk-A4S7H6G6.js";
12
+ import "./chunk-VNVCRVYI.js";
13
+ import "./chunk-XLC342FO.js";
14
+ import "./chunk-PHU4DEAJ.js";
15
+ import "./chunk-SGPEZ32F.js";
16
+ import {
17
+ logger_default
18
+ } from "./chunk-YUIHSKR6.js";
19
+ import "./chunk-JTDFJWI2.js";
20
+ import "./chunk-NWPT4ASZ.js";
21
+ import "./chunk-B2CPS4QU.js";
22
+ import "./chunk-K3NQKI34.js";
23
+
24
+ // src/lib/cloud-sync.ts
25
+ var slog = logger_default.child("cloud-sync");
26
+ function getQueueUrl() {
27
+ const base = getWebhookUrl();
28
+ if (!base) return void 0;
29
+ return `${base.replace(/\/$/, "")}/queue`;
30
+ }
31
+ async function consumeQueuedMessages() {
32
+ const queueUrl = getQueueUrl();
33
+ if (!queueUrl) return;
34
+ slog.info("checking cloud queue for pending messages");
35
+ let items;
36
+ try {
37
+ const res = await fetch(queueUrl, { headers: getAuthHeaders() });
38
+ if (!res.ok) {
39
+ slog.warn(`cloud queue returned HTTP ${res.status}`);
40
+ return;
41
+ }
42
+ const body = await res.json();
43
+ if (!Array.isArray(body) || body.length === 0) {
44
+ slog.info("no queued cloud messages");
45
+ return;
46
+ }
47
+ items = body;
48
+ } catch (err) {
49
+ slog.warn("failed to fetch cloud queue", logger_default.errorData(err));
50
+ return;
51
+ }
52
+ slog.info(`processing ${items.length} queued cloud message(s)`);
53
+ const acknowledged = [];
54
+ for (const raw of items) {
55
+ const msg = raw;
56
+ if (!msg.id || typeof msg.id !== "string" || !msg.mind || typeof msg.mind !== "string" || !msg.channel || typeof msg.channel !== "string") {
57
+ slog.warn("skipping malformed queued message", { msg: JSON.stringify(msg).slice(0, 200) });
58
+ continue;
59
+ }
60
+ try {
61
+ await deliverMessage(msg.mind, {
62
+ channel: msg.channel,
63
+ sender: msg.sender ?? null,
64
+ content: msg.content,
65
+ conversationId: msg.conversationId
66
+ });
67
+ acknowledged.push(msg.id);
68
+ } catch (err) {
69
+ slog.warn(`failed to process queued message ${msg.id}`, logger_default.errorData(err));
70
+ }
71
+ }
72
+ if (acknowledged.length > 0) {
73
+ try {
74
+ const res = await fetch(queueUrl, {
75
+ method: "DELETE",
76
+ headers: getAuthHeaders(),
77
+ body: JSON.stringify({ ids: acknowledged })
78
+ });
79
+ if (!res.ok) {
80
+ slog.error(
81
+ `failed to acknowledge ${acknowledged.length} queued messages (HTTP ${res.status}) \u2014 these will be re-delivered on next startup`
82
+ );
83
+ } else {
84
+ slog.info(`acknowledged ${acknowledged.length} queued message(s)`);
85
+ }
86
+ } catch (err) {
87
+ slog.error(
88
+ `failed to acknowledge ${acknowledged.length} queued messages \u2014 these will be re-delivered on next startup`,
89
+ logger_default.errorData(err)
90
+ );
91
+ }
92
+ }
93
+ }
94
+ export {
95
+ consumeQueuedMessages
96
+ };
@@ -14,8 +14,8 @@ import {
14
14
  } from "./chunk-D424ZQGI.js";
15
15
  import {
16
16
  daemonFetch
17
- } from "./chunk-WC6ZHVRL.js";
18
- import "./chunk-EBGCNDMM.js";
17
+ } from "./chunk-KFI7TQJ6.js";
18
+ import "./chunk-B2CPS4QU.js";
19
19
  import "./chunk-K3NQKI34.js";
20
20
 
21
21
  // src/commands/connector.ts
@@ -40,8 +40,8 @@ async function run(args) {
40
40
  }
41
41
  function printUsage() {
42
42
  console.log(`Usage:
43
- volute connector connect <type> [--mind <name>]
44
- volute connector disconnect <type> [--mind <name>]`);
43
+ volute mind connect <type> [--mind <name>]
44
+ volute mind disconnect <type> [--mind <name>]`);
45
45
  }
46
46
  async function connectConnector(args) {
47
47
  const { positional, flags } = parseArgs(args, {
@@ -50,7 +50,7 @@ async function connectConnector(args) {
50
50
  const mindName = resolveMindName(flags);
51
51
  const type = positional[0];
52
52
  if (!type) {
53
- console.error("Usage: volute connector connect <type> [--mind <name>]");
53
+ console.error("Usage: volute mind connect <type> [--mind <name>]");
54
54
  process.exit(1);
55
55
  }
56
56
  const client = getClient();
@@ -123,7 +123,7 @@ async function disconnectConnector(args) {
123
123
  const mindName = resolveMindName(flags);
124
124
  const type = positional[0];
125
125
  if (!type) {
126
- console.error("Usage: volute connector disconnect <type> [--mind <name>]");
126
+ console.error("Usage: volute mind disconnect <type> [--mind <name>]");
127
127
  process.exit(1);
128
128
  }
129
129
  const client = getClient();
@@ -7,8 +7,8 @@ import {
7
7
  sendToMind,
8
8
  slugify,
9
9
  writeChannelEntry
10
- } from "../chunk-RHEGSQFJ.js";
11
- import "../chunk-EBGCNDMM.js";
10
+ } from "../chunk-WSLPZF72.js";
11
+ import "../chunk-B2CPS4QU.js";
12
12
  import "../chunk-K3NQKI34.js";
13
13
 
14
14
  // src/connectors/discord.ts
@@ -6,8 +6,8 @@ import {
6
6
  onShutdown,
7
7
  sendToMind,
8
8
  writeChannelEntry
9
- } from "../chunk-RHEGSQFJ.js";
10
- import "../chunk-EBGCNDMM.js";
9
+ } from "../chunk-WSLPZF72.js";
10
+ import "../chunk-B2CPS4QU.js";
11
11
  import "../chunk-K3NQKI34.js";
12
12
 
13
13
  // src/connectors/slack.ts
@@ -5,8 +5,8 @@ import {
5
5
  loadFollowedChannels,
6
6
  sendToMind,
7
7
  writeChannelEntry
8
- } from "../chunk-RHEGSQFJ.js";
9
- import "../chunk-EBGCNDMM.js";
8
+ } from "../chunk-WSLPZF72.js";
9
+ import "../chunk-B2CPS4QU.js";
10
10
  import "../chunk-K3NQKI34.js";
11
11
 
12
12
  // src/connectors/telegram.ts
@@ -17,7 +17,7 @@ async function run(args) {
17
17
  process.exit(1);
18
18
  }
19
19
  const skills = flags.skills === "none" ? [] : flags.skills ? flags.skills.split(",") : void 0;
20
- const { daemonFetch } = await import("./daemon-client-ITWUCNFO.js");
20
+ const { daemonFetch } = await import("./daemon-client-ZHCDL4RS.js");
21
21
  const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
22
22
  const client = getClient();
23
23
  const res = await daemonFetch(urlOf(client.api.minds.$url()), {
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  daemonFetch
4
- } from "./chunk-WC6ZHVRL.js";
5
- import "./chunk-EBGCNDMM.js";
4
+ } from "./chunk-KFI7TQJ6.js";
5
+ import "./chunk-B2CPS4QU.js";
6
6
  import "./chunk-K3NQKI34.js";
7
7
  export {
8
8
  daemonFetch
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  run
4
- } from "./chunk-7UFKREVW.js";
4
+ } from "./chunk-JNFRY2WU.js";
5
5
  import {
6
6
  stopDaemon
7
- } from "./chunk-7NO7EV5Z.js";
7
+ } from "./chunk-QIXPN3OO.js";
8
8
  import {
9
9
  getServiceMode,
10
10
  modeLabel,
11
11
  pollHealth,
12
12
  readDaemonConfig,
13
13
  restartService
14
- } from "./chunk-32VR2EOH.js";
14
+ } from "./chunk-VT5QODNE.js";
15
15
  import "./chunk-D424ZQGI.js";
16
- import "./chunk-DYZGP3EW.js";
17
- import "./chunk-OGXOMR65.js";
18
- import "./chunk-EBGCNDMM.js";
16
+ import "./chunk-JTDFJWI2.js";
17
+ import "./chunk-NWPT4ASZ.js";
18
+ import "./chunk-B2CPS4QU.js";
19
19
  import "./chunk-K3NQKI34.js";
20
20
 
21
21
  // src/commands/daemon-restart.ts