context-mem 0.1.0
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/.context-mem.json.example +22 -0
- package/LICENSE +21 -0
- package/README.md +213 -0
- package/dist/cli/commands/dashboard.d.ts +2 -0
- package/dist/cli/commands/dashboard.d.ts.map +1 -0
- package/dist/cli/commands/dashboard.js +55 -0
- package/dist/cli/commands/dashboard.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +2 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +49 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +43 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +2 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +47 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/status.d.ts +2 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +29 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +39 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/budget.d.ts +11 -0
- package/dist/core/budget.d.ts.map +1 -0
- package/dist/core/budget.js +60 -0
- package/dist/core/budget.js.map +1 -0
- package/dist/core/config.d.ts +4 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +41 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/events.d.ts +19 -0
- package/dist/core/events.d.ts.map +1 -0
- package/dist/core/events.js +101 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/kernel.d.ts +46 -0
- package/dist/core/kernel.d.ts.map +1 -0
- package/dist/core/kernel.js +228 -0
- package/dist/core/kernel.js.map +1 -0
- package/dist/core/lifecycle.d.ts +19 -0
- package/dist/core/lifecycle.d.ts.map +1 -0
- package/dist/core/lifecycle.js +35 -0
- package/dist/core/lifecycle.js.map +1 -0
- package/dist/core/observe-queue.d.ts +18 -0
- package/dist/core/observe-queue.d.ts.map +1 -0
- package/dist/core/observe-queue.js +56 -0
- package/dist/core/observe-queue.js.map +1 -0
- package/dist/core/pipeline.d.ts +15 -0
- package/dist/core/pipeline.d.ts.map +1 -0
- package/dist/core/pipeline.js +114 -0
- package/dist/core/pipeline.js.map +1 -0
- package/dist/core/plugin-registry.d.ts +13 -0
- package/dist/core/plugin-registry.d.ts.map +1 -0
- package/dist/core/plugin-registry.js +67 -0
- package/dist/core/plugin-registry.js.map +1 -0
- package/dist/core/session.d.ts +14 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +95 -0
- package/dist/core/session.js.map +1 -0
- package/dist/core/truncation.d.ts +11 -0
- package/dist/core/truncation.d.ts.map +1 -0
- package/dist/core/truncation.js +143 -0
- package/dist/core/truncation.js.map +1 -0
- package/dist/core/types.d.ts +230 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +50 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/utils.d.ts +4 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/core/utils.js +57 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/server.d.ts +5 -0
- package/dist/mcp-server/server.d.ts.map +1 -0
- package/dist/mcp-server/server.js +101 -0
- package/dist/mcp-server/server.js.map +1 -0
- package/dist/mcp-server/tools.d.ts +201 -0
- package/dist/mcp-server/tools.d.ts.map +1 -0
- package/dist/mcp-server/tools.js +618 -0
- package/dist/mcp-server/tools.js.map +1 -0
- package/dist/plugins/knowledge/knowledge-base.d.ts +23 -0
- package/dist/plugins/knowledge/knowledge-base.d.ts.map +1 -0
- package/dist/plugins/knowledge/knowledge-base.js +165 -0
- package/dist/plugins/knowledge/knowledge-base.js.map +1 -0
- package/dist/plugins/platforms/claude-code.d.ts +14 -0
- package/dist/plugins/platforms/claude-code.d.ts.map +1 -0
- package/dist/plugins/platforms/claude-code.js +52 -0
- package/dist/plugins/platforms/claude-code.js.map +1 -0
- package/dist/plugins/privacy/privacy-engine.d.ts +18 -0
- package/dist/plugins/privacy/privacy-engine.d.ts.map +1 -0
- package/dist/plugins/privacy/privacy-engine.js +72 -0
- package/dist/plugins/privacy/privacy-engine.js.map +1 -0
- package/dist/plugins/runtimes/javascript.d.ts +13 -0
- package/dist/plugins/runtimes/javascript.d.ts.map +1 -0
- package/dist/plugins/runtimes/javascript.js +102 -0
- package/dist/plugins/runtimes/javascript.js.map +1 -0
- package/dist/plugins/runtimes/python.d.ts +14 -0
- package/dist/plugins/runtimes/python.d.ts.map +1 -0
- package/dist/plugins/runtimes/python.js +127 -0
- package/dist/plugins/runtimes/python.js.map +1 -0
- package/dist/plugins/runtimes/shell.d.ts +13 -0
- package/dist/plugins/runtimes/shell.d.ts.map +1 -0
- package/dist/plugins/runtimes/shell.js +55 -0
- package/dist/plugins/runtimes/shell.js.map +1 -0
- package/dist/plugins/search/bm25.d.ts +16 -0
- package/dist/plugins/search/bm25.d.ts.map +1 -0
- package/dist/plugins/search/bm25.js +61 -0
- package/dist/plugins/search/bm25.js.map +1 -0
- package/dist/plugins/search/fts5-utils.d.ts +2 -0
- package/dist/plugins/search/fts5-utils.d.ts.map +1 -0
- package/dist/plugins/search/fts5-utils.js +12 -0
- package/dist/plugins/search/fts5-utils.js.map +1 -0
- package/dist/plugins/search/fusion.d.ts +9 -0
- package/dist/plugins/search/fusion.d.ts.map +1 -0
- package/dist/plugins/search/fusion.js +45 -0
- package/dist/plugins/search/fusion.js.map +1 -0
- package/dist/plugins/search/intent.d.ts +5 -0
- package/dist/plugins/search/intent.d.ts.map +1 -0
- package/dist/plugins/search/intent.js +49 -0
- package/dist/plugins/search/intent.js.map +1 -0
- package/dist/plugins/search/levenshtein.d.ts +17 -0
- package/dist/plugins/search/levenshtein.d.ts.map +1 -0
- package/dist/plugins/search/levenshtein.js +99 -0
- package/dist/plugins/search/levenshtein.js.map +1 -0
- package/dist/plugins/search/trigram.d.ts +16 -0
- package/dist/plugins/search/trigram.d.ts.map +1 -0
- package/dist/plugins/search/trigram.js +63 -0
- package/dist/plugins/search/trigram.js.map +1 -0
- package/dist/plugins/storage/better-sqlite3.d.ts +19 -0
- package/dist/plugins/storage/better-sqlite3.d.ts.map +1 -0
- package/dist/plugins/storage/better-sqlite3.js +82 -0
- package/dist/plugins/storage/better-sqlite3.js.map +1 -0
- package/dist/plugins/storage/content-store.d.ts +20 -0
- package/dist/plugins/storage/content-store.d.ts.map +1 -0
- package/dist/plugins/storage/content-store.js +187 -0
- package/dist/plugins/storage/content-store.js.map +1 -0
- package/dist/plugins/storage/migrations.d.ts +8 -0
- package/dist/plugins/storage/migrations.d.ts.map +1 -0
- package/dist/plugins/storage/migrations.js +252 -0
- package/dist/plugins/storage/migrations.js.map +1 -0
- package/dist/plugins/summarizers/binary-summarizer.d.ts +12 -0
- package/dist/plugins/summarizers/binary-summarizer.d.ts.map +1 -0
- package/dist/plugins/summarizers/binary-summarizer.js +43 -0
- package/dist/plugins/summarizers/binary-summarizer.js.map +1 -0
- package/dist/plugins/summarizers/build-output-summarizer.d.ts +12 -0
- package/dist/plugins/summarizers/build-output-summarizer.d.ts.map +1 -0
- package/dist/plugins/summarizers/build-output-summarizer.js +68 -0
- package/dist/plugins/summarizers/build-output-summarizer.js.map +1 -0
- package/dist/plugins/summarizers/code-summarizer.d.ts +12 -0
- package/dist/plugins/summarizers/code-summarizer.d.ts.map +1 -0
- package/dist/plugins/summarizers/code-summarizer.js +179 -0
- package/dist/plugins/summarizers/code-summarizer.js.map +1 -0
- package/dist/plugins/summarizers/csv-summarizer.d.ts +12 -0
- package/dist/plugins/summarizers/csv-summarizer.d.ts.map +1 -0
- package/dist/plugins/summarizers/csv-summarizer.js +60 -0
- package/dist/plugins/summarizers/csv-summarizer.js.map +1 -0
- package/dist/plugins/summarizers/error-summarizer.d.ts +15 -0
- package/dist/plugins/summarizers/error-summarizer.d.ts.map +1 -0
- package/dist/plugins/summarizers/error-summarizer.js +111 -0
- package/dist/plugins/summarizers/error-summarizer.js.map +1 -0
- package/dist/plugins/summarizers/git-log-summarizer.d.ts +12 -0
- package/dist/plugins/summarizers/git-log-summarizer.d.ts.map +1 -0
- package/dist/plugins/summarizers/git-log-summarizer.js +76 -0
- package/dist/plugins/summarizers/git-log-summarizer.js.map +1 -0
- package/dist/plugins/summarizers/html-summarizer.d.ts +12 -0
- package/dist/plugins/summarizers/html-summarizer.d.ts.map +1 -0
- package/dist/plugins/summarizers/html-summarizer.js +69 -0
- package/dist/plugins/summarizers/html-summarizer.js.map +1 -0
- package/dist/plugins/summarizers/json-summarizer.d.ts +12 -0
- package/dist/plugins/summarizers/json-summarizer.d.ts.map +1 -0
- package/dist/plugins/summarizers/json-summarizer.js +132 -0
- package/dist/plugins/summarizers/json-summarizer.js.map +1 -0
- package/dist/plugins/summarizers/log-summarizer.d.ts +12 -0
- package/dist/plugins/summarizers/log-summarizer.d.ts.map +1 -0
- package/dist/plugins/summarizers/log-summarizer.js +173 -0
- package/dist/plugins/summarizers/log-summarizer.js.map +1 -0
- package/dist/plugins/summarizers/markdown-summarizer.d.ts +12 -0
- package/dist/plugins/summarizers/markdown-summarizer.d.ts.map +1 -0
- package/dist/plugins/summarizers/markdown-summarizer.js +75 -0
- package/dist/plugins/summarizers/markdown-summarizer.js.map +1 -0
- package/dist/plugins/summarizers/network-summarizer.d.ts +12 -0
- package/dist/plugins/summarizers/network-summarizer.d.ts.map +1 -0
- package/dist/plugins/summarizers/network-summarizer.js +74 -0
- package/dist/plugins/summarizers/network-summarizer.js.map +1 -0
- package/dist/plugins/summarizers/shell-summarizer.d.ts +12 -0
- package/dist/plugins/summarizers/shell-summarizer.d.ts.map +1 -0
- package/dist/plugins/summarizers/shell-summarizer.js +50 -0
- package/dist/plugins/summarizers/shell-summarizer.js.map +1 -0
- package/dist/plugins/summarizers/test-output-summarizer.d.ts +12 -0
- package/dist/plugins/summarizers/test-output-summarizer.d.ts.map +1 -0
- package/dist/plugins/summarizers/test-output-summarizer.js +77 -0
- package/dist/plugins/summarizers/test-output-summarizer.js.map +1 -0
- package/dist/plugins/summarizers/typescript-error-summarizer.d.ts +12 -0
- package/dist/plugins/summarizers/typescript-error-summarizer.d.ts.map +1 -0
- package/dist/plugins/summarizers/typescript-error-summarizer.js +67 -0
- package/dist/plugins/summarizers/typescript-error-summarizer.js.map +1 -0
- package/hooks/context-mem-hook.js +77 -0
- package/hooks/dashboard-autostart.js +92 -0
- package/hooks/dashboard-stop.js +32 -0
- package/hooks/hooks.json +40 -0
- package/package.json +32 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ObserveQueue = void 0;
|
|
4
|
+
const utils_js_1 = require("./utils.js");
|
|
5
|
+
const MAX_QUEUE_SIZE = 500;
|
|
6
|
+
const BATCH_SIZE = 50;
|
|
7
|
+
const DEDUP_WINDOW_MS = 60_000;
|
|
8
|
+
class ObserveQueue {
|
|
9
|
+
queue = [];
|
|
10
|
+
dedupMap = new Map(); // hash → timestamp
|
|
11
|
+
onFlush;
|
|
12
|
+
flushing = false;
|
|
13
|
+
constructor(onFlush) {
|
|
14
|
+
this.onFlush = onFlush;
|
|
15
|
+
}
|
|
16
|
+
async enqueue(item) {
|
|
17
|
+
const hash = (0, utils_js_1.fnv1a64)(item.content);
|
|
18
|
+
const now = Date.now();
|
|
19
|
+
// Dedup check
|
|
20
|
+
const lastSeen = this.dedupMap.get(hash);
|
|
21
|
+
if (lastSeen !== undefined && (now - lastSeen) < DEDUP_WINDOW_MS) {
|
|
22
|
+
return false; // Duplicate
|
|
23
|
+
}
|
|
24
|
+
// Clean old dedup entries
|
|
25
|
+
for (const [key, ts] of this.dedupMap) {
|
|
26
|
+
if (now - ts >= DEDUP_WINDOW_MS)
|
|
27
|
+
this.dedupMap.delete(key);
|
|
28
|
+
}
|
|
29
|
+
this.dedupMap.set(hash, now);
|
|
30
|
+
this.queue.push(item);
|
|
31
|
+
// Evict oldest if over capacity
|
|
32
|
+
if (this.queue.length > MAX_QUEUE_SIZE) {
|
|
33
|
+
this.queue.shift();
|
|
34
|
+
}
|
|
35
|
+
// Auto-flush at batch size
|
|
36
|
+
if (this.queue.length >= BATCH_SIZE) {
|
|
37
|
+
await this.flush();
|
|
38
|
+
}
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
async flush() {
|
|
42
|
+
if (this.flushing || this.queue.length === 0)
|
|
43
|
+
return;
|
|
44
|
+
this.flushing = true;
|
|
45
|
+
try {
|
|
46
|
+
const items = this.queue.splice(0);
|
|
47
|
+
await this.onFlush(items);
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
this.flushing = false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
get size() { return this.queue.length; }
|
|
54
|
+
}
|
|
55
|
+
exports.ObserveQueue = ObserveQueue;
|
|
56
|
+
//# sourceMappingURL=observe-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observe-queue.js","sourceRoot":"","sources":["../../src/core/observe-queue.ts"],"names":[],"mappings":";;;AAAA,yCAAqC;AAUrC,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,eAAe,GAAG,MAAM,CAAC;AAE/B,MAAa,YAAY;IACf,KAAK,GAAgB,EAAE,CAAC;IACxB,QAAQ,GAAwB,IAAI,GAAG,EAAE,CAAC,CAAC,mBAAmB;IAC9D,OAAO,CAAwC;IAC/C,QAAQ,GAAG,KAAK,CAAC;IAEzB,YAAY,OAA8C;QACxD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAe;QAC3B,MAAM,IAAI,GAAG,IAAA,kBAAO,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,cAAc;QACd,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,eAAe,EAAE,CAAC;YACjE,OAAO,KAAK,CAAC,CAAC,YAAY;QAC5B,CAAC;QAED,0BAA0B;QAC1B,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,GAAG,GAAG,EAAE,IAAI,eAAe;gBAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEtB,gCAAgC;QAChC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QAED,2BAA2B;QAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;YACpC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACrD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IAED,IAAI,IAAI,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;CACjD;AArDD,oCAqDC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Observation, StoragePlugin, ObservationType } from './types.js';
|
|
2
|
+
import { PluginRegistry } from './plugin-registry.js';
|
|
3
|
+
import { PrivacyEngine } from '../plugins/privacy/privacy-engine.js';
|
|
4
|
+
import type { BudgetManager } from './budget.js';
|
|
5
|
+
export declare class Pipeline {
|
|
6
|
+
private registry;
|
|
7
|
+
private storage;
|
|
8
|
+
private privacy;
|
|
9
|
+
private sessionId;
|
|
10
|
+
private budgetManager?;
|
|
11
|
+
constructor(registry: PluginRegistry, storage: StoragePlugin, privacy: PrivacyEngine, sessionId: string);
|
|
12
|
+
setBudgetManager(budget: BudgetManager): void;
|
|
13
|
+
observe(content: string, type: ObservationType, source: string, filePath?: string): Promise<Observation>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/core/pipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAoB,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAChG,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAGrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,qBAAa,QAAQ;IAIjB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,SAAS;IANnB,OAAO,CAAC,aAAa,CAAC,CAAgB;gBAG5B,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM;IAG3B,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAIvC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CA4G/G"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Pipeline = void 0;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
const truncation_js_1 = require("./truncation.js");
|
|
6
|
+
const utils_js_1 = require("./utils.js");
|
|
7
|
+
class Pipeline {
|
|
8
|
+
registry;
|
|
9
|
+
storage;
|
|
10
|
+
privacy;
|
|
11
|
+
sessionId;
|
|
12
|
+
budgetManager;
|
|
13
|
+
constructor(registry, storage, privacy, sessionId) {
|
|
14
|
+
this.registry = registry;
|
|
15
|
+
this.storage = storage;
|
|
16
|
+
this.privacy = privacy;
|
|
17
|
+
this.sessionId = sessionId;
|
|
18
|
+
}
|
|
19
|
+
setBudgetManager(budget) {
|
|
20
|
+
this.budgetManager = budget;
|
|
21
|
+
}
|
|
22
|
+
async observe(content, type, source, filePath) {
|
|
23
|
+
if (!content || !content.trim()) {
|
|
24
|
+
throw new Error('Cannot observe empty content');
|
|
25
|
+
}
|
|
26
|
+
// 0. Budget check
|
|
27
|
+
if (this.budgetManager) {
|
|
28
|
+
const status = this.budgetManager.getStatus(this.sessionId);
|
|
29
|
+
if (status.blocked) {
|
|
30
|
+
throw new Error('Budget limit reached — observation blocked');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// 1. Privacy (fail-closed)
|
|
34
|
+
const { cleaned, redactions, had_private_tags } = this.privacy.process(content);
|
|
35
|
+
const privacyLevel = had_private_tags ? 'private' : redactions > 0 ? 'redacted' : 'public';
|
|
36
|
+
// 2. SHA256 deduplication
|
|
37
|
+
const contentHash = (0, node_crypto_1.createHash)('sha256').update(cleaned).digest('hex');
|
|
38
|
+
const existing = this.storage.prepare('SELECT id, type, content, summary, metadata, indexed_at, content_hash FROM observations WHERE content_hash = ?').get(contentHash);
|
|
39
|
+
if (existing) {
|
|
40
|
+
let metadata;
|
|
41
|
+
try {
|
|
42
|
+
metadata = JSON.parse(existing.metadata);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
metadata = { source, tokens_original: 0, tokens_summarized: 0, privacy_level: privacyLevel };
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
id: existing.id,
|
|
49
|
+
type: existing.type,
|
|
50
|
+
content: existing.content,
|
|
51
|
+
summary: (existing.summary ?? undefined),
|
|
52
|
+
content_hash: existing.content_hash,
|
|
53
|
+
metadata,
|
|
54
|
+
indexed_at: existing.indexed_at,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
// 3. Find summarizer
|
|
58
|
+
const summarizers = this.registry.getAll('summarizer');
|
|
59
|
+
let summary;
|
|
60
|
+
let tokensOriginal = (0, utils_js_1.estimateTokens)(cleaned);
|
|
61
|
+
let tokensSummarized = tokensOriginal;
|
|
62
|
+
for (const s of summarizers) {
|
|
63
|
+
if (s.detect(cleaned)) {
|
|
64
|
+
try {
|
|
65
|
+
const result = await s.summarize(cleaned, {});
|
|
66
|
+
summary = result.summary;
|
|
67
|
+
tokensSummarized = result.tokens_summarized;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// Summarizer failed — store raw
|
|
71
|
+
}
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// 4. Truncation cascade — if no summarizer matched and content is large
|
|
76
|
+
if (!summary && cleaned.length > truncation_js_1.MAX_PASSTHROUGH) {
|
|
77
|
+
const aggressive = this.budgetManager ? this.budgetManager.getStatus(this.sessionId).throttled : false;
|
|
78
|
+
const result = (0, truncation_js_1.truncate)(cleaned, aggressive);
|
|
79
|
+
summary = result.content;
|
|
80
|
+
tokensSummarized = (0, utils_js_1.estimateTokens)(summary);
|
|
81
|
+
}
|
|
82
|
+
// 5. Build observation
|
|
83
|
+
const obs = {
|
|
84
|
+
id: (0, utils_js_1.ulid)(),
|
|
85
|
+
type,
|
|
86
|
+
content: cleaned,
|
|
87
|
+
summary,
|
|
88
|
+
content_hash: contentHash,
|
|
89
|
+
metadata: {
|
|
90
|
+
source,
|
|
91
|
+
file_path: filePath,
|
|
92
|
+
tokens_original: tokensOriginal,
|
|
93
|
+
tokens_summarized: tokensSummarized,
|
|
94
|
+
privacy_level: privacyLevel,
|
|
95
|
+
session_id: this.sessionId,
|
|
96
|
+
},
|
|
97
|
+
indexed_at: Date.now(),
|
|
98
|
+
};
|
|
99
|
+
// 6. Store
|
|
100
|
+
this.storage.exec(`INSERT INTO observations (id, type, content, summary, metadata, indexed_at, privacy_level, session_id, content_hash)
|
|
101
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, [obs.id, obs.type, obs.content, obs.summary || null, JSON.stringify(obs.metadata), obs.indexed_at, privacyLevel, this.sessionId, contentHash]);
|
|
102
|
+
// 7. Track token economics
|
|
103
|
+
const bytesUsed = Buffer.byteLength(obs.content, 'utf8');
|
|
104
|
+
this.storage.exec(`INSERT INTO token_stats (session_id, event_type, tokens_in, tokens_out, timestamp)
|
|
105
|
+
VALUES (?, 'store', ?, ?, ?)`, [this.sessionId, tokensOriginal, tokensSummarized, Date.now()]);
|
|
106
|
+
// 8. Record budget usage
|
|
107
|
+
if (this.budgetManager) {
|
|
108
|
+
this.budgetManager.record(this.sessionId, bytesUsed);
|
|
109
|
+
}
|
|
110
|
+
return obs;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
exports.Pipeline = Pipeline;
|
|
114
|
+
//# sourceMappingURL=pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/core/pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Plugin, PluginConfig, PluginType } from './types.js';
|
|
2
|
+
export declare class PluginRegistry {
|
|
3
|
+
private plugins;
|
|
4
|
+
private registrationOrder;
|
|
5
|
+
register(plugin: Plugin, config?: PluginConfig): Promise<void>;
|
|
6
|
+
get<T extends Plugin = Plugin>(type: PluginType | string, name?: string): T | undefined;
|
|
7
|
+
getAll(type: PluginType | string): Plugin[];
|
|
8
|
+
unregister(name: string): Promise<void>;
|
|
9
|
+
shutdown(): Promise<void>;
|
|
10
|
+
has(name: string): boolean;
|
|
11
|
+
get size(): number;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=plugin-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-registry.d.ts","sourceRoot":"","sources":["../../src/core/plugin-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEnE,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,iBAAiB,CAAgB;IAEnC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAcxE,GAAG,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAYvF,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,EAAE;IAIrC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAY/B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PluginRegistry = void 0;
|
|
4
|
+
class PluginRegistry {
|
|
5
|
+
plugins = new Map();
|
|
6
|
+
registrationOrder = [];
|
|
7
|
+
async register(plugin, config = {}) {
|
|
8
|
+
if (this.plugins.has(plugin.name)) {
|
|
9
|
+
throw new Error(`Plugin "${plugin.name}" is already registered`);
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
await plugin.init(config);
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
console.warn(`Plugin "${plugin.name}" init failed, skipping:`, err.message);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
this.plugins.set(plugin.name, plugin);
|
|
19
|
+
this.registrationOrder.push(plugin.name);
|
|
20
|
+
}
|
|
21
|
+
get(type, name) {
|
|
22
|
+
if (name) {
|
|
23
|
+
const plugin = this.plugins.get(name);
|
|
24
|
+
if (plugin && plugin.type === type)
|
|
25
|
+
return plugin;
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
for (const plugin of this.plugins.values()) {
|
|
29
|
+
if (plugin.type === type)
|
|
30
|
+
return plugin;
|
|
31
|
+
}
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
getAll(type) {
|
|
35
|
+
return Array.from(this.plugins.values()).filter(p => p.type === type);
|
|
36
|
+
}
|
|
37
|
+
async unregister(name) {
|
|
38
|
+
const plugin = this.plugins.get(name);
|
|
39
|
+
if (!plugin)
|
|
40
|
+
return;
|
|
41
|
+
await plugin.destroy();
|
|
42
|
+
this.plugins.delete(name);
|
|
43
|
+
this.registrationOrder = this.registrationOrder.filter(n => n !== name);
|
|
44
|
+
}
|
|
45
|
+
async shutdown() {
|
|
46
|
+
const reversed = [...this.registrationOrder].reverse();
|
|
47
|
+
for (const name of reversed) {
|
|
48
|
+
const plugin = this.plugins.get(name);
|
|
49
|
+
if (plugin) {
|
|
50
|
+
try {
|
|
51
|
+
await plugin.destroy();
|
|
52
|
+
}
|
|
53
|
+
catch { /* ignore destroy errors on shutdown */ }
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
this.plugins.clear();
|
|
57
|
+
this.registrationOrder = [];
|
|
58
|
+
}
|
|
59
|
+
has(name) {
|
|
60
|
+
return this.plugins.has(name);
|
|
61
|
+
}
|
|
62
|
+
get size() {
|
|
63
|
+
return this.plugins.size;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.PluginRegistry = PluginRegistry;
|
|
67
|
+
//# sourceMappingURL=plugin-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-registry.js","sourceRoot":"","sources":["../../src/core/plugin-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { StoragePlugin, TokenEconomics } from './types.js';
|
|
2
|
+
import type { EventTracker } from './events.js';
|
|
3
|
+
export declare class SessionManager {
|
|
4
|
+
private storage;
|
|
5
|
+
private events?;
|
|
6
|
+
constructor(storage: StoragePlugin, events?: EventTracker | undefined);
|
|
7
|
+
saveSnapshot(sessionId: string, stats: TokenEconomics): void;
|
|
8
|
+
restoreSnapshot(sessionId: string): {
|
|
9
|
+
snapshot: Record<string, unknown>;
|
|
10
|
+
condensed: boolean;
|
|
11
|
+
} | null;
|
|
12
|
+
private buildSnapshot;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAKhD,qBAAa,cAAc;IAEvB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM,CAAC;gBADP,OAAO,EAAE,aAAa,EACtB,MAAM,CAAC,EAAE,YAAY,YAAA;IAG/B,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI;IA4B5D,eAAe,CACb,SAAS,EAAE,MAAM,GAChB;QAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAiCnE,OAAO,CAAC,aAAa;CAwCtB"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SessionManager = void 0;
|
|
4
|
+
const MAX_SNAPSHOT_BYTES = 2048;
|
|
5
|
+
const STALE_THRESHOLD_MS = 24 * 60 * 60 * 1000; // 1 day
|
|
6
|
+
class SessionManager {
|
|
7
|
+
storage;
|
|
8
|
+
events;
|
|
9
|
+
constructor(storage, events) {
|
|
10
|
+
this.storage = storage;
|
|
11
|
+
this.events = events;
|
|
12
|
+
}
|
|
13
|
+
saveSnapshot(sessionId, stats) {
|
|
14
|
+
const snapshot = this.buildSnapshot(sessionId, stats);
|
|
15
|
+
let snapshotStr = JSON.stringify(snapshot);
|
|
16
|
+
// If over budget, progressively trim content until it fits as valid JSON
|
|
17
|
+
if (snapshotStr.length > MAX_SNAPSHOT_BYTES) {
|
|
18
|
+
// Remove events first (lowest value), then errors, then decisions
|
|
19
|
+
delete snapshot.events;
|
|
20
|
+
snapshotStr = JSON.stringify(snapshot);
|
|
21
|
+
}
|
|
22
|
+
if (snapshotStr.length > MAX_SNAPSHOT_BYTES) {
|
|
23
|
+
delete snapshot.errors;
|
|
24
|
+
snapshotStr = JSON.stringify(snapshot);
|
|
25
|
+
}
|
|
26
|
+
if (snapshotStr.length > MAX_SNAPSHOT_BYTES) {
|
|
27
|
+
// Trim decisions to first 2
|
|
28
|
+
if (Array.isArray(snapshot.decisions)) {
|
|
29
|
+
snapshot.decisions = snapshot.decisions.slice(0, 2);
|
|
30
|
+
}
|
|
31
|
+
snapshotStr = JSON.stringify(snapshot);
|
|
32
|
+
}
|
|
33
|
+
this.storage.exec('INSERT OR REPLACE INTO snapshots (session_id, snapshot, created_at) VALUES (?, ?, ?)', [sessionId, snapshotStr, Date.now()]);
|
|
34
|
+
}
|
|
35
|
+
restoreSnapshot(sessionId) {
|
|
36
|
+
const row = this.storage
|
|
37
|
+
.prepare('SELECT session_id, snapshot, created_at FROM snapshots WHERE session_id = ?')
|
|
38
|
+
.get(sessionId);
|
|
39
|
+
if (!row)
|
|
40
|
+
return null;
|
|
41
|
+
const age = Date.now() - row.created_at;
|
|
42
|
+
let data;
|
|
43
|
+
try {
|
|
44
|
+
data = JSON.parse(row.snapshot);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return null; // corrupted snapshot
|
|
48
|
+
}
|
|
49
|
+
if (age > STALE_THRESHOLD_MS) {
|
|
50
|
+
return {
|
|
51
|
+
snapshot: {
|
|
52
|
+
task: data.task,
|
|
53
|
+
decisions: data.decisions,
|
|
54
|
+
stats: data.stats,
|
|
55
|
+
condensed: true,
|
|
56
|
+
original_session: sessionId,
|
|
57
|
+
},
|
|
58
|
+
condensed: true,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
return { snapshot: data, condensed: false };
|
|
62
|
+
}
|
|
63
|
+
buildSnapshot(sessionId, stats) {
|
|
64
|
+
const decisions = this.storage
|
|
65
|
+
.prepare("SELECT summary FROM observations WHERE session_id = ? AND type = 'decision' ORDER BY indexed_at DESC LIMIT 5")
|
|
66
|
+
.all(sessionId);
|
|
67
|
+
const errors = this.storage
|
|
68
|
+
.prepare("SELECT summary FROM observations WHERE session_id = ? AND type = 'error' ORDER BY indexed_at DESC LIMIT 3")
|
|
69
|
+
.all(sessionId);
|
|
70
|
+
let recentEvents = [];
|
|
71
|
+
if (this.events) {
|
|
72
|
+
recentEvents = this.events
|
|
73
|
+
.query(sessionId, { priority: 1, limit: 5 })
|
|
74
|
+
.map((e) => ({
|
|
75
|
+
type: e.event_type,
|
|
76
|
+
data: e.data,
|
|
77
|
+
time: e.timestamp,
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
session_id: sessionId,
|
|
82
|
+
stats: {
|
|
83
|
+
observations: stats.observations_stored,
|
|
84
|
+
tokens_saved: stats.tokens_saved,
|
|
85
|
+
savings_pct: stats.savings_percentage,
|
|
86
|
+
},
|
|
87
|
+
decisions: decisions.map((d) => d.summary),
|
|
88
|
+
errors: errors.map((e) => e.summary),
|
|
89
|
+
events: recentEvents,
|
|
90
|
+
snapshot_at: Date.now(),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.SessionManager = SessionManager;
|
|
95
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TruncationResult } from './types.js';
|
|
2
|
+
export declare const MAX_PASSTHROUGH = 2048;
|
|
3
|
+
/**
|
|
4
|
+
* Four-tier truncation cascade:
|
|
5
|
+
* T1: JSON schema extraction
|
|
6
|
+
* T2: Pattern matching (test output, diff, npm)
|
|
7
|
+
* T3: Head/Tail slicing
|
|
8
|
+
* T4: SHA256 hash (binary content)
|
|
9
|
+
*/
|
|
10
|
+
export declare function truncate(content: string, aggressive?: boolean): TruncationResult;
|
|
11
|
+
//# sourceMappingURL=truncation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truncation.d.ts","sourceRoot":"","sources":["../../src/core/truncation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD,eAAO,MAAM,eAAe,OAAO,CAAC;AAqFpC;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,UAAQ,GAAG,gBAAgB,CAuD9E"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_PASSTHROUGH = void 0;
|
|
4
|
+
exports.truncate = truncate;
|
|
5
|
+
const node_crypto_1 = require("node:crypto");
|
|
6
|
+
// Tier thresholds
|
|
7
|
+
exports.MAX_PASSTHROUGH = 2048;
|
|
8
|
+
const HEAD = 500;
|
|
9
|
+
const TAIL = 500;
|
|
10
|
+
const AGGRESSIVE_HEAD = 200;
|
|
11
|
+
const AGGRESSIVE_TAIL = 200;
|
|
12
|
+
// Tier 1: JSON schema extraction
|
|
13
|
+
function tryJsonSchema(content) {
|
|
14
|
+
try {
|
|
15
|
+
const parsed = JSON.parse(content);
|
|
16
|
+
return `[JSON schema] ${describeJson(parsed, 0)}`;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function describeJson(val, depth) {
|
|
23
|
+
if (depth > 3)
|
|
24
|
+
return '...';
|
|
25
|
+
if (val === null)
|
|
26
|
+
return 'null';
|
|
27
|
+
if (Array.isArray(val)) {
|
|
28
|
+
if (val.length === 0)
|
|
29
|
+
return 'array[0]';
|
|
30
|
+
return `array[${val.length}] of ${describeJson(val[0], depth + 1)}`;
|
|
31
|
+
}
|
|
32
|
+
if (typeof val === 'object') {
|
|
33
|
+
const keys = Object.keys(val);
|
|
34
|
+
if (keys.length === 0)
|
|
35
|
+
return 'object{}';
|
|
36
|
+
const fields = keys.slice(0, 10).map(k => `${k}: ${describeJson(val[k], depth + 1)}`).join(', ');
|
|
37
|
+
const extra = keys.length > 10 ? `, +${keys.length - 10} more` : '';
|
|
38
|
+
return `{${fields}${extra}}`;
|
|
39
|
+
}
|
|
40
|
+
return typeof val;
|
|
41
|
+
}
|
|
42
|
+
// Tier 2: Pattern matching for known verbose outputs
|
|
43
|
+
const PATTERNS = [
|
|
44
|
+
{
|
|
45
|
+
// Test output
|
|
46
|
+
test: /Tests:\s.*total|PASS|FAIL|test suites?:/i,
|
|
47
|
+
extract: (c) => {
|
|
48
|
+
const lines = c.split('\n');
|
|
49
|
+
const summary = lines.filter(l => /Tests:|Test Suites:|passed|failed|PASS|FAIL|total/i.test(l)).slice(0, 10);
|
|
50
|
+
return `[Test output summary]\n${summary.join('\n')}`;
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
// Diff/patch
|
|
55
|
+
test: /^(diff --git|---|\+\+\+|@@)/m,
|
|
56
|
+
extract: (c) => {
|
|
57
|
+
const lines = c.split('\n');
|
|
58
|
+
const fileChanges = lines.filter(l => l.startsWith('diff --git') || l.startsWith('---') || l.startsWith('+++'));
|
|
59
|
+
const stats = lines.filter(l => /^\d+ files? changed/.test(l));
|
|
60
|
+
return `[Diff summary] ${fileChanges.length / 2} files\n${fileChanges.slice(0, 20).join('\n')}\n${stats.join('\n')}`;
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
// npm install output
|
|
65
|
+
test: /added \d+ packages?|npm warn|npm ERR!/,
|
|
66
|
+
extract: (c) => {
|
|
67
|
+
const lines = c.split('\n');
|
|
68
|
+
const relevant = lines.filter(l => /added|removed|npm warn|npm ERR!|up to date|packages? in/i.test(l)).slice(0, 10);
|
|
69
|
+
return `[npm output]\n${relevant.join('\n')}`;
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
];
|
|
73
|
+
// Tier 4: Binary content detection
|
|
74
|
+
function isBinary(content) {
|
|
75
|
+
const sampleSize = Math.min(content.length, 512);
|
|
76
|
+
if (sampleSize === 0)
|
|
77
|
+
return false;
|
|
78
|
+
let nonPrintable = 0;
|
|
79
|
+
for (let i = 0; i < sampleSize; i++) {
|
|
80
|
+
const code = content.charCodeAt(i);
|
|
81
|
+
if (code < 32 && code !== 9 && code !== 10 && code !== 13) {
|
|
82
|
+
nonPrintable++;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return nonPrintable / sampleSize > 0.1;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Four-tier truncation cascade:
|
|
89
|
+
* T1: JSON schema extraction
|
|
90
|
+
* T2: Pattern matching (test output, diff, npm)
|
|
91
|
+
* T3: Head/Tail slicing
|
|
92
|
+
* T4: SHA256 hash (binary content)
|
|
93
|
+
*/
|
|
94
|
+
function truncate(content, aggressive = false) {
|
|
95
|
+
const originalLength = content.length;
|
|
96
|
+
// T4 first: binary content → hash immediately
|
|
97
|
+
if (isBinary(content)) {
|
|
98
|
+
const hash = (0, node_crypto_1.createHash)('sha256').update(content).digest('hex');
|
|
99
|
+
const result = `[Binary content] sha256:${hash} (${Buffer.byteLength(content, 'utf8')} bytes)`;
|
|
100
|
+
return { content: result, tier: 4, original_length: originalLength, truncated_length: result.length };
|
|
101
|
+
}
|
|
102
|
+
// T1: JSON schema extraction
|
|
103
|
+
const schema = tryJsonSchema(content);
|
|
104
|
+
if (schema) {
|
|
105
|
+
return { content: schema, tier: 1, original_length: originalLength, truncated_length: schema.length };
|
|
106
|
+
}
|
|
107
|
+
// T2: Pattern matching
|
|
108
|
+
for (const pattern of PATTERNS) {
|
|
109
|
+
if (pattern.test.test(content)) {
|
|
110
|
+
const extracted = pattern.extract(content);
|
|
111
|
+
return { content: extracted, tier: 2, original_length: originalLength, truncated_length: extracted.length };
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// T3: Head/Tail slicing
|
|
115
|
+
const headSize = aggressive ? AGGRESSIVE_HEAD : HEAD;
|
|
116
|
+
const tailSize = aggressive ? AGGRESSIVE_TAIL : TAIL;
|
|
117
|
+
const lines = content.split('\n');
|
|
118
|
+
if (lines.length <= headSize + tailSize) {
|
|
119
|
+
// Char-level truncation — only truncate if content actually exceeds the char budget
|
|
120
|
+
const charBudget = aggressive ? 1600 : 4000;
|
|
121
|
+
if (originalLength <= charBudget) {
|
|
122
|
+
// Content fits in budget — return as-is
|
|
123
|
+
return { content, tier: 3, original_length: originalLength, truncated_length: originalLength };
|
|
124
|
+
}
|
|
125
|
+
const halfBudget = aggressive ? 800 : 2000;
|
|
126
|
+
const head = content.slice(0, halfBudget);
|
|
127
|
+
const tail = content.slice(-halfBudget);
|
|
128
|
+
const omitted = originalLength - head.length - tail.length;
|
|
129
|
+
const result = `${head}\n... (${omitted} chars omitted) ...\n${tail}`;
|
|
130
|
+
return { content: result, tier: 3, original_length: originalLength, truncated_length: result.length };
|
|
131
|
+
}
|
|
132
|
+
const headLines = lines.slice(0, headSize);
|
|
133
|
+
const tailLines = lines.slice(-tailSize);
|
|
134
|
+
const omitted = lines.length - headSize - tailSize;
|
|
135
|
+
const result = [
|
|
136
|
+
`[${lines.length} lines total]`,
|
|
137
|
+
...headLines,
|
|
138
|
+
`... (${omitted} lines omitted) ...`,
|
|
139
|
+
...tailLines,
|
|
140
|
+
].join('\n');
|
|
141
|
+
return { content: result, tier: 3, original_length: originalLength, truncated_length: result.length };
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=truncation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truncation.js","sourceRoot":"","sources":["../../src/core/truncation.ts"],"names":[],"mappings":"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"}
|