proofscan 0.10.2 → 0.10.4

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 (40) hide show
  1. package/README.ja.md +272 -95
  2. package/README.md +200 -311
  3. package/dist/cli.js +4 -2
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/index.d.ts +1 -0
  6. package/dist/commands/index.d.ts.map +1 -1
  7. package/dist/commands/index.js +2 -0
  8. package/dist/commands/index.js.map +1 -1
  9. package/dist/commands/popl.d.ts +16 -0
  10. package/dist/commands/popl.d.ts.map +1 -0
  11. package/dist/commands/popl.js +495 -0
  12. package/dist/commands/popl.js.map +1 -0
  13. package/dist/popl/artifacts.d.ts +78 -0
  14. package/dist/popl/artifacts.d.ts.map +1 -0
  15. package/dist/popl/artifacts.js +205 -0
  16. package/dist/popl/artifacts.js.map +1 -0
  17. package/dist/popl/index.d.ts +10 -0
  18. package/dist/popl/index.d.ts.map +1 -0
  19. package/dist/popl/index.js +14 -0
  20. package/dist/popl/index.js.map +1 -0
  21. package/dist/popl/sanitizer.d.ts +86 -0
  22. package/dist/popl/sanitizer.d.ts.map +1 -0
  23. package/dist/popl/sanitizer.js +271 -0
  24. package/dist/popl/sanitizer.js.map +1 -0
  25. package/dist/popl/service.d.ts +46 -0
  26. package/dist/popl/service.d.ts.map +1 -0
  27. package/dist/popl/service.js +231 -0
  28. package/dist/popl/service.js.map +1 -0
  29. package/dist/popl/types.d.ts +195 -0
  30. package/dist/popl/types.d.ts.map +1 -0
  31. package/dist/popl/types.js +20 -0
  32. package/dist/popl/types.js.map +1 -0
  33. package/dist/shell/popl-commands.d.ts +26 -0
  34. package/dist/shell/popl-commands.d.ts.map +1 -0
  35. package/dist/shell/popl-commands.js +281 -0
  36. package/dist/shell/popl-commands.js.map +1 -0
  37. package/dist/shell/repl.d.ts.map +1 -1
  38. package/dist/shell/repl.js +6 -0
  39. package/dist/shell/repl.js.map +1 -1
  40. package/package.json +6 -4
@@ -0,0 +1,78 @@
1
+ /**
2
+ * POPL Artifacts Generator (Phase 6.0)
3
+ *
4
+ * Generates sanitized artifacts for POPL entries:
5
+ * - status.json: Safe summary of session/connector state
6
+ * - logs.sanitized.jsonl: Sanitized proxy logs
7
+ * - rpc.sanitized.jsonl: Sanitized RPC events
8
+ * - validation-run.log: Validation/generation log
9
+ */
10
+ import type { SessionWithStats, RpcCall, Event } from '../db/types.js';
11
+ import type { PoplArtifact, PoplCaptureSummary } from './types.js';
12
+ /**
13
+ * Session status (safe for public disclosure)
14
+ */
15
+ export interface SessionStatus {
16
+ session_id: string;
17
+ connector_id: string;
18
+ started_at: string;
19
+ ended_at: string | null;
20
+ exit_reason: string | null;
21
+ rpc_count: number;
22
+ event_count: number;
23
+ duration_ms: number | null;
24
+ actor_kind: string | null;
25
+ }
26
+ /**
27
+ * Status.json structure (safe for public disclosure)
28
+ */
29
+ export interface StatusJson {
30
+ generated_at: string;
31
+ sanitizer_version: number;
32
+ session: SessionStatus;
33
+ summary: PoplCaptureSummary;
34
+ rpc_methods: string[];
35
+ }
36
+ /**
37
+ * Artifact generation result
38
+ */
39
+ export interface ArtifactResult {
40
+ /** Artifact metadata */
41
+ artifact: PoplArtifact;
42
+ /** File content */
43
+ content: string;
44
+ }
45
+ /**
46
+ * All artifacts for an entry
47
+ */
48
+ export interface GeneratedArtifacts {
49
+ status: ArtifactResult;
50
+ logs?: ArtifactResult;
51
+ rpc: ArtifactResult;
52
+ validation: ArtifactResult;
53
+ }
54
+ /**
55
+ * Generate status.json artifact
56
+ */
57
+ export declare function generateStatusArtifact(session: SessionWithStats, rpcs: RpcCall[], events: Event[]): ArtifactResult;
58
+ /**
59
+ * Generate rpc.sanitized.jsonl artifact
60
+ */
61
+ export declare function generateRpcArtifact(sessionId: string, configDir: string): ArtifactResult;
62
+ /**
63
+ * Generate logs.sanitized.jsonl artifact (if proxy logs exist)
64
+ */
65
+ export declare function generateLogsArtifact(logsPath: string | null, sessionStarted: string, sessionEnded: string | null): ArtifactResult | null;
66
+ /**
67
+ * Generate validation-run.log artifact
68
+ */
69
+ export declare function generateValidationArtifact(sessionId: string, steps: string[]): ArtifactResult;
70
+ /**
71
+ * Generate all artifacts for a session POPL entry
72
+ */
73
+ export declare function generateSessionArtifacts(sessionId: string, configDir: string): Promise<{
74
+ artifacts: GeneratedArtifacts;
75
+ session: SessionWithStats;
76
+ summary: PoplCaptureSummary;
77
+ }>;
78
+ //# sourceMappingURL=artifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../src/popl/artifacts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAQvE,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,wBAAwB;IACxB,QAAQ,EAAE,YAAY,CAAC;IACvB,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,GAAG,EAAE,cAAc,CAAC;IACpB,UAAU,EAAE,cAAc,CAAC;CAC5B;AAqCD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,OAAO,EAAE,EACf,MAAM,EAAE,KAAK,EAAE,GACd,cAAc,CAoDhB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,cAAc,CAgChB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,GAAG,IAAI,GAC1B,cAAc,GAAG,IAAI,CAIvB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EAAE,GACd,cAAc,CAyBhB;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IACT,SAAS,EAAE,kBAAkB,CAAC;IAC9B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,OAAO,EAAE,kBAAkB,CAAC;CAC7B,CAAC,CA6DD"}
@@ -0,0 +1,205 @@
1
+ /**
2
+ * POPL Artifacts Generator (Phase 6.0)
3
+ *
4
+ * Generates sanitized artifacts for POPL entries:
5
+ * - status.json: Safe summary of session/connector state
6
+ * - logs.sanitized.jsonl: Sanitized proxy logs
7
+ * - rpc.sanitized.jsonl: Sanitized RPC events
8
+ * - validation-run.log: Validation/generation log
9
+ */
10
+ import { EventsStore } from '../db/events-store.js';
11
+ import { getEventsDb } from '../db/connection.js';
12
+ import { sanitizeRpcEvent, hashFileContent, SANITIZER_RULESET_VERSION, } from './sanitizer.js';
13
+ /**
14
+ * Calculate latency percentiles from RPC calls
15
+ */
16
+ function calculateLatencyPercentiles(rpcs) {
17
+ const latencies = [];
18
+ for (const rpc of rpcs) {
19
+ if (rpc.request_ts && rpc.response_ts) {
20
+ const reqTs = new Date(rpc.request_ts).getTime();
21
+ const resTs = new Date(rpc.response_ts).getTime();
22
+ const latency = resTs - reqTs;
23
+ if (latency >= 0) {
24
+ latencies.push(latency);
25
+ }
26
+ }
27
+ }
28
+ if (latencies.length === 0) {
29
+ return {};
30
+ }
31
+ // Sort for percentile calculation
32
+ latencies.sort((a, b) => a - b);
33
+ const p50Index = Math.floor(latencies.length * 0.5);
34
+ const p95Index = Math.floor(latencies.length * 0.95);
35
+ return {
36
+ p50: latencies[p50Index],
37
+ p95: latencies[Math.min(p95Index, latencies.length - 1)],
38
+ };
39
+ }
40
+ /**
41
+ * Generate status.json artifact
42
+ */
43
+ export function generateStatusArtifact(session, rpcs, events) {
44
+ // Calculate duration
45
+ let durationMs = null;
46
+ if (session.ended_at) {
47
+ const startMs = new Date(session.started_at).getTime();
48
+ const endMs = new Date(session.ended_at).getTime();
49
+ durationMs = endMs - startMs;
50
+ }
51
+ // Calculate error count
52
+ const errorCount = rpcs.filter((r) => r.success === 0).length;
53
+ // Calculate latency percentiles
54
+ const { p50, p95 } = calculateLatencyPercentiles(rpcs);
55
+ // Get unique RPC methods
56
+ const rpcMethods = [...new Set(rpcs.map((r) => r.method))].sort();
57
+ const status = {
58
+ generated_at: new Date().toISOString(),
59
+ sanitizer_version: SANITIZER_RULESET_VERSION,
60
+ session: {
61
+ session_id: session.session_id,
62
+ connector_id: session.connector_id,
63
+ started_at: session.started_at,
64
+ ended_at: session.ended_at,
65
+ exit_reason: session.exit_reason,
66
+ rpc_count: rpcs.length,
67
+ event_count: events.length,
68
+ duration_ms: durationMs,
69
+ actor_kind: session.actor_kind,
70
+ },
71
+ summary: {
72
+ rpc_total: rpcs.length,
73
+ errors: errorCount,
74
+ latency_ms_p50: p50,
75
+ latency_ms_p95: p95,
76
+ },
77
+ rpc_methods: rpcMethods,
78
+ };
79
+ const content = JSON.stringify(status, null, 2);
80
+ const sha256 = hashFileContent(content);
81
+ return {
82
+ artifact: {
83
+ name: 'status.json',
84
+ path: 'status.json',
85
+ sha256,
86
+ },
87
+ content,
88
+ };
89
+ }
90
+ /**
91
+ * Generate rpc.sanitized.jsonl artifact
92
+ */
93
+ export function generateRpcArtifact(sessionId, configDir) {
94
+ const db = getEventsDb(configDir);
95
+ // Get all events for this session
96
+ const events = db
97
+ .prepare(`
98
+ SELECT * FROM events
99
+ WHERE session_id = ?
100
+ ORDER BY ts ASC
101
+ `)
102
+ .all(sessionId);
103
+ // Sanitize each event and write as JSONL
104
+ const lines = [];
105
+ for (const event of events) {
106
+ const sanitized = sanitizeRpcEvent(event);
107
+ lines.push(JSON.stringify(sanitized));
108
+ }
109
+ const content = lines.join('\n') + (lines.length > 0 ? '\n' : '');
110
+ const sha256 = hashFileContent(content);
111
+ return {
112
+ artifact: {
113
+ name: 'rpc.sanitized.jsonl',
114
+ path: 'rpc.sanitized.jsonl',
115
+ sha256,
116
+ },
117
+ content,
118
+ };
119
+ }
120
+ /**
121
+ * Generate logs.sanitized.jsonl artifact (if proxy logs exist)
122
+ */
123
+ export function generateLogsArtifact(logsPath, sessionStarted, sessionEnded) {
124
+ // For now, return null - proxy logs are separate from session data
125
+ // This will be implemented when we have access to proxy logs for the session window
126
+ return null;
127
+ }
128
+ /**
129
+ * Generate validation-run.log artifact
130
+ */
131
+ export function generateValidationArtifact(sessionId, steps) {
132
+ const lines = [
133
+ `# POPL Entry Validation Log`,
134
+ `# Generated: ${new Date().toISOString()}`,
135
+ `# Session: ${sessionId}`,
136
+ `# Sanitizer Version: ${SANITIZER_RULESET_VERSION}`,
137
+ ``,
138
+ `## Steps`,
139
+ ...steps.map((step, i) => `${i + 1}. ${step}`),
140
+ ``,
141
+ `## Result`,
142
+ `Entry generated successfully.`,
143
+ ];
144
+ const content = lines.join('\n') + '\n';
145
+ const sha256 = hashFileContent(content);
146
+ return {
147
+ artifact: {
148
+ name: 'validation-run.log',
149
+ path: 'validation-run.log',
150
+ sha256,
151
+ },
152
+ content,
153
+ };
154
+ }
155
+ /**
156
+ * Generate all artifacts for a session POPL entry
157
+ */
158
+ export async function generateSessionArtifacts(sessionId, configDir) {
159
+ const validationSteps = [];
160
+ // Get session data
161
+ validationSteps.push(`Loading session ${sessionId}`);
162
+ const eventsStore = new EventsStore(configDir);
163
+ const session = eventsStore.getSession(sessionId);
164
+ if (!session) {
165
+ throw new Error(`Session not found: ${sessionId}`);
166
+ }
167
+ validationSteps.push(`Found session for connector: ${session.connector_id}`);
168
+ // Get RPC calls
169
+ const rpcs = eventsStore.getRpcCallsBySession(sessionId);
170
+ validationSteps.push(`Found ${rpcs.length} RPC calls`);
171
+ // Get events
172
+ const db = getEventsDb(configDir);
173
+ const events = db
174
+ .prepare(`SELECT * FROM events WHERE session_id = ?`)
175
+ .all(sessionId);
176
+ validationSteps.push(`Found ${events.length} events`);
177
+ // Generate status.json
178
+ validationSteps.push('Generating status.json');
179
+ const statusResult = generateStatusArtifact(session, rpcs, events);
180
+ // Generate rpc.sanitized.jsonl
181
+ validationSteps.push('Generating rpc.sanitized.jsonl');
182
+ const rpcResult = generateRpcArtifact(sessionId, configDir);
183
+ // Generate validation log
184
+ validationSteps.push('Generating validation-run.log');
185
+ const validationResult = generateValidationArtifact(sessionId, validationSteps);
186
+ // Calculate summary for POPL.yml
187
+ const errorCount = rpcs.filter((r) => r.success === 0).length;
188
+ const { p50, p95 } = calculateLatencyPercentiles(rpcs);
189
+ const summary = {
190
+ rpc_total: rpcs.length,
191
+ errors: errorCount,
192
+ latency_ms_p50: p50,
193
+ latency_ms_p95: p95,
194
+ };
195
+ return {
196
+ artifacts: {
197
+ status: statusResult,
198
+ rpc: rpcResult,
199
+ validation: validationResult,
200
+ },
201
+ session: session,
202
+ summary,
203
+ };
204
+ }
205
+ //# sourceMappingURL=artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/popl/artifacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * POPL Module Exports (Phase 6.0)
3
+ *
4
+ * Public Observable Proof Ledger
5
+ */
6
+ export { POPL_VERSION, TRUST_LABELS, type TrustLevel, type TargetKind, type RedactionPolicy, type PoplAuthor, type PoplTrust, type PoplTargetIds, type PoplTarget, type PoplCaptureSummary, type PoplMcpClient, type PoplMcpServer, type PoplMcp, type PoplCaptureWindow, type PoplCapture, type PoplArtifact, type PoplEvidencePolicy, type PoplEvidence, type PoplEntry, type PoplDocument, type CreatePoplOptions, type CreatePoplResult, type PoplConfig, } from './types.js';
7
+ export { SANITIZER_RULESET_VERSION, sanitize, sanitizeRpcPayload, sanitizeLogLine, sanitizeRpcEvent, hashValue, hashFileContent, type SanitizeResult, } from './sanitizer.js';
8
+ export { generateStatusArtifact, generateRpcArtifact, generateLogsArtifact, generateValidationArtifact, generateSessionArtifacts, type SessionStatus, type StatusJson, type ArtifactResult, type GeneratedArtifacts, } from './artifacts.js';
9
+ export { hasPoplDir, getPoplDir, getPoplEntriesDir, initPoplDir, loadPoplConfig, createSessionPoplEntry, listPoplEntries, readPoplEntry, } from './service.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/popl/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,UAAU,GAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,yBAAyB,EACzB,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,KAAK,cAAc,GACpB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,wBAAwB,EACxB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,kBAAkB,GACxB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,aAAa,GACd,MAAM,cAAc,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * POPL Module Exports (Phase 6.0)
3
+ *
4
+ * Public Observable Proof Ledger
5
+ */
6
+ // Types
7
+ export { POPL_VERSION, TRUST_LABELS, } from './types.js';
8
+ // Sanitizer
9
+ export { SANITIZER_RULESET_VERSION, sanitize, sanitizeRpcPayload, sanitizeLogLine, sanitizeRpcEvent, hashValue, hashFileContent, } from './sanitizer.js';
10
+ // Artifacts
11
+ export { generateStatusArtifact, generateRpcArtifact, generateLogsArtifact, generateValidationArtifact, generateSessionArtifacts, } from './artifacts.js';
12
+ // Service
13
+ export { hasPoplDir, getPoplDir, getPoplEntriesDir, initPoplDir, loadPoplConfig, createSessionPoplEntry, listPoplEntries, readPoplEntry, } from './service.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/popl/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,QAAQ;AACR,OAAO,EACL,YAAY,EACZ,YAAY,GAsBb,MAAM,YAAY,CAAC;AAEpB,YAAY;AACZ,OAAO,EACL,yBAAyB,EACzB,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,SAAS,EACT,eAAe,GAEhB,MAAM,gBAAgB,CAAC;AAExB,YAAY;AACZ,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,wBAAwB,GAKzB,MAAM,gBAAgB,CAAC;AAExB,UAAU;AACV,OAAO,EACL,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,aAAa,GACd,MAAM,cAAc,CAAC"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * POPL Sanitizer (Phase 6.0)
3
+ *
4
+ * Sanitization ruleset v1 for public disclosure safety.
5
+ *
6
+ * Rules:
7
+ * 1. Path removal - Windows and POSIX absolute paths
8
+ * 2. Secret token removal - Authorization, Bearer, api_key, token, secret
9
+ * 3. RPC payload handling - Replace values with hashes, keep key structure
10
+ */
11
+ /** Current sanitization ruleset version */
12
+ export declare const SANITIZER_RULESET_VERSION = 1;
13
+ /**
14
+ * Result of sanitization
15
+ */
16
+ export interface SanitizeResult {
17
+ /** Sanitized value */
18
+ value: unknown;
19
+ /** Number of items redacted */
20
+ redactedCount: number;
21
+ /** Categories of redactions made */
22
+ redactedCategories: Set<'path' | 'secret' | 'value'>;
23
+ }
24
+ /**
25
+ * Compute SHA-256 hash of a value (first 16 chars)
26
+ */
27
+ export declare function hashValue(value: unknown): string;
28
+ /**
29
+ * Sanitize a JSON-like value for public disclosure.
30
+ *
31
+ * @param value - Any JSON-serializable value
32
+ * @param options - Sanitization options
33
+ * @returns Sanitized value and statistics
34
+ */
35
+ export declare function sanitize(value: unknown, options?: {
36
+ deep?: boolean;
37
+ context?: {
38
+ key?: string;
39
+ };
40
+ }): SanitizeResult;
41
+ /**
42
+ * Sanitize RPC payload for public disclosure.
43
+ *
44
+ * This is more aggressive than general sanitization:
45
+ * - Replaces all argument values with hashes
46
+ * - Keeps key structure for auditability
47
+ * - Stores original hash for verification
48
+ *
49
+ * @param payload - RPC arguments or result
50
+ * @returns Sanitized structure with hashes
51
+ */
52
+ export declare function sanitizeRpcPayload(payload: Record<string, unknown> | null | undefined): {
53
+ sanitized: Record<string, unknown> | null;
54
+ payload_sha256: string;
55
+ keys: string[];
56
+ };
57
+ /**
58
+ * Sanitize a log line for public disclosure.
59
+ *
60
+ * @param line - Log line object
61
+ * @returns Sanitized log line
62
+ */
63
+ export declare function sanitizeLogLine(line: Record<string, unknown>): Record<string, unknown>;
64
+ /**
65
+ * Sanitize RPC event for public disclosure.
66
+ *
67
+ * @param event - RPC event object from events.db
68
+ * @returns Sanitized event
69
+ */
70
+ export declare function sanitizeRpcEvent(event: {
71
+ event_id: string;
72
+ session_id: string;
73
+ rpc_id: string | null;
74
+ direction: string;
75
+ kind: string;
76
+ ts: string;
77
+ seq: number | null;
78
+ summary: string | null;
79
+ payload_hash: string | null;
80
+ raw_json: string | null;
81
+ }): Record<string, unknown>;
82
+ /**
83
+ * Compute SHA-256 hash of file contents
84
+ */
85
+ export declare function hashFileContent(content: string | Buffer): string;
86
+ //# sourceMappingURL=sanitizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitizer.d.ts","sourceRoot":"","sources":["../../src/popl/sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,2CAA2C;AAC3C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAqE3C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,sBAAsB;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,+BAA+B;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,kBAAkB,EAAE,GAAG,CAAC,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAC;CACtD;AAsCD;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIhD;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAO,GAC3D,cAAc,CAwDhB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAClD;IACD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC1C,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAyBA;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAGzB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoD1B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEhE"}