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.
- package/README.md +422 -141
- package/bin/clawvault.js +10 -2
- package/bin/command-registration.test.js +3 -1
- package/bin/command-runtime.js +9 -1
- package/bin/register-core-commands.js +23 -28
- package/bin/register-maintenance-commands.js +39 -3
- package/bin/register-query-commands.js +58 -29
- package/bin/register-tailscale-commands.js +106 -0
- package/bin/register-task-commands.js +18 -1
- package/bin/register-task-commands.test.js +16 -0
- package/bin/register-vault-operations-commands.js +29 -1
- package/bin/register-workgraph-commands.js +451 -0
- package/dashboard/lib/graph-diff.js +104 -0
- package/dashboard/lib/graph-diff.test.js +75 -0
- package/dashboard/lib/vault-parser.js +556 -0
- package/dashboard/lib/vault-parser.test.js +254 -0
- package/dashboard/public/app.js +796 -0
- package/dashboard/public/index.html +52 -0
- package/dashboard/public/styles.css +221 -0
- package/dashboard/server.js +374 -0
- package/dist/{chunk-C7OK5WKP.js → chunk-2JQ3O2YL.js} +4 -4
- package/dist/{chunk-VR5NE7PZ.js → chunk-2RAZ4ZFE.js} +1 -1
- package/dist/{chunk-F2JEUD4J.js → chunk-4ITRXIVT.js} +5 -7
- package/dist/{chunk-GUKMRGM7.js → chunk-4OXMU5S2.js} +1 -1
- package/dist/chunk-5PJ4STIC.js +465 -0
- package/dist/{chunk-62YTUT6J.js → chunk-AZYOKJYC.js} +2 -2
- package/dist/chunk-BSJ6RIT7.js +447 -0
- package/dist/chunk-ECRZL5XR.js +50 -0
- package/dist/chunk-ERNE2FZ5.js +189 -0
- package/dist/{chunk-WAZ3NLWL.js → chunk-F55HGNU4.js} +0 -47
- package/dist/{chunk-VGLOTGAS.js → chunk-FAKNOB7Y.js} +2 -2
- package/dist/{chunk-QK3UCXWL.js → chunk-FHFUXL6G.js} +2 -2
- package/dist/chunk-GNJL4YGR.js +79 -0
- package/dist/chunk-HR4KN6S2.js +152 -0
- package/dist/{chunk-OZ7RIXTO.js → chunk-IIOU45CK.js} +1 -1
- package/dist/chunk-IJBFGPCS.js +33 -0
- package/dist/chunk-IVRIKYFE.js +520 -0
- package/dist/chunk-K7PNYS45.js +93 -0
- package/dist/chunk-MDIH26GC.js +183 -0
- package/dist/{chunk-LYHGEHXG.js → chunk-MFAWT5O5.js} +0 -1
- package/dist/{chunk-H34S76MB.js → chunk-MNPUYCHQ.js} +6 -6
- package/dist/chunk-NTOPJI7W.js +207 -0
- package/dist/{chunk-QBLMXKF2.js → chunk-OIWVQYQF.js} +1 -1
- package/dist/chunk-PG56HX5T.js +154 -0
- package/dist/{chunk-LNJA2UGL.js → chunk-PI4WMLMG.js} +7 -84
- package/dist/chunk-QMHPQYUV.js +363 -0
- package/dist/{chunk-H62BP7RI.js → chunk-QPDDIHXE.js} +209 -43
- package/dist/{chunk-N2AXRYLC.js → chunk-QWQ3TIKS.js} +1 -1
- package/dist/{chunk-3DHXQHYG.js → chunk-R2MIW5G7.js} +1 -1
- package/dist/{chunk-SJSFRIYS.js → chunk-S5OJEGFG.js} +2 -2
- package/dist/chunk-SS4B7P7V.js +99 -0
- package/dist/chunk-TIGW564L.js +628 -0
- package/dist/chunk-U67V476Y.js +35 -0
- package/dist/{chunk-JY6FYXIT.js → chunk-UCQAOZHW.js} +6 -11
- package/dist/{chunk-ITPEXLHA.js → chunk-URXDAUVH.js} +24 -5
- package/dist/chunk-WIOLLGAD.js +190 -0
- package/dist/{chunk-3WRJEKN4.js → chunk-WJVWINEM.js} +72 -8
- package/dist/chunk-WMGIIABP.js +15 -0
- package/dist/{chunk-33UGEQRT.js → chunk-X3SPPUFG.js} +151 -64
- package/dist/{chunk-3NSBOUT3.js → chunk-Y3TIJEBP.js} +314 -79
- package/dist/chunk-Y6VJKXGL.js +373 -0
- package/dist/{chunk-LI4O6NVK.js → chunk-YDWHS4LJ.js} +49 -9
- package/dist/{chunk-U55BGUAU.js → chunk-YNIPYN4F.js} +5 -5
- package/dist/chunk-YXQCA6B7.js +226 -0
- package/dist/cli/index.js +26 -22
- package/dist/commands/archive.js +3 -3
- package/dist/commands/backlog.js +3 -3
- package/dist/commands/blocked.js +3 -3
- package/dist/commands/canvas.d.ts +15 -0
- package/dist/commands/canvas.js +200 -0
- package/dist/commands/checkpoint.js +2 -2
- package/dist/commands/compat.js +2 -2
- package/dist/commands/context.js +7 -5
- package/dist/commands/doctor.d.ts +11 -7
- package/dist/commands/doctor.js +16 -14
- package/dist/commands/embed.js +5 -6
- package/dist/commands/entities.js +2 -2
- package/dist/commands/graph.js +3 -3
- package/dist/commands/inject.d.ts +1 -1
- package/dist/commands/inject.js +4 -5
- package/dist/commands/kanban.js +4 -4
- package/dist/commands/link.js +2 -2
- package/dist/commands/migrate-observations.js +4 -4
- package/dist/commands/observe.d.ts +0 -1
- package/dist/commands/observe.js +13 -12
- package/dist/commands/project.js +5 -5
- package/dist/commands/rebuild-embeddings.d.ts +21 -0
- package/dist/commands/rebuild-embeddings.js +91 -0
- package/dist/commands/rebuild.js +12 -11
- package/dist/commands/recover.js +3 -3
- package/dist/commands/reflect.js +6 -7
- package/dist/commands/repair-session.js +1 -1
- package/dist/commands/replay.js +14 -14
- package/dist/commands/session-recap.js +1 -1
- package/dist/commands/setup.d.ts +2 -89
- package/dist/commands/setup.js +3 -21
- package/dist/commands/shell-init.js +1 -1
- package/dist/commands/sleep.d.ts +1 -1
- package/dist/commands/sleep.js +18 -17
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.js +40 -30
- package/dist/commands/sync-bd.d.ts +10 -0
- package/dist/commands/sync-bd.js +10 -0
- package/dist/commands/tailscale.d.ts +52 -0
- package/dist/commands/tailscale.js +26 -0
- package/dist/commands/task.js +4 -4
- package/dist/commands/template.js +2 -2
- package/dist/commands/wake.d.ts +1 -1
- package/dist/commands/wake.js +11 -10
- package/dist/index.d.ts +334 -191
- package/dist/index.js +432 -108
- package/dist/{inject-Bzi5E-By.d.ts → inject-DYUrDqQO.d.ts} +3 -3
- package/dist/ledger-B7g7jhqG.d.ts +44 -0
- package/dist/lib/auto-linker.js +1 -1
- package/dist/lib/canvas-layout.d.ts +115 -0
- package/dist/lib/canvas-layout.js +35 -0
- package/dist/lib/config.d.ts +27 -3
- package/dist/lib/config.js +4 -2
- package/dist/lib/entity-index.js +1 -1
- package/dist/lib/project-utils.js +4 -4
- package/dist/lib/session-repair.js +1 -1
- package/dist/lib/session-utils.js +1 -1
- package/dist/lib/tailscale.d.ts +225 -0
- package/dist/lib/tailscale.js +50 -0
- package/dist/lib/task-utils.js +3 -3
- package/dist/lib/template-engine.js +1 -1
- package/dist/lib/webdav.d.ts +109 -0
- package/dist/lib/webdav.js +35 -0
- package/dist/plugin/index.d.ts +344 -28
- package/dist/plugin/index.js +3919 -227
- package/dist/registry-BR4326o0.d.ts +30 -0
- package/dist/store-CA-6sKCJ.d.ts +34 -0
- package/dist/thread-B9LhXNU0.d.ts +41 -0
- package/dist/{types-Y2_Um2Ls.d.ts → types-BbWJoC1c.d.ts} +1 -44
- package/dist/workgraph/index.d.ts +5 -0
- package/dist/workgraph/index.js +23 -0
- package/dist/workgraph/ledger.d.ts +2 -0
- package/dist/workgraph/ledger.js +25 -0
- package/dist/workgraph/registry.d.ts +2 -0
- package/dist/workgraph/registry.js +19 -0
- package/dist/workgraph/store.d.ts +2 -0
- package/dist/workgraph/store.js +25 -0
- package/dist/workgraph/thread.d.ts +2 -0
- package/dist/workgraph/thread.js +25 -0
- package/dist/workgraph/types.d.ts +54 -0
- package/dist/workgraph/types.js +7 -0
- package/hooks/clawvault/HOOK.md +113 -0
- package/hooks/clawvault/handler.js +1559 -0
- package/hooks/clawvault/handler.test.js +510 -0
- package/hooks/clawvault/openclaw.plugin.json +72 -0
- package/openclaw.plugin.json +235 -30
- package/package.json +20 -20
- package/dist/chunk-3RG5ZIWI.js +0 -10
- package/dist/chunk-3ZIH425O.js +0 -871
- package/dist/chunk-6U6MK36V.js +0 -205
- package/dist/chunk-CMB7UL7C.js +0 -327
- package/dist/chunk-D2H45LON.js +0 -1074
- package/dist/chunk-E7MFQB6D.js +0 -163
- package/dist/chunk-GQSLDZTS.js +0 -560
- package/dist/chunk-MFM6K7PU.js +0 -374
- package/dist/chunk-MXSSG3QU.js +0 -42
- package/dist/chunk-OCGVIN3L.js +0 -88
- package/dist/chunk-PAH27GSN.js +0 -108
- package/dist/chunk-YCUNCH2I.js +0 -78
- package/dist/cli/index.cjs +0 -8584
- package/dist/cli/index.d.cts +0 -5
- package/dist/commands/archive.cjs +0 -287
- package/dist/commands/archive.d.cts +0 -11
- package/dist/commands/backlog.cjs +0 -721
- package/dist/commands/backlog.d.cts +0 -53
- package/dist/commands/blocked.cjs +0 -204
- package/dist/commands/blocked.d.cts +0 -26
- package/dist/commands/checkpoint.cjs +0 -244
- package/dist/commands/checkpoint.d.cts +0 -41
- package/dist/commands/compat.cjs +0 -294
- package/dist/commands/compat.d.cts +0 -28
- package/dist/commands/context.cjs +0 -2990
- package/dist/commands/context.d.cts +0 -2
- package/dist/commands/doctor.cjs +0 -2986
- package/dist/commands/doctor.d.cts +0 -21
- package/dist/commands/embed.cjs +0 -232
- package/dist/commands/embed.d.cts +0 -17
- package/dist/commands/entities.cjs +0 -141
- package/dist/commands/entities.d.cts +0 -7
- package/dist/commands/graph.cjs +0 -501
- package/dist/commands/graph.d.cts +0 -21
- package/dist/commands/inject.cjs +0 -1636
- package/dist/commands/inject.d.cts +0 -2
- package/dist/commands/kanban.cjs +0 -884
- package/dist/commands/kanban.d.cts +0 -63
- package/dist/commands/link.cjs +0 -965
- package/dist/commands/link.d.cts +0 -11
- package/dist/commands/migrate-observations.cjs +0 -362
- package/dist/commands/migrate-observations.d.cts +0 -19
- package/dist/commands/observe.cjs +0 -4099
- package/dist/commands/observe.d.cts +0 -23
- package/dist/commands/project.cjs +0 -1341
- package/dist/commands/project.d.cts +0 -85
- package/dist/commands/rebuild.cjs +0 -3136
- package/dist/commands/rebuild.d.cts +0 -11
- package/dist/commands/recover.cjs +0 -361
- package/dist/commands/recover.d.cts +0 -38
- package/dist/commands/reflect.cjs +0 -1008
- package/dist/commands/reflect.d.cts +0 -11
- package/dist/commands/repair-session.cjs +0 -457
- package/dist/commands/repair-session.d.cts +0 -38
- package/dist/commands/replay.cjs +0 -4103
- package/dist/commands/replay.d.cts +0 -16
- package/dist/commands/session-recap.cjs +0 -353
- package/dist/commands/session-recap.d.cts +0 -27
- package/dist/commands/setup.cjs +0 -1278
- package/dist/commands/setup.d.cts +0 -99
- package/dist/commands/shell-init.cjs +0 -75
- package/dist/commands/shell-init.d.cts +0 -7
- package/dist/commands/sleep.cjs +0 -6029
- package/dist/commands/sleep.d.cts +0 -36
- package/dist/commands/status.cjs +0 -2737
- package/dist/commands/status.d.cts +0 -52
- package/dist/commands/task.cjs +0 -1236
- package/dist/commands/task.d.cts +0 -97
- package/dist/commands/template.cjs +0 -457
- package/dist/commands/template.d.cts +0 -36
- package/dist/commands/wake.cjs +0 -2627
- package/dist/commands/wake.d.cts +0 -22
- package/dist/context-BUGaWpyL.d.cts +0 -46
- package/dist/index.cjs +0 -12373
- package/dist/index.d.cts +0 -854
- package/dist/inject-Bzi5E-By.d.cts +0 -137
- package/dist/lib/auto-linker.cjs +0 -176
- package/dist/lib/auto-linker.d.cts +0 -26
- package/dist/lib/config.cjs +0 -78
- package/dist/lib/config.d.cts +0 -11
- package/dist/lib/entity-index.cjs +0 -84
- package/dist/lib/entity-index.d.cts +0 -26
- package/dist/lib/project-utils.cjs +0 -864
- package/dist/lib/project-utils.d.cts +0 -97
- package/dist/lib/session-repair.cjs +0 -239
- package/dist/lib/session-repair.d.cts +0 -110
- package/dist/lib/session-utils.cjs +0 -209
- package/dist/lib/session-utils.d.cts +0 -63
- package/dist/lib/task-utils.cjs +0 -1137
- package/dist/lib/task-utils.d.cts +0 -208
- package/dist/lib/template-engine.cjs +0 -47
- package/dist/lib/template-engine.d.cts +0 -11
- package/dist/plugin/index.cjs +0 -1907
- package/dist/plugin/index.d.cts +0 -36
- package/dist/plugin/inject.cjs +0 -356
- package/dist/plugin/inject.d.cts +0 -54
- package/dist/plugin/inject.d.ts +0 -54
- package/dist/plugin/inject.js +0 -17
- package/dist/plugin/observe.cjs +0 -631
- package/dist/plugin/observe.d.cts +0 -39
- package/dist/plugin/observe.d.ts +0 -39
- package/dist/plugin/observe.js +0 -18
- package/dist/plugin/templates.cjs +0 -593
- package/dist/plugin/templates.d.cts +0 -52
- package/dist/plugin/templates.d.ts +0 -52
- package/dist/plugin/templates.js +0 -25
- package/dist/plugin/types.cjs +0 -18
- package/dist/plugin/types.d.cts +0 -209
- package/dist/plugin/types.d.ts +0 -209
- package/dist/plugin/types.js +0 -0
- package/dist/plugin/vault.cjs +0 -927
- package/dist/plugin/vault.d.cts +0 -68
- package/dist/plugin/vault.d.ts +0 -68
- package/dist/plugin/vault.js +0 -22
- package/dist/types-Y2_Um2Ls.d.cts +0 -205
- package/templates/memory-event.md +0 -67
- package/templates/party.md +0 -63
- package/templates/primitive-registry.yaml +0 -551
- package/templates/run.md +0 -68
- package/templates/trigger.md +0 -68
- 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
|
+
};
|
package/dist/plugin/index.d.ts
CHANGED
|
@@ -1,36 +1,352 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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
|
|
241
|
+
* ClawVault Plugin v2 — Template engine
|
|
9
242
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
|
|
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
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
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
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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 };
|