File size: 6,039 Bytes
11486ce
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
import { buildAgentRequestDiagnostics, buildPageRequestDiagnostics } from './agent-request-diagnostics';
import type { AppLogEntry } from './app-logger';
import assert from 'node:assert/strict';
import { describe, it } from 'node:test';

describe('buildPageRequestDiagnostics', () => {
    it('exposes only typed diagnostic context fields', () => {
        const logs: AppLogEntry[] = [
            {
                id: 1,
                at: '2026-06-11T00:00:00.000Z',
                level: 'info',
                message: 'stream diagnostics',
                clientRequestId: 'request-a',
                filenames: ['image-a.png'],
                context: JSON.stringify({
                    providerDialect: 'sdk_parsed_fallback',
                    normalizedEventCount: 1,
                    reason: 123,
                    image_backend: 'images-api',
                    partialImages: '2',
                    partial_images: 2,
                    upstream_status: 200,
                    transport_error: true,
                    apiKey: 'sk-secret'
                })
            }
        ];

        const diagnostics = buildPageRequestDiagnostics({
            logs,
            clientRequestId: 'request-a'
        });

        assert.deepEqual(diagnostics.events[0]?.diagnostics, {
            providerDialect: 'sdk_parsed_fallback',
            normalizedEventCount: 1,
            image_backend: 'images-api',
            partial_images: 2,
            upstream_status: 200,
            transport_error: true
        });
    });
});

describe('buildAgentRequestDiagnostics', () => {
    it('summarizes Agent state without exposing raw request JSON or image payloads', () => {
        const diagnostics = buildAgentRequestDiagnostics({
            env: {
                AGENT_STATE_BACKEND: 'memory',
                AGENT_REQUEST_TTL_SECONDS: '120'
            },
            record: {
                requestId: 'request-1',
                idempotencyKey: 'idem-1',
                requestHash: 'hash-1',
                mode: 'generate',
                status: 'succeeded',
                requestJson: {
                    prompt: 'secret prompt text',
                    api_key: 'sk-secret'
                },
                responseJson: {
                    request_id: 'request-1',
                    idempotency_key: 'idem-1',
                    cached: false,
                    images: [
                        {
                            id: 'artifact-1',
                            filename: 'image.png',
                            content_url: '/api/agent/artifacts/artifact-1/content',
                            metadata_url: '/api/agent/artifacts/artifact-1',
                            output_format: 'png',
                            mime_type: 'image/png',
                            size_bytes: 67,
                            width: 1,
                            height: 1,
                            b64_json: 'raw-image-base64'
                        }
                    ],
                    created_at: '2026-06-11T00:00:05.000Z',
                    timing: {
                        started_at: '2026-06-11T00:00:00.000Z',
                        completed_at: '2026-06-11T00:00:05.000Z',
                        elapsed_ms: 5000,
                        server_elapsed_ms: 5000
                    },
                    execution: {
                        transport: 'agent_json',
                        endpoint: '/api/agent/images/generate',
                        route_mode: 'agent',
                        operation: 'generate',
                        image_backend: 'images-api',
                        stream_mode: 'non_stream',
                        streaming_strategy: 'auto',
                        selected_channel_id: 'default',
                        upstream_host: 'example.test',
                        request_headers: {
                            user_agent_effective: 'gpt-image-playground/2.1.0',
                            has_extra_headers: false,
                            allowed_header_names: ['user-agent'],
                            configured_header_names: []
                        }
                    }
                },
                createdAt: '2026-06-11T00:00:00.000Z',
                updatedAt: '2026-06-11T00:00:05.000Z',
                expiresAt: '2026-06-11T00:02:00.000Z'
            },
            artifacts: [
                {
                    id: 'artifact-1',
                    requestId: 'request-1',
                    filename: 'image.png',
                    filepath: '/private/generated-images/image.png',
                    contentUrl: '/api/agent/artifacts/artifact-1/content',
                    metadataUrl: '/api/agent/artifacts/artifact-1',
                    outputFormat: 'png',
                    mimeType: 'image/png',
                    sizeBytes: 67,
                    width: 1,
                    height: 1,
                    model: 'gpt-image-2',
                    promptHash: 'prompt-hash',
                    createdAt: '2026-06-11T00:00:05.000Z'
                }
            ]
        });

        assert.equal(diagnostics.request.request_id, 'request-1');
        assert.equal(diagnostics.request.status, 'succeeded');
        assert.equal(diagnostics.response?.image_count, 1);
        assert.deepEqual(diagnostics.response?.artifact_ids, ['artifact-1']);
        assert.equal(diagnostics.state_backend, 'memory');
        assert.equal(diagnostics.diagnostics_retention.ttl_seconds, 120);
        assert.equal(diagnostics.diagnostics_boundary.raw_request_json_redacted, true);
        const serialized = JSON.stringify(diagnostics);
        assert.equal(serialized.includes('secret prompt text'), false);
        assert.equal(serialized.includes('sk-secret'), false);
        assert.equal(serialized.includes('raw-image-base64'), false);
        assert.equal(serialized.includes('/private/generated-images/image.png'), false);
    });
});