volute 0.19.0 → 0.21.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 (104) hide show
  1. package/README.md +68 -68
  2. package/dist/activity-events-3WHHCOBB.js +15 -0
  3. package/dist/{archive-ZCFOSTKB.js → archive-4ZQYK5MN.js} +4 -2
  4. package/dist/auth-HM2RSPY7.js +37 -0
  5. package/dist/{channel-PUQKGSQM.js → channel-BOOMFULW.js} +2 -2
  6. package/dist/{chunk-OTWLI7F4.js → chunk-5462YKWP.js} +12 -9
  7. package/dist/{chunk-2TJGRJ4O.js → chunk-7LPTHFIL.js} +64 -59
  8. package/dist/chunk-A4S7H6G6.js +56 -0
  9. package/dist/chunk-AKPFNL7L.js +148 -0
  10. package/dist/{chunk-EBGCNDMM.js → chunk-B2CPS4QU.js} +128 -114
  11. package/dist/{chunk-FCDU5BFX.js → chunk-HFCBO2GL.js} +2 -2
  12. package/dist/chunk-HGCDWKSP.js +97 -0
  13. package/dist/{chunk-DYZGP3EW.js → chunk-IPJXU366.js} +1 -1
  14. package/dist/{chunk-VE4D3GOP.js → chunk-J5A3DF2U.js} +2 -2
  15. package/dist/{chunk-WC6ZHVRL.js → chunk-KFI7TQJ6.js} +2 -2
  16. package/dist/{chunk-AW7P4EVV.js → chunk-KTJGZ7M7.js} +55 -7
  17. package/dist/{chunk-4KPUF5JD.js → chunk-L3LHXZD7.js} +18 -5
  18. package/dist/{chunk-OGXOMR65.js → chunk-NWPT4ASZ.js} +1 -1
  19. package/dist/{chunk-FGV2H4TX.js → chunk-OGZYB5GL.js} +312 -268
  20. package/dist/{chunk-SCUDS4US.js → chunk-ON3FF5JA.js} +1 -1
  21. package/dist/{chunk-EMQSAY3B.js → chunk-PC6R6UUW.js} +6 -5
  22. package/dist/{chunk-VDWCHYTS.js → chunk-PHU4DEAJ.js} +1 -1
  23. package/dist/{chunk-7NO7EV5Z.js → chunk-Q7AITQ44.js} +2 -2
  24. package/dist/{chunk-32VR2EOH.js → chunk-QUJUKM4U.js} +2 -2
  25. package/dist/{chunk-VQWDC6UK.js → chunk-SGPEZ32F.js} +46 -1
  26. package/dist/{chunk-RHEGSQFJ.js → chunk-WSLPZF72.js} +1 -1
  27. package/dist/cli.js +59 -111
  28. package/dist/{connector-JBVNZ7VK.js → connector-PYT5UOTZ.js} +6 -6
  29. package/dist/connectors/discord.js +2 -2
  30. package/dist/connectors/slack.js +2 -2
  31. package/dist/connectors/telegram.js +2 -2
  32. package/dist/{create-HP4OVVHF.js → create-WIDA3M4C.js} +1 -1
  33. package/dist/{daemon-client-ITWUCNFO.js → daemon-client-ZHCDL4RS.js} +2 -2
  34. package/dist/{daemon-restart-JMZM3QY4.js → daemon-restart-BH67ZOTE.js} +8 -8
  35. package/dist/daemon.js +2872 -1301
  36. package/dist/{delete-BSU7K3RY.js → delete-LOIANQGD.js} +1 -1
  37. package/dist/down-LIOQ5JDH.js +14 -0
  38. package/dist/{env-A3LMO777.js → env-4PHIHTF4.js} +2 -2
  39. package/dist/{export-GCDNQCF3.js → export-XD6PJBQP.js} +19 -8
  40. package/dist/file-X4L5TTOL.js +204 -0
  41. package/dist/{history-WNK3DFUM.js → history-HTEKRNID.js} +2 -2
  42. package/dist/{import-M63VIUJ5.js → import-E433B4KG.js} +3 -3
  43. package/dist/{log-PPPZDVEF.js → log-SRO5Q6AD.js} +2 -2
  44. package/dist/{login-HNH3EUQV.js → login-UO6AOVEA.js} +4 -4
  45. package/dist/{logout-I5CB5UZS.js → logout-UKD5LA37.js} +2 -2
  46. package/dist/{logs-SF2IMJN4.js → logs-HNTNNBDW.js} +2 -2
  47. package/dist/{merge-33C237A4.js → merge-B6SYTGI7.js} +2 -2
  48. package/dist/{mind-PQ5NCPSU.js → mind-BIDOF65R.js} +27 -11
  49. package/dist/mind-activity-tracker-PGC3DBJ7.js +18 -0
  50. package/dist/{mind-manager-RVCFROAY.js → mind-manager-3V2NXX4I.js} +5 -6
  51. package/dist/{package-MYE2ZJLV.js → package-HQR52XSG.js} +1 -1
  52. package/dist/{pages-AXCOSY3P.js → pages-KQBR5TAZ.js} +6 -6
  53. package/dist/{publish-YB377JB7.js → publish-OJ4QMXVZ.js} +12 -9
  54. package/dist/{pull-XAEWQJ47.js → pull-GRQAXM2E.js} +2 -2
  55. package/dist/{register-VSPCMHKX.js → register-U2UO6TC4.js} +5 -5
  56. package/dist/registry-D2BSQ2X5.js +42 -0
  57. package/dist/{restart-IQKMCK5M.js → restart-CIDAKGG2.js} +3 -6
  58. package/dist/{schedule-LMX7GAQZ.js → schedule-NLR3LZLY.js} +27 -7
  59. package/dist/{seed-J43YDKXG.js → seed-3H2MRREW.js} +2 -2
  60. package/dist/{send-KVIZIGCE.js → send-RP2TA7SG.js} +132 -36
  61. package/dist/{service-LUR7WDO7.js → service-TVNEORO7.js} +31 -13
  62. package/dist/{setup-OH3PJUJO.js → setup-OZDYCKDI.js} +25 -34
  63. package/dist/{shared-KO35ZM44.js → shared-DCQ2UXOM.js} +4 -4
  64. package/dist/{skill-BCVNI6TV.js → skill-Q2Y6PQ3L.js} +2 -2
  65. package/dist/skills/orientation/SKILL.md +2 -2
  66. package/dist/skills/volute-mind/SKILL.md +38 -8
  67. package/dist/{sprout-VBEX63LX.js → sprout-6Z6C42YM.js} +34 -30
  68. package/dist/{start-I5JYB65M.js → start-JR6CUUWF.js} +3 -6
  69. package/dist/{status-D7E5HHBV.js → status-5XDGYHKP.js} +2 -2
  70. package/dist/{status-JCJAOXTW.js → status-LV34BG6G.js} +6 -5
  71. package/dist/{status-4ESFLGH4.js → status-Z7NAFMBI.js} +5 -5
  72. package/dist/{stop-NBVKEFQQ.js → stop-VKPGK25U.js} +2 -5
  73. package/dist/template-hash-BIMA4ILT.js +8 -0
  74. package/dist/{up-WG65SWJU.js → up-7BGDMFRT.js} +5 -5
  75. package/dist/{update-FJIHDJKM.js → update-4WT7VWHW.js} +5 -5
  76. package/dist/{update-check-MWE5AH4U.js → update-check-F5Z3ALXX.js} +2 -2
  77. package/dist/{upgrade-AIT24B5I.js → upgrade-ZEC2GGFO.js} +1 -1
  78. package/dist/{variant-63ZWO2W7.js → variant-A4I7PHXS.js} +16 -24
  79. package/dist/version-notify-TFS2U5CF.js +173 -0
  80. package/dist/web-assets/assets/index-BR3gtK3E.css +1 -0
  81. package/dist/web-assets/assets/index-CWmrZRQd.js +64 -0
  82. package/dist/web-assets/index.html +2 -2
  83. package/drizzle/0012_activity.sql +11 -0
  84. package/drizzle/meta/0012_snapshot.json +7 -0
  85. package/drizzle/meta/_journal.json +7 -0
  86. package/package.json +1 -1
  87. package/templates/_base/home/.config/routes.json +2 -2
  88. package/templates/_base/home/VOLUTE.md +1 -1
  89. package/templates/_base/src/lib/daemon-client.ts +22 -0
  90. package/templates/_base/src/lib/transparency.ts +1 -1
  91. package/templates/claude/.init/.config/routes.json +7 -1
  92. package/templates/pi/.init/.config/routes.json +7 -1
  93. package/templates/pi/src/agent.ts +11 -5
  94. package/templates/pi/src/lib/session-context-extension.ts +6 -4
  95. package/templates/pi/src/server.ts +2 -0
  96. package/dist/chunk-UJ6GHNR7.js +0 -675
  97. package/dist/chunk-Z524RFCJ.js +0 -36
  98. package/dist/db-5ZVC6MQF.js +0 -10
  99. package/dist/delivery-manager-ISTJMZDW.js +0 -16
  100. package/dist/down-ZY35KMHR.js +0 -14
  101. package/dist/schema-5BW7DFZI.js +0 -24
  102. package/dist/variants-JAGWGBXG.js +0 -26
  103. package/dist/web-assets/assets/index-BAbuRsVF.css +0 -1
  104. package/dist/web-assets/assets/index-CiQhSKi_.js +0 -63
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  voluteHome
4
- } from "./chunk-EBGCNDMM.js";
4
+ } from "./chunk-B2CPS4QU.js";
5
5
 
6
6
  // src/lib/update-check.ts
7
7
  import { existsSync, readFileSync, writeFileSync } from "fs";
@@ -3,7 +3,7 @@ import {
3
3
  mindEnvPath,
4
4
  readEnv,
5
5
  writeEnv
6
- } from "./chunk-VDWCHYTS.js";
6
+ } from "./chunk-PHU4DEAJ.js";
7
7
  import {
8
8
  parseArgs
9
9
  } from "./chunk-D424ZQGI.js";
@@ -31,7 +31,8 @@ function readJson(path) {
31
31
  if (!existsSync(path)) return null;
32
32
  try {
33
33
  return JSON.parse(readFileSync(path, "utf-8"));
34
- } catch {
34
+ } catch (err) {
35
+ console.error(`[volute-config] failed to parse ${path}: ${err}`);
35
36
  return null;
36
37
  }
37
38
  }
@@ -59,7 +60,7 @@ async function run(args) {
59
60
  return;
60
61
  }
61
62
  const wsDir = resolveWorkspace(inputPath);
62
- const { daemonFetch } = await import("./daemon-client-ITWUCNFO.js");
63
+ const { daemonFetch } = await import("./daemon-client-ZHCDL4RS.js");
63
64
  const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
64
65
  const client = getClient();
65
66
  const res = await daemonFetch(urlOf(client.api.minds.import.$url()), {
@@ -99,7 +100,7 @@ async function importArchive(archivePath, nameOverride) {
99
100
  console.error(`File not found: ${archivePath}`);
100
101
  process.exit(1);
101
102
  }
102
- const { extractArchive } = await import("./archive-ZCFOSTKB.js");
103
+ const { extractArchive } = await import("./archive-4ZQYK5MN.js");
103
104
  const tempDir = resolve2(tmpdir(), `volute-import-${Date.now()}`);
104
105
  mkdirSync2(tempDir, { recursive: true });
105
106
  let extracted;
@@ -111,7 +112,7 @@ async function importArchive(archivePath, nameOverride) {
111
112
  process.exit(1);
112
113
  }
113
114
  try {
114
- const { daemonFetch } = await import("./daemon-client-ITWUCNFO.js");
115
+ const { daemonFetch } = await import("./daemon-client-ZHCDL4RS.js");
115
116
  const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
116
117
  const client = getClient();
117
118
  const res = await daemonFetch(urlOf(client.api.minds.import.$url()), {
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  stateDir,
4
4
  voluteHome
5
- } from "./chunk-EBGCNDMM.js";
5
+ } from "./chunk-B2CPS4QU.js";
6
6
 
7
7
  // src/lib/env.ts
8
8
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
@@ -5,10 +5,10 @@ import {
5
5
  pollHealthDown,
6
6
  readDaemonConfig,
7
7
  stopService
8
- } from "./chunk-32VR2EOH.js";
8
+ } from "./chunk-QUJUKM4U.js";
9
9
  import {
10
10
  voluteHome
11
- } from "./chunk-EBGCNDMM.js";
11
+ } from "./chunk-B2CPS4QU.js";
12
12
 
13
13
  // src/commands/down.ts
14
14
  import { existsSync, readFileSync, unlinkSync } from "fs";
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  execInherit
4
- } from "./chunk-DYZGP3EW.js";
4
+ } from "./chunk-IPJXU366.js";
5
5
  import {
6
6
  voluteHome
7
- } from "./chunk-EBGCNDMM.js";
7
+ } from "./chunk-B2CPS4QU.js";
8
8
 
9
9
  // src/lib/service-mode.ts
10
10
  import { execFileSync } from "child_process";
@@ -1,4 +1,7 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ voluteHome
4
+ } from "./chunk-B2CPS4QU.js";
2
5
  import {
3
6
  __export
4
7
  } from "./chunk-K3NQKI34.js";
@@ -6,6 +9,7 @@ import {
6
9
  // src/lib/schema.ts
7
10
  var schema_exports = {};
8
11
  __export(schema_exports, {
12
+ activity: () => activity,
9
13
  conversationParticipants: () => conversationParticipants,
10
14
  conversations: () => conversations,
11
15
  deliveryQueue: () => deliveryQueue,
@@ -115,6 +119,21 @@ var deliveryQueue = sqliteTable(
115
119
  index("idx_delivery_queue_mind_status").on(table.mind, table.status)
116
120
  ]
117
121
  );
122
+ var activity = sqliteTable(
123
+ "activity",
124
+ {
125
+ id: integer("id").primaryKey({ autoIncrement: true }),
126
+ type: text("type").notNull(),
127
+ mind: text("mind").notNull(),
128
+ summary: text("summary").notNull(),
129
+ metadata: text("metadata"),
130
+ created_at: text("created_at").notNull().default(sql`(datetime('now'))`)
131
+ },
132
+ (table) => [
133
+ index("idx_activity_created_at").on(table.created_at),
134
+ index("idx_activity_mind").on(table.mind)
135
+ ]
136
+ );
118
137
  var messages = sqliteTable(
119
138
  "messages",
120
139
  {
@@ -128,6 +147,31 @@ var messages = sqliteTable(
128
147
  (table) => [index("idx_messages_conversation_id").on(table.conversation_id)]
129
148
  );
130
149
 
150
+ // src/lib/db.ts
151
+ import { chmodSync, existsSync } from "fs";
152
+ import { dirname, resolve } from "path";
153
+ import { fileURLToPath } from "url";
154
+ import { drizzle } from "drizzle-orm/libsql";
155
+ import { migrate } from "drizzle-orm/libsql/migrator";
156
+ var __dirname = dirname(fileURLToPath(import.meta.url));
157
+ var migrationsFolder = existsSync(resolve(__dirname, "../drizzle")) ? resolve(__dirname, "../drizzle") : resolve(__dirname, "../../drizzle");
158
+ var db = null;
159
+ async function getDb() {
160
+ if (db) return db;
161
+ const dbPath = process.env.VOLUTE_DB_PATH || resolve(voluteHome(), "volute.db");
162
+ db = drizzle({ connection: { url: `file:${dbPath}` }, schema: schema_exports });
163
+ await migrate(db, { migrationsFolder });
164
+ try {
165
+ chmodSync(dbPath, 384);
166
+ } catch (err) {
167
+ console.error(
168
+ `[volute] WARNING: Failed to restrict database file permissions on ${dbPath}:`,
169
+ err
170
+ );
171
+ }
172
+ return db;
173
+ }
174
+
131
175
  export {
132
176
  users,
133
177
  conversations,
@@ -137,6 +181,7 @@ export {
137
181
  systemPrompts,
138
182
  sharedSkills,
139
183
  deliveryQueue,
184
+ activity,
140
185
  messages,
141
- schema_exports
186
+ getDb
142
187
  };
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  stateDir
4
- } from "./chunk-EBGCNDMM.js";
4
+ } from "./chunk-B2CPS4QU.js";
5
5
 
6
6
  // src/lib/slugify.ts
7
7
  function slugify(text) {
package/dist/cli.js CHANGED
@@ -9,161 +9,109 @@ if (!process.env.VOLUTE_HOME) {
9
9
  var command = process.argv[2];
10
10
  var args = process.argv.slice(3);
11
11
  if (command === "--version" || command === "-v") {
12
- const { default: pkg } = await import("./package-MYE2ZJLV.js");
12
+ const { default: pkg } = await import("./package-HQR52XSG.js");
13
13
  console.log(pkg.version);
14
14
  process.exit(0);
15
15
  }
16
16
  switch (command) {
17
17
  case "mind":
18
- await import("./mind-PQ5NCPSU.js").then((m) => m.run(args));
18
+ await import("./mind-BIDOF65R.js").then((m) => m.run(args));
19
19
  break;
20
20
  case "send":
21
- await import("./send-KVIZIGCE.js").then((m) => m.run(args));
21
+ await import("./send-RP2TA7SG.js").then((m) => m.run(args));
22
22
  break;
23
23
  case "history":
24
- await import("./history-WNK3DFUM.js").then((m) => m.run(args));
24
+ await import("./history-HTEKRNID.js").then((m) => m.run(args));
25
25
  break;
26
26
  case "variant":
27
- await import("./variant-63ZWO2W7.js").then((m) => m.run(args));
28
- break;
29
- case "connector":
30
- await import("./connector-JBVNZ7VK.js").then((m) => m.run(args));
27
+ await import("./variant-A4I7PHXS.js").then((m) => m.run(args));
31
28
  break;
32
29
  case "channel":
33
- await import("./channel-PUQKGSQM.js").then((m) => m.run(args));
30
+ await import("./channel-BOOMFULW.js").then((m) => m.run(args));
34
31
  break;
35
32
  case "schedule":
36
- await import("./schedule-LMX7GAQZ.js").then((m) => m.run(args));
33
+ await import("./schedule-NLR3LZLY.js").then((m) => m.run(args));
37
34
  break;
38
35
  case "skill":
39
- await import("./skill-BCVNI6TV.js").then((m) => m.run(args));
36
+ await import("./skill-Q2Y6PQ3L.js").then((m) => m.run(args));
40
37
  break;
41
38
  case "shared":
42
- await import("./shared-KO35ZM44.js").then((m) => m.run(args));
39
+ await import("./shared-DCQ2UXOM.js").then((m) => m.run(args));
40
+ break;
41
+ case "file":
42
+ await import("./file-X4L5TTOL.js").then((m) => m.run(args));
43
43
  break;
44
44
  case "env":
45
- await import("./env-A3LMO777.js").then((m) => m.run(args));
45
+ await import("./env-4PHIHTF4.js").then((m) => m.run(args));
46
46
  break;
47
47
  case "up":
48
- await import("./up-WG65SWJU.js").then((m) => m.run(args));
48
+ await import("./up-7BGDMFRT.js").then((m) => m.run(args));
49
49
  break;
50
50
  case "down":
51
- await import("./down-ZY35KMHR.js").then((m) => m.run(args));
51
+ await import("./down-LIOQ5JDH.js").then((m) => m.run(args));
52
52
  break;
53
53
  case "restart":
54
- await import("./daemon-restart-JMZM3QY4.js").then((m) => m.run(args));
55
- break;
56
- case "setup":
57
- await import("./setup-OH3PJUJO.js").then((m) => m.run(args));
54
+ await import("./daemon-restart-BH67ZOTE.js").then((m) => m.run(args));
58
55
  break;
59
56
  case "service":
60
- await import("./service-LUR7WDO7.js").then((m) => m.run(args));
57
+ await import("./service-TVNEORO7.js").then((m) => m.run(args));
61
58
  break;
62
59
  case "update":
63
- await import("./update-FJIHDJKM.js").then((m) => m.run(args));
60
+ await import("./update-4WT7VWHW.js").then((m) => m.run(args));
64
61
  break;
65
62
  case "status":
66
- await import("./status-4ESFLGH4.js").then((m) => m.run(args));
67
- break;
68
- case "seed":
69
- await import("./seed-J43YDKXG.js").then((m) => m.run(args));
70
- break;
71
- case "sprout":
72
- await import("./sprout-VBEX63LX.js").then((m) => m.run(args));
63
+ await import("./status-Z7NAFMBI.js").then((m) => m.run(args));
73
64
  break;
74
65
  case "pages":
75
- await import("./pages-AXCOSY3P.js").then((m) => m.run(args));
76
- break;
77
- case "register":
78
- await import("./register-VSPCMHKX.js").then((m) => m.run(args));
66
+ await import("./pages-KQBR5TAZ.js").then((m) => m.run(args));
79
67
  break;
80
- case "login":
81
- await import("./login-HNH3EUQV.js").then((m) => m.run(args));
82
- break;
83
- case "logout":
84
- await import("./logout-I5CB5UZS.js").then((m) => m.run());
68
+ case "auth":
69
+ await import("./auth-HM2RSPY7.js").then((m) => m.run(args));
85
70
  break;
86
71
  case "--help":
87
72
  case "-h":
88
73
  case void 0:
89
74
  console.log(`volute \u2014 create and manage AI minds
90
75
 
91
- Commands:
92
- volute mind create <name> Create a new mind
93
- volute mind start <name> Start a mind (daemonized)
94
- volute mind stop <name> Stop a mind
95
- volute mind restart <name> Restart a mind
96
- volute mind delete <name> [--force] Delete a mind (--force removes files)
97
- volute mind list List all minds
98
- volute mind status <name> Check mind status
99
- volute mind logs <name> [--follow] Tail mind logs
100
- volute mind upgrade <name> Upgrade mind to latest template
101
- volute mind import <path> Import an OpenClaw workspace
102
-
103
- volute send <target> "<msg>" Send a message (mind DM, channel, etc.)
104
- volute history [--mind <name>] View message history
105
-
106
- volute variant create <name> Create a variant (worktree + server)
107
- volute variant list List variants for a mind
108
- volute variant merge <name> Merge a variant back
109
- volute variant delete <name> Delete a variant
110
-
111
- volute connector connect <type> Enable a connector for a mind
112
- volute connector disconnect <type> Disable a connector for a mind
113
-
114
- volute channel read <uri> Read recent messages from a channel
115
- volute channel list [<platform>] List conversations on a platform
116
- volute channel users <platform> List users on a platform
117
- volute channel create <platform> ... Create a conversation on a platform
118
-
119
- volute schedule list List schedules for a mind
120
- volute schedule add ... Add a cron schedule
121
- volute schedule remove ... Remove a schedule
122
-
123
- volute skill list List shared skills
124
- volute skill list --mind <name> List installed skills for a mind
125
- volute skill info <name> Show details of a shared skill
126
- volute skill install <name> --mind Install a shared skill into a mind
127
- volute skill update <name> --mind Update an installed skill
128
- volute skill publish <name> --mind Publish a mind's skill to shared repo
129
- volute skill remove <name> Remove a shared skill
130
- volute skill uninstall <name> --mind Uninstall a skill from a mind
131
-
132
- volute shared merge "<msg>" Merge shared changes to main
133
- volute shared pull Pull latest shared changes
134
- volute shared log Show shared repo history
135
- volute shared status Show pending changes diff
136
-
137
- volute env <set|get|list|remove> Manage environment variables
138
-
139
- volute up [--port N] Start the daemon (default: 4200)
140
- volute down Stop the daemon
141
- volute restart [--port N] Restart the daemon
142
-
143
- volute service install [--port N] Install as system service (auto-start)
144
- volute service uninstall Remove system service
145
- volute service status Check service status
146
- volute setup [--port N] [--host H] Install system service with user isolation
147
- volute setup uninstall [--force] Remove system service + isolation
148
-
149
- volute register [--name <name>] Register a system on volute.systems
150
- volute login [--key <key>] Log in with an existing API key
151
- volute logout Remove stored credentials
152
-
153
- volute pages publish [--mind <name>] Publish mind's pages/ directory
154
- volute pages status [--mind <name>] Show publish status
155
-
156
- volute seed <name> Plant a seed mind (orientation mode)
157
- volute sprout Complete orientation, become a full mind
158
-
159
- volute update Update to latest version
160
- volute status Show daemon status and minds
76
+ Common:
77
+ send <target> "<msg>" Send a message
78
+ history [--channel <ch>] View activity history
79
+ status Show system status
80
+
81
+ Mind:
82
+ mind create <name> Create a new mind
83
+ mind seed <name> Plant a seed mind (orientation mode)
84
+ mind start/stop/restart [name] Control a mind
85
+ mind list List all minds
86
+ mind status [name] Check a mind's status
87
+ mind connect/disconnect <type> Manage connectors
88
+ mind logs [name] [--follow] Tail mind logs
89
+ mind sprout Complete orientation
90
+ mind upgrade/import/export Lifecycle operations
91
+
92
+ Configuration:
93
+ channel Read, list, and manage channels
94
+ variant Create and merge experimental variants
95
+ schedule Manage cron schedules
96
+ skill Browse and install skills
97
+ env Manage environment variables
98
+ file Mind-to-mind file sharing
99
+ shared Collaborative shared repository
100
+ pages Publish web pages
101
+
102
+ System:
103
+ up / down / restart Daemon control
104
+ update Update volute
105
+ service install/uninstall Auto-start service
106
+ auth register/login/logout volute.systems account
161
107
 
162
108
  Options:
163
- --version, -v Show version number
164
- --help, -h Show this help message
109
+ --version, -v Show version number
110
+ --help, -h Show this help message
111
+
112
+ Run 'volute <command> --help' for details.
165
113
 
166
- Mind-scoped commands (send, history, variant, connector, schedule, channel, skill, shared, pages)
114
+ Mind-scoped commands (send, history, variant, schedule, channel, file, skill, shared, pages)
167
115
  use --mind <name> or VOLUTE_MIND env var to identify the mind.`);
168
116
  break;
169
117
  default:
@@ -172,7 +120,7 @@ Run 'volute --help' for usage.`);
172
120
  process.exit(1);
173
121
  }
174
122
  if (command !== "update") {
175
- import("./update-check-MWE5AH4U.js").then((m) => m.checkForUpdate()).then((result) => {
123
+ import("./update-check-F5Z3ALXX.js").then((m) => m.checkForUpdate()).then((result) => {
176
124
  if (result.updateAvailable) {
177
125
  console.error(`
178
126
  Update available: ${result.current} \u2192 ${result.latest}`);
@@ -14,8 +14,8 @@ import {
14
14
  } from "./chunk-D424ZQGI.js";
15
15
  import {
16
16
  daemonFetch
17
- } from "./chunk-WC6ZHVRL.js";
18
- import "./chunk-EBGCNDMM.js";
17
+ } from "./chunk-KFI7TQJ6.js";
18
+ import "./chunk-B2CPS4QU.js";
19
19
  import "./chunk-K3NQKI34.js";
20
20
 
21
21
  // src/commands/connector.ts
@@ -40,8 +40,8 @@ async function run(args) {
40
40
  }
41
41
  function printUsage() {
42
42
  console.log(`Usage:
43
- volute connector connect <type> [--mind <name>]
44
- volute connector disconnect <type> [--mind <name>]`);
43
+ volute mind connect <type> [--mind <name>]
44
+ volute mind disconnect <type> [--mind <name>]`);
45
45
  }
46
46
  async function connectConnector(args) {
47
47
  const { positional, flags } = parseArgs(args, {
@@ -50,7 +50,7 @@ async function connectConnector(args) {
50
50
  const mindName = resolveMindName(flags);
51
51
  const type = positional[0];
52
52
  if (!type) {
53
- console.error("Usage: volute connector connect <type> [--mind <name>]");
53
+ console.error("Usage: volute mind connect <type> [--mind <name>]");
54
54
  process.exit(1);
55
55
  }
56
56
  const client = getClient();
@@ -123,7 +123,7 @@ async function disconnectConnector(args) {
123
123
  const mindName = resolveMindName(flags);
124
124
  const type = positional[0];
125
125
  if (!type) {
126
- console.error("Usage: volute connector disconnect <type> [--mind <name>]");
126
+ console.error("Usage: volute mind disconnect <type> [--mind <name>]");
127
127
  process.exit(1);
128
128
  }
129
129
  const client = getClient();
@@ -7,8 +7,8 @@ import {
7
7
  sendToMind,
8
8
  slugify,
9
9
  writeChannelEntry
10
- } from "../chunk-RHEGSQFJ.js";
11
- import "../chunk-EBGCNDMM.js";
10
+ } from "../chunk-WSLPZF72.js";
11
+ import "../chunk-B2CPS4QU.js";
12
12
  import "../chunk-K3NQKI34.js";
13
13
 
14
14
  // src/connectors/discord.ts
@@ -6,8 +6,8 @@ import {
6
6
  onShutdown,
7
7
  sendToMind,
8
8
  writeChannelEntry
9
- } from "../chunk-RHEGSQFJ.js";
10
- import "../chunk-EBGCNDMM.js";
9
+ } from "../chunk-WSLPZF72.js";
10
+ import "../chunk-B2CPS4QU.js";
11
11
  import "../chunk-K3NQKI34.js";
12
12
 
13
13
  // src/connectors/slack.ts
@@ -5,8 +5,8 @@ import {
5
5
  loadFollowedChannels,
6
6
  sendToMind,
7
7
  writeChannelEntry
8
- } from "../chunk-RHEGSQFJ.js";
9
- import "../chunk-EBGCNDMM.js";
8
+ } from "../chunk-WSLPZF72.js";
9
+ import "../chunk-B2CPS4QU.js";
10
10
  import "../chunk-K3NQKI34.js";
11
11
 
12
12
  // src/connectors/telegram.ts
@@ -17,7 +17,7 @@ async function run(args) {
17
17
  process.exit(1);
18
18
  }
19
19
  const skills = flags.skills === "none" ? [] : flags.skills ? flags.skills.split(",") : void 0;
20
- const { daemonFetch } = await import("./daemon-client-ITWUCNFO.js");
20
+ const { daemonFetch } = await import("./daemon-client-ZHCDL4RS.js");
21
21
  const { getClient, urlOf } = await import("./api-client-YPKOZP2O.js");
22
22
  const client = getClient();
23
23
  const res = await daemonFetch(urlOf(client.api.minds.$url()), {
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  daemonFetch
4
- } from "./chunk-WC6ZHVRL.js";
5
- import "./chunk-EBGCNDMM.js";
4
+ } from "./chunk-KFI7TQJ6.js";
5
+ import "./chunk-B2CPS4QU.js";
6
6
  import "./chunk-K3NQKI34.js";
7
7
  export {
8
8
  daemonFetch
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- stopDaemon
4
- } from "./chunk-7NO7EV5Z.js";
5
2
  import {
6
3
  run
7
- } from "./chunk-VE4D3GOP.js";
4
+ } from "./chunk-J5A3DF2U.js";
5
+ import {
6
+ stopDaemon
7
+ } from "./chunk-Q7AITQ44.js";
8
8
  import {
9
9
  getServiceMode,
10
10
  modeLabel,
11
11
  pollHealth,
12
12
  readDaemonConfig,
13
13
  restartService
14
- } from "./chunk-32VR2EOH.js";
14
+ } from "./chunk-QUJUKM4U.js";
15
15
  import "./chunk-D424ZQGI.js";
16
- import "./chunk-DYZGP3EW.js";
17
- import "./chunk-OGXOMR65.js";
18
- import "./chunk-EBGCNDMM.js";
16
+ import "./chunk-IPJXU366.js";
17
+ import "./chunk-NWPT4ASZ.js";
18
+ import "./chunk-B2CPS4QU.js";
19
19
  import "./chunk-K3NQKI34.js";
20
20
 
21
21
  // src/commands/daemon-restart.ts