volute 0.31.0 → 0.32.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 +15 -22
- package/dist/{accept-GAKQ3MEH.js → accept-74M7I4RZ.js} +3 -2
- package/dist/{activity-events-T5ZRCVAL.js → activity-events-HETAODOK.js} +3 -2
- package/dist/{ai-service-UWUPM4T6.js → ai-service-ZIPCV3MX.js} +18 -5
- package/dist/api.d.ts +98 -281
- package/dist/{archive-YBNSJYZZ.js → archive-INXYFVCW.js} +3 -2
- package/dist/{auth-T5AW2USD.js → auth-6DMGES3I.js} +4 -3
- package/dist/{bridge-4AJ3EY26.js → bridge-BVCBTGPF.js} +3 -2
- package/dist/{chat-7YLT7FI3.js → chat-XT4OBJBU.js} +8 -8
- package/dist/{chunk-BNC43CSY.js → chunk-2FLJ63GU.js} +2 -2
- package/dist/{chunk-NV3TYNWX.js → chunk-2NGTS5UU.js} +1 -1
- package/dist/{chunk-LX6T3GKQ.js → chunk-ALEF47VT.js} +1 -1
- package/dist/{chunk-S2TZLSDH.js → chunk-D5G5YOPL.js} +163 -15
- package/dist/{chunk-VGWJSNHS.js → chunk-G53F3JA4.js} +1 -35
- package/dist/{chunk-A6TUJJ3L.js → chunk-G6BSYHPK.js} +2 -2
- package/dist/{chunk-BC3P3QCK.js → chunk-I5KY25PQ.js} +1 -9
- package/dist/{chunk-PNQCXLSV.js → chunk-IYDIE3HG.js} +58 -1
- package/dist/{chunk-HDKY4TWU.js → chunk-JJ7W6WSB.js} +3 -3
- package/dist/{chunk-57OKQMP3.js → chunk-LGB6JBHI.js} +1 -1
- package/dist/chunk-LRCG2JLP.js +251 -0
- package/dist/{chunk-SNVPRRT7.js → chunk-LSGWR54X.js} +2 -2
- package/dist/{chunk-EMPFLFTG.js → chunk-M7UL5S3Q.js} +1 -1
- package/dist/chunk-PB65JZK2.js +85 -0
- package/dist/chunk-PVY5W6QN.js +41 -0
- package/dist/{chunk-BWKIHH7B.js → chunk-QBQ424EM.js} +318 -418
- package/dist/{chunk-EKDWA7E4.js → chunk-QZANELPX.js} +4 -2
- package/dist/{chunk-AAO77TZX.js → chunk-R7E6CRVQ.js} +1 -1
- package/dist/{chunk-X62AXPR7.js → chunk-RPZZSXV3.js} +8 -196
- package/dist/{chunk-WRS3B556.js → chunk-RSX4OPZY.js} +5 -5
- package/dist/{chunk-FAHDKPEH.js → chunk-S6NFERDC.js} +5 -3
- package/dist/chunk-SKLSMHXO.js +208 -0
- package/dist/{chunk-DAXJKPHZ.js → chunk-SX5TKJBZ.js} +2 -2
- package/dist/{chunk-R5QJBZZG.js → chunk-TDRYEPH4.js} +20 -10
- package/dist/{chunk-6QIUN46C.js → chunk-TSXLLQZW.js} +11 -3
- package/dist/{chunk-4OUOFS23.js → chunk-UKVWJRKN.js} +1 -1
- package/dist/{chunk-NOWVQ7AL.js → chunk-WKF5FEFK.js} +318 -167
- package/dist/cli.js +38 -20
- package/dist/{clock-LJCG426D.js → clock-2UOZ6JPU.js} +5 -4
- package/dist/{cloud-sync-O3LXIRN6.js → cloud-sync-JN3NWKEM.js} +16 -14
- package/dist/config-H2H4UIF7.js +72 -0
- 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-RKKGP5IA.js → conversations-3O5O6AS3.js} +4 -3
- package/dist/{create-WUTIIRI2.js → create-RNLNCORE.js} +3 -2
- package/dist/{create-TL623TFC.js → create-WBBYI6V7.js} +6 -2
- package/dist/{daemon-client-CVGM25DM.js → daemon-client-6QXHZ7US.js} +3 -2
- package/dist/{daemon-restart-EZP7XH3V.js → daemon-restart-NGFHFAUF.js} +7 -6
- package/dist/daemon.js +907 -612
- package/dist/{db-SW5PL6QA.js → db-F34YLV7D.js} +2 -1
- package/dist/db-RA45JBFG.js +16 -0
- package/dist/{delete-Z6HAG35F.js → delete-QTGWEDBI.js} +1 -1
- package/dist/delivery-manager-SDVXFD4W.js +28 -0
- package/dist/delivery-router-FL45JL7N.js +21 -0
- package/dist/down-TB3ESMNP.js +14 -0
- package/dist/{env-NHESNNSP.js → env-RLYQBOOP.js} +3 -2
- package/dist/{export-EVMP7GWY.js → export-SUYRLI5Q.js} +4 -3
- package/dist/{extension-LR7EW3JF.js → extension-FQ5D3NCC.js} +4 -3
- package/dist/{extensions-NGEJI7JH.js → extensions-GDYWQXC4.js} +9 -7
- package/dist/{files-3SM7V33S.js → files-EAMPO2SJ.js} +4 -3
- package/dist/{history-PQD3LXEP.js → history-FO5PHBQ5.js} +7 -2
- package/dist/{import-PR2OCGQJ.js → import-DDUFE7AY.js} +4 -3
- package/dist/{join-R4EN5CWQ.js → join-I5QEE3LG.js} +1 -1
- package/dist/{list-B4XNUOFO.js → list-DW2VRTOZ.js} +3 -2
- package/dist/{login-62JVY6A2.js → login-7CHPW2PN.js} +3 -2
- package/dist/{login-URWP6S2N.js → login-RIJF2F4G.js} +3 -2
- package/dist/{logout-NXJQJDLI.js → logout-5MLHZALK.js} +3 -2
- package/dist/{logout-ZK2N62T3.js → logout-UZJRGY4Z.js} +3 -2
- package/dist/message-delivery-2FIM7QKO.js +32 -0
- package/dist/{mind-E2ZV2WRX.js → mind-2B6M7Y25.js} +18 -18
- package/dist/{mind-activity-tracker-ASNZBMLC.js → mind-activity-tracker-NZZT2NTT.js} +4 -3
- package/dist/{mind-list-BEI7E5WY.js → mind-list-WUPMQDYQ.js} +3 -2
- package/dist/mind-manager-BNCMGYXW.js +28 -0
- package/dist/mind-service-AV273WT4.js +34 -0
- package/dist/{mind-sleep-CANABWJI.js → mind-sleep-B7BHJLH7.js} +3 -2
- package/dist/{mind-status-6WKZVUOP.js → mind-status-L3EFFRPR.js} +3 -2
- package/dist/{mind-wake-RZKLH2IN.js → mind-wake-GY3RFX7Y.js} +3 -2
- package/dist/{package-NU4CA7OU.js → package-PK6JUFL3.js} +1 -1
- package/dist/{read-THL362EI.js → read-5AMJRO3D.js} +3 -2
- package/dist/{register-QAQELAS6.js → register-V2JZZKFK.js} +3 -2
- package/dist/{registry-ASXCQCNH.js → registry-PJ4S5PHQ.js} +8 -1
- package/dist/{reject-AYPBNPNL.js → reject-33HEZMZ4.js} +3 -2
- package/dist/{restart-6SKPV3T2.js → restart-3UCMRUVC.js} +3 -2
- package/dist/{sandbox-6ZEWQDVU.js → sandbox-JANNTX6U.js} +4 -3
- package/dist/schema-PA3M5ZKH.js +32 -0
- package/dist/{seed-OWX2AW75.js → seed-ALUQ55FF.js} +26 -9
- package/dist/{send-ZO4BTWXK.js → send-3MI36LEF.js} +56 -67
- package/dist/{setup-7CFITEQN.js → setup-SZIARWI6.js} +5 -2
- package/dist/{setup-ZXBXG7E4.js → setup-WENLVPVP.js} +8 -6
- package/dist/{skill-YFXP67A2.js → skill-TUVOTW4Z.js} +3 -2
- package/dist/skills/dreaming/SKILL.md +6 -4
- package/dist/skills/dreaming/references/INSTALL.md +2 -2
- package/dist/skills/dreaming/scripts/dream.ts +2 -2
- package/dist/skills/dreaming/scripts/wake-context-dreams.sh +1 -1
- package/dist/skills/imagegen/SKILL.md +6 -5
- package/dist/skills/imagegen/references/INSTALL.md +1 -1
- package/dist/skills/resonance/SKILL.md +4 -1
- package/dist/skills/resonance/references/INSTALL.md +2 -2
- package/dist/skills/resonance/scripts/resonance-hook.sh +2 -0
- package/dist/skills/resonance/scripts/resonance.ts +35 -5
- package/dist/skills/volute-admin/SKILL.md +83 -0
- package/dist/skills/volute-mind/SKILL.md +11 -11
- package/dist/skills-XNZK6P4K.js +61 -0
- package/dist/sleep-manager-53DZOWW7.js +32 -0
- package/dist/spirit-N4W4UQRH.js +217 -0
- package/dist/{split-MI62KJUU.js → split-STOROBYJ.js} +1 -1
- package/dist/{sprout-FDVI2CGN.js → sprout-L2GFOVF7.js} +9 -7
- package/dist/{start-D64BRKPH.js → start-K2NCUUCG.js} +3 -2
- package/dist/{status-ZZWBYFGE.js → status-TCUMUO6M.js} +5 -4
- package/dist/{stop-OP2CTXCO.js → stop-H26JZDXF.js} +3 -2
- package/dist/system-chat-NPYFYZVI.js +32 -0
- package/dist/{systems-EQPPT4B7.js → systems-DHBKVYEY.js} +6 -5
- package/dist/{tailscale-6DJKUMNF.js → tailscale-XHQBZROW.js} +2 -1
- package/dist/{template-hash-3HOR4UAJ.js → template-hash-A6VVKOXJ.js} +2 -1
- package/dist/up-6I6BHRTO.js +17 -0
- package/dist/{update-KUJXATRS.js → update-QVPRF6GR.js} +5 -4
- package/dist/{update-check-5WVSU37T.js → update-check-ZD6OOIYQ.js} +3 -2
- package/dist/{upgrade-KBHCWX6T.js → upgrade-O4Q7WJM3.js} +12 -14
- package/dist/{version-notify-75ELVKPV.js → version-notify-TCKWBZZG.js} +21 -18
- package/dist/web-assets/assets/index-Bui7U9Uu.css +1 -0
- package/dist/web-assets/assets/index-e36DIo1b.js +73 -0
- package/dist/web-assets/ext-theme.css +93 -0
- package/dist/web-assets/index.html +2 -2
- package/drizzle/0004_spirits.sql +5 -0
- package/drizzle/meta/0004_snapshot.json +7 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +1 -1
- package/packages/extensions/notes/dist/ui/assets/index-8jWEv9SA.js +61 -0
- package/packages/extensions/notes/dist/ui/assets/index-DkaB7Ytd.css +1 -0
- package/packages/extensions/notes/dist/ui/index.html +2 -2
- package/packages/extensions/pages/skills/pages/SKILL.md +16 -46
- package/templates/_base/.init/.config/hooks/pre-prompt/session-activity.ts +40 -0
- package/templates/_base/.init/{.config → .local}/bin/volute +1 -1
- package/templates/_base/.init/.local/hooks/pre-prompt/session-activity.ts +40 -0
- package/templates/_base/.init/.local/hooks/startup-context.ts +58 -0
- package/templates/_base/home/.config/routes.json +1 -1
- package/templates/_base/src/lib/daemon-client.ts +21 -13
- package/templates/_base/src/lib/format-prefix.ts +1 -0
- package/templates/_base/src/lib/hook-loader.ts +155 -0
- package/templates/_base/src/lib/startup.ts +11 -4
- package/templates/_base/src/lib/transparency.ts +2 -2
- package/templates/claude/.init/.claude/settings.json +1 -1
- package/templates/claude/.init/.config/routes.json +2 -2
- package/templates/claude/src/agent.ts +95 -13
- package/templates/claude/src/lib/message-channel.ts +7 -2
- package/templates/codex/.init/.config/routes.json +11 -0
- package/templates/codex/.init/AGENTS.md +29 -0
- package/templates/codex/home/.config/config.json.tmpl +7 -0
- package/templates/codex/package.json.tmpl +20 -0
- package/templates/codex/src/agent.ts +553 -0
- package/templates/codex/src/lib/content.ts +16 -0
- package/templates/codex/src/lib/session-store.ts +56 -0
- package/templates/codex/src/server.ts +59 -0
- package/templates/codex/volute-template.json +8 -0
- package/templates/pi/.init/.config/routes.json +2 -2
- package/templates/pi/src/agent.ts +62 -8
- package/templates/pi/src/lib/event-handler.ts +1 -1
- package/templates/pi/src/lib/reply-instructions-extension.ts +32 -11
- package/dist/chunk-HR5JKIDG.js +0 -222
- package/dist/down-TS4XQBA4.js +0 -13
- package/dist/message-delivery-UJHCLVU4.js +0 -30
- package/dist/mind-manager-IPA6DZXD.js +0 -26
- package/dist/pages-watcher-72OVPRMH.js +0 -22
- package/dist/skills/sessions/SKILL.md +0 -49
- package/dist/sleep-manager-TPS6OGCA.js +0 -30
- package/dist/system-chat-B43GIXQU.js +0 -30
- package/dist/up-TDXEP3VA.js +0 -16
- package/dist/web-assets/assets/index-BM1cTzBg.js +0 -72
- package/dist/web-assets/assets/index-BfJkKTPF.css +0 -1
- package/packages/extensions/notes/dist/ui/assets/index-B8GdTnXs.css +0 -1
- package/packages/extensions/notes/dist/ui/assets/index-CDpGTCWb.js +0 -2
- package/packages/extensions/pages/skills/pages/scripts/pages.mjs +0 -58
- package/templates/_base/.init/.config/hooks/startup-context.sh +0 -46
- package/templates/_base/.init/.config/scripts/session-reader.ts +0 -59
- package/templates/_base/src/lib/session-monitor.ts +0 -400
- package/templates/claude/src/lib/hooks/session-context.ts +0 -32
- package/templates/pi/src/lib/session-context-extension.ts +0 -35
- /package/templates/_base/.init/{.config → .local}/hooks/wake-context.sh +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
addMind,
|
|
4
|
+
addSpirit,
|
|
4
5
|
addVariant,
|
|
5
6
|
daemonLoopback,
|
|
6
7
|
ensureSystemDir,
|
|
@@ -12,7 +13,9 @@ import {
|
|
|
12
13
|
nextPort,
|
|
13
14
|
readAllMinds,
|
|
14
15
|
readRegistry,
|
|
16
|
+
readSpirits,
|
|
15
17
|
removeMind,
|
|
18
|
+
resolveMindDir,
|
|
16
19
|
setMindRunning,
|
|
17
20
|
setMindStage,
|
|
18
21
|
setMindTemplateHash,
|
|
@@ -21,10 +24,12 @@ import {
|
|
|
21
24
|
voluteHome,
|
|
22
25
|
voluteSystemDir,
|
|
23
26
|
voluteUserHome
|
|
24
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-LRCG2JLP.js";
|
|
28
|
+
import "./chunk-RPZZSXV3.js";
|
|
25
29
|
import "./chunk-K3NQKI34.js";
|
|
26
30
|
export {
|
|
27
31
|
addMind,
|
|
32
|
+
addSpirit,
|
|
28
33
|
addVariant,
|
|
29
34
|
daemonLoopback,
|
|
30
35
|
ensureSystemDir,
|
|
@@ -36,7 +41,9 @@ export {
|
|
|
36
41
|
nextPort,
|
|
37
42
|
readAllMinds,
|
|
38
43
|
readRegistry,
|
|
44
|
+
readSpirits,
|
|
39
45
|
removeMind,
|
|
46
|
+
resolveMindDir,
|
|
40
47
|
setMindRunning,
|
|
41
48
|
setMindStage,
|
|
42
49
|
setMindTemplateHash,
|
|
@@ -7,8 +7,9 @@ import {
|
|
|
7
7
|
} from "./chunk-D424ZQGI.js";
|
|
8
8
|
import {
|
|
9
9
|
daemonFetch
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-UKVWJRKN.js";
|
|
11
|
+
import "./chunk-LRCG2JLP.js";
|
|
12
|
+
import "./chunk-RPZZSXV3.js";
|
|
12
13
|
import "./chunk-K3NQKI34.js";
|
|
13
14
|
|
|
14
15
|
// src/commands/chat/reject.ts
|
|
@@ -8,8 +8,9 @@ import {
|
|
|
8
8
|
} from "./chunk-4RQBJWQX.js";
|
|
9
9
|
import {
|
|
10
10
|
daemonFetch
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-UKVWJRKN.js";
|
|
12
|
+
import "./chunk-LRCG2JLP.js";
|
|
13
|
+
import "./chunk-RPZZSXV3.js";
|
|
13
14
|
import "./chunk-K3NQKI34.js";
|
|
14
15
|
|
|
15
16
|
// src/commands/restart.ts
|
|
@@ -5,10 +5,11 @@ import {
|
|
|
5
5
|
isSandboxEnabled,
|
|
6
6
|
shellEscape,
|
|
7
7
|
wrapForSandbox
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-SX5TKJBZ.js";
|
|
9
9
|
import "./chunk-YUIHSKR6.js";
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-TSXLLQZW.js";
|
|
11
|
+
import "./chunk-LRCG2JLP.js";
|
|
12
|
+
import "./chunk-RPZZSXV3.js";
|
|
12
13
|
import "./chunk-K3NQKI34.js";
|
|
13
14
|
export {
|
|
14
15
|
buildDenyRead,
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
activity,
|
|
4
|
+
conversationParticipants,
|
|
5
|
+
conversationReads,
|
|
6
|
+
conversations,
|
|
7
|
+
deliveryQueue,
|
|
8
|
+
messages,
|
|
9
|
+
mindHistory,
|
|
10
|
+
minds,
|
|
11
|
+
sessions,
|
|
12
|
+
sharedSkills,
|
|
13
|
+
systemPrompts,
|
|
14
|
+
turns,
|
|
15
|
+
users
|
|
16
|
+
} from "./chunk-RPZZSXV3.js";
|
|
17
|
+
import "./chunk-K3NQKI34.js";
|
|
18
|
+
export {
|
|
19
|
+
activity,
|
|
20
|
+
conversationParticipants,
|
|
21
|
+
conversationReads,
|
|
22
|
+
conversations,
|
|
23
|
+
deliveryQueue,
|
|
24
|
+
messages,
|
|
25
|
+
mindHistory,
|
|
26
|
+
minds,
|
|
27
|
+
sessions,
|
|
28
|
+
sharedSkills,
|
|
29
|
+
systemPrompts,
|
|
30
|
+
turns,
|
|
31
|
+
users
|
|
32
|
+
};
|
|
@@ -36,26 +36,42 @@ async function run(args) {
|
|
|
36
36
|
template: { type: "string" },
|
|
37
37
|
model: { type: "string" },
|
|
38
38
|
description: { type: "string" },
|
|
39
|
-
skills: { type: "string" }
|
|
39
|
+
skills: { type: "string" },
|
|
40
|
+
"created-by": { type: "string" }
|
|
40
41
|
});
|
|
41
42
|
const name = positional[0];
|
|
42
43
|
if (!name) {
|
|
43
44
|
console.error(
|
|
44
|
-
"Usage: volute mind seed <name> [--template <name>] [--model <model>] [--description <text>] [--skills <list|none>]"
|
|
45
|
+
"Usage: volute mind seed <name> [--template <name>] [--model <model>] [--description <text>] [--skills <list|none>] [--created-by <username>]"
|
|
45
46
|
);
|
|
46
47
|
process.exit(1);
|
|
47
48
|
}
|
|
48
|
-
const template = flags.template ?? "claude";
|
|
49
49
|
const skills = flags.skills === "none" ? [] : flags.skills ? flags.skills.split(",") : void 0;
|
|
50
|
-
const
|
|
50
|
+
const createdBy = flags["created-by"];
|
|
51
|
+
const { daemonFetch } = await import("./daemon-client-6QXHZ7US.js");
|
|
51
52
|
const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
|
|
52
53
|
const client = getClient();
|
|
53
54
|
let model = flags.model;
|
|
54
|
-
|
|
55
|
-
|
|
55
|
+
let template = flags.template;
|
|
56
|
+
if (!template) {
|
|
57
|
+
const { resolveTemplate } = await import("./ai-service-ZIPCV3MX.js");
|
|
58
|
+
template = resolveTemplate(model);
|
|
59
|
+
}
|
|
60
|
+
if (template !== "claude" && !model) {
|
|
61
|
+
if (process.env.VOLUTE_MIND || !process.stdin.isTTY) {
|
|
62
|
+
const { getSpiritModel } = await import("./spirit-N4W4UQRH.js");
|
|
63
|
+
const { qualifyModelId } = await import("./ai-service-ZIPCV3MX.js");
|
|
64
|
+
const spiritModel = getSpiritModel();
|
|
65
|
+
if (spiritModel) {
|
|
66
|
+
model = template === "pi" ? qualifyModelId(spiritModel) : spiritModel;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
56
69
|
if (!model) {
|
|
57
|
-
|
|
58
|
-
|
|
70
|
+
model = await chooseModel(daemonFetch);
|
|
71
|
+
if (!model) {
|
|
72
|
+
console.error("No AI models configured. Set up providers in the web dashboard first.");
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
59
75
|
}
|
|
60
76
|
}
|
|
61
77
|
const createRes = await daemonFetch(urlOf(client.api.minds.$url()), {
|
|
@@ -67,7 +83,8 @@ async function run(args) {
|
|
|
67
83
|
stage: "seed",
|
|
68
84
|
description: flags.description,
|
|
69
85
|
model,
|
|
70
|
-
skills
|
|
86
|
+
skills,
|
|
87
|
+
createdBy
|
|
71
88
|
})
|
|
72
89
|
});
|
|
73
90
|
const createData = await createRes.json();
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
resolveMindName
|
|
4
|
-
} from "./chunk-NAOW2CLO.js";
|
|
5
2
|
import {
|
|
6
3
|
getClient,
|
|
7
4
|
urlOf
|
|
8
5
|
} from "./chunk-4RQBJWQX.js";
|
|
9
6
|
import {
|
|
10
7
|
formatFileSize
|
|
11
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-ALEF47VT.js";
|
|
12
9
|
import {
|
|
13
10
|
parseArgs
|
|
14
11
|
} from "./chunk-D424ZQGI.js";
|
|
15
12
|
import {
|
|
16
13
|
daemonFetch
|
|
17
|
-
} from "./chunk-
|
|
18
|
-
import "./chunk-
|
|
14
|
+
} from "./chunk-UKVWJRKN.js";
|
|
15
|
+
import "./chunk-LRCG2JLP.js";
|
|
16
|
+
import "./chunk-RPZZSXV3.js";
|
|
19
17
|
import "./chunk-K3NQKI34.js";
|
|
20
18
|
|
|
21
19
|
// src/commands/send.ts
|
|
@@ -40,14 +38,14 @@ function parseTarget(target) {
|
|
|
40
38
|
return {
|
|
41
39
|
platform: "volute",
|
|
42
40
|
identifier: target,
|
|
43
|
-
uri:
|
|
41
|
+
uri: target,
|
|
44
42
|
isDM: true
|
|
45
43
|
};
|
|
46
44
|
}
|
|
47
45
|
return {
|
|
48
46
|
platform: "volute",
|
|
49
47
|
identifier: target,
|
|
50
|
-
uri:
|
|
48
|
+
uri: target,
|
|
51
49
|
isDM: false
|
|
52
50
|
};
|
|
53
51
|
}
|
|
@@ -168,7 +166,6 @@ async function waitForResponse(mindName, conversationId, timeoutMs) {
|
|
|
168
166
|
}
|
|
169
167
|
async function run(args) {
|
|
170
168
|
const { positional, flags } = parseArgs(args, {
|
|
171
|
-
mind: { type: "string" },
|
|
172
169
|
image: { type: "string" },
|
|
173
170
|
file: { type: "string" },
|
|
174
171
|
wait: { type: "boolean" },
|
|
@@ -180,14 +177,13 @@ async function run(args) {
|
|
|
180
177
|
const images = flags.image ? [loadImage(flags.image)] : void 0;
|
|
181
178
|
if (!target || !message && !images && !flags.file) {
|
|
182
179
|
console.error(
|
|
183
|
-
'Usage: volute chat send <target> "<message>" [--
|
|
180
|
+
'Usage: volute chat send <target> "<message>" [--image <path>] [--file <path>] [--wait]'
|
|
184
181
|
);
|
|
185
|
-
console.error(' echo "message" | volute chat send <target>
|
|
182
|
+
console.error(' echo "message" | volute chat send <target>');
|
|
186
183
|
console.error("");
|
|
187
184
|
console.error("Examples:");
|
|
188
185
|
console.error(' volute chat send @other-mind "hello"');
|
|
189
|
-
console.error(' volute chat send animal-chat "hello everyone"');
|
|
190
|
-
console.error(' volute chat send discord:server/channel "hello"');
|
|
186
|
+
console.error(' volute chat send #animal-chat "hello everyone"');
|
|
191
187
|
console.error(' volute chat send @mind "check this out" --image photo.png');
|
|
192
188
|
console.error(" volute chat send @mind --image photo.png");
|
|
193
189
|
console.error(' volute chat send @mind "check this out" --file notes.txt');
|
|
@@ -259,13 +255,13 @@ To reply to a person, use their username from the message prefix (e.g. volute ch
|
|
|
259
255
|
parsed = {
|
|
260
256
|
platform: "volute",
|
|
261
257
|
identifier: `@${parsed.identifier}`,
|
|
262
|
-
uri:
|
|
258
|
+
uri: `@${parsed.identifier}`,
|
|
263
259
|
isDM: true
|
|
264
260
|
};
|
|
265
261
|
}
|
|
266
262
|
const client = getClient();
|
|
267
263
|
let waitMindName;
|
|
268
|
-
let
|
|
264
|
+
let waitConversationId;
|
|
269
265
|
if (parsed.isDM && parsed.platform === "volute") {
|
|
270
266
|
const targetName = parsed.identifier.slice(1);
|
|
271
267
|
const mindSelf = process.env.VOLUTE_MIND;
|
|
@@ -287,17 +283,16 @@ To reply to a person, use their username from the message prefix (e.g. volute ch
|
|
|
287
283
|
console.error(data.error);
|
|
288
284
|
process.exit(1);
|
|
289
285
|
}
|
|
290
|
-
const {
|
|
291
|
-
|
|
286
|
+
const { conversationId: convId } = await createRes.json();
|
|
287
|
+
if (convId) waitConversationId = convId;
|
|
292
288
|
const sendRes = await daemonFetch(
|
|
293
|
-
urlOf(client.api.minds[":name"].
|
|
289
|
+
urlOf(client.api.minds[":name"].chat.$url({ param: { name: contextMind } })),
|
|
294
290
|
{
|
|
295
291
|
method: "POST",
|
|
296
292
|
headers: { "Content-Type": "application/json" },
|
|
297
293
|
body: JSON.stringify({
|
|
298
|
-
platform: "volute",
|
|
299
|
-
uri: channelUri,
|
|
300
294
|
message: message ?? "",
|
|
295
|
+
conversationId: convId,
|
|
301
296
|
images,
|
|
302
297
|
sender
|
|
303
298
|
})
|
|
@@ -309,69 +304,63 @@ To reply to a person, use their username from the message prefix (e.g. volute ch
|
|
|
309
304
|
process.exit(1);
|
|
310
305
|
}
|
|
311
306
|
if (!flags.wait) console.log("Message sent.");
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
}
|
|
321
|
-
);
|
|
322
|
-
if (!histRes.ok) {
|
|
323
|
-
console.error(`Failed to persist to history: HTTP ${histRes.status}`);
|
|
324
|
-
}
|
|
325
|
-
} catch (err) {
|
|
326
|
-
console.error(`Failed to persist to history: ${err instanceof Error ? err.message : err}`);
|
|
327
|
-
}
|
|
307
|
+
} else if (!parsed.isDM && parsed.platform === "volute") {
|
|
308
|
+
if (!parsed.identifier.startsWith("#")) {
|
|
309
|
+
console.error(
|
|
310
|
+
`Mind "${parsed.identifier}" not found.
|
|
311
|
+
To send a DM: volute chat send @${parsed.identifier} "..."
|
|
312
|
+
To send to channel: volute chat send #${parsed.identifier} "..."`
|
|
313
|
+
);
|
|
314
|
+
process.exit(1);
|
|
328
315
|
}
|
|
329
|
-
|
|
330
|
-
const
|
|
331
|
-
const
|
|
332
|
-
|
|
316
|
+
const channelName = parsed.identifier.slice(1);
|
|
317
|
+
const mindSelf = process.env.VOLUTE_MIND;
|
|
318
|
+
const sender = flags.sender || mindSelf || userInfo().username;
|
|
319
|
+
const channelRes = await daemonFetch(`/api/volute/channels/${encodeURIComponent(channelName)}`);
|
|
320
|
+
if (!channelRes.ok) {
|
|
321
|
+
console.error(`Channel "${channelName}" not found. Create it first or check the name.`);
|
|
322
|
+
process.exit(1);
|
|
323
|
+
}
|
|
324
|
+
const channelData = await channelRes.json();
|
|
325
|
+
const mindParticipant = channelData.participants?.find((p) => p.userType === "mind");
|
|
326
|
+
const contextMind = mindSelf ?? mindParticipant?.username;
|
|
327
|
+
if (!contextMind) {
|
|
328
|
+
console.error("No mind is a member of this channel. A mind must join the channel first.");
|
|
329
|
+
process.exit(1);
|
|
330
|
+
}
|
|
331
|
+
const sendRes = await daemonFetch(
|
|
332
|
+
urlOf(client.api.minds[":name"].chat.$url({ param: { name: contextMind } })),
|
|
333
333
|
{
|
|
334
334
|
method: "POST",
|
|
335
335
|
headers: { "Content-Type": "application/json" },
|
|
336
336
|
body: JSON.stringify({
|
|
337
|
-
platform: parsed.platform,
|
|
338
|
-
uri: channelUri,
|
|
339
337
|
message: message ?? "",
|
|
340
|
-
|
|
338
|
+
conversationId: channelData.id,
|
|
339
|
+
images,
|
|
340
|
+
sender
|
|
341
341
|
})
|
|
342
342
|
}
|
|
343
343
|
);
|
|
344
|
-
if (!
|
|
345
|
-
const
|
|
346
|
-
console.error(
|
|
344
|
+
if (!sendRes.ok) {
|
|
345
|
+
const data = await sendRes.json().catch(() => ({ error: "Unknown error" }));
|
|
346
|
+
console.error(data.error);
|
|
347
347
|
process.exit(1);
|
|
348
348
|
}
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
body: JSON.stringify({ channel: channelUri, content: message ?? "" })
|
|
358
|
-
}
|
|
359
|
-
);
|
|
360
|
-
if (!histRes.ok) {
|
|
361
|
-
console.error(`Failed to persist to history: HTTP ${histRes.status}`);
|
|
362
|
-
}
|
|
363
|
-
} catch (err) {
|
|
364
|
-
console.error(`Failed to persist to history: ${err instanceof Error ? err.message : err}`);
|
|
365
|
-
}
|
|
366
|
-
}
|
|
349
|
+
console.log("Message sent.");
|
|
350
|
+
} else {
|
|
351
|
+
console.error(
|
|
352
|
+
`Direct sends to ${parsed.platform} channels are no longer supported.
|
|
353
|
+
Use bridge channel names instead (e.g. volute chat send @mind-name or #channel-name).
|
|
354
|
+
See: volute chat bridge --help`
|
|
355
|
+
);
|
|
356
|
+
process.exit(1);
|
|
367
357
|
}
|
|
368
358
|
if (flags.wait && waitMindName) {
|
|
369
|
-
|
|
370
|
-
if (!conversationId) {
|
|
359
|
+
if (!waitConversationId) {
|
|
371
360
|
console.error("--wait requires a volute conversation (DM to a mind)");
|
|
372
361
|
process.exit(1);
|
|
373
362
|
}
|
|
374
|
-
await waitForResponse(waitMindName,
|
|
363
|
+
await waitForResponse(waitMindName, waitConversationId, flags.timeout ?? 12e4);
|
|
375
364
|
} else if (flags.wait && !waitMindName) {
|
|
376
365
|
console.error("--wait is only supported when sending to a mind");
|
|
377
366
|
process.exit(1);
|
|
@@ -2,14 +2,17 @@
|
|
|
2
2
|
import {
|
|
3
3
|
configPath,
|
|
4
4
|
isSetupComplete,
|
|
5
|
+
migrateSetupCompleted,
|
|
5
6
|
readGlobalConfig,
|
|
6
7
|
writeGlobalConfig
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-TSXLLQZW.js";
|
|
9
|
+
import "./chunk-LRCG2JLP.js";
|
|
10
|
+
import "./chunk-RPZZSXV3.js";
|
|
9
11
|
import "./chunk-K3NQKI34.js";
|
|
10
12
|
export {
|
|
11
13
|
configPath,
|
|
12
14
|
isSetupComplete,
|
|
15
|
+
migrateSetupCompleted,
|
|
13
16
|
readGlobalConfig,
|
|
14
17
|
writeGlobalConfig
|
|
15
18
|
};
|
|
@@ -5,22 +5,23 @@ import {
|
|
|
5
5
|
SYSTEM_LAUNCHD_PLIST_PATH,
|
|
6
6
|
SYSTEM_SERVICE_PATH,
|
|
7
7
|
USER_SYSTEMD_UNIT
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-LSGWR54X.js";
|
|
9
9
|
import {
|
|
10
10
|
promptLine
|
|
11
11
|
} from "./chunk-SSI47XP2.js";
|
|
12
12
|
import {
|
|
13
13
|
ensureVoluteGroup,
|
|
14
14
|
resolveVoluteBin
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-LGB6JBHI.js";
|
|
16
16
|
import {
|
|
17
17
|
readGlobalConfig,
|
|
18
18
|
writeGlobalConfig
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-TSXLLQZW.js";
|
|
20
20
|
import {
|
|
21
21
|
parseArgs
|
|
22
22
|
} from "./chunk-D424ZQGI.js";
|
|
23
|
-
import "./chunk-
|
|
23
|
+
import "./chunk-LRCG2JLP.js";
|
|
24
|
+
import "./chunk-RPZZSXV3.js";
|
|
24
25
|
import "./chunk-K3NQKI34.js";
|
|
25
26
|
|
|
26
27
|
// src/commands/setup.ts
|
|
@@ -371,7 +372,8 @@ Install as a service (auto-start on boot)? [${serviceDefault}]: `;
|
|
|
371
372
|
const config = {
|
|
372
373
|
...existingConfig,
|
|
373
374
|
name: systemName,
|
|
374
|
-
setup
|
|
375
|
+
setup,
|
|
376
|
+
setupCompleted: true
|
|
375
377
|
};
|
|
376
378
|
if (port != null) config.port = port;
|
|
377
379
|
if (host) config.hostname = host;
|
|
@@ -383,7 +385,7 @@ Install as a service (auto-start on boot)? [${serviceDefault}]: `;
|
|
|
383
385
|
if (aiProvider) {
|
|
384
386
|
const aiApiKey = (await promptLine("API key (leave empty to use env var): ")).trim();
|
|
385
387
|
if (aiApiKey) {
|
|
386
|
-
const { saveProviderConfig } = await import("./ai-service-
|
|
388
|
+
const { saveProviderConfig } = await import("./ai-service-ZIPCV3MX.js");
|
|
387
389
|
saveProviderConfig(aiProvider, { apiKey: aiApiKey });
|
|
388
390
|
console.log(` AI provider configured: ${aiProvider}`);
|
|
389
391
|
} else {
|
|
@@ -11,8 +11,9 @@ import {
|
|
|
11
11
|
} from "./chunk-D424ZQGI.js";
|
|
12
12
|
import {
|
|
13
13
|
daemonFetch
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import "./chunk-
|
|
14
|
+
} from "./chunk-UKVWJRKN.js";
|
|
15
|
+
import "./chunk-LRCG2JLP.js";
|
|
16
|
+
import "./chunk-RPZZSXV3.js";
|
|
16
17
|
import "./chunk-K3NQKI34.js";
|
|
17
18
|
|
|
18
19
|
// src/commands/skill.ts
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: Dreaming
|
|
3
3
|
description: Dream during sleep. Use when a dream schedule fires or when you want to dream. Generates altered-state dream experiences using the dreamer subagent.
|
|
4
|
+
metadata:
|
|
5
|
+
bin: scripts/dream.ts
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# Dreaming
|
|
@@ -12,7 +14,7 @@ Dreaming is not a task — it's an experience. When a dream schedule fires, you
|
|
|
12
14
|
Run the install script to configure dreaming (routes, subagent, wake hook):
|
|
13
15
|
|
|
14
16
|
```bash
|
|
15
|
-
|
|
17
|
+
dream install
|
|
16
18
|
```
|
|
17
19
|
|
|
18
20
|
Then add a dream schedule and optionally configure sleep integration — see the INSTALL.md reference for details.
|
|
@@ -62,7 +64,7 @@ Many minds develop their own dream conventions — a running motif, a naming pat
|
|
|
62
64
|
Review past dreams:
|
|
63
65
|
|
|
64
66
|
```bash
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
67
|
+
dream list
|
|
68
|
+
dream read 2025-01-15
|
|
69
|
+
dream themes
|
|
68
70
|
```
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
From your `home/` directory:
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
|
|
8
|
+
dream install
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
This sets up:
|
|
12
12
|
- `dreamer` subagent in `.config/config.json`
|
|
13
|
-
- Dream checker in `.
|
|
13
|
+
- Dream checker in `.local/hooks/wake-context.sh`
|
|
14
14
|
|
|
15
15
|
The `memory/dreams/` directory is created automatically on your first dream.
|
|
16
16
|
|
|
@@ -32,7 +32,7 @@ function install() {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
// 2. Append dream checker to wake-context hook (if not already present)
|
|
35
|
-
const hookPath = resolve(".
|
|
35
|
+
const hookPath = resolve(".local/hooks/wake-context.sh");
|
|
36
36
|
if (existsSync(hookPath)) {
|
|
37
37
|
try {
|
|
38
38
|
const hookContent = readFileSync(hookPath, "utf-8");
|
|
@@ -42,7 +42,7 @@ function install() {
|
|
|
42
42
|
"utf-8",
|
|
43
43
|
);
|
|
44
44
|
writeFileSync(hookPath, `${hookContent.trimEnd()}\n\n${dreamScript}`);
|
|
45
|
-
console.log("appended dream checker to .
|
|
45
|
+
console.log("appended dream checker to .local/hooks/wake-context.sh");
|
|
46
46
|
actions++;
|
|
47
47
|
}
|
|
48
48
|
} catch (err: any) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
# Dreaming wake-context extension — checks for dreams written during sleep.
|
|
3
|
-
# Append this to home/.
|
|
3
|
+
# Append this to home/.local/hooks/wake-context.sh for dream awareness on waking.
|
|
4
4
|
INPUT=$(cat)
|
|
5
5
|
# Parse sleepingSince from JSON without jq
|
|
6
6
|
SLEEP_SINCE=$(echo "$INPUT" | grep -o '"sleepingSince":"[^"]*"' | cut -d'"' -f4)
|
|
@@ -3,6 +3,7 @@ name: Image Generation
|
|
|
3
3
|
description: Generate images via the Replicate API. Use for "generate image", "create image", "image generation", "text to image", "search image models".
|
|
4
4
|
metadata:
|
|
5
5
|
npm-dependencies: replicate
|
|
6
|
+
bin: scripts/imagegen.ts
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
# Image Generation
|
|
@@ -12,7 +13,7 @@ Generate images from text prompts using models on Replicate. Images are saved to
|
|
|
12
13
|
## Commands
|
|
13
14
|
|
|
14
15
|
```bash
|
|
15
|
-
|
|
16
|
+
imagegen <command>
|
|
16
17
|
```
|
|
17
18
|
|
|
18
19
|
| Command | Description |
|
|
@@ -24,14 +25,14 @@ npx tsx .claude/skills/imagegen/scripts/imagegen.ts <command>
|
|
|
24
25
|
|
|
25
26
|
```bash
|
|
26
27
|
# Generate an image with the default model
|
|
27
|
-
|
|
28
|
+
imagegen generate "a sunset over the ocean"
|
|
28
29
|
|
|
29
30
|
# Use a specific model
|
|
30
|
-
|
|
31
|
+
imagegen generate "a cat in space" --model black-forest-labs/flux-schnell
|
|
31
32
|
|
|
32
33
|
# Specify a filename
|
|
33
|
-
|
|
34
|
+
imagegen generate "mountain landscape" --filename mountains
|
|
34
35
|
|
|
35
36
|
# Search for models
|
|
36
|
-
|
|
37
|
+
imagegen models "text to image"
|
|
37
38
|
```
|
|
@@ -3,6 +3,9 @@ name: Resonance
|
|
|
3
3
|
description: Semantic memory engine — ingest text, search via full-text and/or vector similarity, find cross-memory connections, with strength/decay dynamics. Use for "resonance", "semantic search", "full-text search", "memory connections", "ingest memories", "decay", "resonance report".
|
|
4
4
|
metadata:
|
|
5
5
|
npm-dependencies: libsql
|
|
6
|
+
bin: scripts/resonance.ts
|
|
7
|
+
hooks:
|
|
8
|
+
pre-prompt: scripts/resonance-hook.sh
|
|
6
9
|
---
|
|
7
10
|
|
|
8
11
|
# Resonance — Semantic Memory Engine
|
|
@@ -20,7 +23,7 @@ Not an archive — a memory. Stores text chunks with full-text indexing and opti
|
|
|
20
23
|
## Commands
|
|
21
24
|
|
|
22
25
|
```bash
|
|
23
|
-
|
|
26
|
+
resonance <command>
|
|
24
27
|
```
|
|
25
28
|
|
|
26
29
|
| Command | Description |
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Run the install command to set up the database, create a nightly schedule, and run initial ingestion:
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
|
-
|
|
6
|
+
resonance install
|
|
7
7
|
```
|
|
8
8
|
|
|
9
9
|
This works immediately — no API key required. Full-text search is available right away.
|
|
@@ -17,7 +17,7 @@ volute env set OPENROUTER_API_KEY <your-key>
|
|
|
17
17
|
Then re-run `ingest-all` to generate embeddings for existing memories:
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
|
|
20
|
+
resonance ingest-all
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
Without an API key, `search` uses full-text matching. With one, it uses hybrid (vector + FTS) by default.
|