@auxiora/runtime 1.10.1 → 1.10.6

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 (57) hide show
  1. package/dist/__tests__/telemetry-wiring.test.d.ts +2 -0
  2. package/dist/__tests__/telemetry-wiring.test.d.ts.map +1 -0
  3. package/dist/__tests__/telemetry-wiring.test.js +61 -0
  4. package/dist/__tests__/telemetry-wiring.test.js.map +1 -0
  5. package/dist/confidence.d.ts +46 -0
  6. package/dist/confidence.d.ts.map +1 -0
  7. package/dist/confidence.js +112 -0
  8. package/dist/confidence.js.map +1 -0
  9. package/dist/enrichment/__tests__/integration.test.js +10 -0
  10. package/dist/enrichment/__tests__/integration.test.js.map +1 -1
  11. package/dist/enrichment/__tests__/telemetry-stage.test.d.ts +2 -0
  12. package/dist/enrichment/__tests__/telemetry-stage.test.d.ts.map +1 -0
  13. package/dist/enrichment/__tests__/telemetry-stage.test.js +61 -0
  14. package/dist/enrichment/__tests__/telemetry-stage.test.js.map +1 -0
  15. package/dist/enrichment/index.d.ts +5 -0
  16. package/dist/enrichment/index.d.ts.map +1 -1
  17. package/dist/enrichment/index.js +3 -0
  18. package/dist/enrichment/index.js.map +1 -1
  19. package/dist/enrichment/stages/group-context-stage.d.ts +8 -0
  20. package/dist/enrichment/stages/group-context-stage.d.ts.map +1 -0
  21. package/dist/enrichment/stages/group-context-stage.js +24 -0
  22. package/dist/enrichment/stages/group-context-stage.js.map +1 -0
  23. package/dist/enrichment/stages/learning-stage.d.ts +17 -0
  24. package/dist/enrichment/stages/learning-stage.d.ts.map +1 -0
  25. package/dist/enrichment/stages/learning-stage.js +37 -0
  26. package/dist/enrichment/stages/learning-stage.js.map +1 -0
  27. package/dist/enrichment/stages/telemetry-stage.d.ts +18 -0
  28. package/dist/enrichment/stages/telemetry-stage.d.ts.map +1 -0
  29. package/dist/enrichment/stages/telemetry-stage.js +39 -0
  30. package/dist/enrichment/stages/telemetry-stage.js.map +1 -0
  31. package/dist/enrichment/types.d.ts +6 -0
  32. package/dist/enrichment/types.d.ts.map +1 -1
  33. package/dist/index.d.ts +12 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +288 -26
  36. package/dist/index.js.map +1 -1
  37. package/dist/queue-wiring.d.ts +73 -0
  38. package/dist/queue-wiring.d.ts.map +1 -0
  39. package/dist/queue-wiring.js +71 -0
  40. package/dist/queue-wiring.js.map +1 -0
  41. package/dist/response-provenance.d.ts +70 -0
  42. package/dist/response-provenance.d.ts.map +1 -0
  43. package/dist/response-provenance.js +115 -0
  44. package/dist/response-provenance.js.map +1 -0
  45. package/dist/source-attribution.d.ts +55 -0
  46. package/dist/source-attribution.d.ts.map +1 -0
  47. package/dist/source-attribution.js +107 -0
  48. package/dist/source-attribution.js.map +1 -0
  49. package/dist/telemetry-wiring.d.ts +28 -0
  50. package/dist/telemetry-wiring.d.ts.map +1 -0
  51. package/dist/telemetry-wiring.js +31 -0
  52. package/dist/telemetry-wiring.js.map +1 -0
  53. package/dist/user-model-export.d.ts +109 -0
  54. package/dist/user-model-export.d.ts.map +1 -0
  55. package/dist/user-model-export.js +88 -0
  56. package/dist/user-model-export.js.map +1 -0
  57. package/package.json +77 -72
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=telemetry-wiring.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-wiring.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/telemetry-wiring.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,61 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { wireTelemetry } from '../telemetry-wiring.js';
3
+ describe('wireTelemetry', () => {
4
+ it('records completed jobs to telemetry tracker', () => {
5
+ const tracker = { recordJob: vi.fn() };
6
+ const emitter = { on: vi.fn() };
7
+ wireTelemetry(emitter, tracker);
8
+ const completedHandler = emitter.on.mock.calls.find((c) => c[0] === 'job:completed');
9
+ expect(completedHandler).toBeTruthy();
10
+ completedHandler[1]({
11
+ job: { id: 'j1', type: 'behavior', status: 'completed', createdAt: Date.now() - 5000, completedAt: Date.now() },
12
+ result: {},
13
+ });
14
+ expect(tracker.recordJob).toHaveBeenCalledWith(expect.objectContaining({
15
+ type: 'behavior',
16
+ success: true,
17
+ jobId: 'j1',
18
+ }));
19
+ });
20
+ it('records failed jobs to telemetry tracker', () => {
21
+ const tracker = { recordJob: vi.fn() };
22
+ const emitter = { on: vi.fn() };
23
+ wireTelemetry(emitter, tracker);
24
+ const failedHandler = emitter.on.mock.calls.find((c) => c[0] === 'job:failed');
25
+ failedHandler[1]({
26
+ job: { id: 'j2', type: 'react', status: 'failed', createdAt: Date.now() - 1000, completedAt: Date.now() },
27
+ error: new Error('timeout'),
28
+ });
29
+ expect(tracker.recordJob).toHaveBeenCalledWith(expect.objectContaining({
30
+ type: 'react',
31
+ success: false,
32
+ jobId: 'j2',
33
+ error: 'timeout',
34
+ }));
35
+ });
36
+ it('records dead jobs with default message when no error provided', () => {
37
+ const tracker = { recordJob: vi.fn() };
38
+ const emitter = { on: vi.fn() };
39
+ wireTelemetry(emitter, tracker);
40
+ const deadHandler = emitter.on.mock.calls.find((c) => c[0] === 'job:dead');
41
+ deadHandler[1]({
42
+ job: { id: 'j3', type: 'workflow', status: 'dead', createdAt: Date.now() - 2000, completedAt: Date.now() },
43
+ });
44
+ expect(tracker.recordJob).toHaveBeenCalledWith(expect.objectContaining({
45
+ type: 'workflow',
46
+ success: false,
47
+ jobId: 'j3',
48
+ error: 'dead letter',
49
+ }));
50
+ });
51
+ it('registers listeners for all three event types', () => {
52
+ const tracker = { recordJob: vi.fn() };
53
+ const emitter = { on: vi.fn() };
54
+ wireTelemetry(emitter, tracker);
55
+ const events = emitter.on.mock.calls.map((c) => c[0]);
56
+ expect(events).toContain('job:completed');
57
+ expect(events).toContain('job:failed');
58
+ expect(events).toContain('job:dead');
59
+ });
60
+ });
61
+ //# sourceMappingURL=telemetry-wiring.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-wiring.test.js","sourceRoot":"","sources":["../../src/__tests__/telemetry-wiring.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ export type ConfidenceLevel = 'low' | 'medium' | 'high';
2
+ export type KnowledgeSource = 'user_data' | 'inference' | 'generation' | 'tool_result' | 'search_result';
3
+ export interface ConfidenceSignal {
4
+ /** What type of signal this is */
5
+ source: KnowledgeSource;
6
+ /** Confidence from this signal (0-1) */
7
+ confidence: number;
8
+ /** Description of the evidence */
9
+ evidence: string;
10
+ }
11
+ export interface ConfidenceAssessment {
12
+ /** Overall confidence level */
13
+ level: ConfidenceLevel;
14
+ /** Numeric score (0-1) */
15
+ score: number;
16
+ /** Human-readable explanation */
17
+ explanation: string;
18
+ /** Individual signals that contributed */
19
+ signals: ConfidenceSignal[];
20
+ /** Source breakdown: what percentage of the response came from each source type */
21
+ sourceBreakdown: Record<KnowledgeSource, number>;
22
+ /** Uncertainty markers for display */
23
+ uncertaintyMarkers: UncertaintyMarker[];
24
+ }
25
+ export interface UncertaintyMarker {
26
+ /** The response segment this applies to */
27
+ segmentHint: string;
28
+ /** What kind of knowledge this is */
29
+ source: KnowledgeSource;
30
+ /** Human-readable label */
31
+ label: string;
32
+ }
33
+ export declare class ConfidenceAssessor {
34
+ /**
35
+ * Assess confidence for a response based on available signals.
36
+ */
37
+ assess(signals: ConfidenceSignal[]): ConfidenceAssessment;
38
+ /** Quick assessment for a fully-generated response with no grounding */
39
+ assessGenerated(): ConfidenceAssessment;
40
+ /** Convert a numeric score to a level */
41
+ scoreToLevel(score: number): ConfidenceLevel;
42
+ private buildMarkers;
43
+ private buildExplanation;
44
+ private defaultAssessment;
45
+ }
46
+ //# sourceMappingURL=confidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confidence.d.ts","sourceRoot":"","sources":["../src/confidence.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AACxD,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,aAAa,GAAG,eAAe,CAAC;AAEzG,MAAM,WAAW,gBAAgB;IAC/B,kCAAkC;IAClC,MAAM,EAAE,eAAe,CAAC;IACxB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,+BAA+B;IAC/B,KAAK,EAAE,eAAe,CAAC;IACvB,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,mFAAmF;IACnF,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IACjD,sCAAsC;IACtC,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,iBAAiB;IAChC,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,MAAM,EAAE,eAAe,CAAC;IACxB,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,kBAAkB;IAC7B;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,oBAAoB;IAoDzD,wEAAwE;IACxE,eAAe,IAAI,oBAAoB;IAQvC,yCAAyC;IACzC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe;IAM5C,OAAO,CAAC,YAAY;IAyBpB,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,iBAAiB;CAU1B"}
@@ -0,0 +1,112 @@
1
+ import { getLogger } from '@auxiora/logger';
2
+ const logger = getLogger('runtime:confidence');
3
+ export class ConfidenceAssessor {
4
+ /**
5
+ * Assess confidence for a response based on available signals.
6
+ */
7
+ assess(signals) {
8
+ if (signals.length === 0) {
9
+ return this.defaultAssessment();
10
+ }
11
+ // Weighted average: user_data and tool_result weigh more than generation
12
+ const weights = {
13
+ user_data: 1.5,
14
+ tool_result: 1.3,
15
+ search_result: 1.2,
16
+ inference: 0.8,
17
+ generation: 0.5,
18
+ };
19
+ let weightedSum = 0;
20
+ let totalWeight = 0;
21
+ const sourceCounts = {};
22
+ for (const signal of signals) {
23
+ const weight = weights[signal.source] ?? 1;
24
+ weightedSum += signal.confidence * weight;
25
+ totalWeight += weight;
26
+ sourceCounts[signal.source] = (sourceCounts[signal.source] ?? 0) + 1;
27
+ }
28
+ const score = totalWeight > 0 ? weightedSum / totalWeight : 0.5;
29
+ const level = this.scoreToLevel(score);
30
+ // Build source breakdown (percentage)
31
+ const sourceBreakdown = {};
32
+ for (const [source, count] of Object.entries(sourceCounts)) {
33
+ sourceBreakdown[source] = count / signals.length;
34
+ }
35
+ // Build uncertainty markers
36
+ const markers = this.buildMarkers(signals);
37
+ // Build explanation
38
+ const explanation = this.buildExplanation(level, score, signals);
39
+ logger.debug('Confidence assessed', { level, score: score.toFixed(2), signalCount: signals.length });
40
+ return {
41
+ level,
42
+ score: Math.round(score * 100) / 100,
43
+ explanation,
44
+ signals,
45
+ sourceBreakdown: sourceBreakdown,
46
+ uncertaintyMarkers: markers,
47
+ };
48
+ }
49
+ /** Quick assessment for a fully-generated response with no grounding */
50
+ assessGenerated() {
51
+ return this.assess([{
52
+ source: 'generation',
53
+ confidence: 0.5,
54
+ evidence: 'Response generated from model knowledge',
55
+ }]);
56
+ }
57
+ /** Convert a numeric score to a level */
58
+ scoreToLevel(score) {
59
+ if (score >= 0.7)
60
+ return 'high';
61
+ if (score >= 0.4)
62
+ return 'medium';
63
+ return 'low';
64
+ }
65
+ buildMarkers(signals) {
66
+ const markers = [];
67
+ const sourceLabels = {
68
+ user_data: 'Based on your data',
69
+ inference: 'Inferred from context',
70
+ generation: 'AI generated',
71
+ tool_result: 'From tool output',
72
+ search_result: 'From web search',
73
+ };
74
+ // Group by source type and create one marker per type
75
+ const seen = new Set();
76
+ for (const signal of signals) {
77
+ if (seen.has(signal.source))
78
+ continue;
79
+ seen.add(signal.source);
80
+ markers.push({
81
+ segmentHint: signal.evidence,
82
+ source: signal.source,
83
+ label: sourceLabels[signal.source] ?? signal.source,
84
+ });
85
+ }
86
+ return markers;
87
+ }
88
+ buildExplanation(level, score, signals) {
89
+ const pct = Math.round(score * 100);
90
+ const sources = [...new Set(signals.map(s => s.source))];
91
+ const sourceStr = sources.join(', ');
92
+ switch (level) {
93
+ case 'high':
94
+ return `High confidence (${pct}%) — grounded in ${sourceStr}`;
95
+ case 'medium':
96
+ return `Medium confidence (${pct}%) — partially grounded in ${sourceStr}`;
97
+ case 'low':
98
+ return `Low confidence (${pct}%) — mostly generated, limited grounding`;
99
+ }
100
+ }
101
+ defaultAssessment() {
102
+ return {
103
+ level: 'low',
104
+ score: 0.5,
105
+ explanation: 'No confidence signals available',
106
+ signals: [],
107
+ sourceBreakdown: {},
108
+ uncertaintyMarkers: [],
109
+ };
110
+ }
111
+ }
112
+ //# sourceMappingURL=confidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confidence.js","sourceRoot":"","sources":["../src/confidence.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { EnrichmentPipeline } from '../pipeline.js';
3
3
  import { MemoryStage } from '../stages/memory-stage.js';
4
4
  import { ArchitectStage } from '../stages/architect-stage.js';
5
5
  import { SelfAwarenessStage } from '../stages/self-awareness-stage.js';
6
+ import { TelemetryStage } from '../stages/telemetry-stage.js';
6
7
  function makeCtx(overrides = {}) {
7
8
  return {
8
9
  basePrompt: 'You are Auxiora.',
@@ -65,6 +66,15 @@ describe('EnrichmentPipeline integration', () => {
65
66
  expect(result.prompt).toContain('[Security Expert Mode]');
66
67
  expect(result.prompt).toContain('[Dynamic Self-Awareness]');
67
68
  });
69
+ it('includes telemetry warnings in enriched prompt when tools are flagged', async () => {
70
+ const pipeline = new EnrichmentPipeline();
71
+ pipeline.addStage(new TelemetryStage(() => [
72
+ { tool: 'provider.complete', totalCalls: 20, successRate: 0.3, lastError: 'rate limited' },
73
+ ]));
74
+ const result = await pipeline.run(makeCtx());
75
+ expect(result.prompt).toContain('[Operational Telemetry]');
76
+ expect(result.metadata.stages).toContain('telemetry');
77
+ });
68
78
  it('skips architect stage for non-architect personality', async () => {
69
79
  const pipeline = new EnrichmentPipeline();
70
80
  const architect = { generatePrompt: vi.fn(), getTraitMix: vi.fn() };
@@ -1 +1 @@
1
- {"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../../src/enrichment/__tests__/integration.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../../src/enrichment/__tests__/integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=telemetry-stage.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-stage.test.d.ts","sourceRoot":"","sources":["../../../src/enrichment/__tests__/telemetry-stage.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,61 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { TelemetryStage } from '../stages/telemetry-stage.js';
3
+ function makeCtx(overrides) {
4
+ return {
5
+ basePrompt: 'You are Auxiora.',
6
+ userMessage: 'hello',
7
+ history: [],
8
+ channelType: 'webchat',
9
+ chatId: 'c1',
10
+ sessionId: 's1',
11
+ userId: 'u1',
12
+ toolsUsed: [],
13
+ config: {},
14
+ ...overrides,
15
+ };
16
+ }
17
+ describe('TelemetryStage', () => {
18
+ it('has order 50 (before all other stages)', () => {
19
+ const stage = new TelemetryStage(() => []);
20
+ expect(stage.order).toBe(50);
21
+ expect(stage.name).toBe('telemetry');
22
+ });
23
+ it('appends nothing when no flagged tools', async () => {
24
+ const stage = new TelemetryStage(() => []);
25
+ const result = await stage.enrich(makeCtx(), 'base prompt');
26
+ expect(result.prompt).toBe('base prompt');
27
+ });
28
+ it('appends warning section when a tool is flagged', async () => {
29
+ const flagged = [
30
+ { tool: 'provider.complete', totalCalls: 20, successRate: 0.4, lastError: 'rate limited' },
31
+ ];
32
+ const stage = new TelemetryStage(() => flagged);
33
+ // Must call enabled() first to cache stats
34
+ stage.enabled(makeCtx());
35
+ const result = await stage.enrich(makeCtx(), 'base prompt');
36
+ expect(result.prompt).toContain('[Operational Telemetry]');
37
+ expect(result.prompt).toContain('provider.complete');
38
+ expect(result.prompt).toContain('40%');
39
+ expect(result.prompt).toContain('rate limited');
40
+ });
41
+ it('includes metadata with flagged tool names', async () => {
42
+ const flagged = [
43
+ { tool: 'memory.search', totalCalls: 10, successRate: 0.3, lastError: 'timeout' },
44
+ ];
45
+ const stage = new TelemetryStage(() => flagged);
46
+ stage.enabled(makeCtx());
47
+ const result = await stage.enrich(makeCtx(), 'base');
48
+ expect(result.metadata?.flaggedTools).toContain('memory.search');
49
+ });
50
+ it('is disabled when getter returns empty array', () => {
51
+ const stage = new TelemetryStage(() => []);
52
+ expect(stage.enabled(makeCtx())).toBe(false);
53
+ });
54
+ it('is enabled when there are flagged tools', () => {
55
+ const stage = new TelemetryStage(() => [
56
+ { tool: 'x', totalCalls: 10, successRate: 0.3, lastError: '' },
57
+ ]);
58
+ expect(stage.enabled(makeCtx())).toBe(true);
59
+ });
60
+ });
61
+ //# sourceMappingURL=telemetry-stage.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-stage.test.js","sourceRoot":"","sources":["../../../src/enrichment/__tests__/telemetry-stage.test.ts"],"names":[],"mappings":"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"}
@@ -5,4 +5,9 @@ export { ModeStage } from './stages/mode-stage.js';
5
5
  export { ArchitectStage } from './stages/architect-stage.js';
6
6
  export { SelfAwarenessStage } from './stages/self-awareness-stage.js';
7
7
  export { ModelIdentityStage } from './stages/model-identity-stage.js';
8
+ export { GroupContextStage } from './stages/group-context-stage.js';
9
+ export { TelemetryStage } from './stages/telemetry-stage.js';
10
+ export type { TelemetryStatsLike } from './stages/telemetry-stage.js';
11
+ export { LearningStage } from './stages/learning-stage.js';
12
+ export type { LearningLike } from './stages/learning-stage.js';
8
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/enrichment/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACnH,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/enrichment/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACnH,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,YAAY,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC"}
@@ -4,4 +4,7 @@ export { ModeStage } from './stages/mode-stage.js';
4
4
  export { ArchitectStage } from './stages/architect-stage.js';
5
5
  export { SelfAwarenessStage } from './stages/self-awareness-stage.js';
6
6
  export { ModelIdentityStage } from './stages/model-identity-stage.js';
7
+ export { GroupContextStage } from './stages/group-context-stage.js';
8
+ export { TelemetryStage } from './stages/telemetry-stage.js';
9
+ export { LearningStage } from './stages/learning-stage.js';
7
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/enrichment/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/enrichment/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { EnrichmentContext, EnrichmentStage, StageResult } from '../types.js';
2
+ export declare class GroupContextStage implements EnrichmentStage {
3
+ readonly name = "group-context";
4
+ readonly order = 150;
5
+ enabled(ctx: EnrichmentContext): boolean;
6
+ enrich(ctx: EnrichmentContext, currentPrompt: string): Promise<StageResult>;
7
+ }
8
+ //# sourceMappingURL=group-context-stage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-context-stage.d.ts","sourceRoot":"","sources":["../../../src/enrichment/stages/group-context-stage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEnF,qBAAa,iBAAkB,YAAW,eAAe;IACvD,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,KAAK,OAAO;IAErB,OAAO,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO;IAIlC,MAAM,CAAC,GAAG,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAsBlF"}
@@ -0,0 +1,24 @@
1
+ export class GroupContextStage {
2
+ name = 'group-context';
3
+ order = 150;
4
+ enabled(ctx) {
5
+ return ctx.groupContext?.isGroup === true;
6
+ }
7
+ async enrich(ctx, currentPrompt) {
8
+ const parts = ['You are in a group chat'];
9
+ if (ctx.groupContext?.groupName) {
10
+ parts[0] += ` called "${ctx.groupContext.groupName}"`;
11
+ }
12
+ if (ctx.groupContext?.participantCount) {
13
+ parts.push(`with ~${ctx.groupContext.participantCount} participants`);
14
+ }
15
+ const instruction = [parts.join(' ') + '.'];
16
+ if (ctx.senderName) {
17
+ instruction.push(`The current speaker is ${ctx.senderName}. Address them by name.`);
18
+ }
19
+ instruction.push('Keep responses concise — group chats move fast.');
20
+ const section = '\n\n[Group Context]\n' + instruction.join(' ');
21
+ return { prompt: currentPrompt + section };
22
+ }
23
+ }
24
+ //# sourceMappingURL=group-context-stage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-context-stage.js","sourceRoot":"","sources":["../../../src/enrichment/stages/group-context-stage.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,iBAAiB;IACnB,IAAI,GAAG,eAAe,CAAC;IACvB,KAAK,GAAG,GAAG,CAAC;IAErB,OAAO,CAAC,GAAsB;QAC5B,OAAO,GAAG,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAsB,EAAE,aAAqB;QACxD,MAAM,KAAK,GAAa,CAAC,yBAAyB,CAAC,CAAC;QAEpD,IAAI,GAAG,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC;YAChC,KAAK,CAAC,CAAC,CAAC,IAAI,YAAY,GAAG,CAAC,YAAY,CAAC,SAAS,GAAG,CAAC;QACxD,CAAC;QAED,IAAI,GAAG,CAAC,YAAY,EAAE,gBAAgB,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,YAAY,CAAC,gBAAgB,eAAe,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QAE5C,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,WAAW,CAAC,IAAI,CAAC,0BAA0B,GAAG,CAAC,UAAU,yBAAyB,CAAC,CAAC;QACtF,CAAC;QAED,WAAW,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAEpE,MAAM,OAAO,GAAG,uBAAuB,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChE,OAAO,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,EAAE,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ import type { EnrichmentContext, EnrichmentStage, StageResult } from '../types.js';
2
+ /** Structural type — avoids importing @auxiora/telemetry directly */
3
+ export interface LearningLike {
4
+ readonly content: string;
5
+ readonly category: string;
6
+ readonly occurrences: number;
7
+ }
8
+ export declare class LearningStage implements EnrichmentStage {
9
+ private readonly getRecentLearnings;
10
+ readonly name = "learning";
11
+ readonly order = 55;
12
+ private cachedLearnings;
13
+ constructor(getRecentLearnings: () => LearningLike[]);
14
+ enabled(_ctx: EnrichmentContext): boolean;
15
+ enrich(_ctx: EnrichmentContext, currentPrompt: string): Promise<StageResult>;
16
+ }
17
+ //# sourceMappingURL=learning-stage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-stage.d.ts","sourceRoot":"","sources":["../../../src/enrichment/stages/learning-stage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEnF,qEAAqE;AACrE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,qBAAa,aAAc,YAAW,eAAe;IAOjD,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IANrC,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,KAAK,MAAM;IAEpB,OAAO,CAAC,eAAe,CAAsB;gBAG1B,kBAAkB,EAAE,MAAM,YAAY,EAAE;IAG3D,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO;IAKnC,MAAM,CAAC,IAAI,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CA2BnF"}
@@ -0,0 +1,37 @@
1
+ export class LearningStage {
2
+ getRecentLearnings;
3
+ name = 'learning';
4
+ order = 55;
5
+ cachedLearnings = [];
6
+ constructor(getRecentLearnings) {
7
+ this.getRecentLearnings = getRecentLearnings;
8
+ }
9
+ enabled(_ctx) {
10
+ this.cachedLearnings = this.getRecentLearnings();
11
+ return this.cachedLearnings.length > 0;
12
+ }
13
+ async enrich(_ctx, currentPrompt) {
14
+ const learnings = this.cachedLearnings.length > 0
15
+ ? this.cachedLearnings
16
+ : this.getRecentLearnings();
17
+ if (learnings.length === 0) {
18
+ return { prompt: currentPrompt };
19
+ }
20
+ const lines = ['[Learned Patterns]', 'Insights from previous tasks:'];
21
+ for (const l of learnings) {
22
+ let line = `- [${l.category}] ${l.content}`;
23
+ if (l.occurrences > 1) {
24
+ line += ` (seen ${l.occurrences}x)`;
25
+ }
26
+ lines.push(line);
27
+ }
28
+ lines.push('Apply these insights where relevant.');
29
+ lines.push('');
30
+ const section = lines.join('\n');
31
+ return {
32
+ prompt: currentPrompt + '\n\n' + section,
33
+ metadata: { learningCount: learnings.length },
34
+ };
35
+ }
36
+ }
37
+ //# sourceMappingURL=learning-stage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-stage.js","sourceRoot":"","sources":["../../../src/enrichment/stages/learning-stage.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,aAAa;IAOL;IANV,IAAI,GAAG,UAAU,CAAC;IAClB,KAAK,GAAG,EAAE,CAAC;IAEZ,eAAe,GAAmB,EAAE,CAAC;IAE7C,YACmB,kBAAwC;QAAxC,uBAAkB,GAAlB,kBAAkB,CAAsB;IACxD,CAAC;IAEJ,OAAO,CAAC,IAAuB;QAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAuB,EAAE,aAAqB;QACzD,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;YAC/C,CAAC,CAAC,IAAI,CAAC,eAAe;YACtB,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE9B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;QACnC,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,oBAAoB,EAAE,+BAA+B,CAAC,CAAC;QACtE,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;YAC5C,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;gBACtB,IAAI,IAAI,UAAU,CAAC,CAAC,WAAW,IAAI,CAAC;YACtC,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjC,OAAO;YACL,MAAM,EAAE,aAAa,GAAG,MAAM,GAAG,OAAO;YACxC,QAAQ,EAAE,EAAE,aAAa,EAAE,SAAS,CAAC,MAAM,EAAE;SAC9C,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import type { EnrichmentContext, EnrichmentStage, StageResult } from '../types.js';
2
+ /** Structural type — avoids importing @auxiora/telemetry directly */
3
+ export interface TelemetryStatsLike {
4
+ readonly tool: string;
5
+ readonly totalCalls: number;
6
+ readonly successRate: number;
7
+ readonly lastError: string;
8
+ }
9
+ export declare class TelemetryStage implements EnrichmentStage {
10
+ private readonly getFlaggedTools;
11
+ readonly name = "telemetry";
12
+ readonly order = 50;
13
+ private cachedStats;
14
+ constructor(getFlaggedTools: () => TelemetryStatsLike[]);
15
+ enabled(_ctx: EnrichmentContext): boolean;
16
+ enrich(_ctx: EnrichmentContext, currentPrompt: string): Promise<StageResult>;
17
+ }
18
+ //# sourceMappingURL=telemetry-stage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-stage.d.ts","sourceRoot":"","sources":["../../../src/enrichment/stages/telemetry-stage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEnF,qEAAqE;AACrE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAa,cAAe,YAAW,eAAe;IAOlD,OAAO,CAAC,QAAQ,CAAC,eAAe;IANlC,QAAQ,CAAC,IAAI,eAAe;IAC5B,QAAQ,CAAC,KAAK,MAAM;IAEpB,OAAO,CAAC,WAAW,CAA4B;gBAG5B,eAAe,EAAE,MAAM,kBAAkB,EAAE;IAG9D,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO;IAKnC,MAAM,CAAC,IAAI,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CA4BnF"}
@@ -0,0 +1,39 @@
1
+ export class TelemetryStage {
2
+ getFlaggedTools;
3
+ name = 'telemetry';
4
+ order = 50;
5
+ cachedStats = [];
6
+ constructor(getFlaggedTools) {
7
+ this.getFlaggedTools = getFlaggedTools;
8
+ }
9
+ enabled(_ctx) {
10
+ this.cachedStats = this.getFlaggedTools();
11
+ return this.cachedStats.length > 0;
12
+ }
13
+ async enrich(_ctx, currentPrompt) {
14
+ // Self-contained: re-fetch if enabled() wasn't called (defensive)
15
+ const stats = this.cachedStats.length > 0 ? this.cachedStats : this.getFlaggedTools();
16
+ if (stats.length === 0) {
17
+ return { prompt: currentPrompt };
18
+ }
19
+ const lines = ['[Operational Telemetry]', 'The following tools have degraded performance:'];
20
+ for (const s of stats) {
21
+ const pct = Math.round(s.successRate * 100);
22
+ let line = `- ${s.tool}: ${pct}% success rate (${s.totalCalls} calls)`;
23
+ if (s.lastError) {
24
+ line += ` — last error: ${s.lastError.slice(0, 150)}`;
25
+ }
26
+ lines.push(line);
27
+ }
28
+ lines.push('Consider alternative approaches if these tools fail.');
29
+ lines.push('');
30
+ const section = lines.join('\n');
31
+ return {
32
+ prompt: currentPrompt + '\n\n' + section,
33
+ metadata: {
34
+ flaggedTools: stats.map(s => s.tool),
35
+ },
36
+ };
37
+ }
38
+ }
39
+ //# sourceMappingURL=telemetry-stage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-stage.js","sourceRoot":"","sources":["../../../src/enrichment/stages/telemetry-stage.ts"],"names":[],"mappings":"AAUA,MAAM,OAAO,cAAc;IAON;IANV,IAAI,GAAG,WAAW,CAAC;IACnB,KAAK,GAAG,EAAE,CAAC;IAEZ,WAAW,GAAyB,EAAE,CAAC;IAE/C,YACmB,eAA2C;QAA3C,oBAAe,GAAf,eAAe,CAA4B;IAC3D,CAAC;IAEJ,OAAO,CAAC,IAAuB;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAuB,EAAE,aAAqB;QACzD,kEAAkE;QAClE,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QACtF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;QACnC,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,yBAAyB,EAAE,gDAAgD,CAAC,CAAC;QAC5F,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC;YAC5C,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,mBAAmB,CAAC,CAAC,UAAU,SAAS,CAAC;YACvE,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;gBAChB,IAAI,IAAI,kBAAkB,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YACxD,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACnE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjC,OAAO;YACL,MAAM,EAAE,aAAa,GAAG,MAAM,GAAG,OAAO;YACxC,QAAQ,EAAE;gBACR,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aACrC;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -15,6 +15,12 @@ export interface EnrichmentContext {
15
15
  success: boolean;
16
16
  }>;
17
17
  readonly config: Config;
18
+ readonly senderName?: string;
19
+ readonly groupContext?: {
20
+ readonly isGroup: boolean;
21
+ readonly groupName?: string;
22
+ readonly participantCount?: number;
23
+ };
18
24
  }
19
25
  export interface StageResult {
20
26
  readonly prompt: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/enrichment/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACtE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC;IACzC,MAAM,CAAC,GAAG,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAC7E;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC;QACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAC1B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACjC,CAAC;CACH"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/enrichment/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACtE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE;QACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;QAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;KACpC,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC;IACzC,MAAM,CAAC,GAAG,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAC7E;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC;QACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAC1B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACjC,CAAC;CACH"}