volute 0.18.0 → 0.20.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.
Files changed (117) hide show
  1. package/README.md +67 -67
  2. package/dist/activity-events-OMXKXD5N.js +16 -0
  3. package/dist/archive-ZCFOSTKB.js +15 -0
  4. package/dist/{channel-SLURLIRV.js → channel-PUQKGSQM.js} +60 -7
  5. package/dist/{chunk-6BDNWYKG.js → chunk-32VR2EOH.js} +2 -2
  6. package/dist/chunk-5XNT2472.js +36 -0
  7. package/dist/{chunk-QJIIHU32.js → chunk-7NO7EV5Z.js} +2 -2
  8. package/dist/{chunk-6DVBMLVN.js → chunk-7UFKREVW.js} +2 -2
  9. package/dist/chunk-AW7P4EVV.js +159 -0
  10. package/dist/{chunk-2Y77MCFG.js → chunk-DYZGP3EW.js} +2 -2
  11. package/dist/{chunk-M77QBTEH.js → chunk-EBGCNDMM.js} +24 -14
  12. package/dist/{chunk-37X7ECMF.js → chunk-FCDU5BFX.js} +1 -1
  13. package/dist/chunk-FGSYHIS3.js +891 -0
  14. package/dist/chunk-GZ7DW4YL.js +97 -0
  15. package/dist/chunk-IKMY5X76.js +375 -0
  16. package/dist/chunk-NSE7VJQA.js +159 -0
  17. package/dist/{chunk-GSPWIM5E.js → chunk-O6ASDHFO.js} +79 -7
  18. package/dist/{chunk-ZCEYUUID.js → chunk-OGXOMR65.js} +2 -1
  19. package/dist/{chunk-AYB7XAWO.js → chunk-PUVXOZ6T.js} +120 -279
  20. package/dist/{chunk-GK4E7LM7.js → chunk-RHEGSQFJ.js} +1 -1
  21. package/dist/{chunk-MVSXRMJJ.js → chunk-SCUDS4US.js} +1 -1
  22. package/dist/chunk-TIWH32HP.js +227 -0
  23. package/dist/{chunk-FW5API7X.js → chunk-UJ6GHNR7.js} +2 -2
  24. package/dist/chunk-UU7A7KLB.js +58 -0
  25. package/dist/{chunk-OYSZNX5I.js → chunk-VDWCHYTS.js} +1 -1
  26. package/dist/{chunk-OJQ47SCA.js → chunk-WC6ZHVRL.js} +1 -1
  27. package/dist/chunk-YUIHSKR6.js +72 -0
  28. package/dist/cli.js +43 -25
  29. package/dist/{connector-3ELFMI2R.js → connector-JBVNZ7VK.js} +6 -6
  30. package/dist/connectors/discord.js +2 -2
  31. package/dist/connectors/slack.js +2 -2
  32. package/dist/connectors/telegram.js +2 -2
  33. package/dist/{create-ZWHCRT5F.js → create-HP4OVVHF.js} +6 -4
  34. package/dist/{daemon-client-ODKDUYDE.js → daemon-client-ITWUCNFO.js} +2 -2
  35. package/dist/{daemon-restart-2HVTHZAT.js → daemon-restart-KPSWNYTH.js} +6 -6
  36. package/dist/daemon.js +2463 -1707
  37. package/dist/db-C2CJ46ZU.js +10 -0
  38. package/dist/{delete-6G6WEX4F.js → delete-BSU7K3RY.js} +1 -1
  39. package/dist/delivery-manager-CSG7LXA4.js +16 -0
  40. package/dist/down-ZY35KMHR.js +14 -0
  41. package/dist/{env-6IDWGBUH.js → env-A3LMO777.js} +6 -6
  42. package/dist/export-6QBUOQGC.js +100 -0
  43. package/dist/file-C57SK5DK.js +204 -0
  44. package/dist/{history-YUEKTJ2N.js → history-WNK3DFUM.js} +6 -6
  45. package/dist/{import-EDGRLIGO.js → import-XEC34Y4Z.js} +3 -3
  46. package/dist/log-PPPZDVEF.js +39 -0
  47. package/dist/{login-ORQDXLBM.js → login-HNH3EUQV.js} +2 -2
  48. package/dist/{logout-XC5AUO5I.js → logout-I5CB5UZS.js} +2 -2
  49. package/dist/{logs-GYOR3L2L.js → logs-SF2IMJN4.js} +6 -6
  50. package/dist/merge-33C237A4.js +46 -0
  51. package/dist/{mind-OJN6RBZW.js → mind-Z7CKD6DG.js} +14 -10
  52. package/dist/mind-activity-tracker-624QLQLC.js +19 -0
  53. package/dist/mind-manager-3DMYKZPB.js +18 -0
  54. package/dist/{package-OKLFO7UY.js → package-4NHAVUUI.js} +5 -3
  55. package/dist/{pages-6IV4VQTU.js → pages-4DGQT7ZA.js} +2 -2
  56. package/dist/{publish-Q4RPSJLL.js → publish-TAJUET4I.js} +22 -5
  57. package/dist/pull-XAEWQJ47.js +39 -0
  58. package/dist/{register-LDE6LRXY.js → register-VSPCMHKX.js} +2 -2
  59. package/dist/{restart-YFAWFS5T.js → restart-IQKMCK5M.js} +6 -6
  60. package/dist/{schedule-AGYLDMNS.js → schedule-FFZG23IW.js} +31 -11
  61. package/dist/schema-GFH6RV3W.js +26 -0
  62. package/dist/{seed-AP4Q7RZ7.js → seed-J43YDKXG.js} +7 -4
  63. package/dist/{send-BNDTLUPM.js → send-KVIZIGCE.js} +8 -8
  64. package/dist/{service-U7MZ2H7F.js → service-LUR7WDO7.js} +6 -6
  65. package/dist/{setup-DJKIZKGW.js → setup-52YRV7VP.js} +23 -7
  66. package/dist/shared-KO35ZM44.js +39 -0
  67. package/dist/{skill-2Y42P4JY.js → skill-BCVNI6TV.js} +6 -6
  68. package/{templates/_base/_skills → dist/skills}/orientation/SKILL.md +1 -1
  69. package/{templates/_base/_skills → dist/skills}/sessions/SKILL.md +2 -2
  70. package/{templates/_base/_skills → dist/skills}/volute-mind/SKILL.md +51 -3
  71. package/dist/{sprout-TJ3BHVOG.js → sprout-QN7Y4VVO.js} +38 -20
  72. package/dist/{start-3YYRXBKP.js → start-I5JYB65M.js} +6 -6
  73. package/dist/{status-VSFZYX7S.js → status-4ESFLGH4.js} +5 -5
  74. package/dist/status-D7E5HHBV.js +35 -0
  75. package/dist/{status-OKNA6AR3.js → status-FU2PFVVF.js} +5 -4
  76. package/dist/{stop-AA5K5LYG.js → stop-NBVKEFQQ.js} +6 -6
  77. package/dist/{up-7B3BWF2U.js → up-FS7CKM6V.js} +5 -5
  78. package/dist/{update-YAGN5ODG.js → update-FJIHDJKM.js} +5 -5
  79. package/dist/{update-check-APLTH4IN.js → update-check-MWE5AH4U.js} +2 -2
  80. package/dist/{upgrade-KXZCQSZN.js → upgrade-AIT24B5I.js} +1 -1
  81. package/dist/{variant-X5QFG6KK.js → variant-63ZWO2W7.js} +4 -4
  82. package/dist/variants-JAGWGBXG.js +26 -0
  83. package/dist/web-assets/assets/index-CUZTZzaW.js +64 -0
  84. package/dist/web-assets/assets/index-adVuCkqy.css +1 -0
  85. package/dist/web-assets/index.html +2 -2
  86. package/drizzle/0010_delivery_queue.sql +12 -0
  87. package/drizzle/0011_rename_human_to_brain.sql +1 -0
  88. package/drizzle/0012_activity.sql +11 -0
  89. package/drizzle/meta/0010_snapshot.json +7 -0
  90. package/drizzle/meta/0011_snapshot.json +7 -0
  91. package/drizzle/meta/0012_snapshot.json +7 -0
  92. package/drizzle/meta/_journal.json +21 -0
  93. package/package.json +5 -3
  94. package/templates/_base/.init/.config/hooks/startup-context.sh +1 -1
  95. package/templates/_base/.init/.config/scripts/session-reader.ts +3 -3
  96. package/templates/_base/home/.config/routes.json +2 -2
  97. package/templates/_base/home/VOLUTE.md +16 -1
  98. package/templates/_base/src/lib/auto-commit.ts +51 -14
  99. package/templates/_base/src/lib/daemon-client.ts +22 -0
  100. package/templates/_base/src/lib/router.ts +123 -1
  101. package/templates/_base/src/lib/transparency.ts +1 -1
  102. package/templates/_base/src/lib/types.ts +4 -0
  103. package/templates/_base/src/lib/volute-server.ts +91 -2
  104. package/templates/claude/.init/.config/routes.json +7 -1
  105. package/templates/claude/src/server.ts +2 -2
  106. package/templates/claude/volute-template.json +1 -2
  107. package/templates/pi/.init/.config/routes.json +7 -1
  108. package/templates/pi/src/agent.ts +12 -6
  109. package/templates/pi/src/lib/session-context-extension.ts +6 -4
  110. package/templates/pi/src/server.ts +2 -0
  111. package/templates/pi/volute-template.json +1 -2
  112. package/dist/chunk-PO5Q2AYN.js +0 -121
  113. package/dist/down-A56B5JLK.js +0 -14
  114. package/dist/mind-manager-Z7O7PN2O.js +0 -15
  115. package/dist/web-assets/assets/index-CtiimdWK.css +0 -1
  116. package/dist/web-assets/assets/index-kt1_EcuO.js +0 -63
  117. /package/{templates/_base/_skills → dist/skills}/memory/SKILL.md +0 -0
@@ -1,16 +1,23 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- composeTemplate,
4
- findTemplatesRoot
5
- } from "./chunk-PO5Q2AYN.js";
3
+ STANDARD_SKILLS,
4
+ getSharedSkill,
5
+ installSkill,
6
+ uninstallSkill
7
+ } from "./chunk-IKMY5X76.js";
8
+ import "./chunk-YUIHSKR6.js";
9
+ import "./chunk-5XNT2472.js";
10
+ import "./chunk-NSE7VJQA.js";
11
+ import "./chunk-DYZGP3EW.js";
12
+ import "./chunk-OGXOMR65.js";
6
13
  import {
7
14
  findMind,
8
15
  mindDir
9
- } from "./chunk-M77QBTEH.js";
16
+ } from "./chunk-EBGCNDMM.js";
10
17
  import "./chunk-K3NQKI34.js";
11
18
 
12
19
  // src/commands/sprout.ts
13
- import { cpSync, existsSync, readFileSync, rmSync } from "fs";
20
+ import { existsSync, readFileSync } from "fs";
14
21
  import { resolve } from "path";
15
22
  var ORIENTATION_MARKER = "You don't have a soul yet";
16
23
  async function run(_args) {
@@ -46,25 +53,36 @@ async function run(_args) {
46
53
  console.error("Write your MEMORY.md before sprouting.");
47
54
  process.exit(1);
48
55
  }
49
- const templatesRoot = findTemplatesRoot();
50
- const { composedDir, manifest } = composeTemplate(templatesRoot, "claude");
51
- try {
52
- const skillsDir = resolve(dir, manifest.skillsDir);
53
- const composedSkillsDir = resolve(composedDir, manifest.skillsDir);
54
- for (const skill of ["volute-mind", "memory", "sessions"]) {
55
- const src = resolve(composedSkillsDir, skill);
56
- if (existsSync(src)) {
57
- cpSync(src, resolve(skillsDir, skill), { recursive: true });
56
+ const failedSkills = [];
57
+ for (const skillId of STANDARD_SKILLS) {
58
+ const shared = await getSharedSkill(skillId);
59
+ if (!shared) {
60
+ console.error(`Shared skill not found: ${skillId} \u2014 run 'volute up' to sync built-in skills`);
61
+ failedSkills.push(skillId);
62
+ continue;
63
+ }
64
+ const skillDir = resolve(dir, "home", ".claude", "skills", skillId);
65
+ if (!existsSync(skillDir)) {
66
+ try {
67
+ await installSkill(mindName, dir, skillId);
68
+ } catch (err) {
69
+ console.error(`Failed to install skill ${skillId}: ${err.message}`);
70
+ failedSkills.push(skillId);
58
71
  }
59
72
  }
60
- const orientationPath = resolve(skillsDir, "orientation");
61
- if (existsSync(orientationPath)) {
62
- rmSync(orientationPath, { recursive: true, force: true });
73
+ }
74
+ const orientationDir = resolve(dir, "home", ".claude", "skills", "orientation");
75
+ if (existsSync(orientationDir)) {
76
+ try {
77
+ await uninstallSkill(mindName, dir, "orientation");
78
+ } catch (err) {
79
+ console.error(`Failed to uninstall orientation skill: ${err.message}`);
63
80
  }
64
- } finally {
65
- rmSync(composedDir, { recursive: true, force: true });
66
81
  }
67
- const { daemonFetch } = await import("./daemon-client-ODKDUYDE.js");
82
+ if (failedSkills.length > 0) {
83
+ console.error(`Warning: failed to install skills: ${failedSkills.join(", ")}`);
84
+ }
85
+ const { daemonFetch } = await import("./daemon-client-ITWUCNFO.js");
68
86
  const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
69
87
  const client = getClient();
70
88
  const sproutRes = await daemonFetch(
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- daemonFetch
4
- } from "./chunk-OJQ47SCA.js";
5
- import {
6
- resolveMind
7
- } from "./chunk-M77QBTEH.js";
8
2
  import {
9
3
  getClient,
10
4
  urlOf
11
5
  } from "./chunk-4RQBJWQX.js";
6
+ import {
7
+ daemonFetch
8
+ } from "./chunk-WC6ZHVRL.js";
9
+ import {
10
+ resolveMind
11
+ } from "./chunk-EBGCNDMM.js";
12
12
  import "./chunk-K3NQKI34.js";
13
13
 
14
14
  // src/commands/start.ts
@@ -4,13 +4,13 @@ import {
4
4
  getServiceMode,
5
5
  modeLabel,
6
6
  readDaemonConfig
7
- } from "./chunk-6BDNWYKG.js";
8
- import "./chunk-2Y77MCFG.js";
9
- import "./chunk-ZCEYUUID.js";
7
+ } from "./chunk-32VR2EOH.js";
8
+ import "./chunk-DYZGP3EW.js";
9
+ import "./chunk-OGXOMR65.js";
10
10
  import {
11
11
  checkForUpdate
12
- } from "./chunk-MVSXRMJJ.js";
13
- import "./chunk-M77QBTEH.js";
12
+ } from "./chunk-SCUDS4US.js";
13
+ import "./chunk-EBGCNDMM.js";
14
14
  import "./chunk-K3NQKI34.js";
15
15
 
16
16
  // src/commands/status.ts
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ resolveMindName
4
+ } from "./chunk-NAOW2CLO.js";
5
+ import {
6
+ parseArgs
7
+ } from "./chunk-D424ZQGI.js";
8
+ import {
9
+ daemonFetch
10
+ } from "./chunk-WC6ZHVRL.js";
11
+ import "./chunk-EBGCNDMM.js";
12
+ import "./chunk-K3NQKI34.js";
13
+
14
+ // src/commands/shared/status.ts
15
+ async function run(args) {
16
+ const { flags } = parseArgs(args, {
17
+ mind: { type: "string" }
18
+ });
19
+ const mindName = resolveMindName(flags);
20
+ const res = await daemonFetch(`/api/minds/${encodeURIComponent(mindName)}/shared/status`);
21
+ if (!res.ok) {
22
+ const body = await res.json().catch(() => ({}));
23
+ console.error(body.error ?? `Server responded with ${res.status}`);
24
+ process.exit(1);
25
+ }
26
+ const output = await res.text();
27
+ if (output.trim()) {
28
+ console.log(output.trimEnd());
29
+ } else {
30
+ console.log("No pending changes.");
31
+ }
32
+ }
33
+ export {
34
+ run
35
+ };
@@ -7,24 +7,25 @@ import {
7
7
  } from "./chunk-NAOW2CLO.js";
8
8
  import {
9
9
  readSystemsConfig
10
- } from "./chunk-37X7ECMF.js";
10
+ } from "./chunk-FCDU5BFX.js";
11
11
  import {
12
12
  parseArgs
13
13
  } from "./chunk-D424ZQGI.js";
14
- import "./chunk-M77QBTEH.js";
14
+ import "./chunk-EBGCNDMM.js";
15
15
  import "./chunk-K3NQKI34.js";
16
16
 
17
17
  // src/commands/pages/status.ts
18
18
  async function run(args) {
19
19
  const { flags } = parseArgs(args, {
20
- mind: { type: "string" }
20
+ mind: { type: "string" },
21
+ system: { type: "boolean" }
21
22
  });
22
23
  const config = readSystemsConfig();
23
24
  if (!config) {
24
25
  console.error('Not logged in. Run "volute pages register" or "volute pages login" first.');
25
26
  process.exit(1);
26
27
  }
27
- const mindName = resolveMindName(flags);
28
+ const mindName = flags.mind || process.env.VOLUTE_MIND ? resolveMindName(flags) : "system";
28
29
  const res = await systemsFetch(`${config.apiUrl}/api/pages/status/${mindName}`, {
29
30
  headers: { Authorization: `Bearer ${config.apiKey}` }
30
31
  });
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ getClient,
4
+ urlOf
5
+ } from "./chunk-4RQBJWQX.js";
2
6
  import {
3
7
  resolveMindName
4
8
  } from "./chunk-NAOW2CLO.js";
5
9
  import {
6
10
  daemonFetch
7
- } from "./chunk-OJQ47SCA.js";
11
+ } from "./chunk-WC6ZHVRL.js";
8
12
  import {
9
13
  resolveMind
10
- } from "./chunk-M77QBTEH.js";
11
- import {
12
- getClient,
13
- urlOf
14
- } from "./chunk-4RQBJWQX.js";
14
+ } from "./chunk-EBGCNDMM.js";
15
15
  import "./chunk-K3NQKI34.js";
16
16
 
17
17
  // src/commands/stop.ts
@@ -2,12 +2,12 @@
2
2
  import {
3
3
  readGlobalConfig,
4
4
  run
5
- } from "./chunk-6DVBMLVN.js";
6
- import "./chunk-6BDNWYKG.js";
7
- import "./chunk-2Y77MCFG.js";
8
- import "./chunk-ZCEYUUID.js";
5
+ } from "./chunk-7UFKREVW.js";
6
+ import "./chunk-32VR2EOH.js";
9
7
  import "./chunk-D424ZQGI.js";
10
- import "./chunk-M77QBTEH.js";
8
+ import "./chunk-DYZGP3EW.js";
9
+ import "./chunk-OGXOMR65.js";
10
+ import "./chunk-EBGCNDMM.js";
11
11
  import "./chunk-K3NQKI34.js";
12
12
  export {
13
13
  readGlobalConfig,
@@ -5,19 +5,19 @@ import {
5
5
  pollHealth,
6
6
  readDaemonConfig,
7
7
  restartService
8
- } from "./chunk-6BDNWYKG.js";
8
+ } from "./chunk-32VR2EOH.js";
9
9
  import {
10
10
  exec,
11
11
  execInherit,
12
12
  resolveVoluteBin
13
- } from "./chunk-2Y77MCFG.js";
14
- import "./chunk-ZCEYUUID.js";
13
+ } from "./chunk-DYZGP3EW.js";
14
+ import "./chunk-OGXOMR65.js";
15
15
  import {
16
16
  checkForUpdate
17
- } from "./chunk-MVSXRMJJ.js";
17
+ } from "./chunk-SCUDS4US.js";
18
18
  import {
19
19
  voluteHome
20
- } from "./chunk-M77QBTEH.js";
20
+ } from "./chunk-EBGCNDMM.js";
21
21
  import "./chunk-K3NQKI34.js";
22
22
 
23
23
  // src/commands/update.ts
@@ -5,8 +5,8 @@ import {
5
5
  fetchLatestVersion,
6
6
  getCurrentVersion,
7
7
  isNewer
8
- } from "./chunk-MVSXRMJJ.js";
9
- import "./chunk-M77QBTEH.js";
8
+ } from "./chunk-SCUDS4US.js";
9
+ import "./chunk-EBGCNDMM.js";
10
10
  import "./chunk-K3NQKI34.js";
11
11
  export {
12
12
  checkForUpdate,
@@ -14,7 +14,7 @@ async function run(args) {
14
14
  continue: { type: "boolean" }
15
15
  });
16
16
  const mindName = resolveMindName({ mind: positional[0] });
17
- const { daemonFetch } = await import("./daemon-client-ODKDUYDE.js");
17
+ const { daemonFetch } = await import("./daemon-client-ITWUCNFO.js");
18
18
  const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
19
19
  const client = getClient();
20
20
  const res = await daemonFetch(
@@ -10,7 +10,7 @@ import {
10
10
  readVariants,
11
11
  resolveMind,
12
12
  writeVariants
13
- } from "./chunk-M77QBTEH.js";
13
+ } from "./chunk-EBGCNDMM.js";
14
14
  import "./chunk-K3NQKI34.js";
15
15
 
16
16
  // src/commands/variant.ts
@@ -65,7 +65,7 @@ async function createVariant(args) {
65
65
  process.exit(1);
66
66
  }
67
67
  if (!json) console.log("Creating variant via daemon...");
68
- const { daemonFetch } = await import("./daemon-client-ODKDUYDE.js");
68
+ const { daemonFetch } = await import("./daemon-client-ITWUCNFO.js");
69
69
  const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
70
70
  const client = getClient();
71
71
  const res = await daemonFetch(
@@ -155,7 +155,7 @@ async function mergeVariant(args) {
155
155
  process.exit(1);
156
156
  }
157
157
  console.log(`Merging variant ${variantName}...`);
158
- const { daemonFetch } = await import("./daemon-client-ODKDUYDE.js");
158
+ const { daemonFetch } = await import("./daemon-client-ITWUCNFO.js");
159
159
  const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
160
160
  const client = getClient();
161
161
  const res = await daemonFetch(
@@ -192,7 +192,7 @@ async function deleteVariant(args) {
192
192
  console.error("Usage: volute variant delete <variant> [--mind <name>]");
193
193
  process.exit(1);
194
194
  }
195
- const { daemonFetch } = await import("./daemon-client-ODKDUYDE.js");
195
+ const { daemonFetch } = await import("./daemon-client-ITWUCNFO.js");
196
196
  const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
197
197
  const client = getClient();
198
198
  const res = await daemonFetch(
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ addVariant,
4
+ checkHealth,
5
+ findVariant,
6
+ getAllRunningVariants,
7
+ readVariants,
8
+ removeAllVariants,
9
+ removeVariant,
10
+ setVariantRunning,
11
+ validateBranchName,
12
+ writeVariants
13
+ } from "./chunk-EBGCNDMM.js";
14
+ import "./chunk-K3NQKI34.js";
15
+ export {
16
+ addVariant,
17
+ checkHealth,
18
+ findVariant,
19
+ getAllRunningVariants,
20
+ readVariants,
21
+ removeAllVariants,
22
+ removeVariant,
23
+ setVariantRunning,
24
+ validateBranchName,
25
+ writeVariants
26
+ };