clawvault 3.1.0 → 3.2.1

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 (273) hide show
  1. package/README.md +422 -141
  2. package/bin/clawvault.js +10 -2
  3. package/bin/command-registration.test.js +3 -1
  4. package/bin/command-runtime.js +9 -1
  5. package/bin/register-core-commands.js +23 -28
  6. package/bin/register-maintenance-commands.js +39 -3
  7. package/bin/register-query-commands.js +58 -29
  8. package/bin/register-tailscale-commands.js +106 -0
  9. package/bin/register-task-commands.js +18 -1
  10. package/bin/register-task-commands.test.js +16 -0
  11. package/bin/register-vault-operations-commands.js +29 -1
  12. package/bin/register-workgraph-commands.js +451 -0
  13. package/dashboard/lib/graph-diff.js +104 -0
  14. package/dashboard/lib/graph-diff.test.js +75 -0
  15. package/dashboard/lib/vault-parser.js +556 -0
  16. package/dashboard/lib/vault-parser.test.js +254 -0
  17. package/dashboard/public/app.js +796 -0
  18. package/dashboard/public/index.html +52 -0
  19. package/dashboard/public/styles.css +221 -0
  20. package/dashboard/server.js +374 -0
  21. package/dist/{chunk-C7OK5WKP.js → chunk-2JQ3O2YL.js} +4 -4
  22. package/dist/{chunk-VR5NE7PZ.js → chunk-2RAZ4ZFE.js} +1 -1
  23. package/dist/{chunk-F2JEUD4J.js → chunk-4ITRXIVT.js} +5 -7
  24. package/dist/{chunk-GUKMRGM7.js → chunk-4OXMU5S2.js} +1 -1
  25. package/dist/chunk-5PJ4STIC.js +465 -0
  26. package/dist/{chunk-62YTUT6J.js → chunk-AZYOKJYC.js} +2 -2
  27. package/dist/chunk-BSJ6RIT7.js +447 -0
  28. package/dist/chunk-ECRZL5XR.js +50 -0
  29. package/dist/chunk-ERNE2FZ5.js +189 -0
  30. package/dist/{chunk-WAZ3NLWL.js → chunk-F55HGNU4.js} +0 -47
  31. package/dist/{chunk-VGLOTGAS.js → chunk-FAKNOB7Y.js} +2 -2
  32. package/dist/{chunk-QK3UCXWL.js → chunk-FHFUXL6G.js} +2 -2
  33. package/dist/chunk-GNJL4YGR.js +79 -0
  34. package/dist/chunk-HR4KN6S2.js +152 -0
  35. package/dist/{chunk-OZ7RIXTO.js → chunk-IIOU45CK.js} +1 -1
  36. package/dist/chunk-IJBFGPCS.js +33 -0
  37. package/dist/chunk-IVRIKYFE.js +520 -0
  38. package/dist/chunk-K7PNYS45.js +93 -0
  39. package/dist/chunk-MDIH26GC.js +183 -0
  40. package/dist/{chunk-LYHGEHXG.js → chunk-MFAWT5O5.js} +0 -1
  41. package/dist/{chunk-H34S76MB.js → chunk-MNPUYCHQ.js} +6 -6
  42. package/dist/chunk-NTOPJI7W.js +207 -0
  43. package/dist/{chunk-QBLMXKF2.js → chunk-OIWVQYQF.js} +1 -1
  44. package/dist/chunk-PG56HX5T.js +154 -0
  45. package/dist/{chunk-LNJA2UGL.js → chunk-PI4WMLMG.js} +7 -84
  46. package/dist/chunk-QMHPQYUV.js +363 -0
  47. package/dist/{chunk-H62BP7RI.js → chunk-QPDDIHXE.js} +209 -43
  48. package/dist/{chunk-N2AXRYLC.js → chunk-QWQ3TIKS.js} +1 -1
  49. package/dist/{chunk-3DHXQHYG.js → chunk-R2MIW5G7.js} +1 -1
  50. package/dist/{chunk-SJSFRIYS.js → chunk-S5OJEGFG.js} +2 -2
  51. package/dist/chunk-SS4B7P7V.js +99 -0
  52. package/dist/chunk-TIGW564L.js +628 -0
  53. package/dist/chunk-U67V476Y.js +35 -0
  54. package/dist/{chunk-JY6FYXIT.js → chunk-UCQAOZHW.js} +6 -11
  55. package/dist/{chunk-ITPEXLHA.js → chunk-URXDAUVH.js} +24 -5
  56. package/dist/chunk-WIOLLGAD.js +190 -0
  57. package/dist/{chunk-3WRJEKN4.js → chunk-WJVWINEM.js} +72 -8
  58. package/dist/chunk-WMGIIABP.js +15 -0
  59. package/dist/{chunk-33UGEQRT.js → chunk-X3SPPUFG.js} +151 -64
  60. package/dist/{chunk-3NSBOUT3.js → chunk-Y3TIJEBP.js} +314 -79
  61. package/dist/chunk-Y6VJKXGL.js +373 -0
  62. package/dist/{chunk-LI4O6NVK.js → chunk-YDWHS4LJ.js} +49 -9
  63. package/dist/{chunk-U55BGUAU.js → chunk-YNIPYN4F.js} +5 -5
  64. package/dist/chunk-YXQCA6B7.js +226 -0
  65. package/dist/cli/index.js +26 -22
  66. package/dist/commands/archive.js +3 -3
  67. package/dist/commands/backlog.js +3 -3
  68. package/dist/commands/blocked.js +3 -3
  69. package/dist/commands/canvas.d.ts +15 -0
  70. package/dist/commands/canvas.js +200 -0
  71. package/dist/commands/checkpoint.js +2 -2
  72. package/dist/commands/compat.js +2 -2
  73. package/dist/commands/context.js +7 -5
  74. package/dist/commands/doctor.d.ts +11 -7
  75. package/dist/commands/doctor.js +16 -14
  76. package/dist/commands/embed.js +5 -6
  77. package/dist/commands/entities.js +2 -2
  78. package/dist/commands/graph.js +3 -3
  79. package/dist/commands/inject.d.ts +1 -1
  80. package/dist/commands/inject.js +4 -5
  81. package/dist/commands/kanban.js +4 -4
  82. package/dist/commands/link.js +2 -2
  83. package/dist/commands/migrate-observations.js +4 -4
  84. package/dist/commands/observe.d.ts +0 -1
  85. package/dist/commands/observe.js +13 -12
  86. package/dist/commands/project.js +5 -5
  87. package/dist/commands/rebuild-embeddings.d.ts +21 -0
  88. package/dist/commands/rebuild-embeddings.js +91 -0
  89. package/dist/commands/rebuild.js +12 -11
  90. package/dist/commands/recover.js +3 -3
  91. package/dist/commands/reflect.js +6 -7
  92. package/dist/commands/repair-session.js +1 -1
  93. package/dist/commands/replay.js +14 -14
  94. package/dist/commands/session-recap.js +1 -1
  95. package/dist/commands/setup.d.ts +2 -89
  96. package/dist/commands/setup.js +3 -21
  97. package/dist/commands/shell-init.js +1 -1
  98. package/dist/commands/sleep.d.ts +1 -1
  99. package/dist/commands/sleep.js +18 -17
  100. package/dist/commands/status.d.ts +2 -0
  101. package/dist/commands/status.js +40 -30
  102. package/dist/commands/sync-bd.d.ts +10 -0
  103. package/dist/commands/sync-bd.js +10 -0
  104. package/dist/commands/tailscale.d.ts +52 -0
  105. package/dist/commands/tailscale.js +26 -0
  106. package/dist/commands/task.js +4 -4
  107. package/dist/commands/template.js +2 -2
  108. package/dist/commands/wake.d.ts +1 -1
  109. package/dist/commands/wake.js +11 -10
  110. package/dist/index.d.ts +334 -191
  111. package/dist/index.js +432 -108
  112. package/dist/{inject-Bzi5E-By.d.ts → inject-DYUrDqQO.d.ts} +3 -3
  113. package/dist/ledger-B7g7jhqG.d.ts +44 -0
  114. package/dist/lib/auto-linker.js +1 -1
  115. package/dist/lib/canvas-layout.d.ts +115 -0
  116. package/dist/lib/canvas-layout.js +35 -0
  117. package/dist/lib/config.d.ts +27 -3
  118. package/dist/lib/config.js +4 -2
  119. package/dist/lib/entity-index.js +1 -1
  120. package/dist/lib/project-utils.js +4 -4
  121. package/dist/lib/session-repair.js +1 -1
  122. package/dist/lib/session-utils.js +1 -1
  123. package/dist/lib/tailscale.d.ts +225 -0
  124. package/dist/lib/tailscale.js +50 -0
  125. package/dist/lib/task-utils.js +3 -3
  126. package/dist/lib/template-engine.js +1 -1
  127. package/dist/lib/webdav.d.ts +109 -0
  128. package/dist/lib/webdav.js +35 -0
  129. package/dist/plugin/index.d.ts +344 -28
  130. package/dist/plugin/index.js +3919 -227
  131. package/dist/registry-BR4326o0.d.ts +30 -0
  132. package/dist/store-CA-6sKCJ.d.ts +34 -0
  133. package/dist/thread-B9LhXNU0.d.ts +41 -0
  134. package/dist/{types-Y2_Um2Ls.d.ts → types-BbWJoC1c.d.ts} +1 -44
  135. package/dist/workgraph/index.d.ts +5 -0
  136. package/dist/workgraph/index.js +23 -0
  137. package/dist/workgraph/ledger.d.ts +2 -0
  138. package/dist/workgraph/ledger.js +25 -0
  139. package/dist/workgraph/registry.d.ts +2 -0
  140. package/dist/workgraph/registry.js +19 -0
  141. package/dist/workgraph/store.d.ts +2 -0
  142. package/dist/workgraph/store.js +25 -0
  143. package/dist/workgraph/thread.d.ts +2 -0
  144. package/dist/workgraph/thread.js +25 -0
  145. package/dist/workgraph/types.d.ts +54 -0
  146. package/dist/workgraph/types.js +7 -0
  147. package/hooks/clawvault/HOOK.md +113 -0
  148. package/hooks/clawvault/handler.js +1559 -0
  149. package/hooks/clawvault/handler.test.js +510 -0
  150. package/hooks/clawvault/openclaw.plugin.json +72 -0
  151. package/openclaw.plugin.json +235 -30
  152. package/package.json +20 -20
  153. package/dist/chunk-3RG5ZIWI.js +0 -10
  154. package/dist/chunk-3ZIH425O.js +0 -871
  155. package/dist/chunk-6U6MK36V.js +0 -205
  156. package/dist/chunk-CMB7UL7C.js +0 -327
  157. package/dist/chunk-D2H45LON.js +0 -1074
  158. package/dist/chunk-E7MFQB6D.js +0 -163
  159. package/dist/chunk-GQSLDZTS.js +0 -560
  160. package/dist/chunk-MFM6K7PU.js +0 -374
  161. package/dist/chunk-MXSSG3QU.js +0 -42
  162. package/dist/chunk-OCGVIN3L.js +0 -88
  163. package/dist/chunk-PAH27GSN.js +0 -108
  164. package/dist/chunk-YCUNCH2I.js +0 -78
  165. package/dist/cli/index.cjs +0 -8584
  166. package/dist/cli/index.d.cts +0 -5
  167. package/dist/commands/archive.cjs +0 -287
  168. package/dist/commands/archive.d.cts +0 -11
  169. package/dist/commands/backlog.cjs +0 -721
  170. package/dist/commands/backlog.d.cts +0 -53
  171. package/dist/commands/blocked.cjs +0 -204
  172. package/dist/commands/blocked.d.cts +0 -26
  173. package/dist/commands/checkpoint.cjs +0 -244
  174. package/dist/commands/checkpoint.d.cts +0 -41
  175. package/dist/commands/compat.cjs +0 -294
  176. package/dist/commands/compat.d.cts +0 -28
  177. package/dist/commands/context.cjs +0 -2990
  178. package/dist/commands/context.d.cts +0 -2
  179. package/dist/commands/doctor.cjs +0 -2986
  180. package/dist/commands/doctor.d.cts +0 -21
  181. package/dist/commands/embed.cjs +0 -232
  182. package/dist/commands/embed.d.cts +0 -17
  183. package/dist/commands/entities.cjs +0 -141
  184. package/dist/commands/entities.d.cts +0 -7
  185. package/dist/commands/graph.cjs +0 -501
  186. package/dist/commands/graph.d.cts +0 -21
  187. package/dist/commands/inject.cjs +0 -1636
  188. package/dist/commands/inject.d.cts +0 -2
  189. package/dist/commands/kanban.cjs +0 -884
  190. package/dist/commands/kanban.d.cts +0 -63
  191. package/dist/commands/link.cjs +0 -965
  192. package/dist/commands/link.d.cts +0 -11
  193. package/dist/commands/migrate-observations.cjs +0 -362
  194. package/dist/commands/migrate-observations.d.cts +0 -19
  195. package/dist/commands/observe.cjs +0 -4099
  196. package/dist/commands/observe.d.cts +0 -23
  197. package/dist/commands/project.cjs +0 -1341
  198. package/dist/commands/project.d.cts +0 -85
  199. package/dist/commands/rebuild.cjs +0 -3136
  200. package/dist/commands/rebuild.d.cts +0 -11
  201. package/dist/commands/recover.cjs +0 -361
  202. package/dist/commands/recover.d.cts +0 -38
  203. package/dist/commands/reflect.cjs +0 -1008
  204. package/dist/commands/reflect.d.cts +0 -11
  205. package/dist/commands/repair-session.cjs +0 -457
  206. package/dist/commands/repair-session.d.cts +0 -38
  207. package/dist/commands/replay.cjs +0 -4103
  208. package/dist/commands/replay.d.cts +0 -16
  209. package/dist/commands/session-recap.cjs +0 -353
  210. package/dist/commands/session-recap.d.cts +0 -27
  211. package/dist/commands/setup.cjs +0 -1278
  212. package/dist/commands/setup.d.cts +0 -99
  213. package/dist/commands/shell-init.cjs +0 -75
  214. package/dist/commands/shell-init.d.cts +0 -7
  215. package/dist/commands/sleep.cjs +0 -6029
  216. package/dist/commands/sleep.d.cts +0 -36
  217. package/dist/commands/status.cjs +0 -2737
  218. package/dist/commands/status.d.cts +0 -52
  219. package/dist/commands/task.cjs +0 -1236
  220. package/dist/commands/task.d.cts +0 -97
  221. package/dist/commands/template.cjs +0 -457
  222. package/dist/commands/template.d.cts +0 -36
  223. package/dist/commands/wake.cjs +0 -2627
  224. package/dist/commands/wake.d.cts +0 -22
  225. package/dist/context-BUGaWpyL.d.cts +0 -46
  226. package/dist/index.cjs +0 -12373
  227. package/dist/index.d.cts +0 -854
  228. package/dist/inject-Bzi5E-By.d.cts +0 -137
  229. package/dist/lib/auto-linker.cjs +0 -176
  230. package/dist/lib/auto-linker.d.cts +0 -26
  231. package/dist/lib/config.cjs +0 -78
  232. package/dist/lib/config.d.cts +0 -11
  233. package/dist/lib/entity-index.cjs +0 -84
  234. package/dist/lib/entity-index.d.cts +0 -26
  235. package/dist/lib/project-utils.cjs +0 -864
  236. package/dist/lib/project-utils.d.cts +0 -97
  237. package/dist/lib/session-repair.cjs +0 -239
  238. package/dist/lib/session-repair.d.cts +0 -110
  239. package/dist/lib/session-utils.cjs +0 -209
  240. package/dist/lib/session-utils.d.cts +0 -63
  241. package/dist/lib/task-utils.cjs +0 -1137
  242. package/dist/lib/task-utils.d.cts +0 -208
  243. package/dist/lib/template-engine.cjs +0 -47
  244. package/dist/lib/template-engine.d.cts +0 -11
  245. package/dist/plugin/index.cjs +0 -1907
  246. package/dist/plugin/index.d.cts +0 -36
  247. package/dist/plugin/inject.cjs +0 -356
  248. package/dist/plugin/inject.d.cts +0 -54
  249. package/dist/plugin/inject.d.ts +0 -54
  250. package/dist/plugin/inject.js +0 -17
  251. package/dist/plugin/observe.cjs +0 -631
  252. package/dist/plugin/observe.d.cts +0 -39
  253. package/dist/plugin/observe.d.ts +0 -39
  254. package/dist/plugin/observe.js +0 -18
  255. package/dist/plugin/templates.cjs +0 -593
  256. package/dist/plugin/templates.d.cts +0 -52
  257. package/dist/plugin/templates.d.ts +0 -52
  258. package/dist/plugin/templates.js +0 -25
  259. package/dist/plugin/types.cjs +0 -18
  260. package/dist/plugin/types.d.cts +0 -209
  261. package/dist/plugin/types.d.ts +0 -209
  262. package/dist/plugin/types.js +0 -0
  263. package/dist/plugin/vault.cjs +0 -927
  264. package/dist/plugin/vault.d.cts +0 -68
  265. package/dist/plugin/vault.d.ts +0 -68
  266. package/dist/plugin/vault.js +0 -22
  267. package/dist/types-Y2_Um2Ls.d.cts +0 -205
  268. package/templates/memory-event.md +0 -67
  269. package/templates/party.md +0 -63
  270. package/templates/primitive-registry.yaml +0 -551
  271. package/templates/run.md +0 -68
  272. package/templates/trigger.md +0 -68
  273. package/templates/workspace.md +0 -50
@@ -0,0 +1,109 @@
1
+ import * as fs from 'fs';
2
+ import { IncomingMessage, ServerResponse } from 'http';
3
+
4
+ /**
5
+ * WebDAV Handler for ClawVault
6
+ *
7
+ * Implements WebDAV protocol support for Obsidian mobile sync via Remotely Save plugin.
8
+ * Uses only Node built-in modules (http, fs, path) - zero external dependencies.
9
+ *
10
+ * Supported methods:
11
+ * - GET: Serve file contents
12
+ * - PUT: Write/create file (creates parent dirs if needed)
13
+ * - DELETE: Delete file or directory
14
+ * - MKCOL: Create directory
15
+ * - PROPFIND: List directory contents or file properties (XML response)
16
+ * - OPTIONS: Return allowed methods + DAV header
17
+ * - HEAD: File metadata without body
18
+ * - MOVE: Rename/move file (uses Destination header)
19
+ * - COPY: Copy file
20
+ */
21
+
22
+ interface WebDAVConfig {
23
+ /** Root path for WebDAV files (vault path) */
24
+ rootPath: string;
25
+ /** URL prefix for WebDAV routes (default: /webdav) */
26
+ prefix?: string;
27
+ /** Optional Basic Auth credentials */
28
+ auth?: {
29
+ username: string;
30
+ password: string;
31
+ };
32
+ }
33
+ interface WebDAVRequest {
34
+ method: string;
35
+ path: string;
36
+ headers: Record<string, string | string[] | undefined>;
37
+ body?: string;
38
+ }
39
+ interface WebDAVResponse {
40
+ status: number;
41
+ headers: Record<string, string>;
42
+ body?: string;
43
+ }
44
+ declare const WEBDAV_PREFIX = "/webdav";
45
+ /**
46
+ * Check if a path is safe (no traversal attacks, not blocked)
47
+ */
48
+ declare function isPathSafe(requestPath: string, rootPath: string): boolean;
49
+ /**
50
+ * Resolve a WebDAV path to filesystem path
51
+ */
52
+ declare function resolveWebDAVPath(requestPath: string, rootPath: string): string | null;
53
+ /**
54
+ * Check Basic Auth credentials
55
+ */
56
+ declare function checkAuth(req: IncomingMessage, auth?: {
57
+ username: string;
58
+ password: string;
59
+ }): boolean;
60
+ /**
61
+ * Generate full PROPFIND response XML
62
+ */
63
+ declare function generatePropfindResponse(entries: Array<{
64
+ href: string;
65
+ stats: fs.Stats | null;
66
+ isCollection: boolean;
67
+ }>): string;
68
+ /**
69
+ * Handle OPTIONS request
70
+ */
71
+ declare function handleOptions(res: ServerResponse, prefix: string): void;
72
+ /**
73
+ * Handle HEAD request
74
+ */
75
+ declare function handleHead(res: ServerResponse, filePath: string): void;
76
+ /**
77
+ * Handle GET request
78
+ */
79
+ declare function handleGet(res: ServerResponse, filePath: string): void;
80
+ /**
81
+ * Handle PUT request
82
+ */
83
+ declare function handlePut(res: ServerResponse, filePath: string, body: Buffer): void;
84
+ /**
85
+ * Handle DELETE request
86
+ */
87
+ declare function handleDelete(res: ServerResponse, filePath: string): void;
88
+ /**
89
+ * Handle MKCOL request (create directory)
90
+ */
91
+ declare function handleMkcol(res: ServerResponse, filePath: string): void;
92
+ /**
93
+ * Handle PROPFIND request
94
+ */
95
+ declare function handlePropfind(res: ServerResponse, filePath: string, webdavPath: string, prefix: string, depth: string): void;
96
+ /**
97
+ * Handle MOVE request
98
+ */
99
+ declare function handleMove(res: ServerResponse, sourcePath: string, destinationPath: string | null, overwrite: boolean): void;
100
+ /**
101
+ * Handle COPY request
102
+ */
103
+ declare function handleCopy(res: ServerResponse, sourcePath: string, destinationPath: string | null, overwrite: boolean): void;
104
+ /**
105
+ * Create WebDAV request handler
106
+ */
107
+ declare function createWebDAVHandler(config: WebDAVConfig): (req: IncomingMessage, res: ServerResponse) => Promise<boolean>;
108
+
109
+ export { WEBDAV_PREFIX, type WebDAVConfig, type WebDAVRequest, type WebDAVResponse, checkAuth, createWebDAVHandler, generatePropfindResponse, handleCopy, handleDelete, handleGet, handleHead, handleMkcol, handleMove, handleOptions, handlePropfind, handlePut, isPathSafe, resolveWebDAVPath };
@@ -0,0 +1,35 @@
1
+ import {
2
+ WEBDAV_PREFIX,
3
+ checkAuth,
4
+ createWebDAVHandler,
5
+ generatePropfindResponse,
6
+ handleCopy,
7
+ handleDelete,
8
+ handleGet,
9
+ handleHead,
10
+ handleMkcol,
11
+ handleMove,
12
+ handleOptions,
13
+ handlePropfind,
14
+ handlePut,
15
+ isPathSafe,
16
+ resolveWebDAVPath
17
+ } from "../chunk-IVRIKYFE.js";
18
+ import "../chunk-U67V476Y.js";
19
+ export {
20
+ WEBDAV_PREFIX,
21
+ checkAuth,
22
+ createWebDAVHandler,
23
+ generatePropfindResponse,
24
+ handleCopy,
25
+ handleDelete,
26
+ handleGet,
27
+ handleHead,
28
+ handleMkcol,
29
+ handleMove,
30
+ handleOptions,
31
+ handlePropfind,
32
+ handlePut,
33
+ isPathSafe,
34
+ resolveWebDAVPath
35
+ };
@@ -1,36 +1,352 @@
1
- import { TemplateRegistry } from './templates.js';
2
- export { classifyText, getAllSchemas, getSchema, getSchemaNames, initializeTemplateRegistry } from './templates.js';
3
- export { detectCategory, extractObservations, extractSearchTerms, isObservable, processMessageForObservations } from './observe.js';
4
- export { buildFullContext, buildPreferenceContext, buildSessionRecap, formatMemoriesForContext, formatSearchResults, scanVaultFiles } from './inject.js';
5
- export { appendToLedger, batchWriteObservations, ensureVaultStructure, writeObservation, writeVaultFile } from './vault.js';
1
+ /**
2
+ * ClawVault Plugin v2 Type definitions
3
+ */
4
+ interface FieldDef {
5
+ type: 'string' | 'number' | 'boolean' | 'datetime' | 'date';
6
+ required?: boolean;
7
+ default?: string | number | boolean;
8
+ enum?: string[];
9
+ description?: string;
10
+ }
11
+ interface TemplateSchema {
12
+ primitive: string;
13
+ description?: string;
14
+ fields: Record<string, FieldDef>;
15
+ bodyTemplate?: string;
16
+ keywords?: string[];
17
+ }
18
+ interface TemplateRegistry {
19
+ schemas: Map<string, TemplateSchema>;
20
+ keywordIndex: Map<string, string[]>;
21
+ initialized: boolean;
22
+ }
23
+ interface ClassificationResult {
24
+ primitiveType: string;
25
+ confidence: number;
26
+ matchedKeywords: string[];
27
+ }
28
+ interface Observation {
29
+ text: string;
30
+ primitiveType: string;
31
+ confidence: number;
32
+ matchedKeywords: string[];
33
+ category: string;
34
+ tags: string[];
35
+ extractedAt: Date;
36
+ }
37
+ interface ObservationResult {
38
+ observations: Observation[];
39
+ skipped: number;
40
+ reason?: string;
41
+ }
42
+ interface VaultFile {
43
+ path: string;
44
+ relativePath: string;
45
+ primitiveType: string;
46
+ frontmatter: Record<string, unknown>;
47
+ content: string;
48
+ modifiedAt: Date;
49
+ createdAt: Date;
50
+ }
51
+ interface WriteResult {
52
+ success: boolean;
53
+ path: string;
54
+ primitiveType: string;
55
+ errors: string[];
56
+ created: boolean;
57
+ updated: boolean;
58
+ }
59
+ interface WriteOptions {
60
+ primitiveType?: string;
61
+ title?: string;
62
+ content?: string;
63
+ extraFields?: Record<string, unknown>;
64
+ source?: string;
65
+ sessionId?: string;
66
+ directory?: string;
67
+ filename?: string;
68
+ overwrite?: boolean;
69
+ }
70
+ interface LedgerEntry {
71
+ timestamp: Date;
72
+ category?: string;
73
+ actor?: string;
74
+ content: string;
75
+ primitiveType?: string;
76
+ tags?: string[];
77
+ }
78
+ interface BatchWriteOptions {
79
+ source?: string;
80
+ sessionId?: string;
81
+ actor?: string;
82
+ writeLedger?: boolean;
83
+ writeFiles?: boolean;
84
+ }
85
+ interface BatchWriteResult {
86
+ total: number;
87
+ successful: number;
88
+ failed: number;
89
+ results: WriteResult[];
90
+ }
91
+ interface ScanOptions {
92
+ maxAge?: number;
93
+ limit?: number;
94
+ primitiveTypes?: string[];
95
+ }
96
+ interface SessionRecapResult {
97
+ xml: string;
98
+ fileCount: number;
99
+ primitiveGroups: Record<string, number>;
100
+ timeRange: {
101
+ oldest: Date;
102
+ newest: Date;
103
+ } | null;
104
+ }
105
+ interface PreferenceContextResult {
106
+ xml: string;
107
+ preferenceCount: number;
108
+ categories: string[];
109
+ }
110
+ interface QmdResult {
111
+ file?: string;
112
+ title?: string;
113
+ snippet?: string;
114
+ score?: number;
115
+ }
116
+ type MemoryScope = 'global' | `agent:${string}` | `project:${string}` | `user:${string}`;
117
+ interface RetrievalConfig {
118
+ /** BM25 weight in RRF fusion (default: 0.5) */
119
+ bm25Weight: number;
120
+ /** Semantic weight in RRF fusion (default: 0.5) */
121
+ semanticWeight: number;
122
+ /** RRF k parameter (default: 60) */
123
+ rrfK: number;
124
+ /** Max results to return (default: 10) */
125
+ topK: number;
126
+ /** Minimum score threshold (default: 0.01) */
127
+ minScore: number;
128
+ /** Recency boost half-life in days (default: 14, 0 = disabled) */
129
+ recencyHalfLifeDays: number;
130
+ /** Recency boost weight (default: 0.10) */
131
+ recencyWeight: number;
132
+ /** Time decay half-life in days (default: 60, 0 = disabled) */
133
+ decayHalfLifeDays: number;
134
+ /** Length normalization anchor in chars (default: 500, 0 = disabled) */
135
+ lengthNormAnchor: number;
136
+ /** MMR lambda for diversity (default: 0.7, 1.0 = no diversity) */
137
+ mmrLambda: number;
138
+ /** Reranker provider (default: none) */
139
+ rerankProvider?: 'jina' | 'voyage' | 'siliconflow' | 'pinecone';
140
+ /** Reranker API key */
141
+ rerankApiKey?: string;
142
+ /** Reranker model name */
143
+ rerankModel?: string;
144
+ /** Reranker endpoint URL */
145
+ rerankEndpoint?: string;
146
+ /** Reranker weight vs fused score (default: 0.6) */
147
+ rerankWeight: number;
148
+ }
149
+ interface PluginConfig {
150
+ vaultPath?: string;
151
+ agentVaults?: Record<string, string>;
152
+ collection?: string;
153
+ autoRecall?: boolean;
154
+ autoCapture?: boolean;
155
+ recallLimit?: number;
156
+ templatesDir?: string;
157
+ autoCheckpoint?: boolean;
158
+ contextProfile?: 'default' | 'planning' | 'incident' | 'handoff' | 'auto';
159
+ maxContextResults?: number;
160
+ observeOnHeartbeat?: boolean;
161
+ weeklyReflection?: boolean;
162
+ /** Retrieval pipeline config */
163
+ retrieval?: Partial<RetrievalConfig>;
164
+ /** Noise filter config */
165
+ noise?: {
166
+ enabled?: boolean;
167
+ minLength?: number;
168
+ maxLength?: number;
169
+ };
170
+ /** Adaptive retrieval config */
171
+ adaptive?: {
172
+ enabled?: boolean;
173
+ skipPatterns?: string[];
174
+ };
175
+ /** Default memory scope */
176
+ defaultScope?: MemoryScope;
177
+ }
178
+ interface PluginLogger {
179
+ info(msg: string): void;
180
+ warn(msg: string): void;
181
+ error(msg: string): void;
182
+ debug(msg: string): void;
183
+ }
184
+ interface ToolDefinition {
185
+ name: string;
186
+ label: string;
187
+ description: string;
188
+ parameters: unknown;
189
+ execute(id: string, params: Record<string, unknown>): Promise<ToolResult>;
190
+ }
191
+ interface ToolResult {
192
+ content: Array<{
193
+ type: string;
194
+ text: string;
195
+ }>;
196
+ details?: Record<string, unknown>;
197
+ isError?: boolean;
198
+ }
199
+ interface ServiceDefinition {
200
+ id: string;
201
+ start: () => void;
202
+ stop: () => void;
203
+ }
204
+ interface CommandDefinition {
205
+ name: string;
206
+ description: string;
207
+ acceptsArgs?: boolean;
208
+ requireAuth?: boolean;
209
+ handler: (ctx: {
210
+ args?: string;
211
+ }) => {
212
+ text: string;
213
+ };
214
+ }
215
+ type EventHandler = (event: Record<string, unknown>) => Promise<unknown>;
216
+ interface PluginApi {
217
+ pluginConfig: PluginConfig;
218
+ logger: PluginLogger;
219
+ registerTool(tool: ToolDefinition): void;
220
+ registerService(service: ServiceDefinition): void;
221
+ registerCommand(command: CommandDefinition): void;
222
+ registerCli(fn: (ctx: {
223
+ program: unknown;
224
+ }) => void, opts?: {
225
+ commands: string[];
226
+ }): void;
227
+ on(event: string, handler: EventHandler, opts?: {
228
+ priority?: number;
229
+ }): void;
230
+ }
231
+ interface Plugin {
232
+ id: string;
233
+ name: string;
234
+ description: string;
235
+ version: string;
236
+ kind: string;
237
+ register(api: PluginApi): void;
238
+ }
6
239
 
7
240
  /**
8
- * ClawVault OpenClaw Plugin v2.2.0
241
+ * ClawVault Plugin v2 — Template engine
9
242
  *
10
- * Memory slot provider for OpenClaw. Template-driven observational memory architecture:
11
- * memories are captured automatically from conversations, classified against template
12
- * schemas, and stored with proper frontmatter validation.
243
+ * Manages typed primitive schemas (memory_event, person, decision, task, etc.)
244
+ * with keyword-based classification, frontmatter generation, and validation.
245
+ */
246
+
247
+ declare function getTemplateRegistry(): TemplateRegistry;
248
+ declare function initializeTemplateRegistry(templatesDir?: string): TemplateRegistry;
249
+ declare function classifyText(text: string): ClassificationResult;
250
+ declare function getSchema(primitiveType: string): TemplateSchema | undefined;
251
+ declare function getAllSchemas(): TemplateSchema[];
252
+ declare function getSchemaNames(): string[];
253
+
254
+ /**
255
+ * ClawVault Plugin v2 — Noise Filter
13
256
  *
14
- * Architecture:
15
- * ClawVault (engine) ←→ Plugin (integration) ←→ OpenClaw (agent platform)
16
- * - ClawVault = vault, observations, search index, knowledge graph
17
- * - Plugin = auto-recall, auto-capture, search tools, lifecycle hooks
18
- * - OpenClaw = agent runtime, sessions, tools, channels
19
- * - Templates = schema definitions for primitive types
257
+ * Filters low-quality content on both write and read paths:
258
+ * - Refusals ("I can't help with that")
259
+ * - Meta-questions ("How does it feel to be an AI?")
260
+ * - Greetings ("Hello!", "Hi there")
261
+ * - Low-information content (too short, too repetitive)
262
+ * - System noise (heartbeats, tool calls, JSON blobs)
263
+ */
264
+ interface NoiseFilterConfig {
265
+ enabled: boolean;
266
+ minLength: number;
267
+ maxLength: number;
268
+ }
269
+
270
+ /**
271
+ * ClawVault Plugin v2 — Observer / Session Parser
20
272
  *
21
- * The plugin does NOT give the agent a "store memory" tool. Memory is
22
- * observational: the system watches conversations and captures automatically.
23
- * The agent searches memory; it doesn't manage it.
273
+ * Extracts observations from conversation messages:
274
+ * - Detects preferences, decisions, facts, tasks, lessons
275
+ * - Classifies against template schemas
276
+ * - Generates tags and categories
24
277
  */
25
278
 
26
- declare function getTemplateRegistry(): TemplateRegistry | null;
27
- declare const clawvaultPlugin: {
28
- id: string;
29
- name: string;
30
- description: string;
31
- version: string;
32
- kind: "memory";
33
- register(api: any): void;
34
- };
279
+ /**
280
+ * Check if text is worth observing (not system noise, not too short/long).
281
+ */
282
+ declare function isObservable(text: string, noiseConfig?: NoiseFilterConfig): boolean;
283
+ declare function extractObservations(text: string): Observation[];
284
+ declare function processMessageForObservations(content: string, _options?: Record<string, unknown>): ObservationResult;
285
+ declare function detectCategory(text: string): string;
286
+ declare function extractSearchTerms(input: string): string;
287
+
288
+ /**
289
+ * ClawVault Plugin v2 — Context Injection
290
+ *
291
+ * Scans vault files and builds context for session injection:
292
+ * - Session recaps (recent activity)
293
+ * - Preference context
294
+ * - Memory formatting for LLM consumption
295
+ */
296
+
297
+ declare function scanVaultFiles(vaultPath: string, options?: ScanOptions): VaultFile[];
298
+ declare function buildSessionRecap(vaultPath: string, options?: {
299
+ maxAge?: number;
300
+ limit?: number;
301
+ includeContent?: boolean;
302
+ }): SessionRecapResult;
303
+ declare function buildPreferenceContext(vaultPath: string, options?: {
304
+ maxAge?: number;
305
+ limit?: number;
306
+ }): PreferenceContextResult;
307
+ declare function formatMemoriesForContext(results: QmdResult[], collection: string): string;
308
+ declare function formatSearchResults(results: QmdResult[], collection: string): string;
309
+ declare function buildFullContext(vaultPath: string, options?: {
310
+ includeRecap?: boolean;
311
+ includePreferences?: boolean;
312
+ recapMaxAge?: number;
313
+ preferenceMaxAge?: number;
314
+ }): string;
315
+
316
+ /**
317
+ * ClawVault Plugin v2 — Vault file operations
318
+ *
319
+ * Handles writing, updating, and managing vault markdown files:
320
+ * - Template-based file creation
321
+ * - Frontmatter merge on update
322
+ * - Observation writing to individual files and ledger
323
+ * - Scope tagging for multi-scope support
324
+ */
325
+
326
+ declare function writeVaultFile(vaultPath: string, options: WriteOptions): WriteResult;
327
+ declare function writeObservation(vaultPath: string, observation: Observation, options?: {
328
+ source?: string;
329
+ sessionId?: string;
330
+ scope?: MemoryScope;
331
+ }): WriteResult;
332
+ declare function appendToLedger(vaultPath: string, entry: LedgerEntry): void;
333
+ declare function batchWriteObservations(vaultPath: string, observations: Observation[], options?: BatchWriteOptions): BatchWriteResult;
334
+ declare function ensureVaultStructure(vaultPath: string): void;
335
+
336
+ /**
337
+ * ClawVault Plugin v2 — Main Entry Point
338
+ *
339
+ * OpenClaw memory plugin with:
340
+ * - Template-driven typed primitives
341
+ * - In-process hybrid retrieval (BM25 + Semantic + RRF)
342
+ * - Cross-encoder rerank (optional, API-based)
343
+ * - Recency boost + time decay
344
+ * - Length normalization + MMR diversity
345
+ * - Noise filtering + adaptive retrieval
346
+ * - Multi-scope support (global, agent, project, user)
347
+ * - Management CLI (stats, export, import, reembed)
348
+ */
349
+
350
+ declare const clawvaultPlugin: Plugin;
35
351
 
36
- export { clawvaultPlugin as default, getTemplateRegistry };
352
+ export { appendToLedger, batchWriteObservations, buildFullContext, buildPreferenceContext, buildSessionRecap, classifyText, clawvaultPlugin as default, detectCategory, ensureVaultStructure, extractObservations, extractSearchTerms, formatMemoriesForContext, formatSearchResults, getAllSchemas, getSchema, getSchemaNames, getTemplateRegistry, initializeTemplateRegistry, isObservable, processMessageForObservations, scanVaultFiles, writeObservation, writeVaultFile };