@cognee/cognee-openclaw 2026.4.12 → 2026.4.13
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 +27 -18
- package/dist/src/client.d.ts +55 -1
- package/dist/src/client.js +169 -17
- package/dist/src/client.js.map +1 -1
- package/dist/src/config.js +2 -1
- package/dist/src/config.js.map +1 -1
- package/dist/src/plugin.js +117 -22
- package/dist/src/plugin.js.map +1 -1
- package/dist/src/scope.d.ts +16 -3
- package/dist/src/scope.js +31 -6
- package/dist/src/scope.js.map +1 -1
- package/dist/src/sync.d.ts +1 -3
- package/dist/src/sync.js +90 -122
- package/dist/src/sync.js.map +1 -1
- package/dist/src/types.d.ts +29 -0
- package/openclaw.plugin.json +4 -0
- package/package.json +1 -1
package/dist/src/sync.js
CHANGED
|
@@ -2,121 +2,131 @@ import { loadDatasetState, saveDatasetState, saveScopedSyncIndexes, saveSyncInde
|
|
|
2
2
|
import { datasetNameForScope, routeFileToScope } from "./scope.js";
|
|
3
3
|
// ---------------------------------------------------------------------------
|
|
4
4
|
// Single-scope sync
|
|
5
|
+
//
|
|
6
|
+
// Cognee 1.1.0 uses /remember as the recommended ingest path: one
|
|
7
|
+
// multipart call uploads a batch of files and the server runs add+cognify
|
|
8
|
+
// (and improve) end-to-end, returning per-file data_ids. We use it for new
|
|
9
|
+
// files and keep PATCH /update for changed files (remember has no update
|
|
10
|
+
// counterpart, and the existing 1.1.0 update endpoint already triggers a
|
|
11
|
+
// follow-up cognify internally, so the fan-out is the same).
|
|
5
12
|
// ---------------------------------------------------------------------------
|
|
6
13
|
export async function syncFiles(client, changedFiles, fullFiles, syncIndex, cfg, logger, overrideDatasetName) {
|
|
7
14
|
const result = { added: 0, updated: 0, skipped: 0, errors: 0, deleted: 0 };
|
|
8
15
|
const dsName = overrideDatasetName || cfg.datasetName;
|
|
9
16
|
let datasetId = syncIndex.datasetId;
|
|
10
|
-
|
|
17
|
+
// Partition changed files into "needs add" vs "needs update".
|
|
18
|
+
// We process updates per-file (PATCH /update) and batch all adds into a
|
|
19
|
+
// single /remember call at the end of the loop.
|
|
20
|
+
const toAdd = [];
|
|
11
21
|
for (const file of changedFiles) {
|
|
12
22
|
const existing = syncIndex.entries[file.path];
|
|
13
23
|
if (existing && existing.hash === file.hash) {
|
|
14
24
|
result.skipped++;
|
|
15
25
|
continue;
|
|
16
26
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
27
|
+
if (existing?.dataId && datasetId) {
|
|
28
|
+
const dataWithMetadata = wrapWithMetadata(file);
|
|
29
|
+
try {
|
|
30
|
+
const updateResponse = await client.update({
|
|
31
|
+
dataId: existing.dataId,
|
|
32
|
+
datasetId,
|
|
33
|
+
data: dataWithMetadata,
|
|
34
|
+
filePath: file.path,
|
|
35
|
+
datasetName: dsName,
|
|
36
|
+
});
|
|
37
|
+
const newDataId = updateResponse.dataId;
|
|
38
|
+
if (!newDataId) {
|
|
39
|
+
logger.warn?.(`cognee-openclaw: update for ${file.path} succeeded but could not resolve new data_id`);
|
|
40
|
+
}
|
|
41
|
+
syncIndex.entries[file.path] = { hash: file.hash, dataId: newDataId };
|
|
42
|
+
syncIndex.datasetId = datasetId;
|
|
43
|
+
syncIndex.datasetName = dsName;
|
|
44
|
+
result.updated++;
|
|
45
|
+
logger.info?.(`cognee-openclaw: updated ${file.path} (newDataId=${newDataId})`);
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
catch (updateError) {
|
|
49
|
+
const errorMsg = updateError instanceof Error ? updateError.message : String(updateError);
|
|
50
|
+
if (errorMsg.includes("404") || errorMsg.includes("409") || errorMsg.includes("not found")) {
|
|
51
|
+
logger.info?.(`cognee-openclaw: update failed for ${file.path}, falling back to remember`);
|
|
52
|
+
// fall through to add path
|
|
38
53
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
delete existing.dataId;
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
throw updateError;
|
|
47
|
-
}
|
|
54
|
+
else {
|
|
55
|
+
result.errors++;
|
|
56
|
+
logger.warn?.(`cognee-openclaw: failed to sync ${file.path}: ${errorMsg}`);
|
|
57
|
+
continue;
|
|
48
58
|
}
|
|
49
59
|
}
|
|
50
|
-
|
|
60
|
+
}
|
|
61
|
+
toAdd.push(file);
|
|
62
|
+
}
|
|
63
|
+
if (toAdd.length > 0) {
|
|
64
|
+
try {
|
|
65
|
+
const rememberResponse = await client.remember({
|
|
66
|
+
files: toAdd.map((f) => ({ filePath: f.path, data: wrapWithMetadata(f) })),
|
|
51
67
|
datasetName: dsName,
|
|
52
68
|
datasetId,
|
|
53
|
-
data: dataWithMetadata,
|
|
54
|
-
filePath: file.path,
|
|
55
69
|
});
|
|
56
|
-
if (
|
|
57
|
-
datasetId =
|
|
70
|
+
if (rememberResponse.datasetId && rememberResponse.datasetId !== datasetId) {
|
|
71
|
+
datasetId = rememberResponse.datasetId;
|
|
58
72
|
const state = await loadDatasetState();
|
|
59
|
-
state[dsName] =
|
|
73
|
+
state[dsName] = rememberResponse.datasetId;
|
|
60
74
|
await saveDatasetState(state);
|
|
61
75
|
}
|
|
62
|
-
|
|
76
|
+
const itemsByPath = new Map();
|
|
77
|
+
for (const item of rememberResponse.items) {
|
|
78
|
+
itemsByPath.set(item.filePath, item.dataId);
|
|
79
|
+
}
|
|
80
|
+
for (const file of toAdd) {
|
|
81
|
+
const dataId = itemsByPath.get(file.path);
|
|
82
|
+
syncIndex.entries[file.path] = { hash: file.hash, dataId };
|
|
83
|
+
result.added++;
|
|
84
|
+
logger.info?.(`cognee-openclaw: remembered ${file.path}${dataId ? ` (dataId=${dataId})` : ""}`);
|
|
85
|
+
}
|
|
63
86
|
syncIndex.datasetId = datasetId;
|
|
64
87
|
syncIndex.datasetName = dsName;
|
|
65
|
-
needsCognify = true;
|
|
66
|
-
result.added++;
|
|
67
|
-
logger.info?.(`cognee-openclaw: added ${file.path}`);
|
|
68
88
|
}
|
|
69
89
|
catch (error) {
|
|
70
|
-
|
|
71
|
-
|
|
90
|
+
// One failed batch fails every queued file — surface them all so the
|
|
91
|
+
// caller's error count reflects the actual workload, not just one entry.
|
|
92
|
+
for (const file of toAdd) {
|
|
93
|
+
result.errors++;
|
|
94
|
+
logger.warn?.(`cognee-openclaw: failed to sync ${file.path}: ${error instanceof Error ? error.message : String(error)}`);
|
|
95
|
+
}
|
|
72
96
|
}
|
|
73
97
|
}
|
|
74
|
-
//
|
|
98
|
+
// Per-item /forget for files that disappeared from the workspace.
|
|
99
|
+
// We pass `dsName` (not the UUID) — see CogneeHttpClient.forget().
|
|
75
100
|
const currentPaths = new Set(fullFiles.map(f => f.path));
|
|
76
101
|
for (const [path, entry] of Object.entries(syncIndex.entries)) {
|
|
77
102
|
if (!currentPaths.has(path) && entry.dataId && datasetId) {
|
|
78
|
-
const
|
|
79
|
-
if (
|
|
103
|
+
const forgetResult = await client.forget({ dataId: entry.dataId, dataset: dsName });
|
|
104
|
+
if (forgetResult.deleted) {
|
|
80
105
|
result.deleted++;
|
|
81
106
|
delete syncIndex.entries[path];
|
|
82
|
-
logger.info?.(`cognee-openclaw:
|
|
107
|
+
logger.info?.(`cognee-openclaw: forgot ${path}`);
|
|
83
108
|
}
|
|
84
109
|
else {
|
|
85
|
-
const isNotFound =
|
|
110
|
+
const isNotFound = forgetResult.error && (forgetResult.error.includes("404") || forgetResult.error.includes("409") || forgetResult.error.includes("not found"));
|
|
86
111
|
if (isNotFound) {
|
|
87
112
|
result.deleted++;
|
|
88
113
|
delete syncIndex.entries[path];
|
|
89
|
-
logger.info?.(`cognee-openclaw:
|
|
114
|
+
logger.info?.(`cognee-openclaw: forgot ${path} (already removed from Cognee)`);
|
|
90
115
|
}
|
|
91
116
|
else {
|
|
92
117
|
result.errors++;
|
|
93
|
-
logger.warn?.(`cognee-openclaw: failed to
|
|
118
|
+
logger.warn?.(`cognee-openclaw: failed to forget ${path}${forgetResult.error ? `: ${forgetResult.error}` : ""}`);
|
|
94
119
|
}
|
|
95
120
|
}
|
|
96
121
|
}
|
|
97
122
|
}
|
|
98
|
-
// Fix #9: Only trigger memify AFTER polling cognify to completion
|
|
99
|
-
if (needsCognify && cfg.autoCognify && datasetId) {
|
|
100
|
-
try {
|
|
101
|
-
await client.cognify({ datasetIds: [datasetId] });
|
|
102
|
-
logger.info?.("cognee-openclaw: cognify dispatched");
|
|
103
|
-
if (cfg.autoMemify) {
|
|
104
|
-
// Poll for cognify completion before triggering memify
|
|
105
|
-
const memifyDatasetId = datasetId;
|
|
106
|
-
await waitForCognifyThenMemify(client, memifyDatasetId, logger);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
catch (error) {
|
|
110
|
-
logger.warn?.(`cognee-openclaw: cognify failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
123
|
await saveSyncIndex(syncIndex);
|
|
114
124
|
return { ...result, datasetId };
|
|
115
125
|
}
|
|
116
126
|
// ---------------------------------------------------------------------------
|
|
117
127
|
// Multi-scope sync
|
|
118
128
|
// ---------------------------------------------------------------------------
|
|
119
|
-
export async function syncFilesScoped(client, changedFiles, fullFiles, scopedIndexes, cfg, logger) {
|
|
129
|
+
export async function syncFilesScoped(client, changedFiles, fullFiles, scopedIndexes, cfg, logger, runtimeAgentId) {
|
|
120
130
|
const totalResult = { added: 0, updated: 0, skipped: 0, errors: 0, deleted: 0 };
|
|
121
131
|
const datasetIds = { company: undefined, user: undefined, agent: undefined };
|
|
122
132
|
// Group changed files by scope
|
|
@@ -141,9 +151,15 @@ export async function syncFilesScoped(client, changedFiles, fullFiles, scopedInd
|
|
|
141
151
|
...Object.keys(scopedIndexes),
|
|
142
152
|
]);
|
|
143
153
|
for (const scope of allScopes) {
|
|
144
|
-
const dsName = datasetNameForScope(scope, cfg);
|
|
154
|
+
const dsName = datasetNameForScope(scope, cfg, runtimeAgentId);
|
|
145
155
|
const scopeChanged = changedByScope.get(scope) ?? [];
|
|
146
156
|
const scopeFull = fullByScope.get(scope) ?? [];
|
|
157
|
+
if (scope === "agent" &&
|
|
158
|
+
runtimeAgentId?.trim() &&
|
|
159
|
+
scopedIndexes.agent &&
|
|
160
|
+
scopedIndexes.agent.datasetName !== dsName) {
|
|
161
|
+
scopedIndexes.agent = { entries: {} };
|
|
162
|
+
}
|
|
147
163
|
if (!scopedIndexes[scope]) {
|
|
148
164
|
scopedIndexes[scope] = { entries: {} };
|
|
149
165
|
}
|
|
@@ -165,62 +181,14 @@ export async function syncFilesScoped(client, changedFiles, fullFiles, scopedInd
|
|
|
165
181
|
return { ...totalResult, datasetIds };
|
|
166
182
|
}
|
|
167
183
|
// ---------------------------------------------------------------------------
|
|
168
|
-
//
|
|
184
|
+
// Helpers
|
|
169
185
|
// ---------------------------------------------------------------------------
|
|
170
|
-
|
|
186
|
+
function wrapWithMetadata(file) {
|
|
187
|
+
return `# ${file.path}\n\n${file.content}\n\n---\nMetadata: ${JSON.stringify({ path: file.path, source: "memory" })}`;
|
|
188
|
+
}
|
|
189
|
+
// Kept for backwards compatibility with downstream consumers that imported
|
|
190
|
+
// these from sync.ts to drive cognify polling. The new /remember path runs
|
|
191
|
+
// cognify+improve server-side, so the openclaw sync flow no longer polls.
|
|
171
192
|
export let COGNIFY_POLL_INTERVAL_MS = 5_000;
|
|
172
|
-
const COGNIFY_POLL_MAX_ATTEMPTS = 60; // 5 min max
|
|
173
|
-
/** Allow tests to adjust the poll interval */
|
|
174
193
|
export function _setPollInterval(ms) { COGNIFY_POLL_INTERVAL_MS = ms; }
|
|
175
|
-
async function waitForCognifyThenMemify(client, datasetId, logger) {
|
|
176
|
-
for (let attempt = 0; attempt < COGNIFY_POLL_MAX_ATTEMPTS; attempt++) {
|
|
177
|
-
// Wait before polling (skip on first attempt to check immediately)
|
|
178
|
-
if (attempt > 0) {
|
|
179
|
-
await new Promise(r => setTimeout(r, COGNIFY_POLL_INTERVAL_MS));
|
|
180
|
-
}
|
|
181
|
-
try {
|
|
182
|
-
const status = await client.datasetStatus(datasetId);
|
|
183
|
-
if (status === "completed" || status === "COMPLETED") {
|
|
184
|
-
try {
|
|
185
|
-
await client.memify({ datasetIds: [datasetId] });
|
|
186
|
-
logger.info?.("cognee-openclaw: memify dispatched after cognify completed");
|
|
187
|
-
}
|
|
188
|
-
catch (error) {
|
|
189
|
-
logger.warn?.(`cognee-openclaw: memify failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
190
|
-
}
|
|
191
|
-
return;
|
|
192
|
-
}
|
|
193
|
-
if (status === "failed" || status === "FAILED" || status === "error") {
|
|
194
|
-
logger.warn?.(`cognee-openclaw: cognify failed (status: ${status}), skipping memify`);
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
if (status === "unknown") {
|
|
198
|
-
// Endpoint exists but doesn't track this operation — fall back to optimistic memify
|
|
199
|
-
logger.warn?.("cognee-openclaw: could not poll cognify status, running memify optimistically");
|
|
200
|
-
try {
|
|
201
|
-
await client.memify({ datasetIds: [datasetId] });
|
|
202
|
-
logger.info?.("cognee-openclaw: memify dispatched (optimistic)");
|
|
203
|
-
}
|
|
204
|
-
catch (error) {
|
|
205
|
-
logger.warn?.(`cognee-openclaw: memify failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
206
|
-
}
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
// Still running, continue polling
|
|
210
|
-
}
|
|
211
|
-
catch {
|
|
212
|
-
// Status endpoint may not exist or may fail — fall back to fire-and-forget
|
|
213
|
-
logger.warn?.("cognee-openclaw: could not poll cognify status, running memify optimistically");
|
|
214
|
-
try {
|
|
215
|
-
await client.memify({ datasetIds: [datasetId] });
|
|
216
|
-
logger.info?.("cognee-openclaw: memify dispatched (optimistic)");
|
|
217
|
-
}
|
|
218
|
-
catch (error) {
|
|
219
|
-
logger.warn?.(`cognee-openclaw: memify failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
220
|
-
}
|
|
221
|
-
return;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
logger.warn?.("cognee-openclaw: cognify polling timed out, skipping memify");
|
|
225
|
-
}
|
|
226
194
|
//# sourceMappingURL=sync.js.map
|
package/dist/src/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC5G,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnE,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAAwB,EACxB,YAA0B,EAC1B,SAAuB,EACvB,SAAoB,EACpB,GAAiC,EACjC,MAAsE,EACtE,mBAA4B;IAE5B,MAAM,MAAM,GAAe,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACvF,MAAM,MAAM,GAAG,mBAAmB,IAAI,GAAG,CAAC,WAAW,CAAC;IACtD,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync.ts"],"names":[],"mappings":"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"}
|
package/dist/src/types.d.ts
CHANGED
|
@@ -20,6 +20,16 @@ export type CogneePluginConfig = {
|
|
|
20
20
|
companyDataset?: string;
|
|
21
21
|
userDatasetPrefix?: string;
|
|
22
22
|
agentDatasetPrefix?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Template for the per-agent dataset name. Use `{agentId}` as the placeholder.
|
|
25
|
+
* Examples:
|
|
26
|
+
* "{agentId}" → bare agent id ("research", "ebay")
|
|
27
|
+
* "memory-{agentId}" → "memory-research"
|
|
28
|
+
* When set, takes precedence over `agentDatasetPrefix` and the legacy
|
|
29
|
+
* `${datasetName}-agent-{id}` fallback. Multi-agent gateways should set this
|
|
30
|
+
* to align with how their per-agent datasets are named in Cognee.
|
|
31
|
+
*/
|
|
32
|
+
agentDatasetTemplate?: string;
|
|
23
33
|
userId?: string;
|
|
24
34
|
agentId?: string;
|
|
25
35
|
recallScopes?: MemoryScope[];
|
|
@@ -49,6 +59,25 @@ export type CogneeAddResponse = {
|
|
|
49
59
|
data_id?: unknown;
|
|
50
60
|
data_ingestion_info?: unknown;
|
|
51
61
|
};
|
|
62
|
+
export type CogneeRememberItem = {
|
|
63
|
+
id?: string;
|
|
64
|
+
name?: string;
|
|
65
|
+
content_hash?: string;
|
|
66
|
+
token_count?: number;
|
|
67
|
+
mime_type?: string;
|
|
68
|
+
data_size?: number;
|
|
69
|
+
};
|
|
70
|
+
export type CogneeRememberResponse = {
|
|
71
|
+
status?: string;
|
|
72
|
+
dataset_id?: string;
|
|
73
|
+
dataset_name?: string;
|
|
74
|
+
pipeline_run_id?: string;
|
|
75
|
+
items_processed?: number;
|
|
76
|
+
elapsed_seconds?: number;
|
|
77
|
+
items?: CogneeRememberItem[];
|
|
78
|
+
content_hash?: string;
|
|
79
|
+
error?: string;
|
|
80
|
+
};
|
|
52
81
|
export type CogneeSearchResult = {
|
|
53
82
|
id: string;
|
|
54
83
|
text: string;
|
package/openclaw.plugin.json
CHANGED
|
@@ -46,6 +46,10 @@
|
|
|
46
46
|
"type": "string",
|
|
47
47
|
"description": "Prefix for agent-scoped datasets (becomes '{prefix}-{agentId}'). Setting this enables multi-scope mode."
|
|
48
48
|
},
|
|
49
|
+
"agentDatasetTemplate": {
|
|
50
|
+
"type": "string",
|
|
51
|
+
"description": "Template for the per-agent dataset name with '{agentId}' placeholder (e.g. '{agentId}' for bare id, 'memory-{agentId}' for prefixed). Takes precedence over agentDatasetPrefix when set. Enables multi-scope mode."
|
|
52
|
+
},
|
|
49
53
|
"userId": {
|
|
50
54
|
"type": "string",
|
|
51
55
|
"description": "User identifier for user-scoped memory (or set OPENCLAW_USER_ID env var)"
|