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.
- package/README.md +7 -7
- package/dist/{activity-events-OMXKXD5N.js → activity-events-3WHHCOBB.js} +3 -4
- package/dist/api.d.ts +4294 -0
- package/dist/{archive-ZCFOSTKB.js → archive-4ZQYK5MN.js} +4 -2
- package/dist/auth-HM2RSPY7.js +37 -0
- package/dist/{channel-PUQKGSQM.js → channel-BOOMFULW.js} +2 -2
- package/dist/{chunk-UU7A7KLB.js → chunk-A4S7H6G6.js} +5 -7
- package/dist/chunk-AKPFNL7L.js +148 -0
- package/dist/{chunk-EBGCNDMM.js → chunk-B2CPS4QU.js} +128 -114
- package/dist/chunk-G5KRTU2F.js +76 -0
- package/dist/{chunk-FCDU5BFX.js → chunk-HFCBO2GL.js} +2 -2
- package/dist/{chunk-GZ7DW4YL.js → chunk-HGCDWKSP.js} +2 -2
- package/dist/{chunk-7UFKREVW.js → chunk-JNFRY2WU.js} +2 -2
- package/dist/{chunk-DYZGP3EW.js → chunk-JTDFJWI2.js} +2 -1
- package/dist/{chunk-WC6ZHVRL.js → chunk-KFI7TQJ6.js} +2 -2
- package/dist/{chunk-AW7P4EVV.js → chunk-KTJGZ7M7.js} +55 -7
- package/dist/{chunk-OGXOMR65.js → chunk-NWPT4ASZ.js} +1 -1
- package/dist/{chunk-SCUDS4US.js → chunk-ON3FF5JA.js} +1 -1
- package/dist/chunk-OSFGKF2T.js +2651 -0
- package/dist/{chunk-TIWH32HP.js → chunk-PHHKNGA3.js} +3 -3
- package/dist/{chunk-VDWCHYTS.js → chunk-PHU4DEAJ.js} +1 -1
- package/dist/{chunk-7NO7EV5Z.js → chunk-QIXPN3OO.js} +2 -2
- package/dist/{chunk-O6ASDHFO.js → chunk-RK627D57.js} +40 -63
- package/dist/{chunk-NSE7VJQA.js → chunk-SGPEZ32F.js} +29 -1
- package/dist/{chunk-IKMY5X76.js → chunk-TFS25FIM.js} +12 -9
- package/dist/{chunk-PUVXOZ6T.js → chunk-VNVCRVYI.js} +118 -69
- package/dist/{chunk-32VR2EOH.js → chunk-VT5QODNE.js} +2 -2
- package/dist/{chunk-RHEGSQFJ.js → chunk-WSLPZF72.js} +1 -1
- package/dist/chunk-XLC342FO.js +29 -0
- package/dist/cli.js +57 -119
- package/dist/cloud-sync-C6WRYRVR.js +96 -0
- package/dist/{connector-JBVNZ7VK.js → connector-PYT5UOTZ.js} +6 -6
- package/dist/connectors/discord.js +2 -2
- package/dist/connectors/slack.js +2 -2
- package/dist/connectors/telegram.js +2 -2
- package/dist/{create-HP4OVVHF.js → create-WIDA3M4C.js} +1 -1
- package/dist/{daemon-client-ITWUCNFO.js → daemon-client-ZHCDL4RS.js} +2 -2
- package/dist/{daemon-restart-KPSWNYTH.js → daemon-restart-TPQ2XBRZ.js} +6 -6
- package/dist/daemon.js +2250 -1985
- package/dist/{delete-BSU7K3RY.js → delete-LOIANQGD.js} +1 -1
- package/dist/down-WSUASL5E.js +14 -0
- package/dist/{env-A3LMO777.js → env-4PHIHTF4.js} +2 -2
- package/dist/{export-6QBUOQGC.js → export-XD6PJBQP.js} +19 -8
- package/dist/{file-C57SK5DK.js → file-X4L5TTOL.js} +2 -2
- package/dist/{history-WNK3DFUM.js → history-HTEKRNID.js} +2 -2
- package/dist/{import-XEC34Y4Z.js → import-EAXTHHXL.js} +4 -3
- package/dist/{log-PPPZDVEF.js → log-SRO5Q6AD.js} +2 -2
- package/dist/{login-HNH3EUQV.js → login-UO6AOVEA.js} +4 -4
- package/dist/{logout-I5CB5UZS.js → logout-UKD5LA37.js} +2 -2
- package/dist/{logs-SF2IMJN4.js → logs-HNTNNBDW.js} +2 -2
- package/dist/{merge-33C237A4.js → merge-B6SYTGI7.js} +2 -2
- package/dist/message-delivery-WUS4K4ZC.js +21 -0
- package/dist/{mind-Z7CKD6DG.js → mind-BTXR5B3C.js} +35 -11
- package/dist/{mind-activity-tracker-624QLQLC.js → mind-activity-tracker-PGC3DBJ7.js} +4 -5
- package/dist/{mind-manager-3DMYKZPB.js → mind-manager-P5OBDUKI.js} +5 -6
- package/dist/mind-sleep-FWRBIFBS.js +41 -0
- package/dist/mind-wake-LJK2YU5X.js +36 -0
- package/dist/{package-4NHAVUUI.js → package-A7PEYJI2.js} +10 -1
- package/dist/{pages-4DGQT7ZA.js → pages-YSTRWJR4.js} +6 -6
- package/dist/{publish-TAJUET4I.js → publish-BZNHKUUK.js} +6 -6
- package/dist/{pull-XAEWQJ47.js → pull-GRQAXM2E.js} +2 -2
- package/dist/{register-VSPCMHKX.js → register-U2UO6TC4.js} +5 -5
- package/dist/registry-D2BSQ2X5.js +42 -0
- package/dist/{restart-IQKMCK5M.js → restart-CIDAKGG2.js} +3 -6
- package/dist/{schedule-FFZG23IW.js → schedule-NLR3LZLY.js} +2 -2
- package/dist/{seed-J43YDKXG.js → seed-3H2MRREW.js} +2 -2
- package/dist/{send-KVIZIGCE.js → send-RP2TA7SG.js} +132 -36
- package/dist/{service-LUR7WDO7.js → service-7BFXDI6J.js} +31 -13
- package/dist/{setup-52YRV7VP.js → setup-SSIIXQMI.js} +9 -34
- package/dist/{shared-KO35ZM44.js → shared-2OGT3NSL.js} +4 -4
- package/dist/{skill-BCVNI6TV.js → skill-Q2Y6PQ3L.js} +2 -2
- package/dist/skills/orientation/SKILL.md +2 -2
- package/dist/skills/volute-mind/SKILL.md +5 -5
- package/dist/sleep-manager-3RWUX2ZR.js +27 -0
- package/dist/{sprout-QN7Y4VVO.js → sprout-UKCYBGHK.js} +34 -30
- package/dist/{start-I5JYB65M.js → start-JR6CUUWF.js} +3 -6
- package/dist/{status-D7E5HHBV.js → status-5XDGYHKP.js} +2 -2
- package/dist/{status-4ESFLGH4.js → status-H2MKDN6L.js} +5 -5
- package/dist/{status-FU2PFVVF.js → status-LV34BG6G.js} +3 -3
- package/dist/{stop-NBVKEFQQ.js → stop-VKPGK25U.js} +2 -5
- package/dist/template-hash-BIMA4ILT.js +8 -0
- package/dist/{up-FS7CKM6V.js → up-JKGC7PPF.js} +5 -5
- package/dist/{update-FJIHDJKM.js → update-ELC6MEUT.js} +5 -5
- package/dist/{update-check-MWE5AH4U.js → update-check-F5Z3ALXX.js} +2 -2
- package/dist/{upgrade-AIT24B5I.js → upgrade-GXW2EQY3.js} +12 -3
- package/dist/{variant-63ZWO2W7.js → variant-A4I7PHXS.js} +16 -24
- package/dist/version-notify-5FGUAVSF.js +181 -0
- package/dist/web-assets/assets/index-DWBxl4LO.js +69 -0
- package/dist/web-assets/assets/index-ZqMd1mx1.css +1 -0
- package/dist/web-assets/index.html +2 -2
- package/package.json +10 -1
- package/templates/_base/.init/.config/prompts.json +1 -0
- package/templates/_base/home/.config/config.json.tmpl +4 -1
- package/templates/_base/src/lib/logger.ts +68 -23
- package/templates/_base/src/lib/startup.ts +12 -3
- package/templates/claude/src/agent.ts +150 -29
- package/templates/claude/src/lib/hooks/pre-compact.ts +18 -4
- package/templates/claude/src/lib/message-channel.ts +6 -0
- package/templates/claude/src/lib/stream-consumer.ts +7 -0
- package/templates/claude/src/server.ts +3 -1
- package/templates/pi/home/.config/config.json.tmpl +4 -1
- package/templates/pi/src/agent.ts +87 -0
- package/templates/pi/src/lib/event-handler.ts +13 -1
- package/templates/pi/src/server.ts +3 -1
- package/dist/chunk-5XNT2472.js +0 -36
- package/dist/chunk-FGSYHIS3.js +0 -891
- package/dist/chunk-UJ6GHNR7.js +0 -675
- package/dist/db-C2CJ46ZU.js +0 -10
- package/dist/delivery-manager-CSG7LXA4.js +0 -16
- package/dist/down-ZY35KMHR.js +0 -14
- package/dist/schema-GFH6RV3W.js +0 -26
- package/dist/variants-JAGWGBXG.js +0 -26
- package/dist/web-assets/assets/index-CUZTZzaW.js +0 -64
- 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-
|
|
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-
|
|
18
|
+
await import("./mind-BTXR5B3C.js").then((m) => m.run(args));
|
|
19
19
|
break;
|
|
20
20
|
case "send":
|
|
21
|
-
await import("./send-
|
|
21
|
+
await import("./send-RP2TA7SG.js").then((m) => m.run(args));
|
|
22
22
|
break;
|
|
23
23
|
case "history":
|
|
24
|
-
await import("./history-
|
|
24
|
+
await import("./history-HTEKRNID.js").then((m) => m.run(args));
|
|
25
25
|
break;
|
|
26
26
|
case "variant":
|
|
27
|
-
await import("./variant-
|
|
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-
|
|
30
|
+
await import("./channel-BOOMFULW.js").then((m) => m.run(args));
|
|
34
31
|
break;
|
|
35
32
|
case "schedule":
|
|
36
|
-
await import("./schedule-
|
|
33
|
+
await import("./schedule-NLR3LZLY.js").then((m) => m.run(args));
|
|
37
34
|
break;
|
|
38
35
|
case "skill":
|
|
39
|
-
await import("./skill-
|
|
36
|
+
await import("./skill-Q2Y6PQ3L.js").then((m) => m.run(args));
|
|
40
37
|
break;
|
|
41
38
|
case "shared":
|
|
42
|
-
await import("./shared-
|
|
39
|
+
await import("./shared-2OGT3NSL.js").then((m) => m.run(args));
|
|
43
40
|
break;
|
|
44
41
|
case "file":
|
|
45
|
-
await import("./file-
|
|
42
|
+
await import("./file-X4L5TTOL.js").then((m) => m.run(args));
|
|
46
43
|
break;
|
|
47
44
|
case "env":
|
|
48
|
-
await import("./env-
|
|
45
|
+
await import("./env-4PHIHTF4.js").then((m) => m.run(args));
|
|
49
46
|
break;
|
|
50
47
|
case "up":
|
|
51
|
-
await import("./up-
|
|
48
|
+
await import("./up-JKGC7PPF.js").then((m) => m.run(args));
|
|
52
49
|
break;
|
|
53
50
|
case "down":
|
|
54
|
-
await import("./down-
|
|
51
|
+
await import("./down-WSUASL5E.js").then((m) => m.run(args));
|
|
55
52
|
break;
|
|
56
53
|
case "restart":
|
|
57
|
-
await import("./daemon-restart-
|
|
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-
|
|
57
|
+
await import("./service-7BFXDI6J.js").then((m) => m.run(args));
|
|
64
58
|
break;
|
|
65
59
|
case "update":
|
|
66
|
-
await import("./update-
|
|
60
|
+
await import("./update-ELC6MEUT.js").then((m) => m.run(args));
|
|
67
61
|
break;
|
|
68
62
|
case "status":
|
|
69
|
-
await import("./status-
|
|
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-
|
|
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 "
|
|
87
|
-
await import("./
|
|
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
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
volute
|
|
123
|
-
|
|
124
|
-
volute
|
|
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
|
|
174
|
-
--help, -h
|
|
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,
|
|
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-
|
|
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-
|
|
18
|
-
import "./chunk-
|
|
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
|
|
44
|
-
volute
|
|
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
|
|
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
|
|
126
|
+
console.error("Usage: volute mind disconnect <type> [--mind <name>]");
|
|
127
127
|
process.exit(1);
|
|
128
128
|
}
|
|
129
129
|
const client = getClient();
|
package/dist/connectors/slack.js
CHANGED
|
@@ -5,8 +5,8 @@ import {
|
|
|
5
5
|
loadFollowedChannels,
|
|
6
6
|
sendToMind,
|
|
7
7
|
writeChannelEntry
|
|
8
|
-
} from "../chunk-
|
|
9
|
-
import "../chunk-
|
|
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-
|
|
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,21 +1,21 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
run
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-JNFRY2WU.js";
|
|
5
5
|
import {
|
|
6
6
|
stopDaemon
|
|
7
|
-
} from "./chunk-
|
|
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-
|
|
14
|
+
} from "./chunk-VT5QODNE.js";
|
|
15
15
|
import "./chunk-D424ZQGI.js";
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
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
|