@auxiora/runtime 1.3.0 → 1.10.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 (105) hide show
  1. package/dist/enrichment/__tests__/architect-stage.test.d.ts +2 -0
  2. package/dist/enrichment/__tests__/architect-stage.test.d.ts.map +1 -0
  3. package/dist/enrichment/__tests__/architect-stage.test.js +189 -0
  4. package/dist/enrichment/__tests__/architect-stage.test.js.map +1 -0
  5. package/dist/enrichment/__tests__/integration.test.d.ts +2 -0
  6. package/dist/enrichment/__tests__/integration.test.d.ts.map +1 -0
  7. package/dist/enrichment/__tests__/integration.test.js +79 -0
  8. package/dist/enrichment/__tests__/integration.test.js.map +1 -0
  9. package/dist/enrichment/__tests__/memory-stage.test.d.ts +2 -0
  10. package/dist/enrichment/__tests__/memory-stage.test.d.ts.map +1 -0
  11. package/dist/enrichment/__tests__/memory-stage.test.js +43 -0
  12. package/dist/enrichment/__tests__/memory-stage.test.js.map +1 -0
  13. package/dist/enrichment/__tests__/mode-stage.test.d.ts +2 -0
  14. package/dist/enrichment/__tests__/mode-stage.test.d.ts.map +1 -0
  15. package/dist/enrichment/__tests__/mode-stage.test.js +139 -0
  16. package/dist/enrichment/__tests__/mode-stage.test.js.map +1 -0
  17. package/dist/enrichment/__tests__/model-identity-stage.test.d.ts +2 -0
  18. package/dist/enrichment/__tests__/model-identity-stage.test.d.ts.map +1 -0
  19. package/dist/enrichment/__tests__/model-identity-stage.test.js +74 -0
  20. package/dist/enrichment/__tests__/model-identity-stage.test.js.map +1 -0
  21. package/dist/enrichment/__tests__/pipeline.test.d.ts +2 -0
  22. package/dist/enrichment/__tests__/pipeline.test.d.ts.map +1 -0
  23. package/dist/enrichment/__tests__/pipeline.test.js +78 -0
  24. package/dist/enrichment/__tests__/pipeline.test.js.map +1 -0
  25. package/dist/enrichment/__tests__/self-awareness-stage.test.d.ts +2 -0
  26. package/dist/enrichment/__tests__/self-awareness-stage.test.d.ts.map +1 -0
  27. package/dist/enrichment/__tests__/self-awareness-stage.test.js +71 -0
  28. package/dist/enrichment/__tests__/self-awareness-stage.test.js.map +1 -0
  29. package/dist/enrichment/__tests__/types.test.d.ts +2 -0
  30. package/dist/enrichment/__tests__/types.test.d.ts.map +1 -0
  31. package/dist/enrichment/__tests__/types.test.js +31 -0
  32. package/dist/enrichment/__tests__/types.test.js.map +1 -0
  33. package/dist/enrichment/index.d.ts +8 -0
  34. package/dist/enrichment/index.d.ts.map +1 -0
  35. package/dist/enrichment/index.js +7 -0
  36. package/dist/enrichment/index.js.map +1 -0
  37. package/dist/enrichment/pipeline.d.ts +7 -0
  38. package/dist/enrichment/pipeline.d.ts.map +1 -0
  39. package/dist/enrichment/pipeline.js +29 -0
  40. package/dist/enrichment/pipeline.js.map +1 -0
  41. package/dist/enrichment/stages/architect-stage.d.ts +57 -0
  42. package/dist/enrichment/stages/architect-stage.d.ts.map +1 -0
  43. package/dist/enrichment/stages/architect-stage.js +112 -0
  44. package/dist/enrichment/stages/architect-stage.js.map +1 -0
  45. package/dist/enrichment/stages/memory-stage.d.ts +15 -0
  46. package/dist/enrichment/stages/memory-stage.d.ts.map +1 -0
  47. package/dist/enrichment/stages/memory-stage.js +19 -0
  48. package/dist/enrichment/stages/memory-stage.js.map +1 -0
  49. package/dist/enrichment/stages/mode-stage.d.ts +49 -0
  50. package/dist/enrichment/stages/mode-stage.d.ts.map +1 -0
  51. package/dist/enrichment/stages/mode-stage.js +60 -0
  52. package/dist/enrichment/stages/mode-stage.js.map +1 -0
  53. package/dist/enrichment/stages/model-identity-stage.d.ts +24 -0
  54. package/dist/enrichment/stages/model-identity-stage.d.ts.map +1 -0
  55. package/dist/enrichment/stages/model-identity-stage.js +23 -0
  56. package/dist/enrichment/stages/model-identity-stage.js.map +1 -0
  57. package/dist/enrichment/stages/self-awareness-stage.d.ts +23 -0
  58. package/dist/enrichment/stages/self-awareness-stage.d.ts.map +1 -0
  59. package/dist/enrichment/stages/self-awareness-stage.js +24 -0
  60. package/dist/enrichment/stages/self-awareness-stage.js.map +1 -0
  61. package/dist/enrichment/types.d.ts +45 -0
  62. package/dist/enrichment/types.d.ts.map +1 -0
  63. package/dist/enrichment/types.js +2 -0
  64. package/dist/enrichment/types.js.map +1 -0
  65. package/dist/index.d.ts +77 -4
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +3233 -230
  68. package/dist/index.js.map +1 -1
  69. package/dist/transparency/__tests__/collector.test.d.ts +2 -0
  70. package/dist/transparency/__tests__/collector.test.d.ts.map +1 -0
  71. package/dist/transparency/__tests__/collector.test.js +133 -0
  72. package/dist/transparency/__tests__/collector.test.js.map +1 -0
  73. package/dist/transparency/__tests__/confidence-scorer.test.d.ts +2 -0
  74. package/dist/transparency/__tests__/confidence-scorer.test.d.ts.map +1 -0
  75. package/dist/transparency/__tests__/confidence-scorer.test.js +118 -0
  76. package/dist/transparency/__tests__/confidence-scorer.test.js.map +1 -0
  77. package/dist/transparency/__tests__/source-attributor.test.d.ts +2 -0
  78. package/dist/transparency/__tests__/source-attributor.test.d.ts.map +1 -0
  79. package/dist/transparency/__tests__/source-attributor.test.js +47 -0
  80. package/dist/transparency/__tests__/source-attributor.test.js.map +1 -0
  81. package/dist/transparency/__tests__/types.test.d.ts +2 -0
  82. package/dist/transparency/__tests__/types.test.d.ts.map +1 -0
  83. package/dist/transparency/__tests__/types.test.js +62 -0
  84. package/dist/transparency/__tests__/types.test.js.map +1 -0
  85. package/dist/transparency/collector.d.ts +30 -0
  86. package/dist/transparency/collector.d.ts.map +1 -0
  87. package/dist/transparency/collector.js +79 -0
  88. package/dist/transparency/collector.js.map +1 -0
  89. package/dist/transparency/confidence-scorer.d.ts +17 -0
  90. package/dist/transparency/confidence-scorer.d.ts.map +1 -0
  91. package/dist/transparency/confidence-scorer.js +66 -0
  92. package/dist/transparency/confidence-scorer.js.map +1 -0
  93. package/dist/transparency/index.d.ts +8 -0
  94. package/dist/transparency/index.d.ts.map +1 -0
  95. package/dist/transparency/index.js +4 -0
  96. package/dist/transparency/index.js.map +1 -0
  97. package/dist/transparency/source-attributor.d.ts +10 -0
  98. package/dist/transparency/source-attributor.d.ts.map +1 -0
  99. package/dist/transparency/source-attributor.js +42 -0
  100. package/dist/transparency/source-attributor.js.map +1 -0
  101. package/dist/transparency/types.d.ts +53 -0
  102. package/dist/transparency/types.d.ts.map +1 -0
  103. package/dist/transparency/types.js +2 -0
  104. package/dist/transparency/types.js.map +1 -0
  105. package/package.json +74 -50
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=collector.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collector.test.d.ts","sourceRoot":"","sources":["../../../src/transparency/__tests__/collector.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,133 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { collectTransparencyMeta } from '../collector.js';
3
+ function makeArchitectMeta(overrides) {
4
+ return {
5
+ detectedContext: { domain: 'code_engineering', confidence: 0.85 },
6
+ activeTraits: [{ name: 'precise', weight: 0.82 }, { name: 'thorough', weight: 0.74 }],
7
+ traitWeights: { precise: 0.82, thorough: 0.74 },
8
+ escalationAlert: false,
9
+ channelType: 'webchat',
10
+ ...overrides,
11
+ };
12
+ }
13
+ function makeEnrichment(meta) {
14
+ return {
15
+ prompt: 'enriched prompt',
16
+ metadata: {
17
+ architect: makeArchitectMeta(meta),
18
+ stages: ['memory', 'mode', 'architect', 'self-awareness', 'model-identity'],
19
+ },
20
+ };
21
+ }
22
+ describe('collectTransparencyMeta', () => {
23
+ it('assembles full metadata from all sources', () => {
24
+ const result = collectTransparencyMeta({
25
+ enrichment: makeEnrichment(),
26
+ completion: {
27
+ content: 'The answer is 42.',
28
+ usage: { inputTokens: 156, outputTokens: 278 },
29
+ model: 'claude-3.5-sonnet',
30
+ finishReason: 'stop',
31
+ toolUse: [{ name: 'web_search' }],
32
+ },
33
+ capabilities: { costPer1kInput: 0.008, costPer1kOutput: 0.024 },
34
+ providerName: 'anthropic',
35
+ awarenessSignals: [],
36
+ responseText: 'The answer is 42.',
37
+ processingStartTime: Date.now() - 1500,
38
+ });
39
+ expect(result.confidence.level).toBe('high');
40
+ expect(result.confidence.score).toBeGreaterThanOrEqual(0.75);
41
+ expect(result.sources.find(s => s.type === 'tool_result')).toBeDefined();
42
+ expect(result.model.provider).toBe('anthropic');
43
+ expect(result.model.model).toBe('claude-3.5-sonnet');
44
+ expect(result.model.tokens.input).toBe(156);
45
+ expect(result.model.tokens.output).toBe(278);
46
+ expect(result.model.cost.total).toBeGreaterThan(0);
47
+ expect(result.model.finishReason).toBe('stop');
48
+ expect(result.personality.domain).toBe('code_engineering');
49
+ expect(result.personality.activeTraits).toHaveLength(2);
50
+ expect(result.trace.enrichmentStages).toHaveLength(5);
51
+ expect(result.trace.toolsUsed).toEqual(['web_search']);
52
+ });
53
+ it('extracts knowledge boundary from awareness signals', () => {
54
+ const result = collectTransparencyMeta({
55
+ enrichment: makeEnrichment(),
56
+ completion: {
57
+ content: 'Response text',
58
+ usage: { inputTokens: 100, outputTokens: 200 },
59
+ model: 'claude-3.5-sonnet',
60
+ finishReason: 'stop',
61
+ },
62
+ capabilities: { costPer1kInput: 0.008, costPer1kOutput: 0.024 },
63
+ providerName: 'anthropic',
64
+ awarenessSignals: [{
65
+ dimension: 'knowledge-boundary',
66
+ data: { topic: 'kubernetes networking', corrections: 2, hedges: 1 },
67
+ }],
68
+ responseText: 'Response text',
69
+ processingStartTime: Date.now() - 800,
70
+ });
71
+ expect(result.personality.knowledgeBoundary).toEqual({
72
+ topic: 'kubernetes networking',
73
+ corrections: 2,
74
+ });
75
+ expect(result.confidence.factors.find(f => f.signal === 'knowledge_boundary')).toBeDefined();
76
+ });
77
+ it('calculates cost from capabilities', () => {
78
+ const result = collectTransparencyMeta({
79
+ enrichment: makeEnrichment(),
80
+ completion: {
81
+ content: 'Test',
82
+ usage: { inputTokens: 1000, outputTokens: 500 },
83
+ model: 'claude-3.5-sonnet',
84
+ finishReason: 'stop',
85
+ },
86
+ capabilities: { costPer1kInput: 0.003, costPer1kOutput: 0.015 },
87
+ providerName: 'openai',
88
+ awarenessSignals: [],
89
+ responseText: 'Test',
90
+ processingStartTime: Date.now() - 500,
91
+ });
92
+ expect(result.model.cost.input).toBeCloseTo(0.003, 4);
93
+ expect(result.model.cost.output).toBeCloseTo(0.0075, 4);
94
+ expect(result.model.cost.total).toBeCloseTo(0.0105, 4);
95
+ });
96
+ it('handles missing enrichment gracefully', () => {
97
+ const result = collectTransparencyMeta({
98
+ enrichment: { prompt: 'base', metadata: { stages: [] } },
99
+ completion: {
100
+ content: 'Simple response.',
101
+ usage: { inputTokens: 50, outputTokens: 100 },
102
+ model: 'gpt-4o',
103
+ finishReason: 'stop',
104
+ },
105
+ capabilities: { costPer1kInput: 0.005, costPer1kOutput: 0.015 },
106
+ providerName: 'openai',
107
+ awarenessSignals: [],
108
+ responseText: 'Simple response.',
109
+ processingStartTime: Date.now() - 300,
110
+ });
111
+ expect(result.personality.domain).toBe('general');
112
+ expect(result.personality.activeTraits).toEqual([]);
113
+ expect(result.trace.enrichmentStages).toEqual([]);
114
+ });
115
+ it('detects escalation alert', () => {
116
+ const result = collectTransparencyMeta({
117
+ enrichment: makeEnrichment({ escalationAlert: true }),
118
+ completion: {
119
+ content: 'I think this could be wrong.',
120
+ usage: { inputTokens: 100, outputTokens: 200 },
121
+ model: 'claude-3.5-sonnet',
122
+ finishReason: 'stop',
123
+ },
124
+ capabilities: { costPer1kInput: 0.008, costPer1kOutput: 0.024 },
125
+ providerName: 'anthropic',
126
+ awarenessSignals: [],
127
+ responseText: 'I think this could be wrong.',
128
+ processingStartTime: Date.now() - 600,
129
+ });
130
+ expect(result.confidence.factors.find(f => f.signal === 'escalation_flagged')).toBeDefined();
131
+ });
132
+ });
133
+ //# sourceMappingURL=collector.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collector.test.js","sourceRoot":"","sources":["../../../src/transparency/__tests__/collector.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=confidence-scorer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confidence-scorer.test.d.ts","sourceRoot":"","sources":["../../../src/transparency/__tests__/confidence-scorer.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,118 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { scoreConfidence } from '../confidence-scorer.js';
3
+ describe('scoreConfidence', () => {
4
+ it('returns base score 0.7 with no signals', () => {
5
+ const result = scoreConfidence({
6
+ toolsUsed: [],
7
+ hasMemoryRecall: false,
8
+ hasUserData: false,
9
+ finishReason: 'stop',
10
+ knowledgeBoundaryCorrections: 0,
11
+ hedgePhraseCount: 0,
12
+ escalationAlert: false,
13
+ });
14
+ // Base 0.7 + clean_finish +0.05 + no_corrections +0.05 - ungrounded -0.10 = 0.70
15
+ expect(result.score).toBeCloseTo(0.70, 2);
16
+ expect(result.level).toBe('medium');
17
+ });
18
+ it('boosts for tool grounding', () => {
19
+ const result = scoreConfidence({
20
+ toolsUsed: ['web_search'],
21
+ hasMemoryRecall: false,
22
+ hasUserData: false,
23
+ finishReason: 'stop',
24
+ knowledgeBoundaryCorrections: 0,
25
+ hedgePhraseCount: 0,
26
+ escalationAlert: false,
27
+ });
28
+ // Base 0.7 + tool_grounded +0.15 + clean_finish +0.05 + no_corrections +0.05 = 0.95
29
+ expect(result.score).toBeCloseTo(0.95, 2);
30
+ expect(result.level).toBe('high');
31
+ expect(result.factors.find(f => f.signal === 'tool_grounded')).toBeDefined();
32
+ });
33
+ it('penalizes for knowledge boundary corrections', () => {
34
+ const result = scoreConfidence({
35
+ toolsUsed: [],
36
+ hasMemoryRecall: false,
37
+ hasUserData: false,
38
+ finishReason: 'stop',
39
+ knowledgeBoundaryCorrections: 2,
40
+ hedgePhraseCount: 0,
41
+ escalationAlert: false,
42
+ });
43
+ // Base 0.7 + clean_finish +0.05 - knowledge_boundary -0.30 - ungrounded -0.10 = 0.35
44
+ expect(result.score).toBeCloseTo(0.35, 2);
45
+ expect(result.level).toBe('low');
46
+ });
47
+ it('penalizes for max_tokens truncation', () => {
48
+ const result = scoreConfidence({
49
+ toolsUsed: ['web_search'],
50
+ hasMemoryRecall: false,
51
+ hasUserData: false,
52
+ finishReason: 'max_tokens',
53
+ knowledgeBoundaryCorrections: 0,
54
+ hedgePhraseCount: 0,
55
+ escalationAlert: false,
56
+ });
57
+ // Base 0.7 + tool_grounded +0.15 + no_corrections +0.05 - truncated -0.20 = 0.70
58
+ expect(result.score).toBeCloseTo(0.70, 2);
59
+ });
60
+ it('penalizes for hedge density above threshold', () => {
61
+ const result = scoreConfidence({
62
+ toolsUsed: [],
63
+ hasMemoryRecall: false,
64
+ hasUserData: false,
65
+ finishReason: 'stop',
66
+ knowledgeBoundaryCorrections: 0,
67
+ hedgePhraseCount: 4,
68
+ escalationAlert: false,
69
+ });
70
+ // Base 0.7 + clean_finish +0.05 + no_corrections +0.05 - hedge_density -0.10 - ungrounded -0.10 = 0.60
71
+ expect(result.score).toBeCloseTo(0.60, 2);
72
+ expect(result.level).toBe('medium');
73
+ });
74
+ it('boosts for memory and user data', () => {
75
+ const result = scoreConfidence({
76
+ toolsUsed: [],
77
+ hasMemoryRecall: true,
78
+ hasUserData: true,
79
+ finishReason: 'stop',
80
+ knowledgeBoundaryCorrections: 0,
81
+ hedgePhraseCount: 0,
82
+ escalationAlert: false,
83
+ });
84
+ // Base 0.7 + memory_backed +0.10 + user_data +0.05 + clean_finish +0.05 + no_corrections +0.05 = 0.95
85
+ expect(result.score).toBeCloseTo(0.95, 2);
86
+ expect(result.level).toBe('high');
87
+ });
88
+ it('clamps score to minimum 0.1', () => {
89
+ const result = scoreConfidence({
90
+ toolsUsed: [],
91
+ hasMemoryRecall: false,
92
+ hasUserData: false,
93
+ finishReason: 'max_tokens',
94
+ knowledgeBoundaryCorrections: 2,
95
+ hedgePhraseCount: 5,
96
+ escalationAlert: true,
97
+ });
98
+ // Many penalties: 0.7 -0.30 -0.20 -0.10 -0.10 -0.10 = -0.10 -> clamped to 0.1
99
+ expect(result.score).toBe(0.1);
100
+ expect(result.level).toBe('low');
101
+ });
102
+ it('caps knowledge boundary penalty at -0.30', () => {
103
+ const result = scoreConfidence({
104
+ toolsUsed: ['web_search'],
105
+ hasMemoryRecall: true,
106
+ hasUserData: true,
107
+ finishReason: 'stop',
108
+ knowledgeBoundaryCorrections: 5,
109
+ hedgePhraseCount: 0,
110
+ escalationAlert: false,
111
+ });
112
+ // Even with 5 corrections, penalty is capped at -0.30 not -0.75
113
+ expect(result.factors.find(f => f.signal === 'knowledge_boundary')?.detail).toContain('5');
114
+ // Base 0.7 + 0.15 + 0.10 + 0.05 + 0.05 - 0.30 = 0.75
115
+ expect(result.score).toBeCloseTo(0.75, 2);
116
+ });
117
+ });
118
+ //# sourceMappingURL=confidence-scorer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confidence-scorer.test.js","sourceRoot":"","sources":["../../../src/transparency/__tests__/confidence-scorer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=source-attributor.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-attributor.test.d.ts","sourceRoot":"","sources":["../../../src/transparency/__tests__/source-attributor.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { attributeSources, countHedgePhrases } from '../source-attributor.js';
3
+ describe('attributeSources', () => {
4
+ it('returns model_generation when no tools or memory', () => {
5
+ const sources = attributeSources({ toolsUsed: [], hasMemoryRecall: false, hasKnowledgeGraph: false, hasUserData: false });
6
+ expect(sources).toHaveLength(1);
7
+ expect(sources[0].type).toBe('model_generation');
8
+ expect(sources[0].confidence).toBe(0.7);
9
+ });
10
+ it('includes tool_result source for each tool', () => {
11
+ const sources = attributeSources({ toolsUsed: ['web_search', 'calculator'], hasMemoryRecall: false, hasKnowledgeGraph: false, hasUserData: false });
12
+ const toolSources = sources.filter(s => s.type === 'tool_result');
13
+ expect(toolSources).toHaveLength(2);
14
+ expect(toolSources[0].label).toContain('web_search');
15
+ expect(toolSources[0].confidence).toBe(0.95);
16
+ });
17
+ it('includes memory_recall source', () => {
18
+ const sources = attributeSources({ toolsUsed: [], hasMemoryRecall: true, hasKnowledgeGraph: false, hasUserData: false });
19
+ expect(sources.find(s => s.type === 'memory_recall')).toBeDefined();
20
+ });
21
+ it('includes knowledge_graph source', () => {
22
+ const sources = attributeSources({ toolsUsed: [], hasMemoryRecall: false, hasKnowledgeGraph: true, hasUserData: false });
23
+ expect(sources.find(s => s.type === 'knowledge_graph')).toBeDefined();
24
+ });
25
+ it('includes user_data source', () => {
26
+ const sources = attributeSources({ toolsUsed: [], hasMemoryRecall: false, hasKnowledgeGraph: false, hasUserData: true });
27
+ expect(sources.find(s => s.type === 'user_data')).toBeDefined();
28
+ });
29
+ it('always includes model_generation as final source', () => {
30
+ const sources = attributeSources({ toolsUsed: ['web_search'], hasMemoryRecall: true, hasKnowledgeGraph: true, hasUserData: true });
31
+ const last = sources[sources.length - 1];
32
+ expect(last.type).toBe('model_generation');
33
+ expect(last.label).toBe('Synthesized from above sources');
34
+ });
35
+ });
36
+ describe('countHedgePhrases', () => {
37
+ it('returns 0 for text with no hedges', () => {
38
+ expect(countHedgePhrases('The answer is 42.')).toBe(0);
39
+ });
40
+ it('counts hedge phrases case-insensitively', () => {
41
+ expect(countHedgePhrases('I think the answer is probably 42. I believe so.')).toBe(3);
42
+ });
43
+ it('handles empty string', () => {
44
+ expect(countHedgePhrases('')).toBe(0);
45
+ });
46
+ });
47
+ //# sourceMappingURL=source-attributor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-attributor.test.js","sourceRoot":"","sources":["../../../src/transparency/__tests__/source-attributor.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.test.d.ts","sourceRoot":"","sources":["../../../src/transparency/__tests__/types.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,62 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ describe('TransparencyMeta types', () => {
3
+ it('accepts a valid TransparencyMeta object', () => {
4
+ const meta = {
5
+ confidence: {
6
+ level: 'high',
7
+ score: 0.87,
8
+ factors: [
9
+ { signal: 'tool_grounded', impact: 'positive', detail: 'Response used tool output' },
10
+ ],
11
+ },
12
+ sources: [
13
+ { type: 'tool_result', label: 'Web search', confidence: 0.95 },
14
+ { type: 'model_generation', label: 'Generated by model', confidence: 0.7 },
15
+ ],
16
+ model: {
17
+ provider: 'anthropic',
18
+ model: 'claude-3.5-sonnet',
19
+ tokens: { input: 156, output: 278 },
20
+ cost: { input: 0.0012, output: 0.0028, total: 0.004 },
21
+ finishReason: 'stop',
22
+ latencyMs: 1247,
23
+ },
24
+ personality: {
25
+ domain: 'code_engineering',
26
+ emotionalRegister: 'neutral',
27
+ activeTraits: [{ name: 'precise', weight: 0.82 }],
28
+ },
29
+ trace: {
30
+ enrichmentStages: ['memory', 'mode', 'architect', 'self-awareness', 'model-identity'],
31
+ toolsUsed: ['web_search'],
32
+ processingMs: 1500,
33
+ },
34
+ };
35
+ expect(meta.confidence.level).toBe('high');
36
+ expect(meta.sources).toHaveLength(2);
37
+ expect(meta.model.cost.total).toBe(0.004);
38
+ });
39
+ it('allows optional knowledgeBoundary in personality', () => {
40
+ const meta = {
41
+ confidence: { level: 'low', score: 0.35, factors: [] },
42
+ sources: [],
43
+ model: {
44
+ provider: 'anthropic',
45
+ model: 'claude-3.5-sonnet',
46
+ tokens: { input: 100, output: 200 },
47
+ cost: { input: 0.001, output: 0.002, total: 0.003 },
48
+ finishReason: 'stop',
49
+ latencyMs: 800,
50
+ },
51
+ personality: {
52
+ domain: 'general',
53
+ emotionalRegister: 'uncertain',
54
+ activeTraits: [],
55
+ knowledgeBoundary: { topic: 'kubernetes networking', corrections: 2 },
56
+ },
57
+ trace: { enrichmentStages: [], toolsUsed: [], processingMs: 500 },
58
+ };
59
+ expect(meta.personality.knowledgeBoundary?.corrections).toBe(2);
60
+ });
61
+ });
62
+ //# sourceMappingURL=types.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.test.js","sourceRoot":"","sources":["../../../src/transparency/__tests__/types.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { EnrichmentResult } from '../enrichment/types.js';
2
+ import type { TransparencyMeta } from './types.js';
3
+ export interface CollectorInput {
4
+ readonly enrichment: EnrichmentResult;
5
+ readonly completion: {
6
+ readonly content: string;
7
+ readonly toolUse?: ReadonlyArray<{
8
+ readonly name: string;
9
+ }>;
10
+ readonly usage: {
11
+ readonly inputTokens: number;
12
+ readonly outputTokens: number;
13
+ };
14
+ readonly model: string;
15
+ readonly finishReason: string;
16
+ };
17
+ readonly capabilities: {
18
+ readonly costPer1kInput: number;
19
+ readonly costPer1kOutput: number;
20
+ };
21
+ readonly providerName: string;
22
+ readonly awarenessSignals: ReadonlyArray<{
23
+ readonly dimension: string;
24
+ readonly data: Record<string, unknown>;
25
+ }>;
26
+ readonly responseText: string;
27
+ readonly processingStartTime: number;
28
+ }
29
+ export declare function collectTransparencyMeta(input: CollectorInput): TransparencyMeta;
30
+ //# sourceMappingURL=collector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../src/transparency/collector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAInD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE;QACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;YAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC5D,QAAQ,CAAC,KAAK,EAAE;YAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;SAAE,CAAC;QAChF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;KAC/B,CAAC;IACF,QAAQ,CAAC,YAAY,EAAE;QACrB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;KAClC,CAAC;IACF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,aAAa,CAAC;QACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACxC,CAAC,CAAC;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,cAAc,GAAG,gBAAgB,CAmF/E"}
@@ -0,0 +1,79 @@
1
+ import { scoreConfidence } from './confidence-scorer.js';
2
+ import { attributeSources, countHedgePhrases } from './source-attributor.js';
3
+ export function collectTransparencyMeta(input) {
4
+ const { enrichment, completion, capabilities, providerName, awarenessSignals, responseText, processingStartTime } = input;
5
+ const architectMeta = enrichment.metadata.architect;
6
+ // Extract knowledge boundary from awareness signals
7
+ const kbSignal = awarenessSignals.find(s => s.dimension === 'knowledge-boundary');
8
+ const knowledgeBoundaryCorrections = typeof kbSignal?.data?.corrections === 'number'
9
+ ? kbSignal.data.corrections
10
+ : 0;
11
+ const knowledgeBoundaryTopic = typeof kbSignal?.data?.topic === 'string'
12
+ ? kbSignal.data.topic
13
+ : undefined;
14
+ // Determine source signals
15
+ const toolsUsed = completion.toolUse?.map(t => t.name) ?? [];
16
+ const hasMemoryRecall = enrichment.metadata.stages.includes('memory');
17
+ const hasKnowledgeGraph = toolsUsed.some(t => t.includes('knowledge') || t.includes('graph'));
18
+ const hasUserData = enrichment.metadata.stages.includes('self-awareness');
19
+ const hedgePhraseCount = countHedgePhrases(responseText);
20
+ // Score confidence
21
+ const confidence = scoreConfidence({
22
+ toolsUsed,
23
+ hasMemoryRecall,
24
+ hasUserData,
25
+ finishReason: completion.finishReason,
26
+ knowledgeBoundaryCorrections,
27
+ hedgePhraseCount,
28
+ escalationAlert: architectMeta?.escalationAlert ?? false,
29
+ });
30
+ // Attribute sources
31
+ const sources = attributeSources({ toolsUsed, hasMemoryRecall, hasKnowledgeGraph, hasUserData });
32
+ // Calculate cost
33
+ const costInput = (completion.usage.inputTokens / 1000) * capabilities.costPer1kInput;
34
+ const costOutput = (completion.usage.outputTokens / 1000) * capabilities.costPer1kOutput;
35
+ // Extract active traits
36
+ const activeTraits = [];
37
+ if (architectMeta?.traitWeights) {
38
+ for (const [name, weight] of Object.entries(architectMeta.traitWeights)) {
39
+ activeTraits.push({ name, weight: weight });
40
+ }
41
+ activeTraits.sort((a, b) => b.weight - a.weight);
42
+ }
43
+ // Extract emotional register from architect context
44
+ const emotionalRegister = typeof architectMeta?.detectedContext?.emotionalRegister === 'string'
45
+ ? architectMeta.detectedContext.emotionalRegister
46
+ : 'neutral';
47
+ return {
48
+ confidence,
49
+ sources,
50
+ model: {
51
+ provider: providerName,
52
+ model: completion.model,
53
+ tokens: { input: completion.usage.inputTokens, output: completion.usage.outputTokens },
54
+ cost: {
55
+ input: Math.round(costInput * 10000) / 10000,
56
+ output: Math.round(costOutput * 10000) / 10000,
57
+ total: Math.round((costInput + costOutput) * 10000) / 10000,
58
+ },
59
+ finishReason: completion.finishReason,
60
+ latencyMs: Date.now() - processingStartTime,
61
+ },
62
+ personality: {
63
+ domain: typeof architectMeta?.detectedContext?.domain === 'string'
64
+ ? architectMeta.detectedContext.domain
65
+ : 'general',
66
+ emotionalRegister,
67
+ activeTraits,
68
+ ...(knowledgeBoundaryTopic ? {
69
+ knowledgeBoundary: { topic: knowledgeBoundaryTopic, corrections: knowledgeBoundaryCorrections },
70
+ } : {}),
71
+ },
72
+ trace: {
73
+ enrichmentStages: [...enrichment.metadata.stages],
74
+ toolsUsed,
75
+ processingMs: Date.now() - processingStartTime,
76
+ },
77
+ };
78
+ }
79
+ //# sourceMappingURL=collector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collector.js","sourceRoot":"","sources":["../../src/transparency/collector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { ConfidenceFactor, ConfidenceLevel } from './types.js';
2
+ export interface ConfidenceInput {
3
+ readonly toolsUsed: readonly string[];
4
+ readonly hasMemoryRecall: boolean;
5
+ readonly hasUserData: boolean;
6
+ readonly finishReason: string;
7
+ readonly knowledgeBoundaryCorrections: number;
8
+ readonly hedgePhraseCount: number;
9
+ readonly escalationAlert: boolean;
10
+ }
11
+ export interface ConfidenceResult {
12
+ readonly level: ConfidenceLevel;
13
+ readonly score: number;
14
+ readonly factors: readonly ConfidenceFactor[];
15
+ }
16
+ export declare function scoreConfidence(input: ConfidenceInput): ConfidenceResult;
17
+ //# sourceMappingURL=confidence-scorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confidence-scorer.d.ts","sourceRoot":"","sources":["../../src/transparency/confidence-scorer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,4BAA4B,EAAE,MAAM,CAAC;IAC9C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC/C;AAKD,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CA0ExE"}
@@ -0,0 +1,66 @@
1
+ const BASE_SCORE = 0.7;
2
+ const HEDGE_THRESHOLD = 3;
3
+ export function scoreConfidence(input) {
4
+ let score = BASE_SCORE;
5
+ const factors = [];
6
+ // Positive: tool grounding
7
+ if (input.toolsUsed.length > 0) {
8
+ score += 0.15;
9
+ factors.push({ signal: 'tool_grounded', impact: 'positive', detail: `Response grounded in ${input.toolsUsed.length} tool result(s)` });
10
+ }
11
+ // Positive: memory recall
12
+ if (input.hasMemoryRecall) {
13
+ score += 0.10;
14
+ factors.push({ signal: 'memory_backed', impact: 'positive', detail: 'Response informed by memory/knowledge graph' });
15
+ }
16
+ // Positive: user data
17
+ if (input.hasUserData) {
18
+ score += 0.05;
19
+ factors.push({ signal: 'user_data_informed', impact: 'positive', detail: 'Response references user preferences or decisions' });
20
+ }
21
+ // Positive: clean finish
22
+ if (input.finishReason === 'stop') {
23
+ score += 0.05;
24
+ factors.push({ signal: 'clean_finish', impact: 'positive', detail: 'Model completed response normally' });
25
+ }
26
+ // Positive: no corrections
27
+ if (input.knowledgeBoundaryCorrections === 0) {
28
+ score += 0.05;
29
+ factors.push({ signal: 'no_corrections', impact: 'positive', detail: 'No prior user corrections on this topic' });
30
+ }
31
+ // Negative: knowledge boundary
32
+ if (input.knowledgeBoundaryCorrections > 0) {
33
+ const penalty = Math.min(input.knowledgeBoundaryCorrections * 0.15, 0.30);
34
+ score -= penalty;
35
+ factors.push({
36
+ signal: 'knowledge_boundary',
37
+ impact: 'negative',
38
+ detail: `Topic previously corrected ${input.knowledgeBoundaryCorrections} time(s) by user`,
39
+ });
40
+ }
41
+ // Negative: truncated
42
+ if (input.finishReason === 'max_tokens') {
43
+ score -= 0.20;
44
+ factors.push({ signal: 'truncated_response', impact: 'negative', detail: 'Response was truncated (hit token limit)' });
45
+ }
46
+ // Negative: hedge density
47
+ if (input.hedgePhraseCount > HEDGE_THRESHOLD) {
48
+ score -= 0.10;
49
+ factors.push({ signal: 'hedge_density', impact: 'negative', detail: `${input.hedgePhraseCount} hedge phrases detected in response` });
50
+ }
51
+ // Negative: ungrounded (no tools, no memory, no user data)
52
+ if (input.toolsUsed.length === 0 && !input.hasMemoryRecall && !input.hasUserData) {
53
+ score -= 0.10;
54
+ factors.push({ signal: 'ungrounded', impact: 'negative', detail: 'Response is pure model generation without external grounding' });
55
+ }
56
+ // Negative: escalation
57
+ if (input.escalationAlert) {
58
+ score -= 0.10;
59
+ factors.push({ signal: 'escalation_flagged', impact: 'negative', detail: 'Personality engine flagged potential escalation' });
60
+ }
61
+ // Clamp and level
62
+ score = Math.max(0.1, Math.min(1.0, score));
63
+ const level = score >= 0.75 ? 'high' : score >= 0.45 ? 'medium' : 'low';
64
+ return { level, score: Math.round(score * 100) / 100, factors };
65
+ }
66
+ //# sourceMappingURL=confidence-scorer.js.map