volute 0.25.0 → 0.27.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 (145) hide show
  1. package/README.md +28 -33
  2. package/dist/{activity-events-4O37J7PD.js → activity-events-BBIEA2F4.js} +2 -3
  3. package/dist/api.d.ts +886 -220
  4. package/dist/{archive-4ZQYK5MN.js → archive-UA4BDFXQ.js} +2 -2
  5. package/dist/{auth-HM2RSPY7.js → auth-D3OT2ARB.js} +3 -3
  6. package/dist/bridge-FQHZL3MC.js +206 -0
  7. package/dist/chat-MHJ3L6JQ.js +58 -0
  8. package/dist/{chunk-PHU4DEAJ.js → chunk-2WPW7OT6.js} +3 -3
  9. package/dist/{chunk-BOTQ25QT.js → chunk-2YP2TVDT.js} +138 -56
  10. package/dist/{chunk-DG7TO7EE.js → chunk-4WXYUOAK.js} +5 -7
  11. package/dist/{chunk-JTDFJWI2.js → chunk-AW7PFDVN.js} +5 -5
  12. package/dist/{chunk-2767L2RZ.js → chunk-EHYDTZTF.js} +6 -6
  13. package/dist/{chunk-ZSH4G2P5.js → chunk-GIE6CSN5.js} +17 -17
  14. package/dist/chunk-H7OZRFJB.js +432 -0
  15. package/dist/{chunk-ON3FF5JA.js → chunk-HDN7MNGD.js} +3 -3
  16. package/dist/chunk-IAYBDWVG.js +477 -0
  17. package/dist/chunk-IKRVFPWU.js +83 -0
  18. package/dist/{chunk-TRQEV3CD.js → chunk-JGFVMROS.js} +32 -6
  19. package/dist/{chunk-PHHKNGA3.js → chunk-JKOWNZ4P.js} +3 -3
  20. package/dist/{chunk-E7GOKNOT.js → chunk-K5NAC55T.js} +1 -1
  21. package/dist/{chunk-HFCBO2GL.js → chunk-KDGS53OS.js} +4 -4
  22. package/dist/chunk-KTLFDYPT.js +61 -0
  23. package/dist/{chunk-3AIBT4TW.js → chunk-LAC664WU.js} +30 -4
  24. package/dist/{chunk-PMX4EIJK.js → chunk-OQZH4PBB.js} +467 -1054
  25. package/dist/{chunk-SHSWYG2J.js → chunk-PHSAT7YL.js} +71 -58
  26. package/dist/chunk-RKQEHRBB.js +177 -0
  27. package/dist/{chunk-RVKR2R7F.js → chunk-SSI47XP2.js} +10 -2
  28. package/dist/chunk-T6HKBWXZ.js +23 -0
  29. package/dist/chunk-USUXRNVD.js +113 -0
  30. package/dist/{chunk-BFK6SOEJ.js → chunk-VIVMW2H2.js} +4 -4
  31. package/dist/{chunk-KTJGZ7M7.js → chunk-XBLSAVJF.js} +1 -1
  32. package/dist/chunk-ZYGKG6VC.js +22 -0
  33. package/dist/cli.js +51 -32
  34. package/dist/{cloud-sync-PPBBJDY6.js → cloud-sync-T7M3ESC3.js} +15 -12
  35. package/dist/connectors/discord-bridge.js +158 -0
  36. package/dist/connectors/slack-bridge.js +119 -0
  37. package/dist/connectors/telegram-bridge.js +133 -0
  38. package/dist/conversations-M2K4253F.js +55 -0
  39. package/dist/create-D7J73A6H.js +45 -0
  40. package/dist/{create-VDQJER52.js → create-QWV73WXD.js} +1 -1
  41. package/dist/{daemon-client-JOVQZ52X.js → daemon-client-I42FK2BF.js} +2 -2
  42. package/dist/{daemon-restart-FDNOZEAD.js → daemon-restart-M2QTYMEG.js} +7 -6
  43. package/dist/daemon.js +2247 -1085
  44. package/dist/db-IC4J52XQ.js +8 -0
  45. package/dist/{delete-2MRR4JX5.js → delete-4JYGD4VN.js} +1 -1
  46. package/dist/down-LVBXEULC.js +14 -0
  47. package/dist/{env-2FPOZK37.js → env-YJMUMFIY.js} +5 -5
  48. package/dist/{export-IKFAPRAO.js → export-BOJQWBMA.js} +4 -4
  49. package/dist/{file-KT3UIQM3.js → file-CR36YUPD.js} +4 -4
  50. package/dist/{history-46WZN5CN.js → history-XKRTAFS2.js} +7 -7
  51. package/dist/{import-TH26J76F.js → import-SRTQXBGH.js} +4 -4
  52. package/dist/join-J4QU42DL.js +66 -0
  53. package/dist/list-R73GENNL.js +40 -0
  54. package/dist/{log-6SGSSR3D.js → log-ABYNVYJ3.js} +4 -4
  55. package/dist/login-3QZNR2DF.js +46 -0
  56. package/dist/{login-UO6AOVEA.js → login-XX37I52P.js} +3 -3
  57. package/dist/logout-T53VKCPU.js +39 -0
  58. package/dist/{logout-UKD5LA37.js → logout-W4KOOBIT.js} +2 -2
  59. package/dist/{logs-HRBONI5I.js → logs-U35JR2KE.js} +7 -7
  60. package/dist/{merge-KSFJKX6T.js → merge-LNSMSAOF.js} +4 -4
  61. package/dist/message-delivery-LDXLGERA.js +25 -0
  62. package/dist/migrate-registry-to-db-XC7T5B7P.js +110 -0
  63. package/dist/{mind-YVWAHL2A.js → mind-DI33C74K.js} +25 -25
  64. package/dist/{mind-activity-tracker-NMDDEV3K.js → mind-activity-tracker-EN6XNXPF.js} +3 -4
  65. package/dist/{mind-manager-4NDNAYAB.js → mind-manager-M6EMUW5I.js} +6 -5
  66. package/dist/{mind-sleep-GHPTSAYN.js → mind-sleep-BTSWQNAC.js} +4 -4
  67. package/dist/{mind-wake-BJDJFMDF.js → mind-wake-SBAKIDVP.js} +4 -4
  68. package/dist/notes-XCER3I7M.js +220 -0
  69. package/dist/{package-3HF5MXU2.js → package-7WY6VKU3.js} +2 -1
  70. package/dist/{pages-Y6DRWUOJ.js → pages-6EBS6CBR.js} +2 -2
  71. package/dist/{publish-EEKTZBHW.js → publish-66UB2ZFY.js} +5 -5
  72. package/dist/{pull-D32SPFVU.js → pull-XCHJTM5M.js} +4 -4
  73. package/dist/read-36UFXN3G.js +46 -0
  74. package/dist/{register-U2UO6TC4.js → register-6B2CXTYM.js} +3 -3
  75. package/dist/{registry-D2BSQ2X5.js → registry-NDNOOYG4.js} +15 -9
  76. package/dist/{restart-5BMNV7KU.js → restart-6ESL3NBO.js} +6 -6
  77. package/dist/sandbox-TGBX22DS.js +19 -0
  78. package/dist/{schedule-YEFDLVMJ.js → schedule-QTJMFATP.js} +7 -7
  79. package/dist/{seed-6FEKB3YC.js → seed-SSUCYYDF.js} +2 -2
  80. package/dist/{send-IISDYFCL.js → send-ZNCJDSRP.js} +28 -36
  81. package/dist/service-6LIN3F3K.js +122 -0
  82. package/dist/setup-JG4QAEBV.js +371 -0
  83. package/dist/setup-JHL5ZEST.js +17 -0
  84. package/dist/{shared-LWMNTTZN.js → shared-ML5I4Q2A.js} +4 -4
  85. package/dist/{skill-T3EMR6IR.js → skill-AUAQTSP5.js} +7 -7
  86. package/dist/skills/dreaming/SKILL.md +68 -0
  87. package/dist/skills/dreaming/references/INSTALL.md +56 -0
  88. package/dist/skills/dreaming/scripts/dream.ts +289 -0
  89. package/dist/skills/dreaming/scripts/wake-context-dreams.sh +30 -0
  90. package/dist/skills/notes/SKILL.md +34 -0
  91. package/dist/skills/orientation/SKILL.md +3 -3
  92. package/dist/skills/volute-mind/SKILL.md +32 -30
  93. package/dist/sleep-manager-MWYHM5HV.js +29 -0
  94. package/dist/split-TKJ5OT3P.js +63 -0
  95. package/dist/{sprout-QJVGJDSH.js → sprout-IJVVKSJ2.js} +6 -7
  96. package/dist/{start-C7XITZ5O.js → start-EUJSS5R4.js} +4 -4
  97. package/dist/{status-SIRPLEZC.js → status-77YEPHMW.js} +5 -5
  98. package/dist/{status-LYS4NUOZ.js → status-7GA4SM4Y.js} +4 -4
  99. package/dist/{status-LV34BG6G.js → status-THLOBLWG.js} +2 -2
  100. package/dist/{stop-CVKBSLXY.js → stop-3XAITBBF.js} +6 -6
  101. package/dist/{tailscale-AJ4VL5XK.js → tailscale-NY5MUMY3.js} +1 -1
  102. package/dist/up-NKSMXBWR.js +17 -0
  103. package/dist/{update-7XCZMYBT.js → update-PTSH22AZ.js} +11 -11
  104. package/dist/{update-check-F5Z3ALXX.js → update-check-64FWC4Y2.js} +2 -2
  105. package/dist/{upgrade-7RUIXGOO.js → upgrade-HA47CS4C.js} +12 -5
  106. package/dist/variant-7TGZHOU3.js +41 -0
  107. package/dist/{version-notify-AZQMC32A.js → version-notify-5Z4MNR6M.js} +26 -28
  108. package/dist/web-assets/assets/index-CI5wgghI.css +1 -0
  109. package/dist/web-assets/assets/index-is5CvJWH.js +75 -0
  110. package/dist/web-assets/favicon.png +0 -0
  111. package/dist/web-assets/index.html +2 -2
  112. package/drizzle/0015_notes.sql +23 -0
  113. package/drizzle/0016_note_reactions_and_replies.sql +15 -0
  114. package/drizzle/0017_minds.sql +16 -0
  115. package/drizzle/meta/_journal.json +21 -0
  116. package/package.json +2 -1
  117. package/templates/_base/.init/.config/hooks/wake-context.sh +7 -0
  118. package/templates/_base/.init/.config/prompts.json +2 -2
  119. package/templates/_base/home/VOLUTE.md +5 -5
  120. package/templates/_base/src/lib/startup.ts +10 -2
  121. package/templates/claude/src/agent.ts +51 -1
  122. package/templates/claude/src/server.ts +1 -0
  123. package/templates/pi/package.json.tmpl +1 -0
  124. package/templates/pi/src/agent.ts +48 -1
  125. package/templates/pi/src/lib/subagents.ts +150 -0
  126. package/templates/pi/src/server.ts +1 -0
  127. package/dist/channel-HZOSHGNF.js +0 -260
  128. package/dist/chunk-33XAVCS4.js +0 -203
  129. package/dist/chunk-B2CPS4QU.js +0 -283
  130. package/dist/chunk-NWPT4ASZ.js +0 -89
  131. package/dist/chunk-SIAG3QMM.js +0 -42
  132. package/dist/chunk-WSLPZF72.js +0 -173
  133. package/dist/connector-M6XFI6GM.js +0 -147
  134. package/dist/connectors/discord.js +0 -177
  135. package/dist/connectors/slack.js +0 -181
  136. package/dist/connectors/telegram.js +0 -187
  137. package/dist/down-674SX2IZ.js +0 -14
  138. package/dist/message-delivery-XMGV3FUM.js +0 -23
  139. package/dist/service-FASYWLTC.js +0 -247
  140. package/dist/setup-BMLM2UTK.js +0 -230
  141. package/dist/sleep-manager-RKTFZPD3.js +0 -27
  142. package/dist/up-CJ26KQLN.js +0 -15
  143. package/dist/variant-UGREB4G5.js +0 -207
  144. package/dist/web-assets/assets/index-CGPSVu19.js +0 -69
  145. package/dist/web-assets/assets/index-V_rNDsM8.css +0 -1
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/connectors/bridge-sdk.ts
4
+ function loadBridgeEnv() {
5
+ const daemonUrl = process.env.VOLUTE_DAEMON_URL;
6
+ const daemonToken = process.env.VOLUTE_DAEMON_TOKEN;
7
+ const platform = process.env.VOLUTE_BRIDGE_PLATFORM;
8
+ if (!daemonUrl || !daemonToken || !platform) {
9
+ console.error(
10
+ "Missing required env vars: VOLUTE_DAEMON_URL, VOLUTE_DAEMON_TOKEN, VOLUTE_BRIDGE_PLATFORM"
11
+ );
12
+ process.exit(1);
13
+ }
14
+ return { daemonUrl, daemonToken, platform };
15
+ }
16
+ function getHeaders(env) {
17
+ return {
18
+ "Content-Type": "application/json",
19
+ Authorization: `Bearer ${env.daemonToken}`,
20
+ Origin: env.daemonUrl
21
+ };
22
+ }
23
+ async function sendToBridge(env, message) {
24
+ const url = `${env.daemonUrl}/api/bridges/${env.platform}/inbound`;
25
+ try {
26
+ const res = await fetch(url, {
27
+ method: "POST",
28
+ headers: getHeaders(env),
29
+ body: JSON.stringify(message)
30
+ });
31
+ if (!res.ok) {
32
+ const body = await res.text().catch(() => "");
33
+ console.error(`Bridge inbound returned ${res.status}: ${body}`);
34
+ return { ok: false, error: `Bridge returned ${res.status}` };
35
+ }
36
+ return await res.json();
37
+ } catch (err) {
38
+ const detail = err instanceof Error ? err.message : String(err);
39
+ console.error(`Failed to send bridge message: ${detail}`);
40
+ return { ok: false, error: `Failed to reach daemon: ${detail}` };
41
+ }
42
+ }
43
+ function onShutdown(cleanup) {
44
+ const handler = () => {
45
+ Promise.resolve(cleanup()).then(
46
+ () => process.exit(0),
47
+ (err) => {
48
+ console.error(`Shutdown error: ${err}`);
49
+ process.exit(1);
50
+ }
51
+ );
52
+ };
53
+ process.on("SIGINT", handler);
54
+ process.on("SIGTERM", handler);
55
+ }
56
+
57
+ export {
58
+ loadBridgeEnv,
59
+ sendToBridge,
60
+ onShutdown
61
+ };
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  execInherit
4
- } from "./chunk-JTDFJWI2.js";
4
+ } from "./chunk-AW7PFDVN.js";
5
5
  import {
6
- voluteHome
7
- } from "./chunk-B2CPS4QU.js";
6
+ voluteHome,
7
+ voluteSystemDir
8
+ } from "./chunk-H7OZRFJB.js";
8
9
 
9
10
  // src/lib/service-mode.ts
10
11
  import { execFileSync } from "child_process";
@@ -20,6 +21,7 @@ var LAUNCHD_PLIST_PATH = resolve(
20
21
  "LaunchAgents",
21
22
  `${LAUNCHD_PLIST_LABEL}.plist`
22
23
  );
24
+ var SYSTEM_LAUNCHD_PLIST_PATH = "/Library/LaunchDaemons/com.volute.daemon.plist";
23
25
  var HEALTH_POLL_TIMEOUT = 3e4;
24
26
  var STOP_GRACE_TIMEOUT = 1e4;
25
27
  var POLL_INTERVAL = 500;
@@ -38,6 +40,9 @@ function getServiceMode() {
38
40
  } catch {
39
41
  }
40
42
  }
43
+ if (process.platform === "darwin" && existsSync(SYSTEM_LAUNCHD_PLIST_PATH)) {
44
+ return "system-launchd";
45
+ }
41
46
  if (process.platform === "darwin" && existsSync(LAUNCHD_PLIST_PATH)) {
42
47
  return "user-launchd";
43
48
  }
@@ -92,6 +97,9 @@ async function startService(mode) {
92
97
  case "user-systemd":
93
98
  await execInherit("systemctl", ["--user", "start", "volute"]);
94
99
  break;
100
+ case "system-launchd":
101
+ await execInherit("sudo", ["launchctl", "load", SYSTEM_LAUNCHD_PLIST_PATH]);
102
+ break;
95
103
  case "user-launchd":
96
104
  await execInherit("launchctl", ["load", LAUNCHD_PLIST_PATH]);
97
105
  break;
@@ -105,6 +113,9 @@ async function stopService(mode) {
105
113
  case "user-systemd":
106
114
  await execInherit("systemctl", ["--user", "stop", "volute"]);
107
115
  break;
116
+ case "system-launchd":
117
+ await execInherit("sudo", ["launchctl", "unload", SYSTEM_LAUNCHD_PLIST_PATH]);
118
+ break;
108
119
  case "user-launchd":
109
120
  await execInherit("launchctl", ["unload", LAUNCHD_PLIST_PATH]);
110
121
  break;
@@ -118,6 +129,16 @@ async function restartService(mode) {
118
129
  case "user-systemd":
119
130
  await execInherit("systemctl", ["--user", "restart", "volute"]);
120
131
  break;
132
+ case "system-launchd":
133
+ try {
134
+ await execInherit("sudo", ["launchctl", "unload", SYSTEM_LAUNCHD_PLIST_PATH]);
135
+ } catch (err) {
136
+ console.warn(
137
+ `Warning: launchctl unload failed: ${err instanceof Error ? err.message : err}`
138
+ );
139
+ }
140
+ await execInherit("sudo", ["launchctl", "load", SYSTEM_LAUNCHD_PLIST_PATH]);
141
+ break;
121
142
  case "user-launchd":
122
143
  try {
123
144
  await execInherit("launchctl", ["unload", LAUNCHD_PLIST_PATH]);
@@ -131,7 +152,9 @@ async function restartService(mode) {
131
152
  }
132
153
  }
133
154
  function readDaemonConfig() {
134
- const configPath = resolve(voluteHome(), "daemon.json");
155
+ const newPath = resolve(voluteSystemDir(), "daemon.json");
156
+ const legacyPath = resolve(voluteHome(), "daemon.json");
157
+ const configPath = existsSync(newPath) ? newPath : legacyPath;
135
158
  if (!existsSync(configPath)) return { hostname: "127.0.0.1", port: 1618 };
136
159
  try {
137
160
  const config = JSON.parse(readFileSync(configPath, "utf-8"));
@@ -152,6 +175,8 @@ function modeLabel(mode) {
152
175
  return "system service (systemd)";
153
176
  case "user-systemd":
154
177
  return "user service (systemd)";
178
+ case "system-launchd":
179
+ return "system service (launchd)";
155
180
  case "user-launchd":
156
181
  return "user service (launchd)";
157
182
  case "manual":
@@ -164,6 +189,7 @@ export {
164
189
  USER_SYSTEMD_UNIT,
165
190
  LAUNCHD_PLIST_LABEL,
166
191
  LAUNCHD_PLIST_PATH,
192
+ SYSTEM_LAUNCHD_PLIST_PATH,
167
193
  getServiceMode,
168
194
  getDaemonUrl,
169
195
  pollHealth,