@vainplex/openclaw-cortex 0.3.1 → 0.4.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/README.md +40 -43
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +3 -0
- package/dist/src/config.js.map +1 -1
- package/dist/src/hooks.d.ts.map +1 -1
- package/dist/src/hooks.js +13 -1
- package/dist/src/hooks.js.map +1 -1
- package/dist/src/trace-analyzer/analyzer.d.ts +59 -0
- package/dist/src/trace-analyzer/analyzer.d.ts.map +1 -0
- package/dist/src/trace-analyzer/analyzer.js +175 -0
- package/dist/src/trace-analyzer/analyzer.js.map +1 -0
- package/dist/src/trace-analyzer/chain-reconstructor.d.ts +52 -0
- package/dist/src/trace-analyzer/chain-reconstructor.d.ts.map +1 -0
- package/dist/src/trace-analyzer/chain-reconstructor.js +190 -0
- package/dist/src/trace-analyzer/chain-reconstructor.js.map +1 -0
- package/dist/src/trace-analyzer/classifier.d.ts +28 -0
- package/dist/src/trace-analyzer/classifier.d.ts.map +1 -0
- package/dist/src/trace-analyzer/classifier.js +271 -0
- package/dist/src/trace-analyzer/classifier.js.map +1 -0
- package/dist/src/trace-analyzer/config.d.ts +78 -0
- package/dist/src/trace-analyzer/config.d.ts.map +1 -0
- package/dist/src/trace-analyzer/config.js +161 -0
- package/dist/src/trace-analyzer/config.js.map +1 -0
- package/dist/src/trace-analyzer/events.d.ts +70 -0
- package/dist/src/trace-analyzer/events.d.ts.map +1 -0
- package/dist/src/trace-analyzer/events.js +228 -0
- package/dist/src/trace-analyzer/events.js.map +1 -0
- package/dist/src/trace-analyzer/hooks.d.ts +22 -0
- package/dist/src/trace-analyzer/hooks.d.ts.map +1 -0
- package/dist/src/trace-analyzer/hooks.js +151 -0
- package/dist/src/trace-analyzer/hooks.js.map +1 -0
- package/dist/src/trace-analyzer/index.d.ts +32 -0
- package/dist/src/trace-analyzer/index.d.ts.map +1 -0
- package/dist/src/trace-analyzer/index.js +30 -0
- package/dist/src/trace-analyzer/index.js.map +1 -0
- package/dist/src/trace-analyzer/nats-trace-source.d.ts +10 -0
- package/dist/src/trace-analyzer/nats-trace-source.d.ts.map +1 -0
- package/dist/src/trace-analyzer/nats-trace-source.js +151 -0
- package/dist/src/trace-analyzer/nats-trace-source.js.map +1 -0
- package/dist/src/trace-analyzer/output-generator.d.ts +29 -0
- package/dist/src/trace-analyzer/output-generator.d.ts.map +1 -0
- package/dist/src/trace-analyzer/output-generator.js +142 -0
- package/dist/src/trace-analyzer/output-generator.js.map +1 -0
- package/dist/src/trace-analyzer/redactor.d.ts +14 -0
- package/dist/src/trace-analyzer/redactor.d.ts.map +1 -0
- package/dist/src/trace-analyzer/redactor.js +137 -0
- package/dist/src/trace-analyzer/redactor.js.map +1 -0
- package/dist/src/trace-analyzer/report.d.ts +93 -0
- package/dist/src/trace-analyzer/report.d.ts.map +1 -0
- package/dist/src/trace-analyzer/report.js +108 -0
- package/dist/src/trace-analyzer/report.js.map +1 -0
- package/dist/src/trace-analyzer/signals/correction.d.ts +11 -0
- package/dist/src/trace-analyzer/signals/correction.d.ts.map +1 -0
- package/dist/src/trace-analyzer/signals/correction.js +54 -0
- package/dist/src/trace-analyzer/signals/correction.js.map +1 -0
- package/dist/src/trace-analyzer/signals/dissatisfied.d.ts +11 -0
- package/dist/src/trace-analyzer/signals/dissatisfied.d.ts.map +1 -0
- package/dist/src/trace-analyzer/signals/dissatisfied.js +60 -0
- package/dist/src/trace-analyzer/signals/dissatisfied.js.map +1 -0
- package/dist/src/trace-analyzer/signals/doom-loop.d.ts +13 -0
- package/dist/src/trace-analyzer/signals/doom-loop.d.ts.map +1 -0
- package/dist/src/trace-analyzer/signals/doom-loop.js +156 -0
- package/dist/src/trace-analyzer/signals/doom-loop.js.map +1 -0
- package/dist/src/trace-analyzer/signals/hallucination.d.ts +11 -0
- package/dist/src/trace-analyzer/signals/hallucination.d.ts.map +1 -0
- package/dist/src/trace-analyzer/signals/hallucination.js +67 -0
- package/dist/src/trace-analyzer/signals/hallucination.js.map +1 -0
- package/dist/src/trace-analyzer/signals/index.d.ts +16 -0
- package/dist/src/trace-analyzer/signals/index.d.ts.map +1 -0
- package/dist/src/trace-analyzer/signals/index.js +92 -0
- package/dist/src/trace-analyzer/signals/index.js.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/index.d.ts +4 -0
- package/dist/src/trace-analyzer/signals/lang/index.d.ts.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/index.js +2 -0
- package/dist/src/trace-analyzer/signals/lang/index.js.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/registry.d.ts +41 -0
- package/dist/src/trace-analyzer/signals/lang/registry.d.ts.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/registry.js +111 -0
- package/dist/src/trace-analyzer/signals/lang/registry.js.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-de.d.ts +10 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-de.d.ts.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-de.js +60 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-de.js.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-en.d.ts +4 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-en.d.ts.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-en.js +55 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-en.js.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-es.d.ts +9 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-es.d.ts.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-es.js +59 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-es.js.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-fr.d.ts +10 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-fr.d.ts.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-fr.js +60 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-fr.js.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-it.d.ts +9 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-it.d.ts.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-it.js +59 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-it.js.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-ja.d.ts +9 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-ja.d.ts.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-ja.js +59 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-ja.js.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-ko.d.ts +9 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-ko.d.ts.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-ko.js +59 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-ko.js.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-pt.d.ts +9 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-pt.d.ts.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-pt.js +59 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-pt.js.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-ru.d.ts +9 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-ru.d.ts.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-ru.js +59 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-ru.js.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-zh.d.ts +8 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-zh.d.ts.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-zh.js +58 -0
- package/dist/src/trace-analyzer/signals/lang/signal-lang-zh.js.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/types.d.ts +76 -0
- package/dist/src/trace-analyzer/signals/lang/types.d.ts.map +1 -0
- package/dist/src/trace-analyzer/signals/lang/types.js +12 -0
- package/dist/src/trace-analyzer/signals/lang/types.js.map +1 -0
- package/dist/src/trace-analyzer/signals/repeat-fail.d.ts +24 -0
- package/dist/src/trace-analyzer/signals/repeat-fail.d.ts.map +1 -0
- package/dist/src/trace-analyzer/signals/repeat-fail.js +112 -0
- package/dist/src/trace-analyzer/signals/repeat-fail.js.map +1 -0
- package/dist/src/trace-analyzer/signals/tool-fail.d.ts +10 -0
- package/dist/src/trace-analyzer/signals/tool-fail.d.ts.map +1 -0
- package/dist/src/trace-analyzer/signals/tool-fail.js +99 -0
- package/dist/src/trace-analyzer/signals/tool-fail.js.map +1 -0
- package/dist/src/trace-analyzer/signals/types.d.ts +54 -0
- package/dist/src/trace-analyzer/signals/types.d.ts.map +1 -0
- package/dist/src/trace-analyzer/signals/types.js +9 -0
- package/dist/src/trace-analyzer/signals/types.js.map +1 -0
- package/dist/src/trace-analyzer/signals/unverified-claim.d.ts +11 -0
- package/dist/src/trace-analyzer/signals/unverified-claim.d.ts.map +1 -0
- package/dist/src/trace-analyzer/signals/unverified-claim.js +84 -0
- package/dist/src/trace-analyzer/signals/unverified-claim.js.map +1 -0
- package/dist/src/trace-analyzer/trace-source.d.ts +31 -0
- package/dist/src/trace-analyzer/trace-source.d.ts.map +1 -0
- package/dist/src/trace-analyzer/trace-source.js +5 -0
- package/dist/src/trace-analyzer/trace-source.js.map +1 -0
- package/dist/src/trace-analyzer/util.d.ts +17 -0
- package/dist/src/trace-analyzer/util.d.ts.map +1 -0
- package/dist/src/trace-analyzer/util.js +26 -0
- package/dist/src/trace-analyzer/util.js.map +1 -0
- package/dist/src/types.d.ts +2 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -32,8 +32,9 @@ The LLM runs **on top of regex** — it enhances, never replaces. If the LLM is
|
|
|
32
32
|
Try the interactive demo — it simulates a real bilingual dev conversation and shows every Cortex feature in action:
|
|
33
33
|
|
|
34
34
|
```bash
|
|
35
|
-
git clone https://github.com/alberthild/openclaw
|
|
36
|
-
cd openclaw-cortex
|
|
35
|
+
git clone https://github.com/alberthild/vainplex-openclaw.git
|
|
36
|
+
cd vainplex-openclaw/packages/openclaw-cortex
|
|
37
|
+
npm install
|
|
37
38
|
npx tsx demo/demo.ts
|
|
38
39
|
```
|
|
39
40
|
|
|
@@ -200,8 +201,9 @@ Or clone directly:
|
|
|
200
201
|
|
|
201
202
|
```bash
|
|
202
203
|
cd ~/.openclaw/extensions
|
|
203
|
-
git clone https://github.com/alberthild/openclaw
|
|
204
|
-
cd openclaw-cortex
|
|
204
|
+
git clone https://github.com/alberthild/vainplex-openclaw.git
|
|
205
|
+
cd vainplex-openclaw/packages/openclaw-cortex
|
|
206
|
+
npm install && npm run build
|
|
205
207
|
```
|
|
206
208
|
|
|
207
209
|
## Configure
|
|
@@ -222,35 +224,33 @@ Then create `~/.openclaw/plugins/openclaw-cortex/config.json`:
|
|
|
222
224
|
|
|
223
225
|
```json
|
|
224
226
|
{
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
}
|
|
253
|
-
}
|
|
227
|
+
"patterns": {
|
|
228
|
+
"language": "all"
|
|
229
|
+
},
|
|
230
|
+
"threadTracker": {
|
|
231
|
+
"enabled": true,
|
|
232
|
+
"pruneDays": 7,
|
|
233
|
+
"maxThreads": 50
|
|
234
|
+
},
|
|
235
|
+
"decisionTracker": {
|
|
236
|
+
"enabled": true,
|
|
237
|
+
"maxDecisions": 100,
|
|
238
|
+
"dedupeWindowHours": 24
|
|
239
|
+
},
|
|
240
|
+
"bootContext": {
|
|
241
|
+
"enabled": true,
|
|
242
|
+
"maxChars": 16000,
|
|
243
|
+
"onSessionStart": true,
|
|
244
|
+
"maxThreadsInBoot": 7,
|
|
245
|
+
"maxDecisionsInBoot": 10,
|
|
246
|
+
"decisionRecencyDays": 14
|
|
247
|
+
},
|
|
248
|
+
"preCompaction": {
|
|
249
|
+
"enabled": true,
|
|
250
|
+
"maxSnapshotMessages": 15
|
|
251
|
+
},
|
|
252
|
+
"narrative": {
|
|
253
|
+
"enabled": true
|
|
254
254
|
}
|
|
255
255
|
}
|
|
256
256
|
```
|
|
@@ -421,14 +421,11 @@ MIT — see [LICENSE](LICENSE)
|
|
|
421
421
|
|
|
422
422
|
## Part of the Vainplex Plugin Suite
|
|
423
423
|
|
|
424
|
-
|
|
425
|
-
|---|--------|--------|-------------|
|
|
426
|
-
| 1 | [@vainplex/nats-eventstore](https://github.com/alberthild/vainplex-openclaw/tree/main/packages/openclaw-nats-eventstore) | ✅ Published | NATS JetStream event persistence |
|
|
427
|
-
| 2 | **@vainplex/openclaw-cortex** | ✅ Published | Conversation intelligence — threads, decisions, boot context, 10 languages (this plugin) |
|
|
428
|
-
| 3 | [@vainplex/openclaw-knowledge-engine](https://github.com/alberthild/vainplex-openclaw/tree/main/packages/openclaw-knowledge-engine) | ✅ Published | Real-time knowledge extraction |
|
|
429
|
-
| 4 | [@vainplex/openclaw-governance](https://github.com/alberthild/vainplex-openclaw/tree/main/packages/openclaw-governance) | ✅ Published | Policy-as-code engine — trust scoring, audit trail, production safeguards |
|
|
430
|
-
| 5 | @vainplex/openclaw-health-monitor | 📋 Planned | System health + auto-healing |
|
|
424
|
+
All plugins live in one monorepo: [alberthild/vainplex-openclaw](https://github.com/alberthild/vainplex-openclaw)
|
|
431
425
|
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
426
|
+
| # | Plugin | Version | Description |
|
|
427
|
+
|---|--------|---------|-------------|
|
|
428
|
+
| 1 | [@vainplex/nats-eventstore](https://github.com/alberthild/vainplex-openclaw/tree/main/packages/openclaw-nats-eventstore) | 0.2.1 | NATS JetStream event persistence + audit trail |
|
|
429
|
+
| 2 | **@vainplex/openclaw-cortex** | **0.3.1** | Conversation intelligence — threads, decisions, boot context, 10 languages (this plugin) |
|
|
430
|
+
| 3 | [@vainplex/openclaw-knowledge-engine](https://github.com/alberthild/vainplex-openclaw/tree/main/packages/openclaw-knowledge-engine) | 0.1.3 | Real-time fact extraction from conversations |
|
|
431
|
+
| 4 | [@vainplex/openclaw-governance](https://github.com/alberthild/vainplex-openclaw/tree/main/packages/openclaw-governance) | 0.3.1 | Policy-as-code — trust scoring, audit trail, production safeguards |
|
package/dist/src/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,eAAO,MAAM,QAAQ,EAAE,YAwCtB,CAAC;AA6CF,wBAAgB,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAsDlF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EACpB,GAAG,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,MAAM,CAIR"}
|
package/dist/src/config.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TRACE_ANALYZER_DEFAULTS, resolveTraceAnalyzerConfig } from "./trace-analyzer/config.js";
|
|
1
2
|
export const DEFAULTS = {
|
|
2
3
|
enabled: true,
|
|
3
4
|
workspace: "",
|
|
@@ -37,6 +38,7 @@ export const DEFAULTS = {
|
|
|
37
38
|
timeoutMs: 15000,
|
|
38
39
|
batchSize: 3,
|
|
39
40
|
},
|
|
41
|
+
traceAnalyzer: TRACE_ANALYZER_DEFAULTS,
|
|
40
42
|
};
|
|
41
43
|
function bool(value, fallback) {
|
|
42
44
|
return typeof value === "boolean" ? value : fallback;
|
|
@@ -129,6 +131,7 @@ export function resolveConfig(pluginConfig) {
|
|
|
129
131
|
timeoutMs: int(lm.timeoutMs, DEFAULTS.llm.timeoutMs),
|
|
130
132
|
batchSize: int(lm.batchSize, DEFAULTS.llm.batchSize),
|
|
131
133
|
},
|
|
134
|
+
traceAnalyzer: resolveTraceAnalyzerConfig((raw.traceAnalyzer ?? undefined)),
|
|
132
135
|
};
|
|
133
136
|
}
|
|
134
137
|
/**
|
package/dist/src/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/src/hooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EAGb,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EAGb,MAAM,YAAY,CAAC;AA4HpB;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAuBtF"}
|
package/dist/src/hooks.js
CHANGED
|
@@ -4,6 +4,7 @@ import { DecisionTracker } from "./decision-tracker.js";
|
|
|
4
4
|
import { BootContextGenerator } from "./boot-context.js";
|
|
5
5
|
import { PreCompaction } from "./pre-compaction.js";
|
|
6
6
|
import { LlmEnhancer } from "./llm-enhance.js";
|
|
7
|
+
import { registerTraceAnalyzerHooks, cleanupTraceAnalyzerHooks } from "./trace-analyzer/index.js";
|
|
7
8
|
/**
|
|
8
9
|
* Extract message content from a hook event using the fallback chain.
|
|
9
10
|
*/
|
|
@@ -119,6 +120,17 @@ export function registerCortexHooks(api, config) {
|
|
|
119
120
|
registerMessageHooks(api, config, state);
|
|
120
121
|
registerSessionHooks(api, config, state);
|
|
121
122
|
registerCompactionHooks(api, config, state);
|
|
122
|
-
|
|
123
|
+
// Trace Analyzer — conditional registration (R-010, R-013, R-028)
|
|
124
|
+
if (config.traceAnalyzer?.enabled) {
|
|
125
|
+
const taState = { timer: null, analyzer: null };
|
|
126
|
+
registerTraceAnalyzerHooks(api, config, taState);
|
|
127
|
+
// Register cleanup as a service so it runs on plugin stop
|
|
128
|
+
api.registerService({
|
|
129
|
+
id: "trace-analyzer",
|
|
130
|
+
start: async () => { },
|
|
131
|
+
stop: async () => { cleanupTraceAnalyzerHooks(taState); },
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
api.logger.info(`[cortex] Hooks registered — threads:${config.threadTracker.enabled} decisions:${config.decisionTracker.enabled} boot:${config.bootContext.enabled} compaction:${config.preCompaction.enabled} llm:${config.llm.enabled}${config.llm.enabled ? ` (${config.llm.model}@${config.llm.endpoint})` : ""} trace:${config.traceAnalyzer?.enabled ?? false}`);
|
|
123
135
|
}
|
|
124
136
|
//# sourceMappingURL=hooks.js.map
|
package/dist/src/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/hooks.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAoB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { PluginLogger } from "../types.js";
|
|
2
|
+
import type { LlmConfig } from "../llm-enhance.js";
|
|
3
|
+
import type { TraceSource } from "./trace-source.js";
|
|
4
|
+
import type { TraceAnalyzerConfig } from "./config.js";
|
|
5
|
+
import type { AnalysisReport, ProcessingState } from "./report.js";
|
|
6
|
+
import type { SignalPatternSet } from "./signals/index.js";
|
|
7
|
+
export type TraceAnalyzerRunOpts = {
|
|
8
|
+
/** If true, reprocesses all events from the beginning. */
|
|
9
|
+
full?: boolean;
|
|
10
|
+
};
|
|
11
|
+
export type TraceAnalyzerStatus = {
|
|
12
|
+
lastRun: string | null;
|
|
13
|
+
findings: number;
|
|
14
|
+
state: Partial<ProcessingState>;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* TraceAnalyzer — orchestrates the 3-stage analysis pipeline.
|
|
18
|
+
*
|
|
19
|
+
* Create via constructor, then call `run()` for a full analysis.
|
|
20
|
+
* The analyzer manages its own processing state for incremental runs.
|
|
21
|
+
*/
|
|
22
|
+
export declare class TraceAnalyzer {
|
|
23
|
+
private readonly config;
|
|
24
|
+
private readonly topLevelLlm;
|
|
25
|
+
private readonly workspace;
|
|
26
|
+
private readonly logger;
|
|
27
|
+
private readonly createSource;
|
|
28
|
+
/** Pre-loaded signal patterns (if provided). */
|
|
29
|
+
private signalPatterns;
|
|
30
|
+
constructor(params: {
|
|
31
|
+
config: TraceAnalyzerConfig;
|
|
32
|
+
logger: PluginLogger;
|
|
33
|
+
workspace: string;
|
|
34
|
+
topLevelLlm: LlmConfig;
|
|
35
|
+
createSource?: () => Promise<TraceSource | null>;
|
|
36
|
+
/** Pre-loaded signal patterns. If not provided, falls back to EN+DE. */
|
|
37
|
+
signalPatterns?: SignalPatternSet;
|
|
38
|
+
});
|
|
39
|
+
/**
|
|
40
|
+
* Execute the full analysis pipeline.
|
|
41
|
+
*
|
|
42
|
+
* @param opts.full — If true, reprocess all events from the beginning.
|
|
43
|
+
* @returns The analysis report.
|
|
44
|
+
*/
|
|
45
|
+
run(opts?: TraceAnalyzerRunOpts): Promise<AnalysisReport>;
|
|
46
|
+
/**
|
|
47
|
+
* Get the current analyzer status.
|
|
48
|
+
*/
|
|
49
|
+
getStatus(): Promise<TraceAnalyzerStatus>;
|
|
50
|
+
/** Steps 2-3: Fetch events and reconstruct conversation chains. */
|
|
51
|
+
private fetchAndReconstructChains;
|
|
52
|
+
/** Steps 4-6: Detect signals and optionally classify with LLM. */
|
|
53
|
+
private detectAndClassify;
|
|
54
|
+
/** Steps 7-8: Generate outputs, assemble report, persist. */
|
|
55
|
+
private generateAndPersist;
|
|
56
|
+
private executePipeline;
|
|
57
|
+
private loadState;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../../src/trace-analyzer/analyzer.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAY,MAAM,aAAa,CAAC;AAIjE,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AA0C3D,MAAM,MAAM,oBAAoB,GAAG;IACjC,0DAA0D;IAC1D,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;CACjC,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAY;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6C;IAC1E,gDAAgD;IAChD,OAAO,CAAC,cAAc,CAA+B;gBAEzC,MAAM,EAAE;QAClB,MAAM,EAAE,mBAAmB,CAAC;QAC5B,MAAM,EAAE,YAAY,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,SAAS,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;QACjD,wEAAwE;QACxE,cAAc,CAAC,EAAE,gBAAgB,CAAC;KACnC;IASD;;;;;OAKG;IACG,GAAG,CAAC,IAAI,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;IAiC/D;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAW/C,mEAAmE;YACrD,yBAAyB;IAqBvC,kEAAkE;YACpD,iBAAiB;IAoB/B,6DAA6D;IAC7D,OAAO,CAAC,kBAAkB;YAsBZ,eAAe;IAY7B,OAAO,CAAC,SAAS;CAMlB"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// Trace Analyzer — Orchestrator (Stage 1 → 2 → 3)
|
|
3
|
+
// ============================================================
|
|
4
|
+
//
|
|
5
|
+
// The TraceAnalyzer class orchestrates the full analysis pipeline:
|
|
6
|
+
// 1. Connect to TraceSource
|
|
7
|
+
// 2. Fetch events (incremental or full)
|
|
8
|
+
// 3. Reconstruct chains
|
|
9
|
+
// 4. Detect signals (Stage 1)
|
|
10
|
+
// 5. Classify via LLM (Stage 2, optional)
|
|
11
|
+
// 6. Generate outputs (Stage 3)
|
|
12
|
+
// 7. Assemble report
|
|
13
|
+
// 8. Persist report + processing state
|
|
14
|
+
// 9. Close TraceSource
|
|
15
|
+
//
|
|
16
|
+
// Implements R-010, R-012, R-015, R-019, R-020, R-043–R-045.
|
|
17
|
+
// ============================================================
|
|
18
|
+
import { join } from "node:path";
|
|
19
|
+
import { reconstructChains } from "./chain-reconstructor.js";
|
|
20
|
+
import { detectAllSignals, createRepeatFailState } from "./signals/index.js";
|
|
21
|
+
import { classifyFindings } from "./classifier.js";
|
|
22
|
+
import { generateOutputs } from "./output-generator.js";
|
|
23
|
+
import { assembleReport } from "./report.js";
|
|
24
|
+
import { loadJson, saveJson } from "../storage.js";
|
|
25
|
+
// ---- Severity ranking for sorting ----
|
|
26
|
+
const SEVERITY_RANK = {
|
|
27
|
+
low: 0,
|
|
28
|
+
medium: 1,
|
|
29
|
+
high: 2,
|
|
30
|
+
critical: 3,
|
|
31
|
+
};
|
|
32
|
+
// ---- Processing state path ----
|
|
33
|
+
function statePath(workspace) {
|
|
34
|
+
return join(workspace, "memory", "reboot", "trace-analyzer-state.json");
|
|
35
|
+
}
|
|
36
|
+
function reportPath(workspace, config) {
|
|
37
|
+
return config.output.reportPath
|
|
38
|
+
?? join(workspace, "memory", "reboot", "trace-analysis-report.json");
|
|
39
|
+
}
|
|
40
|
+
// ---- Empty report factory ----
|
|
41
|
+
function emptyReport(startedAt, previousState) {
|
|
42
|
+
return assembleReport({
|
|
43
|
+
startedAt,
|
|
44
|
+
completedAt: Date.now(),
|
|
45
|
+
eventsProcessed: 0,
|
|
46
|
+
chains: [],
|
|
47
|
+
findings: [],
|
|
48
|
+
generatedOutputs: [],
|
|
49
|
+
previousState,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* TraceAnalyzer — orchestrates the 3-stage analysis pipeline.
|
|
54
|
+
*
|
|
55
|
+
* Create via constructor, then call `run()` for a full analysis.
|
|
56
|
+
* The analyzer manages its own processing state for incremental runs.
|
|
57
|
+
*/
|
|
58
|
+
export class TraceAnalyzer {
|
|
59
|
+
config;
|
|
60
|
+
topLevelLlm;
|
|
61
|
+
workspace;
|
|
62
|
+
logger;
|
|
63
|
+
createSource;
|
|
64
|
+
/** Pre-loaded signal patterns (if provided). */
|
|
65
|
+
signalPatterns;
|
|
66
|
+
constructor(params) {
|
|
67
|
+
this.config = params.config;
|
|
68
|
+
this.logger = params.logger;
|
|
69
|
+
this.workspace = params.workspace;
|
|
70
|
+
this.topLevelLlm = params.topLevelLlm;
|
|
71
|
+
this.createSource = params.createSource ?? null;
|
|
72
|
+
this.signalPatterns = params.signalPatterns;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Execute the full analysis pipeline.
|
|
76
|
+
*
|
|
77
|
+
* @param opts.full — If true, reprocess all events from the beginning.
|
|
78
|
+
* @returns The analysis report.
|
|
79
|
+
*/
|
|
80
|
+
async run(opts) {
|
|
81
|
+
const startedAt = Date.now();
|
|
82
|
+
const previousState = this.loadState();
|
|
83
|
+
// 1. Connect to TraceSource
|
|
84
|
+
let source = null;
|
|
85
|
+
try {
|
|
86
|
+
source = this.createSource ? await this.createSource() : null;
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
this.logger.warn(`[trace-analyzer] TraceSource connection failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
90
|
+
}
|
|
91
|
+
if (!source) {
|
|
92
|
+
this.logger.warn("[trace-analyzer] No TraceSource available — returning empty report");
|
|
93
|
+
return emptyReport(startedAt, previousState);
|
|
94
|
+
}
|
|
95
|
+
try {
|
|
96
|
+
return await this.executePipeline(source, startedAt, previousState, opts);
|
|
97
|
+
}
|
|
98
|
+
finally {
|
|
99
|
+
// 9. Close TraceSource
|
|
100
|
+
try {
|
|
101
|
+
await source.close();
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
this.logger.warn(`[trace-analyzer] Failed to close TraceSource: ${err instanceof Error ? err.message : String(err)}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get the current analyzer status.
|
|
110
|
+
*/
|
|
111
|
+
async getStatus() {
|
|
112
|
+
const state = this.loadState();
|
|
113
|
+
return {
|
|
114
|
+
lastRun: state.updatedAt || null,
|
|
115
|
+
findings: state.totalFindings ?? 0,
|
|
116
|
+
state,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
// ---- Private Pipeline Steps ----
|
|
120
|
+
/** Steps 2-3: Fetch events and reconstruct conversation chains. */
|
|
121
|
+
async fetchAndReconstructChains(source, previousState, opts) {
|
|
122
|
+
const isFullRun = opts?.full === true || !previousState.lastProcessedTs;
|
|
123
|
+
const startMs = isFullRun
|
|
124
|
+
? 0
|
|
125
|
+
: (previousState.lastProcessedTs ?? 0) - (this.config.incrementalContextWindow * 60_000);
|
|
126
|
+
const endMs = Date.now();
|
|
127
|
+
const events = source.fetchByTimeRange(Math.max(0, startMs), endMs, {
|
|
128
|
+
batchSize: this.config.fetchBatchSize,
|
|
129
|
+
});
|
|
130
|
+
return reconstructChains(events, {
|
|
131
|
+
gapMinutes: this.config.chainGapMinutes,
|
|
132
|
+
maxEventsPerChain: 1000,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
/** Steps 4-6: Detect signals and optionally classify with LLM. */
|
|
136
|
+
async detectAndClassify(chains) {
|
|
137
|
+
const repeatFailState = createRepeatFailState();
|
|
138
|
+
let findings = detectAllSignals(chains, this.config.signals, repeatFailState, this.signalPatterns, this.logger);
|
|
139
|
+
if (findings.length > this.config.output.maxFindings) {
|
|
140
|
+
findings = findings
|
|
141
|
+
.sort((a, b) => SEVERITY_RANK[b.signal.severity] - SEVERITY_RANK[a.signal.severity])
|
|
142
|
+
.slice(0, this.config.output.maxFindings);
|
|
143
|
+
}
|
|
144
|
+
if (this.config.llm.enabled) {
|
|
145
|
+
const chainMap = new Map(chains.map(c => [c.id, c]));
|
|
146
|
+
findings = await classifyFindings(findings, chainMap, this.config, this.topLevelLlm, this.logger);
|
|
147
|
+
}
|
|
148
|
+
return findings;
|
|
149
|
+
}
|
|
150
|
+
/** Steps 7-8: Generate outputs, assemble report, persist. */
|
|
151
|
+
generateAndPersist(startedAt, eventsProcessed, chains, findings, previousState) {
|
|
152
|
+
const generatedOutputs = generateOutputs(findings);
|
|
153
|
+
const report = assembleReport({
|
|
154
|
+
startedAt, completedAt: Date.now(),
|
|
155
|
+
eventsProcessed, chains, findings, generatedOutputs, previousState,
|
|
156
|
+
});
|
|
157
|
+
saveJson(reportPath(this.workspace, this.config), report, this.logger);
|
|
158
|
+
saveJson(statePath(this.workspace), report.processingState, this.logger);
|
|
159
|
+
this.logger.info(`[trace-analyzer] Analysis complete: ${eventsProcessed} events, ${chains.length} chains, ${findings.length} findings`);
|
|
160
|
+
return report;
|
|
161
|
+
}
|
|
162
|
+
async executePipeline(source, startedAt, previousState, opts) {
|
|
163
|
+
const chains = await this.fetchAndReconstructChains(source, previousState, opts);
|
|
164
|
+
const eventsProcessed = chains.reduce((sum, c) => sum + c.events.length, 0);
|
|
165
|
+
const findings = await this.detectAndClassify(chains);
|
|
166
|
+
return this.generateAndPersist(startedAt, eventsProcessed, chains, findings, previousState);
|
|
167
|
+
}
|
|
168
|
+
loadState() {
|
|
169
|
+
const path = statePath(this.workspace);
|
|
170
|
+
const raw = loadJson(path);
|
|
171
|
+
// loadJson returns {} on failure, which satisfies Partial<ProcessingState>
|
|
172
|
+
return raw;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../../src/trace-analyzer/analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { NormalizedEvent, AnalyzerEventType } from "./events.js";
|
|
2
|
+
/** A reconstructed conversation chain. */
|
|
3
|
+
export type ConversationChain = {
|
|
4
|
+
/** Deterministic chain ID: first 16 hex chars of SHA-256("session:agent:firstTs"). */
|
|
5
|
+
id: string;
|
|
6
|
+
/** Agent ID (e.g., "main", "forge", "viola"). */
|
|
7
|
+
agent: string;
|
|
8
|
+
/** Normalized session key. */
|
|
9
|
+
session: string;
|
|
10
|
+
/** Timestamp of first event (ms). */
|
|
11
|
+
startTs: number;
|
|
12
|
+
/** Timestamp of last event (ms). */
|
|
13
|
+
endTs: number;
|
|
14
|
+
/** Ordered events in this chain. */
|
|
15
|
+
events: NormalizedEvent[];
|
|
16
|
+
/** Event count per type (for quick filtering). */
|
|
17
|
+
typeCounts: Partial<Record<AnalyzerEventType, number>>;
|
|
18
|
+
/** How the chain boundary was determined. */
|
|
19
|
+
boundaryType: "lifecycle" | "gap" | "time_range" | "memory_cap";
|
|
20
|
+
};
|
|
21
|
+
/** Configuration for chain reconstruction. */
|
|
22
|
+
export type ChainReconstructorOpts = {
|
|
23
|
+
/** Inactivity gap in minutes that triggers a chain split. Default: 30. */
|
|
24
|
+
gapMinutes: number;
|
|
25
|
+
/** Maximum events per chain before forced split. Default: 1000. */
|
|
26
|
+
maxEventsPerChain: number;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Reconstruct conversation chains from a stream of normalized events.
|
|
30
|
+
*
|
|
31
|
+
* Two-pass algorithm:
|
|
32
|
+
* 1. Accumulate events into (session, agent) buckets
|
|
33
|
+
* 2. Split each bucket into chains by boundaries, deduplicate, emit
|
|
34
|
+
*/
|
|
35
|
+
export declare function reconstructChains(events: AsyncIterable<NormalizedEvent>, opts?: Partial<ChainReconstructorOpts>): Promise<ConversationChain[]>;
|
|
36
|
+
/**
|
|
37
|
+
* Deduplicate events within a sorted event list.
|
|
38
|
+
* When two events share the same fingerprint (same type, agent, time window,
|
|
39
|
+
* and content/params), keep the one with the higher sequence number.
|
|
40
|
+
*/
|
|
41
|
+
export declare function deduplicateEvents(events: NormalizedEvent[]): NormalizedEvent[];
|
|
42
|
+
/**
|
|
43
|
+
* Compute a fingerprint for deduplication.
|
|
44
|
+
* Uses a 1-second time window to match events from both schemas
|
|
45
|
+
* that represent the same underlying action.
|
|
46
|
+
*/
|
|
47
|
+
export declare function eventFingerprint(event: NormalizedEvent): string;
|
|
48
|
+
/** Fast non-crypto hash for dedup fingerprinting. */
|
|
49
|
+
export declare function simpleHash(str: string): number;
|
|
50
|
+
/** Compute a deterministic chain ID. */
|
|
51
|
+
export declare function computeChainId(session: string, agent: string, firstTs: number): string;
|
|
52
|
+
//# sourceMappingURL=chain-reconstructor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-reconstructor.d.ts","sourceRoot":"","sources":["../../../src/trace-analyzer/chain-reconstructor.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEtE,0CAA0C;AAC1C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,sFAAsF;IACtF,EAAE,EAAE,MAAM,CAAC;IACX,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,kDAAkD;IAClD,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,6CAA6C;IAC7C,YAAY,EAAE,WAAW,GAAG,KAAK,GAAG,YAAY,GAAG,YAAY,CAAC;CACjE,CAAC;AAEF,8CAA8C;AAC9C,MAAM,MAAM,sBAAsB,GAAG;IACnC,0EAA0E;IAC1E,UAAU,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAyCF;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,EACtC,IAAI,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GACrC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAe9B;AAiDD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAmB9E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAqB/D;AAED,qDAAqD;AACrD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM9C;AAED,wCAAwC;AACxC,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAGtF"}
|