volute 0.32.0 → 0.34.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 +16 -0
- package/dist/{accept-74M7I4RZ.js → accept-TW6V4WI4.js} +4 -4
- package/dist/{activity-events-HETAODOK.js → activity-events-BN7V6KCC.js} +4 -4
- package/dist/{ai-service-ZIPCV3MX.js → ai-service-PSILB5WD.js} +5 -5
- package/dist/{api-client-YPKOZP2O.js → api-client-XUXOB7LI.js} +1 -1
- package/dist/api.d.ts +1198 -957
- package/dist/{archive-INXYFVCW.js → archive-C2VEMQOR.js} +4 -4
- package/dist/{auth-6DMGES3I.js → auth-ZFZXJZDQ.js} +5 -5
- package/dist/{bridge-BVCBTGPF.js → bridge-O753D5F4.js} +4 -4
- package/dist/{chat-XT4OBJBU.js → chat-BHYX7DJ4.js} +9 -9
- package/dist/{chunk-M7UL5S3Q.js → chunk-2IOP6PHB.js} +1 -1
- package/dist/{chunk-JJ7W6WSB.js → chunk-47XDEWWV.js} +5 -5
- package/dist/{chunk-RSX4OPZY.js → chunk-47ZPNLF4.js} +7 -7
- package/dist/{chunk-RPZZSXV3.js → chunk-4JSR7YO7.js} +20 -1
- package/dist/chunk-6LXAAQ43.js +22 -0
- package/dist/{chunk-TSXLLQZW.js → chunk-6OWJXUAR.js} +10 -1
- package/dist/{chunk-I5KY25PQ.js → chunk-6WAWMWR5.js} +1 -1
- package/dist/{chunk-LSGWR54X.js → chunk-7F2SW2KD.js} +2 -2
- package/dist/chunk-7KJOFUNN.js +22 -0
- package/dist/{spirit-N4W4UQRH.js → chunk-B2BVAIZ4.js} +21 -12
- package/dist/{chunk-LGB6JBHI.js → chunk-BDK73LK6.js} +5 -55
- package/dist/{chunk-IYDIE3HG.js → chunk-BFWHBQK4.js} +1 -1
- package/dist/{chunk-TDRYEPH4.js → chunk-BM474GX6.js} +4 -4
- package/dist/{chunk-R7E6CRVQ.js → chunk-BTWAGDV5.js} +1 -1
- package/dist/{chunk-WKF5FEFK.js → chunk-CVL5IGIR.js} +629 -174
- package/dist/{chunk-S6NFERDC.js → chunk-E5C7OWZ2.js} +20 -22
- package/dist/chunk-FYCALD4Q.js +23 -0
- package/dist/{chunk-SKLSMHXO.js → chunk-IS7WJ56Q.js} +1 -1
- package/dist/{chunk-2NGTS5UU.js → chunk-M3K5AARV.js} +1 -1
- package/dist/{chunk-ALEF47VT.js → chunk-MLOQKQNB.js} +1 -1
- package/dist/{chunk-D5G5YOPL.js → chunk-N3DNFPVA.js} +41 -5
- package/dist/{chunk-LRCG2JLP.js → chunk-N7BLAHNE.js} +5 -1
- package/dist/chunk-OYAKCAVY.js +29 -0
- package/dist/{chunk-UKVWJRKN.js → chunk-PLDWHR4D.js} +1 -1
- package/dist/{chunk-QBQ424EM.js → chunk-TAHX36HZ.js} +545 -246
- package/dist/chunk-U5BTYSAL.js +59 -0
- package/dist/{chunk-SX5TKJBZ.js → chunk-V45JXOWY.js} +2 -2
- package/dist/{chunk-2FLJ63GU.js → chunk-V6ZCNULL.js} +2 -2
- package/dist/{chunk-QZANELPX.js → chunk-XWXBJQBE.js} +3 -2
- package/dist/cli.js +32 -24
- package/dist/{clock-2UOZ6JPU.js → clock-3X4DSC2N.js} +38 -23
- package/dist/{cloud-sync-JN3NWKEM.js → cloud-sync-TG3TIX5H.js} +21 -17
- package/dist/{config-H2H4UIF7.js → config-OROA5DUA.js} +4 -4
- package/dist/connectors/discord-bridge.js +1 -1
- package/dist/connectors/slack-bridge.js +1 -1
- package/dist/connectors/telegram-bridge.js +1 -1
- package/dist/{conversations-3O5O6AS3.js → conversations-HL2JP5GI.js} +5 -5
- package/dist/{create-RNLNCORE.js → create-3SEKKI6P.js} +5 -5
- package/dist/{create-WBBYI6V7.js → create-UOSOQ2HN.js} +4 -4
- package/dist/daemon-client-WOAQXXBM.js +12 -0
- package/dist/{daemon-restart-NGFHFAUF.js → daemon-restart-5ABHNXJZ.js} +9 -8
- package/dist/daemon.js +2730 -1520
- package/dist/{db-RA45JBFG.js → db-PLEDCBHZ.js} +1 -1
- package/dist/db-RYX3SS2W.js +9 -0
- package/dist/{delete-QTGWEDBI.js → delete-KYOVWR23.js} +3 -3
- package/dist/delivery-manager-2BR5NZKF.js +32 -0
- package/dist/{delivery-router-FL45JL7N.js → delivery-router-D5ELDMS2.js} +4 -4
- package/dist/down-QVFN4UPK.js +15 -0
- package/dist/{env-RLYQBOOP.js → env-R34DT7XL.js} +10 -6
- package/dist/exec-DVLXKRIO.js +17 -0
- package/dist/{export-SUYRLI5Q.js → export-6ZXAXATG.js} +6 -6
- package/dist/extension-PM42QCID.js +97 -0
- package/dist/extensions-BBGVL5JC.js +38 -0
- package/dist/{files-EAMPO2SJ.js → files-VQV2VZQO.js} +5 -5
- package/dist/{import-DDUFE7AY.js → import-MK2I2T6F.js} +5 -5
- package/dist/isolation-62MKDZN3.js +22 -0
- package/dist/{join-I5QEE3LG.js → join-DGYHTJUH.js} +3 -3
- package/dist/lib-DYEZMGW7.js +6588 -0
- package/dist/{list-DW2VRTOZ.js → list-C644WTHV.js} +16 -8
- package/dist/{login-7CHPW2PN.js → login-IIGEQPHL.js} +4 -4
- package/dist/{login-RIJF2F4G.js → login-KZQLMAWE.js} +4 -4
- package/dist/{logout-5MLHZALK.js → logout-AGTZVRGP.js} +4 -4
- package/dist/{logout-UZJRGY4Z.js → logout-KD6GXIJJ.js} +4 -4
- package/dist/message-delivery-V3R6NXJP.js +42 -0
- package/dist/{mind-2B6M7Y25.js → mind-BI4EPBVZ.js} +25 -19
- package/dist/{mind-activity-tracker-NZZT2NTT.js → mind-activity-tracker-2ACNHA7B.js} +5 -5
- package/dist/mind-history-WOYFLQAI.js +264 -0
- package/dist/{mind-list-WUPMQDYQ.js → mind-list-6VPM7GUQ.js} +4 -4
- package/dist/mind-manager-MWW3BTS4.js +32 -0
- package/dist/mind-profile-WPG42U5Y.js +47 -0
- package/dist/mind-service-VIKZJK2M.js +38 -0
- package/dist/{mind-sleep-B7BHJLH7.js → mind-sleep-XDISJY74.js} +4 -4
- package/dist/{mind-status-L3EFFRPR.js → mind-status-7FTZWPZF.js} +4 -4
- package/dist/{mind-wake-GY3RFX7Y.js → mind-wake-KIIKEI3A.js} +4 -4
- package/dist/{package-PK6JUFL3.js → package-V2WHWVG6.js} +9 -5
- package/dist/{read-5AMJRO3D.js → read-H5C26YO7.js} +18 -8
- package/dist/read-stdin-PIRM6A2Y.js +8 -0
- package/dist/{register-V2JZZKFK.js → register-J27WP33N.js} +4 -4
- package/dist/{registry-PJ4S5PHQ.js → registry-UYV5S6QT.js} +3 -3
- package/dist/{reject-33HEZMZ4.js → reject-OEANJYIA.js} +4 -4
- package/dist/{restart-3UCMRUVC.js → restart-V5EGYBJG.js} +4 -4
- package/dist/{sandbox-JANNTX6U.js → sandbox-SI5HMBP3.js} +5 -5
- package/dist/scheduler-AGG3L2FO.js +32 -0
- package/dist/{schema-PA3M5ZKH.js → schema-ETMABTW4.js} +4 -2
- package/dist/seed-WNGI6PNW.js +11 -0
- package/dist/seed-check-PXTH7YXS.js +32 -0
- package/dist/seed-cmd-VENFTGS3.js +36 -0
- package/dist/{seed-ALUQ55FF.js → seed-create-663ALOKH.js} +8 -8
- package/dist/{sprout-L2GFOVF7.js → seed-sprout-EH3AGKAI.js} +24 -11
- package/dist/{send-3MI36LEF.js → send-7FUUUZZH.js} +66 -51
- package/dist/{setup-SZIARWI6.js → setup-GGMKENLN.js} +6 -4
- package/dist/{setup-WENLVPVP.js → setup-Z3DEVWV7.js} +13 -11
- package/dist/{skill-TUVOTW4Z.js → skill-DKNYJS4P.js} +12 -8
- package/dist/skills/imagegen/SKILL.md +11 -7
- package/dist/skills/imagegen/scripts/imagegen.ts +146 -25
- package/dist/skills/orientation/SKILL.md +9 -2
- package/dist/skills/plan-coordinator/SKILL.md +60 -0
- package/dist/skills/seed-nurture/SKILL.md +42 -0
- package/dist/skills/volute-mind/SKILL.md +11 -221
- package/dist/skills/volute-mind/references/extensions.md +37 -0
- package/dist/skills/volute-mind/references/integrations.md +48 -0
- package/dist/skills/volute-mind/references/routing.md +86 -0
- package/dist/skills/volute-mind/references/sleep.md +33 -0
- package/dist/skills/volute-mind/references/variants.md +31 -0
- package/dist/{skills-XNZK6P4K.js → skills-Q6VZ2UGD.js} +11 -6
- package/dist/sleep-manager-BJK2ROPX.js +36 -0
- package/dist/spirit-4JP4TY4C.js +23 -0
- package/dist/{split-STOROBYJ.js → split-3YPMS2CL.js} +3 -3
- package/dist/sprout-E3HJIV2Z.js +11 -0
- package/dist/{start-K2NCUUCG.js → start-W3TPKX4D.js} +4 -4
- package/dist/{status-TCUMUO6M.js → status-4OVFXFEJ.js} +7 -6
- package/dist/{stop-H26JZDXF.js → stop-GTT6YWYO.js} +4 -4
- package/dist/system-channel-DXD2JBOU.js +36 -0
- package/dist/system-chat-TYLOL7SX.js +36 -0
- package/dist/{systems-DHBKVYEY.js → systems-AYLO727G.js} +7 -7
- package/dist/{tailscale-XHQBZROW.js → tailscale-ZEUK7GKZ.js} +3 -3
- package/dist/{template-hash-A6VVKOXJ.js → template-hash-EJRTKE36.js} +1 -1
- package/dist/up-PA7F2CXE.js +18 -0
- package/dist/{update-QVPRF6GR.js → update-HG4LCUSG.js} +7 -6
- package/dist/{update-check-ZD6OOIYQ.js → update-check-X3YG4WVP.js} +4 -4
- package/dist/{upgrade-O4Q7WJM3.js → upgrade-YGNIDICG.js} +3 -3
- package/dist/{variant-7TGZHOU3.js → variant-MZUMRTQO.js} +1 -1
- package/dist/{version-notify-TCKWBZZG.js → version-notify-YCH4UVQ2.js} +23 -20
- package/dist/volute-config-WBKYJGYQ.js +10 -0
- package/dist/web-assets/assets/index-DiiwC-CZ.css +1 -0
- package/dist/web-assets/assets/index-d6y5b9Ij.js +75 -0
- package/dist/web-assets/ext-theme.css +48 -9
- package/dist/web-assets/index.html +2 -2
- package/drizzle/0005_meta_summaries.sql +15 -0
- package/drizzle/meta/0005_snapshot.json +7 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +8 -4
- package/packages/extensions/plan/dist/ui/assets/index-CJj2gZnZ.css +1 -0
- package/packages/extensions/plan/dist/ui/assets/index-FMEJmvQz.js +61 -0
- package/packages/extensions/plan/dist/ui/index.html +14 -0
- package/packages/extensions/plan/skills/plan/SKILL.md +43 -0
- package/packages/extensions/plan/skills/plan/scripts/plan-hook.sh +37 -0
- package/templates/_base/home/VOLUTE.md +12 -19
- package/templates/_base/src/lib/context-breakdown.ts +450 -0
- package/templates/_base/src/lib/format-prefix.ts +17 -0
- package/templates/_base/src/lib/hook-loader.ts +8 -2
- package/templates/_base/src/lib/router.ts +75 -33
- package/templates/_base/src/lib/routing.ts +4 -1
- package/templates/_base/src/lib/startup.ts +16 -8
- package/templates/_base/src/lib/types.ts +2 -1
- package/templates/_base/src/lib/volute-server.ts +69 -8
- package/templates/claude/.init/CLAUDE.md +4 -10
- package/templates/claude/package.json.tmpl +1 -0
- package/templates/claude/src/agent.ts +100 -32
- package/templates/claude/src/lib/hooks/reply-instructions.ts +27 -7
- package/templates/claude/src/lib/stream-consumer.ts +40 -2
- package/templates/claude/src/server.ts +1 -0
- package/templates/codex/package.json.tmpl +1 -0
- package/templates/codex/src/agent.ts +81 -8
- package/templates/codex/src/server.ts +1 -4
- package/templates/pi/package.json.tmpl +1 -0
- package/templates/pi/src/agent.ts +115 -36
- package/templates/pi/src/lib/event-handler.ts +22 -7
- package/templates/pi/src/lib/reply-instructions-extension.ts +23 -4
- package/templates/pi/src/lib/subagents.ts +20 -17
- package/templates/pi/src/server.ts +2 -5
- package/dist/chunk-K3NQKI34.js +0 -10
- package/dist/daemon-client-6QXHZ7US.js +0 -12
- package/dist/db-F34YLV7D.js +0 -9
- package/dist/delivery-manager-SDVXFD4W.js +0 -28
- package/dist/down-TB3ESMNP.js +0 -14
- package/dist/extension-FQ5D3NCC.js +0 -174
- package/dist/extensions-GDYWQXC4.js +0 -29
- package/dist/history-FO5PHBQ5.js +0 -128
- package/dist/message-delivery-2FIM7QKO.js +0 -32
- package/dist/mind-manager-BNCMGYXW.js +0 -28
- package/dist/mind-service-AV273WT4.js +0 -34
- package/dist/sleep-manager-53DZOWW7.js +0 -32
- package/dist/system-chat-NPYFYZVI.js +0 -32
- package/dist/up-6I6BHRTO.js +0 -17
- package/dist/web-assets/assets/index-Bui7U9Uu.css +0 -1
- package/dist/web-assets/assets/index-e36DIo1b.js +0 -73
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
} from "./chunk-D424ZQGI.js";
|
|
8
8
|
import {
|
|
9
9
|
daemonFetch
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-PLDWHR4D.js";
|
|
11
|
+
import "./chunk-N7BLAHNE.js";
|
|
12
|
+
import "./chunk-4JSR7YO7.js";
|
|
13
|
+
import "./chunk-7KJOFUNN.js";
|
|
14
14
|
|
|
15
15
|
// src/commands/mind-sleep.ts
|
|
16
16
|
async function run(args) {
|
|
@@ -4,10 +4,10 @@ import {
|
|
|
4
4
|
} from "./chunk-NAOW2CLO.js";
|
|
5
5
|
import {
|
|
6
6
|
daemonFetch
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-PLDWHR4D.js";
|
|
8
|
+
import "./chunk-N7BLAHNE.js";
|
|
9
|
+
import "./chunk-4JSR7YO7.js";
|
|
10
|
+
import "./chunk-7KJOFUNN.js";
|
|
11
11
|
|
|
12
12
|
// src/commands/mind-status.ts
|
|
13
13
|
async function run(args) {
|
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
} from "./chunk-D424ZQGI.js";
|
|
8
8
|
import {
|
|
9
9
|
daemonFetch
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-PLDWHR4D.js";
|
|
11
|
+
import "./chunk-N7BLAHNE.js";
|
|
12
|
+
import "./chunk-4JSR7YO7.js";
|
|
13
|
+
import "./chunk-7KJOFUNN.js";
|
|
14
14
|
|
|
15
15
|
// src/commands/mind-wake.ts
|
|
16
16
|
async function run(args) {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import "./chunk-
|
|
2
|
+
import "./chunk-7KJOFUNN.js";
|
|
3
3
|
|
|
4
4
|
// package.json
|
|
5
5
|
var package_default = {
|
|
6
6
|
name: "volute",
|
|
7
|
-
version: "0.
|
|
7
|
+
version: "0.34.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",
|
|
@@ -42,12 +42,14 @@ var package_default = {
|
|
|
42
42
|
"packages/extensions/notes/dist/ui/",
|
|
43
43
|
"packages/extensions/notes/skills/",
|
|
44
44
|
"packages/extensions/pages/dist/ui/",
|
|
45
|
-
"packages/extensions/pages/skills/"
|
|
45
|
+
"packages/extensions/pages/skills/",
|
|
46
|
+
"packages/extensions/plan/dist/ui/",
|
|
47
|
+
"packages/extensions/plan/skills/"
|
|
46
48
|
],
|
|
47
49
|
scripts: {
|
|
48
50
|
dev: "tsx src/cli.ts",
|
|
49
51
|
build: "npm run build:ext && tsup && cp -r skills dist/skills && npm run build:web",
|
|
50
|
-
"build:ext": "npm run build:ui --workspace=packages/extensions/notes && npm run build:ui --workspace=packages/extensions/pages",
|
|
52
|
+
"build:ext": "npm run build:ext-theme --workspace=packages/ui && cp packages/ui/dist/ext-theme.css src/web/ui/public/ext-theme.css && npm run build:ui --workspace=packages/extensions/notes && npm run build:ui --workspace=packages/extensions/pages && npm run build:ui --workspace=packages/extensions/plan",
|
|
51
53
|
"build:web": "vite build --config src/web/ui/vite.config.ts",
|
|
52
54
|
"dev:web": "vite --config src/web/ui/vite.config.ts",
|
|
53
55
|
test: "node --import tsx --import ./test/setup.ts --test --test-force-exit --test-concurrency=4 $(find test -name '*.test.ts' ! -name 'daemon-e2e.test.ts' | sort)",
|
|
@@ -57,7 +59,7 @@ var package_default = {
|
|
|
57
59
|
"lint:fix": "biome check --write src/ test/",
|
|
58
60
|
format: "biome format --write src/ test/",
|
|
59
61
|
typecheck: "tsc --noEmit",
|
|
60
|
-
"typecheck:templates": "
|
|
62
|
+
"typecheck:templates": "tsx scripts/typecheck-templates.ts",
|
|
61
63
|
"lint:templates": "biome check templates/",
|
|
62
64
|
"typecheck:web": "svelte-check --tsconfig src/web/ui/tsconfig.json",
|
|
63
65
|
prepare: "lefthook install",
|
|
@@ -79,6 +81,7 @@ var package_default = {
|
|
|
79
81
|
"drizzle-orm": "^0.45.1",
|
|
80
82
|
hono: "^4.11.7",
|
|
81
83
|
libsql: "^0.5.22",
|
|
84
|
+
replicate: "^1.4.0",
|
|
82
85
|
telegraf: "^4.16.3",
|
|
83
86
|
zod: "^4.3.6"
|
|
84
87
|
},
|
|
@@ -95,6 +98,7 @@ var package_default = {
|
|
|
95
98
|
"drizzle-kit": "^0.31.8",
|
|
96
99
|
lefthook: "^2.1.0",
|
|
97
100
|
marked: "^17.0.1",
|
|
101
|
+
sharp: "^0.34.5",
|
|
98
102
|
svelte: "^5.53.0",
|
|
99
103
|
tsup: "^8.0.0",
|
|
100
104
|
tsx: "^4.0.0",
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
compactTime,
|
|
4
|
+
isCompact
|
|
5
|
+
} from "./chunk-FYCALD4Q.js";
|
|
2
6
|
import {
|
|
3
7
|
resolveMindName
|
|
4
8
|
} from "./chunk-NAOW2CLO.js";
|
|
@@ -7,10 +11,10 @@ import {
|
|
|
7
11
|
} from "./chunk-D424ZQGI.js";
|
|
8
12
|
import {
|
|
9
13
|
daemonFetch
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
+
} from "./chunk-PLDWHR4D.js";
|
|
15
|
+
import "./chunk-N7BLAHNE.js";
|
|
16
|
+
import "./chunk-4JSR7YO7.js";
|
|
17
|
+
import "./chunk-7KJOFUNN.js";
|
|
14
18
|
|
|
15
19
|
// src/commands/chat/read.ts
|
|
16
20
|
async function resolveConversationId(mindName, input) {
|
|
@@ -61,13 +65,19 @@ async function run(args) {
|
|
|
61
65
|
console.error("Unexpected response format from server");
|
|
62
66
|
process.exit(1);
|
|
63
67
|
}
|
|
68
|
+
const compact = isCompact();
|
|
64
69
|
for (const msg of data.items) {
|
|
65
70
|
const sender = msg.sender_name ?? msg.role;
|
|
66
71
|
const text = Array.isArray(msg.content) ? msg.content.filter((b) => b.type === "text").map((b) => b.text).join("") : msg.content;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
72
|
+
if (compact) {
|
|
73
|
+
const time = compactTime(msg.created_at);
|
|
74
|
+
console.log(`[${time}] ${sender}: ${text}`);
|
|
75
|
+
} else {
|
|
76
|
+
const time = new Date(
|
|
77
|
+
msg.created_at.endsWith("Z") ? msg.created_at : `${msg.created_at}Z`
|
|
78
|
+
).toLocaleString();
|
|
79
|
+
console.log(`[${time}] ${sender}: ${text}`);
|
|
80
|
+
}
|
|
71
81
|
}
|
|
72
82
|
}
|
|
73
83
|
export {
|
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
} from "./chunk-D424ZQGI.js";
|
|
8
8
|
import {
|
|
9
9
|
daemonFetch
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-PLDWHR4D.js";
|
|
11
|
+
import "./chunk-N7BLAHNE.js";
|
|
12
|
+
import "./chunk-4JSR7YO7.js";
|
|
13
|
+
import "./chunk-7KJOFUNN.js";
|
|
14
14
|
|
|
15
15
|
// src/commands/systems/register.ts
|
|
16
16
|
async function run(args) {
|
|
@@ -24,9 +24,9 @@ import {
|
|
|
24
24
|
voluteHome,
|
|
25
25
|
voluteSystemDir,
|
|
26
26
|
voluteUserHome
|
|
27
|
-
} from "./chunk-
|
|
28
|
-
import "./chunk-
|
|
29
|
-
import "./chunk-
|
|
27
|
+
} from "./chunk-N7BLAHNE.js";
|
|
28
|
+
import "./chunk-4JSR7YO7.js";
|
|
29
|
+
import "./chunk-7KJOFUNN.js";
|
|
30
30
|
export {
|
|
31
31
|
addMind,
|
|
32
32
|
addSpirit,
|
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
} from "./chunk-D424ZQGI.js";
|
|
8
8
|
import {
|
|
9
9
|
daemonFetch
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-PLDWHR4D.js";
|
|
11
|
+
import "./chunk-N7BLAHNE.js";
|
|
12
|
+
import "./chunk-4JSR7YO7.js";
|
|
13
|
+
import "./chunk-7KJOFUNN.js";
|
|
14
14
|
|
|
15
15
|
// src/commands/chat/reject.ts
|
|
16
16
|
async function run(args) {
|
|
@@ -8,10 +8,10 @@ import {
|
|
|
8
8
|
} from "./chunk-4RQBJWQX.js";
|
|
9
9
|
import {
|
|
10
10
|
daemonFetch
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-PLDWHR4D.js";
|
|
12
|
+
import "./chunk-N7BLAHNE.js";
|
|
13
|
+
import "./chunk-4JSR7YO7.js";
|
|
14
|
+
import "./chunk-7KJOFUNN.js";
|
|
15
15
|
|
|
16
16
|
// src/commands/restart.ts
|
|
17
17
|
async function run(args) {
|
|
@@ -5,12 +5,12 @@ import {
|
|
|
5
5
|
isSandboxEnabled,
|
|
6
6
|
shellEscape,
|
|
7
7
|
wrapForSandbox
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-V45JXOWY.js";
|
|
9
9
|
import "./chunk-YUIHSKR6.js";
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-6OWJXUAR.js";
|
|
11
|
+
import "./chunk-N7BLAHNE.js";
|
|
12
|
+
import "./chunk-4JSR7YO7.js";
|
|
13
|
+
import "./chunk-7KJOFUNN.js";
|
|
14
14
|
export {
|
|
15
15
|
buildDenyRead,
|
|
16
16
|
initSandbox,
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
Scheduler,
|
|
4
|
+
getScheduler,
|
|
5
|
+
initScheduler
|
|
6
|
+
} from "./chunk-TAHX36HZ.js";
|
|
7
|
+
import "./chunk-CVL5IGIR.js";
|
|
8
|
+
import "./chunk-B2BVAIZ4.js";
|
|
9
|
+
import "./chunk-G53F3JA4.js";
|
|
10
|
+
import "./chunk-N3DNFPVA.js";
|
|
11
|
+
import "./chunk-OYAKCAVY.js";
|
|
12
|
+
import "./chunk-V45JXOWY.js";
|
|
13
|
+
import "./chunk-IS7WJ56Q.js";
|
|
14
|
+
import "./chunk-BTWAGDV5.js";
|
|
15
|
+
import "./chunk-M3K5AARV.js";
|
|
16
|
+
import "./chunk-PB65JZK2.js";
|
|
17
|
+
import "./chunk-BM474GX6.js";
|
|
18
|
+
import "./chunk-E5C7OWZ2.js";
|
|
19
|
+
import "./chunk-XWXBJQBE.js";
|
|
20
|
+
import "./chunk-BFWHBQK4.js";
|
|
21
|
+
import "./chunk-YUIHSKR6.js";
|
|
22
|
+
import "./chunk-U5BTYSAL.js";
|
|
23
|
+
import "./chunk-BDK73LK6.js";
|
|
24
|
+
import "./chunk-6OWJXUAR.js";
|
|
25
|
+
import "./chunk-N7BLAHNE.js";
|
|
26
|
+
import "./chunk-4JSR7YO7.js";
|
|
27
|
+
import "./chunk-7KJOFUNN.js";
|
|
28
|
+
export {
|
|
29
|
+
Scheduler,
|
|
30
|
+
getScheduler,
|
|
31
|
+
initScheduler
|
|
32
|
+
};
|
|
@@ -10,11 +10,12 @@ import {
|
|
|
10
10
|
minds,
|
|
11
11
|
sessions,
|
|
12
12
|
sharedSkills,
|
|
13
|
+
summaries,
|
|
13
14
|
systemPrompts,
|
|
14
15
|
turns,
|
|
15
16
|
users
|
|
16
|
-
} from "./chunk-
|
|
17
|
-
import "./chunk-
|
|
17
|
+
} from "./chunk-4JSR7YO7.js";
|
|
18
|
+
import "./chunk-7KJOFUNN.js";
|
|
18
19
|
export {
|
|
19
20
|
activity,
|
|
20
21
|
conversationParticipants,
|
|
@@ -26,6 +27,7 @@ export {
|
|
|
26
27
|
minds,
|
|
27
28
|
sessions,
|
|
28
29
|
sharedSkills,
|
|
30
|
+
summaries,
|
|
29
31
|
systemPrompts,
|
|
30
32
|
turns,
|
|
31
33
|
users
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import "./chunk-7KJOFUNN.js";
|
|
3
|
+
|
|
4
|
+
// src/commands/seed.ts
|
|
5
|
+
async function run(args) {
|
|
6
|
+
console.error("Note: `volute mind seed` is now `volute seed create`");
|
|
7
|
+
await import("./seed-create-663ALOKH.js").then((m) => m.run(args));
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
run
|
|
11
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
parseArgs
|
|
4
|
+
} from "./chunk-D424ZQGI.js";
|
|
5
|
+
import "./chunk-7KJOFUNN.js";
|
|
6
|
+
|
|
7
|
+
// src/commands/seed-check.ts
|
|
8
|
+
async function run(args) {
|
|
9
|
+
const { positional } = parseArgs(args, {});
|
|
10
|
+
const name = positional[0];
|
|
11
|
+
if (!name) {
|
|
12
|
+
console.error("Usage: volute seed check <name>");
|
|
13
|
+
process.exit(1);
|
|
14
|
+
}
|
|
15
|
+
const { daemonFetch } = await import("./daemon-client-WOAQXXBM.js");
|
|
16
|
+
const res = await daemonFetch(`/api/minds/${encodeURIComponent(name)}/seed-check`);
|
|
17
|
+
if (!res.ok) {
|
|
18
|
+
if (res.status === 404) {
|
|
19
|
+
console.log(`Seed "${name}" not found \u2014 it may have been deleted or already sprouted.`);
|
|
20
|
+
} else {
|
|
21
|
+
console.error(`seed check failed for ${name}: HTTP ${res.status}`);
|
|
22
|
+
}
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const data = await res.json();
|
|
26
|
+
if (data.output) {
|
|
27
|
+
console.log(data.output);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export {
|
|
31
|
+
run
|
|
32
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import "./chunk-7KJOFUNN.js";
|
|
3
|
+
|
|
4
|
+
// src/commands/seed-cmd.ts
|
|
5
|
+
async function run(args) {
|
|
6
|
+
const subcommand = args[0];
|
|
7
|
+
switch (subcommand) {
|
|
8
|
+
case "create":
|
|
9
|
+
await import("./seed-create-663ALOKH.js").then((m) => m.run(args.slice(1)));
|
|
10
|
+
break;
|
|
11
|
+
case "sprout":
|
|
12
|
+
await import("./seed-sprout-EH3AGKAI.js").then((m) => m.run(args.slice(1)));
|
|
13
|
+
break;
|
|
14
|
+
case "check":
|
|
15
|
+
await import("./seed-check-PXTH7YXS.js").then((m) => m.run(args.slice(1)));
|
|
16
|
+
break;
|
|
17
|
+
case "--help":
|
|
18
|
+
case "-h":
|
|
19
|
+
case void 0:
|
|
20
|
+
printUsage();
|
|
21
|
+
break;
|
|
22
|
+
default:
|
|
23
|
+
printUsage();
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function printUsage() {
|
|
28
|
+
console.log(`volute seed \u2014 seed lifecycle
|
|
29
|
+
|
|
30
|
+
volute seed create <name> Plant a new seed
|
|
31
|
+
volute seed sprout Complete orientation and become a full mind
|
|
32
|
+
volute seed check <name> Check seed readiness (used by spirit scheduler)`);
|
|
33
|
+
}
|
|
34
|
+
export {
|
|
35
|
+
run
|
|
36
|
+
};
|
|
@@ -5,9 +5,9 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
parseArgs
|
|
7
7
|
} from "./chunk-D424ZQGI.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-7KJOFUNN.js";
|
|
9
9
|
|
|
10
|
-
// src/commands/seed.ts
|
|
10
|
+
// src/commands/seed-create.ts
|
|
11
11
|
async function chooseModel(daemonFetch) {
|
|
12
12
|
const res = await daemonFetch("/api/system/ai/models");
|
|
13
13
|
if (!res.ok) {
|
|
@@ -42,25 +42,25 @@ async function run(args) {
|
|
|
42
42
|
const name = positional[0];
|
|
43
43
|
if (!name) {
|
|
44
44
|
console.error(
|
|
45
|
-
"Usage: volute
|
|
45
|
+
"Usage: volute seed create <name> [--template <name>] [--model <model>] [--description <text>] [--skills <list|none>] [--created-by <username>]"
|
|
46
46
|
);
|
|
47
47
|
process.exit(1);
|
|
48
48
|
}
|
|
49
49
|
const skills = flags.skills === "none" ? [] : flags.skills ? flags.skills.split(",") : void 0;
|
|
50
50
|
const createdBy = flags["created-by"];
|
|
51
|
-
const { daemonFetch } = await import("./daemon-client-
|
|
52
|
-
const { getClient, urlOf } = await import("./api-client-
|
|
51
|
+
const { daemonFetch } = await import("./daemon-client-WOAQXXBM.js");
|
|
52
|
+
const { getClient, urlOf } = await import("./api-client-XUXOB7LI.js");
|
|
53
53
|
const client = getClient();
|
|
54
54
|
let model = flags.model;
|
|
55
55
|
let template = flags.template;
|
|
56
56
|
if (!template) {
|
|
57
|
-
const { resolveTemplate } = await import("./ai-service-
|
|
57
|
+
const { resolveTemplate } = await import("./ai-service-PSILB5WD.js");
|
|
58
58
|
template = resolveTemplate(model);
|
|
59
59
|
}
|
|
60
60
|
if (template !== "claude" && !model) {
|
|
61
61
|
if (process.env.VOLUTE_MIND || !process.stdin.isTTY) {
|
|
62
|
-
const { getSpiritModel } = await import("./spirit-
|
|
63
|
-
const { qualifyModelId } = await import("./ai-service-
|
|
62
|
+
const { getSpiritModel } = await import("./spirit-4JP4TY4C.js");
|
|
63
|
+
const { qualifyModelId } = await import("./ai-service-PSILB5WD.js");
|
|
64
64
|
const spiritModel = getSpiritModel();
|
|
65
65
|
if (spiritModel) {
|
|
66
66
|
model = template === "pi" ? qualifyModelId(spiritModel) : spiritModel;
|
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
getStandardSkillsWithExtensions
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-N3DNFPVA.js";
|
|
5
5
|
import "./chunk-YUIHSKR6.js";
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-U5BTYSAL.js";
|
|
7
|
+
import "./chunk-BDK73LK6.js";
|
|
8
|
+
import "./chunk-6OWJXUAR.js";
|
|
8
9
|
import {
|
|
9
10
|
findMind,
|
|
10
11
|
mindDir
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-N7BLAHNE.js";
|
|
13
|
+
import "./chunk-4JSR7YO7.js";
|
|
14
|
+
import "./chunk-7KJOFUNN.js";
|
|
14
15
|
|
|
15
|
-
// src/commands/sprout.ts
|
|
16
|
+
// src/commands/seed-sprout.ts
|
|
16
17
|
import { existsSync, readFileSync } from "fs";
|
|
17
18
|
import { resolve } from "path";
|
|
18
19
|
var ORIENTATION_MARKER = "You don't have a soul yet";
|
|
19
20
|
async function run(_args) {
|
|
20
21
|
const mindName = process.env.VOLUTE_MIND;
|
|
21
22
|
if (!mindName) {
|
|
22
|
-
console.error("volute
|
|
23
|
+
console.error("volute seed sprout must be run by a mind (VOLUTE_MIND not set)");
|
|
23
24
|
process.exit(1);
|
|
24
25
|
}
|
|
25
26
|
const entry = await findMind(mindName);
|
|
@@ -49,9 +50,21 @@ async function run(_args) {
|
|
|
49
50
|
console.error("Write your MEMORY.md before sprouting.");
|
|
50
51
|
process.exit(1);
|
|
51
52
|
}
|
|
52
|
-
const {
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
const { isImagegenEnabled } = await import("./setup-GGMKENLN.js");
|
|
54
|
+
if (isImagegenEnabled()) {
|
|
55
|
+
const { readVoluteConfig } = await import("./volute-config-WBKYJGYQ.js");
|
|
56
|
+
const config = readVoluteConfig(dir);
|
|
57
|
+
const avatarPath = config?.profile?.avatar;
|
|
58
|
+
if (!avatarPath || !existsSync(resolve(dir, "home", avatarPath))) {
|
|
59
|
+
console.error(
|
|
60
|
+
"Generate an avatar before sprouting. Use `imagegen generate` to create one, then `volute mind profile --avatar <path>` to set it."
|
|
61
|
+
);
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const { daemonFetch } = await import("./daemon-client-WOAQXXBM.js");
|
|
66
|
+
const { getClient, urlOf } = await import("./api-client-XUXOB7LI.js");
|
|
67
|
+
const { mindSkillsDir } = await import("./skills-Q6VZ2UGD.js");
|
|
55
68
|
const client = getClient();
|
|
56
69
|
const failedSkills = [];
|
|
57
70
|
for (const skillId of getStandardSkillsWithExtensions()) {
|
|
@@ -1,20 +1,26 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
readStdin
|
|
4
|
+
} from "./chunk-6LXAAQ43.js";
|
|
5
|
+
import {
|
|
6
|
+
isCompact
|
|
7
|
+
} from "./chunk-FYCALD4Q.js";
|
|
2
8
|
import {
|
|
3
9
|
getClient,
|
|
4
10
|
urlOf
|
|
5
11
|
} from "./chunk-4RQBJWQX.js";
|
|
6
12
|
import {
|
|
7
13
|
formatFileSize
|
|
8
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-MLOQKQNB.js";
|
|
9
15
|
import {
|
|
10
16
|
parseArgs
|
|
11
17
|
} from "./chunk-D424ZQGI.js";
|
|
12
18
|
import {
|
|
13
19
|
daemonFetch
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
20
|
+
} from "./chunk-PLDWHR4D.js";
|
|
21
|
+
import "./chunk-N7BLAHNE.js";
|
|
22
|
+
import "./chunk-4JSR7YO7.js";
|
|
23
|
+
import "./chunk-7KJOFUNN.js";
|
|
18
24
|
|
|
19
25
|
// src/commands/send.ts
|
|
20
26
|
import { existsSync, readFileSync, statSync } from "fs";
|
|
@@ -50,23 +56,6 @@ function parseTarget(target) {
|
|
|
50
56
|
};
|
|
51
57
|
}
|
|
52
58
|
|
|
53
|
-
// src/lib/read-stdin.ts
|
|
54
|
-
import { isatty } from "tty";
|
|
55
|
-
async function readStdin() {
|
|
56
|
-
if (isatty(0)) return void 0;
|
|
57
|
-
const chunks = [];
|
|
58
|
-
try {
|
|
59
|
-
for await (const chunk of process.stdin) {
|
|
60
|
-
chunks.push(chunk);
|
|
61
|
-
}
|
|
62
|
-
} catch (err) {
|
|
63
|
-
console.error(`Failed to read from stdin: ${err instanceof Error ? err.message : String(err)}`);
|
|
64
|
-
process.exit(1);
|
|
65
|
-
}
|
|
66
|
-
const text = Buffer.concat(chunks).toString().replace(/\r?\n$/, "");
|
|
67
|
-
return text || void 0;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
59
|
// src/commands/send.ts
|
|
71
60
|
async function isMind(name) {
|
|
72
61
|
try {
|
|
@@ -285,25 +274,41 @@ To reply to a person, use their username from the message prefix (e.g. volute ch
|
|
|
285
274
|
}
|
|
286
275
|
const { conversationId: convId } = await createRes.json();
|
|
287
276
|
if (convId) waitConversationId = convId;
|
|
288
|
-
const sendRes = await daemonFetch(
|
|
289
|
-
|
|
290
|
-
{
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
}
|
|
300
|
-
);
|
|
277
|
+
const sendRes = await daemonFetch("/api/v1/chat", {
|
|
278
|
+
method: "POST",
|
|
279
|
+
headers: { "Content-Type": "application/json" },
|
|
280
|
+
body: JSON.stringify({
|
|
281
|
+
message: message ?? "",
|
|
282
|
+
conversationId: convId,
|
|
283
|
+
images,
|
|
284
|
+
sender,
|
|
285
|
+
targetMind: contextMind
|
|
286
|
+
})
|
|
287
|
+
});
|
|
301
288
|
if (!sendRes.ok) {
|
|
302
289
|
const data = await sendRes.json().catch(() => ({ error: "Unknown error" }));
|
|
303
290
|
console.error(data.error);
|
|
304
291
|
process.exit(1);
|
|
305
292
|
}
|
|
306
|
-
if (!flags.wait)
|
|
293
|
+
if (!flags.wait) {
|
|
294
|
+
let outboundId;
|
|
295
|
+
try {
|
|
296
|
+
const resData = await sendRes.json();
|
|
297
|
+
outboundId = resData.outboundId;
|
|
298
|
+
} catch (err) {
|
|
299
|
+
console.error(
|
|
300
|
+
`Warning: could not read outboundId from response: ${err.message}`
|
|
301
|
+
);
|
|
302
|
+
}
|
|
303
|
+
if (isCompact()) {
|
|
304
|
+
if (outboundId != null) console.log(`[volute:outbound:${outboundId}]`);
|
|
305
|
+
} else {
|
|
306
|
+
console.log(
|
|
307
|
+
`Message sent.${outboundId != null ? `
|
|
308
|
+
[volute:outbound:${outboundId}]` : ""}`
|
|
309
|
+
);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
307
312
|
} else if (!parsed.isDM && parsed.platform === "volute") {
|
|
308
313
|
if (!parsed.identifier.startsWith("#")) {
|
|
309
314
|
console.error(
|
|
@@ -316,7 +321,7 @@ To reply to a person, use their username from the message prefix (e.g. volute ch
|
|
|
316
321
|
const channelName = parsed.identifier.slice(1);
|
|
317
322
|
const mindSelf = process.env.VOLUTE_MIND;
|
|
318
323
|
const sender = flags.sender || mindSelf || userInfo().username;
|
|
319
|
-
const channelRes = await daemonFetch(`/api/
|
|
324
|
+
const channelRes = await daemonFetch(`/api/v1/channels/${encodeURIComponent(channelName)}`);
|
|
320
325
|
if (!channelRes.ok) {
|
|
321
326
|
console.error(`Channel "${channelName}" not found. Create it first or check the name.`);
|
|
322
327
|
process.exit(1);
|
|
@@ -328,25 +333,35 @@ To reply to a person, use their username from the message prefix (e.g. volute ch
|
|
|
328
333
|
console.error("No mind is a member of this channel. A mind must join the channel first.");
|
|
329
334
|
process.exit(1);
|
|
330
335
|
}
|
|
331
|
-
const sendRes = await daemonFetch(
|
|
332
|
-
|
|
333
|
-
{
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
}
|
|
343
|
-
);
|
|
336
|
+
const sendRes = await daemonFetch("/api/v1/chat", {
|
|
337
|
+
method: "POST",
|
|
338
|
+
headers: { "Content-Type": "application/json" },
|
|
339
|
+
body: JSON.stringify({
|
|
340
|
+
message: message ?? "",
|
|
341
|
+
conversationId: channelData.id,
|
|
342
|
+
images,
|
|
343
|
+
sender,
|
|
344
|
+
targetMind: contextMind
|
|
345
|
+
})
|
|
346
|
+
});
|
|
344
347
|
if (!sendRes.ok) {
|
|
345
348
|
const data = await sendRes.json().catch(() => ({ error: "Unknown error" }));
|
|
346
349
|
console.error(data.error);
|
|
347
350
|
process.exit(1);
|
|
348
351
|
}
|
|
349
|
-
|
|
352
|
+
let outboundId;
|
|
353
|
+
try {
|
|
354
|
+
const resData = await sendRes.json();
|
|
355
|
+
outboundId = resData.outboundId;
|
|
356
|
+
} catch (err) {
|
|
357
|
+
console.error(`Warning: could not read outboundId from response: ${err.message}`);
|
|
358
|
+
}
|
|
359
|
+
if (isCompact()) {
|
|
360
|
+
if (outboundId != null) console.log(`[volute:outbound:${outboundId}]`);
|
|
361
|
+
} else {
|
|
362
|
+
console.log(`Message sent.${outboundId != null ? `
|
|
363
|
+
[volute:outbound:${outboundId}]` : ""}`);
|
|
364
|
+
}
|
|
350
365
|
} else {
|
|
351
366
|
console.error(
|
|
352
367
|
`Direct sends to ${parsed.platform} channels are no longer supported.
|