volute 0.40.1 → 0.40.2

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.
Files changed (49) hide show
  1. package/README.md +2 -2
  2. package/dist/{ai-service-AUWIPWLP.js → ai-service-EVLKMAJD.js} +1 -1
  3. package/dist/{chunk-ANSTTB55.js → chunk-42UMLIQR.js} +19 -20
  4. package/dist/{chunk-YTNBO7S6.js → chunk-NRJ3ZYFP.js} +4 -4
  5. package/dist/{chunk-QV7P3TYO.js → chunk-UX7FPDDO.js} +1 -1
  6. package/dist/{chunk-LZ6CQYRO.js → chunk-WOWRLBL2.js} +4 -2
  7. package/dist/chunk-YMMYN2V3.js +1212 -0
  8. package/dist/{chunk-BLAXARBZ.js → chunk-ZOI6D2YH.js} +174 -1293
  9. package/dist/{chunk-S4SXBQ7F.js → chunk-ZXPWTH4I.js} +42 -34
  10. package/dist/cli.js +7 -7
  11. package/dist/{cloud-sync-MAQCJEFJ.js → cloud-sync-GOSJZIHH.js} +6 -5
  12. package/dist/{create-T4UJ64WB.js → create-Y3RGU2GI.js} +2 -2
  13. package/dist/{daemon-restart-LP2DR24J.js → daemon-restart-FSWVXPUE.js} +1 -1
  14. package/dist/daemon.js +73 -62
  15. package/dist/{delivery-manager-VNHLQTTO.js → delivery-manager-3NTCDKHR.js} +10 -7
  16. package/dist/{echo-text-QFCH3H6G.js → echo-text-JUNRP4ER.js} +7 -6
  17. package/dist/{extensions-LQX2N7TI.js → extensions-MD757RFY.js} +6 -5
  18. package/dist/{message-delivery-7BCYJLH2.js → message-delivery-Q7TU24IA.js} +6 -5
  19. package/dist/{mind-ELPD6VBP.js → mind-OOB2LEVC.js} +3 -3
  20. package/dist/{mind-activity-tracker-XFRVGXFS.js → mind-activity-tracker-GJ5RJS32.js} +1 -1
  21. package/dist/{mind-manager-EDCLALBF.js → mind-manager-4NFK4GEU.js} +6 -5
  22. package/dist/{mind-service-WTOFVNLW.js → mind-service-X7FH3NA4.js} +6 -5
  23. package/dist/{package-GO3PHHUF.js → package-PPA3VWS2.js} +4 -4
  24. package/dist/{scheduler-GQBDCGLU.js → scheduler-PDARH4CE.js} +6 -5
  25. package/dist/{seed-MO2C7CWC.js → seed-BTAHXCO5.js} +1 -1
  26. package/dist/{seed-cmd-ETIF4WD6.js → seed-cmd-VEJNJBAQ.js} +2 -2
  27. package/dist/{seed-create-BPQC2IOR.js → seed-create-LOU5RALI.js} +4 -4
  28. package/dist/{seed-sprout-TX72K33T.js → seed-sprout-BXF5TBXD.js} +2 -2
  29. package/dist/{setup-ZTW4FVMQ.js → setup-W3545462.js} +1 -1
  30. package/dist/{skills-JEWMHIIE.js → skills-3P7VQA4U.js} +1 -1
  31. package/dist/{sleep-manager-5277OBHI.js → sleep-manager-TTNOLIX5.js} +6 -5
  32. package/dist/{spirit-NVXWSVKM.js → spirit-T6GK5GEP.js} +3 -3
  33. package/dist/{sprout-NFJZKYEW.js → sprout-AQICF7WZ.js} +1 -1
  34. package/dist/{system-chat-LQSJVY55.js → system-chat-7CA2PP6A.js} +6 -5
  35. package/dist/turn-tracker-AI6WWEBA.js +35 -0
  36. package/dist/{up-4H7TL6WB.js → up-PKNNDN6M.js} +1 -1
  37. package/dist/{version-notify-N37N2C4G.js → version-notify-DK6AHWX7.js} +6 -5
  38. package/package.json +4 -4
  39. package/templates/claude/package.json.tmpl +1 -1
  40. package/templates/codex/package.json.tmpl +1 -1
  41. package/templates/pi/package.json.tmpl +2 -1
  42. package/templates/pi/src/agent.ts +1 -1
  43. package/templates/pi/src/lib/content.ts +1 -1
  44. package/templates/pi/src/lib/event-handler.ts +1 -1
  45. package/templates/pi/src/lib/reply-instructions-extension.ts +1 -1
  46. package/templates/pi/src/lib/resolve-model.ts +4 -4
  47. package/templates/pi/src/lib/subagents.ts +2 -2
  48. /package/dist/{chat-JD3TJINV.js → chat-F2EEN76G.js} +0 -0
  49. /package/dist/{chunk-5EVW4KOD.js → chunk-PEKG3GNZ.js} +0 -0
package/README.md CHANGED
@@ -342,7 +342,7 @@ Your mind's `SOUL.md` and `MEMORY.md` are never overwritten.
342
342
  Three built-in templates:
343
343
 
344
344
  - **`claude`** (default) — Anthropic Claude Agent SDK
345
- - **`pi`** — [pi-coding-agent](https://github.com/nicepkg/pi) for multi-provider LLM support
345
+ - **`pi`** — [pi-coding-agent](https://github.com/earendil-works/pi) for multi-provider LLM support
346
346
  - **`codex`** — OpenAI Codex models
347
347
 
348
348
  ```sh
@@ -351,7 +351,7 @@ volute mind create atlas --template pi
351
351
 
352
352
  ## AI Service
353
353
 
354
- 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.
354
+ Volute has an optional system-level AI service for features like automatic turn summaries. It uses [`@earendil-works/pi-ai`](https://github.com/earendil-works/pi) for multi-provider support — configure any combination of Anthropic, OpenAI, Google, GitHub Copilot, and others.
355
355
 
356
356
  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.
357
357
 
@@ -19,7 +19,7 @@ import {
19
19
  setProviderRefreshHook,
20
20
  setUtilityModel,
21
21
  unqualifyModelId
22
- } from "./chunk-S4SXBQ7F.js";
22
+ } from "./chunk-ZXPWTH4I.js";
23
23
  import "./chunk-DNU6XLE2.js";
24
24
  import "./chunk-T2TP6ZC6.js";
25
25
  import "./chunk-B4WPXYPI.js";
@@ -17,31 +17,30 @@ function getState(mind) {
17
17
  }
18
18
  return state;
19
19
  }
20
- var IGNORED_EVENTS = /* @__PURE__ */ new Set(["done", "usage", "log"]);
20
+ var IGNORED_EVENTS = /* @__PURE__ */ new Set(["session_start", "usage", "log"]);
21
+ function armIdleTimer(mind, state) {
22
+ if (state.idleTimer) {
23
+ clearTimeout(state.idleTimer);
24
+ }
25
+ state.idleTimer = setTimeout(() => {
26
+ state.idleTimer = null;
27
+ state.active = false;
28
+ publish({
29
+ type: "mind_idle",
30
+ mind,
31
+ summary: `${mind} is idle`
32
+ }).catch((err) => {
33
+ logger_default.error("[mind-activity] failed to publish mind_idle", logger_default.errorData(err));
34
+ });
35
+ }, IDLE_TIMEOUT_MS);
36
+ }
21
37
  function onMindEvent(mind, type, channel) {
22
38
  const state = getState(mind);
23
39
  if (type === "done") {
24
40
  state.active = false;
25
- if (state.idleTimer) {
26
- clearTimeout(state.idleTimer);
27
- }
28
- state.idleTimer = setTimeout(() => {
29
- state.idleTimer = null;
30
- if (!state.active) {
31
- publish({
32
- type: "mind_idle",
33
- mind,
34
- summary: `${mind} is idle`
35
- }).catch((err) => {
36
- logger_default.error("[mind-activity] failed to publish mind_idle", logger_default.errorData(err));
37
- });
38
- }
39
- }, IDLE_TIMEOUT_MS);
41
+ armIdleTimer(mind, state);
40
42
  } else if (!IGNORED_EVENTS.has(type)) {
41
- if (state.idleTimer) {
42
- clearTimeout(state.idleTimer);
43
- state.idleTimer = null;
44
- }
43
+ armIdleTimer(mind, state);
45
44
  if (!state.active) {
46
45
  state.active = true;
47
46
  state.channel = channel;
@@ -9,7 +9,7 @@ import {
9
9
  getSharedSkill,
10
10
  installSkill,
11
11
  mindSkillsDir
12
- } from "./chunk-QV7P3TYO.js";
12
+ } from "./chunk-UX7FPDDO.js";
13
13
  import {
14
14
  readVoluteConfig,
15
15
  writeVoluteConfig
@@ -20,7 +20,7 @@ import {
20
20
  import {
21
21
  qualifyModelId,
22
22
  resolveTemplate
23
- } from "./chunk-S4SXBQ7F.js";
23
+ } from "./chunk-ZXPWTH4I.js";
24
24
  import {
25
25
  readGlobalConfig
26
26
  } from "./chunk-DNU6XLE2.js";
@@ -79,7 +79,7 @@ async function ensureSpiritProject() {
79
79
  if (existing) return;
80
80
  const dir = spiritDir();
81
81
  const spiritModel = getSpiritModel();
82
- const template = resolveTemplate(spiritModel);
82
+ const template = await resolveTemplate(spiritModel);
83
83
  const templatesRoot = findTemplatesRoot();
84
84
  const { composedDir, manifest } = composeTemplate(templatesRoot, template);
85
85
  try {
@@ -148,7 +148,7 @@ async function syncSpiritTemplate() {
148
148
  if (!existsSync(dir)) return;
149
149
  const templatesRoot = findTemplatesRoot();
150
150
  const currentModel = getSpiritModel();
151
- const expectedTemplate = resolveTemplate(currentModel);
151
+ const expectedTemplate = await resolveTemplate(currentModel);
152
152
  const currentTemplate = entry.template ?? "claude";
153
153
  if (expectedTemplate !== currentTemplate) {
154
154
  slog.info(`spirit template change: ${currentTemplate} \u2192 ${expectedTemplate}`);
@@ -46,7 +46,7 @@ async function initDefaultSkills() {
46
46
  const config = readGlobalConfig();
47
47
  let extensionSkills = [];
48
48
  try {
49
- const { getExtensionStandardSkills } = await import("./extensions-LQX2N7TI.js");
49
+ const { getExtensionStandardSkills } = await import("./extensions-MD757RFY.js");
50
50
  extensionSkills = getExtensionStandardSkills();
51
51
  } catch (err) {
52
52
  logger_default.warn("failed to load extension standard skills during init", logger_default.errorData(err));
@@ -4,9 +4,8 @@ import {
4
4
  getBridgeConfig
5
5
  } from "./chunk-PKGA23XM.js";
6
6
  import {
7
- publish,
8
7
  recordOutbound
9
- } from "./chunk-BLAXARBZ.js";
8
+ } from "./chunk-ZOI6D2YH.js";
10
9
  import {
11
10
  readEnv,
12
11
  sharedEnvPath
@@ -22,6 +21,9 @@ import {
22
21
  import {
23
22
  readVoluteConfig
24
23
  } from "./chunk-CU6OFXMM.js";
24
+ import {
25
+ publish
26
+ } from "./chunk-YMMYN2V3.js";
25
27
  import {
26
28
  getOrCreateMindUser,
27
29
  getUserByUsername