volute 0.43.1 → 0.44.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 (107) hide show
  1. package/dist/{activity-events-UISXY4Y5.js → activity-events-OMCSM7XW.js} +3 -3
  2. package/dist/{ai-service-FBCCEYF5.js → ai-service-7PHSRDMO.js} +4 -4
  3. package/dist/{archive-I32WHCJB.js → archive-6R4TZMYI.js} +3 -3
  4. package/dist/{auth-3RIG6GKN.js → auth-FRZJVQCS.js} +4 -4
  5. package/dist/avatar-image-BNWEXSA2.js +16 -0
  6. package/dist/{chat-SDSX5TVV.js → chat-I4EDDIQC.js} +2 -2
  7. package/dist/{chunk-AD46AYZQ.js → chunk-2BONPXAF.js} +1 -1
  8. package/dist/{chunk-PGPLCJPK.js → chunk-3ERIL673.js} +1 -1
  9. package/dist/{chunk-C6ESRQZ7.js → chunk-3GYVW2X3.js} +1 -1
  10. package/dist/{chunk-SPLPKBES.js → chunk-5AHYQHNT.js} +4 -8
  11. package/dist/{chunk-XDTKJNW5.js → chunk-5GT7URXJ.js} +1 -1
  12. package/dist/{chunk-QQ2MVQU3.js → chunk-7FT24JBQ.js} +8 -8
  13. package/dist/{chunk-DE4EKQFH.js → chunk-7KWANSLX.js} +3 -3
  14. package/dist/{chunk-EFL5UOY4.js → chunk-CYI534DJ.js} +3 -3
  15. package/dist/{chunk-DMUPZQWP.js → chunk-EQZD4YU3.js} +8 -8
  16. package/dist/{chunk-57LBQ7JX.js → chunk-FHWUQZXE.js} +1 -1
  17. package/dist/{chunk-K4EHBHPE.js → chunk-FZMEVCWC.js} +3 -3
  18. package/dist/{chunk-YAMO2U3N.js → chunk-H7IYFRAL.js} +1 -1
  19. package/dist/{chunk-M3PGGSBH.js → chunk-HVU45COX.js} +1 -1
  20. package/dist/{chunk-KINGVQSR.js → chunk-I2Y2YHIO.js} +5 -5
  21. package/dist/{chunk-O3DXAR44.js → chunk-IEWZ7VD7.js} +2 -2
  22. package/dist/{chunk-YSV3VJQK.js → chunk-J47TIYHA.js} +1 -1
  23. package/dist/{chunk-QHG4OMZL.js → chunk-KDLYIECM.js} +37 -32
  24. package/dist/{chunk-EE7SZJON.js → chunk-KP3KWNG6.js} +2 -2
  25. package/dist/{chunk-JVK6QQIC.js → chunk-LAXUUY7O.js} +2 -2
  26. package/dist/{chunk-Y6O35D7K.js → chunk-NF75HPNR.js} +5 -5
  27. package/dist/{chunk-4SVONUTC.js → chunk-OMETFX5H.js} +321 -204
  28. package/dist/{chunk-ONM2AZFL.js → chunk-PNV24SEP.js} +1 -1
  29. package/dist/{chunk-ATEX3ZPG.js → chunk-Q2XBKQ2D.js} +2 -2
  30. package/dist/{chunk-GZJFC76M.js → chunk-QMJJWTNL.js} +1 -1
  31. package/dist/chunk-SQL7M4HJ.js +120 -0
  32. package/dist/{chunk-2HIVYZDB.js → chunk-UMI4UIJG.js} +1 -1
  33. package/dist/{chunk-7G2EEYXX.js → chunk-ZMIMSIIT.js} +2 -2
  34. package/dist/{chunk-L3IV23ZG.js → chunk-ZV7MFISX.js} +2 -0
  35. package/dist/cli.js +47 -22
  36. package/dist/{cloud-sync-KOEBUFW5.js → cloud-sync-6WJ7WFYD.js} +16 -16
  37. package/dist/{conversations-67WWW25C.js → conversations-WAJYZKOC.js} +4 -4
  38. package/dist/{create-7W3LV3J7.js → create-YZIV5OJC.js} +1 -1
  39. package/dist/{daemon-restart-EZXB73W7.js → daemon-restart-OUJVINXV.js} +7 -7
  40. package/dist/daemon.js +297 -294
  41. package/dist/{db-CZV62BOQ.js → db-JFLCJCUG.js} +2 -2
  42. package/dist/{db-IJL6B26S.js → db-LZTLA7XC.js} +1 -1
  43. package/dist/delivery-manager-TEVOHX5W.js +32 -0
  44. package/dist/{delivery-router-HXBHYHJM.js → delivery-router-GODSIS62.js} +3 -3
  45. package/dist/{down-RRNYIGCU.js → down-XCAZXWLB.js} +5 -5
  46. package/dist/echo-text-T7ZA5EYD.js +32 -0
  47. package/dist/{exec-SJK7VUTC.js → exec-4GWHAHS3.js} +3 -3
  48. package/dist/{export-7LPCIB5J.js → export-ID7YUSLZ.js} +3 -3
  49. package/dist/{extensions-PQPZT6LS.js → extensions-3QNDGW5E.js} +16 -16
  50. package/dist/{files-LV7VAKPC.js → files-BQ2WB5KC.js} +3 -3
  51. package/dist/{import-XPECCRQ7.js → import-SKID37QX.js} +6 -6
  52. package/dist/{isolation-5AYEY55P.js → isolation-5MB3J73F.js} +3 -3
  53. package/dist/{login-KJSN4JDA.js → login-LM4NF4ZB.js} +2 -2
  54. package/dist/{logout-TMJGUQV2.js → logout-CTJVIZGA.js} +2 -2
  55. package/dist/message-delivery-2EA5LLMD.js +34 -0
  56. package/dist/{mind-G3WEWDM4.js → mind-MI7Z6KM2.js} +5 -5
  57. package/dist/{mind-activity-tracker-JHAT6456.js → mind-activity-tracker-BGHJE7XA.js} +4 -4
  58. package/dist/mind-service-S3SY7HAM.js +36 -0
  59. package/dist/{package-24TL6DTF.js → package-5B4XDTJH.js} +1 -1
  60. package/dist/{registry-7LQHTRUX.js → registry-NUJAGLQJ.js} +2 -2
  61. package/dist/{sandbox-SJH3XOPZ.js → sandbox-IOPWWILM.js} +4 -4
  62. package/dist/scheduler-CXWQ6Z4E.js +30 -0
  63. package/dist/{schema-LRUTFOER.js → schema-PVNG3PQM.js} +1 -1
  64. package/dist/{seed-HHSJTM6O.js → seed-UUPVQWFB.js} +1 -1
  65. package/dist/{seed-cmd-UPQY35RG.js → seed-cmd-7XPKDQUC.js} +2 -2
  66. package/dist/{seed-create-MDRMXMSB.js → seed-create-IZ4M5ESO.js} +3 -3
  67. package/dist/{seed-sprout-4M7IQWMH.js → seed-sprout-POJXHJWV.js} +7 -7
  68. package/dist/{send-ZBZWIH5V.js → send-O6W53VBM.js} +37 -42
  69. package/dist/{service-4EVZKGSA.js → service-AQVPUANO.js} +4 -4
  70. package/dist/{service-install-SHRM6NHK.js → service-install-4QNUDKLM.js} +5 -5
  71. package/dist/{setup-ZD2LMBR3.js → setup-5GCO3CUB.js} +7 -7
  72. package/dist/{setup-25MMJ3J4.js → setup-MLRKNP7Y.js} +3 -3
  73. package/dist/{skills-4KQ377GN.js → skills-775C7QFF.js} +5 -5
  74. package/dist/sleep-manager-HINI6Y46.js +34 -0
  75. package/dist/{spirit-53DQPRNR.js → spirit-IK5OYWMV.js} +7 -7
  76. package/dist/{sprout-YKM2M6D6.js → sprout-ZY5QGOEL.js} +1 -1
  77. package/dist/{src-O4PRLMKM.js → src-JAOVXO5W.js} +1 -0
  78. package/dist/{src-3EGHHKZK.js → src-XFY3XDD6.js} +16 -11
  79. package/dist/{src-L2Z7X5UT.js → src-YH6PQ7LJ.js} +264 -52
  80. package/dist/{status-WTU2WHXY.js → status-E5DQNCAO.js} +5 -5
  81. package/dist/system-chat-4DQZOEZI.js +34 -0
  82. package/dist/{tailscale-Q7ZJL7S7.js → tailscale-QAWVKQKU.js} +2 -2
  83. package/dist/{turn-tracker-JZYERJ76.js → turn-tracker-RWZMY7M6.js} +5 -5
  84. package/dist/{up-LFZA4GI5.js → up-FLCDR2UB.js} +6 -6
  85. package/dist/{update-EJ7Q77ZX.js → update-7TYVH5FM.js} +5 -5
  86. package/dist/{update-check-ACYYNKTW.js → update-check-VSCSJ7KX.js} +3 -3
  87. package/dist/{version-notify-SRQJCQEK.js → version-notify-B67N35A3.js} +17 -17
  88. package/dist/web-assets/assets/{index-DTDmEfPU.js → index-Domoz5Cg.js} +8 -8
  89. package/dist/web-assets/assets/index-dJdNzAPn.css +1 -0
  90. package/dist/web-assets/ext-theme.css +5 -0
  91. package/dist/web-assets/index.html +2 -2
  92. package/package.json +1 -1
  93. package/packages/extensions/notes/dist/ui/assets/{index-BbgANhFm.js → index-D0-DgYyj.js} +1 -1
  94. package/packages/extensions/notes/dist/ui/index.html +1 -1
  95. package/packages/extensions/notes/skills/notes/SKILL.md +31 -3
  96. package/packages/extensions/pages/dist/ui/assets/{index-Dxk-DYrf.js → index-CQjEQg1r.js} +1 -1
  97. package/packages/extensions/pages/dist/ui/index.html +1 -1
  98. package/templates/_base/.init/.local/hooks/startup-context.ts +25 -0
  99. package/templates/claude/src/agent.ts +8 -1
  100. package/dist/delivery-manager-OMCCJEVP.js +0 -32
  101. package/dist/echo-text-KFSUCZXL.js +0 -32
  102. package/dist/message-delivery-HRGFNWO7.js +0 -34
  103. package/dist/mind-service-2C7AINBO.js +0 -36
  104. package/dist/scheduler-VON2TB52.js +0 -30
  105. package/dist/sleep-manager-AG5SQDDI.js +0 -34
  106. package/dist/system-chat-54RN3K67.js +0 -34
  107. package/dist/web-assets/assets/index-D7udpBCx.css +0 -1
@@ -18,9 +18,9 @@ import {
18
18
  import "./chunk-O7IGP7ZW.js";
19
19
  import {
20
20
  formatFileSize
21
- } from "./chunk-2HIVYZDB.js";
22
- import "./chunk-YAMO2U3N.js";
23
- import "./chunk-L3IV23ZG.js";
21
+ } from "./chunk-UMI4UIJG.js";
22
+ import "./chunk-H7IYFRAL.js";
23
+ import "./chunk-ZV7MFISX.js";
24
24
  import "./chunk-K3NQKI34.js";
25
25
 
26
26
  // packages/cli/src/commands/send.ts
@@ -154,6 +154,19 @@ async function waitForResponse(mindName, conversationId, timeoutMs) {
154
154
  });
155
155
  }
156
156
  }
157
+ function printSendResult(data) {
158
+ if (data.held) {
159
+ if (data.notice) console.log(data.notice);
160
+ return;
161
+ }
162
+ const { outboundId } = data;
163
+ if (isCompact()) {
164
+ if (outboundId != null) console.log(`[volute:outbound:${outboundId}]`);
165
+ } else {
166
+ console.log(`Message sent.${outboundId != null ? `
167
+ [volute:outbound:${outboundId}]` : ""}`);
168
+ }
169
+ }
157
170
  var cmd = command({
158
171
  name: "volute chat send",
159
172
  description: "Send a message to a mind, channel, or platform",
@@ -268,6 +281,7 @@ To reply to a person, use their username from the message prefix (e.g. volute ch
268
281
  const client = getClient();
269
282
  let waitMindName;
270
283
  let waitConversationId;
284
+ let heldResponse = false;
271
285
  if (parsed.isDM && parsed.platform === "volute") {
272
286
  const targetName = parsed.identifier.slice(1);
273
287
  const mindSelf = process.env.VOLUTE_MIND;
@@ -285,8 +299,8 @@ To reply to a person, use their username from the message prefix (e.g. volute ch
285
299
  }
286
300
  );
287
301
  if (!createRes.ok) {
288
- const data = await createRes.json().catch(() => ({ error: "Unknown error" }));
289
- console.error(data.error);
302
+ const data2 = await createRes.json().catch(() => ({ error: "Unknown error" }));
303
+ console.error(data2.error);
290
304
  process.exit(1);
291
305
  }
292
306
  const { conversationId: convId } = await createRes.json();
@@ -303,29 +317,18 @@ To reply to a person, use their username from the message prefix (e.g. volute ch
303
317
  })
304
318
  });
305
319
  if (!sendRes.ok) {
306
- const data = await sendRes.json().catch(() => ({ error: "Unknown error" }));
307
- console.error(data.error);
320
+ const data2 = await sendRes.json().catch(() => ({ error: "Unknown error" }));
321
+ console.error(data2.error);
308
322
  process.exit(1);
309
323
  }
310
- if (!flags.wait) {
311
- let outboundId;
312
- try {
313
- const resData = await sendRes.json();
314
- outboundId = resData.outboundId;
315
- } catch (err) {
316
- console.error(
317
- `Warning: could not read outboundId from response: ${err.message}`
318
- );
319
- }
320
- if (isCompact()) {
321
- if (outboundId != null) console.log(`[volute:outbound:${outboundId}]`);
322
- } else {
323
- console.log(
324
- `Message sent.${outboundId != null ? `
325
- [volute:outbound:${outboundId}]` : ""}`
326
- );
327
- }
324
+ let data = {};
325
+ try {
326
+ data = await sendRes.json();
327
+ } catch (err) {
328
+ console.error(`Warning: could not read send response: ${err.message}`);
328
329
  }
330
+ if (data.held) heldResponse = true;
331
+ if (data.held || !flags.wait) printSendResult(data);
329
332
  } else if (!parsed.isDM && parsed.platform === "volute") {
330
333
  if (!parsed.identifier.startsWith("#")) {
331
334
  console.error(
@@ -362,27 +365,18 @@ To reply to a person, use their username from the message prefix (e.g. volute ch
362
365
  })
363
366
  });
364
367
  if (!sendRes.ok) {
365
- const data = await sendRes.json().catch(() => ({ error: "Unknown error" }));
366
- console.error(data.error);
368
+ const data2 = await sendRes.json().catch(() => ({ error: "Unknown error" }));
369
+ console.error(data2.error);
367
370
  process.exit(1);
368
371
  }
369
- let outboundId;
372
+ let data = {};
370
373
  try {
371
- const resData = await sendRes.json();
372
- outboundId = resData.outboundId;
374
+ data = await sendRes.json();
373
375
  } catch (err) {
374
- console.error(
375
- `Warning: could not read outboundId from response: ${err.message}`
376
- );
377
- }
378
- if (isCompact()) {
379
- if (outboundId != null) console.log(`[volute:outbound:${outboundId}]`);
380
- } else {
381
- console.log(
382
- `Message sent.${outboundId != null ? `
383
- [volute:outbound:${outboundId}]` : ""}`
384
- );
376
+ console.error(`Warning: could not read send response: ${err.message}`);
385
377
  }
378
+ if (data.held) heldResponse = true;
379
+ printSendResult(data);
386
380
  } else {
387
381
  console.error(
388
382
  `Direct sends to ${parsed.platform} channels are no longer supported.
@@ -391,7 +385,8 @@ See: volute chat bridge --help`
391
385
  );
392
386
  process.exit(1);
393
387
  }
394
- if (flags.wait && waitMindName) {
388
+ if (heldResponse) {
389
+ } else if (flags.wait && waitMindName) {
395
390
  if (!waitConversationId) {
396
391
  console.error("--wait requires a volute conversation (DM to a mind)");
397
392
  process.exit(1);
@@ -9,10 +9,10 @@ import {
9
9
  SYSTEM_LAUNCHD_PLIST_PATH,
10
10
  SYSTEM_SERVICE_PATH,
11
11
  USER_SYSTEMD_UNIT
12
- } from "./chunk-ATEX3ZPG.js";
13
- import "./chunk-PGPLCJPK.js";
14
- import "./chunk-YAMO2U3N.js";
15
- import "./chunk-L3IV23ZG.js";
12
+ } from "./chunk-Q2XBKQ2D.js";
13
+ import "./chunk-3ERIL673.js";
14
+ import "./chunk-H7IYFRAL.js";
15
+ import "./chunk-ZV7MFISX.js";
16
16
  import "./chunk-K3NQKI34.js";
17
17
 
18
18
  // packages/cli/src/commands/service.ts
@@ -3,11 +3,11 @@ import {
3
3
  generateUserPlist,
4
4
  generateUserUnit,
5
5
  installUserService
6
- } from "./chunk-EE7SZJON.js";
7
- import "./chunk-ATEX3ZPG.js";
8
- import "./chunk-PGPLCJPK.js";
9
- import "./chunk-YAMO2U3N.js";
10
- import "./chunk-L3IV23ZG.js";
6
+ } from "./chunk-KP3KWNG6.js";
7
+ import "./chunk-Q2XBKQ2D.js";
8
+ import "./chunk-3ERIL673.js";
9
+ import "./chunk-H7IYFRAL.js";
10
+ import "./chunk-ZV7MFISX.js";
11
11
  import "./chunk-K3NQKI34.js";
12
12
  export {
13
13
  generateUserPlist,
@@ -8,22 +8,22 @@ import {
8
8
  import "./chunk-O7IGP7ZW.js";
9
9
  import {
10
10
  installUserService
11
- } from "./chunk-EE7SZJON.js";
11
+ } from "./chunk-KP3KWNG6.js";
12
12
  import {
13
13
  LAUNCHD_PLIST_LABEL,
14
14
  SYSTEM_LAUNCHD_PLIST_PATH,
15
15
  SYSTEM_SERVICE_PATH
16
- } from "./chunk-ATEX3ZPG.js";
16
+ } from "./chunk-Q2XBKQ2D.js";
17
17
  import {
18
18
  ensureVoluteGroup,
19
19
  resolveVoluteBin
20
- } from "./chunk-PGPLCJPK.js";
20
+ } from "./chunk-3ERIL673.js";
21
21
  import {
22
22
  readGlobalConfig,
23
23
  writeGlobalConfig
24
- } from "./chunk-ONM2AZFL.js";
25
- import "./chunk-YAMO2U3N.js";
26
- import "./chunk-L3IV23ZG.js";
24
+ } from "./chunk-PNV24SEP.js";
25
+ import "./chunk-H7IYFRAL.js";
26
+ import "./chunk-ZV7MFISX.js";
27
27
  import "./chunk-K3NQKI34.js";
28
28
 
29
29
  // src/commands/setup.ts
@@ -221,7 +221,7 @@ async function startDaemonAndOpenBrowser(port, host) {
221
221
  const url = `http://${displayHost === "0.0.0.0" || displayHost === "::" ? "localhost" : displayHost}:${displayPort}`;
222
222
  console.log("\nStarting daemon...");
223
223
  try {
224
- const { run: runUp } = await import("./up-LFZA4GI5.js");
224
+ const { run: runUp } = await import("./up-FLCDR2UB.js");
225
225
  await runUp([
226
226
  ...port != null ? ["--port", String(port)] : [],
227
227
  ...host ? ["--host", host] : []
@@ -9,9 +9,9 @@ import {
9
9
  readGlobalConfig,
10
10
  secretsPath,
11
11
  writeGlobalConfig
12
- } from "./chunk-ONM2AZFL.js";
13
- import "./chunk-YAMO2U3N.js";
14
- import "./chunk-L3IV23ZG.js";
12
+ } from "./chunk-PNV24SEP.js";
13
+ import "./chunk-H7IYFRAL.js";
14
+ import "./chunk-ZV7MFISX.js";
15
15
  import "./chunk-K3NQKI34.js";
16
16
  export {
17
17
  _resetConfigCache,
@@ -27,12 +27,12 @@ import {
27
27
  syncBuiltinSkills,
28
28
  uninstallSkill,
29
29
  updateSkill
30
- } from "./chunk-KINGVQSR.js";
31
- import "./chunk-PGPLCJPK.js";
32
- import "./chunk-ONM2AZFL.js";
30
+ } from "./chunk-I2Y2YHIO.js";
31
+ import "./chunk-3ERIL673.js";
32
+ import "./chunk-PNV24SEP.js";
33
33
  import "./chunk-T2TP6ZC6.js";
34
- import "./chunk-YAMO2U3N.js";
35
- import "./chunk-L3IV23ZG.js";
34
+ import "./chunk-H7IYFRAL.js";
35
+ import "./chunk-ZV7MFISX.js";
36
36
  import "./chunk-K3NQKI34.js";
37
37
  export {
38
38
  SEED_SKILLS,
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ SleepManager,
4
+ getSleepManager,
5
+ getSleepManagerIfReady,
6
+ initSleepManager,
7
+ matchesGlob
8
+ } from "./chunk-OMETFX5H.js";
9
+ import "./chunk-5GT7URXJ.js";
10
+ import "./chunk-7FT24JBQ.js";
11
+ import "./chunk-QLWG3C2Z.js";
12
+ import "./chunk-I2Y2YHIO.js";
13
+ import "./chunk-FZMEVCWC.js";
14
+ import "./chunk-CU6OFXMM.js";
15
+ import "./chunk-3GYVW2X3.js";
16
+ import "./chunk-HVU45COX.js";
17
+ import "./chunk-5AHYQHNT.js";
18
+ import "./chunk-NF75HPNR.js";
19
+ import "./chunk-3ERIL673.js";
20
+ import "./chunk-J47TIYHA.js";
21
+ import "./chunk-PNV24SEP.js";
22
+ import "./chunk-CYI534DJ.js";
23
+ import "./chunk-ZMIMSIIT.js";
24
+ import "./chunk-T2TP6ZC6.js";
25
+ import "./chunk-H7IYFRAL.js";
26
+ import "./chunk-ZV7MFISX.js";
27
+ import "./chunk-K3NQKI34.js";
28
+ export {
29
+ SleepManager,
30
+ getSleepManager,
31
+ getSleepManagerIfReady,
32
+ initSleepManager,
33
+ matchesGlob
34
+ };
@@ -4,16 +4,16 @@ import {
4
4
  getSpiritModel,
5
5
  spiritDir,
6
6
  syncSpiritTemplate
7
- } from "./chunk-QQ2MVQU3.js";
7
+ } from "./chunk-7FT24JBQ.js";
8
8
  import "./chunk-QLWG3C2Z.js";
9
- import "./chunk-KINGVQSR.js";
9
+ import "./chunk-I2Y2YHIO.js";
10
10
  import "./chunk-CU6OFXMM.js";
11
- import "./chunk-PGPLCJPK.js";
12
- import "./chunk-YSV3VJQK.js";
13
- import "./chunk-ONM2AZFL.js";
11
+ import "./chunk-3ERIL673.js";
12
+ import "./chunk-J47TIYHA.js";
13
+ import "./chunk-PNV24SEP.js";
14
14
  import "./chunk-T2TP6ZC6.js";
15
- import "./chunk-YAMO2U3N.js";
16
- import "./chunk-L3IV23ZG.js";
15
+ import "./chunk-H7IYFRAL.js";
16
+ import "./chunk-ZV7MFISX.js";
17
17
  import "./chunk-K3NQKI34.js";
18
18
  export {
19
19
  ensureSpiritProject,
@@ -4,7 +4,7 @@ import "./chunk-K3NQKI34.js";
4
4
  // packages/cli/src/commands/sprout.ts
5
5
  async function run(args) {
6
6
  console.error("Note: `volute mind sprout` is now `volute seed sprout`");
7
- await import("./seed-sprout-4M7IQWMH.js").then((m) => m.run(args));
7
+ await import("./seed-sprout-POJXHJWV.js").then((m) => m.run(args));
8
8
  }
9
9
  export {
10
10
  run
@@ -407,6 +407,7 @@ var src_default = createExtension({
407
407
  name: "Plan",
408
408
  version: "0.1.0",
409
409
  description: "System-wide plans for coordinated mind activity",
410
+ mindDoc: "Shared plans for coordinating work with other minds \u2014 propose, track, and move a shared effort forward together.",
410
411
  icon: '<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="8" cy="8" r="6"/><path d="M8 4v4l2.5 2.5"/></svg>',
411
412
  color: "blue",
412
413
  routes: (ctx) => createRoutes(ctx),
@@ -7,7 +7,7 @@ import {
7
7
  initDb,
8
8
  syncPublishedPages,
9
9
  syncSystemPages
10
- } from "./chunk-QHG4OMZL.js";
10
+ } from "./chunk-KDLYIECM.js";
11
11
  import {
12
12
  createExtension
13
13
  } from "./chunk-RG5TOL4O.js";
@@ -22,6 +22,7 @@ import { relative as relative2, resolve as resolve2 } from "path";
22
22
 
23
23
  // packages/extensions/pages/src/shared-pages.ts
24
24
  import { execFile as execFileCb } from "child_process";
25
+ import { createHash } from "crypto";
25
26
  import {
26
27
  chmodSync,
27
28
  existsSync,
@@ -306,6 +307,12 @@ function collectHtmlFiles(dir) {
306
307
  walk(dir);
307
308
  return files.sort();
308
309
  }
310
+ function hashFiles(baseDir, files) {
311
+ return files.map((file) => ({
312
+ file,
313
+ hash: createHash("sha256").update(readFileSync(resolve(baseDir, file))).digest("hex")
314
+ }));
315
+ }
309
316
  async function pagesStatus(mindDir, isolation) {
310
317
  const wt = worktreePath(mindDir);
311
318
  const errors = [];
@@ -397,7 +404,7 @@ function createCommands() {
397
404
  if (result.ok && ctx.db) {
398
405
  const repoDir = resolve2(ctx.dataDir, "repo");
399
406
  try {
400
- syncSystemPages(ctx.db, collectHtmlFiles(repoDir), mindName);
407
+ syncSystemPages(ctx.db, hashFiles(repoDir, collectHtmlFiles(repoDir)), mindName);
401
408
  } catch (err) {
402
409
  console.error("[pages] failed to sync system pages to DB:", err);
403
410
  syncWarning = "\nWarning: failed to sync pages to dashboard \u2014 they may not appear in the UI until the next daemon restart.";
@@ -428,7 +435,7 @@ function createCommands() {
428
435
  const pageFiles = collectFiles(snapshotDir, snapshotDir, [".html", ".md"]);
429
436
  let diff;
430
437
  try {
431
- diff = syncPublishedPages(db, mindName, pageFiles);
438
+ diff = syncPublishedPages(db, mindName, hashFiles(snapshotDir, pageFiles));
432
439
  } catch (err) {
433
440
  return { error: `Failed to update page database: ${err.message}` };
434
441
  }
@@ -504,7 +511,7 @@ Warning: remote publish failed: ${err.message}`;
504
511
  const allFlag = flags.all;
505
512
  const port = process.env.VOLUTE_DAEMON_PORT || "1618";
506
513
  if (allFlag) {
507
- const { getAllSites: getAllSites2, getSystemPages: getSystemPages2 } = await import("./db-IJL6B26S.js");
514
+ const { getAllSites: getAllSites2, getSystemPages: getSystemPages2 } = await import("./db-LZTLA7XC.js");
508
515
  const sites = getAllSites2(db);
509
516
  const system = getSystemPages2(db);
510
517
  const lines2 = [];
@@ -2141,6 +2148,7 @@ var src_default = createExtension({
2141
2148
  name: "Pages",
2142
2149
  version: "0.1.0",
2143
2150
  description: "Publish and serve web pages from mind directories",
2151
+ mindDoc: "Publish web pages others can visit \u2014 finished creative work, essays, experiments, anything you want to give a lasting home on the web.",
2144
2152
  initDb,
2145
2153
  routes: (ctx) => createRoutes(ctx),
2146
2154
  publicRoutes: (ctx) => createPublicRoutes(ctx),
@@ -2165,13 +2173,10 @@ var src_default = createExtension({
2165
2173
  ensurePagesRepo(ctx.dataDir, isolationFrom(ctx)).then(() => {
2166
2174
  if (ctx.db) {
2167
2175
  const repoDir = resolve5(ctx.dataDir, "repo");
2168
- const htmlFiles = collectHtmlFiles(repoDir);
2169
- if (htmlFiles.length > 0) {
2170
- try {
2171
- syncSystemPages(ctx.db, htmlFiles);
2172
- } catch (err) {
2173
- console.error("[pages] failed to sync system pages to DB:", err);
2174
- }
2176
+ try {
2177
+ syncSystemPages(ctx.db, hashFiles(repoDir, collectHtmlFiles(repoDir)));
2178
+ } catch (err) {
2179
+ console.error("[pages] failed to sync system pages to DB:", err);
2175
2180
  }
2176
2181
  }
2177
2182
  }).catch((err) => {