@vainplex/openclaw-cortex 0.3.0 → 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.
Files changed (151) hide show
  1. package/README.md +89 -55
  2. package/dist/src/config.d.ts.map +1 -1
  3. package/dist/src/config.js +3 -0
  4. package/dist/src/config.js.map +1 -1
  5. package/dist/src/hooks.d.ts.map +1 -1
  6. package/dist/src/hooks.js +13 -1
  7. package/dist/src/hooks.js.map +1 -1
  8. package/dist/src/trace-analyzer/analyzer.d.ts +59 -0
  9. package/dist/src/trace-analyzer/analyzer.d.ts.map +1 -0
  10. package/dist/src/trace-analyzer/analyzer.js +175 -0
  11. package/dist/src/trace-analyzer/analyzer.js.map +1 -0
  12. package/dist/src/trace-analyzer/chain-reconstructor.d.ts +52 -0
  13. package/dist/src/trace-analyzer/chain-reconstructor.d.ts.map +1 -0
  14. package/dist/src/trace-analyzer/chain-reconstructor.js +190 -0
  15. package/dist/src/trace-analyzer/chain-reconstructor.js.map +1 -0
  16. package/dist/src/trace-analyzer/classifier.d.ts +28 -0
  17. package/dist/src/trace-analyzer/classifier.d.ts.map +1 -0
  18. package/dist/src/trace-analyzer/classifier.js +271 -0
  19. package/dist/src/trace-analyzer/classifier.js.map +1 -0
  20. package/dist/src/trace-analyzer/config.d.ts +78 -0
  21. package/dist/src/trace-analyzer/config.d.ts.map +1 -0
  22. package/dist/src/trace-analyzer/config.js +161 -0
  23. package/dist/src/trace-analyzer/config.js.map +1 -0
  24. package/dist/src/trace-analyzer/events.d.ts +70 -0
  25. package/dist/src/trace-analyzer/events.d.ts.map +1 -0
  26. package/dist/src/trace-analyzer/events.js +228 -0
  27. package/dist/src/trace-analyzer/events.js.map +1 -0
  28. package/dist/src/trace-analyzer/hooks.d.ts +22 -0
  29. package/dist/src/trace-analyzer/hooks.d.ts.map +1 -0
  30. package/dist/src/trace-analyzer/hooks.js +151 -0
  31. package/dist/src/trace-analyzer/hooks.js.map +1 -0
  32. package/dist/src/trace-analyzer/index.d.ts +32 -0
  33. package/dist/src/trace-analyzer/index.d.ts.map +1 -0
  34. package/dist/src/trace-analyzer/index.js +30 -0
  35. package/dist/src/trace-analyzer/index.js.map +1 -0
  36. package/dist/src/trace-analyzer/nats-trace-source.d.ts +10 -0
  37. package/dist/src/trace-analyzer/nats-trace-source.d.ts.map +1 -0
  38. package/dist/src/trace-analyzer/nats-trace-source.js +151 -0
  39. package/dist/src/trace-analyzer/nats-trace-source.js.map +1 -0
  40. package/dist/src/trace-analyzer/output-generator.d.ts +29 -0
  41. package/dist/src/trace-analyzer/output-generator.d.ts.map +1 -0
  42. package/dist/src/trace-analyzer/output-generator.js +142 -0
  43. package/dist/src/trace-analyzer/output-generator.js.map +1 -0
  44. package/dist/src/trace-analyzer/redactor.d.ts +14 -0
  45. package/dist/src/trace-analyzer/redactor.d.ts.map +1 -0
  46. package/dist/src/trace-analyzer/redactor.js +137 -0
  47. package/dist/src/trace-analyzer/redactor.js.map +1 -0
  48. package/dist/src/trace-analyzer/report.d.ts +93 -0
  49. package/dist/src/trace-analyzer/report.d.ts.map +1 -0
  50. package/dist/src/trace-analyzer/report.js +108 -0
  51. package/dist/src/trace-analyzer/report.js.map +1 -0
  52. package/dist/src/trace-analyzer/signals/correction.d.ts +11 -0
  53. package/dist/src/trace-analyzer/signals/correction.d.ts.map +1 -0
  54. package/dist/src/trace-analyzer/signals/correction.js +54 -0
  55. package/dist/src/trace-analyzer/signals/correction.js.map +1 -0
  56. package/dist/src/trace-analyzer/signals/dissatisfied.d.ts +11 -0
  57. package/dist/src/trace-analyzer/signals/dissatisfied.d.ts.map +1 -0
  58. package/dist/src/trace-analyzer/signals/dissatisfied.js +60 -0
  59. package/dist/src/trace-analyzer/signals/dissatisfied.js.map +1 -0
  60. package/dist/src/trace-analyzer/signals/doom-loop.d.ts +13 -0
  61. package/dist/src/trace-analyzer/signals/doom-loop.d.ts.map +1 -0
  62. package/dist/src/trace-analyzer/signals/doom-loop.js +156 -0
  63. package/dist/src/trace-analyzer/signals/doom-loop.js.map +1 -0
  64. package/dist/src/trace-analyzer/signals/hallucination.d.ts +11 -0
  65. package/dist/src/trace-analyzer/signals/hallucination.d.ts.map +1 -0
  66. package/dist/src/trace-analyzer/signals/hallucination.js +67 -0
  67. package/dist/src/trace-analyzer/signals/hallucination.js.map +1 -0
  68. package/dist/src/trace-analyzer/signals/index.d.ts +16 -0
  69. package/dist/src/trace-analyzer/signals/index.d.ts.map +1 -0
  70. package/dist/src/trace-analyzer/signals/index.js +92 -0
  71. package/dist/src/trace-analyzer/signals/index.js.map +1 -0
  72. package/dist/src/trace-analyzer/signals/lang/index.d.ts +4 -0
  73. package/dist/src/trace-analyzer/signals/lang/index.d.ts.map +1 -0
  74. package/dist/src/trace-analyzer/signals/lang/index.js +2 -0
  75. package/dist/src/trace-analyzer/signals/lang/index.js.map +1 -0
  76. package/dist/src/trace-analyzer/signals/lang/registry.d.ts +41 -0
  77. package/dist/src/trace-analyzer/signals/lang/registry.d.ts.map +1 -0
  78. package/dist/src/trace-analyzer/signals/lang/registry.js +111 -0
  79. package/dist/src/trace-analyzer/signals/lang/registry.js.map +1 -0
  80. package/dist/src/trace-analyzer/signals/lang/signal-lang-de.d.ts +10 -0
  81. package/dist/src/trace-analyzer/signals/lang/signal-lang-de.d.ts.map +1 -0
  82. package/dist/src/trace-analyzer/signals/lang/signal-lang-de.js +60 -0
  83. package/dist/src/trace-analyzer/signals/lang/signal-lang-de.js.map +1 -0
  84. package/dist/src/trace-analyzer/signals/lang/signal-lang-en.d.ts +4 -0
  85. package/dist/src/trace-analyzer/signals/lang/signal-lang-en.d.ts.map +1 -0
  86. package/dist/src/trace-analyzer/signals/lang/signal-lang-en.js +55 -0
  87. package/dist/src/trace-analyzer/signals/lang/signal-lang-en.js.map +1 -0
  88. package/dist/src/trace-analyzer/signals/lang/signal-lang-es.d.ts +9 -0
  89. package/dist/src/trace-analyzer/signals/lang/signal-lang-es.d.ts.map +1 -0
  90. package/dist/src/trace-analyzer/signals/lang/signal-lang-es.js +59 -0
  91. package/dist/src/trace-analyzer/signals/lang/signal-lang-es.js.map +1 -0
  92. package/dist/src/trace-analyzer/signals/lang/signal-lang-fr.d.ts +10 -0
  93. package/dist/src/trace-analyzer/signals/lang/signal-lang-fr.d.ts.map +1 -0
  94. package/dist/src/trace-analyzer/signals/lang/signal-lang-fr.js +60 -0
  95. package/dist/src/trace-analyzer/signals/lang/signal-lang-fr.js.map +1 -0
  96. package/dist/src/trace-analyzer/signals/lang/signal-lang-it.d.ts +9 -0
  97. package/dist/src/trace-analyzer/signals/lang/signal-lang-it.d.ts.map +1 -0
  98. package/dist/src/trace-analyzer/signals/lang/signal-lang-it.js +59 -0
  99. package/dist/src/trace-analyzer/signals/lang/signal-lang-it.js.map +1 -0
  100. package/dist/src/trace-analyzer/signals/lang/signal-lang-ja.d.ts +9 -0
  101. package/dist/src/trace-analyzer/signals/lang/signal-lang-ja.d.ts.map +1 -0
  102. package/dist/src/trace-analyzer/signals/lang/signal-lang-ja.js +59 -0
  103. package/dist/src/trace-analyzer/signals/lang/signal-lang-ja.js.map +1 -0
  104. package/dist/src/trace-analyzer/signals/lang/signal-lang-ko.d.ts +9 -0
  105. package/dist/src/trace-analyzer/signals/lang/signal-lang-ko.d.ts.map +1 -0
  106. package/dist/src/trace-analyzer/signals/lang/signal-lang-ko.js +59 -0
  107. package/dist/src/trace-analyzer/signals/lang/signal-lang-ko.js.map +1 -0
  108. package/dist/src/trace-analyzer/signals/lang/signal-lang-pt.d.ts +9 -0
  109. package/dist/src/trace-analyzer/signals/lang/signal-lang-pt.d.ts.map +1 -0
  110. package/dist/src/trace-analyzer/signals/lang/signal-lang-pt.js +59 -0
  111. package/dist/src/trace-analyzer/signals/lang/signal-lang-pt.js.map +1 -0
  112. package/dist/src/trace-analyzer/signals/lang/signal-lang-ru.d.ts +9 -0
  113. package/dist/src/trace-analyzer/signals/lang/signal-lang-ru.d.ts.map +1 -0
  114. package/dist/src/trace-analyzer/signals/lang/signal-lang-ru.js +59 -0
  115. package/dist/src/trace-analyzer/signals/lang/signal-lang-ru.js.map +1 -0
  116. package/dist/src/trace-analyzer/signals/lang/signal-lang-zh.d.ts +8 -0
  117. package/dist/src/trace-analyzer/signals/lang/signal-lang-zh.d.ts.map +1 -0
  118. package/dist/src/trace-analyzer/signals/lang/signal-lang-zh.js +58 -0
  119. package/dist/src/trace-analyzer/signals/lang/signal-lang-zh.js.map +1 -0
  120. package/dist/src/trace-analyzer/signals/lang/types.d.ts +76 -0
  121. package/dist/src/trace-analyzer/signals/lang/types.d.ts.map +1 -0
  122. package/dist/src/trace-analyzer/signals/lang/types.js +12 -0
  123. package/dist/src/trace-analyzer/signals/lang/types.js.map +1 -0
  124. package/dist/src/trace-analyzer/signals/repeat-fail.d.ts +24 -0
  125. package/dist/src/trace-analyzer/signals/repeat-fail.d.ts.map +1 -0
  126. package/dist/src/trace-analyzer/signals/repeat-fail.js +112 -0
  127. package/dist/src/trace-analyzer/signals/repeat-fail.js.map +1 -0
  128. package/dist/src/trace-analyzer/signals/tool-fail.d.ts +10 -0
  129. package/dist/src/trace-analyzer/signals/tool-fail.d.ts.map +1 -0
  130. package/dist/src/trace-analyzer/signals/tool-fail.js +99 -0
  131. package/dist/src/trace-analyzer/signals/tool-fail.js.map +1 -0
  132. package/dist/src/trace-analyzer/signals/types.d.ts +54 -0
  133. package/dist/src/trace-analyzer/signals/types.d.ts.map +1 -0
  134. package/dist/src/trace-analyzer/signals/types.js +9 -0
  135. package/dist/src/trace-analyzer/signals/types.js.map +1 -0
  136. package/dist/src/trace-analyzer/signals/unverified-claim.d.ts +11 -0
  137. package/dist/src/trace-analyzer/signals/unverified-claim.d.ts.map +1 -0
  138. package/dist/src/trace-analyzer/signals/unverified-claim.js +84 -0
  139. package/dist/src/trace-analyzer/signals/unverified-claim.js.map +1 -0
  140. package/dist/src/trace-analyzer/trace-source.d.ts +31 -0
  141. package/dist/src/trace-analyzer/trace-source.d.ts.map +1 -0
  142. package/dist/src/trace-analyzer/trace-source.js +5 -0
  143. package/dist/src/trace-analyzer/trace-source.js.map +1 -0
  144. package/dist/src/trace-analyzer/util.d.ts +17 -0
  145. package/dist/src/trace-analyzer/util.d.ts.map +1 -0
  146. package/dist/src/trace-analyzer/util.js +26 -0
  147. package/dist/src/trace-analyzer/util.js.map +1 -0
  148. package/dist/src/types.d.ts +2 -0
  149. package/dist/src/types.d.ts.map +1 -1
  150. package/dist/src/types.js.map +1 -1
  151. 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-cortex.git
36
- cd openclaw-cortex && npm install
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,52 +201,60 @@ Or clone directly:
200
201
 
201
202
  ```bash
202
203
  cd ~/.openclaw/extensions
203
- git clone https://github.com/alberthild/openclaw-cortex.git
204
- cd openclaw-cortex && npm install && npm run build
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
208
210
 
209
- Add to your OpenClaw config:
211
+ Add to your OpenClaw config (`openclaw.json`):
210
212
 
211
213
  ```json
212
214
  {
213
215
  "plugins": {
214
- "openclaw-cortex": {
215
- "enabled": true,
216
- "patterns": {
217
- "language": "both"
218
- },
219
- "threadTracker": {
220
- "enabled": true,
221
- "pruneDays": 7,
222
- "maxThreads": 50
223
- },
224
- "decisionTracker": {
225
- "enabled": true,
226
- "maxDecisions": 100,
227
- "dedupeWindowHours": 24
228
- },
229
- "bootContext": {
230
- "enabled": true,
231
- "maxChars": 16000,
232
- "onSessionStart": true,
233
- "maxThreadsInBoot": 7,
234
- "maxDecisionsInBoot": 10,
235
- "decisionRecencyDays": 14
236
- },
237
- "preCompaction": {
238
- "enabled": true,
239
- "maxSnapshotMessages": 15
240
- },
241
- "narrative": {
242
- "enabled": true
243
- }
216
+ "entries": {
217
+ "openclaw-cortex": { "enabled": true }
244
218
  }
245
219
  }
246
220
  }
247
221
  ```
248
222
 
223
+ Then create `~/.openclaw/plugins/openclaw-cortex/config.json`:
224
+
225
+ ```json
226
+ {
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
+ }
255
+ }
256
+ ```
257
+
249
258
  ### LLM Enhancement (optional)
250
259
 
251
260
  Add an `llm` section to enable AI-powered analysis on top of regex:
@@ -319,15 +328,44 @@ Restart OpenClaw after configuring.
319
328
  └── hot-snapshot.md # Pre-compaction snapshot
320
329
  ```
321
330
 
322
- ### Pattern Languages
331
+ ### Pattern Languages (v0.3.0)
332
+
333
+ Thread and decision detection supports **10 languages** out of the box:
323
334
 
324
- Thread and decision detection supports English, German, or both:
335
+ | Language | Code | Decision | Closure | Wait | Mood |
336
+ |----------|------|----------|---------|------|------|
337
+ | English | `en` | "we decided", "let's do", "the plan is" | "is done", "fixed ✅" | "waiting for", "blocked by" | ✅ |
338
+ | German | `de` | "wir machen", "beschlossen" | "erledigt", "gefixt" | "warte auf" | ✅ |
339
+ | French | `fr` | "nous avons décidé", "on fait" | "c'est fait", "résolu" | "en attente de" | ✅ |
340
+ | Spanish | `es` | "decidimos", "el plan es" | "está hecho", "resuelto" | "esperando" | ✅ |
341
+ | Portuguese | `pt` | "decidimos", "o plano é" | "está feito", "resolvido" | "aguardando" | ✅ |
342
+ | Italian | `it` | "abbiamo deciso", "il piano è" | "è fatto", "risolto" | "in attesa di" | ✅ |
343
+ | Chinese | `zh` | "我们决定", "计划是" | "已完成", "已解决" | "等待", "阻塞" | ✅ |
344
+ | Japanese | `ja` | "決定しました", "方針は" | "完了", "解決済み" | "待ち" | ✅ |
345
+ | Korean | `ko` | "결정했습니다", "계획은" | "완료", "해결" | "대기 중" | ✅ |
346
+ | Russian | `ru` | "мы решили", "план такой" | "готово", "исправлено" | "ждём", "заблокировано" | ✅ |
325
347
 
326
- - **Decision patterns**: "we decided", "let's do", "the plan is", "wir machen", "beschlossen"
327
- - **Closure patterns**: "is done", "it works", "fixed ✅", "erledigt", "gefixt"
328
- - **Wait patterns**: "waiting for", "blocked by", "warte auf"
329
- - **Topic patterns**: "back to", "now about", "jetzt zu", "bzgl."
330
- - **Mood detection**: frustrated, excited, tense, productive, exploratory
348
+ Configure via `patternLanguage`:
349
+ ```jsonc
350
+ "both" // backward-compat: EN + DE
351
+ "all" // all 10 languages
352
+ ["en", "fr", "es"] // specific languages
353
+ "de" // single language
354
+ ```
355
+
356
+ **Custom patterns** — add your own via config:
357
+ ```json
358
+ {
359
+ "patterns": {
360
+ "language": "all",
361
+ "custom": {
362
+ "mode": "extend",
363
+ "decision": ["my custom pattern"],
364
+ "close": ["zakończone"]
365
+ }
366
+ }
367
+ }
368
+ ```
331
369
 
332
370
  ### LLM Enhancement Flow
333
371
 
@@ -359,7 +397,7 @@ The LLM sees a conversation snippet (configurable batch size) and returns:
359
397
 
360
398
  ```bash
361
399
  npm install
362
- npm test # 288 tests
400
+ npm test # 516 tests
363
401
  npm run typecheck # TypeScript strict mode
364
402
  npm run build # Compile to dist/
365
403
  ```
@@ -371,7 +409,7 @@ npm run build # Compile to dist/
371
409
  - LLM enhancement: async, batched, fire-and-forget (never blocks hooks)
372
410
  - Atomic file writes via `.tmp` + rename
373
411
  - Noise filter prevents garbage threads from polluting state
374
- - Tested with 288 unit + integration tests
412
+ - Tested with 516 unit + integration tests
375
413
 
376
414
  ## Architecture
377
415
 
@@ -383,15 +421,11 @@ MIT — see [LICENSE](LICENSE)
383
421
 
384
422
  ## Part of the Vainplex Plugin Suite
385
423
 
386
- | # | Plugin | Status | Description |
387
- |---|--------|--------|-------------|
388
- | 1 | [@vainplex/nats-eventstore](https://github.com/alberthild/openclaw-nats-eventstore) | ✅ Published | NATS JetStream event persistence |
389
- | 2 | **@vainplex/openclaw-cortex** | ✅ Published | Conversation intelligence — threads, decisions, boot context (this plugin) |
390
- | 3 | [@vainplex/openclaw-knowledge-engine](https://github.com/alberthild/openclaw-knowledge-engine) | ✅ Published | Real-time knowledge extraction |
391
- | 4 | @vainplex/openclaw-governance | 📋 Planned | Policy enforcement + guardrails |
392
- | 5 | @vainplex/openclaw-memory-engine | 📋 Planned | Unified memory layer |
393
- | 6 | @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)
394
425
 
395
- ## License
396
-
397
- MIT see [LICENSE](LICENSE)
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 |
@@ -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;AAE/C,eAAO,MAAM,QAAQ,EAAE,YAuCtB,CAAC;AA6CF,wBAAgB,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAmDlF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EACpB,GAAG,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,MAAM,CAIR"}
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"}
@@ -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
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAEjG,MAAM,CAAC,MAAM,QAAQ,GAAiB;IACpC,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,EAAE;IACb,aAAa,EAAE;QACb,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,EAAE;KACf;IACD,eAAe,EAAE;QACf,OAAO,EAAE,IAAI;QACb,YAAY,EAAE,GAAG;QACjB,iBAAiB,EAAE,EAAE;KACtB;IACD,WAAW,EAAE;QACX,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,KAAK;QACf,cAAc,EAAE,IAAI;QACpB,gBAAgB,EAAE,CAAC;QACnB,kBAAkB,EAAE,EAAE;QACtB,mBAAmB,EAAE,EAAE;KACxB;IACD,aAAa,EAAE;QACb,OAAO,EAAE,IAAI;QACb,mBAAmB,EAAE,EAAE;KACxB;IACD,SAAS,EAAE;QACT,OAAO,EAAE,IAAI;KACd;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,MAAM;KACjB;IACD,GAAG,EAAE;QACH,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,2BAA2B;QACrC,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,EAAE;QACV,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,CAAC;KACb;IACD,aAAa,EAAE,uBAAuB;CACvC,CAAC;AAEF,SAAS,IAAI,CAAC,KAAc,EAAE,QAAiB;IAC7C,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvD,CAAC;AAED,SAAS,GAAG,CAAC,KAAc,EAAE,QAAgB;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,GAAG,CAAC,KAAc,EAAE,QAAgB;IAC3C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AACtD,CAAC;AAED,SAAS,IAAI,CAAC,KAAc;IAC1B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACvE,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;QACpE,OAAO,KAAiB,CAAC;IAC3B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAAc;IAEd,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,MAAM,MAAM,GAAG,CAAC,CAAU,EAAwB,EAAE;QAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACxC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;IAC7D,CAAC,CAAC;IACF,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC9B,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC;QAC1C,kBAAkB,EAAE,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAClD,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ;KACtD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,YAAsC;IAClE,MAAM,GAAG,GAAG,YAAY,IAAI,EAAE,CAAC;IAC/B,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAA4B,CAAC;IAChE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAA4B,CAAC;IAClE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAA4B,CAAC;IAC9D,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAA4B,CAAC;IAChE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAA4B,CAAC;IAC5D,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAA4B,CAAC;IAC3D,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAA4B,CAAC;IAEtD,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC;QAC5C,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC;QACjD,aAAa,EAAE;YACb,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;YACzD,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC;YAC9D,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;SAClE;QACD,eAAe,EAAE;YACf,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC;YAC3D,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC;YACzE,iBAAiB,EAAE,GAAG,CAAC,EAAE,CAAC,iBAAiB,EAAE,QAAQ,CAAC,eAAe,CAAC,iBAAiB,CAAC;SACzF;QACD,WAAW,EAAE;YACX,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC;YACvD,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC;YACzD,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC;YAC5E,gBAAgB,EAAE,GAAG,CAAC,EAAE,CAAC,gBAAgB,EAAE,QAAQ,CAAC,WAAW,CAAC,gBAAgB,CAAC;YACjF,kBAAkB,EAAE,GAAG,CAAC,EAAE,CAAC,kBAAkB,EAAE,QAAQ,CAAC,WAAW,CAAC,kBAAkB,CAAC;YACvF,mBAAmB,EAAE,GAAG,CAAC,EAAE,CAAC,mBAAmB,EAAE,QAAQ,CAAC,WAAW,CAAC,mBAAmB,CAAC;SAC3F;QACD,aAAa,EAAE;YACb,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;YACzD,mBAAmB,EAAE,GAAG,CAAC,EAAE,CAAC,mBAAmB,EAAE,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC;SAC7F;QACD,SAAS,EAAE;YACT,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC;SACtD;QACD,QAAQ,EAAE;YACR,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;YAC3B,MAAM,EAAE,qBAAqB,CAAC,EAAE,CAAC,MAAM,CAAC;SACzC;QACD,GAAG,EAAE;YACH,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;YAC/C,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;YACjD,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;YACxC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;YAC3C,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;YACpD,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;SACrD;QACD,aAAa,EAAE,0BAA0B,CACvC,CAAC,GAAG,CAAC,aAAa,IAAI,SAAS,CAAwC,CACxE;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAoB,EACpB,GAA+B;IAE/B,IAAI,MAAM,CAAC,SAAS;QAAE,OAAO,MAAM,CAAC,SAAS,CAAC;IAC9C,IAAI,GAAG,EAAE,YAAY;QAAE,OAAO,GAAG,CAAC,YAAY,CAAC;IAC/C,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AACpD,CAAC"}
@@ -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;AA2HpB;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAUtF"}
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
- api.logger.info(`[cortex] Hooks registeredthreads:${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})` : ""}`);
123
+ // Trace Analyzerconditional 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
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/hooks.ts"],"names":[],"mappings":"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"}
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;AACjE,OAAO,EAAE,0BAA0B,EAAE,yBAAyB,EAA+B,MAAM,2BAA2B,CAAC;AAE/H;;GAEG;AACH,SAAS,cAAc,CAAC,KAAgB;IACtC,OAAO,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,KAAgB;IACrC,OAAO,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC;AAC/D,CAAC;AAUD,SAAS,UAAU,CAAC,KAAgB,EAAE,MAAoB,EAAE,MAAmC,EAAE,GAAiB;IAChH,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACrB,KAAK,CAAC,SAAS,GAAG,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QACzD,KAAK,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACnH,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QAC7D,KAAK,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzH,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC7C,KAAK,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,gEAAgE;AAChE,SAAS,oBAAoB,CAAC,GAAsB,EAAE,MAAoB,EAAE,KAAgB;IAC1F,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO;QAAE,OAAO;IAE7E,MAAM,OAAO,GAAG,KAAK,EAAE,KAAgB,EAAE,GAAgB,EAAE,cAAuB,EAAE,EAAE;QACpF,IAAI,CAAC;YACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,cAAc,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,CAAC,OAAO;gBAAE,OAAO;YAErB,mDAAmD;YACnD,IAAI,MAAM,CAAC,aAAa,CAAC,OAAO,IAAI,KAAK,CAAC,aAAa;gBAAE,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC7G,IAAI,MAAM,CAAC,eAAe,CAAC,OAAO,IAAI,KAAK,CAAC,eAAe;gBAAE,KAAK,CAAC,eAAe,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAEnH,+DAA+D;YAC/D,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;gBACtB,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,WAAoB,CAAC,CAAC,CAAC,MAAe,CAAC;gBACrE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC3E,IAAI,QAAQ,EAAE,CAAC;oBACb,6CAA6C;oBAC7C,IAAI,KAAK,CAAC,aAAa;wBAAE,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;oBACxE,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;wBAC1B,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;4BACrC,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;wBACnE,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC;IAEF,GAAG,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;IACnF,GAAG,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;AAC5G,CAAC;AAED,oDAAoD;AACpD,SAAS,oBAAoB,CAAC,GAAsB,EAAE,MAAoB,EAAE,KAAgB;IAC1F,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc;QAAE,OAAO;IAE9E,GAAG,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACtC,IAAI,CAAC;YACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC3C,IAAI,oBAAoB,CAAC,KAAK,CAAC,SAAU,EAAE,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;YACnF,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;AACvB,CAAC;AAED,kDAAkD;AAClD,SAAS,uBAAuB,CAAC,GAAsB,EAAE,MAAoB,EAAE,KAAgB;IAC7F,IAAI,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QACjC,GAAG,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACzC,IAAI,CAAC;gBACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,SAAU,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBACvI,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,SAAU,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBAC9G,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;oBAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACnH,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,MAAM,CAAC,mBAAmB,uBAAuB,CAAC,CAAC;YAC1G,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,GAAG,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC;IAED,GAAG,CAAC,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC9B,IAAI,CAAC;YACH,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAClF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,GAAG,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAsB,EAAE,MAAoB;IAC9E,MAAM,KAAK,GAAc,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAE5G,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACzC,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACzC,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAE5C,kEAAkE;IAClE,IAAI,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC;QAClC,MAAM,OAAO,GAA2B,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACxE,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAEjD,0DAA0D;QAC1D,GAAG,CAAC,eAAe,CAAC;YAClB,EAAE,EAAE,gBAAgB;YACpB,KAAK,EAAE,KAAK,IAAI,EAAE,GAAiC,CAAC;YACpD,IAAI,EAAE,KAAK,IAAI,EAAE,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAC1D,CAAC,CAAC;IACL,CAAC;IAED,GAAG,CAAC,MAAM,CAAC,IAAI,CACb,uCAAuC,MAAM,CAAC,aAAa,CAAC,OAAO,cAAc,MAAM,CAAC,eAAe,CAAC,OAAO,SAAS,MAAM,CAAC,WAAW,CAAC,OAAO,eAAe,MAAM,CAAC,aAAa,CAAC,OAAO,QAAQ,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,MAAM,CAAC,aAAa,EAAE,OAAO,IAAI,KAAK,EAAE,CACtV,CAAC;AACJ,CAAC"}
@@ -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"}