volute 0.43.1 → 0.45.1
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/dist/{activity-events-UISXY4Y5.js → activity-events-OMCSM7XW.js} +3 -3
- package/dist/{ai-service-FBCCEYF5.js → ai-service-534WUSDL.js} +4 -4
- package/dist/{archive-I32WHCJB.js → archive-6R4TZMYI.js} +3 -3
- package/dist/{auth-3RIG6GKN.js → auth-FRZJVQCS.js} +4 -4
- package/dist/avatar-image-BNWEXSA2.js +16 -0
- package/dist/backup-OZXHL3JS.js +381 -0
- package/dist/{chat-SDSX5TVV.js → chat-I4EDDIQC.js} +2 -2
- package/dist/{chunk-AD46AYZQ.js → chunk-2BONPXAF.js} +1 -1
- package/dist/{chunk-ONM2AZFL.js → chunk-322KE457.js} +14 -2
- package/dist/{chunk-PGPLCJPK.js → chunk-3ERIL673.js} +1 -1
- package/dist/{chunk-QQ2MVQU3.js → chunk-5AUKCNPE.js} +10 -10
- package/dist/{chunk-XDTKJNW5.js → chunk-5GT7URXJ.js} +1 -1
- package/dist/{chunk-DMUPZQWP.js → chunk-77BVGCTZ.js} +8 -8
- package/dist/{chunk-EFL5UOY4.js → chunk-CYI534DJ.js} +3 -3
- package/dist/{chunk-57LBQ7JX.js → chunk-FHWUQZXE.js} +1 -1
- package/dist/{chunk-YAMO2U3N.js → chunk-H7IYFRAL.js} +1 -1
- package/dist/{chunk-M3PGGSBH.js → chunk-HVU45COX.js} +1 -1
- package/dist/{chunk-O3DXAR44.js → chunk-IEWZ7VD7.js} +2 -2
- package/dist/{chunk-DE4EKQFH.js → chunk-IUXTYXFI.js} +3 -3
- package/dist/{chunk-K4EHBHPE.js → chunk-JSRMEY52.js} +7 -5
- package/dist/{chunk-QHG4OMZL.js → chunk-KDLYIECM.js} +37 -32
- package/dist/{chunk-EE7SZJON.js → chunk-KP3KWNG6.js} +2 -2
- package/dist/chunk-KVKP6VQ5.js +318 -0
- package/dist/{chunk-JVK6QQIC.js → chunk-LAXUUY7O.js} +2 -2
- package/dist/{chunk-C6ESRQZ7.js → chunk-OXXTPILE.js} +1 -1
- package/dist/{chunk-ATEX3ZPG.js → chunk-Q2XBKQ2D.js} +2 -2
- package/dist/{chunk-GZJFC76M.js → chunk-QMJJWTNL.js} +1 -1
- package/dist/chunk-SQL7M4HJ.js +120 -0
- package/dist/{chunk-YSV3VJQK.js → chunk-TSK5PI4L.js} +1 -1
- package/dist/{chunk-4SVONUTC.js → chunk-U4FNXDEJ.js} +350 -207
- package/dist/{chunk-2HIVYZDB.js → chunk-UMI4UIJG.js} +1 -1
- package/dist/{chunk-Y6O35D7K.js → chunk-V4GYPD5L.js} +41 -16
- package/dist/{chunk-KINGVQSR.js → chunk-Y6OPHHGM.js} +5 -5
- package/dist/{chunk-SPLPKBES.js → chunk-ZIR7HSAX.js} +6 -9
- package/dist/{chunk-7G2EEYXX.js → chunk-ZMIMSIIT.js} +2 -2
- package/dist/{chunk-L3IV23ZG.js → chunk-ZV7MFISX.js} +2 -0
- package/dist/cli.js +53 -22
- package/dist/{cloud-sync-KOEBUFW5.js → cloud-sync-Y7LQPRE3.js} +16 -16
- package/dist/{conversations-67WWW25C.js → conversations-G4LYMHAA.js} +4 -4
- package/dist/{create-7W3LV3J7.js → create-2YY7IPMS.js} +1 -1
- package/dist/{daemon-restart-EZXB73W7.js → daemon-restart-ABP54YN6.js} +7 -7
- package/dist/daemon.js +679 -478
- package/dist/{db-CZV62BOQ.js → db-JFLCJCUG.js} +2 -2
- package/dist/{db-IJL6B26S.js → db-LZTLA7XC.js} +1 -1
- package/dist/delivery-manager-R5STGLXB.js +32 -0
- package/dist/{delivery-router-HXBHYHJM.js → delivery-router-6DE3BPHO.js} +3 -3
- package/dist/{down-RRNYIGCU.js → down-XCAZXWLB.js} +5 -5
- package/dist/echo-text-NQXYYYCU.js +32 -0
- package/dist/{exec-SJK7VUTC.js → exec-4GWHAHS3.js} +3 -3
- package/dist/{export-7LPCIB5J.js → export-ID7YUSLZ.js} +3 -3
- package/dist/{extensions-PQPZT6LS.js → extensions-AYSPKE33.js} +16 -16
- package/dist/{files-LV7VAKPC.js → files-BQ2WB5KC.js} +3 -3
- package/dist/{import-XPECCRQ7.js → import-SKID37QX.js} +6 -6
- package/dist/{isolation-5AYEY55P.js → isolation-5MB3J73F.js} +3 -3
- package/dist/{login-KJSN4JDA.js → login-LM4NF4ZB.js} +2 -2
- package/dist/{logout-TMJGUQV2.js → logout-CTJVIZGA.js} +2 -2
- package/dist/message-delivery-IUAXRPFE.js +34 -0
- package/dist/{mind-G3WEWDM4.js → mind-KLHC7XYR.js} +6 -6
- package/dist/{mind-activity-tracker-JHAT6456.js → mind-activity-tracker-BGHJE7XA.js} +4 -4
- package/dist/mind-service-BF2LUQMH.js +36 -0
- package/dist/{package-24TL6DTF.js → package-BMHV7UHN.js} +1 -1
- package/dist/{registry-7LQHTRUX.js → registry-NUJAGLQJ.js} +2 -2
- package/dist/{sandbox-SJH3XOPZ.js → sandbox-72MWV4JL.js} +4 -4
- package/dist/scheduler-YHJRRV6E.js +30 -0
- package/dist/{schema-LRUTFOER.js → schema-PVNG3PQM.js} +1 -1
- package/dist/{seed-HHSJTM6O.js → seed-4MKQ5QKG.js} +1 -1
- package/dist/{seed-cmd-UPQY35RG.js → seed-cmd-LCXMR7VV.js} +2 -2
- package/dist/{seed-create-MDRMXMSB.js → seed-create-N2BF5LQX.js} +3 -3
- package/dist/{seed-sprout-4M7IQWMH.js → seed-sprout-6ZDP23YI.js} +7 -7
- package/dist/{send-ZBZWIH5V.js → send-O6W53VBM.js} +37 -42
- package/dist/{service-4EVZKGSA.js → service-AQVPUANO.js} +4 -4
- package/dist/{service-install-SHRM6NHK.js → service-install-4QNUDKLM.js} +5 -5
- package/dist/{setup-ZD2LMBR3.js → setup-3O6O2JZ7.js} +7 -7
- package/dist/{setup-25MMJ3J4.js → setup-73YBJZQL.js} +3 -3
- package/dist/skills/memory/SKILL.md +2 -1
- package/dist/skills/orientation/SKILL.md +1 -1
- package/dist/skills/plan-coordinator/SKILL.md +2 -2
- package/dist/skills/volute-admin/SKILL.md +9 -6
- package/dist/skills/volute-mind/SKILL.md +15 -16
- package/dist/skills/volute-mind/references/extensions.md +5 -3
- package/dist/skills/volute-mind/references/integrations.md +2 -2
- package/dist/skills/volute-mind/references/routing.md +19 -23
- package/dist/skills/volute-mind/references/variants.md +10 -8
- package/dist/{skills-4KQ377GN.js → skills-ND4ZFYUW.js} +5 -5
- package/dist/sleep-manager-YAHDOIU5.js +34 -0
- package/dist/{spirit-53DQPRNR.js → spirit-II3HOERM.js} +7 -7
- package/dist/{sprout-YKM2M6D6.js → sprout-4KUG76AQ.js} +1 -1
- package/dist/{src-O4PRLMKM.js → src-JAOVXO5W.js} +1 -0
- package/dist/{src-3EGHHKZK.js → src-XFY3XDD6.js} +16 -11
- package/dist/{src-L2Z7X5UT.js → src-YH6PQ7LJ.js} +264 -52
- package/dist/{status-WTU2WHXY.js → status-E5DQNCAO.js} +5 -5
- package/dist/system-chat-E65T2HSW.js +34 -0
- package/dist/{tailscale-Q7ZJL7S7.js → tailscale-QAWVKQKU.js} +2 -2
- package/dist/{turn-tracker-JZYERJ76.js → turn-tracker-QQIVVXBI.js} +7 -5
- package/dist/{up-LFZA4GI5.js → up-LG56MPBI.js} +6 -6
- package/dist/{update-EJ7Q77ZX.js → update-7TYVH5FM.js} +5 -5
- package/dist/{update-check-ACYYNKTW.js → update-check-VSCSJ7KX.js} +3 -3
- package/dist/{upgrade-37DAGF6H.js → upgrade-NWAZ7MLD.js} +1 -1
- package/dist/{version-notify-SRQJCQEK.js → version-notify-CODJOUW2.js} +17 -17
- package/dist/web-assets/assets/index-B1JBQv2m.css +1 -0
- package/dist/web-assets/assets/index-Dac11sKB.js +86 -0
- package/dist/web-assets/ext-theme.css +5 -0
- package/dist/web-assets/index.html +2 -2
- package/package.json +1 -1
- package/packages/extensions/notes/dist/ui/assets/{index-BbgANhFm.js → index-D0-DgYyj.js} +1 -1
- package/packages/extensions/notes/dist/ui/index.html +1 -1
- package/packages/extensions/notes/skills/notes/SKILL.md +31 -3
- package/packages/extensions/pages/dist/ui/assets/{index-Dxk-DYrf.js → index-CQjEQg1r.js} +1 -1
- package/packages/extensions/pages/dist/ui/index.html +1 -1
- package/packages/extensions/plan/skills/plan/SKILL.md +1 -1
- package/templates/_base/.init/.config/prompts.json +1 -1
- package/templates/_base/.init/.local/hooks/startup-context.ts +21 -4
- package/templates/_base/.init/MEMORY.md +2 -1
- package/templates/_base/home/VOLUTE.md +6 -9
- package/templates/_base/src/lib/startup.ts +1 -1
- package/templates/claude/.init/CLAUDE.md +1 -1
- package/templates/claude/src/agent.ts +30 -3
- package/templates/claude/src/lib/stream-consumer.ts +7 -4
- package/templates/codex/.init/AGENTS.md +4 -2
- package/templates/codex/src/agent.ts +13 -7
- package/templates/pi/.init/MINDS.md +4 -2
- package/templates/pi/src/lib/event-handler.ts +6 -2
- package/dist/delivery-manager-OMCCJEVP.js +0 -32
- package/dist/echo-text-KFSUCZXL.js +0 -32
- package/dist/message-delivery-HRGFNWO7.js +0 -34
- package/dist/mind-service-2C7AINBO.js +0 -36
- package/dist/scheduler-VON2TB52.js +0 -30
- package/dist/sleep-manager-AG5SQDDI.js +0 -34
- package/dist/system-chat-54RN3K67.js +0 -34
- package/dist/web-assets/assets/index-D7udpBCx.css +0 -1
- package/dist/web-assets/assets/index-DTDmEfPU.js +0 -79
- package/templates/_base/.init/.config/hooks/pre-prompt/session-activity.ts +0 -40
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
readVoluteConfig
|
|
4
|
+
} from "./chunk-CU6OFXMM.js";
|
|
5
|
+
import {
|
|
6
|
+
logger_default
|
|
7
|
+
} from "./chunk-T2TP6ZC6.js";
|
|
8
|
+
import {
|
|
9
|
+
mindDir,
|
|
10
|
+
readAllMinds,
|
|
11
|
+
voluteHome
|
|
12
|
+
} from "./chunk-H7IYFRAL.js";
|
|
13
|
+
|
|
14
|
+
// packages/daemon/src/lib/util/avatar-image.ts
|
|
15
|
+
import { readdir, readFile, writeFile } from "fs/promises";
|
|
16
|
+
import { resolve as resolve2 } from "path";
|
|
17
|
+
|
|
18
|
+
// packages/daemon/src/lib/util/paths.ts
|
|
19
|
+
import { resolve, sep } from "path";
|
|
20
|
+
var PathTraversalError = class extends Error {
|
|
21
|
+
constructor(base, userPath) {
|
|
22
|
+
super(`Path "${userPath}" escapes base directory "${base}"`);
|
|
23
|
+
this.name = "PathTraversalError";
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
function resolveWithinBase(base, userPath) {
|
|
27
|
+
const resolvedBase = resolve(base);
|
|
28
|
+
const target = resolve(resolvedBase, userPath);
|
|
29
|
+
if (target !== resolvedBase && !target.startsWith(resolvedBase + sep)) {
|
|
30
|
+
throw new PathTraversalError(base, userPath);
|
|
31
|
+
}
|
|
32
|
+
return target;
|
|
33
|
+
}
|
|
34
|
+
function safeResolveWithinBase(base, userPath) {
|
|
35
|
+
try {
|
|
36
|
+
return resolveWithinBase(base, userPath);
|
|
37
|
+
} catch {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// packages/daemon/src/lib/util/avatar-image.ts
|
|
43
|
+
var alog = logger_default.child("avatar-image");
|
|
44
|
+
var AVATAR_DIM = 256;
|
|
45
|
+
async function loadSharp() {
|
|
46
|
+
try {
|
|
47
|
+
const mod = await import("sharp");
|
|
48
|
+
return mod.default ?? mod;
|
|
49
|
+
} catch (err) {
|
|
50
|
+
const code = err.code;
|
|
51
|
+
if (code === "MODULE_NOT_FOUND" || code === "ERR_MODULE_NOT_FOUND") {
|
|
52
|
+
alog.debug("sharp not available, keeping original avatars");
|
|
53
|
+
} else {
|
|
54
|
+
alog.warn("sharp import failed, keeping original avatars", logger_default.errorData(err));
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async function normalizeAvatar(buffer) {
|
|
60
|
+
const sharp = await loadSharp();
|
|
61
|
+
if (!sharp) return null;
|
|
62
|
+
try {
|
|
63
|
+
const out = await sharp(buffer, { animated: true }).resize(AVATAR_DIM, AVATAR_DIM, { fit: "cover", withoutEnlargement: true }).webp({ quality: 85 }).toBuffer();
|
|
64
|
+
return { buffer: out, ext: ".webp", mime: "image/webp" };
|
|
65
|
+
} catch (err) {
|
|
66
|
+
alog.warn("avatar normalize failed, keeping original", logger_default.errorData(err));
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async function downscaleFile(sharp, filePath) {
|
|
71
|
+
const data = await readFile(filePath);
|
|
72
|
+
const image = sharp(data, { animated: true });
|
|
73
|
+
const meta = await image.metadata();
|
|
74
|
+
if (!meta.format || (meta.width ?? 0) <= AVATAR_DIM && (meta.height ?? 0) <= AVATAR_DIM) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
const out = await image.resize(AVATAR_DIM, AVATAR_DIM, { fit: "cover" }).toFormat(meta.format).toBuffer();
|
|
78
|
+
await writeFile(filePath, out);
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
async function migrateAvatarSizes() {
|
|
82
|
+
const sharp = await loadSharp();
|
|
83
|
+
if (!sharp) return;
|
|
84
|
+
const userAvatarsDir = resolve2(voluteHome(), "avatars");
|
|
85
|
+
let userAvatars = [];
|
|
86
|
+
try {
|
|
87
|
+
userAvatars = (await readdir(userAvatarsDir)).map((f) => resolve2(userAvatarsDir, f));
|
|
88
|
+
} catch {
|
|
89
|
+
}
|
|
90
|
+
const mindAvatars = [];
|
|
91
|
+
try {
|
|
92
|
+
for (const mind of await readAllMinds()) {
|
|
93
|
+
const dir = mind.dir ?? mindDir(mind.name);
|
|
94
|
+
const avatar = readVoluteConfig(dir)?.profile?.avatar;
|
|
95
|
+
if (!avatar) continue;
|
|
96
|
+
const path = safeResolveWithinBase(resolve2(dir, "home"), avatar);
|
|
97
|
+
if (path) mindAvatars.push(path);
|
|
98
|
+
}
|
|
99
|
+
} catch (err) {
|
|
100
|
+
alog.warn("failed to enumerate mind avatars for migration", logger_default.errorData(err));
|
|
101
|
+
}
|
|
102
|
+
for (const filePath of [...userAvatars, ...mindAvatars]) {
|
|
103
|
+
try {
|
|
104
|
+
if (await downscaleFile(sharp, filePath)) {
|
|
105
|
+
alog.info(`downscaled oversized avatar ${filePath}`);
|
|
106
|
+
}
|
|
107
|
+
} catch (err) {
|
|
108
|
+
if (err.code !== "ENOENT") {
|
|
109
|
+
alog.warn(`failed to downscale avatar ${filePath}`, logger_default.errorData(err));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export {
|
|
116
|
+
safeResolveWithinBase,
|
|
117
|
+
AVATAR_DIM,
|
|
118
|
+
normalizeAvatar,
|
|
119
|
+
migrateAvatarSizes
|
|
120
|
+
};
|