@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/trace-analyzer/hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ export type { NormalizedEvent, AnalyzerEventType, NormalizedPayload, } from "./events.js";
2
+ export { normalizeEvent, normalizeSession, normalizePayload, mapEventType, detectSchema, } from "./events.js";
3
+ export type { TraceSource, FetchOpts } from "./trace-source.js";
4
+ export { createNatsTraceSource } from "./nats-trace-source.js";
5
+ export type { ConversationChain, ChainReconstructorOpts } from "./chain-reconstructor.js";
6
+ export { reconstructChains } from "./chain-reconstructor.js";
7
+ export type { TraceAnalyzerConfig, SignalId, Severity, TriageLlmConfig } from "./config.js";
8
+ export { TRACE_ANALYZER_DEFAULTS, resolveTraceAnalyzerConfig } from "./config.js";
9
+ export type { FailureSignal, Finding, FindingClassification, SignalDetector, } from "./signals/types.js";
10
+ export { detectCorrections } from "./signals/correction.js";
11
+ export { detectToolFails } from "./signals/tool-fail.js";
12
+ export { detectDoomLoops } from "./signals/doom-loop.js";
13
+ export { detectDissatisfied } from "./signals/dissatisfied.js";
14
+ export { detectRepeatFails, createRepeatFailState } from "./signals/repeat-fail.js";
15
+ export type { RepeatFailState } from "./signals/repeat-fail.js";
16
+ export { detectHallucinations } from "./signals/hallucination.js";
17
+ export { detectUnverifiedClaims } from "./signals/unverified-claim.js";
18
+ export { detectAllSignals, SignalPatternRegistry } from "./signals/index.js";
19
+ export type { SignalPatternSet } from "./signals/index.js";
20
+ export type { SignalLanguagePack } from "./signals/lang/types.js";
21
+ export { BUILTIN_SIGNAL_LANGUAGES } from "./signals/lang/registry.js";
22
+ export { redactText, redactChain } from "./redactor.js";
23
+ export { classifyFindings, resolveAnalyzerLlmConfig, formatChainAsTranscript } from "./classifier.js";
24
+ export type { GeneratedOutput } from "./output-generator.js";
25
+ export { generateOutputs } from "./output-generator.js";
26
+ export type { AnalysisReport, RunStats, SignalStats, RuleEffectiveness, ProcessingState, AssembleReportParams, } from "./report.js";
27
+ export { assembleReport } from "./report.js";
28
+ export { TraceAnalyzer } from "./analyzer.js";
29
+ export type { TraceAnalyzerRunOpts, TraceAnalyzerStatus } from "./analyzer.js";
30
+ export { registerTraceAnalyzerHooks, cleanupTraceAnalyzerHooks } from "./hooks.js";
31
+ export type { TraceAnalyzerHookState } from "./hooks.js";
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/trace-analyzer/index.ts"],"names":[],"mappings":"AAKA,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,MAAM,aAAa,CAAC;AAGrB,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGhE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAG/D,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAC1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAGlF,YAAY,EACV,aAAa,EACb,OAAO,EACP,qBAAqB,EACrB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACpF,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAGvE,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGxD,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAGtG,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,YAAY,EACV,cAAc,EACd,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAG/E,OAAO,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AACnF,YAAY,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,30 @@
1
+ // ============================================================
2
+ // Trace Analyzer — Public API
3
+ // ============================================================
4
+ export { normalizeEvent, normalizeSession, normalizePayload, mapEventType, detectSchema, } from "./events.js";
5
+ // NatsTraceSource
6
+ export { createNatsTraceSource } from "./nats-trace-source.js";
7
+ export { reconstructChains } from "./chain-reconstructor.js";
8
+ export { TRACE_ANALYZER_DEFAULTS, resolveTraceAnalyzerConfig } from "./config.js";
9
+ // Signal detectors
10
+ export { detectCorrections } from "./signals/correction.js";
11
+ export { detectToolFails } from "./signals/tool-fail.js";
12
+ export { detectDoomLoops } from "./signals/doom-loop.js";
13
+ export { detectDissatisfied } from "./signals/dissatisfied.js";
14
+ export { detectRepeatFails, createRepeatFailState } from "./signals/repeat-fail.js";
15
+ export { detectHallucinations } from "./signals/hallucination.js";
16
+ export { detectUnverifiedClaims } from "./signals/unverified-claim.js";
17
+ // Signal registry
18
+ export { detectAllSignals, SignalPatternRegistry } from "./signals/index.js";
19
+ export { BUILTIN_SIGNAL_LANGUAGES } from "./signals/lang/registry.js";
20
+ // Redaction (Phase 3)
21
+ export { redactText, redactChain } from "./redactor.js";
22
+ // Classifier (Phase 3)
23
+ export { classifyFindings, resolveAnalyzerLlmConfig, formatChainAsTranscript } from "./classifier.js";
24
+ export { generateOutputs } from "./output-generator.js";
25
+ export { assembleReport } from "./report.js";
26
+ // Analyzer (Phase 4)
27
+ export { TraceAnalyzer } from "./analyzer.js";
28
+ // Hook registration (Phase 4)
29
+ export { registerTraceAnalyzerHooks, cleanupTraceAnalyzerHooks } from "./hooks.js";
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/trace-analyzer/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,8BAA8B;AAC9B,+DAA+D;AAS/D,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,MAAM,aAAa,CAAC;AAKrB,kBAAkB;AAClB,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAI/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAI7D,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAUlF,mBAAmB;AACnB,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,kBAAkB;AAClB,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAK7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,sBAAsB;AACtB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAExD,uBAAuB;AACvB,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAItG,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAWxD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,qBAAqB;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C,8BAA8B;AAC9B,OAAO,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { PluginLogger } from "../types.js";
2
+ import type { TraceSource } from "./trace-source.js";
3
+ import type { TraceAnalyzerConfig } from "./config.js";
4
+ /**
5
+ * Attempt to create a NatsTraceSource. Returns null if:
6
+ * - `nats` npm package is not installed (R-004)
7
+ * - NATS connection fails
8
+ */
9
+ export declare function createNatsTraceSource(natsConfig: TraceAnalyzerConfig["nats"], logger: PluginLogger): Promise<TraceSource | null>;
10
+ //# sourceMappingURL=nats-trace-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nats-trace-source.d.ts","sourceRoot":"","sources":["../../../src/trace-analyzer/nats-trace-source.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,mBAAmB,CAAC;AAEhE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAiFvD;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,mBAAmB,CAAC,MAAM,CAAC,EACvC,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAI7B"}
@@ -0,0 +1,151 @@
1
+ // ============================================================
2
+ // Trace Analyzer — NatsTraceSource Implementation
3
+ // ============================================================
4
+ //
5
+ // Reads events from a NATS JetStream stream, normalizing both
6
+ // Schema A (nats-eventstore) and Schema B (session-sync) events
7
+ // into NormalizedEvent format.
8
+ //
9
+ // The `nats` package is dynamically imported — if not installed,
10
+ // createNatsTraceSource() returns null gracefully (R-004).
11
+ // ============================================================
12
+ import { normalizeEvent } from "./events.js";
13
+ /**
14
+ * Dynamically import the nats module, returning null if not installed.
15
+ * Uses `new Function()` to prevent bundler static resolution (R-004).
16
+ */
17
+ async function loadNatsModule(logger) {
18
+ try {
19
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
20
+ return await new Function("specifier", "return import(specifier)")("nats");
21
+ }
22
+ catch {
23
+ logger.info("[trace-analyzer] `nats` package not installed — NATS trace source unavailable");
24
+ return null;
25
+ }
26
+ }
27
+ /** Connect to NATS and return an implementation, or null on failure. */
28
+ async function connectNats(nats, natsConfig, logger) {
29
+ try {
30
+ const nc = await nats.connect({
31
+ servers: natsConfig.url.replace(/^nats:\/\//, ""),
32
+ user: natsConfig.user, pass: natsConfig.password,
33
+ reconnect: true, maxReconnectAttempts: 10, timeout: 10_000,
34
+ });
35
+ logger.info(`[trace-analyzer] Connected to NATS at ${natsConfig.url}`);
36
+ const js = nc.jetstream();
37
+ const jsm = await nc.jetstreamManager();
38
+ return new NatsTraceSourceImpl(nc, js, jsm, natsConfig, nats, logger);
39
+ }
40
+ catch (err) {
41
+ logger.warn(`[trace-analyzer] NATS connection failed: ${err instanceof Error ? err.message : String(err)}`);
42
+ return null;
43
+ }
44
+ }
45
+ /**
46
+ * Attempt to create a NatsTraceSource. Returns null if:
47
+ * - `nats` npm package is not installed (R-004)
48
+ * - NATS connection fails
49
+ */
50
+ export async function createNatsTraceSource(natsConfig, logger) {
51
+ const nats = await loadNatsModule(logger);
52
+ if (!nats)
53
+ return null;
54
+ return connectNats(nats, natsConfig, logger);
55
+ }
56
+ /** Decode, normalize and filter a single NATS message. */
57
+ function processMessage(msg, sc, startMs, endMs, opts) {
58
+ let raw;
59
+ try {
60
+ raw = JSON.parse(sc.decode(msg.data));
61
+ }
62
+ catch {
63
+ return "skip";
64
+ }
65
+ const event = normalizeEvent(raw, msg.seq);
66
+ if (!event)
67
+ return "skip";
68
+ if (event.ts < startMs)
69
+ return "skip";
70
+ if (event.ts > endMs)
71
+ return "past-end";
72
+ if (opts?.eventTypes && !opts.eventTypes.includes(event.type))
73
+ return "skip";
74
+ if (opts?.agents && !opts.agents.includes(event.agent))
75
+ return "skip";
76
+ return { event };
77
+ }
78
+ class NatsTraceSourceImpl {
79
+ nc;
80
+ js;
81
+ jsm;
82
+ config;
83
+ natsModule;
84
+ logger;
85
+ closed = false;
86
+ constructor(nc, js, jsm, config, natsModule, logger) {
87
+ this.nc = nc;
88
+ this.js = js;
89
+ this.jsm = jsm;
90
+ this.config = config;
91
+ this.natsModule = natsModule;
92
+ this.logger = logger;
93
+ }
94
+ async *fetchByTimeRange(startMs, endMs, opts) {
95
+ const sc = this.natsModule.StringCodec();
96
+ const batchSize = opts?.batchSize ?? 500;
97
+ let yieldedCount = 0;
98
+ let exhausted = false;
99
+ while (!exhausted) {
100
+ const consumer = await this.js.consumers.get(this.config.stream);
101
+ const messages = await consumer.consume({ max_messages: batchSize, idle_heartbeat: 5_000 });
102
+ let batchCount = 0;
103
+ let pastEnd = false;
104
+ try {
105
+ for await (const msg of messages) {
106
+ batchCount++;
107
+ const result = processMessage(msg, sc, startMs, endMs, opts);
108
+ msg.ack();
109
+ if (result === "skip")
110
+ continue;
111
+ if (result === "past-end") {
112
+ messages.stop();
113
+ pastEnd = true;
114
+ break;
115
+ }
116
+ yieldedCount++;
117
+ yield result.event;
118
+ }
119
+ }
120
+ catch (err) {
121
+ this.logger.warn(`[trace-analyzer] Error during NATS fetch: ${err instanceof Error ? err.message : String(err)}`);
122
+ break;
123
+ }
124
+ if (pastEnd || batchCount < batchSize)
125
+ exhausted = true;
126
+ }
127
+ this.logger.info(`[trace-analyzer] Fetched ${yieldedCount} events in time range`);
128
+ }
129
+ async *fetchByAgent(agent, startMs, endMs, opts) {
130
+ yield* this.fetchByTimeRange(startMs, endMs, {
131
+ ...opts,
132
+ agents: [agent],
133
+ });
134
+ }
135
+ async getLastSequence() {
136
+ const info = await this.jsm.streams.info(this.config.stream);
137
+ return info.state.last_seq;
138
+ }
139
+ async getEventCount() {
140
+ const info = await this.jsm.streams.info(this.config.stream);
141
+ return info.state.messages;
142
+ }
143
+ async close() {
144
+ if (this.closed)
145
+ return;
146
+ this.closed = true;
147
+ await this.nc.drain().catch(() => { });
148
+ await this.nc.close().catch(() => { });
149
+ }
150
+ }
151
+ //# sourceMappingURL=nats-trace-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nats-trace-source.js","sourceRoot":"","sources":["../../../src/trace-analyzer/nats-trace-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { Finding } from "./signals/types.js";
2
+ /** A generated output: rule, policy, or pattern. */
3
+ export type GeneratedOutput = {
4
+ /** Output ID (UUIDv4). */
5
+ id: string;
6
+ /** Type of output. */
7
+ type: "soul_rule" | "governance_policy" | "cortex_pattern";
8
+ /** The generated content. */
9
+ content: string;
10
+ /** Finding IDs that produced this output. */
11
+ sourceFindings: string[];
12
+ /** Number of observations across findings. */
13
+ observationCount: number;
14
+ /** Confidence (average of source finding confidences). */
15
+ confidence: number;
16
+ };
17
+ /**
18
+ * Generate outputs from classified findings (Stage 3).
19
+ *
20
+ * Groups findings by classification.actionType and produces:
21
+ * - SOUL.md rules (soul_rule) — R-021
22
+ * - Governance policies (governance_policy) — R-022
23
+ * - Cortex patterns (cortex_pattern) — R-023
24
+ * - manual_review findings produce no output (appear in report only)
25
+ *
26
+ * Findings without classification are skipped.
27
+ */
28
+ export declare function generateOutputs(findings: Finding[]): GeneratedOutput[];
29
+ //# sourceMappingURL=output-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-generator.d.ts","sourceRoot":"","sources":["../../../src/trace-analyzer/output-generator.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,oBAAoB,CAAC;AAE5D,oDAAoD;AACpD,MAAM,MAAM,eAAe,GAAG;IAC5B,0BAA0B;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,sBAAsB;IACtB,IAAI,EAAE,WAAW,GAAG,mBAAmB,GAAG,gBAAgB,CAAC;IAC3D,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,8CAA8C;IAC9C,gBAAgB,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AA0IF;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,eAAe,EAAE,CAStE"}
@@ -0,0 +1,142 @@
1
+ // ============================================================
2
+ // Trace Analyzer — Output Generator (Stage 3)
3
+ // ============================================================
4
+ //
5
+ // Groups classified findings by actionType and generates
6
+ // SOUL.md rules, governance policies, and Cortex patterns.
7
+ // Implements R-019, R-021, R-022, R-023.
8
+ // ============================================================
9
+ import { randomUUID } from "node:crypto";
10
+ // ---- Helpers ----
11
+ function average(values) {
12
+ if (values.length === 0)
13
+ return 0;
14
+ return values.reduce((sum, v) => sum + v, 0) / values.length;
15
+ }
16
+ /**
17
+ * Group findings by a similarity key derived from their actionText.
18
+ * Simple approach: normalize whitespace and lowercase first 80 chars.
19
+ */
20
+ function groupByActionText(findings) {
21
+ const groups = new Map();
22
+ for (const f of findings) {
23
+ const key = (f.classification?.actionText ?? "")
24
+ .toLowerCase()
25
+ .replace(/\s+/g, " ")
26
+ .trim()
27
+ .slice(0, 80);
28
+ let group = groups.get(key);
29
+ if (!group) {
30
+ group = [];
31
+ groups.set(key, group);
32
+ }
33
+ group.push(f);
34
+ }
35
+ return [...groups.values()];
36
+ }
37
+ // ---- SOUL.md Rule Generation (R-021) ----
38
+ /**
39
+ * Format: "NIEMALS X — stattdessen Y. [Grund: Z, {N}× beobachtet in Traces, Findings: abc, def]"
40
+ */
41
+ function formatSoulRule(actionText, observationCount, findingIds) {
42
+ const idRef = findingIds.slice(0, 3).map(id => id.slice(0, 8)).join(", ");
43
+ return `${actionText} [${observationCount}× beobachtet in Traces, Findings: ${idRef}]`;
44
+ }
45
+ function generateSoulRules(findings) {
46
+ const ruleFindings = findings.filter(f => f.classification?.actionType === "soul_rule");
47
+ if (ruleFindings.length === 0)
48
+ return [];
49
+ const grouped = groupByActionText(ruleFindings);
50
+ return grouped.map(group => {
51
+ const primary = group[0].classification;
52
+ const count = group.length;
53
+ const findingIds = group.map(f => f.id);
54
+ const ruleText = formatSoulRule(primary.actionText, count, findingIds);
55
+ return {
56
+ id: randomUUID(),
57
+ type: "soul_rule",
58
+ content: ruleText,
59
+ sourceFindings: findingIds,
60
+ observationCount: count,
61
+ confidence: average(group.map(f => f.classification.confidence)),
62
+ };
63
+ });
64
+ }
65
+ // ---- Governance Policy Generation (R-022) ----
66
+ function inferHooksFromSignal(signal) {
67
+ switch (signal) {
68
+ case "SIG-DOOM-LOOP":
69
+ case "SIG-TOOL-FAIL":
70
+ return ["before_tool_call"];
71
+ case "SIG-HALLUCINATION":
72
+ case "SIG-UNVERIFIED-CLAIM":
73
+ return ["message_sending"];
74
+ default:
75
+ return ["message_sent"];
76
+ }
77
+ }
78
+ function generateGovernancePolicies(findings) {
79
+ const policyFindings = findings.filter(f => f.classification?.actionType === "governance_policy");
80
+ return policyFindings.map(f => {
81
+ const classification = f.classification;
82
+ const policy = {
83
+ id: `trace-gen-${f.signal.signal.toLowerCase().replace(/[^a-z0-9]/g, "-")}-${f.id.slice(0, 8)}`,
84
+ name: `Auto: ${f.signal.summary.slice(0, 60)}`,
85
+ version: "1.0.0",
86
+ description: `Auto-generated from trace analysis finding ${f.id}. Root cause: ${classification.rootCause}`,
87
+ scope: { hooks: inferHooksFromSignal(f.signal.signal) },
88
+ rules: [{
89
+ id: `rule-${f.id.slice(0, 8)}`,
90
+ description: classification.actionText,
91
+ conditions: { signal: f.signal.signal, severity: f.signal.severity },
92
+ effect: {
93
+ action: "audit",
94
+ reason: classification.actionText,
95
+ },
96
+ }],
97
+ };
98
+ return {
99
+ id: randomUUID(),
100
+ type: "governance_policy",
101
+ content: JSON.stringify(policy, null, 2),
102
+ sourceFindings: [f.id],
103
+ observationCount: 1,
104
+ confidence: classification.confidence,
105
+ };
106
+ });
107
+ }
108
+ // ---- Cortex Pattern Generation (R-023) ----
109
+ function generateCortexPatterns(findings) {
110
+ const patternFindings = findings.filter(f => f.classification?.actionType === "cortex_pattern");
111
+ return patternFindings.map(f => ({
112
+ id: randomUUID(),
113
+ type: "cortex_pattern",
114
+ content: f.classification.actionText,
115
+ sourceFindings: [f.id],
116
+ observationCount: 1,
117
+ confidence: f.classification.confidence,
118
+ }));
119
+ }
120
+ // ---- Public API ----
121
+ /**
122
+ * Generate outputs from classified findings (Stage 3).
123
+ *
124
+ * Groups findings by classification.actionType and produces:
125
+ * - SOUL.md rules (soul_rule) — R-021
126
+ * - Governance policies (governance_policy) — R-022
127
+ * - Cortex patterns (cortex_pattern) — R-023
128
+ * - manual_review findings produce no output (appear in report only)
129
+ *
130
+ * Findings without classification are skipped.
131
+ */
132
+ export function generateOutputs(findings) {
133
+ const classified = findings.filter(f => f.classification !== null);
134
+ if (classified.length === 0)
135
+ return [];
136
+ return [
137
+ ...generateSoulRules(classified),
138
+ ...generateGovernancePolicies(classified),
139
+ ...generateCortexPatterns(classified),
140
+ ];
141
+ }
142
+ //# sourceMappingURL=output-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-generator.js","sourceRoot":"","sources":["../../../src/trace-analyzer/output-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { ConversationChain } from "./chain-reconstructor.js";
2
+ /**
3
+ * Redact sensitive data from a text string.
4
+ *
5
+ * Applies built-in patterns first, then custom patterns from config.
6
+ * Invalid custom regex patterns are silently skipped.
7
+ */
8
+ export declare function redactText(text: string, customPatterns?: string[]): string;
9
+ /**
10
+ * Redact all text fields in a ConversationChain.
11
+ * Returns a new chain with redacted payloads — does NOT mutate the original.
12
+ */
13
+ export declare function redactChain(chain: ConversationChain, customPatterns?: string[]): ConversationChain;
14
+ //# sourceMappingURL=redactor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redactor.d.ts","sourceRoot":"","sources":["../../../src/trace-analyzer/redactor.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAoDlE;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,GAAE,MAAM,EAAO,GAAG,MAAM,CAiB9E;AAyDD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,iBAAiB,EACxB,cAAc,GAAE,MAAM,EAAO,GAC5B,iBAAiB,CAQnB"}
@@ -0,0 +1,137 @@
1
+ // ============================================================
2
+ // Trace Analyzer — Credential Redaction Pipeline
3
+ // ============================================================
4
+ //
5
+ // Redacts credentials, API keys, passwords, tokens, and other
6
+ // sensitive data from traces BEFORE they are sent to LLMs or
7
+ // written to disk. Implements R-011, R-035, R-036.
8
+ // ============================================================
9
+ /**
10
+ * Built-in redaction patterns covering common credential formats.
11
+ * Recreated per call to avoid lastIndex state issues with global regexes.
12
+ */
13
+ function builtinRules() {
14
+ return [
15
+ // API keys: OpenAI (sk-...), Stripe (pk_live_/pk_test_)
16
+ {
17
+ pattern: /\b(?:sk-|pk_(?:live|test)_)[A-Za-z0-9_-]{20,}/g,
18
+ replacement: "[REDACTED_API_KEY]",
19
+ },
20
+ // Bearer tokens
21
+ {
22
+ pattern: /Bearer\s+[A-Za-z0-9_.-]{20,}/g,
23
+ replacement: "Bearer [REDACTED_TOKEN]",
24
+ },
25
+ // Passwords in URLs: ://user:password@host
26
+ {
27
+ pattern: /:\/\/([^:\s]+):([^@\s]+)@/g,
28
+ replacement: "://$1:[REDACTED]@",
29
+ },
30
+ // Environment variable values with sensitive names
31
+ {
32
+ pattern: /((?:PASSWORD|SECRET|TOKEN|KEY|CREDENTIAL|API_KEY)\s*=\s*)\S+/gi,
33
+ replacement: "$1[REDACTED]",
34
+ },
35
+ // PEM key blocks (private keys, RSA keys, etc.)
36
+ {
37
+ pattern: /-----BEGIN [A-Z ]*(?:PRIVATE |RSA )?KEY-----[\s\S]*?-----END [A-Z ]*KEY-----/g,
38
+ replacement: "[REDACTED_PEM_BLOCK]",
39
+ },
40
+ // GitHub tokens (ghp_, ghs_)
41
+ {
42
+ pattern: /\bgh[ps]_[A-Za-z0-9]{36,}/g,
43
+ replacement: "[REDACTED_GH_TOKEN]",
44
+ },
45
+ // JWT tokens (three base64url segments separated by dots)
46
+ {
47
+ pattern: /\beyJ[A-Za-z0-9_-]{20,}\.eyJ[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{20,}/g,
48
+ replacement: "[REDACTED_JWT]",
49
+ },
50
+ ];
51
+ }
52
+ /**
53
+ * Redact sensitive data from a text string.
54
+ *
55
+ * Applies built-in patterns first, then custom patterns from config.
56
+ * Invalid custom regex patterns are silently skipped.
57
+ */
58
+ export function redactText(text, customPatterns = []) {
59
+ let result = text;
60
+ for (const { pattern, replacement } of builtinRules()) {
61
+ result = result.replace(pattern, replacement);
62
+ }
63
+ for (const patternStr of customPatterns) {
64
+ try {
65
+ const regex = new RegExp(patternStr, "g");
66
+ result = result.replace(regex, "[REDACTED]");
67
+ }
68
+ catch {
69
+ // Invalid regex — skip silently
70
+ }
71
+ }
72
+ return result;
73
+ }
74
+ /**
75
+ * Deep-redact an unknown value.
76
+ * Strings → direct redact. Objects → JSON stringify, redact, parse back.
77
+ * Primitives pass through unchanged.
78
+ */
79
+ function redactUnknown(value, customPatterns) {
80
+ if (typeof value === "string")
81
+ return redactText(value, customPatterns);
82
+ if (typeof value === "object" && value !== null) {
83
+ const str = JSON.stringify(value);
84
+ const redacted = redactText(str, customPatterns);
85
+ try {
86
+ return JSON.parse(redacted);
87
+ }
88
+ catch {
89
+ return redacted;
90
+ }
91
+ }
92
+ return value;
93
+ }
94
+ /** Redact all text fields in a NormalizedPayload. */
95
+ function redactPayload(payload, customPatterns) {
96
+ const result = { ...payload };
97
+ if (result.content !== undefined) {
98
+ result.content = redactText(result.content, customPatterns);
99
+ }
100
+ if (result.toolError !== undefined) {
101
+ result.toolError = redactText(result.toolError, customPatterns);
102
+ }
103
+ if (result.toolResult !== undefined) {
104
+ result.toolResult = redactUnknown(result.toolResult, customPatterns);
105
+ }
106
+ if (result.toolParams !== undefined) {
107
+ const redactedParams = {};
108
+ for (const [key, value] of Object.entries(result.toolParams)) {
109
+ redactedParams[key] = redactUnknown(value, customPatterns);
110
+ }
111
+ result.toolParams = redactedParams;
112
+ }
113
+ if (result.from !== undefined) {
114
+ result.from = redactText(result.from, customPatterns);
115
+ }
116
+ if (result.error !== undefined) {
117
+ result.error = redactText(result.error, customPatterns);
118
+ }
119
+ if (result.prompt !== undefined) {
120
+ result.prompt = redactText(result.prompt, customPatterns);
121
+ }
122
+ return result;
123
+ }
124
+ /**
125
+ * Redact all text fields in a ConversationChain.
126
+ * Returns a new chain with redacted payloads — does NOT mutate the original.
127
+ */
128
+ export function redactChain(chain, customPatterns = []) {
129
+ return {
130
+ ...chain,
131
+ events: chain.events.map(event => ({
132
+ ...event,
133
+ payload: redactPayload(event.payload, customPatterns),
134
+ })),
135
+ };
136
+ }
137
+ //# sourceMappingURL=redactor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redactor.js","sourceRoot":"","sources":["../../../src/trace-analyzer/redactor.ts"],"names":[],"mappings":"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"}