volute 0.28.0 → 0.30.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 +127 -18
- package/dist/{accept-666DIZX2.js → accept-E3PAH3QJ.js} +2 -2
- package/dist/{activity-events-BBIEA2F4.js → activity-events-BKBPPUBP.js} +2 -2
- package/dist/ai-service-VAJT5UBS.js +29 -0
- package/dist/api.d.ts +586 -529
- package/dist/{archive-UA4BDFXQ.js → archive-WWDBWYN2.js} +2 -2
- package/dist/{bridge-FQHZL3MC.js → bridge-RO37CUFM.js} +2 -2
- package/dist/{chat-M4SX42JD.js → chat-TCUNPFGO.js} +8 -8
- package/dist/{chunk-IAYBDWVG.js → chunk-2C2VXEBB.js} +147 -2
- package/dist/chunk-2NDZC3S7.js +1330 -0
- package/dist/{chunk-IKRVFPWU.js → chunk-7D47T4RB.js} +3 -2
- package/dist/chunk-A6TUJJ3L.js +19 -0
- package/dist/{chunk-AW7PFDVN.js → chunk-CVH6Y2YG.js} +1 -1
- package/dist/{chunk-XBLSAVJF.js → chunk-DTC6EH5I.js} +1 -1
- package/dist/chunk-EFP3PE6C.js +232 -0
- package/dist/{chunk-JGFVMROS.js → chunk-EFVHR7KH.js} +1 -1
- package/dist/{chunk-K5NAC55T.js → chunk-FSM45XD5.js} +2 -2
- package/dist/{chunk-LAC664WU.js → chunk-FXHXHI2A.js} +42 -24
- package/dist/{chunk-RKQEHRBB.js → chunk-G3GBKZGG.js} +1 -1
- package/dist/{chunk-H7OZRFJB.js → chunk-HHTXM4JT.js} +0 -49
- package/dist/{chunk-J4IBNXGJ.js → chunk-IKHDUZRH.js} +4 -3
- package/dist/{chunk-MD4C26II.js → chunk-JGFRDMR6.js} +1 -1
- package/dist/{chunk-POSXWWTA.js → chunk-LIRWLNAK.js} +26 -12
- package/dist/{chunk-NI5FFCCS.js → chunk-MDPCSXZ4.js} +35 -11
- package/dist/chunk-NSBFETWP.js +188 -0
- package/dist/{chunk-VIVMW2H2.js → chunk-P27RV5WM.js} +1 -1
- package/dist/{chunk-EHYDTZTF.js → chunk-P7VFDSSG.js} +2 -2
- package/dist/{chunk-AAPXKR5V.js → chunk-QVAQ5454.js} +181 -544
- package/dist/{chunk-HDN7MNGD.js → chunk-S5LR3XYJ.js} +1 -1
- package/dist/{chunk-2YP2TVDT.js → chunk-UPA6COHU.js} +5 -5
- package/dist/{chunk-AKPFNL7L.js → chunk-VGWJSNHS.js} +1 -1
- package/dist/{chunk-SGVNFZHW.js → chunk-W5OOPLNP.js} +3 -3
- package/dist/{chunk-2WPW7OT6.js → chunk-ZWKTUQEL.js} +1 -1
- package/dist/cli.js +25 -26
- package/dist/clock-G3ALCMLJ.js +263 -0
- package/dist/{cloud-sync-HDL6PHZI.js → cloud-sync-JV4LJOK3.js} +14 -12
- 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-M2K4253F.js → conversations-7KVQV7EZ.js} +9 -3
- package/dist/create-JTLS7GX3.js +70 -0
- package/dist/{create-QWV73WXD.js → create-VQSQHJQW.js} +1 -1
- package/dist/{daemon-client-I42FK2BF.js → daemon-client-BCTFGVCZ.js} +2 -2
- package/dist/{daemon-restart-G4B2OYAB.js → daemon-restart-4JGBHEJ4.js} +7 -7
- package/dist/daemon.js +1474 -1124
- package/dist/{db-IC4J52XQ.js → db-HMFPIRO2.js} +1 -1
- package/dist/{delete-4JYGD4VN.js → delete-JESHKE7F.js} +1 -1
- package/dist/down-NGBMGORS.js +14 -0
- package/dist/{env-YJMUMFIY.js → env-CLXXT7M2.js} +2 -2
- package/dist/{export-BOJQWBMA.js → export-EGA5M5PB.js} +3 -3
- package/dist/extension-WZ4SUPJB.js +174 -0
- package/dist/extensions-ECO4RPFQ.js +27 -0
- package/dist/{files-M546TKVN.js → files-4VEJDASH.js} +3 -3
- package/dist/{history-ALPTNB3I.js → history-EJMMLXDO.js} +17 -2
- package/dist/{import-SRTQXBGH.js → import-YCGPMBSI.js} +3 -3
- package/dist/{join-J4QU42DL.js → join-2GBJKZEN.js} +1 -1
- package/dist/{list-R73GENNL.js → list-Q6O7FGAN.js} +2 -2
- package/dist/{login-3QZNR2DF.js → login-RET5WESK.js} +2 -2
- package/dist/{login-BKP3AFWN.js → login-RL6AU2SM.js} +3 -3
- package/dist/{logout-T53VKCPU.js → logout-CGAGJN3L.js} +2 -2
- package/dist/{logout-IQK7FNEK.js → logout-JRPBEMMR.js} +3 -3
- package/dist/message-delivery-6YMVNOEC.js +28 -0
- package/dist/{migrate-registry-to-db-XC7T5B7P.js → migrate-registry-to-db-FK35IPEH.js} +1 -1
- package/dist/{mind-S5V6CK5W.js → mind-LUWRQUQ5.js} +17 -17
- package/dist/{mind-activity-tracker-EN6XNXPF.js → mind-activity-tracker-VYN2ZZ2M.js} +3 -3
- package/dist/{mind-list-UPJ75GPI.js → mind-list-V5WW5DUA.js} +2 -2
- package/dist/{mind-manager-S6ILZVX3.js → mind-manager-YFCOIAAX.js} +6 -6
- package/dist/{mind-sleep-BTSWQNAC.js → mind-sleep-R6PTNNW4.js} +2 -2
- package/dist/{mind-status-TK5AETEM.js → mind-status-I4ISFJ6I.js} +2 -2
- package/dist/{mind-wake-SBAKIDVP.js → mind-wake-67ZQEWAV.js} +2 -2
- package/dist/{package-CG4RWUGP.js → package-S2OAA5ZA.js} +11 -5
- package/dist/pages-watcher-Z3PKNROC.js +21 -0
- package/dist/{read-36UFXN3G.js → read-WQMPTSN2.js} +2 -2
- package/dist/{register-CHREOMJ3.js → register-NZDSTLP3.js} +3 -3
- package/dist/{registry-NDNOOYG4.js → registry-ODSALQQL.js} +1 -1
- package/dist/{reject-LXIZFJ4Q.js → reject-2HZOJEIJ.js} +2 -2
- package/dist/{restart-6ESL3NBO.js → restart-QHS3NT64.js} +2 -2
- package/dist/{sandbox-5BW5HPXM.js → sandbox-O5FUSF43.js} +3 -3
- package/dist/{seed-SSUCYYDF.js → seed-WUQMPLDM.js} +1 -1
- package/dist/{send-TAOEZ4NH.js → send-OAN3RYYY.js} +20 -6
- package/dist/{setup-JHL5ZEST.js → setup-QMDK5RZX.js} +2 -2
- package/dist/{setup-RXYVGGT7.js → setup-XJH3E7YM.js} +45 -14
- package/dist/{skill-AUAQTSP5.js → skill-FZIN4W4Q.js} +65 -3
- package/dist/skills/dreaming/references/INSTALL.md +3 -17
- package/dist/skills/volute-mind/SKILL.md +45 -27
- package/dist/sleep-manager-O7YQFCV5.js +30 -0
- package/dist/{split-TKJ5OT3P.js → split-EXYGGGQN.js} +1 -1
- package/dist/{sprout-UNT7LKKE.js → sprout-AXQ6H5DB.js} +8 -7
- package/dist/{start-EUJSS5R4.js → start-MTOVL6SY.js} +2 -2
- package/dist/{status-NQJYR4BG.js → status-ZRO37MWR.js} +5 -5
- package/dist/{stop-3XAITBBF.js → stop-OK5WEPVC.js} +2 -2
- package/dist/{systems-SMEFSHTA.js → systems-W3BBMSOZ.js} +5 -5
- package/dist/{tailscale-NY5MUMY3.js → tailscale-BM72RXCJ.js} +1 -1
- package/dist/{template-hash-BIMA4ILT.js → template-hash-3HOR4UAJ.js} +1 -1
- package/dist/up-BXUAIDXB.js +17 -0
- package/dist/{update-PTSH22AZ.js → update-PLPHMMZ2.js} +5 -5
- package/dist/{update-check-64FWC4Y2.js → update-check-CVCN7MF6.js} +2 -2
- package/dist/{upgrade-HA47CS4C.js → upgrade-I6NPCYUU.js} +1 -1
- package/dist/{version-notify-JDUF4HQJ.js → version-notify-2NTWVEHL.js} +18 -16
- package/dist/web-assets/assets/index--kREqKl9.js +72 -0
- package/dist/web-assets/assets/index-BXYTG0nJ.css +1 -0
- package/dist/web-assets/ext-theme.css +111 -0
- package/dist/web-assets/index.html +2 -2
- package/package.json +11 -5
- package/packages/extensions/notes/dist/ui/assets/index-DgawVO5g.css +1 -0
- package/packages/extensions/notes/dist/ui/assets/index-qUWoeC4c.js +2 -0
- package/packages/extensions/notes/dist/ui/index.html +14 -0
- package/packages/extensions/notes/skills/notes/SKILL.md +62 -0
- package/packages/extensions/notes/skills/notes/scripts/notes.mjs +185 -0
- package/packages/extensions/pages/dist/ui/assets/index-D0HyS-xQ.css +1 -0
- package/packages/extensions/pages/dist/ui/assets/index-tLTROSk5.js +2 -0
- package/packages/extensions/pages/dist/ui/index.html +14 -0
- package/packages/extensions/pages/skills/pages/SKILL.md +58 -0
- package/templates/_base/home/VOLUTE.md +1 -1
- package/templates/_base/src/lib/logger.ts +10 -49
- package/templates/_base/src/lib/router.ts +1 -9
- package/templates/claude/src/lib/stream-consumer.ts +1 -4
- package/templates/pi/src/lib/event-handler.ts +1 -14
- package/dist/chunk-P72MVS4R.js +0 -188
- package/dist/chunk-T6HKBWXZ.js +0 -23
- package/dist/chunk-ZYGKG6VC.js +0 -22
- package/dist/create-D7J73A6H.js +0 -45
- package/dist/down-LVBXEULC.js +0 -14
- package/dist/message-delivery-HV3S6HZV.js +0 -24
- package/dist/notes-XCER3I7M.js +0 -220
- package/dist/pages-KJDJX4TA.js +0 -36
- package/dist/publish-ZZB33WP4.js +0 -86
- package/dist/schedule-QTJMFATP.js +0 -154
- package/dist/skills/notes/SKILL.md +0 -34
- package/dist/sleep-manager-WMVG2VCL.js +0 -28
- package/dist/status-S7UUPNRW.js +0 -38
- package/dist/up-GM2JOH2Y.js +0 -17
- package/dist/web-assets/assets/index-BZGvToHi.css +0 -1
- package/dist/web-assets/assets/index-Cz4TrpzB.js +0 -75
package/README.md
CHANGED
|
@@ -152,22 +152,32 @@ volute channel read discord:123456789 --mind atlas # recent messages
|
|
|
152
152
|
volute send discord:123456789 "hello" --mind atlas # send a message
|
|
153
153
|
```
|
|
154
154
|
|
|
155
|
-
##
|
|
155
|
+
## Clock
|
|
156
156
|
|
|
157
|
-
|
|
157
|
+
Schedules, timers, and sleep/wake cycles — a mind's daily rhythm.
|
|
158
158
|
|
|
159
159
|
```sh
|
|
160
|
-
|
|
160
|
+
# Recurring schedule
|
|
161
|
+
volute clock add --mind atlas \
|
|
161
162
|
--cron "0 9 * * *" \
|
|
162
163
|
--message "good morning — write your daily log"
|
|
163
164
|
|
|
164
|
-
|
|
165
|
-
volute
|
|
165
|
+
# One-time timer
|
|
166
|
+
volute clock add --mind atlas --in 30m --message "check on that task"
|
|
167
|
+
|
|
168
|
+
# Sleep/wake
|
|
169
|
+
volute clock sleep atlas --wake-at "2025-01-15T07:00:00Z"
|
|
170
|
+
volute clock wake atlas
|
|
171
|
+
|
|
172
|
+
# Status and management
|
|
173
|
+
volute clock status --mind atlas
|
|
174
|
+
volute clock list --mind atlas
|
|
175
|
+
volute clock remove --mind atlas --id <schedule-id>
|
|
166
176
|
```
|
|
167
177
|
|
|
168
178
|
## Pages
|
|
169
179
|
|
|
170
|
-
|
|
180
|
+
Pages is a built-in extension that lets minds publish web content. HTML files in `home/public/pages/` are served locally and can be published to [volute.systems](https://volute.systems).
|
|
171
181
|
|
|
172
182
|
### Setup
|
|
173
183
|
|
|
@@ -179,20 +189,16 @@ volute systems register --name my-system
|
|
|
179
189
|
volute systems login --key vp_...
|
|
180
190
|
```
|
|
181
191
|
|
|
182
|
-
###
|
|
183
|
-
|
|
184
|
-
```sh
|
|
185
|
-
volute pages publish --mind atlas
|
|
186
|
-
# Published 3 file(s) to https://my-system.volute.systems/~atlas/
|
|
187
|
-
```
|
|
192
|
+
### How it works
|
|
188
193
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
194
|
+
- Place HTML files in a mind's `home/public/pages/` directory
|
|
195
|
+
- Pages are served locally at `/ext/pages/public/<mindname>/`
|
|
196
|
+
- The pages extension provides publish/status API endpoints at `/api/ext/pages/`
|
|
197
|
+
- Minds learn how to publish via the bundled pages skill (auto-installed)
|
|
198
|
+
- File changes are tracked by a watcher and shown in the web dashboard
|
|
192
199
|
|
|
193
200
|
```sh
|
|
194
|
-
volute
|
|
195
|
-
volute systems logout # remove stored credentials
|
|
201
|
+
volute systems logout # remove stored credentials
|
|
196
202
|
```
|
|
197
203
|
|
|
198
204
|
## Environment variables
|
|
@@ -210,13 +216,102 @@ volute env remove API_KEY
|
|
|
210
216
|
|
|
211
217
|
The daemon serves a web UI at `http://localhost:1618` (or whatever port you chose).
|
|
212
218
|
|
|
213
|
-
- Real-time chat with full tool call visibility
|
|
219
|
+
- Real-time chat with full tool call visibility and turn summaries
|
|
214
220
|
- File browser and editor
|
|
215
221
|
- Log streaming
|
|
216
222
|
- Connector and schedule management
|
|
217
223
|
- Variant listing and status
|
|
224
|
+
- System settings: AI service config, system prompts, shared files, skills, user management
|
|
218
225
|
- First user to register becomes admin
|
|
219
226
|
|
|
227
|
+
## Extensions
|
|
228
|
+
|
|
229
|
+
Extensions add UI sections, API routes, feed sources, and lifecycle hooks to Volute. Notes and Pages are built-in extensions; you can add your own.
|
|
230
|
+
|
|
231
|
+
### Managing extensions
|
|
232
|
+
|
|
233
|
+
```sh
|
|
234
|
+
volute extension list # list loaded extensions
|
|
235
|
+
volute extension install <npm-package> # install from npm
|
|
236
|
+
volute extension uninstall <npm-package> # remove
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
After installing or uninstalling, restart the daemon (`volute restart`) to load changes.
|
|
240
|
+
|
|
241
|
+
### Local extensions
|
|
242
|
+
|
|
243
|
+
For extensions that don't need an npm package, place the code in `~/.volute/extensions/<name>/`:
|
|
244
|
+
|
|
245
|
+
```
|
|
246
|
+
~/.volute/extensions/my-extension/
|
|
247
|
+
├── src/
|
|
248
|
+
│ └── index.ts # exports an ExtensionManifest (default export)
|
|
249
|
+
└── package.json # optional, for dependencies
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Local extensions are auto-discovered on daemon start. The entry point can be `src/index.ts`, `src/index.js`, `index.ts`, or `index.js`.
|
|
253
|
+
|
|
254
|
+
### Writing an extension
|
|
255
|
+
|
|
256
|
+
Install the SDK:
|
|
257
|
+
|
|
258
|
+
```sh
|
|
259
|
+
npm install @volute/extensions hono
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
Create the manifest:
|
|
263
|
+
|
|
264
|
+
```typescript
|
|
265
|
+
import { createExtension } from "@volute/extensions";
|
|
266
|
+
import { Hono } from "hono";
|
|
267
|
+
|
|
268
|
+
export default createExtension({
|
|
269
|
+
id: "my-ext",
|
|
270
|
+
name: "My Extension",
|
|
271
|
+
version: "0.1.0",
|
|
272
|
+
description: "Does something useful",
|
|
273
|
+
|
|
274
|
+
// Required: authenticated API routes at /api/ext/my-ext/
|
|
275
|
+
routes: (ctx) =>
|
|
276
|
+
new Hono()
|
|
277
|
+
.get("/", (c) => c.json({ hello: "world" }))
|
|
278
|
+
.get("/feed", (c) =>
|
|
279
|
+
c.json([
|
|
280
|
+
{
|
|
281
|
+
id: "item-1",
|
|
282
|
+
title: "Example",
|
|
283
|
+
url: "/ext/my-ext/#/item-1",
|
|
284
|
+
date: new Date().toISOString(),
|
|
285
|
+
bodyHtml: "<p>An item</p>",
|
|
286
|
+
},
|
|
287
|
+
]),
|
|
288
|
+
),
|
|
289
|
+
|
|
290
|
+
// Optional: initialize a SQLite database for this extension
|
|
291
|
+
initDb: (db) => {
|
|
292
|
+
db.exec(`CREATE TABLE IF NOT EXISTS items (
|
|
293
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
294
|
+
name TEXT NOT NULL
|
|
295
|
+
)`);
|
|
296
|
+
},
|
|
297
|
+
|
|
298
|
+
// Optional: UI configuration
|
|
299
|
+
ui: {
|
|
300
|
+
systemSections: [{ id: "items", label: "Items" }],
|
|
301
|
+
mindSections: [{ id: "items", label: "Items" }],
|
|
302
|
+
feedSource: { endpoint: "/api/ext/my-ext/feed" },
|
|
303
|
+
},
|
|
304
|
+
});
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
The extension context (`ctx`) provides:
|
|
308
|
+
- `ctx.db` — SQLite database (if `initDb` is declared)
|
|
309
|
+
- `ctx.resolveUser(c)` — get the authenticated user from a Hono context
|
|
310
|
+
- `ctx.getUser(id)` / `ctx.getUserByUsername(name)` — look up users
|
|
311
|
+
- `ctx.publishActivity(event)` — emit activity events
|
|
312
|
+
- `ctx.getMindDir(name)` — resolve a mind's directory path
|
|
313
|
+
- `ctx.dataDir` — extension-specific data directory
|
|
314
|
+
|
|
220
315
|
## Upgrading minds
|
|
221
316
|
|
|
222
317
|
When the Volute template updates, you can upgrade minds without touching their identity:
|
|
@@ -244,6 +339,20 @@ Two built-in templates:
|
|
|
244
339
|
volute mind create atlas --template pi
|
|
245
340
|
```
|
|
246
341
|
|
|
342
|
+
## AI Service
|
|
343
|
+
|
|
344
|
+
Volute has an optional system-level AI service for features like automatic turn summaries. It uses [`@mariozechner/pi-ai`](https://github.com/nicepkg/pi) for multi-provider support — configure any combination of Anthropic, OpenAI, Google, GitHub Copilot, and others.
|
|
345
|
+
|
|
346
|
+
Configure via the web dashboard (Settings → AI Service) or during `volute setup`. Each provider authenticates independently via API key, OAuth, or environment variables. After adding providers, select which models to enable — the system picks from your enabled list.
|
|
347
|
+
|
|
348
|
+
When configured, each mind turn automatically gets a 1-2 sentence AI-generated summary (visible in history and the web UI). Without AI configured, summaries fall back to a deterministic format.
|
|
349
|
+
|
|
350
|
+
## System Prompts
|
|
351
|
+
|
|
352
|
+
Volute ships with default prompts for mind creation, system messages, and mind-owned templates. These can be customized via the web dashboard (Settings → Prompts) without modifying code.
|
|
353
|
+
|
|
354
|
+
Customized prompts are stored in the database and override the built-in defaults. Each prompt shows its template variables and can be reset to the default at any time.
|
|
355
|
+
|
|
247
356
|
## Model configuration
|
|
248
357
|
|
|
249
358
|
Set the model via `home/.config/volute.json` in the mind directory, or the `VOLUTE_MODEL` env var.
|
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
} from "./chunk-NAOW2CLO.js";
|
|
5
5
|
import {
|
|
6
6
|
daemonFetch
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-EFVHR7KH.js";
|
|
8
8
|
import {
|
|
9
9
|
parseArgs
|
|
10
10
|
} from "./chunk-D424ZQGI.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-HHTXM4JT.js";
|
|
12
12
|
import "./chunk-K3NQKI34.js";
|
|
13
13
|
|
|
14
14
|
// src/commands/chat/accept.ts
|
|
@@ -3,9 +3,9 @@ import {
|
|
|
3
3
|
broadcast,
|
|
4
4
|
publish,
|
|
5
5
|
subscribe
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-P27RV5WM.js";
|
|
7
7
|
import "./chunk-YUIHSKR6.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-HHTXM4JT.js";
|
|
9
9
|
import "./chunk-K3NQKI34.js";
|
|
10
10
|
export {
|
|
11
11
|
broadcast,
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
aiComplete,
|
|
4
|
+
getAiConfig,
|
|
5
|
+
getAvailableModels,
|
|
6
|
+
getConfiguredProviders,
|
|
7
|
+
getEnabledModels,
|
|
8
|
+
isAiConfigured,
|
|
9
|
+
removeAiConfig,
|
|
10
|
+
removeProviderConfig,
|
|
11
|
+
saveProviderConfig,
|
|
12
|
+
setEnabledModels
|
|
13
|
+
} from "./chunk-NSBFETWP.js";
|
|
14
|
+
import "./chunk-YUIHSKR6.js";
|
|
15
|
+
import "./chunk-7D47T4RB.js";
|
|
16
|
+
import "./chunk-HHTXM4JT.js";
|
|
17
|
+
import "./chunk-K3NQKI34.js";
|
|
18
|
+
export {
|
|
19
|
+
aiComplete,
|
|
20
|
+
getAiConfig,
|
|
21
|
+
getAvailableModels,
|
|
22
|
+
getConfiguredProviders,
|
|
23
|
+
getEnabledModels,
|
|
24
|
+
isAiConfigured,
|
|
25
|
+
removeAiConfig,
|
|
26
|
+
removeProviderConfig,
|
|
27
|
+
saveProviderConfig,
|
|
28
|
+
setEnabledModels
|
|
29
|
+
};
|