cliper-memory 0.1.2 → 0.1.3
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/dist/commands/sync.d.ts +10 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +119 -9
- package/dist/commands/sync.js.map +1 -1
- package/dist/index.js +0 -5
- package/dist/index.js.map +1 -1
- package/dist/providers/cognee/client.d.ts +15 -0
- package/dist/providers/cognee/client.d.ts.map +1 -1
- package/dist/providers/cognee/client.js +56 -15
- package/dist/providers/cognee/client.js.map +1 -1
- package/dist/providers/cognee/provider.d.ts +3 -0
- package/dist/providers/cognee/provider.d.ts.map +1 -1
- package/dist/providers/cognee/provider.js +6 -0
- package/dist/providers/cognee/provider.js.map +1 -1
- package/dist/sdk/manifest.d.ts +25 -0
- package/dist/sdk/manifest.d.ts.map +1 -0
- package/dist/sdk/manifest.js +94 -0
- package/dist/sdk/manifest.js.map +1 -0
- package/package.json +1 -1
package/dist/commands/sync.d.ts
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
interface SyncOptions {
|
|
2
2
|
watch?: boolean;
|
|
3
3
|
}
|
|
4
|
+
/**
|
|
5
|
+
* cliper sync — incremental memory synchronization.
|
|
6
|
+
*
|
|
7
|
+
* Rebuilds the repository's memories, diffs them against the manifest
|
|
8
|
+
* written by the last init/sync, and uploads ONLY what changed:
|
|
9
|
+
* added → new memories (new files, new commits, new PRs...)
|
|
10
|
+
* changed → memories whose content hash moved
|
|
11
|
+
* removed → memories that no longer exist (reported; pruned on full rebuild)
|
|
12
|
+
* If nothing changed, no upload and no cognify run at all.
|
|
13
|
+
*/
|
|
4
14
|
export declare function syncCommand(options: SyncOptions): Promise<void>;
|
|
5
15
|
export {};
|
|
6
16
|
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAyBA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwCrE"}
|
package/dist/commands/sync.js
CHANGED
|
@@ -41,12 +41,33 @@ const fs = __importStar(require("fs"));
|
|
|
41
41
|
const path = __importStar(require("path"));
|
|
42
42
|
const chalk_1 = __importDefault(require("chalk"));
|
|
43
43
|
const ora_1 = __importDefault(require("ora"));
|
|
44
|
+
const autoScope_1 = require("../scope/autoScope");
|
|
44
45
|
const config_1 = require("../scope/config");
|
|
46
|
+
const fileContent_1 = require("../scanner/fileContent");
|
|
47
|
+
const gitContext_1 = require("../scanner/gitContext");
|
|
48
|
+
const detector_1 = require("../gaps/detector");
|
|
49
|
+
const dependencies_1 = require("../scanner/dependencies");
|
|
50
|
+
const semanticLabels_1 = require("../scanner/semanticLabels");
|
|
51
|
+
const memoryBuilder_1 = require("../sdk/memoryBuilder");
|
|
52
|
+
const provider_1 = require("../providers/cognee/provider");
|
|
53
|
+
const manifest_1 = require("../sdk/manifest");
|
|
54
|
+
const backend_1 = require("../api/backend");
|
|
45
55
|
const init_1 = require("./init");
|
|
56
|
+
const provider = new provider_1.CogneeProvider();
|
|
57
|
+
/**
|
|
58
|
+
* cliper sync — incremental memory synchronization.
|
|
59
|
+
*
|
|
60
|
+
* Rebuilds the repository's memories, diffs them against the manifest
|
|
61
|
+
* written by the last init/sync, and uploads ONLY what changed:
|
|
62
|
+
* added → new memories (new files, new commits, new PRs...)
|
|
63
|
+
* changed → memories whose content hash moved
|
|
64
|
+
* removed → memories that no longer exist (reported; pruned on full rebuild)
|
|
65
|
+
* If nothing changed, no upload and no cognify run at all.
|
|
66
|
+
*/
|
|
46
67
|
async function syncCommand(options) {
|
|
47
68
|
const projectRoot = process.cwd();
|
|
48
|
-
const
|
|
49
|
-
if (!fs.existsSync(
|
|
69
|
+
const cliperDir = (0, config_1.getCliperDir)(projectRoot);
|
|
70
|
+
if (!fs.existsSync(path.join(cliperDir, "context.md"))) {
|
|
50
71
|
console.log(chalk_1.default.yellow("\n No context doc found. Run cliper init first.\n"));
|
|
51
72
|
process.exit(1);
|
|
52
73
|
}
|
|
@@ -61,23 +82,112 @@ async function syncCommand(options) {
|
|
|
61
82
|
const currentHash = log.latest?.hash ?? "";
|
|
62
83
|
if (currentHash && currentHash !== lastHash) {
|
|
63
84
|
if (lastHash !== "") {
|
|
64
|
-
console.log(chalk_1.default.yellow(`\n New commit detected: ${currentHash.slice(0, 7)} —
|
|
65
|
-
await (
|
|
85
|
+
console.log(chalk_1.default.yellow(`\n New commit detected: ${currentHash.slice(0, 7)} — syncing...\n`));
|
|
86
|
+
await runIncrementalSync(projectRoot);
|
|
66
87
|
}
|
|
67
88
|
lastHash = currentHash;
|
|
68
89
|
}
|
|
69
90
|
}
|
|
70
91
|
catch {
|
|
71
|
-
// silently skip
|
|
92
|
+
// silently skip a failed poll
|
|
72
93
|
}
|
|
73
94
|
};
|
|
74
95
|
await check();
|
|
75
|
-
setInterval(check, 10000);
|
|
96
|
+
setInterval(check, 10000);
|
|
97
|
+
return;
|
|
76
98
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
99
|
+
await runIncrementalSync(projectRoot);
|
|
100
|
+
}
|
|
101
|
+
async function runIncrementalSync(projectRoot) {
|
|
102
|
+
const projectName = path.basename(projectRoot);
|
|
103
|
+
const dataset = `cliper-${projectName}`;
|
|
104
|
+
console.log(chalk_1.default.bold.cyan("\n cliper sync\n"));
|
|
105
|
+
const previous = (0, manifest_1.loadManifest)(projectRoot);
|
|
106
|
+
if (!previous) {
|
|
107
|
+
console.log(chalk_1.default.yellow(" No sync manifest found — running a full init to create the baseline.\n"));
|
|
80
108
|
await (0, init_1.initCommand)({ path: projectRoot });
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (!provider.isConfigured()) {
|
|
112
|
+
console.log(chalk_1.default.yellow(" Cognee is not configured. Run cliper auth cognee first.\n"));
|
|
113
|
+
process.exit(1);
|
|
114
|
+
}
|
|
115
|
+
// ---- Rebuild memories with the same pipeline init uses ----
|
|
116
|
+
const spinner = (0, ora_1.default)("Scanning repository...").start();
|
|
117
|
+
const scopeConfig = (0, config_1.loadScopeConfig)(projectRoot);
|
|
118
|
+
const autoScope = await (0, autoScope_1.autoDetectScope)(projectRoot);
|
|
119
|
+
const manualAdditions = scopeConfig.active.filter((p) => !autoScope.includes(p));
|
|
120
|
+
scopeConfig.active = [...new Set([...autoScope, ...manualAdditions])];
|
|
121
|
+
(0, config_1.saveScopeConfig)(projectRoot, scopeConfig);
|
|
122
|
+
const files = await (0, fileContent_1.extractFileContents)(projectRoot, scopeConfig.active, scopeConfig.watched, 50);
|
|
123
|
+
const semanticLabels = (0, semanticLabels_1.buildSemanticLabels)(files);
|
|
124
|
+
const gitContext = await (0, gitContext_1.getGitContext)(projectRoot);
|
|
125
|
+
const gaps = (0, detector_1.detectGaps)(files, projectRoot);
|
|
126
|
+
const dependencyMap = (0, dependencies_1.buildDependencyMap)(files);
|
|
127
|
+
spinner.text = "Building memories...";
|
|
128
|
+
const builder = new memoryBuilder_1.MemoryBuilder();
|
|
129
|
+
const memories = await builder.build({
|
|
130
|
+
projectRoot,
|
|
131
|
+
projectName,
|
|
132
|
+
files,
|
|
133
|
+
gaps,
|
|
134
|
+
dependencyMap,
|
|
135
|
+
gitContext,
|
|
136
|
+
semanticLabels,
|
|
137
|
+
});
|
|
138
|
+
// ---- Diff against the manifest ----
|
|
139
|
+
const chunkByLabel = new Map();
|
|
140
|
+
const currentHashes = {};
|
|
141
|
+
for (const memory of memories) {
|
|
142
|
+
const chunk = provider.chunk(memory);
|
|
143
|
+
chunkByLabel.set(chunk.label, chunk);
|
|
144
|
+
currentHashes[chunk.label] = (0, manifest_1.hashChunkContent)(chunk.content);
|
|
145
|
+
}
|
|
146
|
+
const diff = (0, manifest_1.diffManifest)(previous, currentHashes);
|
|
147
|
+
spinner.succeed(chalk_1.default.green(`Scanned ${memories.length} memories — ` +
|
|
148
|
+
`${diff.added.length} new, ${diff.changed.length} changed, ` +
|
|
149
|
+
`${diff.removed.length} removed, ${diff.unchanged} unchanged`));
|
|
150
|
+
const toUpload = [...diff.added, ...diff.changed]
|
|
151
|
+
.map((label) => chunkByLabel.get(label))
|
|
152
|
+
.filter((c) => Boolean(c));
|
|
153
|
+
if (toUpload.length === 0 && diff.removed.length === 0) {
|
|
154
|
+
console.log(chalk_1.default.green("\n ✓ Memory already up to date — nothing to sync.\n"));
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
// ---- Upload only the delta ----
|
|
158
|
+
if (toUpload.length > 0) {
|
|
159
|
+
const upSpinner = (0, ora_1.default)(`Syncing ${toUpload.length} memories to Cognee...`).start();
|
|
160
|
+
try {
|
|
161
|
+
await provider.uploadChunks(projectName, toUpload, (done, total, label) => {
|
|
162
|
+
upSpinner.text = `Syncing ${toUpload.length} memories... (${done + 1}/${total}: ${label})`;
|
|
163
|
+
});
|
|
164
|
+
upSpinner.succeed(chalk_1.default.green(`Cognee memory updated (${toUpload.length} memories)`));
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
upSpinner.fail(chalk_1.default.red(`Sync failed: ${err.message}`));
|
|
168
|
+
console.log(chalk_1.default.gray(" Manifest not updated — the next sync will retry these memories.\n"));
|
|
169
|
+
process.exit(1);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (diff.removed.length > 0) {
|
|
173
|
+
console.log(chalk_1.default.gray(` ${diff.removed.length} stale memor${diff.removed.length === 1 ? "y" : "ies"} no longer exist locally ` +
|
|
174
|
+
`(pruned from the graph on the next full cliper init).`));
|
|
175
|
+
}
|
|
176
|
+
// ---- Persist the new baseline (removed labels drop out naturally) ----
|
|
177
|
+
(0, manifest_1.saveManifest)(projectRoot, dataset, currentHashes);
|
|
178
|
+
// ---- Bump the backend record so the app shows "Updated just now" ----
|
|
179
|
+
try {
|
|
180
|
+
await (0, backend_1.registerRepository)({
|
|
181
|
+
name: projectName,
|
|
182
|
+
githubOwner: gitContext.githubOwner,
|
|
183
|
+
githubRepo: gitContext.githubRepo,
|
|
184
|
+
branch: gitContext.branch,
|
|
185
|
+
dataset,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
// non-blocking — memory sync already succeeded
|
|
81
190
|
}
|
|
191
|
+
console.log(chalk_1.default.green("\n ✓ Sync complete.\n"));
|
|
82
192
|
}
|
|
83
193
|
//# sourceMappingURL=sync.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -45,11 +45,6 @@ const export_1 = require("./commands/export");
|
|
|
45
45
|
const analyze_1 = require("./commands/analyze");
|
|
46
46
|
const auth_1 = require("./commands/auth");
|
|
47
47
|
const agent_1 = require("./commands/agent");
|
|
48
|
-
commander_1.program
|
|
49
|
-
.command("agent")
|
|
50
|
-
.description("Connect local AI coding agents to Cliper cloud")
|
|
51
|
-
.argument("<action>", "connect")
|
|
52
|
-
.action(agent_1.agentCommand);
|
|
53
48
|
const { version } = require("../package.json");
|
|
54
49
|
const sdk = new cliper_1.Cliper();
|
|
55
50
|
commander_1.program
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,+CAAiC;AACjC,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,yCAAoC;AACpC,yCAAsC;AACtC,0CAA8C;AAC9C,4CAAgD;AAChD,8CAAkD;AAClD,8CAAkD;AAClD,gDAAoD;AACpD,0CAA8C;AAC9C,4CAAgD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,+CAAiC;AACjC,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,yCAAoC;AACpC,yCAAsC;AACtC,0CAA8C;AAC9C,4CAAgD;AAChD,8CAAkD;AAClD,8CAAkD;AAClD,gDAAoD;AACpD,0CAA8C;AAC9C,4CAAgD;AAGhD,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,IAAI,eAAM,EAAE,CAAC;AAEzB,mBAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,yCAAyC,CAAC;KACtD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,mBAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KAC/D,MAAM,CAAC,sBAAsB,EAAE,gCAAgC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;KACxF,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAE1C,mBAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,SAAS,EAAE,4BAA4B,CAAC;KAC/C,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,mBAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,qBAAqB,CAAC;KAClC,QAAQ,CAAC,UAAU,EAAE,6BAA6B,CAAC;KACnD,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC;KAC5C,MAAM,CAAC,oBAAY,CAAC,CAAC;AAExB,mBAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,sBAAa,CAAC,CAAC;AAEzB,mBAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,EAAE,IAAI,CAAC;KAC7D,MAAM,CAAC,sBAAa,CAAC,CAAC;AAEzB,mBAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,sDAAsD,CAAC;KACnE,cAAc,CAAC,iBAAiB,EAAE,iCAAiC,CAAC;KACpE,MAAM,CAAC,wBAAc,CAAC,CAAC;AAE1B,mBAAO;KACJ,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,gDAAgD,CAAC;KAC7D,MAAM,CAAC,KAAK,EAAE,QAAiB,EAAE,EAAE;IAClC,MAAM,IAAA,kBAAW,EAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEL,UAAU;AACV,qBAAqB;AACrB,yDAAyD;AACzD,0BAA0B;AAE1B,UAAU;AACV,qBAAqB;AACrB,sDAAsD;AACtD,0BAA0B;AAE1B,mBAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;KAC/B,MAAM,CAAC,oBAAY,CAAC,CAAC;AAExB,mBAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -4,6 +4,21 @@ interface CogneeConfig {
|
|
|
4
4
|
apiKey: string;
|
|
5
5
|
}
|
|
6
6
|
export declare function isCogneeConfigured(): boolean;
|
|
7
|
+
export interface MemoryChunk {
|
|
8
|
+
label: string;
|
|
9
|
+
content: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The exact self-describing chunk format uploaded to Cognee.
|
|
13
|
+
* cliper sync hashes this same string — keep any format change in ONE place
|
|
14
|
+
* or every memory will look "changed" on the next sync.
|
|
15
|
+
*/
|
|
16
|
+
export declare function buildMemoryChunk(memory: MemoryObject): MemoryChunk;
|
|
17
|
+
/**
|
|
18
|
+
* Uploads a specific set of chunks (already diffed by the caller) and
|
|
19
|
+
* triggers cognify once. Used by cliper sync for incremental updates.
|
|
20
|
+
*/
|
|
21
|
+
export declare function rememberChunks(datasetName: string, chunks: MemoryChunk[], onProgress?: (done: number, total: number, label: string) => void): Promise<void>;
|
|
7
22
|
/**
|
|
8
23
|
* Uploads structured project data into a Cognee dataset as self-describing,
|
|
9
24
|
* sentence-phrased chunks (see buildCogneeChunks), then triggers cognify
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/providers/cognee/client.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAQvD,UAAU,YAAY;IAElB,OAAO,EAAE,MAAM,CAAC;IAEhB,MAAM,EAAE,MAAM,CAAC;CAElB;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AA6CD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACjC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,YAAY,EAAE,EACxB,UAAU,CAAC,EAAE,CACT,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,KACZ,IAAI,EACT,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/providers/cognee/client.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAQvD,UAAU,YAAY;IAElB,OAAO,EAAE,MAAM,CAAC;IAEhB,MAAM,EAAE,MAAM,CAAC;CAElB;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AA6CD,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,WAAW,CAuBlE;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAChC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EAAE,EACrB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAClE,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACjC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,YAAY,EAAE,EACxB,UAAU,CAAC,EAAE,CACT,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,KACZ,IAAI,EACT,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CA8Ef;AAED,MAAM,WAAW,kBAAkB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAC/B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAyB/B;AAED,qBAAa,YAAY;IAGjB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAGzC,OAAO,CAAC,WAAW;CAEtB"}
|
|
@@ -35,6 +35,8 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.CogneeClient = void 0;
|
|
37
37
|
exports.isCogneeConfigured = isCogneeConfigured;
|
|
38
|
+
exports.buildMemoryChunk = buildMemoryChunk;
|
|
39
|
+
exports.rememberChunks = rememberChunks;
|
|
38
40
|
exports.rememberContext = rememberContext;
|
|
39
41
|
exports.recallContext = recallContext;
|
|
40
42
|
const fs = __importStar(require("fs"));
|
|
@@ -74,17 +76,12 @@ async function uploadChunk(datasetName, label, content) {
|
|
|
74
76
|
}
|
|
75
77
|
}
|
|
76
78
|
/**
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
* extraction step to fail with IncompleteOutputException (max_tokens) on a
|
|
81
|
-
* real repo — chunking keeps each /add small enough for that step to
|
|
82
|
-
* complete reliably.
|
|
79
|
+
* The exact self-describing chunk format uploaded to Cognee.
|
|
80
|
+
* cliper sync hashes this same string — keep any format change in ONE place
|
|
81
|
+
* or every memory will look "changed" on the next sync.
|
|
83
82
|
*/
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
const datasetName = `cliper-${projectName}`;
|
|
87
|
-
const chunks = memories.map(memory => ({
|
|
83
|
+
function buildMemoryChunk(memory) {
|
|
84
|
+
return {
|
|
88
85
|
label: `${memory.type}:${memory.id}`,
|
|
89
86
|
content: `
|
|
90
87
|
Memory Type:
|
|
@@ -104,8 +101,50 @@ ${memory.relationships?.join(", ") ?? "None"}
|
|
|
104
101
|
|
|
105
102
|
Tags:
|
|
106
103
|
${memory.tags?.join(", ") ?? "None"}
|
|
107
|
-
`.trim()
|
|
108
|
-
}
|
|
104
|
+
`.trim(),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Uploads a specific set of chunks (already diffed by the caller) and
|
|
109
|
+
* triggers cognify once. Used by cliper sync for incremental updates.
|
|
110
|
+
*/
|
|
111
|
+
async function rememberChunks(datasetName, chunks, onProgress) {
|
|
112
|
+
assertConfigured();
|
|
113
|
+
if (chunks.length === 0)
|
|
114
|
+
return;
|
|
115
|
+
const BATCH_SIZE = 5;
|
|
116
|
+
for (let i = 0; i < chunks.length; i += BATCH_SIZE) {
|
|
117
|
+
const batch = chunks.slice(i, i + BATCH_SIZE);
|
|
118
|
+
await Promise.all(batch.map((chunk, index) => {
|
|
119
|
+
onProgress?.(i + index, chunks.length, chunk.label);
|
|
120
|
+
return uploadChunk(datasetName, chunk.label, chunk.content);
|
|
121
|
+
}));
|
|
122
|
+
}
|
|
123
|
+
const cognifyRes = await fetch(`${COGNEE_BASE_URL}/api/v1/cognify`, {
|
|
124
|
+
method: "POST",
|
|
125
|
+
headers: {
|
|
126
|
+
"X-Api-Key": COGNEE_API_KEY,
|
|
127
|
+
"Content-Type": "application/json",
|
|
128
|
+
},
|
|
129
|
+
body: JSON.stringify({ datasets: [datasetName] }),
|
|
130
|
+
});
|
|
131
|
+
if (!cognifyRes.ok) {
|
|
132
|
+
const body = await cognifyRes.text();
|
|
133
|
+
throw new Error(`Cognee /cognify failed: ${cognifyRes.status} ${body}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Uploads structured project data into a Cognee dataset as self-describing,
|
|
138
|
+
* sentence-phrased chunks (see buildCogneeChunks), then triggers cognify
|
|
139
|
+
* once on the whole dataset. Sending one large document caused Cognee's own
|
|
140
|
+
* extraction step to fail with IncompleteOutputException (max_tokens) on a
|
|
141
|
+
* real repo — chunking keeps each /add small enough for that step to
|
|
142
|
+
* complete reliably.
|
|
143
|
+
*/
|
|
144
|
+
async function rememberContext(projectName, memories, onProgress, debugDir) {
|
|
145
|
+
assertConfigured();
|
|
146
|
+
const datasetName = `cliper-${projectName}`;
|
|
147
|
+
const chunks = memories.map(buildMemoryChunk);
|
|
109
148
|
if (process.env.COGNEE_DEBUG) {
|
|
110
149
|
console.log("\nCognee Chunks:");
|
|
111
150
|
chunks.forEach((c) => {
|
|
@@ -130,7 +169,6 @@ ${memory.tags?.join(", ") ?? "None"}
|
|
|
130
169
|
// onProgress?.(i, chunks.length, chunks[i].label);
|
|
131
170
|
// await uploadChunk(datasetName, chunks[i].label, chunks[i].content);
|
|
132
171
|
// }
|
|
133
|
-
console.log("Dataset being used:", datasetName);
|
|
134
172
|
const BATCH_SIZE = 5;
|
|
135
173
|
for (let i = 0; i < chunks.length; i += BATCH_SIZE) {
|
|
136
174
|
const batch = chunks.slice(i, i + BATCH_SIZE);
|
|
@@ -148,8 +186,11 @@ ${memory.tags?.join(", ") ?? "None"}
|
|
|
148
186
|
body: JSON.stringify({ datasets: [datasetName] }),
|
|
149
187
|
});
|
|
150
188
|
const cognifyBody = await cognifyRes.text();
|
|
151
|
-
|
|
152
|
-
|
|
189
|
+
if (process.env.COGNEE_DEBUG) {
|
|
190
|
+
console.log("Dataset:", datasetName);
|
|
191
|
+
console.log("Cognify status:", cognifyRes.status);
|
|
192
|
+
console.log(cognifyBody);
|
|
193
|
+
}
|
|
153
194
|
if (!cognifyRes.ok) {
|
|
154
195
|
throw new Error(`Cognee /cognify failed: ${cognifyRes.status} ${cognifyBody}`);
|
|
155
196
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/providers/cognee/client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,gDAEC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/providers/cognee/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import { MemoryChunk } from "./client";
|
|
1
2
|
import { MemoryObject } from "../../sdk/memory/memory";
|
|
2
3
|
export declare class CogneeProvider {
|
|
3
4
|
isConfigured(): boolean;
|
|
4
5
|
upload(projectName: string, memories: MemoryObject[], onProgress?: (done: number, total: number, label: string) => void, debugDir?: string): Promise<void>;
|
|
6
|
+
chunk(memory: MemoryObject): MemoryChunk;
|
|
7
|
+
uploadChunks(projectName: string, chunks: MemoryChunk[], onProgress?: (done: number, total: number, label: string) => void): Promise<void>;
|
|
5
8
|
search(projectName: string, query: string): Promise<import("./client").CogneeSearchResult[]>;
|
|
6
9
|
}
|
|
7
10
|
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/providers/cognee/provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/providers/cognee/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAMH,WAAW,EACd,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,qBAAa,cAAc;IAEvB,YAAY,IAAI,OAAO;IAIjB,MAAM,CACR,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,YAAY,EAAE,EACxB,UAAU,CAAC,EAAE,CACT,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,KACZ,IAAI,EACT,QAAQ,CAAC,EAAE,MAAM;IAUrB,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,WAAW;IAIlC,YAAY,CACd,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EAAE,EACrB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI;IAK/D,MAAM,CACR,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM;CAOpB"}
|
|
@@ -9,6 +9,12 @@ class CogneeProvider {
|
|
|
9
9
|
async upload(projectName, memories, onProgress, debugDir) {
|
|
10
10
|
return (0, client_1.rememberContext)(projectName, memories, onProgress, debugDir);
|
|
11
11
|
}
|
|
12
|
+
chunk(memory) {
|
|
13
|
+
return (0, client_1.buildMemoryChunk)(memory);
|
|
14
|
+
}
|
|
15
|
+
async uploadChunks(projectName, chunks, onProgress) {
|
|
16
|
+
return (0, client_1.rememberChunks)(`cliper-${projectName}`, chunks, onProgress);
|
|
17
|
+
}
|
|
12
18
|
async search(projectName, query) {
|
|
13
19
|
return (0, client_1.recallContext)(projectName, query);
|
|
14
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/providers/cognee/provider.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/providers/cognee/provider.ts"],"names":[],"mappings":";;;AAAA,qCAOkB;AAIlB,MAAa,cAAc;IAEvB,YAAY;QACR,OAAO,IAAA,2BAAkB,GAAE,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,MAAM,CACR,WAAmB,EACnB,QAAwB,EACxB,UAIS,EACT,QAAiB;QAEjB,OAAO,IAAA,wBAAe,EAClB,WAAW,EACX,QAAQ,EACR,UAAU,EACV,QAAQ,CACX,CAAC;IACN,CAAC;IAED,KAAK,CAAC,MAAoB;QACtB,OAAO,IAAA,yBAAgB,EAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,YAAY,CACd,WAAmB,EACnB,MAAqB,EACrB,UAAiE;QAEjE,OAAO,IAAA,uBAAc,EAAC,UAAU,WAAW,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,MAAM,CACR,WAAmB,EACnB,KAAa;QAEb,OAAO,IAAA,sBAAa,EAChB,WAAW,EACX,KAAK,CACR,CAAC;IACN,CAAC;CACJ;AA7CD,wCA6CC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sync manifest — the memory of what has already been uploaded.
|
|
3
|
+
*
|
|
4
|
+
* Maps every memory chunk label (`type:id`) to a sha256 of the exact
|
|
5
|
+
* content that was sent to Cognee. `cliper sync` diffs a fresh build
|
|
6
|
+
* against this to upload only what actually changed.
|
|
7
|
+
*/
|
|
8
|
+
export interface SyncManifest {
|
|
9
|
+
version: 1;
|
|
10
|
+
dataset: string;
|
|
11
|
+
syncedAt: string;
|
|
12
|
+
memories: Record<string, string>;
|
|
13
|
+
}
|
|
14
|
+
export interface ManifestDiff {
|
|
15
|
+
added: string[];
|
|
16
|
+
changed: string[];
|
|
17
|
+
removed: string[];
|
|
18
|
+
unchanged: number;
|
|
19
|
+
}
|
|
20
|
+
export declare function hashChunkContent(content: string): string;
|
|
21
|
+
export declare function manifestPath(projectRoot: string): string;
|
|
22
|
+
export declare function loadManifest(projectRoot: string): SyncManifest | null;
|
|
23
|
+
export declare function saveManifest(projectRoot: string, dataset: string, hashes: Record<string, string>): void;
|
|
24
|
+
export declare function diffManifest(previous: SyncManifest, current: Record<string, string>): ManifestDiff;
|
|
25
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/sdk/manifest.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AAID,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAUrE;AAED,wBAAgB,YAAY,CACxB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,IAAI,CAWN;AAED,wBAAgB,YAAY,CACxB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,YAAY,CAiBd"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.hashChunkContent = hashChunkContent;
|
|
37
|
+
exports.manifestPath = manifestPath;
|
|
38
|
+
exports.loadManifest = loadManifest;
|
|
39
|
+
exports.saveManifest = saveManifest;
|
|
40
|
+
exports.diffManifest = diffManifest;
|
|
41
|
+
const crypto = __importStar(require("crypto"));
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const config_1 = require("../scope/config");
|
|
45
|
+
const MANIFEST_FILE = "manifest.json";
|
|
46
|
+
function hashChunkContent(content) {
|
|
47
|
+
return crypto.createHash("sha256").update(content, "utf-8").digest("hex");
|
|
48
|
+
}
|
|
49
|
+
function manifestPath(projectRoot) {
|
|
50
|
+
return path.join((0, config_1.getCliperDir)(projectRoot), MANIFEST_FILE);
|
|
51
|
+
}
|
|
52
|
+
function loadManifest(projectRoot) {
|
|
53
|
+
const p = manifestPath(projectRoot);
|
|
54
|
+
if (!fs.existsSync(p))
|
|
55
|
+
return null;
|
|
56
|
+
try {
|
|
57
|
+
const parsed = JSON.parse(fs.readFileSync(p, "utf-8"));
|
|
58
|
+
if (parsed?.version !== 1 || typeof parsed.memories !== "object")
|
|
59
|
+
return null;
|
|
60
|
+
return parsed;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return null; // corrupt manifest -> treat as absent (full sync)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function saveManifest(projectRoot, dataset, hashes) {
|
|
67
|
+
const dir = (0, config_1.getCliperDir)(projectRoot);
|
|
68
|
+
if (!fs.existsSync(dir))
|
|
69
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
70
|
+
const manifest = {
|
|
71
|
+
version: 1,
|
|
72
|
+
dataset,
|
|
73
|
+
syncedAt: new Date().toISOString(),
|
|
74
|
+
memories: hashes,
|
|
75
|
+
};
|
|
76
|
+
fs.writeFileSync(manifestPath(projectRoot), JSON.stringify(manifest, null, 2), "utf-8");
|
|
77
|
+
}
|
|
78
|
+
function diffManifest(previous, current) {
|
|
79
|
+
const added = [];
|
|
80
|
+
const changed = [];
|
|
81
|
+
let unchanged = 0;
|
|
82
|
+
for (const [label, hash] of Object.entries(current)) {
|
|
83
|
+
const prev = previous.memories[label];
|
|
84
|
+
if (prev === undefined)
|
|
85
|
+
added.push(label);
|
|
86
|
+
else if (prev !== hash)
|
|
87
|
+
changed.push(label);
|
|
88
|
+
else
|
|
89
|
+
unchanged++;
|
|
90
|
+
}
|
|
91
|
+
const removed = Object.keys(previous.memories).filter((label) => !(label in current));
|
|
92
|
+
return { added, changed, removed, unchanged };
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/sdk/manifest.ts"],"names":[],"mappings":"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"}
|