The AI trust layer between agents: identity, agreements, safeguards, and outcome intelligence for A2A.

Viewing files at commit 6e4e24f0d92fCommit detailsView latest

tests/botpress-finalization.test.ts 67 lines · 2.1 KB · typescript
1
import { describe, expect, it } from 'vitest';
2
import { parseFinalizationAssessment } from '../connectors/botpress/src/finalization.js';
3
4
const validAssessment = {
5
  outcome: 'partial',
6
  summary: 'The request was handled, including the {quoted} detail.',
7
  criteria: [
8
    {
9
      criterion: 'Provide a sourced result',
10
      status: 'partially_met',
11
      explanation: 'A result was provided without a source.',
12
      evidenceReferences: ['receipt:1'],
13
    },
14
  ],
15
  deliverables: ['One result'],
16
  actionsTaken: ['Searched the available catalogue'],
17
  blockers: ['No current inventory feed'],
18
  corrections: [],
19
  evidenceReferences: ['receipt:1'],
20
  confidence: 0.7,
21
  ratings: {
22
    overall_satisfaction: 0.6,
23
    outcome_satisfaction: 0.5,
24
    communication: 0.9,
25
    timeliness: 0.8,
26
    scope_adherence: 0.8,
27
    evidence_quality: 0.3,
28
    correction_handling: 0.7,
29
    reliability: 0.5,
30
  },
31
  wouldWorkAgain: 'unsure',
32
  reasonCodes: ['missing_source'],
33
  privateComment: 'Structured feedback only.',
34
  rawTranscript: 'This must never be retained.',
35
};
36
37
describe('Botpress automatic finalization', () => {
38
  it('extracts a structured assessment without retaining unknown raw content', () => {
39
    const parsed = parseFinalizationAssessment(
40
      `OPENCLASP_FINALIZATION\n${JSON.stringify(validAssessment)}`,
41
      'interaction-1',
42
    );
43
44
    expect(parsed.interactionId).toBe('interaction-1');
45
    expect(parsed.summary).toContain('{quoted}');
46
    expect(parsed.ratings.communication).toBe(0.9);
47
    expect(parsed).not.toHaveProperty('rawTranscript');
48
  });
49
50
  it('rejects incomplete ratings', () => {
51
    const invalid = structuredClone(validAssessment);
52
    delete (invalid.ratings as Partial<typeof invalid.ratings>).reliability;
53
54
    expect(() =>
55
      parseFinalizationAssessment(
56
        `OPENCLASP_FINALIZATION ${JSON.stringify(invalid)}`,
57
        'interaction-2',
58
      ),
59
    ).toThrow('Finalization rating reliability is invalid');
60
  });
61
62
  it('rejects output without a JSON assessment', () => {
63
    expect(() => parseFinalizationAssessment('Conversation complete.', 'interaction-3')).toThrow(
64
      'Finalization JSON object is missing',
65
    );
66
  });
67
});