volute 0.35.0 → 0.36.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 (123) hide show
  1. package/dist/{activity-events-ZW4SDL2C.js → activity-events-PWOGSMRL.js} +4 -4
  2. package/dist/{ai-service-LURBEDDB.js → ai-service-GSZWIETO.js} +5 -5
  3. package/dist/{archive-ESU2FUN4.js → archive-Y2YEOCGB.js} +3 -3
  4. package/dist/{auth-WX4TESEI.js → auth-YTQME4EV.js} +5 -5
  5. package/dist/{chat-QXAJF3FU.js → chat-ED7YOGKO.js} +4 -4
  6. package/dist/{chunk-AOB6GVRM.js → chunk-46DYYHN6.js} +8 -3
  7. package/dist/{chunk-5XJYUFZH.js → chunk-6F3YNULE.js} +68 -22
  8. package/dist/{chunk-BDYXIWA5.js → chunk-75AJ54GM.js} +13 -2
  9. package/dist/{chunk-5N7Y5WAM.js → chunk-7PTQGPJY.js} +28 -12
  10. package/dist/{chunk-CORXD635.js → chunk-B35VNNSS.js} +3 -3
  11. package/dist/{chunk-PWQ2ITYG.js → chunk-BOLJUV77.js} +4 -4
  12. package/dist/{chunk-ZSR72JB3.js → chunk-CU6OFXMM.js} +1 -1
  13. package/dist/{chunk-2TGZJFAT.js → chunk-DJT5Y4UF.js} +3 -3
  14. package/dist/{chunk-XRQSAMX2.js → chunk-DMV5P2LU.js} +3 -3
  15. package/dist/{chunk-WJPROOU5.js → chunk-DQ7VBXAP.js} +635 -3692
  16. package/dist/{chunk-IJHIXLVN.js → chunk-GBDVNPN2.js} +13 -11
  17. package/dist/{chunk-WZRZFFCL.js → chunk-IIWF2IPD.js} +146 -186
  18. package/dist/{chunk-F7ZNLYKZ.js → chunk-KAB6UGOL.js} +2 -2
  19. package/dist/{chunk-VHJRZM2S.js → chunk-L72WYMF7.js} +2 -2
  20. package/dist/{chunk-NJK5SDGR.js → chunk-LGNUFVMR.js} +1 -1
  21. package/dist/{chunk-FT5KETXZ.js → chunk-M5RYAA5I.js} +2 -2
  22. package/dist/{chunk-J6CJQDWI.js → chunk-N2AUHW4C.js} +2 -2
  23. package/dist/{chunk-BMZQYACC.js → chunk-NUX47Y2V.js} +19 -4
  24. package/dist/{chunk-AN2W47GW.js → chunk-PJ4IPTIN.js} +2 -2
  25. package/dist/{chunk-N446KRP7.js → chunk-PY557GDR.js} +2 -2
  26. package/dist/{chunk-MDJGMOSD.js → chunk-PZYJBOQP.js} +6 -6
  27. package/dist/chunk-RG5TOL4O.js +18 -0
  28. package/dist/{chunk-N5LMGYXX.js → chunk-SWW6AUVW.js} +2 -2
  29. package/dist/{chunk-BKF4WQCY.js → chunk-T2TP6ZC6.js} +20 -8
  30. package/dist/{chunk-VY3RB2V7.js → chunk-TWAN7ZNO.js} +3 -3
  31. package/dist/{chunk-QCH6K235.js → chunk-UI7RPV2B.js} +1 -1
  32. package/dist/{chunk-QWTR6AWZ.js → chunk-X2J7QUFH.js} +2 -2
  33. package/dist/{chunk-A2ZLHBHG.js → chunk-YDBAY3NA.js} +2 -2
  34. package/dist/{chunk-BV65KRHM.js → chunk-YTWZORJN.js} +2 -2
  35. package/dist/{chunk-OTC67N2Z.js → chunk-ZTVKQOU7.js} +1 -1
  36. package/dist/cli.js +16 -16
  37. package/dist/{cloud-sync-6JL4C24T.js → cloud-sync-BOCZSDIA.js} +19 -20
  38. package/dist/connectors/discord-bridge.js +3 -3
  39. package/dist/connectors/slack-bridge.js +3 -3
  40. package/dist/connectors/telegram-bridge.js +3 -3
  41. package/dist/{conversations-2PW57WO2.js → conversations-HH3CJD4E.js} +15 -9
  42. package/dist/{create-UVCK2CS6.js → create-QBEPSD2Z.js} +1 -1
  43. package/dist/{daemon-restart-HSZ3BCX5.js → daemon-restart-SIR3UR4B.js} +10 -10
  44. package/dist/daemon.js +446 -328
  45. package/dist/{db-BVBJ57TU.js → db-URORGSXQ.js} +2 -2
  46. package/dist/delivery-manager-WTGIPBGY.js +30 -0
  47. package/dist/{delivery-router-HEJSJAHQ.js → delivery-router-VSULHXNH.js} +4 -4
  48. package/dist/down-DGGLZ5TA.js +17 -0
  49. package/dist/{exec-PY7THYH4.js → exec-X3C6ZZTQ.js} +4 -4
  50. package/dist/{export-OAS6QVBN.js → export-HTFOHOKL.js} +3 -3
  51. package/dist/{extension-D74CNM7G.js → extension-AKZ46YSL.js} +22 -3
  52. package/dist/{extensions-XDDFY72A.js → extensions-OOSFVH7U.js} +21 -20
  53. package/dist/{files-CWTK6V3H.js → files-H2YLRD37.js} +3 -3
  54. package/dist/{import-5A3T7QV4.js → import-OL5BZX7S.js} +6 -6
  55. package/dist/{isolation-TK5RX2WM.js → isolation-N74RWOUX.js} +3 -3
  56. package/dist/{list-PDMQM7ZV.js → list-GJ4RUQQT.js} +7 -1
  57. package/dist/{login-7TE6CIZF.js → login-JXRVMBRB.js} +2 -2
  58. package/dist/{logout-T4XS6LRU.js → logout-FW243JBU.js} +2 -2
  59. package/dist/message-delivery-YORUXKDQ.js +40 -0
  60. package/dist/{mind-5IEYKV7I.js → mind-6VJJHF65.js} +6 -6
  61. package/dist/{mind-activity-tracker-QBLIV7ZJ.js → mind-activity-tracker-66UVYIFW.js} +5 -5
  62. package/dist/{mind-history-IE2QH7U5.js → mind-history-MII2SK7F.js} +81 -14
  63. package/dist/mind-manager-TJ2SUPRX.js +30 -0
  64. package/dist/mind-service-E7FM2WZF.js +36 -0
  65. package/dist/{package-D2FSVFAX.js → package-3W2MEXHB.js} +5 -5
  66. package/dist/{read-67VRP2DO.js → read-ZUDG4JWU.js} +4 -4
  67. package/dist/{registry-GBSNW3HG.js → registry-YPHK534W.js} +2 -2
  68. package/dist/{sandbox-R37VIU36.js → sandbox-LP6YRAXS.js} +5 -5
  69. package/dist/scheduler-FRJ5DK24.js +30 -0
  70. package/dist/{schema-XVZ2CLKW.js → schema-MISD3JFG.js} +3 -1
  71. package/dist/{seed-EQORWX77.js → seed-CEC4RC23.js} +1 -1
  72. package/dist/{seed-cmd-ZM2XGVU2.js → seed-cmd-WTTG7SRQ.js} +2 -2
  73. package/dist/{seed-create-DRWGGHEI.js → seed-create-M6RCC6RP.js} +3 -3
  74. package/dist/{seed-sprout-JYXGXOP3.js → seed-sprout-ZKCHFJKH.js} +10 -10
  75. package/dist/{send-JBJJQ7CA.js → send-LXUT2GGR.js} +3 -3
  76. package/dist/{service-WNPCNHOX.js → service-M6N3RUYU.js} +5 -5
  77. package/dist/{setup-BJ4YAY26.js → setup-PJOF5UV5.js} +7 -7
  78. package/dist/{setup-RHJRFURI.js → setup-PMJHCZQX.js} +5 -3
  79. package/dist/skills/tending/SKILL.md +52 -0
  80. package/dist/{skills-EKMCQ46K.js → skills-2PTRTBQP.js} +7 -7
  81. package/dist/sleep-manager-WAZWMFJT.js +34 -0
  82. package/dist/spirit-6KVDIROQ.js +24 -0
  83. package/dist/{sprout-HE4TITMK.js → sprout-WX2FFYLP.js} +1 -1
  84. package/dist/src-FQE4BHRG.js +617 -0
  85. package/dist/src-GW6FP6VL.js +425 -0
  86. package/dist/src-QEOLMAYC.js +2133 -0
  87. package/dist/{status-ZK34WYIM.js → status-3IVSLJDN.js} +6 -6
  88. package/dist/system-chat-2IFS5HCX.js +34 -0
  89. package/dist/{tailscale-ZIZ2HWJ5.js → tailscale-DZU4WM3E.js} +3 -3
  90. package/dist/{template-hash-A7FNHTB7.js → template-hash-6ITI3WC4.js} +2 -2
  91. package/dist/up-4SCIUIMG.js +19 -0
  92. package/dist/{update-ANE5ZM7F.js → update-RIQYUPVN.js} +6 -6
  93. package/dist/{update-check-UV55CBEP.js → update-check-4TIJKVGD.js} +3 -3
  94. package/dist/{version-notify-FXSEMXWW.js → version-notify-UXSHBZ35.js} +21 -22
  95. package/dist/{volute-config-D2XVS2YI.js → volute-config-V7UFFBG3.js} +1 -1
  96. package/dist/web-assets/assets/index-C-eYso8Y.js +75 -0
  97. package/dist/web-assets/assets/index-CCv_fSte.css +1 -0
  98. package/dist/web-assets/index.html +2 -2
  99. package/drizzle/0006_channels.sql +17 -0
  100. package/drizzle/0007_drop_conversation_name_title.sql +11 -0
  101. package/drizzle/0008_performance_indexes.sql +6 -0
  102. package/drizzle/meta/0006_snapshot.json +7 -0
  103. package/drizzle/meta/0007_snapshot.json +7 -0
  104. package/drizzle/meta/_journal.json +21 -0
  105. package/package.json +5 -5
  106. package/templates/_base/home/.config/routes.json +2 -2
  107. package/templates/_base/home/VOLUTE.md +1 -2
  108. package/templates/_base/src/lib/format-prefix.ts +1 -7
  109. package/templates/claude/.init/.config/routes.json +2 -2
  110. package/templates/codex/.init/.config/routes.json +2 -2
  111. package/templates/pi/.init/.config/routes.json +2 -2
  112. package/dist/delivery-manager-H5ZVBMCQ.js +0 -31
  113. package/dist/down-74VXM45A.js +0 -17
  114. package/dist/message-delivery-GRC4W6P7.js +0 -41
  115. package/dist/mind-manager-HFLB5653.js +0 -31
  116. package/dist/mind-service-X2CAA6W6.js +0 -37
  117. package/dist/scheduler-Y7O4CJXL.js +0 -31
  118. package/dist/sleep-manager-7KFK3USC.js +0 -35
  119. package/dist/spirit-ZFRDXMG7.js +0 -23
  120. package/dist/system-chat-IDPHYHY4.js +0 -35
  121. package/dist/up-77ICEDEW.js +0 -19
  122. package/dist/web-assets/assets/index-BhxWKvbB.css +0 -1
  123. package/dist/web-assets/assets/index-CHVKJ9II.js +0 -75
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  getDb
4
- } from "./chunk-BDYXIWA5.js";
5
- import "./chunk-5N7Y5WAM.js";
4
+ } from "./chunk-75AJ54GM.js";
5
+ import "./chunk-7PTQGPJY.js";
6
6
  import "./chunk-7KJOFUNN.js";
7
7
  export {
8
8
  getDb
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ DeliveryManager,
4
+ getDeliveryManager,
5
+ initDeliveryManager
6
+ } from "./chunk-DQ7VBXAP.js";
7
+ import "./chunk-6F3YNULE.js";
8
+ import "./chunk-46DYYHN6.js";
9
+ import "./chunk-GBDVNPN2.js";
10
+ import "./chunk-PY557GDR.js";
11
+ import "./chunk-DMV5P2LU.js";
12
+ import "./chunk-IIWF2IPD.js";
13
+ import "./chunk-B35VNNSS.js";
14
+ import "./chunk-CU6OFXMM.js";
15
+ import "./chunk-BOLJUV77.js";
16
+ import "./chunk-X2J7QUFH.js";
17
+ import "./chunk-YDBAY3NA.js";
18
+ import "./chunk-M5RYAA5I.js";
19
+ import "./chunk-T2TP6ZC6.js";
20
+ import "./chunk-PJ4IPTIN.js";
21
+ import "./chunk-L72WYMF7.js";
22
+ import "./chunk-NUX47Y2V.js";
23
+ import "./chunk-75AJ54GM.js";
24
+ import "./chunk-7PTQGPJY.js";
25
+ import "./chunk-7KJOFUNN.js";
26
+ export {
27
+ DeliveryManager,
28
+ getDeliveryManager,
29
+ initDeliveryManager
30
+ };
@@ -6,10 +6,10 @@ import {
6
6
  registerMindDir,
7
7
  resolveDeliveryMode,
8
8
  resolveRoute
9
- } from "./chunk-QWTR6AWZ.js";
10
- import "./chunk-BKF4WQCY.js";
11
- import "./chunk-BDYXIWA5.js";
12
- import "./chunk-5N7Y5WAM.js";
9
+ } from "./chunk-X2J7QUFH.js";
10
+ import "./chunk-T2TP6ZC6.js";
11
+ import "./chunk-75AJ54GM.js";
12
+ import "./chunk-7PTQGPJY.js";
13
13
  import "./chunk-7KJOFUNN.js";
14
14
  export {
15
15
  clearConfigCache,
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ run,
4
+ stopDaemon
5
+ } from "./chunk-N2AUHW4C.js";
6
+ import "./chunk-DJT5Y4UF.js";
7
+ import "./chunk-TXSA4Q3V.js";
8
+ import "./chunk-O7IGP7ZW.js";
9
+ import "./chunk-PJ4IPTIN.js";
10
+ import "./chunk-L72WYMF7.js";
11
+ import "./chunk-75AJ54GM.js";
12
+ import "./chunk-7PTQGPJY.js";
13
+ import "./chunk-7KJOFUNN.js";
14
+ export {
15
+ run,
16
+ stopDaemon
17
+ };
@@ -4,10 +4,10 @@ import {
4
4
  execInherit,
5
5
  gitExec,
6
6
  resolveVoluteBin
7
- } from "./chunk-AN2W47GW.js";
8
- import "./chunk-VHJRZM2S.js";
9
- import "./chunk-BDYXIWA5.js";
10
- import "./chunk-5N7Y5WAM.js";
7
+ } from "./chunk-PJ4IPTIN.js";
8
+ import "./chunk-L72WYMF7.js";
9
+ import "./chunk-75AJ54GM.js";
10
+ import "./chunk-7PTQGPJY.js";
11
11
  import "./chunk-7KJOFUNN.js";
12
12
  export {
13
13
  exec,
@@ -6,12 +6,12 @@ import "./chunk-O7IGP7ZW.js";
6
6
  import {
7
7
  addHistoryToArchive,
8
8
  createExportArchive
9
- } from "./chunk-N5LMGYXX.js";
9
+ } from "./chunk-SWW6AUVW.js";
10
10
  import {
11
11
  findMind,
12
12
  mindDir
13
- } from "./chunk-BDYXIWA5.js";
14
- import "./chunk-5N7Y5WAM.js";
13
+ } from "./chunk-75AJ54GM.js";
14
+ import "./chunk-7PTQGPJY.js";
15
15
  import "./chunk-7KJOFUNN.js";
16
16
 
17
17
  // packages/cli/src/commands/export.ts
@@ -9,8 +9,10 @@ import {
9
9
  import "./chunk-7KJOFUNN.js";
10
10
 
11
11
  // packages/cli/src/commands/extension.ts
12
- async function listExtensions() {
13
- const res = await daemonFetch("/api/extensions/all");
12
+ async function listExtensions(args) {
13
+ const detail = args.includes("--detail");
14
+ const url = detail ? "/api/extensions/all?detail=true" : "/api/extensions/all";
15
+ const res = await daemonFetch(url);
14
16
  if (!res.ok) {
15
17
  const body = await res.json().catch(() => ({ error: "Unknown error" }));
16
18
  console.error(`Error: ${body.error}`);
@@ -26,6 +28,23 @@ async function listExtensions() {
26
28
  const status = ext.enabled ? "enabled" : "disabled";
27
29
  console.log(` ${ext.id} \u2014 ${ext.name} v${ext.version} (${ext.source}, ${status})`);
28
30
  if (ext.description) console.log(` ${ext.description}`);
31
+ if (detail) {
32
+ if (ext.skills?.length) console.log(` Skills: ${ext.skills.join(", ")}`);
33
+ if (ext.commands) {
34
+ for (const [name, cmd2] of Object.entries(ext.commands)) {
35
+ console.log(` Command: ${name} \u2014 ${cmd2.description}`);
36
+ }
37
+ }
38
+ if (ext.mindSections?.length) {
39
+ console.log(` Mind tabs: ${ext.mindSections.map((s) => s.label).join(", ")}`);
40
+ }
41
+ if (ext.systemSection) {
42
+ console.log(` System tab: ${ext.systemSection.label}`);
43
+ }
44
+ if (ext.standardSkill) {
45
+ console.log(` Auto-installed on new minds`);
46
+ }
47
+ }
29
48
  }
30
49
  }
31
50
  async function installExtension(args) {
@@ -71,7 +90,7 @@ var cmd = subcommands({
71
90
  commands: {
72
91
  list: {
73
92
  description: "List installed extensions",
74
- run: async () => listExtensions()
93
+ run: listExtensions
75
94
  },
76
95
  install: {
77
96
  description: "Install a third-party extension",
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  getAllDiscoveredExtensions,
4
+ getAllDiscoveredExtensionsDetailed,
4
5
  getExtensionStandardSkills,
5
6
  getLoadedExtensions,
6
7
  installNpmExtension,
@@ -12,29 +13,29 @@ import {
12
13
  parseCommandArgs,
13
14
  setExtensionEnabled,
14
15
  uninstallNpmExtension
15
- } from "./chunk-WJPROOU5.js";
16
- import "./chunk-5XJYUFZH.js";
17
- import "./chunk-AOB6GVRM.js";
18
- import "./chunk-IJHIXLVN.js";
19
- import "./chunk-QWTR6AWZ.js";
20
- import "./chunk-N446KRP7.js";
21
- import "./chunk-QHG4OMZL.js";
22
- import "./chunk-XRQSAMX2.js";
23
- import "./chunk-WZRZFFCL.js";
24
- import "./chunk-CORXD635.js";
25
- import "./chunk-ZSR72JB3.js";
26
- import "./chunk-PWQ2ITYG.js";
27
- import "./chunk-A2ZLHBHG.js";
28
- import "./chunk-FT5KETXZ.js";
29
- import "./chunk-BKF4WQCY.js";
30
- import "./chunk-AN2W47GW.js";
31
- import "./chunk-VHJRZM2S.js";
32
- import "./chunk-BMZQYACC.js";
33
- import "./chunk-BDYXIWA5.js";
34
- import "./chunk-5N7Y5WAM.js";
16
+ } from "./chunk-DQ7VBXAP.js";
17
+ import "./chunk-6F3YNULE.js";
18
+ import "./chunk-46DYYHN6.js";
19
+ import "./chunk-GBDVNPN2.js";
20
+ import "./chunk-PY557GDR.js";
21
+ import "./chunk-DMV5P2LU.js";
22
+ import "./chunk-IIWF2IPD.js";
23
+ import "./chunk-B35VNNSS.js";
24
+ import "./chunk-CU6OFXMM.js";
25
+ import "./chunk-BOLJUV77.js";
26
+ import "./chunk-X2J7QUFH.js";
27
+ import "./chunk-YDBAY3NA.js";
28
+ import "./chunk-M5RYAA5I.js";
29
+ import "./chunk-T2TP6ZC6.js";
30
+ import "./chunk-PJ4IPTIN.js";
31
+ import "./chunk-L72WYMF7.js";
32
+ import "./chunk-NUX47Y2V.js";
33
+ import "./chunk-75AJ54GM.js";
34
+ import "./chunk-7PTQGPJY.js";
35
35
  import "./chunk-7KJOFUNN.js";
36
36
  export {
37
37
  getAllDiscoveredExtensions,
38
+ getAllDiscoveredExtensionsDetailed,
38
39
  getExtensionStandardSkills,
39
40
  getLoadedExtensions,
40
41
  installNpmExtension,
@@ -11,9 +11,9 @@ import {
11
11
  } from "./chunk-ZX7EAV5J.js";
12
12
  import {
13
13
  formatFileSize
14
- } from "./chunk-BV65KRHM.js";
15
- import "./chunk-BDYXIWA5.js";
16
- import "./chunk-5N7Y5WAM.js";
14
+ } from "./chunk-YTWZORJN.js";
15
+ import "./chunk-75AJ54GM.js";
16
+ import "./chunk-7PTQGPJY.js";
17
17
  import "./chunk-7KJOFUNN.js";
18
18
 
19
19
  // packages/cli/src/commands/chat/files.ts
@@ -8,11 +8,11 @@ import {
8
8
  importPiSession,
9
9
  parseNameFromIdentity,
10
10
  sessionMatchesWorkspace
11
- } from "./chunk-MDJGMOSD.js";
12
- import "./chunk-A2ZLHBHG.js";
13
- import "./chunk-BKF4WQCY.js";
14
- import "./chunk-BDYXIWA5.js";
15
- import "./chunk-5N7Y5WAM.js";
11
+ } from "./chunk-PZYJBOQP.js";
12
+ import "./chunk-YDBAY3NA.js";
13
+ import "./chunk-T2TP6ZC6.js";
14
+ import "./chunk-75AJ54GM.js";
15
+ import "./chunk-7PTQGPJY.js";
16
16
  import "./chunk-7KJOFUNN.js";
17
17
 
18
18
  // packages/cli/src/commands/import.ts
@@ -71,7 +71,7 @@ async function importArchive(archivePath, nameOverride) {
71
71
  console.error(`File not found: ${archivePath}`);
72
72
  process.exit(1);
73
73
  }
74
- const { extractArchive } = await import("./archive-ESU2FUN4.js");
74
+ const { extractArchive } = await import("./archive-Y2YEOCGB.js");
75
75
  const tempDir = resolve(tmpdir(), `volute-import-${Date.now()}`);
76
76
  mkdirSync(tempDir, { recursive: true });
77
77
  let extracted;
@@ -7,9 +7,9 @@ import {
7
7
  isIsolationEnabled,
8
8
  mindUserName,
9
9
  wrapForIsolation
10
- } from "./chunk-VHJRZM2S.js";
11
- import "./chunk-BDYXIWA5.js";
12
- import "./chunk-5N7Y5WAM.js";
10
+ } from "./chunk-L72WYMF7.js";
11
+ import "./chunk-75AJ54GM.js";
12
+ import "./chunk-7PTQGPJY.js";
13
13
  import "./chunk-7KJOFUNN.js";
14
14
  export {
15
15
  chownMindDir,
@@ -35,7 +35,13 @@ var cmd = command({
35
35
  }
36
36
  const compact = isCompact();
37
37
  for (const conv of convs) {
38
- const label = conv.type === "channel" ? `#${conv.name}` : conv.title ?? conv.id.slice(0, 8);
38
+ let label;
39
+ if (conv.type === "channel" && conv.channel_name) {
40
+ label = `#${conv.channel_name}`;
41
+ } else {
42
+ const other = conv.participants?.find((p) => p.username !== mindName);
43
+ label = other ? `@${other.username}` : conv.id.slice(0, 8);
44
+ }
39
45
  if (compact) {
40
46
  console.log(`${label} (${conv.type})`);
41
47
  } else {
@@ -12,8 +12,8 @@ import {
12
12
  } from "./chunk-ZX7EAV5J.js";
13
13
  import {
14
14
  voluteUserHome
15
- } from "./chunk-BDYXIWA5.js";
16
- import "./chunk-5N7Y5WAM.js";
15
+ } from "./chunk-75AJ54GM.js";
16
+ import "./chunk-7PTQGPJY.js";
17
17
  import "./chunk-7KJOFUNN.js";
18
18
 
19
19
  // packages/cli/src/commands/login.ts
@@ -8,8 +8,8 @@ import {
8
8
  } from "./chunk-ZX7EAV5J.js";
9
9
  import {
10
10
  voluteUserHome
11
- } from "./chunk-BDYXIWA5.js";
12
- import "./chunk-5N7Y5WAM.js";
11
+ } from "./chunk-75AJ54GM.js";
12
+ import "./chunk-7PTQGPJY.js";
13
13
  import "./chunk-7KJOFUNN.js";
14
14
 
15
15
  // packages/cli/src/commands/logout.ts
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ deliverMessage,
4
+ linkToolResultToTurn,
5
+ recordInbound,
6
+ recordOutbound,
7
+ resolveSleepAction,
8
+ tagRecentInbound,
9
+ tagUntaggedInbound,
10
+ tagUntaggedOutbound
11
+ } from "./chunk-DQ7VBXAP.js";
12
+ import "./chunk-6F3YNULE.js";
13
+ import "./chunk-46DYYHN6.js";
14
+ import "./chunk-GBDVNPN2.js";
15
+ import "./chunk-PY557GDR.js";
16
+ import "./chunk-DMV5P2LU.js";
17
+ import "./chunk-IIWF2IPD.js";
18
+ import "./chunk-B35VNNSS.js";
19
+ import "./chunk-CU6OFXMM.js";
20
+ import "./chunk-BOLJUV77.js";
21
+ import "./chunk-X2J7QUFH.js";
22
+ import "./chunk-YDBAY3NA.js";
23
+ import "./chunk-M5RYAA5I.js";
24
+ import "./chunk-T2TP6ZC6.js";
25
+ import "./chunk-PJ4IPTIN.js";
26
+ import "./chunk-L72WYMF7.js";
27
+ import "./chunk-NUX47Y2V.js";
28
+ import "./chunk-75AJ54GM.js";
29
+ import "./chunk-7PTQGPJY.js";
30
+ import "./chunk-7KJOFUNN.js";
31
+ export {
32
+ deliverMessage,
33
+ linkToolResultToTurn,
34
+ recordInbound,
35
+ recordOutbound,
36
+ resolveSleepAction,
37
+ tagRecentInbound,
38
+ tagUntaggedInbound,
39
+ tagUntaggedOutbound
40
+ };
@@ -18,7 +18,7 @@ var cmd = subcommands({
18
18
  commands: {
19
19
  create: {
20
20
  description: "Create a new mind",
21
- run: (args) => import("./create-UVCK2CS6.js").then((m) => m.run(args))
21
+ run: (args) => import("./create-QBEPSD2Z.js").then((m) => m.run(args))
22
22
  },
23
23
  start: {
24
24
  description: "Start a mind",
@@ -46,7 +46,7 @@ var cmd = subcommands({
46
46
  },
47
47
  history: {
48
48
  description: "View mind activity history",
49
- run: (args) => import("./mind-history-IE2QH7U5.js").then((m) => m.run(transformMindFlag(args)))
49
+ run: (args) => import("./mind-history-MII2SK7F.js").then((m) => m.run(transformMindFlag(args)))
50
50
  },
51
51
  profile: {
52
52
  description: "Update mind profile",
@@ -58,11 +58,11 @@ var cmd = subcommands({
58
58
  },
59
59
  import: {
60
60
  description: "Import an OpenClaw workspace",
61
- run: (args) => import("./import-5A3T7QV4.js").then((m) => m.run(args))
61
+ run: (args) => import("./import-OL5BZX7S.js").then((m) => m.run(args))
62
62
  },
63
63
  export: {
64
64
  description: "Export a mind",
65
- run: (args) => import("./export-OAS6QVBN.js").then((m) => m.run(args))
65
+ run: (args) => import("./export-HTFOHOKL.js").then((m) => m.run(args))
66
66
  },
67
67
  split: {
68
68
  description: "Create a variant",
@@ -82,11 +82,11 @@ var cmd = subcommands({
82
82
  },
83
83
  seed: {
84
84
  description: "(legacy) Use 'volute seed create' instead",
85
- run: (args) => import("./seed-EQORWX77.js").then((m) => m.run(args))
85
+ run: (args) => import("./seed-CEC4RC23.js").then((m) => m.run(args))
86
86
  },
87
87
  sprout: {
88
88
  description: "(legacy) Use 'volute seed sprout' instead",
89
- run: (args) => import("./sprout-HE4TITMK.js").then((m) => m.run(args))
89
+ run: (args) => import("./sprout-WX2FFYLP.js").then((m) => m.run(args))
90
90
  }
91
91
  },
92
92
  footer: "Mind name can be omitted (where applicable) if VOLUTE_MIND is set."
@@ -4,11 +4,11 @@ import {
4
4
  markIdle,
5
5
  onMindEvent,
6
6
  stopAll
7
- } from "./chunk-N446KRP7.js";
8
- import "./chunk-CORXD635.js";
9
- import "./chunk-BKF4WQCY.js";
10
- import "./chunk-BDYXIWA5.js";
11
- import "./chunk-5N7Y5WAM.js";
7
+ } from "./chunk-PY557GDR.js";
8
+ import "./chunk-B35VNNSS.js";
9
+ import "./chunk-T2TP6ZC6.js";
10
+ import "./chunk-75AJ54GM.js";
11
+ import "./chunk-7PTQGPJY.js";
12
12
  import "./chunk-7KJOFUNN.js";
13
13
  export {
14
14
  getActiveMinds,
@@ -149,19 +149,48 @@ function formatRowCompact(row) {
149
149
  return `[${time}] [${row.type}] ${row.content ?? ""}`;
150
150
  }
151
151
  }
152
+ function periodKeyFromTimestamp(dateStr, period) {
153
+ const d = new Date(normalizeTimestamp(dateStr));
154
+ switch (period) {
155
+ case "hour": {
156
+ const y = d.getFullYear();
157
+ const m = String(d.getMonth() + 1).padStart(2, "0");
158
+ const day = String(d.getDate()).padStart(2, "0");
159
+ const h = String(d.getHours()).padStart(2, "0");
160
+ return `${y}-${m}-${day}T${h}`;
161
+ }
162
+ case "day": {
163
+ const y = d.getFullYear();
164
+ const m = String(d.getMonth() + 1).padStart(2, "0");
165
+ const day = String(d.getDate()).padStart(2, "0");
166
+ return `${y}-${m}-${day}`;
167
+ }
168
+ case "week": {
169
+ const local = new Date(d.getFullYear(), d.getMonth(), d.getDate());
170
+ local.setDate(local.getDate() + 4 - (local.getDay() || 7));
171
+ const yearStart = new Date(local.getFullYear(), 0, 1);
172
+ const weekNum = Math.ceil(((local.getTime() - yearStart.getTime()) / 864e5 + 1) / 7);
173
+ return `${local.getFullYear()}-W${String(weekNum).padStart(2, "0")}`;
174
+ }
175
+ case "month": {
176
+ const y = d.getFullYear();
177
+ const m = String(d.getMonth() + 1).padStart(2, "0");
178
+ return `${y}-${m}`;
179
+ }
180
+ default: {
181
+ const y = d.getFullYear();
182
+ const m = String(d.getMonth() + 1).padStart(2, "0");
183
+ const day = String(d.getDate()).padStart(2, "0");
184
+ return `${y}-${m}-${day}`;
185
+ }
186
+ }
187
+ }
152
188
  var PERIOD_LABELS = {
153
189
  hour: "Hourly",
154
190
  day: "Daily",
155
191
  week: "Weekly",
156
192
  month: "Monthly"
157
193
  };
158
- function formatMetaSummary(row) {
159
- const label = PERIOD_LABELS[row.period] ?? row.period;
160
- return `
161
- === ${row.period_key} (${label}) ===
162
- ${row.content ?? ""}
163
- `;
164
- }
165
194
  function getDefaultRange(period) {
166
195
  const now = /* @__PURE__ */ new Date();
167
196
  switch (period) {
@@ -225,20 +254,58 @@ var cmd = command({
225
254
  else params.set("from", getDefaultRange(flags.period));
226
255
  if (flags.to) params.set("to", flags.to);
227
256
  if (flags.limit) params.set("limit", flags.limit);
228
- const res2 = await daemonFetch(`/api/v1/history/summaries?${params}`);
229
- if (!res2.ok) {
230
- let errorMsg = `Failed to get summaries: ${res2.status}`;
257
+ const activityParams = new URLSearchParams();
258
+ activityParams.set("mind", name2);
259
+ if (flags.from) activityParams.set("from", flags.from);
260
+ else activityParams.set("from", getDefaultRange(flags.period));
261
+ if (flags.to) activityParams.set("to", flags.to);
262
+ const [summaryRes, activityRes] = await Promise.all([
263
+ daemonFetch(`/api/v1/history/summaries?${params}`),
264
+ daemonFetch(`/api/v1/history/activity?${activityParams}`)
265
+ ]);
266
+ if (!summaryRes.ok) {
267
+ let errorMsg = `Failed to get summaries: ${summaryRes.status}`;
231
268
  try {
232
- const data = await res2.json();
269
+ const data = await summaryRes.json();
233
270
  if (data.error) errorMsg = data.error;
234
271
  } catch {
235
272
  }
236
273
  console.error(errorMsg);
237
274
  process.exit(1);
238
275
  }
239
- const rows2 = await res2.json();
240
- for (const row of rows2.reverse()) {
241
- console.log(formatMetaSummary(row));
276
+ const rows2 = await summaryRes.json();
277
+ let activities = [];
278
+ if (activityRes.ok) {
279
+ activities = await activityRes.json();
280
+ } else {
281
+ console.error(
282
+ `Warning: could not fetch activity data (${activityRes.status}), showing summaries only`
283
+ );
284
+ }
285
+ const activityByPeriod = /* @__PURE__ */ new Map();
286
+ for (const act of activities) {
287
+ const key = periodKeyFromTimestamp(act.created_at, flags.period);
288
+ if (!activityByPeriod.has(key)) activityByPeriod.set(key, []);
289
+ activityByPeriod.get(key).push(act);
290
+ }
291
+ const allKeys = /* @__PURE__ */ new Set([...rows2.map((r) => r.period_key), ...activityByPeriod.keys()]);
292
+ const sortedKeys = [...allKeys].sort();
293
+ const summaryByKey = new Map(rows2.map((r) => [r.period_key, r]));
294
+ for (const key of sortedKeys) {
295
+ const summary = summaryByKey.get(key);
296
+ const periodActivities = activityByPeriod.get(key);
297
+ const label = PERIOD_LABELS[flags.period] ?? flags.period;
298
+ console.log(`
299
+ === ${key} (${label}) ===`);
300
+ if (summary?.content) console.log(summary.content);
301
+ if (periodActivities?.length) {
302
+ console.log("\nActivity:");
303
+ for (const act of periodActivities) {
304
+ const time = new Date(normalizeTimestamp(act.created_at)).toLocaleTimeString();
305
+ console.log(` [${time}] ${act.summary}`);
306
+ }
307
+ }
308
+ console.log();
242
309
  }
243
310
  return;
244
311
  }
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ MindManager,
4
+ getMindManager,
5
+ initMindManager
6
+ } from "./chunk-DQ7VBXAP.js";
7
+ import "./chunk-6F3YNULE.js";
8
+ import "./chunk-46DYYHN6.js";
9
+ import "./chunk-GBDVNPN2.js";
10
+ import "./chunk-PY557GDR.js";
11
+ import "./chunk-DMV5P2LU.js";
12
+ import "./chunk-IIWF2IPD.js";
13
+ import "./chunk-B35VNNSS.js";
14
+ import "./chunk-CU6OFXMM.js";
15
+ import "./chunk-BOLJUV77.js";
16
+ import "./chunk-X2J7QUFH.js";
17
+ import "./chunk-YDBAY3NA.js";
18
+ import "./chunk-M5RYAA5I.js";
19
+ import "./chunk-T2TP6ZC6.js";
20
+ import "./chunk-PJ4IPTIN.js";
21
+ import "./chunk-L72WYMF7.js";
22
+ import "./chunk-NUX47Y2V.js";
23
+ import "./chunk-75AJ54GM.js";
24
+ import "./chunk-7PTQGPJY.js";
25
+ import "./chunk-7KJOFUNN.js";
26
+ export {
27
+ MindManager,
28
+ getMindManager,
29
+ initMindManager
30
+ };
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ sleepMind,
4
+ startMindFull,
5
+ startSpiritFull,
6
+ stopMindFull,
7
+ stopSpiritFull,
8
+ wakeMind
9
+ } from "./chunk-DQ7VBXAP.js";
10
+ import "./chunk-6F3YNULE.js";
11
+ import "./chunk-46DYYHN6.js";
12
+ import "./chunk-GBDVNPN2.js";
13
+ import "./chunk-PY557GDR.js";
14
+ import "./chunk-DMV5P2LU.js";
15
+ import "./chunk-IIWF2IPD.js";
16
+ import "./chunk-B35VNNSS.js";
17
+ import "./chunk-CU6OFXMM.js";
18
+ import "./chunk-BOLJUV77.js";
19
+ import "./chunk-X2J7QUFH.js";
20
+ import "./chunk-YDBAY3NA.js";
21
+ import "./chunk-M5RYAA5I.js";
22
+ import "./chunk-T2TP6ZC6.js";
23
+ import "./chunk-PJ4IPTIN.js";
24
+ import "./chunk-L72WYMF7.js";
25
+ import "./chunk-NUX47Y2V.js";
26
+ import "./chunk-75AJ54GM.js";
27
+ import "./chunk-7PTQGPJY.js";
28
+ import "./chunk-7KJOFUNN.js";
29
+ export {
30
+ sleepMind,
31
+ startMindFull,
32
+ startSpiritFull,
33
+ stopMindFull,
34
+ stopSpiritFull,
35
+ wakeMind
36
+ };
@@ -4,7 +4,7 @@ import "./chunk-7KJOFUNN.js";
4
4
  // package.json
5
5
  var package_default = {
6
6
  name: "volute",
7
- version: "0.35.0",
7
+ version: "0.36.0",
8
8
  description: "CLI for creating and managing self-modifying AI minds powered by the Claude Agent SDK",
9
9
  type: "module",
10
10
  license: "MIT",
@@ -49,9 +49,9 @@ var package_default = {
49
49
  scripts: {
50
50
  dev: "tsx src/cli.ts",
51
51
  build: "npm run build:ext && tsup && cp -r skills dist/skills && npm run build:web",
52
- "build:ext": "npm run build:ext-theme --workspace=packages/ui && cp packages/ui/dist/ext-theme.css packages/daemon/src/web/ui/public/ext-theme.css && npm run build:ui --workspace=packages/extensions/notes && npm run build:ui --workspace=packages/extensions/pages && npm run build:ui --workspace=packages/extensions/plan",
53
- "build:web": "vite build --config packages/daemon/src/web/ui/vite.config.ts",
54
- "dev:web": "vite --config packages/daemon/src/web/ui/vite.config.ts",
52
+ "build:ext": "npm run build:ext-theme --workspace=packages/ui && cp packages/ui/dist/ext-theme.css packages/web/public/ext-theme.css && npm run build:ui --workspace=packages/extensions/notes && npm run build:ui --workspace=packages/extensions/pages && npm run build:ui --workspace=packages/extensions/plan",
53
+ "build:web": "npm run build:ui --workspace=packages/web",
54
+ "dev:web": "npm run dev --workspace=packages/web",
55
55
  test: "node --import tsx --import ./test/setup.ts --test --test-force-exit --test-concurrency=4 $(find test -name '*.test.ts' ! -name 'daemon-e2e.test.ts' | sort)",
56
56
  "test:e2e": "node --import tsx --import ./test/setup.ts --test --test-force-exit --test-concurrency=1 test/daemon-e2e.test.ts",
57
57
  "test:all": "npm test && npm run test:e2e",
@@ -61,7 +61,7 @@ var package_default = {
61
61
  typecheck: "tsc --noEmit",
62
62
  "typecheck:templates": "tsx scripts/typecheck-templates.ts",
63
63
  "lint:templates": "biome check templates/",
64
- "typecheck:web": "svelte-check --tsconfig packages/daemon/src/web/ui/tsconfig.json",
64
+ "typecheck:web": "svelte-check --tsconfig packages/web/tsconfig.json",
65
65
  prepare: "lefthook install",
66
66
  prepublishOnly: "npm run build",
67
67
  "db:generate": "drizzle-kit generate",
@@ -27,12 +27,12 @@ async function resolveConversationId(mindName, input) {
27
27
  const convs = await res.json();
28
28
  const cleaned = input.replace(/^[@#]/, "");
29
29
  const lower = cleaned.toLowerCase();
30
- const channelMatch = convs.find((c) => c.type === "channel" && c.name?.toLowerCase() === lower);
30
+ const channelMatch = convs.find(
31
+ (c) => c.type === "channel" && c.channel_name?.toLowerCase() === lower
32
+ );
31
33
  if (channelMatch) return channelMatch.id;
32
- const titleMatch = convs.find((c) => c.title?.toLowerCase() === lower);
33
- if (titleMatch) return titleMatch.id;
34
34
  const dmMatch = convs.find(
35
- (c) => c.type === "dm" && c.title?.toLowerCase().split(/,\s*/).some((name) => name === lower)
35
+ (c) => c.type === "dm" && c.participants?.some((p) => p.username.toLowerCase() === lower && p.username !== mindName)
36
36
  );
37
37
  if (dmMatch) return dmMatch.id;
38
38
  const prefixMatch = convs.find((c) => c.id.startsWith(input));