@cognee/cognee-openclaw 2026.4.12 → 2026.5.21
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 +34 -19
- 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.d.ts +1 -0
- package/dist/src/config.js +5 -2
- package/dist/src/config.js.map +1 -1
- package/dist/src/files.js +6 -0
- package/dist/src/files.js.map +1 -1
- package/dist/src/plugin.js +175 -66
- package/dist/src/plugin.js.map +1 -1
- package/dist/src/scope.d.ts +7 -2
- package/dist/src/scope.js +16 -6
- package/dist/src/scope.js.map +1 -1
- package/dist/src/sync.d.ts +1 -3
- package/dist/src/sync.js +88 -122
- package/dist/src/sync.js.map +1 -1
- package/dist/src/types.d.ts +32 -0
- package/openclaw.plugin.json +4 -0
- package/package.json +1 -1
package/dist/src/scope.js
CHANGED
|
@@ -97,15 +97,20 @@ export function routeFileToScope(filePath, routes, defaultScope) {
|
|
|
97
97
|
}
|
|
98
98
|
/**
|
|
99
99
|
* Determine whether multi-scope mode is active.
|
|
100
|
-
* Active when at least one scope-specific dataset prefix/name is configured.
|
|
100
|
+
* Active when at least one scope-specific dataset prefix/name/template is configured.
|
|
101
101
|
*/
|
|
102
102
|
export function isMultiScopeEnabled(cfg) {
|
|
103
|
-
return !!(cfg.companyDataset || cfg.userDatasetPrefix || cfg.agentDatasetPrefix);
|
|
103
|
+
return !!(cfg.companyDataset || cfg.userDatasetPrefix || cfg.agentDatasetPrefix || cfg.agentDatasetTemplate);
|
|
104
104
|
}
|
|
105
105
|
/**
|
|
106
106
|
* Resolve the Cognee dataset name for a given memory scope.
|
|
107
|
+
*
|
|
108
|
+
* `runtimeAgentId` lets multi-agent gateways pass the active agent's identity
|
|
109
|
+
* (from PluginHookAgentContext.agentId) so the "agent" scope routes to the
|
|
110
|
+
* caller's dataset rather than the static plugin-config agentId. Falls back to
|
|
111
|
+
* cfg.agentId when runtimeAgentId is absent (CLI / background sync paths).
|
|
107
112
|
*/
|
|
108
|
-
export function datasetNameForScope(scope, cfg) {
|
|
113
|
+
export function datasetNameForScope(scope, cfg, runtimeAgentId) {
|
|
109
114
|
switch (scope) {
|
|
110
115
|
case "company":
|
|
111
116
|
return cfg.companyDataset || `${cfg.datasetName}-company`;
|
|
@@ -113,10 +118,15 @@ export function datasetNameForScope(scope, cfg) {
|
|
|
113
118
|
return cfg.userDatasetPrefix
|
|
114
119
|
? `${cfg.userDatasetPrefix}-${cfg.userId || "default"}`
|
|
115
120
|
: `${cfg.datasetName}-user-${cfg.userId || "default"}`;
|
|
116
|
-
case "agent":
|
|
121
|
+
case "agent": {
|
|
122
|
+
const id = runtimeAgentId?.trim() || cfg.agentId || "default";
|
|
123
|
+
if (cfg.agentDatasetTemplate) {
|
|
124
|
+
return cfg.agentDatasetTemplate.replace(/\{agentId\}/g, id);
|
|
125
|
+
}
|
|
117
126
|
return cfg.agentDatasetPrefix
|
|
118
|
-
? `${cfg.agentDatasetPrefix}-${
|
|
119
|
-
: `${cfg.datasetName}-agent-${
|
|
127
|
+
? `${cfg.agentDatasetPrefix}-${id}`
|
|
128
|
+
: `${cfg.datasetName}-agent-${id}`;
|
|
129
|
+
}
|
|
120
130
|
}
|
|
121
131
|
}
|
|
122
132
|
//# sourceMappingURL=scope.js.map
|
package/dist/src/scope.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/scope.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/scope.ts"],"names":[],"mappings":"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"}
|
package/dist/src/sync.d.ts
CHANGED
|
@@ -9,10 +9,8 @@ export declare function syncFiles(client: CogneeHttpClient, changedFiles: Memory
|
|
|
9
9
|
export declare function syncFilesScoped(client: CogneeHttpClient, changedFiles: MemoryFile[], fullFiles: MemoryFile[], scopedIndexes: ScopedSyncIndexes, cfg: Required<CogneePluginConfig>, logger: {
|
|
10
10
|
info?: (msg: string) => void;
|
|
11
11
|
warn?: (msg: string) => void;
|
|
12
|
-
}): Promise<SyncResult & {
|
|
12
|
+
}, runtimeAgentId?: string): Promise<SyncResult & {
|
|
13
13
|
datasetIds: Record<MemoryScope, string | undefined>;
|
|
14
14
|
}>;
|
|
15
|
-
/** Exported so tests can override */
|
|
16
15
|
export declare let COGNIFY_POLL_INTERVAL_MS: number;
|
|
17
|
-
/** Allow tests to adjust the poll interval */
|
|
18
16
|
export declare function _setPollInterval(ms: number): void;
|
package/dist/src/sync.js
CHANGED
|
@@ -2,121 +2,135 @@ import { loadDatasetState, saveDatasetState, saveScopedSyncIndexes, saveSyncInde
|
|
|
2
2
|
import { datasetNameForScope, routeFileToScope } from "./scope.js";
|
|
3
3
|
// ---------------------------------------------------------------------------
|
|
4
4
|
// Single-scope sync
|
|
5
|
+
//
|
|
6
|
+
// Cognee 1.0.3 introduced /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.0.3 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
|
-
|
|
110
|
+
// Cognee 1.0.x wraps 404s as 500 with "An error occurred during deletion".
|
|
111
|
+
const isNotFound = forgetResult.error && (forgetResult.error.includes("404") ||
|
|
112
|
+
forgetResult.error.includes("409") ||
|
|
113
|
+
forgetResult.error.includes("not found") ||
|
|
114
|
+
forgetResult.error.includes("An error occurred during deletion"));
|
|
86
115
|
if (isNotFound) {
|
|
87
116
|
result.deleted++;
|
|
88
117
|
delete syncIndex.entries[path];
|
|
89
|
-
logger.info?.(`cognee-openclaw:
|
|
118
|
+
logger.info?.(`cognee-openclaw: forgot ${path} (already removed from Cognee)`);
|
|
90
119
|
}
|
|
91
120
|
else {
|
|
92
121
|
result.errors++;
|
|
93
|
-
logger.warn?.(`cognee-openclaw: failed to
|
|
122
|
+
logger.warn?.(`cognee-openclaw: failed to forget ${path}${forgetResult.error ? `: ${forgetResult.error}` : ""}`);
|
|
94
123
|
}
|
|
95
124
|
}
|
|
96
125
|
}
|
|
97
126
|
}
|
|
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
127
|
await saveSyncIndex(syncIndex);
|
|
114
128
|
return { ...result, datasetId };
|
|
115
129
|
}
|
|
116
130
|
// ---------------------------------------------------------------------------
|
|
117
131
|
// Multi-scope sync
|
|
118
132
|
// ---------------------------------------------------------------------------
|
|
119
|
-
export async function syncFilesScoped(client, changedFiles, fullFiles, scopedIndexes, cfg, logger) {
|
|
133
|
+
export async function syncFilesScoped(client, changedFiles, fullFiles, scopedIndexes, cfg, logger, runtimeAgentId) {
|
|
120
134
|
const totalResult = { added: 0, updated: 0, skipped: 0, errors: 0, deleted: 0 };
|
|
121
135
|
const datasetIds = { company: undefined, user: undefined, agent: undefined };
|
|
122
136
|
// Group changed files by scope
|
|
@@ -141,7 +155,7 @@ export async function syncFilesScoped(client, changedFiles, fullFiles, scopedInd
|
|
|
141
155
|
...Object.keys(scopedIndexes),
|
|
142
156
|
]);
|
|
143
157
|
for (const scope of allScopes) {
|
|
144
|
-
const dsName = datasetNameForScope(scope, cfg);
|
|
158
|
+
const dsName = datasetNameForScope(scope, cfg, runtimeAgentId);
|
|
145
159
|
const scopeChanged = changedByScope.get(scope) ?? [];
|
|
146
160
|
const scopeFull = fullByScope.get(scope) ?? [];
|
|
147
161
|
if (!scopedIndexes[scope]) {
|
|
@@ -165,62 +179,14 @@ export async function syncFilesScoped(client, changedFiles, fullFiles, scopedInd
|
|
|
165
179
|
return { ...totalResult, datasetIds };
|
|
166
180
|
}
|
|
167
181
|
// ---------------------------------------------------------------------------
|
|
168
|
-
//
|
|
182
|
+
// Helpers
|
|
169
183
|
// ---------------------------------------------------------------------------
|
|
170
|
-
|
|
184
|
+
function wrapWithMetadata(file) {
|
|
185
|
+
return `# ${file.path}\n\n${file.content}\n\n---\nMetadata: ${JSON.stringify({ path: file.path, source: "memory" })}`;
|
|
186
|
+
}
|
|
187
|
+
// Kept for backwards compatibility with downstream consumers that imported
|
|
188
|
+
// these from sync.ts to drive cognify polling. The new /remember path runs
|
|
189
|
+
// cognify+improve server-side, so the openclaw sync flow no longer polls.
|
|
171
190
|
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
191
|
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
192
|
//# 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":"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,EAAE;AACF,wEAAwE;AACxE,0EAA0E;AAC1E,2EAA2E;AAC3E,yEAAyE;AACzE,yEAAyE;AACzE,6DAA6D;AAC7D,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;IAEpC,8DAA8D;IAC9D,wEAAwE;IACxE,gDAAgD;IAChD,MAAM,KAAK,GAAiB,EAAE,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE9C,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5C,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,SAAS;QACX,CAAC;QAED,IAAI,QAAQ,EAAE,MAAM,IAAI,SAAS,EAAE,CAAC;YAClC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC;gBACH,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;oBACzC,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,SAAS;oBACT,IAAI,EAAE,gBAAgB;oBACtB,QAAQ,EAAE,IAAI,CAAC,IAAI;oBACnB,WAAW,EAAE,MAAM;iBACpB,CAAC,CAAC;gBACH,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC;gBACxC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,EAAE,CAAC,+BAA+B,IAAI,CAAC,IAAI,8CAA8C,CAAC,CAAC;gBACxG,CAAC;gBACD,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;gBACtE,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;gBAChC,SAAS,CAAC,WAAW,GAAG,MAAM,CAAC;gBAC/B,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,EAAE,CAAC,4BAA4B,IAAI,CAAC,IAAI,eAAe,SAAS,GAAG,CAAC,CAAC;gBAChF,SAAS;YACX,CAAC;YAAC,OAAO,WAAW,EAAE,CAAC;gBACrB,MAAM,QAAQ,GAAG,WAAW,YAAY,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBAC1F,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC3F,MAAM,CAAC,IAAI,EAAE,CAAC,sCAAsC,IAAI,CAAC,IAAI,4BAA4B,CAAC,CAAC;oBAC3F,2BAA2B;gBAC7B,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,MAAM,EAAE,CAAC;oBAChB,MAAM,CAAC,IAAI,EAAE,CAAC,mCAAmC,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC,CAAC;oBAC3E,SAAS;gBACX,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;gBAC7C,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC1E,WAAW,EAAE,MAAM;gBACnB,SAAS;aACV,CAAC,CAAC;YAEH,IAAI,gBAAgB,CAAC,SAAS,IAAI,gBAAgB,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC3E,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC;gBACvC,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;gBACvC,KAAK,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC,SAAS,CAAC;gBAC3C,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAA8B,CAAC;YAC1D,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAC,KAAK,EAAE,CAAC;gBAC1C,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9C,CAAC;YAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1C,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;gBAC3D,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,EAAE,CAAC,+BAA+B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClG,CAAC;YACD,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;YAChC,SAAS,CAAC,WAAW,GAAG,MAAM,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qEAAqE;YACrE,yEAAyE;YACzE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,EAAE,CAAC,mCAAmC,IAAI,CAAC,IAAI,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3H,CAAC;QACH,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,mEAAmE;IACnE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACzD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;YACzD,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACpF,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;gBACzB,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC/B,MAAM,CAAC,IAAI,EAAE,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,2EAA2E;gBAC3E,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,IAAI,CACvC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAClC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAClC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;oBACxC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,mCAAmC,CAAC,CACjE,CAAC;gBACF,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,CAAC,OAAO,EAAE,CAAC;oBACjB,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAC/B,MAAM,CAAC,IAAI,EAAE,CAAC,2BAA2B,IAAI,gCAAgC,CAAC,CAAC;gBACjF,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,MAAM,EAAE,CAAC;oBAChB,MAAM,CAAC,IAAI,EAAE,CAAC,qCAAqC,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;IAC/B,OAAO,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,CAAC;AAClC,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAwB,EACxB,YAA0B,EAC1B,SAAuB,EACvB,aAAgC,EAChC,GAAiC,EACjC,MAAsE,EACtE,cAAuB;IAEvB,MAAM,WAAW,GAAe,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAC5F,MAAM,UAAU,GAA4C,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAEtH,+BAA+B;IAC/B,MAAM,cAAc,GAAG,IAAI,GAAG,EAA6B,CAAC;IAC5D,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACnF,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,2BAA2B;IAC3B,MAAM,WAAW,GAAG,IAAI,GAAG,EAA6B,CAAC;IACzD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACnF,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,yCAAyC;IACzC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAc;QACrC,GAAG,cAAc,CAAC,IAAI,EAAE;QACxB,GAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAmB;KACjD,CAAC,CAAC;IAEH,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACrD,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAE/C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACzC,CAAC;QACD,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAE,CAAC;QAEzC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACzD,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAExF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,eAAe;YAAE,SAAS;QAE5D,MAAM,CAAC,IAAI,EAAE,CAAC,qBAAqB,KAAK,aAAa,YAAY,CAAC,MAAM,gCAAgC,MAAM,IAAI,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAE3J,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACjG,WAAW,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;QAClC,WAAW,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC;QACtC,WAAW,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC;QACtC,WAAW,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;QACpC,WAAW,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC;QACtC,UAAU,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;IACvC,CAAC;IAED,MAAM,qBAAqB,CAAC,aAAa,CAAC,CAAC;IAC3C,OAAO,EAAE,GAAG,WAAW,EAAE,UAAU,EAAE,CAAC;AACxC,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,gBAAgB,CAAC,IAAgB;IACxC,OAAO,KAAK,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,OAAO,sBAAsB,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AACxH,CAAC;AAED,2EAA2E;AAC3E,2EAA2E;AAC3E,0EAA0E;AAC1E,MAAM,CAAC,IAAI,wBAAwB,GAAG,KAAK,CAAC;AAC5C,MAAM,UAAU,gBAAgB,CAAC,EAAU,IAAU,wBAAwB,GAAG,EAAE,CAAC,CAAC,CAAC"}
|
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[];
|
|
@@ -39,6 +49,9 @@ export type CogneePluginConfig = {
|
|
|
39
49
|
autoIndex?: boolean;
|
|
40
50
|
autoCognify?: boolean;
|
|
41
51
|
autoMemify?: boolean;
|
|
52
|
+
/** On session_end, call /improve with the session_id to bridge any
|
|
53
|
+
* feedback-bearing QAs into the permanent graph. */
|
|
54
|
+
improveOnSessionEnd?: boolean;
|
|
42
55
|
requestTimeoutMs?: number;
|
|
43
56
|
ingestionTimeoutMs?: number;
|
|
44
57
|
};
|
|
@@ -49,6 +62,25 @@ export type CogneeAddResponse = {
|
|
|
49
62
|
data_id?: unknown;
|
|
50
63
|
data_ingestion_info?: unknown;
|
|
51
64
|
};
|
|
65
|
+
export type CogneeRememberItem = {
|
|
66
|
+
id?: string;
|
|
67
|
+
name?: string;
|
|
68
|
+
content_hash?: string;
|
|
69
|
+
token_count?: number;
|
|
70
|
+
mime_type?: string;
|
|
71
|
+
data_size?: number;
|
|
72
|
+
};
|
|
73
|
+
export type CogneeRememberResponse = {
|
|
74
|
+
status?: string;
|
|
75
|
+
dataset_id?: string;
|
|
76
|
+
dataset_name?: string;
|
|
77
|
+
pipeline_run_id?: string;
|
|
78
|
+
items_processed?: number;
|
|
79
|
+
elapsed_seconds?: number;
|
|
80
|
+
items?: CogneeRememberItem[];
|
|
81
|
+
content_hash?: string;
|
|
82
|
+
error?: string;
|
|
83
|
+
};
|
|
52
84
|
export type CogneeSearchResult = {
|
|
53
85
|
id: string;
|
|
54
86
|
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)"
|