clawvault 3.2.0 → 3.3.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 (112) hide show
  1. package/README.md +54 -14
  2. package/bin/clawvault.js +0 -2
  3. package/bin/command-registration.test.js +13 -1
  4. package/bin/help-contract.test.js +14 -0
  5. package/bin/register-core-commands.js +88 -0
  6. package/bin/register-core-commands.test.js +80 -0
  7. package/bin/register-maintenance-commands.js +57 -6
  8. package/bin/register-query-commands.js +10 -28
  9. package/bin/test-helpers/cli-command-fixtures.js +1 -0
  10. package/dist/chunk-2PKBIKDH.js +130 -0
  11. package/dist/{chunk-2JQ3O2YL.js → chunk-5EFSWZO6.js} +3 -3
  12. package/dist/{chunk-77Q5CSPJ.js → chunk-7SWP5FKU.js} +33 -701
  13. package/dist/{chunk-URXDAUVH.js → chunk-AXSJIFOJ.js} +174 -1
  14. package/dist/{chunk-23YDQ3QU.js → chunk-BLQXXX7Q.js} +6 -6
  15. package/dist/chunk-CSHO3PJB.js +684 -0
  16. package/dist/{chunk-SLXOR3CC.js → chunk-DOIUYIXV.js} +2 -2
  17. package/dist/{chunk-NCKFNBHJ.js → chunk-DVOUSOR3.js} +79 -5
  18. package/dist/{chunk-CLJTREDS.js → chunk-ECGJYWNA.js} +193 -41
  19. package/dist/{chunk-BUEW6IIK.js → chunk-EL6UBSX5.js} +5 -5
  20. package/dist/{chunk-6FH3IULF.js → chunk-FZ5I2NF7.js} +1 -1
  21. package/dist/{chunk-ZN54U2OZ.js → chunk-GFCHWMGD.js} +3 -3
  22. package/dist/{chunk-GNJL4YGR.js → chunk-GJO3CFUN.js} +30 -6
  23. package/dist/chunk-H3JZIB5O.js +322 -0
  24. package/dist/chunk-HEHO7SMV.js +51 -0
  25. package/dist/{chunk-STCQGCEQ.js → chunk-HGDDW24U.js} +3 -3
  26. package/dist/chunk-J3YUXVID.js +907 -0
  27. package/dist/{chunk-Y6VJKXGL.js → chunk-KCYWJDDW.js} +1 -1
  28. package/dist/{chunk-W4SPAEE7.js → chunk-OFOCU2V4.js} +5 -4
  29. package/dist/chunk-PTWPPVC7.js +972 -0
  30. package/dist/{chunk-QSHD36LH.js → chunk-QFWERBDP.js} +2 -2
  31. package/dist/{chunk-QSRRMEYM.js → chunk-S7N7HI5E.js} +1 -1
  32. package/dist/{chunk-PBACDKKP.js → chunk-T7E764W3.js} +3 -3
  33. package/dist/chunk-TDWFBDAQ.js +1016 -0
  34. package/dist/{chunk-ESVS6K2B.js → chunk-TWMI3SNN.js} +6 -5
  35. package/dist/{chunk-2RAZ4ZFE.js → chunk-VBILES4B.js} +1 -1
  36. package/dist/{chunk-ESFLMDRB.js → chunk-VXAGOLDP.js} +3 -3
  37. package/dist/chunk-YCUVAOFC.js +158 -0
  38. package/dist/{chunk-SS4B7P7V.js → chunk-YIDV4VV2.js} +1 -1
  39. package/dist/chunk-ZKWPCBYT.js +600 -0
  40. package/dist/cli/index.js +24 -24
  41. package/dist/commands/archive.js +2 -2
  42. package/dist/commands/benchmark.d.ts +12 -0
  43. package/dist/commands/benchmark.js +12 -0
  44. package/dist/commands/context.js +6 -5
  45. package/dist/commands/doctor.d.ts +8 -3
  46. package/dist/commands/doctor.js +6 -20
  47. package/dist/commands/embed.js +5 -4
  48. package/dist/commands/entities.js +1 -1
  49. package/dist/commands/graph.js +2 -2
  50. package/dist/commands/inbox.d.ts +23 -0
  51. package/dist/commands/inbox.js +11 -0
  52. package/dist/commands/inject.d.ts +1 -1
  53. package/dist/commands/inject.js +3 -3
  54. package/dist/commands/link.js +6 -6
  55. package/dist/commands/maintain.d.ts +32 -0
  56. package/dist/commands/maintain.js +12 -0
  57. package/dist/commands/migrate-observations.js +2 -2
  58. package/dist/commands/observe.js +9 -8
  59. package/dist/commands/rebuild-embeddings.js +47 -16
  60. package/dist/commands/rebuild.js +7 -6
  61. package/dist/commands/reflect.js +5 -5
  62. package/dist/commands/replay.js +8 -7
  63. package/dist/commands/setup.js +3 -2
  64. package/dist/commands/sleep.d.ts +1 -1
  65. package/dist/commands/sleep.js +17 -15
  66. package/dist/commands/status.js +26 -24
  67. package/dist/commands/sync-bd.js +2 -2
  68. package/dist/commands/tailscale.js +2 -2
  69. package/dist/commands/wake.d.ts +1 -1
  70. package/dist/commands/wake.js +8 -7
  71. package/dist/index.d.ts +168 -16
  72. package/dist/index.js +271 -108
  73. package/dist/{inject-DYUrDqQO.d.ts → inject-DEb_jpLi.d.ts} +3 -1
  74. package/dist/lib/config.js +1 -1
  75. package/dist/{types-BbWJoC1c.d.ts → types-DslKvCaj.d.ts} +51 -1
  76. package/hooks/clawvault/HOOK.md +22 -5
  77. package/hooks/clawvault/handler.js +213 -78
  78. package/hooks/clawvault/handler.test.js +109 -43
  79. package/hooks/clawvault/integrity.js +112 -0
  80. package/hooks/clawvault/integrity.test.js +32 -0
  81. package/hooks/clawvault/openclaw.plugin.json +133 -15
  82. package/openclaw.plugin.json +126 -20
  83. package/package.json +2 -2
  84. package/bin/register-workgraph-commands.js +0 -1368
  85. package/dist/chunk-33VSQP4J.js +0 -37
  86. package/dist/chunk-4BQTQMJP.js +0 -93
  87. package/dist/chunk-EK6S23ZB.js +0 -469
  88. package/dist/chunk-GAOWA7GR.js +0 -501
  89. package/dist/chunk-GGA32J2R.js +0 -784
  90. package/dist/chunk-MM6QGW3P.js +0 -207
  91. package/dist/chunk-QVEERJSP.js +0 -152
  92. package/dist/chunk-U4O6C46S.js +0 -154
  93. package/dist/chunk-VSL7KY3M.js +0 -189
  94. package/dist/chunk-WMGIIABP.js +0 -15
  95. package/dist/commands/workgraph.d.ts +0 -124
  96. package/dist/commands/workgraph.js +0 -38
  97. package/dist/ledger-B7g7jhqG.d.ts +0 -44
  98. package/dist/registry-BR4326o0.d.ts +0 -30
  99. package/dist/store-CA-6sKCJ.d.ts +0 -34
  100. package/dist/thread-B9LhXNU0.d.ts +0 -41
  101. package/dist/workgraph/index.d.ts +0 -5
  102. package/dist/workgraph/index.js +0 -23
  103. package/dist/workgraph/ledger.d.ts +0 -2
  104. package/dist/workgraph/ledger.js +0 -25
  105. package/dist/workgraph/registry.d.ts +0 -2
  106. package/dist/workgraph/registry.js +0 -19
  107. package/dist/workgraph/store.d.ts +0 -2
  108. package/dist/workgraph/store.js +0 -25
  109. package/dist/workgraph/thread.d.ts +0 -2
  110. package/dist/workgraph/thread.js +0 -25
  111. package/dist/workgraph/types.d.ts +0 -54
  112. package/dist/workgraph/types.js +0 -7
@@ -3,13 +3,14 @@ import {
3
3
  contextCommand,
4
4
  formatContextMarkdown,
5
5
  registerContextCommand
6
- } from "../chunk-ZN54U2OZ.js";
7
- import "../chunk-CLJTREDS.js";
6
+ } from "../chunk-GFCHWMGD.js";
8
7
  import "../chunk-BSJ6RIT7.js";
9
- import "../chunk-FHFUXL6G.js";
10
- import "../chunk-6FH3IULF.js";
11
- import "../chunk-EK6S23ZB.js";
8
+ import "../chunk-ECGJYWNA.js";
12
9
  import "../chunk-2CDEETQN.js";
10
+ import "../chunk-FZ5I2NF7.js";
11
+ import "../chunk-PTWPPVC7.js";
12
+ import "../chunk-H3JZIB5O.js";
13
+ import "../chunk-FHFUXL6G.js";
13
14
  import "../chunk-33DOSHTA.js";
14
15
  import "../chunk-Z2XBWN7A.js";
15
16
  import "../chunk-2ZDO52B4.js";
@@ -4,9 +4,14 @@ interface DoctorCheck {
4
4
  status: DoctorStatus;
5
5
  detail?: string;
6
6
  hint?: string;
7
- category?: 'system' | 'migration' | 'health';
7
+ category?: 'system' | 'vault' | 'config' | 'search' | 'integration' | 'storage' | 'migration';
8
+ }
9
+ interface DoctorOptions {
10
+ vaultPath?: string;
11
+ fix?: boolean;
8
12
  }
9
13
  interface DoctorReport {
14
+ generatedAt: string;
10
15
  vaultPath?: string;
11
16
  checks: DoctorCheck[];
12
17
  warnings: number;
@@ -20,6 +25,6 @@ interface MigrationIssue {
20
25
  details?: Record<string, unknown>;
21
26
  }
22
27
  type MigrationIssueType = 'stale_collection_name' | 'missing_qmd_collection' | 'wrong_vault_path' | 'orphaned_collection' | 'missing_qmd_config' | 'legacy_config_format';
23
- declare function doctor(vaultPath?: string): Promise<DoctorReport>;
28
+ declare function doctor(input?: string | DoctorOptions): Promise<DoctorReport>;
24
29
 
25
- export { type DoctorCheck, type DoctorReport, type DoctorStatus, type MigrationIssue, type MigrationIssueType, doctor };
30
+ export { type DoctorCheck, type DoctorOptions, type DoctorReport, type DoctorStatus, type MigrationIssue, type MigrationIssueType, doctor };
@@ -1,27 +1,13 @@
1
1
  import {
2
2
  doctor
3
- } from "../chunk-GAOWA7GR.js";
4
- import "../chunk-7YZWHM36.js";
5
- import "../chunk-7ZRP733D.js";
6
- import "../chunk-X3SPPUFG.js";
7
- import "../chunk-J7ZWCI2C.js";
8
- import "../chunk-ESFLMDRB.js";
9
- import "../chunk-HRLWZGMA.js";
10
- import "../chunk-77Q5CSPJ.js";
11
- import "../chunk-4PY655YM.js";
12
- import "../chunk-CLJTREDS.js";
13
- import "../chunk-BSJ6RIT7.js";
14
- import "../chunk-FHFUXL6G.js";
15
- import "../chunk-6FH3IULF.js";
16
- import "../chunk-EK6S23ZB.js";
17
- import "../chunk-URXDAUVH.js";
18
- import "../chunk-NCKFNBHJ.js";
3
+ } from "../chunk-CSHO3PJB.js";
4
+ import "../chunk-ECGJYWNA.js";
19
5
  import "../chunk-2CDEETQN.js";
6
+ import "../chunk-FZ5I2NF7.js";
7
+ import "../chunk-PTWPPVC7.js";
8
+ import "../chunk-H3JZIB5O.js";
9
+ import "../chunk-GJO3CFUN.js";
20
10
  import "../chunk-33DOSHTA.js";
21
- import "../chunk-Z2XBWN7A.js";
22
- import "../chunk-QWQ3TIKS.js";
23
- import "../chunk-MFAWT5O5.js";
24
- import "../chunk-7766SIJP.js";
25
11
  import "../chunk-2ZDO52B4.js";
26
12
  export {
27
13
  doctor
@@ -1,10 +1,11 @@
1
1
  import {
2
2
  embedCommand,
3
3
  registerEmbedCommand
4
- } from "../chunk-PBACDKKP.js";
5
- import "../chunk-6FH3IULF.js";
6
- import "../chunk-EK6S23ZB.js";
7
- import "../chunk-GNJL4YGR.js";
4
+ } from "../chunk-T7E764W3.js";
5
+ import "../chunk-FZ5I2NF7.js";
6
+ import "../chunk-PTWPPVC7.js";
7
+ import "../chunk-H3JZIB5O.js";
8
+ import "../chunk-GJO3CFUN.js";
8
9
  import "../chunk-2ZDO52B4.js";
9
10
  export {
10
11
  embedCommand,
@@ -3,7 +3,7 @@ import {
3
3
  } from "../chunk-J7ZWCI2C.js";
4
4
  import {
5
5
  resolveVaultPath
6
- } from "../chunk-GNJL4YGR.js";
6
+ } from "../chunk-GJO3CFUN.js";
7
7
  import "../chunk-2ZDO52B4.js";
8
8
 
9
9
  // src/commands/entities.ts
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  graphCommand,
3
3
  graphSummary
4
- } from "../chunk-QSRRMEYM.js";
5
- import "../chunk-GNJL4YGR.js";
4
+ } from "../chunk-S7N7HI5E.js";
5
+ import "../chunk-GJO3CFUN.js";
6
6
  import "../chunk-33DOSHTA.js";
7
7
  import "../chunk-2ZDO52B4.js";
8
8
  export {
@@ -0,0 +1,23 @@
1
+ import { Command } from 'commander';
2
+
3
+ interface AddInboxItemResult {
4
+ id: string;
5
+ hash: string;
6
+ title: string;
7
+ path: string;
8
+ relativePath: string;
9
+ source: string;
10
+ }
11
+
12
+ interface InboxAddCommandOptions {
13
+ vaultPath?: string;
14
+ content?: string;
15
+ title?: string;
16
+ source?: string;
17
+ stdin?: boolean;
18
+ readStdin?: () => string;
19
+ }
20
+ declare function inboxAddCommand(options: InboxAddCommandOptions): Promise<AddInboxItemResult>;
21
+ declare function registerInboxCommand(program: Command): void;
22
+
23
+ export { type InboxAddCommandOptions, inboxAddCommand, registerInboxCommand };
@@ -0,0 +1,11 @@
1
+ import {
2
+ inboxAddCommand,
3
+ registerInboxCommand
4
+ } from "../chunk-HEHO7SMV.js";
5
+ import "../chunk-2PKBIKDH.js";
6
+ import "../chunk-GJO3CFUN.js";
7
+ import "../chunk-2ZDO52B4.js";
8
+ export {
9
+ inboxAddCommand,
10
+ registerInboxCommand
11
+ };
@@ -1,2 +1,2 @@
1
1
  import 'commander';
2
- export { I as InjectCommandOptions, a as InjectFormat, q as buildInjectionResult, v as injectCommand, x as registerInjectCommand } from '../inject-DYUrDqQO.js';
2
+ export { I as InjectCommandOptions, b as InjectFormat, r as buildInjectionResult, w as injectCommand, y as registerInjectCommand } from '../inject-DEb_jpLi.js';
@@ -2,9 +2,9 @@ import {
2
2
  buildInjectionResult,
3
3
  injectCommand,
4
4
  registerInjectCommand
5
- } from "../chunk-W4SPAEE7.js";
6
- import "../chunk-URXDAUVH.js";
7
- import "../chunk-NCKFNBHJ.js";
5
+ } from "../chunk-OFOCU2V4.js";
6
+ import "../chunk-DVOUSOR3.js";
7
+ import "../chunk-AXSJIFOJ.js";
8
8
  import "../chunk-2CDEETQN.js";
9
9
  import "../chunk-33DOSHTA.js";
10
10
  import "../chunk-2ZDO52B4.js";
@@ -1,19 +1,19 @@
1
- import {
2
- autoLink,
3
- dryRunLink,
4
- findUnlinkedMentions
5
- } from "../chunk-P62WHA27.js";
6
1
  import {
7
2
  readBacklinksIndex,
8
3
  rebuildBacklinksIndex,
9
4
  scanVaultLinks
10
5
  } from "../chunk-7YZWHM36.js";
6
+ import {
7
+ autoLink,
8
+ dryRunLink,
9
+ findUnlinkedMentions
10
+ } from "../chunk-P62WHA27.js";
11
11
  import {
12
12
  buildEntityIndex
13
13
  } from "../chunk-J7ZWCI2C.js";
14
14
  import {
15
15
  resolveVaultPath
16
- } from "../chunk-GNJL4YGR.js";
16
+ } from "../chunk-GJO3CFUN.js";
17
17
  import {
18
18
  buildOrUpdateMemoryGraphIndex
19
19
  } from "../chunk-33DOSHTA.js";
@@ -0,0 +1,32 @@
1
+ import { Command } from 'commander';
2
+
3
+ declare const MAINTENANCE_WORKERS: readonly ["curator", "janitor", "distiller", "surveyor"];
4
+ type MaintenanceWorkerName = (typeof MAINTENANCE_WORKERS)[number];
5
+ interface WorkerRunResult {
6
+ worker: MaintenanceWorkerName;
7
+ processed: number;
8
+ skipped: number;
9
+ actions: string[];
10
+ usedLlm: boolean;
11
+ degradedMode: boolean;
12
+ }
13
+ interface MaintainRunResult {
14
+ runId: string;
15
+ vaultPath: string;
16
+ startedAt: string;
17
+ finishedAt: string;
18
+ logPath: string;
19
+ workers: WorkerRunResult[];
20
+ }
21
+
22
+ interface MaintainCommandOptions {
23
+ vaultPath?: string;
24
+ worker?: MaintenanceWorkerName;
25
+ dryRun?: boolean;
26
+ limit?: number;
27
+ quiet?: boolean;
28
+ }
29
+ declare function maintainCommand(options?: MaintainCommandOptions): Promise<MaintainRunResult>;
30
+ declare function registerMaintainCommand(program: Command): void;
31
+
32
+ export { type MaintainCommandOptions, maintainCommand, registerMaintainCommand };
@@ -0,0 +1,12 @@
1
+ import {
2
+ maintainCommand,
3
+ registerMaintainCommand
4
+ } from "../chunk-TDWFBDAQ.js";
5
+ import "../chunk-DVOUSOR3.js";
6
+ import "../chunk-2PKBIKDH.js";
7
+ import "../chunk-GJO3CFUN.js";
8
+ import "../chunk-2ZDO52B4.js";
9
+ export {
10
+ maintainCommand,
11
+ registerMaintainCommand
12
+ };
@@ -2,9 +2,9 @@ import {
2
2
  migrateObservations,
3
3
  migrateObservationsCommand,
4
4
  registerMigrateObservationsCommand
5
- } from "../chunk-2JQ3O2YL.js";
5
+ } from "../chunk-5EFSWZO6.js";
6
+ import "../chunk-GJO3CFUN.js";
6
7
  import "../chunk-FHFUXL6G.js";
7
- import "../chunk-GNJL4YGR.js";
8
8
  import "../chunk-Z2XBWN7A.js";
9
9
  import "../chunk-2ZDO52B4.js";
10
10
  export {
@@ -1,18 +1,19 @@
1
1
  import {
2
2
  observeCommand,
3
3
  registerObserveCommand
4
- } from "../chunk-23YDQ3QU.js";
5
- import "../chunk-MW5C6ZQA.js";
6
- import "../chunk-ESFLMDRB.js";
4
+ } from "../chunk-BLQXXX7Q.js";
5
+ import "../chunk-VXAGOLDP.js";
6
+ import "../chunk-7SWP5FKU.js";
7
7
  import "../chunk-HRLWZGMA.js";
8
- import "../chunk-77Q5CSPJ.js";
8
+ import "../chunk-DVOUSOR3.js";
9
9
  import "../chunk-4PY655YM.js";
10
+ import "../chunk-AXSJIFOJ.js";
10
11
  import "../chunk-BSJ6RIT7.js";
11
- import "../chunk-FHFUXL6G.js";
12
- import "../chunk-URXDAUVH.js";
13
- import "../chunk-NCKFNBHJ.js";
14
12
  import "../chunk-2CDEETQN.js";
15
- import "../chunk-GNJL4YGR.js";
13
+ import "../chunk-GJO3CFUN.js";
14
+ import "../chunk-MW5C6ZQA.js";
15
+ import "../chunk-J3YUXVID.js";
16
+ import "../chunk-FHFUXL6G.js";
16
17
  import "../chunk-Z2XBWN7A.js";
17
18
  import "../chunk-QWQ3TIKS.js";
18
19
  import "../chunk-MFAWT5O5.js";
@@ -1,10 +1,16 @@
1
1
  import {
2
- EmbeddingCache,
3
- embed
4
- } from "../chunk-U4O6C46S.js";
2
+ listConfig
3
+ } from "../chunk-AXSJIFOJ.js";
4
+ import "../chunk-2CDEETQN.js";
5
+ import {
6
+ EmbeddingStore,
7
+ computeEmbeddingHash,
8
+ embedText,
9
+ resolveEmbeddingConfig
10
+ } from "../chunk-H3JZIB5O.js";
5
11
  import {
6
12
  resolveVaultPath
7
- } from "../chunk-GNJL4YGR.js";
13
+ } from "../chunk-GJO3CFUN.js";
8
14
  import "../chunk-2ZDO52B4.js";
9
15
 
10
16
  // src/commands/rebuild-embeddings.ts
@@ -27,25 +33,43 @@ function walkDir(dir, base) {
27
33
  }
28
34
  return files;
29
35
  }
36
+ function resolveSearchConfig(vaultPath) {
37
+ try {
38
+ const config = listConfig(vaultPath);
39
+ const search = config.search;
40
+ if (search && typeof search === "object" && !Array.isArray(search)) {
41
+ return search;
42
+ }
43
+ return {};
44
+ } catch {
45
+ return {};
46
+ }
47
+ }
30
48
  async function rebuildEmbeddingsForVault(vaultPath, options = {}) {
31
49
  const { force = false, onProgress } = options;
32
- const cache = new EmbeddingCache(vaultPath);
33
- if (!force) {
34
- cache.load();
50
+ const searchConfig = resolveSearchConfig(vaultPath);
51
+ const embeddingConfig = resolveEmbeddingConfig(searchConfig);
52
+ if (!embeddingConfig) {
53
+ throw new Error(
54
+ "No hosted embedding provider configured. Set search.embeddings.provider to openai, gemini, or ollama."
55
+ );
56
+ }
57
+ const store = new EmbeddingStore(vaultPath);
58
+ store.load();
59
+ if (force || !store.isCompatible(embeddingConfig.provider, embeddingConfig.model)) {
60
+ store.clear();
35
61
  }
62
+ store.setSignature(embeddingConfig.provider, embeddingConfig.model);
36
63
  const mdFiles = walkDir(vaultPath, vaultPath).filter(
37
64
  (f) => !f.startsWith("node_modules") && !f.startsWith(".")
38
65
  );
66
+ const validDocIds = /* @__PURE__ */ new Set();
39
67
  let added = 0;
40
68
  let skipped = 0;
41
69
  for (let i = 0; i < mdFiles.length; i++) {
42
70
  const file = mdFiles[i];
43
71
  const docId = file.replace(/\.md$/, "");
44
- if (!force && cache.has(docId)) {
45
- skipped++;
46
- if (onProgress) onProgress(i + 1, mdFiles.length);
47
- continue;
48
- }
72
+ validDocIds.add(docId);
49
73
  try {
50
74
  const content = fs.readFileSync(path.join(vaultPath, file), "utf-8");
51
75
  if (content.length < 20) {
@@ -53,17 +77,24 @@ async function rebuildEmbeddingsForVault(vaultPath, options = {}) {
53
77
  if (onProgress) onProgress(i + 1, mdFiles.length);
54
78
  continue;
55
79
  }
56
- const embedding = await embed(content.slice(0, 8e3));
57
- cache.set(docId, embedding);
80
+ const hash = computeEmbeddingHash(content.slice(0, 12e3));
81
+ if (!force && store.getHash(docId) === hash) {
82
+ skipped++;
83
+ if (onProgress) onProgress(i + 1, mdFiles.length);
84
+ continue;
85
+ }
86
+ const embedding = await embedText(content, embeddingConfig, { isQuery: false });
87
+ store.set(docId, hash, embedding);
58
88
  added++;
59
89
  } catch {
60
90
  skipped++;
61
91
  }
62
92
  if (onProgress) onProgress(i + 1, mdFiles.length);
63
93
  }
64
- cache.save();
94
+ store.prune(validDocIds);
95
+ store.save();
65
96
  return {
66
- total: cache.size,
97
+ total: store.size,
67
98
  added,
68
99
  skipped
69
100
  };
@@ -1,15 +1,16 @@
1
1
  import {
2
2
  rebuildCommand,
3
3
  registerRebuildCommand
4
- } from "../chunk-QSHD36LH.js";
5
- import "../chunk-77Q5CSPJ.js";
4
+ } from "../chunk-QFWERBDP.js";
5
+ import "../chunk-7SWP5FKU.js";
6
+ import "../chunk-DVOUSOR3.js";
6
7
  import "../chunk-4PY655YM.js";
8
+ import "../chunk-AXSJIFOJ.js";
7
9
  import "../chunk-BSJ6RIT7.js";
8
- import "../chunk-FHFUXL6G.js";
9
- import "../chunk-URXDAUVH.js";
10
- import "../chunk-NCKFNBHJ.js";
11
10
  import "../chunk-2CDEETQN.js";
12
- import "../chunk-GNJL4YGR.js";
11
+ import "../chunk-GJO3CFUN.js";
12
+ import "../chunk-J3YUXVID.js";
13
+ import "../chunk-FHFUXL6G.js";
13
14
  import "../chunk-Z2XBWN7A.js";
14
15
  import "../chunk-QWQ3TIKS.js";
15
16
  import "../chunk-MFAWT5O5.js";
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  reflectCommand,
3
3
  registerReflectCommand
4
- } from "../chunk-SLXOR3CC.js";
5
- import "../chunk-ESVS6K2B.js";
6
- import "../chunk-FHFUXL6G.js";
7
- import "../chunk-NCKFNBHJ.js";
4
+ } from "../chunk-DOIUYIXV.js";
5
+ import "../chunk-TWMI3SNN.js";
6
+ import "../chunk-DVOUSOR3.js";
8
7
  import "../chunk-MQUJNOHK.js";
9
- import "../chunk-GNJL4YGR.js";
8
+ import "../chunk-GJO3CFUN.js";
9
+ import "../chunk-FHFUXL6G.js";
10
10
  import "../chunk-Z2XBWN7A.js";
11
11
  import "../chunk-2ZDO52B4.js";
12
12
  export {
@@ -1,17 +1,18 @@
1
1
  import {
2
2
  registerReplayCommand,
3
3
  replayCommand
4
- } from "../chunk-STCQGCEQ.js";
5
- import "../chunk-ESVS6K2B.js";
6
- import "../chunk-77Q5CSPJ.js";
4
+ } from "../chunk-HGDDW24U.js";
5
+ import "../chunk-TWMI3SNN.js";
6
+ import "../chunk-7SWP5FKU.js";
7
+ import "../chunk-DVOUSOR3.js";
7
8
  import "../chunk-4PY655YM.js";
9
+ import "../chunk-AXSJIFOJ.js";
8
10
  import "../chunk-BSJ6RIT7.js";
9
- import "../chunk-FHFUXL6G.js";
10
- import "../chunk-URXDAUVH.js";
11
- import "../chunk-NCKFNBHJ.js";
12
11
  import "../chunk-2CDEETQN.js";
13
12
  import "../chunk-MQUJNOHK.js";
14
- import "../chunk-GNJL4YGR.js";
13
+ import "../chunk-GJO3CFUN.js";
14
+ import "../chunk-J3YUXVID.js";
15
+ import "../chunk-FHFUXL6G.js";
15
16
  import "../chunk-Z2XBWN7A.js";
16
17
  import "../chunk-QWQ3TIKS.js";
17
18
  import "../chunk-MFAWT5O5.js";
@@ -1,8 +1,9 @@
1
1
  import {
2
2
  setupCommand
3
- } from "../chunk-BUEW6IIK.js";
4
- import "../chunk-EK6S23ZB.js";
3
+ } from "../chunk-EL6UBSX5.js";
5
4
  import "../chunk-2CDEETQN.js";
5
+ import "../chunk-PTWPPVC7.js";
6
+ import "../chunk-H3JZIB5O.js";
6
7
  import "../chunk-2ZDO52B4.js";
7
8
  export {
8
9
  setupCommand
@@ -1,4 +1,4 @@
1
- import { H as HandoffDocument, D as Document } from '../types-BbWJoC1c.js';
1
+ import { H as HandoffDocument, D as Document } from '../types-DslKvCaj.js';
2
2
 
3
3
  type PromptFn = (question: string) => Promise<string>;
4
4
  interface SleepOptions {
@@ -1,34 +1,36 @@
1
1
  import {
2
- parseSessionFile
3
- } from "../chunk-MW5C6ZQA.js";
2
+ clearDirtyFlag
3
+ } from "../chunk-F55HGNU4.js";
4
4
  import {
5
5
  runReflection
6
- } from "../chunk-ESVS6K2B.js";
6
+ } from "../chunk-TWMI3SNN.js";
7
7
  import {
8
8
  Observer
9
- } from "../chunk-77Q5CSPJ.js";
9
+ } from "../chunk-7SWP5FKU.js";
10
+ import "../chunk-DVOUSOR3.js";
10
11
  import "../chunk-4PY655YM.js";
12
+ import "../chunk-AXSJIFOJ.js";
13
+ import "../chunk-BSJ6RIT7.js";
11
14
  import {
12
15
  ClawVault
13
- } from "../chunk-CLJTREDS.js";
14
- import "../chunk-BSJ6RIT7.js";
15
- import "../chunk-FHFUXL6G.js";
16
- import "../chunk-6FH3IULF.js";
16
+ } from "../chunk-ECGJYWNA.js";
17
+ import "../chunk-2CDEETQN.js";
18
+ import "../chunk-FZ5I2NF7.js";
17
19
  import {
18
20
  qmdUpdate
19
- } from "../chunk-EK6S23ZB.js";
20
- import "../chunk-URXDAUVH.js";
21
- import "../chunk-NCKFNBHJ.js";
22
- import "../chunk-2CDEETQN.js";
21
+ } from "../chunk-PTWPPVC7.js";
22
+ import "../chunk-H3JZIB5O.js";
23
23
  import "../chunk-MQUJNOHK.js";
24
+ import {
25
+ parseSessionFile
26
+ } from "../chunk-MW5C6ZQA.js";
27
+ import "../chunk-J3YUXVID.js";
28
+ import "../chunk-FHFUXL6G.js";
24
29
  import "../chunk-33DOSHTA.js";
25
30
  import "../chunk-Z2XBWN7A.js";
26
31
  import "../chunk-QWQ3TIKS.js";
27
32
  import "../chunk-MFAWT5O5.js";
28
33
  import "../chunk-7766SIJP.js";
29
- import {
30
- clearDirtyFlag
31
- } from "../chunk-F55HGNU4.js";
32
34
  import "../chunk-2ZDO52B4.js";
33
35
 
34
36
  // src/commands/sleep.ts
@@ -1,32 +1,33 @@
1
- import {
2
- scanVaultLinks
3
- } from "../chunk-7YZWHM36.js";
4
1
  import {
5
2
  formatAge
6
3
  } from "../chunk-7ZRP733D.js";
4
+ import {
5
+ scanVaultLinks
6
+ } from "../chunk-7YZWHM36.js";
7
7
  import "../chunk-J7ZWCI2C.js";
8
8
  import {
9
9
  getObserverStaleness
10
- } from "../chunk-ESFLMDRB.js";
10
+ } from "../chunk-VXAGOLDP.js";
11
+ import "../chunk-7SWP5FKU.js";
11
12
  import "../chunk-HRLWZGMA.js";
12
- import "../chunk-77Q5CSPJ.js";
13
+ import "../chunk-DVOUSOR3.js";
13
14
  import "../chunk-4PY655YM.js";
15
+ import "../chunk-AXSJIFOJ.js";
16
+ import "../chunk-BSJ6RIT7.js";
14
17
  import {
15
18
  ClawVault
16
- } from "../chunk-CLJTREDS.js";
17
- import "../chunk-BSJ6RIT7.js";
18
- import "../chunk-FHFUXL6G.js";
19
+ } from "../chunk-ECGJYWNA.js";
20
+ import "../chunk-2CDEETQN.js";
19
21
  import {
20
22
  parseQmdCollectionList
21
- } from "../chunk-6FH3IULF.js";
23
+ } from "../chunk-FZ5I2NF7.js";
22
24
  import {
23
- QmdUnavailableError,
24
25
  hasQmd,
25
26
  withQmdIndexArgs
26
- } from "../chunk-EK6S23ZB.js";
27
- import "../chunk-URXDAUVH.js";
28
- import "../chunk-NCKFNBHJ.js";
29
- import "../chunk-2CDEETQN.js";
27
+ } from "../chunk-PTWPPVC7.js";
28
+ import "../chunk-H3JZIB5O.js";
29
+ import "../chunk-J3YUXVID.js";
30
+ import "../chunk-FHFUXL6G.js";
30
31
  import {
31
32
  loadMemoryGraphIndex
32
33
  } from "../chunk-33DOSHTA.js";
@@ -124,9 +125,6 @@ function loadCheckpoint(vaultPath) {
124
125
  }
125
126
  }
126
127
  async function getStatus(vaultPath, options = {}) {
127
- if (!hasQmd()) {
128
- throw new QmdUnavailableError();
129
- }
130
128
  const vault = new ClawVault(path.resolve(vaultPath));
131
129
  await vault.load();
132
130
  const stats = await vault.stats();
@@ -156,14 +154,18 @@ async function getStatus(vaultPath, options = {}) {
156
154
  const qmdRoot = vault.getQmdRoot();
157
155
  let qmdIndexResult = { status: "missing" };
158
156
  let qmdError;
159
- try {
160
- qmdIndexResult = getQmdIndexStatus(qmdCollection, qmdRoot, options.qmdIndexName);
161
- if (qmdIndexResult.status !== "present") {
162
- issues.push(`qmd collection ${qmdIndexResult.status.replace("-", " ")}`);
157
+ if (hasQmd()) {
158
+ try {
159
+ qmdIndexResult = getQmdIndexStatus(qmdCollection, qmdRoot, options.qmdIndexName);
160
+ if (qmdIndexResult.status !== "present") {
161
+ issues.push(`qmd collection ${qmdIndexResult.status.replace("-", " ")}`);
162
+ }
163
+ } catch (err) {
164
+ qmdError = err?.message || "Failed to check qmd index";
165
+ issues.push(`qmd status error: ${qmdError}`);
163
166
  }
164
- } catch (err) {
165
- qmdError = err?.message || "Failed to check qmd index";
166
- issues.push(`qmd status error: ${qmdError}`);
167
+ } else {
168
+ qmdError = "qmd not installed (optional)";
167
169
  }
168
170
  let gitStatus;
169
171
  const gitRoot = findGitRoot(vault.getPath());
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  registerSyncBdCommand,
3
3
  syncBdCommand
4
- } from "../chunk-SS4B7P7V.js";
5
- import "../chunk-GNJL4YGR.js";
4
+ } from "../chunk-YIDV4VV2.js";
5
+ import "../chunk-GJO3CFUN.js";
6
6
  import "../chunk-2ZDO52B4.js";
7
7
  export {
8
8
  registerSyncBdCommand,
@@ -8,10 +8,10 @@ import {
8
8
  tailscaleServeCommand,
9
9
  tailscaleStatusCommand,
10
10
  tailscaleSyncCommand
11
- } from "../chunk-Y6VJKXGL.js";
11
+ } from "../chunk-KCYWJDDW.js";
12
12
  import "../chunk-TIGW564L.js";
13
13
  import "../chunk-IVRIKYFE.js";
14
- import "../chunk-GNJL4YGR.js";
14
+ import "../chunk-GJO3CFUN.js";
15
15
  import "../chunk-2ZDO52B4.js";
16
16
  export {
17
17
  registerTailscaleCommands,
@@ -1,4 +1,4 @@
1
- import { S as SessionRecap } from '../types-BbWJoC1c.js';
1
+ import { e as SessionRecap } from '../types-DslKvCaj.js';
2
2
  import { RecoveryInfo } from './recover.js';
3
3
  import './checkpoint.js';
4
4