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.
- package/README.ja.md +272 -95
- package/README.md +200 -311
- package/dist/cli.js +4 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +2 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/popl.d.ts +16 -0
- package/dist/commands/popl.d.ts.map +1 -0
- package/dist/commands/popl.js +495 -0
- package/dist/commands/popl.js.map +1 -0
- package/dist/popl/artifacts.d.ts +78 -0
- package/dist/popl/artifacts.d.ts.map +1 -0
- package/dist/popl/artifacts.js +205 -0
- package/dist/popl/artifacts.js.map +1 -0
- package/dist/popl/index.d.ts +10 -0
- package/dist/popl/index.d.ts.map +1 -0
- package/dist/popl/index.js +14 -0
- package/dist/popl/index.js.map +1 -0
- package/dist/popl/sanitizer.d.ts +86 -0
- package/dist/popl/sanitizer.d.ts.map +1 -0
- package/dist/popl/sanitizer.js +271 -0
- package/dist/popl/sanitizer.js.map +1 -0
- package/dist/popl/service.d.ts +46 -0
- package/dist/popl/service.d.ts.map +1 -0
- package/dist/popl/service.js +231 -0
- package/dist/popl/service.js.map +1 -0
- package/dist/popl/types.d.ts +195 -0
- package/dist/popl/types.d.ts.map +1 -0
- package/dist/popl/types.js +20 -0
- package/dist/popl/types.js.map +1 -0
- package/dist/shell/popl-commands.d.ts +26 -0
- package/dist/shell/popl-commands.d.ts.map +1 -0
- package/dist/shell/popl-commands.js +281 -0
- package/dist/shell/popl-commands.js.map +1 -0
- package/dist/shell/repl.d.ts.map +1 -1
- package/dist/shell/repl.js +6 -0
- package/dist/shell/repl.js.map +1 -1
- 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"}
|