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
package/dist/chunk-MFM6K7PU.js
DELETED
|
@@ -1,374 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
classifyText,
|
|
3
|
-
generateFrontmatter,
|
|
4
|
-
getSchema,
|
|
5
|
-
serializeFrontmatter,
|
|
6
|
-
validateFrontmatter
|
|
7
|
-
} from "./chunk-GQSLDZTS.js";
|
|
8
|
-
import {
|
|
9
|
-
__require
|
|
10
|
-
} from "./chunk-3RG5ZIWI.js";
|
|
11
|
-
|
|
12
|
-
// src/plugin/vault.ts
|
|
13
|
-
import { existsSync, mkdirSync, writeFileSync, readFileSync, appendFileSync } from "fs";
|
|
14
|
-
import { join } from "path";
|
|
15
|
-
function writeVaultFile(vaultPath, options) {
|
|
16
|
-
const errors = [];
|
|
17
|
-
const primitiveType = options.primitiveType ?? classifyText(options.content ?? options.title ?? "").primitiveType;
|
|
18
|
-
const schema = getSchema(primitiveType);
|
|
19
|
-
const frontmatter = generateFrontmatter(primitiveType, {
|
|
20
|
-
title: options.title,
|
|
21
|
-
extraFields: options.extraFields,
|
|
22
|
-
source: options.source,
|
|
23
|
-
sessionId: options.sessionId
|
|
24
|
-
});
|
|
25
|
-
const validation = validateFrontmatter(primitiveType, frontmatter);
|
|
26
|
-
if (!validation.valid) {
|
|
27
|
-
errors.push(...validation.errors);
|
|
28
|
-
}
|
|
29
|
-
const directory = options.directory ?? getDefaultDirectory(vaultPath, primitiveType);
|
|
30
|
-
if (!existsSync(directory)) {
|
|
31
|
-
mkdirSync(directory, { recursive: true });
|
|
32
|
-
}
|
|
33
|
-
const filename = options.filename ?? generateFilename(primitiveType, options.title, frontmatter);
|
|
34
|
-
const filePath = join(directory, filename);
|
|
35
|
-
const fileExists = existsSync(filePath);
|
|
36
|
-
if (fileExists && !options.overwrite) {
|
|
37
|
-
return updateVaultFile(filePath, frontmatter, options.content, primitiveType, errors);
|
|
38
|
-
}
|
|
39
|
-
const fileContent = buildFileContent(frontmatter, options.content, schema);
|
|
40
|
-
try {
|
|
41
|
-
writeFileSync(filePath, fileContent, "utf-8");
|
|
42
|
-
return {
|
|
43
|
-
success: errors.length === 0,
|
|
44
|
-
path: filePath,
|
|
45
|
-
primitiveType,
|
|
46
|
-
errors,
|
|
47
|
-
created: true,
|
|
48
|
-
updated: false
|
|
49
|
-
};
|
|
50
|
-
} catch (err) {
|
|
51
|
-
errors.push(`Failed to write file: ${String(err)}`);
|
|
52
|
-
return {
|
|
53
|
-
success: false,
|
|
54
|
-
path: filePath,
|
|
55
|
-
primitiveType,
|
|
56
|
-
errors,
|
|
57
|
-
created: false,
|
|
58
|
-
updated: false
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
function updateVaultFile(filePath, newFrontmatter, newContent, primitiveType, errors) {
|
|
63
|
-
try {
|
|
64
|
-
const existingContent = readFileSync(filePath, "utf-8");
|
|
65
|
-
const parsed = parseExistingFile(existingContent);
|
|
66
|
-
if (!parsed) {
|
|
67
|
-
errors.push("Failed to parse existing file");
|
|
68
|
-
return {
|
|
69
|
-
success: false,
|
|
70
|
-
path: filePath,
|
|
71
|
-
primitiveType,
|
|
72
|
-
errors,
|
|
73
|
-
created: false,
|
|
74
|
-
updated: false
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
const mergedFrontmatter = {
|
|
78
|
-
...parsed.frontmatter,
|
|
79
|
-
...newFrontmatter,
|
|
80
|
-
updated: (/* @__PURE__ */ new Date()).toISOString()
|
|
81
|
-
};
|
|
82
|
-
if (parsed.frontmatter.created) {
|
|
83
|
-
mergedFrontmatter.created = parsed.frontmatter.created;
|
|
84
|
-
}
|
|
85
|
-
const content = newContent ?? parsed.body;
|
|
86
|
-
const schema = getSchema(primitiveType);
|
|
87
|
-
const fileContent = buildFileContent(mergedFrontmatter, content, schema);
|
|
88
|
-
writeFileSync(filePath, fileContent, "utf-8");
|
|
89
|
-
return {
|
|
90
|
-
success: errors.length === 0,
|
|
91
|
-
path: filePath,
|
|
92
|
-
primitiveType,
|
|
93
|
-
errors,
|
|
94
|
-
created: false,
|
|
95
|
-
updated: true
|
|
96
|
-
};
|
|
97
|
-
} catch (err) {
|
|
98
|
-
errors.push(`Failed to update file: ${String(err)}`);
|
|
99
|
-
return {
|
|
100
|
-
success: false,
|
|
101
|
-
path: filePath,
|
|
102
|
-
primitiveType,
|
|
103
|
-
errors,
|
|
104
|
-
created: false,
|
|
105
|
-
updated: false
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
function parseExistingFile(content) {
|
|
110
|
-
const match = content.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
|
|
111
|
-
if (!match) return null;
|
|
112
|
-
try {
|
|
113
|
-
const frontmatter = parseSimpleYaml(match[1]);
|
|
114
|
-
return { frontmatter, body: match[2] };
|
|
115
|
-
} catch {
|
|
116
|
-
return null;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
function parseSimpleYaml(yaml) {
|
|
120
|
-
const result = {};
|
|
121
|
-
const lines = yaml.split("\n");
|
|
122
|
-
for (const line of lines) {
|
|
123
|
-
if (!line.trim() || line.trim().startsWith("#")) continue;
|
|
124
|
-
const colonIndex = line.indexOf(":");
|
|
125
|
-
if (colonIndex === -1) continue;
|
|
126
|
-
const key = line.slice(0, colonIndex).trim();
|
|
127
|
-
const valueStr = line.slice(colonIndex + 1).trim();
|
|
128
|
-
if (valueStr === "" || valueStr.startsWith("|") || valueStr.startsWith(">")) continue;
|
|
129
|
-
result[key] = parseYamlValue(valueStr);
|
|
130
|
-
}
|
|
131
|
-
return result;
|
|
132
|
-
}
|
|
133
|
-
function parseYamlValue(value) {
|
|
134
|
-
if (value === "" || value === "null" || value === "~") return null;
|
|
135
|
-
if (value === "true") return true;
|
|
136
|
-
if (value === "false") return false;
|
|
137
|
-
if (/^-?\d+$/.test(value)) return parseInt(value, 10);
|
|
138
|
-
if (/^-?\d+\.\d+$/.test(value)) return parseFloat(value);
|
|
139
|
-
if (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'")) {
|
|
140
|
-
return value.slice(1, -1);
|
|
141
|
-
}
|
|
142
|
-
return value;
|
|
143
|
-
}
|
|
144
|
-
function getDefaultDirectory(vaultPath, primitiveType) {
|
|
145
|
-
const directoryMap = {
|
|
146
|
-
task: "tasks",
|
|
147
|
-
project: "projects",
|
|
148
|
-
decision: "decisions",
|
|
149
|
-
person: "people",
|
|
150
|
-
lesson: "lessons",
|
|
151
|
-
trigger: "triggers",
|
|
152
|
-
run: "runs",
|
|
153
|
-
checkpoint: "checkpoints",
|
|
154
|
-
handoff: "handoffs",
|
|
155
|
-
"daily-note": "daily",
|
|
156
|
-
daily: "daily",
|
|
157
|
-
party: "parties",
|
|
158
|
-
workspace: "workspaces",
|
|
159
|
-
memory_event: "memory"
|
|
160
|
-
};
|
|
161
|
-
const subdir = directoryMap[primitiveType] ?? "notes";
|
|
162
|
-
return join(vaultPath, subdir);
|
|
163
|
-
}
|
|
164
|
-
function generateFilename(primitiveType, title, frontmatter) {
|
|
165
|
-
const now = /* @__PURE__ */ new Date();
|
|
166
|
-
const dateStr = now.toISOString().split("T")[0];
|
|
167
|
-
const timeStr = now.toISOString().slice(11, 19).replace(/:/g, "");
|
|
168
|
-
if (title) {
|
|
169
|
-
const slug = slugify(title);
|
|
170
|
-
return `${dateStr}-${slug}.md`;
|
|
171
|
-
}
|
|
172
|
-
switch (primitiveType) {
|
|
173
|
-
case "daily-note":
|
|
174
|
-
case "daily":
|
|
175
|
-
return `${dateStr}.md`;
|
|
176
|
-
case "memory_event":
|
|
177
|
-
return `${dateStr}-${timeStr}.md`;
|
|
178
|
-
case "run":
|
|
179
|
-
return `run-${dateStr}-${timeStr}.md`;
|
|
180
|
-
case "checkpoint":
|
|
181
|
-
return `checkpoint-${dateStr}-${timeStr}.md`;
|
|
182
|
-
case "handoff":
|
|
183
|
-
return `handoff-${dateStr}-${timeStr}.md`;
|
|
184
|
-
default:
|
|
185
|
-
return `${primitiveType}-${dateStr}-${timeStr}.md`;
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
function slugify(text) {
|
|
189
|
-
return text.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 50);
|
|
190
|
-
}
|
|
191
|
-
function buildFileContent(frontmatter, content, schema) {
|
|
192
|
-
const parts = [];
|
|
193
|
-
parts.push(serializeFrontmatter(frontmatter));
|
|
194
|
-
parts.push("");
|
|
195
|
-
const title = frontmatter.title || frontmatter.summary;
|
|
196
|
-
if (title) {
|
|
197
|
-
parts.push(`# ${title}`);
|
|
198
|
-
parts.push("");
|
|
199
|
-
}
|
|
200
|
-
if (content) {
|
|
201
|
-
parts.push(content);
|
|
202
|
-
} else if (schema?.bodyTemplate) {
|
|
203
|
-
let body = schema.bodyTemplate;
|
|
204
|
-
body = body.replace(/\{\{title\}\}/g, String(title || "Untitled"));
|
|
205
|
-
body = body.replace(/\{\{date\}\}/g, (/* @__PURE__ */ new Date()).toISOString().split("T")[0]);
|
|
206
|
-
body = body.replace(/\{\{datetime\}\}/g, (/* @__PURE__ */ new Date()).toISOString());
|
|
207
|
-
body = body.replace(/\{\{links_line\}\}/g, "");
|
|
208
|
-
body = body.replace(/\{\{content\}\}/g, "");
|
|
209
|
-
parts.push(body.trim());
|
|
210
|
-
}
|
|
211
|
-
return parts.join("\n");
|
|
212
|
-
}
|
|
213
|
-
function writeObservation(vaultPath, observation, options = {}) {
|
|
214
|
-
return writeVaultFile(vaultPath, {
|
|
215
|
-
primitiveType: observation.primitiveType,
|
|
216
|
-
title: observation.text.slice(0, 80),
|
|
217
|
-
content: observation.text,
|
|
218
|
-
extraFields: {
|
|
219
|
-
type: observation.primitiveType === "memory_event" ? observation.category : observation.primitiveType,
|
|
220
|
-
confidence: observation.confidence,
|
|
221
|
-
tags: observation.tags,
|
|
222
|
-
observed_at: observation.extractedAt.toISOString()
|
|
223
|
-
},
|
|
224
|
-
source: options.source ?? "openclaw",
|
|
225
|
-
sessionId: options.sessionId
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
function writeObservations(vaultPath, observations, options = {}) {
|
|
229
|
-
return observations.map((obs) => writeObservation(vaultPath, obs, options));
|
|
230
|
-
}
|
|
231
|
-
function appendToLedger(vaultPath, entry) {
|
|
232
|
-
const dateStr = entry.timestamp.toISOString().slice(0, 10);
|
|
233
|
-
const ledgerDir = join(vaultPath, "ledger");
|
|
234
|
-
if (!existsSync(ledgerDir)) {
|
|
235
|
-
mkdirSync(ledgerDir, { recursive: true });
|
|
236
|
-
}
|
|
237
|
-
const ledgerFile = join(ledgerDir, `${dateStr}.md`);
|
|
238
|
-
const timeStr = entry.timestamp.toISOString().slice(11, 19);
|
|
239
|
-
const parts = [`[${timeStr}]`];
|
|
240
|
-
if (entry.category) parts.push(`[${entry.category}]`);
|
|
241
|
-
if (entry.actor) parts.push(`(${entry.actor})`);
|
|
242
|
-
parts.push(entry.content);
|
|
243
|
-
const line = `
|
|
244
|
-
- ${parts.join(" ")}`;
|
|
245
|
-
if (!existsSync(ledgerFile)) {
|
|
246
|
-
const frontmatter = serializeFrontmatter({
|
|
247
|
-
type: "ledger",
|
|
248
|
-
date: dateStr,
|
|
249
|
-
created: entry.timestamp.toISOString()
|
|
250
|
-
});
|
|
251
|
-
writeFileSync(ledgerFile, `${frontmatter}
|
|
252
|
-
|
|
253
|
-
# Observation Ledger \u2014 ${dateStr}
|
|
254
|
-
${line}`, "utf-8");
|
|
255
|
-
} else {
|
|
256
|
-
appendFileSync(ledgerFile, line, "utf-8");
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
function appendObservationToLedger(vaultPath, observation, actor) {
|
|
260
|
-
appendToLedger(vaultPath, {
|
|
261
|
-
timestamp: observation.extractedAt,
|
|
262
|
-
category: observation.category,
|
|
263
|
-
actor,
|
|
264
|
-
content: observation.text,
|
|
265
|
-
primitiveType: observation.primitiveType,
|
|
266
|
-
tags: observation.tags
|
|
267
|
-
});
|
|
268
|
-
}
|
|
269
|
-
function batchWriteObservations(vaultPath, observations, options = {}) {
|
|
270
|
-
const results = [];
|
|
271
|
-
let successful = 0;
|
|
272
|
-
let failed = 0;
|
|
273
|
-
const writeLedger = options.writeLedger ?? true;
|
|
274
|
-
const writeFiles = options.writeFiles ?? false;
|
|
275
|
-
for (const observation of observations) {
|
|
276
|
-
if (writeLedger) {
|
|
277
|
-
try {
|
|
278
|
-
appendObservationToLedger(vaultPath, observation, options.actor);
|
|
279
|
-
} catch {
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
if (writeFiles) {
|
|
283
|
-
const result = writeObservation(vaultPath, observation, {
|
|
284
|
-
source: options.source,
|
|
285
|
-
sessionId: options.sessionId
|
|
286
|
-
});
|
|
287
|
-
results.push(result);
|
|
288
|
-
if (result.success) {
|
|
289
|
-
successful++;
|
|
290
|
-
} else {
|
|
291
|
-
failed++;
|
|
292
|
-
}
|
|
293
|
-
} else {
|
|
294
|
-
successful++;
|
|
295
|
-
results.push({
|
|
296
|
-
success: true,
|
|
297
|
-
path: join(vaultPath, "ledger", `${observation.extractedAt.toISOString().slice(0, 10)}.md`),
|
|
298
|
-
primitiveType: observation.primitiveType,
|
|
299
|
-
errors: [],
|
|
300
|
-
created: false,
|
|
301
|
-
updated: true
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
return {
|
|
306
|
-
total: observations.length,
|
|
307
|
-
successful,
|
|
308
|
-
failed,
|
|
309
|
-
results
|
|
310
|
-
};
|
|
311
|
-
}
|
|
312
|
-
function ensureVaultStructure(vaultPath) {
|
|
313
|
-
const directories = [
|
|
314
|
-
"tasks",
|
|
315
|
-
"projects",
|
|
316
|
-
"decisions",
|
|
317
|
-
"people",
|
|
318
|
-
"lessons",
|
|
319
|
-
"memory",
|
|
320
|
-
"ledger",
|
|
321
|
-
"daily"
|
|
322
|
-
];
|
|
323
|
-
for (const dir of directories) {
|
|
324
|
-
const fullPath = join(vaultPath, dir);
|
|
325
|
-
if (!existsSync(fullPath)) {
|
|
326
|
-
mkdirSync(fullPath, { recursive: true });
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
function getVaultStats(vaultPath) {
|
|
331
|
-
const directories = [];
|
|
332
|
-
const primitiveTypes = {};
|
|
333
|
-
let fileCount = 0;
|
|
334
|
-
const { readdirSync, statSync } = __require("fs");
|
|
335
|
-
function scanDir(dir, depth = 0) {
|
|
336
|
-
if (depth > 2) return;
|
|
337
|
-
try {
|
|
338
|
-
const entries = readdirSync(dir, { withFileTypes: true });
|
|
339
|
-
for (const entry of entries) {
|
|
340
|
-
if (entry.name.startsWith(".") || entry.name.startsWith("_")) continue;
|
|
341
|
-
const fullPath = join(dir, entry.name);
|
|
342
|
-
if (entry.isDirectory()) {
|
|
343
|
-
directories.push(fullPath.replace(vaultPath + "/", ""));
|
|
344
|
-
scanDir(fullPath, depth + 1);
|
|
345
|
-
} else if (entry.name.endsWith(".md")) {
|
|
346
|
-
fileCount++;
|
|
347
|
-
try {
|
|
348
|
-
const content = readFileSync(fullPath, "utf-8");
|
|
349
|
-
const match = content.match(/^---\n[\s\S]*?type:\s*(\S+)/);
|
|
350
|
-
if (match) {
|
|
351
|
-
const type = match[1];
|
|
352
|
-
primitiveTypes[type] = (primitiveTypes[type] ?? 0) + 1;
|
|
353
|
-
}
|
|
354
|
-
} catch {
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
} catch {
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
scanDir(vaultPath);
|
|
362
|
-
return { directories, fileCount, primitiveTypes };
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
export {
|
|
366
|
-
writeVaultFile,
|
|
367
|
-
writeObservation,
|
|
368
|
-
writeObservations,
|
|
369
|
-
appendToLedger,
|
|
370
|
-
appendObservationToLedger,
|
|
371
|
-
batchWriteObservations,
|
|
372
|
-
ensureVaultStructure,
|
|
373
|
-
getVaultStats
|
|
374
|
-
};
|
package/dist/chunk-MXSSG3QU.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
// src/lib/config.ts
|
|
2
|
-
import * as fs from "fs";
|
|
3
|
-
import * as path from "path";
|
|
4
|
-
function getVaultPath() {
|
|
5
|
-
const vaultPath = process.env.CLAWVAULT_PATH;
|
|
6
|
-
if (!vaultPath) {
|
|
7
|
-
throw new Error("CLAWVAULT_PATH environment variable not set");
|
|
8
|
-
}
|
|
9
|
-
return path.resolve(vaultPath);
|
|
10
|
-
}
|
|
11
|
-
function findNearestVaultPath(startPath = process.cwd()) {
|
|
12
|
-
let current = path.resolve(startPath);
|
|
13
|
-
while (true) {
|
|
14
|
-
if (fs.existsSync(path.join(current, ".clawvault.json"))) {
|
|
15
|
-
return current;
|
|
16
|
-
}
|
|
17
|
-
const parent = path.dirname(current);
|
|
18
|
-
if (parent === current) {
|
|
19
|
-
return null;
|
|
20
|
-
}
|
|
21
|
-
current = parent;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
function resolveVaultPath(options = {}) {
|
|
25
|
-
if (options.explicitPath) {
|
|
26
|
-
return path.resolve(options.explicitPath);
|
|
27
|
-
}
|
|
28
|
-
if (process.env.CLAWVAULT_PATH) {
|
|
29
|
-
return path.resolve(process.env.CLAWVAULT_PATH);
|
|
30
|
-
}
|
|
31
|
-
const discovered = findNearestVaultPath(options.cwd ?? process.cwd());
|
|
32
|
-
if (discovered) {
|
|
33
|
-
return discovered;
|
|
34
|
-
}
|
|
35
|
-
throw new Error("No vault path found. Set CLAWVAULT_PATH, use --vault, or run inside a vault.");
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export {
|
|
39
|
-
getVaultPath,
|
|
40
|
-
findNearestVaultPath,
|
|
41
|
-
resolveVaultPath
|
|
42
|
-
};
|
package/dist/chunk-OCGVIN3L.js
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
resolveVaultPath
|
|
3
|
-
} from "./chunk-MXSSG3QU.js";
|
|
4
|
-
import {
|
|
5
|
-
QmdUnavailableError,
|
|
6
|
-
hasQmd,
|
|
7
|
-
qmdEmbed
|
|
8
|
-
} from "./chunk-D2H45LON.js";
|
|
9
|
-
|
|
10
|
-
// src/lib/vault-qmd-config.ts
|
|
11
|
-
import * as fs from "fs";
|
|
12
|
-
import * as path from "path";
|
|
13
|
-
var CONFIG_FILE = ".clawvault.json";
|
|
14
|
-
function readTrimmedString(value) {
|
|
15
|
-
if (typeof value !== "string") return void 0;
|
|
16
|
-
const trimmed = value.trim();
|
|
17
|
-
return trimmed.length > 0 ? trimmed : void 0;
|
|
18
|
-
}
|
|
19
|
-
function loadVaultQmdConfig(vaultPath) {
|
|
20
|
-
const resolvedVaultPath = path.resolve(vaultPath);
|
|
21
|
-
const fallbackName = path.basename(resolvedVaultPath);
|
|
22
|
-
const fallbackRoot = resolvedVaultPath;
|
|
23
|
-
const configPath = path.join(resolvedVaultPath, CONFIG_FILE);
|
|
24
|
-
if (!fs.existsSync(configPath)) {
|
|
25
|
-
return {
|
|
26
|
-
vaultPath: resolvedVaultPath,
|
|
27
|
-
qmdCollection: fallbackName,
|
|
28
|
-
qmdRoot: fallbackRoot
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
try {
|
|
32
|
-
const raw = JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
33
|
-
const configuredName = readTrimmedString(raw.name) ?? fallbackName;
|
|
34
|
-
const qmdCollection = readTrimmedString(raw.qmdCollection) ?? configuredName;
|
|
35
|
-
const rawRoot = readTrimmedString(raw.qmdRoot) ?? fallbackRoot;
|
|
36
|
-
const qmdRoot = path.isAbsolute(rawRoot) ? path.resolve(rawRoot) : path.resolve(resolvedVaultPath, rawRoot);
|
|
37
|
-
return {
|
|
38
|
-
vaultPath: resolvedVaultPath,
|
|
39
|
-
qmdCollection,
|
|
40
|
-
qmdRoot
|
|
41
|
-
};
|
|
42
|
-
} catch {
|
|
43
|
-
return {
|
|
44
|
-
vaultPath: resolvedVaultPath,
|
|
45
|
-
qmdCollection: fallbackName,
|
|
46
|
-
qmdRoot: fallbackRoot
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// src/commands/embed.ts
|
|
52
|
-
async function embedCommand(options = {}) {
|
|
53
|
-
if (!hasQmd()) {
|
|
54
|
-
throw new QmdUnavailableError();
|
|
55
|
-
}
|
|
56
|
-
const vaultPath = resolveVaultPath({ explicitPath: options.vaultPath });
|
|
57
|
-
const qmdConfig = loadVaultQmdConfig(vaultPath);
|
|
58
|
-
const startedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
59
|
-
if (!options.quiet) {
|
|
60
|
-
console.log(
|
|
61
|
-
`Embedding pending documents for collection "${qmdConfig.qmdCollection}" (root: ${qmdConfig.qmdRoot})...`
|
|
62
|
-
);
|
|
63
|
-
}
|
|
64
|
-
qmdEmbed(qmdConfig.qmdCollection);
|
|
65
|
-
const finishedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
66
|
-
if (!options.quiet) {
|
|
67
|
-
console.log(`\u2713 Embedding complete for "${qmdConfig.qmdCollection}"`);
|
|
68
|
-
}
|
|
69
|
-
return {
|
|
70
|
-
vaultPath,
|
|
71
|
-
qmdCollection: qmdConfig.qmdCollection,
|
|
72
|
-
qmdRoot: qmdConfig.qmdRoot,
|
|
73
|
-
startedAt,
|
|
74
|
-
finishedAt
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
function registerEmbedCommand(program) {
|
|
78
|
-
program.command("embed").description("Run qmd embedding for pending vault documents").option("-v, --vault <path>", "Vault path").action(async (rawOptions) => {
|
|
79
|
-
await embedCommand({
|
|
80
|
-
vaultPath: rawOptions.vault
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
export {
|
|
86
|
-
embedCommand,
|
|
87
|
-
registerEmbedCommand
|
|
88
|
-
};
|
package/dist/chunk-PAH27GSN.js
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
// src/lib/claude-credentials.ts
|
|
2
|
-
import { execFileSync } from "child_process";
|
|
3
|
-
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
4
|
-
import { homedir } from "os";
|
|
5
|
-
import { join } from "path";
|
|
6
|
-
var CLAUDE_CODE_SERVICE = "Claude Code-credentials";
|
|
7
|
-
var CLAUDE_CODE_ACCOUNT = "Claude Code";
|
|
8
|
-
var OAUTH_CLIENT_ID = "9d1c250a-e61b-44d9-88ed-5944d1962f5e";
|
|
9
|
-
var TOKEN_REFRESH_URL = "https://console.anthropic.com/v1/oauth/token";
|
|
10
|
-
var EXPIRY_BUFFER_MS = 5 * 60 * 1e3;
|
|
11
|
-
function readClaudeCliCredentials(opts) {
|
|
12
|
-
if (process.platform === "darwin") {
|
|
13
|
-
try {
|
|
14
|
-
const raw = execFileSync(
|
|
15
|
-
"security",
|
|
16
|
-
["find-generic-password", "-s", CLAUDE_CODE_SERVICE, "-w"],
|
|
17
|
-
{ encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }
|
|
18
|
-
).trim();
|
|
19
|
-
const parsed = parseCredentialsJson(raw);
|
|
20
|
-
if (parsed) return parsed;
|
|
21
|
-
} catch {
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
const home = opts?.homeDir ?? homedir();
|
|
25
|
-
const credFile = join(home, ".claude", ".credentials.json");
|
|
26
|
-
if (!existsSync(credFile)) {
|
|
27
|
-
return null;
|
|
28
|
-
}
|
|
29
|
-
try {
|
|
30
|
-
const raw = readFileSync(credFile, "utf8");
|
|
31
|
-
return parseCredentialsJson(raw);
|
|
32
|
-
} catch {
|
|
33
|
-
return null;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
function parseCredentialsJson(raw) {
|
|
37
|
-
try {
|
|
38
|
-
const parsed = JSON.parse(raw);
|
|
39
|
-
const oauth = parsed.claudeAiOauth;
|
|
40
|
-
if (oauth && typeof oauth.accessToken === "string" && typeof oauth.refreshToken === "string" && typeof oauth.expiresAt === "number") {
|
|
41
|
-
return {
|
|
42
|
-
accessToken: oauth.accessToken,
|
|
43
|
-
refreshToken: oauth.refreshToken,
|
|
44
|
-
expiresAt: oauth.expiresAt
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
} catch {
|
|
48
|
-
}
|
|
49
|
-
return null;
|
|
50
|
-
}
|
|
51
|
-
async function refreshClaudeOAuthToken(refreshToken, fetchImpl) {
|
|
52
|
-
const f = fetchImpl ?? fetch;
|
|
53
|
-
const response = await f(TOKEN_REFRESH_URL, {
|
|
54
|
-
method: "POST",
|
|
55
|
-
headers: { "content-type": "application/json" },
|
|
56
|
-
body: JSON.stringify({
|
|
57
|
-
grant_type: "refresh_token",
|
|
58
|
-
client_id: OAUTH_CLIENT_ID,
|
|
59
|
-
refresh_token: refreshToken
|
|
60
|
-
})
|
|
61
|
-
});
|
|
62
|
-
if (!response.ok) {
|
|
63
|
-
throw new Error(`OAuth token refresh failed (${response.status})`);
|
|
64
|
-
}
|
|
65
|
-
const data = await response.json();
|
|
66
|
-
return {
|
|
67
|
-
accessToken: data.access_token,
|
|
68
|
-
refreshToken: data.refresh_token,
|
|
69
|
-
expiresAt: Date.now() + data.expires_in * 1e3
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
function writeClaudeCliCredentials(cred, opts) {
|
|
73
|
-
const payload = JSON.stringify({ claudeAiOauth: cred });
|
|
74
|
-
if (process.platform === "darwin") {
|
|
75
|
-
try {
|
|
76
|
-
execFileSync(
|
|
77
|
-
"security",
|
|
78
|
-
["add-generic-password", "-U", "-s", CLAUDE_CODE_SERVICE, "-a", CLAUDE_CODE_ACCOUNT, "-w", payload],
|
|
79
|
-
{ stdio: "ignore" }
|
|
80
|
-
);
|
|
81
|
-
return;
|
|
82
|
-
} catch {
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
const home = opts?.homeDir ?? homedir();
|
|
86
|
-
const credFile = join(home, ".claude", ".credentials.json");
|
|
87
|
-
writeFileSync(credFile, payload, "utf8");
|
|
88
|
-
}
|
|
89
|
-
async function resolveClaudeOAuthToken(opts) {
|
|
90
|
-
const cred = readClaudeCliCredentials(opts);
|
|
91
|
-
if (!cred) {
|
|
92
|
-
return null;
|
|
93
|
-
}
|
|
94
|
-
if (cred.expiresAt < Date.now() + EXPIRY_BUFFER_MS) {
|
|
95
|
-
try {
|
|
96
|
-
const refreshed = await refreshClaudeOAuthToken(cred.refreshToken, opts?.fetchImpl);
|
|
97
|
-
writeClaudeCliCredentials(refreshed, opts);
|
|
98
|
-
return refreshed.accessToken;
|
|
99
|
-
} catch {
|
|
100
|
-
return cred.accessToken;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
return cred.accessToken;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
export {
|
|
107
|
-
resolveClaudeOAuthToken
|
|
108
|
-
};
|
package/dist/chunk-YCUNCH2I.js
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
registerObserveCommand
|
|
3
|
-
} from "./chunk-F2JEUD4J.js";
|
|
4
|
-
import {
|
|
5
|
-
registerReflectCommand
|
|
6
|
-
} from "./chunk-SJSFRIYS.js";
|
|
7
|
-
import {
|
|
8
|
-
registerEmbedCommand
|
|
9
|
-
} from "./chunk-OCGVIN3L.js";
|
|
10
|
-
import {
|
|
11
|
-
registerInjectCommand
|
|
12
|
-
} from "./chunk-U55BGUAU.js";
|
|
13
|
-
import {
|
|
14
|
-
resolveVaultPath
|
|
15
|
-
} from "./chunk-MXSSG3QU.js";
|
|
16
|
-
import {
|
|
17
|
-
registerContextCommand
|
|
18
|
-
} from "./chunk-3WRJEKN4.js";
|
|
19
|
-
import {
|
|
20
|
-
reweave
|
|
21
|
-
} from "./chunk-D2H45LON.js";
|
|
22
|
-
|
|
23
|
-
// src/commands/reweave.ts
|
|
24
|
-
async function reweaveCommand(options) {
|
|
25
|
-
const vaultPath = resolveVaultPath({ explicitPath: options.vaultPath });
|
|
26
|
-
const result = reweave({
|
|
27
|
-
vaultPath,
|
|
28
|
-
since: options.since,
|
|
29
|
-
dryRun: options.dryRun,
|
|
30
|
-
similarityThreshold: options.threshold
|
|
31
|
-
});
|
|
32
|
-
console.log(`Reweave: scanned ${result.filesScanned} files, checked ${result.observationsChecked} observations`);
|
|
33
|
-
if (result.supersessions.length === 0) {
|
|
34
|
-
console.log("No knowledge updates detected.");
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
console.log(`
|
|
38
|
-
Found ${result.supersessions.length} supersession(s):`);
|
|
39
|
-
for (const s of result.supersessions) {
|
|
40
|
-
console.log(`
|
|
41
|
-
OLD [${s.oldObservation.date}] ${s.oldObservation.content.slice(0, 80)}`);
|
|
42
|
-
console.log(` NEW [${s.newObservation.date}] ${s.newObservation.content.slice(0, 80)}`);
|
|
43
|
-
console.log(` Reason: ${s.reason}`);
|
|
44
|
-
}
|
|
45
|
-
if (result.dryRun) {
|
|
46
|
-
console.log("\n(dry run \u2014 no files modified)");
|
|
47
|
-
} else {
|
|
48
|
-
console.log(`
|
|
49
|
-
${result.supersessions.length} observation(s) marked as superseded.`);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
function registerReweaveCommand(program) {
|
|
53
|
-
program.command("reweave").description("Backward memory consolidation \u2014 detect and mark superseded observations").option("--since <date>", "Only check observations since this date (YYYY-MM-DD)").option("--dry-run", "Show what would be superseded without writing").option("--threshold <n>", "Entity similarity threshold (0-1, default 0.3)", "0.3").option("-v, --vault <path>", "Vault path").action(async (rawOptions) => {
|
|
54
|
-
await reweaveCommand({
|
|
55
|
-
vaultPath: rawOptions.vault,
|
|
56
|
-
since: rawOptions.since,
|
|
57
|
-
dryRun: rawOptions.dryRun,
|
|
58
|
-
threshold: parseFloat(rawOptions.threshold)
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// src/cli/index.ts
|
|
64
|
-
function registerCliCommands(program) {
|
|
65
|
-
registerContextCommand(program);
|
|
66
|
-
registerInjectCommand(program);
|
|
67
|
-
registerObserveCommand(program);
|
|
68
|
-
registerReflectCommand(program);
|
|
69
|
-
registerEmbedCommand(program);
|
|
70
|
-
registerReweaveCommand(program);
|
|
71
|
-
return program;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
export {
|
|
75
|
-
reweaveCommand,
|
|
76
|
-
registerReweaveCommand,
|
|
77
|
-
registerCliCommands
|
|
78
|
-
};
|