@agent-inspect/adapter-sdk 6.4.0 → 6.4.1
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/dist/index.cjs +45 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +45 -13
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -255,6 +255,23 @@ var PLUGIN_NAME_PREFIXES = [
|
|
|
255
255
|
"agent-inspect-check-",
|
|
256
256
|
"agent-inspect-importer-"
|
|
257
257
|
];
|
|
258
|
+
var CAPTURE_MODES = /* @__PURE__ */ new Set(["metadata-only", "preview", "full"]);
|
|
259
|
+
function parseStrictBoolean(value, label, errors) {
|
|
260
|
+
if (value === void 0) return void 0;
|
|
261
|
+
if (value === true) return true;
|
|
262
|
+
if (value === false) return false;
|
|
263
|
+
errors.push(`${label} must be a boolean true or false, not ${JSON.stringify(value)}`);
|
|
264
|
+
return void 0;
|
|
265
|
+
}
|
|
266
|
+
function parseCaptureMode(value, errors) {
|
|
267
|
+
if (value === void 0) return void 0;
|
|
268
|
+
const mode = String(value);
|
|
269
|
+
if (!CAPTURE_MODES.has(mode)) {
|
|
270
|
+
errors.push(`privacy.captureMode must be one of: metadata-only, preview, full`);
|
|
271
|
+
return void 0;
|
|
272
|
+
}
|
|
273
|
+
return mode;
|
|
274
|
+
}
|
|
258
275
|
function isPlainObject(value) {
|
|
259
276
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
260
277
|
}
|
|
@@ -303,20 +320,35 @@ function parsePluginManifest(input) {
|
|
|
303
320
|
errors.push("privacy must be an object");
|
|
304
321
|
} else {
|
|
305
322
|
privacy = {};
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
privacy.networkAllowed
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
privacy.
|
|
323
|
+
const captureMode = parseCaptureMode(input.privacy.captureMode, errors);
|
|
324
|
+
if (captureMode !== void 0) privacy.captureMode = captureMode;
|
|
325
|
+
const networkAllowed = parseStrictBoolean(
|
|
326
|
+
input.privacy.networkAllowed,
|
|
327
|
+
"privacy.networkAllowed",
|
|
328
|
+
errors
|
|
329
|
+
);
|
|
330
|
+
if (networkAllowed !== void 0) privacy.networkAllowed = networkAllowed;
|
|
331
|
+
const uploadAllowed = parseStrictBoolean(
|
|
332
|
+
input.privacy.uploadAllowed,
|
|
333
|
+
"privacy.uploadAllowed",
|
|
334
|
+
errors
|
|
335
|
+
);
|
|
336
|
+
if (uploadAllowed !== void 0) privacy.uploadAllowed = uploadAllowed;
|
|
337
|
+
const redactionDocumented = parseStrictBoolean(
|
|
338
|
+
input.privacy.redactionDocumented,
|
|
339
|
+
"privacy.redactionDocumented",
|
|
340
|
+
errors
|
|
341
|
+
);
|
|
342
|
+
if (redactionDocumented !== void 0) {
|
|
343
|
+
privacy.redactionDocumented = redactionDocumented;
|
|
317
344
|
}
|
|
318
|
-
|
|
319
|
-
|
|
345
|
+
const frameworkDepsPackageScoped = parseStrictBoolean(
|
|
346
|
+
input.privacy.frameworkDepsPackageScoped,
|
|
347
|
+
"privacy.frameworkDepsPackageScoped",
|
|
348
|
+
errors
|
|
349
|
+
);
|
|
350
|
+
if (frameworkDepsPackageScoped !== void 0) {
|
|
351
|
+
privacy.frameworkDepsPackageScoped = frameworkDepsPackageScoped;
|
|
320
352
|
}
|
|
321
353
|
if (privacy.networkAllowed === true || privacy.uploadAllowed === true) {
|
|
322
354
|
warnings.push("plugin declares network or upload \u2014 review before install");
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/registration.ts","../src/mapping.ts","../src/fixtures.ts","../src/privacy.ts","../src/conformance.ts","../src/manifest.ts","../src/transform.ts","../src/renderer.ts","../src/indexer.ts"],"names":["persistedInspectEventsToRunTrees","persistedInspectEventsToTraceEvents","readTrace","openTrace","path","readFile","TraceDirectory","loadTraceMetadataList"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { AdapterRegistration } from \"./types.js\";\n\nconst registry = new Map<string, AdapterRegistration>();\n\nexport function createAdapterRegistration(\n input: AdapterRegistration,\n): AdapterRegistration {\n if (!input.id.trim()) throw new Error(\"adapter id is required\");\n if (!input.name.trim()) throw new Error(\"adapter name is required\");\n if (!input.version.trim()) throw new Error(\"adapter version is required\");\n if (!input.framework.trim()) throw new Error(\"adapter framework is required\");\n return { ...input };\n}\n\nexport function registerAdapter(registration: AdapterRegistration): AdapterRegistration {\n const normalized = createAdapterRegistration(registration);\n registry.set(normalized.id, normalized);\n return normalized;\n}\n\nexport function getRegisteredAdapter(id: string): AdapterRegistration | undefined {\n return registry.get(id);\n}\n\nexport function listRegisteredAdapters(): readonly AdapterRegistration[] {\n return [...registry.values()].sort((a, b) => a.id.localeCompare(b.id));\n}\n\nexport function clearAdapterRegistry(): void {\n registry.clear();\n}\n","import type { PersistedInspectEvent } from \"agent-inspect/persisted\";\n\nexport interface InspectNodeLike {\n event: { kind: string };\n children: InspectNodeLike[];\n}\n\nexport function eventsToJsonl(events: readonly unknown[]): string {\n return `${events.map((event) => JSON.stringify(event)).join(\"\\n\")}\\n`;\n}\n\nexport function flattenInspectNodes(nodes: readonly InspectNodeLike[]): InspectNodeLike[] {\n return nodes.flatMap((node) => [node, ...flattenInspectNodes(node.children)]);\n}\n\nexport function extractPersistedKinds(\n events: readonly PersistedInspectEvent[],\n): PersistedInspectEvent[\"kind\"][] {\n return events.map((event) => event.kind);\n}\n\nexport function stableStringify(value: unknown): string {\n return JSON.stringify(sortJson(value)) ?? \"null\";\n}\n\nfunction sortJson(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => sortJson(item));\n }\n if (isPlainRecord(value)) {\n const sorted: Record<string, unknown> = {};\n for (const key of Object.keys(value).sort()) {\n sorted[key] = sortJson(value[key]);\n }\n return sorted;\n }\n return value === undefined ? null : value;\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { AdapterFixtureSkeleton } from \"./types.js\";\n\nconst DEFAULT_COVERS = [\n \"run\",\n \"step\",\n \"tool\",\n \"llm\",\n \"error\",\n \"streaming\",\n \"metadata-bounds\",\n] as const;\n\nexport function createAdapterFixtureSkeleton(adapterId: string): AdapterFixtureSkeleton {\n return {\n adapterId,\n captureDefault: \"metadata-only\",\n network: \"none\",\n suggestedCovers: [...DEFAULT_COVERS],\n notes: [\n \"Use local mocks only; no provider API keys or network calls.\",\n \"Persist metadata-only by default; opt into preview/full capture explicitly.\",\n \"Include forbidden raw strings in conformance tests when prompts are mocked.\",\n \"Run runAdapterConformance against captured PersistedInspectEvent arrays.\",\n ],\n };\n}\n\nexport function createConformanceFixtureMeta(adapterId: string) {\n return {\n adapterId,\n defaults: {\n network: \"none\",\n upload: \"none\",\n capture: \"metadata-only\",\n },\n skeleton: createAdapterFixtureSkeleton(adapterId),\n };\n}\n","import type {\n ConformanceCheck,\n PrivacyChecklistInput,\n PrivacyChecklistItem,\n PrivacyChecklistResult,\n} from \"./types.js\";\n\nexport const PRIVACY_CHECKLIST_ITEMS: readonly PrivacyChecklistItem[] = [\n {\n id: \"capture-metadata-only-default\",\n label: \"Default capture is metadata-only (no full prompts/outputs on disk)\",\n required: true,\n },\n {\n id: \"no-network-by-default\",\n label: \"Adapter tests and defaults do not call external networks\",\n required: true,\n },\n {\n id: \"no-upload\",\n label: \"Adapter does not upload traces or logs to vendors by default\",\n required: true,\n },\n {\n id: \"redaction-documented\",\n label: \"Redaction/capture modes are documented for adapter users\",\n required: true,\n },\n {\n id: \"framework-deps-scoped\",\n label: \"Framework SDK dependencies stay in the optional adapter package\",\n required: true,\n },\n] as const;\n\nexport function runPrivacyChecklist(input: PrivacyChecklistInput = {}): PrivacyChecklistResult {\n const captureMode = input.captureMode ?? \"metadata-only\";\n const items: ConformanceCheck[] = [\n {\n id: \"capture-metadata-only-default\",\n ok: captureMode === \"metadata-only\",\n detail:\n captureMode === \"metadata-only\"\n ? undefined\n : `captureMode is ${captureMode}; metadata-only is required by default`,\n },\n {\n id: \"no-network-by-default\",\n ok: input.networkAllowed !== true,\n detail: input.networkAllowed ? \"network must be disabled in adapter defaults\" : undefined,\n },\n {\n id: \"no-upload\",\n ok: input.uploadAllowed !== true,\n detail: input.uploadAllowed ? \"upload must not be enabled by default\" : undefined,\n },\n {\n id: \"redaction-documented\",\n ok: input.redactionDocumented !== false,\n detail:\n input.redactionDocumented === false\n ? \"document capture/redaction behavior in adapter README\"\n : undefined,\n },\n {\n id: \"framework-deps-scoped\",\n ok: input.frameworkDepsPackageScoped !== false,\n detail:\n input.frameworkDepsPackageScoped === false\n ? \"keep framework SDK deps out of agent-inspect root/core\"\n : undefined,\n },\n ];\n\n const requiredFailed = items.some(\n (item) =>\n PRIVACY_CHECKLIST_ITEMS.find((def) => def.id === item.id)?.required && !item.ok,\n );\n\n return { ok: !requiredFailed, items };\n}\n","import {\n persistedInspectEventsToRunTrees,\n persistedInspectEventsToTraceEvents,\n type PersistedInspectEvent,\n} from \"agent-inspect/persisted\";\nimport { openTrace, readTrace } from \"agent-inspect/readers\";\n\nimport { eventsToJsonl, flattenInspectNodes, stableStringify } from \"./mapping.js\";\nimport type {\n AdapterConformanceOptions,\n AdapterConformanceResult,\n ConformanceCheck,\n} from \"./types.js\";\n\nexport async function runAdapterConformance(\n options: AdapterConformanceOptions,\n): Promise<AdapterConformanceResult> {\n const checks: ConformanceCheck[] = [];\n const { adapterId, events } = options;\n\n checks.push({\n id: \"events-non-empty\",\n ok: events.length > 0,\n detail: events.length > 0 ? undefined : \"expected at least one persisted event\",\n });\n\n const schemaOk = events.every(\n (event) => event.schemaVersion === \"0.2\" || event.schemaVersion === \"1.0\",\n );\n checks.push({\n id: \"schema-persisted\",\n ok: schemaOk,\n detail: schemaOk ? undefined : \"all events must use schemaVersion 0.2 or 1.0\",\n });\n\n if (options.forbiddenRawStrings && options.forbiddenRawStrings.length > 0) {\n const serialized = JSON.stringify(events);\n const leaks = options.forbiddenRawStrings.filter((raw) => serialized.includes(raw));\n checks.push({\n id: \"no-forbidden-raw-strings\",\n ok: leaks.length === 0,\n detail:\n leaks.length === 0 ? undefined : `forbidden raw strings leaked: ${leaks.join(\", \")}`,\n });\n }\n\n try {\n const trees = persistedInspectEventsToRunTrees([...events]);\n checks.push({\n id: \"run-tree-built\",\n ok: trees.length > 0,\n detail: trees.length > 0 ? undefined : \"persistedInspectEventsToRunTrees returned no runs\",\n });\n\n if (options.expectedKinds && options.expectedKinds.length > 0 && trees[0]) {\n const kinds = flattenInspectNodes(trees[0].children).map((node) => node.event.kind);\n const kindsOk = stableStringify(kinds) === stableStringify([...options.expectedKinds]);\n checks.push({\n id: \"expected-kinds\",\n ok: kindsOk,\n detail: kindsOk\n ? undefined\n : `expected kinds ${options.expectedKinds.join(\",\")} but got ${kinds.join(\",\")}`,\n });\n }\n\n const normalized = persistedInspectEventsToTraceEvents([...events]);\n checks.push({\n id: \"legacy-normalization\",\n ok: normalized.length > 0,\n detail:\n normalized.length > 0 ? undefined : \"persistedInspectEventsToTraceEvents returned empty\",\n });\n\n const input = { type: \"string\" as const, content: eventsToJsonl(events) };\n const read = await readTrace(input, { format: \"agent-inspect-jsonl\" });\n const opened = await openTrace(input, { format: \"agent-inspect-jsonl\" });\n const roundTripOk = stableStringify(read.runs) === stableStringify(opened.runs);\n checks.push({\n id: \"reader-round-trip\",\n ok: roundTripOk,\n detail: roundTripOk ? undefined : \"readTrace and openTrace runs differ\",\n });\n } catch (error) {\n checks.push({\n id: \"conformance-runtime\",\n ok: false,\n detail: error instanceof Error ? error.message : String(error),\n });\n }\n\n return {\n ok: checks.every((check) => check.ok),\n adapterId,\n checks,\n };\n}\n\nexport function findPairedLifecycle(\n events: readonly PersistedInspectEvent[],\n kind: PersistedInspectEvent[\"kind\"],\n terminalStatus: \"ok\" | \"error\" = \"ok\",\n): { started?: PersistedInspectEvent; completed?: PersistedInspectEvent } {\n const ofKind = events.filter((event) => event.kind === kind);\n const started = ofKind.find((event) => event.status === \"running\");\n const completed = ofKind.find(\n (event) => event.status === terminalStatus || event.status === \"error\",\n );\n if (started !== undefined || completed === undefined) {\n return { started, completed };\n }\n const completedById = completed;\n const startedById = ofKind.find(\n (event) => event.eventId === completedById.eventId && event.status === \"running\",\n );\n return { started: startedById, completed: completedById };\n}\n","import { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { runPrivacyChecklist } from \"./privacy.js\";\nimport type { PrivacyChecklistInput } from \"./types.js\";\n\nexport const PLUGIN_MANIFEST_FILENAME = \"agent-inspect-plugin.manifest.json\";\nexport const PLUGIN_NAME_PREFIXES = [\n \"agent-inspect-plugin-\",\n \"agent-inspect-adapter-\",\n \"agent-inspect-renderer-\",\n \"agent-inspect-check-\",\n \"agent-inspect-importer-\",\n] as const;\n\nexport type PluginManifestType =\n | \"plugin\"\n | \"adapter\"\n | \"renderer\"\n | \"check\"\n | \"importer\";\n\nexport interface PluginManifest {\n schemaVersion: \"1.0\";\n id: string;\n type: PluginManifestType;\n name: string;\n version: string;\n privacy?: PrivacyChecklistInput;\n}\n\nexport interface PluginManifestParseResult {\n ok: boolean;\n manifest?: PluginManifest;\n errors: string[];\n warnings: string[];\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function isPluginPackageName(name: string): boolean {\n return PLUGIN_NAME_PREFIXES.some((prefix) => name.startsWith(prefix));\n}\n\nexport function inferPluginTypeFromName(name: string): PluginManifestType | undefined {\n if (name.startsWith(\"agent-inspect-adapter-\")) return \"adapter\";\n if (name.startsWith(\"agent-inspect-renderer-\")) return \"renderer\";\n if (name.startsWith(\"agent-inspect-check-\")) return \"check\";\n if (name.startsWith(\"agent-inspect-importer-\")) return \"importer\";\n if (name.startsWith(\"agent-inspect-plugin-\")) return \"plugin\";\n return undefined;\n}\n\nexport function parsePluginManifest(input: unknown): PluginManifestParseResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n if (!isPlainObject(input)) {\n return { ok: false, errors: [\"manifest must be a JSON object\"], warnings };\n }\n if (input.schemaVersion !== \"1.0\") {\n errors.push('schemaVersion must be \"1.0\"');\n }\n const id = typeof input.id === \"string\" ? input.id.trim() : \"\";\n if (!id || !isPluginPackageName(id)) {\n errors.push(\"id must use an agent-inspect plugin naming prefix\");\n }\n const type = typeof input.type === \"string\" ? input.type.trim() : \"\";\n const allowedTypes: PluginManifestType[] = [\n \"plugin\",\n \"adapter\",\n \"renderer\",\n \"check\",\n \"importer\",\n ];\n if (!allowedTypes.includes(type as PluginManifestType)) {\n errors.push(`type must be one of: ${allowedTypes.join(\", \")}`);\n }\n const name = typeof input.name === \"string\" ? input.name.trim() : \"\";\n if (!name) errors.push(\"name must be a non-empty string\");\n const version = typeof input.version === \"string\" ? input.version.trim() : \"\";\n if (!version) errors.push(\"version must be a non-empty string\");\n\n let privacy: PrivacyChecklistInput | undefined;\n if (input.privacy !== undefined) {\n if (!isPlainObject(input.privacy)) {\n errors.push(\"privacy must be an object\");\n } else {\n privacy = {};\n if (input.privacy.captureMode !== undefined) {\n privacy.captureMode = String(input.privacy.captureMode) as PrivacyChecklistInput[\"captureMode\"];\n }\n if (input.privacy.networkAllowed !== undefined) {\n privacy.networkAllowed = Boolean(input.privacy.networkAllowed);\n }\n if (input.privacy.uploadAllowed !== undefined) {\n privacy.uploadAllowed = Boolean(input.privacy.uploadAllowed);\n }\n if (input.privacy.redactionDocumented !== undefined) {\n privacy.redactionDocumented = Boolean(input.privacy.redactionDocumented);\n }\n if (input.privacy.frameworkDepsPackageScoped !== undefined) {\n privacy.frameworkDepsPackageScoped = Boolean(input.privacy.frameworkDepsPackageScoped);\n }\n if (privacy.networkAllowed === true || privacy.uploadAllowed === true) {\n warnings.push(\"plugin declares network or upload — review before install\");\n }\n }\n } else {\n warnings.push(\"privacy block missing; plugins doctor will assume conservative defaults\");\n }\n\n if (errors.length > 0) return { ok: false, errors, warnings };\n\n return {\n ok: true,\n manifest: {\n schemaVersion: \"1.0\",\n id,\n type: type as PluginManifestType,\n name,\n version,\n ...(privacy ? { privacy } : {}),\n },\n errors: [],\n warnings,\n };\n}\n\nexport async function readPluginManifestFile(\n packageDir: string,\n): Promise<PluginManifestParseResult & { path: string }> {\n const manifestPath = path.join(packageDir, PLUGIN_MANIFEST_FILENAME);\n try {\n const raw = await readFile(manifestPath, \"utf8\");\n const parsed = parsePluginManifest(JSON.parse(raw) as unknown);\n return { ...parsed, path: manifestPath };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { ok: false, path: manifestPath, errors: [message], warnings: [] };\n }\n}\n\nexport function validatePluginPrivacy(manifest: PluginManifest) {\n return runPrivacyChecklist(manifest.privacy ?? {});\n}\n","import type { PersistedInspectEvent } from \"agent-inspect/persisted\";\nimport type { TraceReadWarning } from \"agent-inspect/readers\";\n\nexport interface TraceTransformResult {\n events: PersistedInspectEvent[];\n warnings: TraceReadWarning[];\n}\n\nexport interface TraceTransform {\n readonly id: string;\n transform(\n input: readonly PersistedInspectEvent[],\n options?: Record<string, unknown>,\n ): TraceTransformResult;\n}\n\nexport function defineTransform(transform: TraceTransform): TraceTransform {\n if (!transform.id.trim()) throw new Error(\"transform id is required\");\n return transform;\n}\n\nexport function runTransformPipeline(\n input: readonly PersistedInspectEvent[],\n transforms: readonly TraceTransform[],\n options: Record<string, unknown> = {},\n): TraceTransformResult {\n let events = [...input];\n const warnings: TraceReadWarning[] = [];\n\n for (const transform of transforms) {\n const result = transform.transform(events, options);\n events = result.events;\n warnings.push(...result.warnings);\n }\n\n return { events, warnings };\n}\n\nexport function createKindFilterTransform(\n kinds: readonly PersistedInspectEvent[\"kind\"][],\n): TraceTransform {\n const allowed = new Set(kinds);\n return defineTransform({\n id: `filter-kinds:${[...kinds].sort().join(\",\")}`,\n transform(input) {\n const filtered = input.filter(\n (event) => allowed.has(event.kind) || event.kind === \"RUN\",\n );\n const removed = input.length - filtered.length;\n return {\n events: filtered,\n warnings:\n removed > 0\n ? [\n {\n code: \"transform.filter.removed\",\n message: `removed ${removed} events outside allowed kinds`,\n severity: \"warning\",\n },\n ]\n : [],\n };\n },\n });\n}\n","import type { InspectRunTree } from \"agent-inspect/advanced\";\n\nexport type RenderRedactionProfile = \"local\" | \"share\" | \"strict\";\n\nexport interface RenderSafetyOptions {\n redactionProfile?: RenderRedactionProfile;\n maxContentLength?: number;\n forbiddenRawStrings?: readonly string[];\n}\n\nexport interface TraceRendererResult {\n content: string;\n contentType: string;\n warnings: string[];\n}\n\nexport interface TraceRendererOptions extends RenderSafetyOptions {\n [key: string]: unknown;\n}\n\nexport interface TraceRenderer {\n readonly format: string;\n render(tree: InspectRunTree, options?: TraceRendererOptions): TraceRendererResult;\n}\n\nexport function defineRenderer(renderer: TraceRenderer): TraceRenderer {\n if (!renderer.format.trim()) throw new Error(\"renderer format is required\");\n return renderer;\n}\n\nexport function renderWithSafety(\n renderer: TraceRenderer,\n tree: InspectRunTree,\n options: TraceRendererOptions = {},\n): TraceRendererResult {\n const rendered = renderer.render(tree, options);\n const warnings = [...rendered.warnings];\n const maxLen = options.maxContentLength ?? 500_000;\n\n if (rendered.content.length > maxLen) {\n warnings.push(\n `renderer.truncated: content exceeded maxContentLength (${maxLen}); output truncated`,\n );\n return {\n content: rendered.content.slice(0, maxLen),\n contentType: rendered.contentType,\n warnings,\n };\n }\n\n if (options.forbiddenRawStrings && options.forbiddenRawStrings.length > 0) {\n for (const raw of options.forbiddenRawStrings) {\n if (rendered.content.includes(raw)) {\n warnings.push(\n `renderer.forbidden-leak: output contains forbidden substring (${raw.length} chars)`,\n );\n }\n }\n }\n\n if (options.redactionProfile === \"share\" || options.redactionProfile === \"strict\") {\n warnings.push(\n `renderer.redaction-profile:${options.redactionProfile} — verify output before sharing`,\n );\n }\n\n return {\n content: rendered.content,\n contentType: rendered.contentType,\n warnings,\n };\n}\n","import { loadTraceMetadataList, TraceDirectory } from \"agent-inspect/advanced\";\n\nexport interface TraceIndexEntry {\n runId: string;\n path: string;\n name?: string;\n startedAt?: number;\n status?: string;\n}\n\nexport interface TraceIndexSnapshot {\n traceDir: string;\n builtAt: string;\n entries: TraceIndexEntry[];\n warnings: string[];\n}\n\nexport interface TraceIndexOptions {\n maxEntries?: number;\n /** Rebuild when snapshot `builtAt` is older than this ISO timestamp. */\n invalidateBefore?: string;\n [key: string]: unknown;\n}\n\nexport interface TraceIndexer {\n readonly id: string;\n rebuild(traceDir: string, options?: TraceIndexOptions): Promise<TraceIndexSnapshot>;\n}\n\nexport function defineIndexer(indexer: TraceIndexer): TraceIndexer {\n if (!indexer.id.trim()) throw new Error(\"indexer id is required\");\n return indexer;\n}\n\nexport function shouldInvalidateIndex(\n snapshot: TraceIndexSnapshot,\n options: TraceIndexOptions = {},\n): boolean {\n if (!options.invalidateBefore) return false;\n const cutoff = Date.parse(options.invalidateBefore);\n const builtAt = Date.parse(snapshot.builtAt);\n if (Number.isNaN(cutoff) || Number.isNaN(builtAt)) return true;\n return builtAt < cutoff;\n}\n\nexport async function indexIsStale(\n snapshot: TraceIndexSnapshot,\n traceDir: string,\n): Promise<boolean> {\n const builtMs = Date.parse(snapshot.builtAt);\n if (Number.isNaN(builtMs)) return true;\n\n const td = new TraceDirectory({ dir: traceDir });\n const files = await td.list();\n for (const file of files) {\n const stats = await td.getFileStats(file);\n if (stats.mtimeMs > builtMs) return true;\n }\n return false;\n}\n\nexport function createTraceDirectoryIndexer(): TraceIndexer {\n return defineIndexer({\n id: \"trace-directory-metadata\",\n async rebuild(traceDir, options = {}) {\n const warnings: string[] = [];\n const td = new TraceDirectory({ dir: traceDir });\n const files = await td.list();\n const maxEntries = options.maxEntries ?? 10_000;\n\n if (files.length > maxEntries) {\n warnings.push(\n `indexer.truncated: trace directory has ${files.length} files; indexing first ${maxEntries}`,\n );\n }\n\n const slice = files.slice(0, maxEntries);\n const metas = await loadTraceMetadataList(traceDir, slice, (fileName) =>\n td.getPath(fileName),\n );\n\n const entries: TraceIndexEntry[] = metas\n .map((meta) => ({\n runId: meta.runId,\n path: meta.filePath,\n name: meta.name,\n startedAt: meta.startedAt,\n status: meta.status,\n }))\n .sort((a, b) => a.runId.localeCompare(b.runId));\n\n if (entries.length < slice.length) {\n warnings.push(\n `indexer.partial: indexed ${entries.length} of ${slice.length} trace files`,\n );\n }\n\n return {\n traceDir,\n builtAt: new Date().toISOString(),\n entries,\n warnings,\n };\n },\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/registration.ts","../src/mapping.ts","../src/fixtures.ts","../src/privacy.ts","../src/conformance.ts","../src/manifest.ts","../src/transform.ts","../src/renderer.ts","../src/indexer.ts"],"names":["persistedInspectEventsToRunTrees","persistedInspectEventsToTraceEvents","readTrace","openTrace","path","readFile","TraceDirectory","loadTraceMetadataList"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { AdapterRegistration } from \"./types.js\";\n\nconst registry = new Map<string, AdapterRegistration>();\n\nexport function createAdapterRegistration(\n input: AdapterRegistration,\n): AdapterRegistration {\n if (!input.id.trim()) throw new Error(\"adapter id is required\");\n if (!input.name.trim()) throw new Error(\"adapter name is required\");\n if (!input.version.trim()) throw new Error(\"adapter version is required\");\n if (!input.framework.trim()) throw new Error(\"adapter framework is required\");\n return { ...input };\n}\n\nexport function registerAdapter(registration: AdapterRegistration): AdapterRegistration {\n const normalized = createAdapterRegistration(registration);\n registry.set(normalized.id, normalized);\n return normalized;\n}\n\nexport function getRegisteredAdapter(id: string): AdapterRegistration | undefined {\n return registry.get(id);\n}\n\nexport function listRegisteredAdapters(): readonly AdapterRegistration[] {\n return [...registry.values()].sort((a, b) => a.id.localeCompare(b.id));\n}\n\nexport function clearAdapterRegistry(): void {\n registry.clear();\n}\n","import type { PersistedInspectEvent } from \"agent-inspect/persisted\";\n\nexport interface InspectNodeLike {\n event: { kind: string };\n children: InspectNodeLike[];\n}\n\nexport function eventsToJsonl(events: readonly unknown[]): string {\n return `${events.map((event) => JSON.stringify(event)).join(\"\\n\")}\\n`;\n}\n\nexport function flattenInspectNodes(nodes: readonly InspectNodeLike[]): InspectNodeLike[] {\n return nodes.flatMap((node) => [node, ...flattenInspectNodes(node.children)]);\n}\n\nexport function extractPersistedKinds(\n events: readonly PersistedInspectEvent[],\n): PersistedInspectEvent[\"kind\"][] {\n return events.map((event) => event.kind);\n}\n\nexport function stableStringify(value: unknown): string {\n return JSON.stringify(sortJson(value)) ?? \"null\";\n}\n\nfunction sortJson(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => sortJson(item));\n }\n if (isPlainRecord(value)) {\n const sorted: Record<string, unknown> = {};\n for (const key of Object.keys(value).sort()) {\n sorted[key] = sortJson(value[key]);\n }\n return sorted;\n }\n return value === undefined ? null : value;\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { AdapterFixtureSkeleton } from \"./types.js\";\n\nconst DEFAULT_COVERS = [\n \"run\",\n \"step\",\n \"tool\",\n \"llm\",\n \"error\",\n \"streaming\",\n \"metadata-bounds\",\n] as const;\n\nexport function createAdapterFixtureSkeleton(adapterId: string): AdapterFixtureSkeleton {\n return {\n adapterId,\n captureDefault: \"metadata-only\",\n network: \"none\",\n suggestedCovers: [...DEFAULT_COVERS],\n notes: [\n \"Use local mocks only; no provider API keys or network calls.\",\n \"Persist metadata-only by default; opt into preview/full capture explicitly.\",\n \"Include forbidden raw strings in conformance tests when prompts are mocked.\",\n \"Run runAdapterConformance against captured PersistedInspectEvent arrays.\",\n ],\n };\n}\n\nexport function createConformanceFixtureMeta(adapterId: string) {\n return {\n adapterId,\n defaults: {\n network: \"none\",\n upload: \"none\",\n capture: \"metadata-only\",\n },\n skeleton: createAdapterFixtureSkeleton(adapterId),\n };\n}\n","import type {\n ConformanceCheck,\n PrivacyChecklistInput,\n PrivacyChecklistItem,\n PrivacyChecklistResult,\n} from \"./types.js\";\n\nexport const PRIVACY_CHECKLIST_ITEMS: readonly PrivacyChecklistItem[] = [\n {\n id: \"capture-metadata-only-default\",\n label: \"Default capture is metadata-only (no full prompts/outputs on disk)\",\n required: true,\n },\n {\n id: \"no-network-by-default\",\n label: \"Adapter tests and defaults do not call external networks\",\n required: true,\n },\n {\n id: \"no-upload\",\n label: \"Adapter does not upload traces or logs to vendors by default\",\n required: true,\n },\n {\n id: \"redaction-documented\",\n label: \"Redaction/capture modes are documented for adapter users\",\n required: true,\n },\n {\n id: \"framework-deps-scoped\",\n label: \"Framework SDK dependencies stay in the optional adapter package\",\n required: true,\n },\n] as const;\n\nexport function runPrivacyChecklist(input: PrivacyChecklistInput = {}): PrivacyChecklistResult {\n const captureMode = input.captureMode ?? \"metadata-only\";\n const items: ConformanceCheck[] = [\n {\n id: \"capture-metadata-only-default\",\n ok: captureMode === \"metadata-only\",\n detail:\n captureMode === \"metadata-only\"\n ? undefined\n : `captureMode is ${captureMode}; metadata-only is required by default`,\n },\n {\n id: \"no-network-by-default\",\n ok: input.networkAllowed !== true,\n detail: input.networkAllowed ? \"network must be disabled in adapter defaults\" : undefined,\n },\n {\n id: \"no-upload\",\n ok: input.uploadAllowed !== true,\n detail: input.uploadAllowed ? \"upload must not be enabled by default\" : undefined,\n },\n {\n id: \"redaction-documented\",\n ok: input.redactionDocumented !== false,\n detail:\n input.redactionDocumented === false\n ? \"document capture/redaction behavior in adapter README\"\n : undefined,\n },\n {\n id: \"framework-deps-scoped\",\n ok: input.frameworkDepsPackageScoped !== false,\n detail:\n input.frameworkDepsPackageScoped === false\n ? \"keep framework SDK deps out of agent-inspect root/core\"\n : undefined,\n },\n ];\n\n const requiredFailed = items.some(\n (item) =>\n PRIVACY_CHECKLIST_ITEMS.find((def) => def.id === item.id)?.required && !item.ok,\n );\n\n return { ok: !requiredFailed, items };\n}\n","import {\n persistedInspectEventsToRunTrees,\n persistedInspectEventsToTraceEvents,\n type PersistedInspectEvent,\n} from \"agent-inspect/persisted\";\nimport { openTrace, readTrace } from \"agent-inspect/readers\";\n\nimport { eventsToJsonl, flattenInspectNodes, stableStringify } from \"./mapping.js\";\nimport type {\n AdapterConformanceOptions,\n AdapterConformanceResult,\n ConformanceCheck,\n} from \"./types.js\";\n\nexport async function runAdapterConformance(\n options: AdapterConformanceOptions,\n): Promise<AdapterConformanceResult> {\n const checks: ConformanceCheck[] = [];\n const { adapterId, events } = options;\n\n checks.push({\n id: \"events-non-empty\",\n ok: events.length > 0,\n detail: events.length > 0 ? undefined : \"expected at least one persisted event\",\n });\n\n const schemaOk = events.every(\n (event) => event.schemaVersion === \"0.2\" || event.schemaVersion === \"1.0\",\n );\n checks.push({\n id: \"schema-persisted\",\n ok: schemaOk,\n detail: schemaOk ? undefined : \"all events must use schemaVersion 0.2 or 1.0\",\n });\n\n if (options.forbiddenRawStrings && options.forbiddenRawStrings.length > 0) {\n const serialized = JSON.stringify(events);\n const leaks = options.forbiddenRawStrings.filter((raw) => serialized.includes(raw));\n checks.push({\n id: \"no-forbidden-raw-strings\",\n ok: leaks.length === 0,\n detail:\n leaks.length === 0 ? undefined : `forbidden raw strings leaked: ${leaks.join(\", \")}`,\n });\n }\n\n try {\n const trees = persistedInspectEventsToRunTrees([...events]);\n checks.push({\n id: \"run-tree-built\",\n ok: trees.length > 0,\n detail: trees.length > 0 ? undefined : \"persistedInspectEventsToRunTrees returned no runs\",\n });\n\n if (options.expectedKinds && options.expectedKinds.length > 0 && trees[0]) {\n const kinds = flattenInspectNodes(trees[0].children).map((node) => node.event.kind);\n const kindsOk = stableStringify(kinds) === stableStringify([...options.expectedKinds]);\n checks.push({\n id: \"expected-kinds\",\n ok: kindsOk,\n detail: kindsOk\n ? undefined\n : `expected kinds ${options.expectedKinds.join(\",\")} but got ${kinds.join(\",\")}`,\n });\n }\n\n const normalized = persistedInspectEventsToTraceEvents([...events]);\n checks.push({\n id: \"legacy-normalization\",\n ok: normalized.length > 0,\n detail:\n normalized.length > 0 ? undefined : \"persistedInspectEventsToTraceEvents returned empty\",\n });\n\n const input = { type: \"string\" as const, content: eventsToJsonl(events) };\n const read = await readTrace(input, { format: \"agent-inspect-jsonl\" });\n const opened = await openTrace(input, { format: \"agent-inspect-jsonl\" });\n const roundTripOk = stableStringify(read.runs) === stableStringify(opened.runs);\n checks.push({\n id: \"reader-round-trip\",\n ok: roundTripOk,\n detail: roundTripOk ? undefined : \"readTrace and openTrace runs differ\",\n });\n } catch (error) {\n checks.push({\n id: \"conformance-runtime\",\n ok: false,\n detail: error instanceof Error ? error.message : String(error),\n });\n }\n\n return {\n ok: checks.every((check) => check.ok),\n adapterId,\n checks,\n };\n}\n\nexport function findPairedLifecycle(\n events: readonly PersistedInspectEvent[],\n kind: PersistedInspectEvent[\"kind\"],\n terminalStatus: \"ok\" | \"error\" = \"ok\",\n): { started?: PersistedInspectEvent; completed?: PersistedInspectEvent } {\n const ofKind = events.filter((event) => event.kind === kind);\n const started = ofKind.find((event) => event.status === \"running\");\n const completed = ofKind.find(\n (event) => event.status === terminalStatus || event.status === \"error\",\n );\n if (started !== undefined || completed === undefined) {\n return { started, completed };\n }\n const completedById = completed;\n const startedById = ofKind.find(\n (event) => event.eventId === completedById.eventId && event.status === \"running\",\n );\n return { started: startedById, completed: completedById };\n}\n","import { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { runPrivacyChecklist } from \"./privacy.js\";\nimport type { PrivacyChecklistInput } from \"./types.js\";\n\nexport const PLUGIN_MANIFEST_FILENAME = \"agent-inspect-plugin.manifest.json\";\nexport const PLUGIN_NAME_PREFIXES = [\n \"agent-inspect-plugin-\",\n \"agent-inspect-adapter-\",\n \"agent-inspect-renderer-\",\n \"agent-inspect-check-\",\n \"agent-inspect-importer-\",\n] as const;\n\nexport type PluginManifestType =\n | \"plugin\"\n | \"adapter\"\n | \"renderer\"\n | \"check\"\n | \"importer\";\n\nexport interface PluginManifest {\n schemaVersion: \"1.0\";\n id: string;\n type: PluginManifestType;\n name: string;\n version: string;\n privacy?: PrivacyChecklistInput;\n}\n\nexport interface PluginManifestParseResult {\n ok: boolean;\n manifest?: PluginManifest;\n errors: string[];\n warnings: string[];\n}\n\nconst CAPTURE_MODES = new Set([\"metadata-only\", \"preview\", \"full\"]);\n\nfunction parseStrictBoolean(\n value: unknown,\n label: string,\n errors: string[],\n): boolean | undefined {\n if (value === undefined) return undefined;\n if (value === true) return true;\n if (value === false) return false;\n errors.push(`${label} must be a boolean true or false, not ${JSON.stringify(value)}`);\n return undefined;\n}\n\nfunction parseCaptureMode(\n value: unknown,\n errors: string[],\n): PrivacyChecklistInput[\"captureMode\"] | undefined {\n if (value === undefined) return undefined;\n const mode = String(value);\n if (!CAPTURE_MODES.has(mode)) {\n errors.push(`privacy.captureMode must be one of: metadata-only, preview, full`);\n return undefined;\n }\n return mode as PrivacyChecklistInput[\"captureMode\"];\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function isPluginPackageName(name: string): boolean {\n return PLUGIN_NAME_PREFIXES.some((prefix) => name.startsWith(prefix));\n}\n\nexport function inferPluginTypeFromName(name: string): PluginManifestType | undefined {\n if (name.startsWith(\"agent-inspect-adapter-\")) return \"adapter\";\n if (name.startsWith(\"agent-inspect-renderer-\")) return \"renderer\";\n if (name.startsWith(\"agent-inspect-check-\")) return \"check\";\n if (name.startsWith(\"agent-inspect-importer-\")) return \"importer\";\n if (name.startsWith(\"agent-inspect-plugin-\")) return \"plugin\";\n return undefined;\n}\n\nexport function parsePluginManifest(input: unknown): PluginManifestParseResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n if (!isPlainObject(input)) {\n return { ok: false, errors: [\"manifest must be a JSON object\"], warnings };\n }\n if (input.schemaVersion !== \"1.0\") {\n errors.push('schemaVersion must be \"1.0\"');\n }\n const id = typeof input.id === \"string\" ? input.id.trim() : \"\";\n if (!id || !isPluginPackageName(id)) {\n errors.push(\"id must use an agent-inspect plugin naming prefix\");\n }\n const type = typeof input.type === \"string\" ? input.type.trim() : \"\";\n const allowedTypes: PluginManifestType[] = [\n \"plugin\",\n \"adapter\",\n \"renderer\",\n \"check\",\n \"importer\",\n ];\n if (!allowedTypes.includes(type as PluginManifestType)) {\n errors.push(`type must be one of: ${allowedTypes.join(\", \")}`);\n }\n const name = typeof input.name === \"string\" ? input.name.trim() : \"\";\n if (!name) errors.push(\"name must be a non-empty string\");\n const version = typeof input.version === \"string\" ? input.version.trim() : \"\";\n if (!version) errors.push(\"version must be a non-empty string\");\n\n let privacy: PrivacyChecklistInput | undefined;\n if (input.privacy !== undefined) {\n if (!isPlainObject(input.privacy)) {\n errors.push(\"privacy must be an object\");\n } else {\n privacy = {};\n const captureMode = parseCaptureMode(input.privacy.captureMode, errors);\n if (captureMode !== undefined) privacy.captureMode = captureMode;\n const networkAllowed = parseStrictBoolean(\n input.privacy.networkAllowed,\n \"privacy.networkAllowed\",\n errors,\n );\n if (networkAllowed !== undefined) privacy.networkAllowed = networkAllowed;\n const uploadAllowed = parseStrictBoolean(\n input.privacy.uploadAllowed,\n \"privacy.uploadAllowed\",\n errors,\n );\n if (uploadAllowed !== undefined) privacy.uploadAllowed = uploadAllowed;\n const redactionDocumented = parseStrictBoolean(\n input.privacy.redactionDocumented,\n \"privacy.redactionDocumented\",\n errors,\n );\n if (redactionDocumented !== undefined) {\n privacy.redactionDocumented = redactionDocumented;\n }\n const frameworkDepsPackageScoped = parseStrictBoolean(\n input.privacy.frameworkDepsPackageScoped,\n \"privacy.frameworkDepsPackageScoped\",\n errors,\n );\n if (frameworkDepsPackageScoped !== undefined) {\n privacy.frameworkDepsPackageScoped = frameworkDepsPackageScoped;\n }\n if (privacy.networkAllowed === true || privacy.uploadAllowed === true) {\n warnings.push(\"plugin declares network or upload — review before install\");\n }\n }\n } else {\n warnings.push(\"privacy block missing; plugins doctor will assume conservative defaults\");\n }\n\n if (errors.length > 0) return { ok: false, errors, warnings };\n\n return {\n ok: true,\n manifest: {\n schemaVersion: \"1.0\",\n id,\n type: type as PluginManifestType,\n name,\n version,\n ...(privacy ? { privacy } : {}),\n },\n errors: [],\n warnings,\n };\n}\n\nexport async function readPluginManifestFile(\n packageDir: string,\n): Promise<PluginManifestParseResult & { path: string }> {\n const manifestPath = path.join(packageDir, PLUGIN_MANIFEST_FILENAME);\n try {\n const raw = await readFile(manifestPath, \"utf8\");\n const parsed = parsePluginManifest(JSON.parse(raw) as unknown);\n return { ...parsed, path: manifestPath };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { ok: false, path: manifestPath, errors: [message], warnings: [] };\n }\n}\n\nexport function validatePluginPrivacy(manifest: PluginManifest) {\n return runPrivacyChecklist(manifest.privacy ?? {});\n}\n","import type { PersistedInspectEvent } from \"agent-inspect/persisted\";\nimport type { TraceReadWarning } from \"agent-inspect/readers\";\n\nexport interface TraceTransformResult {\n events: PersistedInspectEvent[];\n warnings: TraceReadWarning[];\n}\n\nexport interface TraceTransform {\n readonly id: string;\n transform(\n input: readonly PersistedInspectEvent[],\n options?: Record<string, unknown>,\n ): TraceTransformResult;\n}\n\nexport function defineTransform(transform: TraceTransform): TraceTransform {\n if (!transform.id.trim()) throw new Error(\"transform id is required\");\n return transform;\n}\n\nexport function runTransformPipeline(\n input: readonly PersistedInspectEvent[],\n transforms: readonly TraceTransform[],\n options: Record<string, unknown> = {},\n): TraceTransformResult {\n let events = [...input];\n const warnings: TraceReadWarning[] = [];\n\n for (const transform of transforms) {\n const result = transform.transform(events, options);\n events = result.events;\n warnings.push(...result.warnings);\n }\n\n return { events, warnings };\n}\n\nexport function createKindFilterTransform(\n kinds: readonly PersistedInspectEvent[\"kind\"][],\n): TraceTransform {\n const allowed = new Set(kinds);\n return defineTransform({\n id: `filter-kinds:${[...kinds].sort().join(\",\")}`,\n transform(input) {\n const filtered = input.filter(\n (event) => allowed.has(event.kind) || event.kind === \"RUN\",\n );\n const removed = input.length - filtered.length;\n return {\n events: filtered,\n warnings:\n removed > 0\n ? [\n {\n code: \"transform.filter.removed\",\n message: `removed ${removed} events outside allowed kinds`,\n severity: \"warning\",\n },\n ]\n : [],\n };\n },\n });\n}\n","import type { InspectRunTree } from \"agent-inspect/advanced\";\n\nexport type RenderRedactionProfile = \"local\" | \"share\" | \"strict\";\n\nexport interface RenderSafetyOptions {\n redactionProfile?: RenderRedactionProfile;\n maxContentLength?: number;\n forbiddenRawStrings?: readonly string[];\n}\n\nexport interface TraceRendererResult {\n content: string;\n contentType: string;\n warnings: string[];\n}\n\nexport interface TraceRendererOptions extends RenderSafetyOptions {\n [key: string]: unknown;\n}\n\nexport interface TraceRenderer {\n readonly format: string;\n render(tree: InspectRunTree, options?: TraceRendererOptions): TraceRendererResult;\n}\n\nexport function defineRenderer(renderer: TraceRenderer): TraceRenderer {\n if (!renderer.format.trim()) throw new Error(\"renderer format is required\");\n return renderer;\n}\n\nexport function renderWithSafety(\n renderer: TraceRenderer,\n tree: InspectRunTree,\n options: TraceRendererOptions = {},\n): TraceRendererResult {\n const rendered = renderer.render(tree, options);\n const warnings = [...rendered.warnings];\n const maxLen = options.maxContentLength ?? 500_000;\n\n if (rendered.content.length > maxLen) {\n warnings.push(\n `renderer.truncated: content exceeded maxContentLength (${maxLen}); output truncated`,\n );\n return {\n content: rendered.content.slice(0, maxLen),\n contentType: rendered.contentType,\n warnings,\n };\n }\n\n if (options.forbiddenRawStrings && options.forbiddenRawStrings.length > 0) {\n for (const raw of options.forbiddenRawStrings) {\n if (rendered.content.includes(raw)) {\n warnings.push(\n `renderer.forbidden-leak: output contains forbidden substring (${raw.length} chars)`,\n );\n }\n }\n }\n\n if (options.redactionProfile === \"share\" || options.redactionProfile === \"strict\") {\n warnings.push(\n `renderer.redaction-profile:${options.redactionProfile} — verify output before sharing`,\n );\n }\n\n return {\n content: rendered.content,\n contentType: rendered.contentType,\n warnings,\n };\n}\n","import { loadTraceMetadataList, TraceDirectory } from \"agent-inspect/advanced\";\n\nexport interface TraceIndexEntry {\n runId: string;\n path: string;\n name?: string;\n startedAt?: number;\n status?: string;\n}\n\nexport interface TraceIndexSnapshot {\n traceDir: string;\n builtAt: string;\n entries: TraceIndexEntry[];\n warnings: string[];\n}\n\nexport interface TraceIndexOptions {\n maxEntries?: number;\n /** Rebuild when snapshot `builtAt` is older than this ISO timestamp. */\n invalidateBefore?: string;\n [key: string]: unknown;\n}\n\nexport interface TraceIndexer {\n readonly id: string;\n rebuild(traceDir: string, options?: TraceIndexOptions): Promise<TraceIndexSnapshot>;\n}\n\nexport function defineIndexer(indexer: TraceIndexer): TraceIndexer {\n if (!indexer.id.trim()) throw new Error(\"indexer id is required\");\n return indexer;\n}\n\nexport function shouldInvalidateIndex(\n snapshot: TraceIndexSnapshot,\n options: TraceIndexOptions = {},\n): boolean {\n if (!options.invalidateBefore) return false;\n const cutoff = Date.parse(options.invalidateBefore);\n const builtAt = Date.parse(snapshot.builtAt);\n if (Number.isNaN(cutoff) || Number.isNaN(builtAt)) return true;\n return builtAt < cutoff;\n}\n\nexport async function indexIsStale(\n snapshot: TraceIndexSnapshot,\n traceDir: string,\n): Promise<boolean> {\n const builtMs = Date.parse(snapshot.builtAt);\n if (Number.isNaN(builtMs)) return true;\n\n const td = new TraceDirectory({ dir: traceDir });\n const files = await td.list();\n for (const file of files) {\n const stats = await td.getFileStats(file);\n if (stats.mtimeMs > builtMs) return true;\n }\n return false;\n}\n\nexport function createTraceDirectoryIndexer(): TraceIndexer {\n return defineIndexer({\n id: \"trace-directory-metadata\",\n async rebuild(traceDir, options = {}) {\n const warnings: string[] = [];\n const td = new TraceDirectory({ dir: traceDir });\n const files = await td.list();\n const maxEntries = options.maxEntries ?? 10_000;\n\n if (files.length > maxEntries) {\n warnings.push(\n `indexer.truncated: trace directory has ${files.length} files; indexing first ${maxEntries}`,\n );\n }\n\n const slice = files.slice(0, maxEntries);\n const metas = await loadTraceMetadataList(traceDir, slice, (fileName) =>\n td.getPath(fileName),\n );\n\n const entries: TraceIndexEntry[] = metas\n .map((meta) => ({\n runId: meta.runId,\n path: meta.filePath,\n name: meta.name,\n startedAt: meta.startedAt,\n status: meta.status,\n }))\n .sort((a, b) => a.runId.localeCompare(b.runId));\n\n if (entries.length < slice.length) {\n warnings.push(\n `indexer.partial: indexed ${entries.length} of ${slice.length} trace files`,\n );\n }\n\n return {\n traceDir,\n builtAt: new Date().toISOString(),\n entries,\n warnings,\n };\n },\n });\n}\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -249,6 +249,23 @@ var PLUGIN_NAME_PREFIXES = [
|
|
|
249
249
|
"agent-inspect-check-",
|
|
250
250
|
"agent-inspect-importer-"
|
|
251
251
|
];
|
|
252
|
+
var CAPTURE_MODES = /* @__PURE__ */ new Set(["metadata-only", "preview", "full"]);
|
|
253
|
+
function parseStrictBoolean(value, label, errors) {
|
|
254
|
+
if (value === void 0) return void 0;
|
|
255
|
+
if (value === true) return true;
|
|
256
|
+
if (value === false) return false;
|
|
257
|
+
errors.push(`${label} must be a boolean true or false, not ${JSON.stringify(value)}`);
|
|
258
|
+
return void 0;
|
|
259
|
+
}
|
|
260
|
+
function parseCaptureMode(value, errors) {
|
|
261
|
+
if (value === void 0) return void 0;
|
|
262
|
+
const mode = String(value);
|
|
263
|
+
if (!CAPTURE_MODES.has(mode)) {
|
|
264
|
+
errors.push(`privacy.captureMode must be one of: metadata-only, preview, full`);
|
|
265
|
+
return void 0;
|
|
266
|
+
}
|
|
267
|
+
return mode;
|
|
268
|
+
}
|
|
252
269
|
function isPlainObject(value) {
|
|
253
270
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
254
271
|
}
|
|
@@ -297,20 +314,35 @@ function parsePluginManifest(input) {
|
|
|
297
314
|
errors.push("privacy must be an object");
|
|
298
315
|
} else {
|
|
299
316
|
privacy = {};
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
privacy.networkAllowed
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
privacy.
|
|
317
|
+
const captureMode = parseCaptureMode(input.privacy.captureMode, errors);
|
|
318
|
+
if (captureMode !== void 0) privacy.captureMode = captureMode;
|
|
319
|
+
const networkAllowed = parseStrictBoolean(
|
|
320
|
+
input.privacy.networkAllowed,
|
|
321
|
+
"privacy.networkAllowed",
|
|
322
|
+
errors
|
|
323
|
+
);
|
|
324
|
+
if (networkAllowed !== void 0) privacy.networkAllowed = networkAllowed;
|
|
325
|
+
const uploadAllowed = parseStrictBoolean(
|
|
326
|
+
input.privacy.uploadAllowed,
|
|
327
|
+
"privacy.uploadAllowed",
|
|
328
|
+
errors
|
|
329
|
+
);
|
|
330
|
+
if (uploadAllowed !== void 0) privacy.uploadAllowed = uploadAllowed;
|
|
331
|
+
const redactionDocumented = parseStrictBoolean(
|
|
332
|
+
input.privacy.redactionDocumented,
|
|
333
|
+
"privacy.redactionDocumented",
|
|
334
|
+
errors
|
|
335
|
+
);
|
|
336
|
+
if (redactionDocumented !== void 0) {
|
|
337
|
+
privacy.redactionDocumented = redactionDocumented;
|
|
311
338
|
}
|
|
312
|
-
|
|
313
|
-
|
|
339
|
+
const frameworkDepsPackageScoped = parseStrictBoolean(
|
|
340
|
+
input.privacy.frameworkDepsPackageScoped,
|
|
341
|
+
"privacy.frameworkDepsPackageScoped",
|
|
342
|
+
errors
|
|
343
|
+
);
|
|
344
|
+
if (frameworkDepsPackageScoped !== void 0) {
|
|
345
|
+
privacy.frameworkDepsPackageScoped = frameworkDepsPackageScoped;
|
|
314
346
|
}
|
|
315
347
|
if (privacy.networkAllowed === true || privacy.uploadAllowed === true) {
|
|
316
348
|
warnings.push("plugin declares network or upload \u2014 review before install");
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/registration.ts","../src/mapping.ts","../src/fixtures.ts","../src/privacy.ts","../src/conformance.ts","../src/manifest.ts","../src/transform.ts","../src/renderer.ts","../src/indexer.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type { AdapterRegistration } from \"./types.js\";\n\nconst registry = new Map<string, AdapterRegistration>();\n\nexport function createAdapterRegistration(\n input: AdapterRegistration,\n): AdapterRegistration {\n if (!input.id.trim()) throw new Error(\"adapter id is required\");\n if (!input.name.trim()) throw new Error(\"adapter name is required\");\n if (!input.version.trim()) throw new Error(\"adapter version is required\");\n if (!input.framework.trim()) throw new Error(\"adapter framework is required\");\n return { ...input };\n}\n\nexport function registerAdapter(registration: AdapterRegistration): AdapterRegistration {\n const normalized = createAdapterRegistration(registration);\n registry.set(normalized.id, normalized);\n return normalized;\n}\n\nexport function getRegisteredAdapter(id: string): AdapterRegistration | undefined {\n return registry.get(id);\n}\n\nexport function listRegisteredAdapters(): readonly AdapterRegistration[] {\n return [...registry.values()].sort((a, b) => a.id.localeCompare(b.id));\n}\n\nexport function clearAdapterRegistry(): void {\n registry.clear();\n}\n","import type { PersistedInspectEvent } from \"agent-inspect/persisted\";\n\nexport interface InspectNodeLike {\n event: { kind: string };\n children: InspectNodeLike[];\n}\n\nexport function eventsToJsonl(events: readonly unknown[]): string {\n return `${events.map((event) => JSON.stringify(event)).join(\"\\n\")}\\n`;\n}\n\nexport function flattenInspectNodes(nodes: readonly InspectNodeLike[]): InspectNodeLike[] {\n return nodes.flatMap((node) => [node, ...flattenInspectNodes(node.children)]);\n}\n\nexport function extractPersistedKinds(\n events: readonly PersistedInspectEvent[],\n): PersistedInspectEvent[\"kind\"][] {\n return events.map((event) => event.kind);\n}\n\nexport function stableStringify(value: unknown): string {\n return JSON.stringify(sortJson(value)) ?? \"null\";\n}\n\nfunction sortJson(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => sortJson(item));\n }\n if (isPlainRecord(value)) {\n const sorted: Record<string, unknown> = {};\n for (const key of Object.keys(value).sort()) {\n sorted[key] = sortJson(value[key]);\n }\n return sorted;\n }\n return value === undefined ? null : value;\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { AdapterFixtureSkeleton } from \"./types.js\";\n\nconst DEFAULT_COVERS = [\n \"run\",\n \"step\",\n \"tool\",\n \"llm\",\n \"error\",\n \"streaming\",\n \"metadata-bounds\",\n] as const;\n\nexport function createAdapterFixtureSkeleton(adapterId: string): AdapterFixtureSkeleton {\n return {\n adapterId,\n captureDefault: \"metadata-only\",\n network: \"none\",\n suggestedCovers: [...DEFAULT_COVERS],\n notes: [\n \"Use local mocks only; no provider API keys or network calls.\",\n \"Persist metadata-only by default; opt into preview/full capture explicitly.\",\n \"Include forbidden raw strings in conformance tests when prompts are mocked.\",\n \"Run runAdapterConformance against captured PersistedInspectEvent arrays.\",\n ],\n };\n}\n\nexport function createConformanceFixtureMeta(adapterId: string) {\n return {\n adapterId,\n defaults: {\n network: \"none\",\n upload: \"none\",\n capture: \"metadata-only\",\n },\n skeleton: createAdapterFixtureSkeleton(adapterId),\n };\n}\n","import type {\n ConformanceCheck,\n PrivacyChecklistInput,\n PrivacyChecklistItem,\n PrivacyChecklistResult,\n} from \"./types.js\";\n\nexport const PRIVACY_CHECKLIST_ITEMS: readonly PrivacyChecklistItem[] = [\n {\n id: \"capture-metadata-only-default\",\n label: \"Default capture is metadata-only (no full prompts/outputs on disk)\",\n required: true,\n },\n {\n id: \"no-network-by-default\",\n label: \"Adapter tests and defaults do not call external networks\",\n required: true,\n },\n {\n id: \"no-upload\",\n label: \"Adapter does not upload traces or logs to vendors by default\",\n required: true,\n },\n {\n id: \"redaction-documented\",\n label: \"Redaction/capture modes are documented for adapter users\",\n required: true,\n },\n {\n id: \"framework-deps-scoped\",\n label: \"Framework SDK dependencies stay in the optional adapter package\",\n required: true,\n },\n] as const;\n\nexport function runPrivacyChecklist(input: PrivacyChecklistInput = {}): PrivacyChecklistResult {\n const captureMode = input.captureMode ?? \"metadata-only\";\n const items: ConformanceCheck[] = [\n {\n id: \"capture-metadata-only-default\",\n ok: captureMode === \"metadata-only\",\n detail:\n captureMode === \"metadata-only\"\n ? undefined\n : `captureMode is ${captureMode}; metadata-only is required by default`,\n },\n {\n id: \"no-network-by-default\",\n ok: input.networkAllowed !== true,\n detail: input.networkAllowed ? \"network must be disabled in adapter defaults\" : undefined,\n },\n {\n id: \"no-upload\",\n ok: input.uploadAllowed !== true,\n detail: input.uploadAllowed ? \"upload must not be enabled by default\" : undefined,\n },\n {\n id: \"redaction-documented\",\n ok: input.redactionDocumented !== false,\n detail:\n input.redactionDocumented === false\n ? \"document capture/redaction behavior in adapter README\"\n : undefined,\n },\n {\n id: \"framework-deps-scoped\",\n ok: input.frameworkDepsPackageScoped !== false,\n detail:\n input.frameworkDepsPackageScoped === false\n ? \"keep framework SDK deps out of agent-inspect root/core\"\n : undefined,\n },\n ];\n\n const requiredFailed = items.some(\n (item) =>\n PRIVACY_CHECKLIST_ITEMS.find((def) => def.id === item.id)?.required && !item.ok,\n );\n\n return { ok: !requiredFailed, items };\n}\n","import {\n persistedInspectEventsToRunTrees,\n persistedInspectEventsToTraceEvents,\n type PersistedInspectEvent,\n} from \"agent-inspect/persisted\";\nimport { openTrace, readTrace } from \"agent-inspect/readers\";\n\nimport { eventsToJsonl, flattenInspectNodes, stableStringify } from \"./mapping.js\";\nimport type {\n AdapterConformanceOptions,\n AdapterConformanceResult,\n ConformanceCheck,\n} from \"./types.js\";\n\nexport async function runAdapterConformance(\n options: AdapterConformanceOptions,\n): Promise<AdapterConformanceResult> {\n const checks: ConformanceCheck[] = [];\n const { adapterId, events } = options;\n\n checks.push({\n id: \"events-non-empty\",\n ok: events.length > 0,\n detail: events.length > 0 ? undefined : \"expected at least one persisted event\",\n });\n\n const schemaOk = events.every(\n (event) => event.schemaVersion === \"0.2\" || event.schemaVersion === \"1.0\",\n );\n checks.push({\n id: \"schema-persisted\",\n ok: schemaOk,\n detail: schemaOk ? undefined : \"all events must use schemaVersion 0.2 or 1.0\",\n });\n\n if (options.forbiddenRawStrings && options.forbiddenRawStrings.length > 0) {\n const serialized = JSON.stringify(events);\n const leaks = options.forbiddenRawStrings.filter((raw) => serialized.includes(raw));\n checks.push({\n id: \"no-forbidden-raw-strings\",\n ok: leaks.length === 0,\n detail:\n leaks.length === 0 ? undefined : `forbidden raw strings leaked: ${leaks.join(\", \")}`,\n });\n }\n\n try {\n const trees = persistedInspectEventsToRunTrees([...events]);\n checks.push({\n id: \"run-tree-built\",\n ok: trees.length > 0,\n detail: trees.length > 0 ? undefined : \"persistedInspectEventsToRunTrees returned no runs\",\n });\n\n if (options.expectedKinds && options.expectedKinds.length > 0 && trees[0]) {\n const kinds = flattenInspectNodes(trees[0].children).map((node) => node.event.kind);\n const kindsOk = stableStringify(kinds) === stableStringify([...options.expectedKinds]);\n checks.push({\n id: \"expected-kinds\",\n ok: kindsOk,\n detail: kindsOk\n ? undefined\n : `expected kinds ${options.expectedKinds.join(\",\")} but got ${kinds.join(\",\")}`,\n });\n }\n\n const normalized = persistedInspectEventsToTraceEvents([...events]);\n checks.push({\n id: \"legacy-normalization\",\n ok: normalized.length > 0,\n detail:\n normalized.length > 0 ? undefined : \"persistedInspectEventsToTraceEvents returned empty\",\n });\n\n const input = { type: \"string\" as const, content: eventsToJsonl(events) };\n const read = await readTrace(input, { format: \"agent-inspect-jsonl\" });\n const opened = await openTrace(input, { format: \"agent-inspect-jsonl\" });\n const roundTripOk = stableStringify(read.runs) === stableStringify(opened.runs);\n checks.push({\n id: \"reader-round-trip\",\n ok: roundTripOk,\n detail: roundTripOk ? undefined : \"readTrace and openTrace runs differ\",\n });\n } catch (error) {\n checks.push({\n id: \"conformance-runtime\",\n ok: false,\n detail: error instanceof Error ? error.message : String(error),\n });\n }\n\n return {\n ok: checks.every((check) => check.ok),\n adapterId,\n checks,\n };\n}\n\nexport function findPairedLifecycle(\n events: readonly PersistedInspectEvent[],\n kind: PersistedInspectEvent[\"kind\"],\n terminalStatus: \"ok\" | \"error\" = \"ok\",\n): { started?: PersistedInspectEvent; completed?: PersistedInspectEvent } {\n const ofKind = events.filter((event) => event.kind === kind);\n const started = ofKind.find((event) => event.status === \"running\");\n const completed = ofKind.find(\n (event) => event.status === terminalStatus || event.status === \"error\",\n );\n if (started !== undefined || completed === undefined) {\n return { started, completed };\n }\n const completedById = completed;\n const startedById = ofKind.find(\n (event) => event.eventId === completedById.eventId && event.status === \"running\",\n );\n return { started: startedById, completed: completedById };\n}\n","import { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { runPrivacyChecklist } from \"./privacy.js\";\nimport type { PrivacyChecklistInput } from \"./types.js\";\n\nexport const PLUGIN_MANIFEST_FILENAME = \"agent-inspect-plugin.manifest.json\";\nexport const PLUGIN_NAME_PREFIXES = [\n \"agent-inspect-plugin-\",\n \"agent-inspect-adapter-\",\n \"agent-inspect-renderer-\",\n \"agent-inspect-check-\",\n \"agent-inspect-importer-\",\n] as const;\n\nexport type PluginManifestType =\n | \"plugin\"\n | \"adapter\"\n | \"renderer\"\n | \"check\"\n | \"importer\";\n\nexport interface PluginManifest {\n schemaVersion: \"1.0\";\n id: string;\n type: PluginManifestType;\n name: string;\n version: string;\n privacy?: PrivacyChecklistInput;\n}\n\nexport interface PluginManifestParseResult {\n ok: boolean;\n manifest?: PluginManifest;\n errors: string[];\n warnings: string[];\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function isPluginPackageName(name: string): boolean {\n return PLUGIN_NAME_PREFIXES.some((prefix) => name.startsWith(prefix));\n}\n\nexport function inferPluginTypeFromName(name: string): PluginManifestType | undefined {\n if (name.startsWith(\"agent-inspect-adapter-\")) return \"adapter\";\n if (name.startsWith(\"agent-inspect-renderer-\")) return \"renderer\";\n if (name.startsWith(\"agent-inspect-check-\")) return \"check\";\n if (name.startsWith(\"agent-inspect-importer-\")) return \"importer\";\n if (name.startsWith(\"agent-inspect-plugin-\")) return \"plugin\";\n return undefined;\n}\n\nexport function parsePluginManifest(input: unknown): PluginManifestParseResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n if (!isPlainObject(input)) {\n return { ok: false, errors: [\"manifest must be a JSON object\"], warnings };\n }\n if (input.schemaVersion !== \"1.0\") {\n errors.push('schemaVersion must be \"1.0\"');\n }\n const id = typeof input.id === \"string\" ? input.id.trim() : \"\";\n if (!id || !isPluginPackageName(id)) {\n errors.push(\"id must use an agent-inspect plugin naming prefix\");\n }\n const type = typeof input.type === \"string\" ? input.type.trim() : \"\";\n const allowedTypes: PluginManifestType[] = [\n \"plugin\",\n \"adapter\",\n \"renderer\",\n \"check\",\n \"importer\",\n ];\n if (!allowedTypes.includes(type as PluginManifestType)) {\n errors.push(`type must be one of: ${allowedTypes.join(\", \")}`);\n }\n const name = typeof input.name === \"string\" ? input.name.trim() : \"\";\n if (!name) errors.push(\"name must be a non-empty string\");\n const version = typeof input.version === \"string\" ? input.version.trim() : \"\";\n if (!version) errors.push(\"version must be a non-empty string\");\n\n let privacy: PrivacyChecklistInput | undefined;\n if (input.privacy !== undefined) {\n if (!isPlainObject(input.privacy)) {\n errors.push(\"privacy must be an object\");\n } else {\n privacy = {};\n if (input.privacy.captureMode !== undefined) {\n privacy.captureMode = String(input.privacy.captureMode) as PrivacyChecklistInput[\"captureMode\"];\n }\n if (input.privacy.networkAllowed !== undefined) {\n privacy.networkAllowed = Boolean(input.privacy.networkAllowed);\n }\n if (input.privacy.uploadAllowed !== undefined) {\n privacy.uploadAllowed = Boolean(input.privacy.uploadAllowed);\n }\n if (input.privacy.redactionDocumented !== undefined) {\n privacy.redactionDocumented = Boolean(input.privacy.redactionDocumented);\n }\n if (input.privacy.frameworkDepsPackageScoped !== undefined) {\n privacy.frameworkDepsPackageScoped = Boolean(input.privacy.frameworkDepsPackageScoped);\n }\n if (privacy.networkAllowed === true || privacy.uploadAllowed === true) {\n warnings.push(\"plugin declares network or upload — review before install\");\n }\n }\n } else {\n warnings.push(\"privacy block missing; plugins doctor will assume conservative defaults\");\n }\n\n if (errors.length > 0) return { ok: false, errors, warnings };\n\n return {\n ok: true,\n manifest: {\n schemaVersion: \"1.0\",\n id,\n type: type as PluginManifestType,\n name,\n version,\n ...(privacy ? { privacy } : {}),\n },\n errors: [],\n warnings,\n };\n}\n\nexport async function readPluginManifestFile(\n packageDir: string,\n): Promise<PluginManifestParseResult & { path: string }> {\n const manifestPath = path.join(packageDir, PLUGIN_MANIFEST_FILENAME);\n try {\n const raw = await readFile(manifestPath, \"utf8\");\n const parsed = parsePluginManifest(JSON.parse(raw) as unknown);\n return { ...parsed, path: manifestPath };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { ok: false, path: manifestPath, errors: [message], warnings: [] };\n }\n}\n\nexport function validatePluginPrivacy(manifest: PluginManifest) {\n return runPrivacyChecklist(manifest.privacy ?? {});\n}\n","import type { PersistedInspectEvent } from \"agent-inspect/persisted\";\nimport type { TraceReadWarning } from \"agent-inspect/readers\";\n\nexport interface TraceTransformResult {\n events: PersistedInspectEvent[];\n warnings: TraceReadWarning[];\n}\n\nexport interface TraceTransform {\n readonly id: string;\n transform(\n input: readonly PersistedInspectEvent[],\n options?: Record<string, unknown>,\n ): TraceTransformResult;\n}\n\nexport function defineTransform(transform: TraceTransform): TraceTransform {\n if (!transform.id.trim()) throw new Error(\"transform id is required\");\n return transform;\n}\n\nexport function runTransformPipeline(\n input: readonly PersistedInspectEvent[],\n transforms: readonly TraceTransform[],\n options: Record<string, unknown> = {},\n): TraceTransformResult {\n let events = [...input];\n const warnings: TraceReadWarning[] = [];\n\n for (const transform of transforms) {\n const result = transform.transform(events, options);\n events = result.events;\n warnings.push(...result.warnings);\n }\n\n return { events, warnings };\n}\n\nexport function createKindFilterTransform(\n kinds: readonly PersistedInspectEvent[\"kind\"][],\n): TraceTransform {\n const allowed = new Set(kinds);\n return defineTransform({\n id: `filter-kinds:${[...kinds].sort().join(\",\")}`,\n transform(input) {\n const filtered = input.filter(\n (event) => allowed.has(event.kind) || event.kind === \"RUN\",\n );\n const removed = input.length - filtered.length;\n return {\n events: filtered,\n warnings:\n removed > 0\n ? [\n {\n code: \"transform.filter.removed\",\n message: `removed ${removed} events outside allowed kinds`,\n severity: \"warning\",\n },\n ]\n : [],\n };\n },\n });\n}\n","import type { InspectRunTree } from \"agent-inspect/advanced\";\n\nexport type RenderRedactionProfile = \"local\" | \"share\" | \"strict\";\n\nexport interface RenderSafetyOptions {\n redactionProfile?: RenderRedactionProfile;\n maxContentLength?: number;\n forbiddenRawStrings?: readonly string[];\n}\n\nexport interface TraceRendererResult {\n content: string;\n contentType: string;\n warnings: string[];\n}\n\nexport interface TraceRendererOptions extends RenderSafetyOptions {\n [key: string]: unknown;\n}\n\nexport interface TraceRenderer {\n readonly format: string;\n render(tree: InspectRunTree, options?: TraceRendererOptions): TraceRendererResult;\n}\n\nexport function defineRenderer(renderer: TraceRenderer): TraceRenderer {\n if (!renderer.format.trim()) throw new Error(\"renderer format is required\");\n return renderer;\n}\n\nexport function renderWithSafety(\n renderer: TraceRenderer,\n tree: InspectRunTree,\n options: TraceRendererOptions = {},\n): TraceRendererResult {\n const rendered = renderer.render(tree, options);\n const warnings = [...rendered.warnings];\n const maxLen = options.maxContentLength ?? 500_000;\n\n if (rendered.content.length > maxLen) {\n warnings.push(\n `renderer.truncated: content exceeded maxContentLength (${maxLen}); output truncated`,\n );\n return {\n content: rendered.content.slice(0, maxLen),\n contentType: rendered.contentType,\n warnings,\n };\n }\n\n if (options.forbiddenRawStrings && options.forbiddenRawStrings.length > 0) {\n for (const raw of options.forbiddenRawStrings) {\n if (rendered.content.includes(raw)) {\n warnings.push(\n `renderer.forbidden-leak: output contains forbidden substring (${raw.length} chars)`,\n );\n }\n }\n }\n\n if (options.redactionProfile === \"share\" || options.redactionProfile === \"strict\") {\n warnings.push(\n `renderer.redaction-profile:${options.redactionProfile} — verify output before sharing`,\n );\n }\n\n return {\n content: rendered.content,\n contentType: rendered.contentType,\n warnings,\n };\n}\n","import { loadTraceMetadataList, TraceDirectory } from \"agent-inspect/advanced\";\n\nexport interface TraceIndexEntry {\n runId: string;\n path: string;\n name?: string;\n startedAt?: number;\n status?: string;\n}\n\nexport interface TraceIndexSnapshot {\n traceDir: string;\n builtAt: string;\n entries: TraceIndexEntry[];\n warnings: string[];\n}\n\nexport interface TraceIndexOptions {\n maxEntries?: number;\n /** Rebuild when snapshot `builtAt` is older than this ISO timestamp. */\n invalidateBefore?: string;\n [key: string]: unknown;\n}\n\nexport interface TraceIndexer {\n readonly id: string;\n rebuild(traceDir: string, options?: TraceIndexOptions): Promise<TraceIndexSnapshot>;\n}\n\nexport function defineIndexer(indexer: TraceIndexer): TraceIndexer {\n if (!indexer.id.trim()) throw new Error(\"indexer id is required\");\n return indexer;\n}\n\nexport function shouldInvalidateIndex(\n snapshot: TraceIndexSnapshot,\n options: TraceIndexOptions = {},\n): boolean {\n if (!options.invalidateBefore) return false;\n const cutoff = Date.parse(options.invalidateBefore);\n const builtAt = Date.parse(snapshot.builtAt);\n if (Number.isNaN(cutoff) || Number.isNaN(builtAt)) return true;\n return builtAt < cutoff;\n}\n\nexport async function indexIsStale(\n snapshot: TraceIndexSnapshot,\n traceDir: string,\n): Promise<boolean> {\n const builtMs = Date.parse(snapshot.builtAt);\n if (Number.isNaN(builtMs)) return true;\n\n const td = new TraceDirectory({ dir: traceDir });\n const files = await td.list();\n for (const file of files) {\n const stats = await td.getFileStats(file);\n if (stats.mtimeMs > builtMs) return true;\n }\n return false;\n}\n\nexport function createTraceDirectoryIndexer(): TraceIndexer {\n return defineIndexer({\n id: \"trace-directory-metadata\",\n async rebuild(traceDir, options = {}) {\n const warnings: string[] = [];\n const td = new TraceDirectory({ dir: traceDir });\n const files = await td.list();\n const maxEntries = options.maxEntries ?? 10_000;\n\n if (files.length > maxEntries) {\n warnings.push(\n `indexer.truncated: trace directory has ${files.length} files; indexing first ${maxEntries}`,\n );\n }\n\n const slice = files.slice(0, maxEntries);\n const metas = await loadTraceMetadataList(traceDir, slice, (fileName) =>\n td.getPath(fileName),\n );\n\n const entries: TraceIndexEntry[] = metas\n .map((meta) => ({\n runId: meta.runId,\n path: meta.filePath,\n name: meta.name,\n startedAt: meta.startedAt,\n status: meta.status,\n }))\n .sort((a, b) => a.runId.localeCompare(b.runId));\n\n if (entries.length < slice.length) {\n warnings.push(\n `indexer.partial: indexed ${entries.length} of ${slice.length} trace files`,\n );\n }\n\n return {\n traceDir,\n builtAt: new Date().toISOString(),\n entries,\n warnings,\n };\n },\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/registration.ts","../src/mapping.ts","../src/fixtures.ts","../src/privacy.ts","../src/conformance.ts","../src/manifest.ts","../src/transform.ts","../src/renderer.ts","../src/indexer.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type { AdapterRegistration } from \"./types.js\";\n\nconst registry = new Map<string, AdapterRegistration>();\n\nexport function createAdapterRegistration(\n input: AdapterRegistration,\n): AdapterRegistration {\n if (!input.id.trim()) throw new Error(\"adapter id is required\");\n if (!input.name.trim()) throw new Error(\"adapter name is required\");\n if (!input.version.trim()) throw new Error(\"adapter version is required\");\n if (!input.framework.trim()) throw new Error(\"adapter framework is required\");\n return { ...input };\n}\n\nexport function registerAdapter(registration: AdapterRegistration): AdapterRegistration {\n const normalized = createAdapterRegistration(registration);\n registry.set(normalized.id, normalized);\n return normalized;\n}\n\nexport function getRegisteredAdapter(id: string): AdapterRegistration | undefined {\n return registry.get(id);\n}\n\nexport function listRegisteredAdapters(): readonly AdapterRegistration[] {\n return [...registry.values()].sort((a, b) => a.id.localeCompare(b.id));\n}\n\nexport function clearAdapterRegistry(): void {\n registry.clear();\n}\n","import type { PersistedInspectEvent } from \"agent-inspect/persisted\";\n\nexport interface InspectNodeLike {\n event: { kind: string };\n children: InspectNodeLike[];\n}\n\nexport function eventsToJsonl(events: readonly unknown[]): string {\n return `${events.map((event) => JSON.stringify(event)).join(\"\\n\")}\\n`;\n}\n\nexport function flattenInspectNodes(nodes: readonly InspectNodeLike[]): InspectNodeLike[] {\n return nodes.flatMap((node) => [node, ...flattenInspectNodes(node.children)]);\n}\n\nexport function extractPersistedKinds(\n events: readonly PersistedInspectEvent[],\n): PersistedInspectEvent[\"kind\"][] {\n return events.map((event) => event.kind);\n}\n\nexport function stableStringify(value: unknown): string {\n return JSON.stringify(sortJson(value)) ?? \"null\";\n}\n\nfunction sortJson(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => sortJson(item));\n }\n if (isPlainRecord(value)) {\n const sorted: Record<string, unknown> = {};\n for (const key of Object.keys(value).sort()) {\n sorted[key] = sortJson(value[key]);\n }\n return sorted;\n }\n return value === undefined ? null : value;\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { AdapterFixtureSkeleton } from \"./types.js\";\n\nconst DEFAULT_COVERS = [\n \"run\",\n \"step\",\n \"tool\",\n \"llm\",\n \"error\",\n \"streaming\",\n \"metadata-bounds\",\n] as const;\n\nexport function createAdapterFixtureSkeleton(adapterId: string): AdapterFixtureSkeleton {\n return {\n adapterId,\n captureDefault: \"metadata-only\",\n network: \"none\",\n suggestedCovers: [...DEFAULT_COVERS],\n notes: [\n \"Use local mocks only; no provider API keys or network calls.\",\n \"Persist metadata-only by default; opt into preview/full capture explicitly.\",\n \"Include forbidden raw strings in conformance tests when prompts are mocked.\",\n \"Run runAdapterConformance against captured PersistedInspectEvent arrays.\",\n ],\n };\n}\n\nexport function createConformanceFixtureMeta(adapterId: string) {\n return {\n adapterId,\n defaults: {\n network: \"none\",\n upload: \"none\",\n capture: \"metadata-only\",\n },\n skeleton: createAdapterFixtureSkeleton(adapterId),\n };\n}\n","import type {\n ConformanceCheck,\n PrivacyChecklistInput,\n PrivacyChecklistItem,\n PrivacyChecklistResult,\n} from \"./types.js\";\n\nexport const PRIVACY_CHECKLIST_ITEMS: readonly PrivacyChecklistItem[] = [\n {\n id: \"capture-metadata-only-default\",\n label: \"Default capture is metadata-only (no full prompts/outputs on disk)\",\n required: true,\n },\n {\n id: \"no-network-by-default\",\n label: \"Adapter tests and defaults do not call external networks\",\n required: true,\n },\n {\n id: \"no-upload\",\n label: \"Adapter does not upload traces or logs to vendors by default\",\n required: true,\n },\n {\n id: \"redaction-documented\",\n label: \"Redaction/capture modes are documented for adapter users\",\n required: true,\n },\n {\n id: \"framework-deps-scoped\",\n label: \"Framework SDK dependencies stay in the optional adapter package\",\n required: true,\n },\n] as const;\n\nexport function runPrivacyChecklist(input: PrivacyChecklistInput = {}): PrivacyChecklistResult {\n const captureMode = input.captureMode ?? \"metadata-only\";\n const items: ConformanceCheck[] = [\n {\n id: \"capture-metadata-only-default\",\n ok: captureMode === \"metadata-only\",\n detail:\n captureMode === \"metadata-only\"\n ? undefined\n : `captureMode is ${captureMode}; metadata-only is required by default`,\n },\n {\n id: \"no-network-by-default\",\n ok: input.networkAllowed !== true,\n detail: input.networkAllowed ? \"network must be disabled in adapter defaults\" : undefined,\n },\n {\n id: \"no-upload\",\n ok: input.uploadAllowed !== true,\n detail: input.uploadAllowed ? \"upload must not be enabled by default\" : undefined,\n },\n {\n id: \"redaction-documented\",\n ok: input.redactionDocumented !== false,\n detail:\n input.redactionDocumented === false\n ? \"document capture/redaction behavior in adapter README\"\n : undefined,\n },\n {\n id: \"framework-deps-scoped\",\n ok: input.frameworkDepsPackageScoped !== false,\n detail:\n input.frameworkDepsPackageScoped === false\n ? \"keep framework SDK deps out of agent-inspect root/core\"\n : undefined,\n },\n ];\n\n const requiredFailed = items.some(\n (item) =>\n PRIVACY_CHECKLIST_ITEMS.find((def) => def.id === item.id)?.required && !item.ok,\n );\n\n return { ok: !requiredFailed, items };\n}\n","import {\n persistedInspectEventsToRunTrees,\n persistedInspectEventsToTraceEvents,\n type PersistedInspectEvent,\n} from \"agent-inspect/persisted\";\nimport { openTrace, readTrace } from \"agent-inspect/readers\";\n\nimport { eventsToJsonl, flattenInspectNodes, stableStringify } from \"./mapping.js\";\nimport type {\n AdapterConformanceOptions,\n AdapterConformanceResult,\n ConformanceCheck,\n} from \"./types.js\";\n\nexport async function runAdapterConformance(\n options: AdapterConformanceOptions,\n): Promise<AdapterConformanceResult> {\n const checks: ConformanceCheck[] = [];\n const { adapterId, events } = options;\n\n checks.push({\n id: \"events-non-empty\",\n ok: events.length > 0,\n detail: events.length > 0 ? undefined : \"expected at least one persisted event\",\n });\n\n const schemaOk = events.every(\n (event) => event.schemaVersion === \"0.2\" || event.schemaVersion === \"1.0\",\n );\n checks.push({\n id: \"schema-persisted\",\n ok: schemaOk,\n detail: schemaOk ? undefined : \"all events must use schemaVersion 0.2 or 1.0\",\n });\n\n if (options.forbiddenRawStrings && options.forbiddenRawStrings.length > 0) {\n const serialized = JSON.stringify(events);\n const leaks = options.forbiddenRawStrings.filter((raw) => serialized.includes(raw));\n checks.push({\n id: \"no-forbidden-raw-strings\",\n ok: leaks.length === 0,\n detail:\n leaks.length === 0 ? undefined : `forbidden raw strings leaked: ${leaks.join(\", \")}`,\n });\n }\n\n try {\n const trees = persistedInspectEventsToRunTrees([...events]);\n checks.push({\n id: \"run-tree-built\",\n ok: trees.length > 0,\n detail: trees.length > 0 ? undefined : \"persistedInspectEventsToRunTrees returned no runs\",\n });\n\n if (options.expectedKinds && options.expectedKinds.length > 0 && trees[0]) {\n const kinds = flattenInspectNodes(trees[0].children).map((node) => node.event.kind);\n const kindsOk = stableStringify(kinds) === stableStringify([...options.expectedKinds]);\n checks.push({\n id: \"expected-kinds\",\n ok: kindsOk,\n detail: kindsOk\n ? undefined\n : `expected kinds ${options.expectedKinds.join(\",\")} but got ${kinds.join(\",\")}`,\n });\n }\n\n const normalized = persistedInspectEventsToTraceEvents([...events]);\n checks.push({\n id: \"legacy-normalization\",\n ok: normalized.length > 0,\n detail:\n normalized.length > 0 ? undefined : \"persistedInspectEventsToTraceEvents returned empty\",\n });\n\n const input = { type: \"string\" as const, content: eventsToJsonl(events) };\n const read = await readTrace(input, { format: \"agent-inspect-jsonl\" });\n const opened = await openTrace(input, { format: \"agent-inspect-jsonl\" });\n const roundTripOk = stableStringify(read.runs) === stableStringify(opened.runs);\n checks.push({\n id: \"reader-round-trip\",\n ok: roundTripOk,\n detail: roundTripOk ? undefined : \"readTrace and openTrace runs differ\",\n });\n } catch (error) {\n checks.push({\n id: \"conformance-runtime\",\n ok: false,\n detail: error instanceof Error ? error.message : String(error),\n });\n }\n\n return {\n ok: checks.every((check) => check.ok),\n adapterId,\n checks,\n };\n}\n\nexport function findPairedLifecycle(\n events: readonly PersistedInspectEvent[],\n kind: PersistedInspectEvent[\"kind\"],\n terminalStatus: \"ok\" | \"error\" = \"ok\",\n): { started?: PersistedInspectEvent; completed?: PersistedInspectEvent } {\n const ofKind = events.filter((event) => event.kind === kind);\n const started = ofKind.find((event) => event.status === \"running\");\n const completed = ofKind.find(\n (event) => event.status === terminalStatus || event.status === \"error\",\n );\n if (started !== undefined || completed === undefined) {\n return { started, completed };\n }\n const completedById = completed;\n const startedById = ofKind.find(\n (event) => event.eventId === completedById.eventId && event.status === \"running\",\n );\n return { started: startedById, completed: completedById };\n}\n","import { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { runPrivacyChecklist } from \"./privacy.js\";\nimport type { PrivacyChecklistInput } from \"./types.js\";\n\nexport const PLUGIN_MANIFEST_FILENAME = \"agent-inspect-plugin.manifest.json\";\nexport const PLUGIN_NAME_PREFIXES = [\n \"agent-inspect-plugin-\",\n \"agent-inspect-adapter-\",\n \"agent-inspect-renderer-\",\n \"agent-inspect-check-\",\n \"agent-inspect-importer-\",\n] as const;\n\nexport type PluginManifestType =\n | \"plugin\"\n | \"adapter\"\n | \"renderer\"\n | \"check\"\n | \"importer\";\n\nexport interface PluginManifest {\n schemaVersion: \"1.0\";\n id: string;\n type: PluginManifestType;\n name: string;\n version: string;\n privacy?: PrivacyChecklistInput;\n}\n\nexport interface PluginManifestParseResult {\n ok: boolean;\n manifest?: PluginManifest;\n errors: string[];\n warnings: string[];\n}\n\nconst CAPTURE_MODES = new Set([\"metadata-only\", \"preview\", \"full\"]);\n\nfunction parseStrictBoolean(\n value: unknown,\n label: string,\n errors: string[],\n): boolean | undefined {\n if (value === undefined) return undefined;\n if (value === true) return true;\n if (value === false) return false;\n errors.push(`${label} must be a boolean true or false, not ${JSON.stringify(value)}`);\n return undefined;\n}\n\nfunction parseCaptureMode(\n value: unknown,\n errors: string[],\n): PrivacyChecklistInput[\"captureMode\"] | undefined {\n if (value === undefined) return undefined;\n const mode = String(value);\n if (!CAPTURE_MODES.has(mode)) {\n errors.push(`privacy.captureMode must be one of: metadata-only, preview, full`);\n return undefined;\n }\n return mode as PrivacyChecklistInput[\"captureMode\"];\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function isPluginPackageName(name: string): boolean {\n return PLUGIN_NAME_PREFIXES.some((prefix) => name.startsWith(prefix));\n}\n\nexport function inferPluginTypeFromName(name: string): PluginManifestType | undefined {\n if (name.startsWith(\"agent-inspect-adapter-\")) return \"adapter\";\n if (name.startsWith(\"agent-inspect-renderer-\")) return \"renderer\";\n if (name.startsWith(\"agent-inspect-check-\")) return \"check\";\n if (name.startsWith(\"agent-inspect-importer-\")) return \"importer\";\n if (name.startsWith(\"agent-inspect-plugin-\")) return \"plugin\";\n return undefined;\n}\n\nexport function parsePluginManifest(input: unknown): PluginManifestParseResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n if (!isPlainObject(input)) {\n return { ok: false, errors: [\"manifest must be a JSON object\"], warnings };\n }\n if (input.schemaVersion !== \"1.0\") {\n errors.push('schemaVersion must be \"1.0\"');\n }\n const id = typeof input.id === \"string\" ? input.id.trim() : \"\";\n if (!id || !isPluginPackageName(id)) {\n errors.push(\"id must use an agent-inspect plugin naming prefix\");\n }\n const type = typeof input.type === \"string\" ? input.type.trim() : \"\";\n const allowedTypes: PluginManifestType[] = [\n \"plugin\",\n \"adapter\",\n \"renderer\",\n \"check\",\n \"importer\",\n ];\n if (!allowedTypes.includes(type as PluginManifestType)) {\n errors.push(`type must be one of: ${allowedTypes.join(\", \")}`);\n }\n const name = typeof input.name === \"string\" ? input.name.trim() : \"\";\n if (!name) errors.push(\"name must be a non-empty string\");\n const version = typeof input.version === \"string\" ? input.version.trim() : \"\";\n if (!version) errors.push(\"version must be a non-empty string\");\n\n let privacy: PrivacyChecklistInput | undefined;\n if (input.privacy !== undefined) {\n if (!isPlainObject(input.privacy)) {\n errors.push(\"privacy must be an object\");\n } else {\n privacy = {};\n const captureMode = parseCaptureMode(input.privacy.captureMode, errors);\n if (captureMode !== undefined) privacy.captureMode = captureMode;\n const networkAllowed = parseStrictBoolean(\n input.privacy.networkAllowed,\n \"privacy.networkAllowed\",\n errors,\n );\n if (networkAllowed !== undefined) privacy.networkAllowed = networkAllowed;\n const uploadAllowed = parseStrictBoolean(\n input.privacy.uploadAllowed,\n \"privacy.uploadAllowed\",\n errors,\n );\n if (uploadAllowed !== undefined) privacy.uploadAllowed = uploadAllowed;\n const redactionDocumented = parseStrictBoolean(\n input.privacy.redactionDocumented,\n \"privacy.redactionDocumented\",\n errors,\n );\n if (redactionDocumented !== undefined) {\n privacy.redactionDocumented = redactionDocumented;\n }\n const frameworkDepsPackageScoped = parseStrictBoolean(\n input.privacy.frameworkDepsPackageScoped,\n \"privacy.frameworkDepsPackageScoped\",\n errors,\n );\n if (frameworkDepsPackageScoped !== undefined) {\n privacy.frameworkDepsPackageScoped = frameworkDepsPackageScoped;\n }\n if (privacy.networkAllowed === true || privacy.uploadAllowed === true) {\n warnings.push(\"plugin declares network or upload — review before install\");\n }\n }\n } else {\n warnings.push(\"privacy block missing; plugins doctor will assume conservative defaults\");\n }\n\n if (errors.length > 0) return { ok: false, errors, warnings };\n\n return {\n ok: true,\n manifest: {\n schemaVersion: \"1.0\",\n id,\n type: type as PluginManifestType,\n name,\n version,\n ...(privacy ? { privacy } : {}),\n },\n errors: [],\n warnings,\n };\n}\n\nexport async function readPluginManifestFile(\n packageDir: string,\n): Promise<PluginManifestParseResult & { path: string }> {\n const manifestPath = path.join(packageDir, PLUGIN_MANIFEST_FILENAME);\n try {\n const raw = await readFile(manifestPath, \"utf8\");\n const parsed = parsePluginManifest(JSON.parse(raw) as unknown);\n return { ...parsed, path: manifestPath };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { ok: false, path: manifestPath, errors: [message], warnings: [] };\n }\n}\n\nexport function validatePluginPrivacy(manifest: PluginManifest) {\n return runPrivacyChecklist(manifest.privacy ?? {});\n}\n","import type { PersistedInspectEvent } from \"agent-inspect/persisted\";\nimport type { TraceReadWarning } from \"agent-inspect/readers\";\n\nexport interface TraceTransformResult {\n events: PersistedInspectEvent[];\n warnings: TraceReadWarning[];\n}\n\nexport interface TraceTransform {\n readonly id: string;\n transform(\n input: readonly PersistedInspectEvent[],\n options?: Record<string, unknown>,\n ): TraceTransformResult;\n}\n\nexport function defineTransform(transform: TraceTransform): TraceTransform {\n if (!transform.id.trim()) throw new Error(\"transform id is required\");\n return transform;\n}\n\nexport function runTransformPipeline(\n input: readonly PersistedInspectEvent[],\n transforms: readonly TraceTransform[],\n options: Record<string, unknown> = {},\n): TraceTransformResult {\n let events = [...input];\n const warnings: TraceReadWarning[] = [];\n\n for (const transform of transforms) {\n const result = transform.transform(events, options);\n events = result.events;\n warnings.push(...result.warnings);\n }\n\n return { events, warnings };\n}\n\nexport function createKindFilterTransform(\n kinds: readonly PersistedInspectEvent[\"kind\"][],\n): TraceTransform {\n const allowed = new Set(kinds);\n return defineTransform({\n id: `filter-kinds:${[...kinds].sort().join(\",\")}`,\n transform(input) {\n const filtered = input.filter(\n (event) => allowed.has(event.kind) || event.kind === \"RUN\",\n );\n const removed = input.length - filtered.length;\n return {\n events: filtered,\n warnings:\n removed > 0\n ? [\n {\n code: \"transform.filter.removed\",\n message: `removed ${removed} events outside allowed kinds`,\n severity: \"warning\",\n },\n ]\n : [],\n };\n },\n });\n}\n","import type { InspectRunTree } from \"agent-inspect/advanced\";\n\nexport type RenderRedactionProfile = \"local\" | \"share\" | \"strict\";\n\nexport interface RenderSafetyOptions {\n redactionProfile?: RenderRedactionProfile;\n maxContentLength?: number;\n forbiddenRawStrings?: readonly string[];\n}\n\nexport interface TraceRendererResult {\n content: string;\n contentType: string;\n warnings: string[];\n}\n\nexport interface TraceRendererOptions extends RenderSafetyOptions {\n [key: string]: unknown;\n}\n\nexport interface TraceRenderer {\n readonly format: string;\n render(tree: InspectRunTree, options?: TraceRendererOptions): TraceRendererResult;\n}\n\nexport function defineRenderer(renderer: TraceRenderer): TraceRenderer {\n if (!renderer.format.trim()) throw new Error(\"renderer format is required\");\n return renderer;\n}\n\nexport function renderWithSafety(\n renderer: TraceRenderer,\n tree: InspectRunTree,\n options: TraceRendererOptions = {},\n): TraceRendererResult {\n const rendered = renderer.render(tree, options);\n const warnings = [...rendered.warnings];\n const maxLen = options.maxContentLength ?? 500_000;\n\n if (rendered.content.length > maxLen) {\n warnings.push(\n `renderer.truncated: content exceeded maxContentLength (${maxLen}); output truncated`,\n );\n return {\n content: rendered.content.slice(0, maxLen),\n contentType: rendered.contentType,\n warnings,\n };\n }\n\n if (options.forbiddenRawStrings && options.forbiddenRawStrings.length > 0) {\n for (const raw of options.forbiddenRawStrings) {\n if (rendered.content.includes(raw)) {\n warnings.push(\n `renderer.forbidden-leak: output contains forbidden substring (${raw.length} chars)`,\n );\n }\n }\n }\n\n if (options.redactionProfile === \"share\" || options.redactionProfile === \"strict\") {\n warnings.push(\n `renderer.redaction-profile:${options.redactionProfile} — verify output before sharing`,\n );\n }\n\n return {\n content: rendered.content,\n contentType: rendered.contentType,\n warnings,\n };\n}\n","import { loadTraceMetadataList, TraceDirectory } from \"agent-inspect/advanced\";\n\nexport interface TraceIndexEntry {\n runId: string;\n path: string;\n name?: string;\n startedAt?: number;\n status?: string;\n}\n\nexport interface TraceIndexSnapshot {\n traceDir: string;\n builtAt: string;\n entries: TraceIndexEntry[];\n warnings: string[];\n}\n\nexport interface TraceIndexOptions {\n maxEntries?: number;\n /** Rebuild when snapshot `builtAt` is older than this ISO timestamp. */\n invalidateBefore?: string;\n [key: string]: unknown;\n}\n\nexport interface TraceIndexer {\n readonly id: string;\n rebuild(traceDir: string, options?: TraceIndexOptions): Promise<TraceIndexSnapshot>;\n}\n\nexport function defineIndexer(indexer: TraceIndexer): TraceIndexer {\n if (!indexer.id.trim()) throw new Error(\"indexer id is required\");\n return indexer;\n}\n\nexport function shouldInvalidateIndex(\n snapshot: TraceIndexSnapshot,\n options: TraceIndexOptions = {},\n): boolean {\n if (!options.invalidateBefore) return false;\n const cutoff = Date.parse(options.invalidateBefore);\n const builtAt = Date.parse(snapshot.builtAt);\n if (Number.isNaN(cutoff) || Number.isNaN(builtAt)) return true;\n return builtAt < cutoff;\n}\n\nexport async function indexIsStale(\n snapshot: TraceIndexSnapshot,\n traceDir: string,\n): Promise<boolean> {\n const builtMs = Date.parse(snapshot.builtAt);\n if (Number.isNaN(builtMs)) return true;\n\n const td = new TraceDirectory({ dir: traceDir });\n const files = await td.list();\n for (const file of files) {\n const stats = await td.getFileStats(file);\n if (stats.mtimeMs > builtMs) return true;\n }\n return false;\n}\n\nexport function createTraceDirectoryIndexer(): TraceIndexer {\n return defineIndexer({\n id: \"trace-directory-metadata\",\n async rebuild(traceDir, options = {}) {\n const warnings: string[] = [];\n const td = new TraceDirectory({ dir: traceDir });\n const files = await td.list();\n const maxEntries = options.maxEntries ?? 10_000;\n\n if (files.length > maxEntries) {\n warnings.push(\n `indexer.truncated: trace directory has ${files.length} files; indexing first ${maxEntries}`,\n );\n }\n\n const slice = files.slice(0, maxEntries);\n const metas = await loadTraceMetadataList(traceDir, slice, (fileName) =>\n td.getPath(fileName),\n );\n\n const entries: TraceIndexEntry[] = metas\n .map((meta) => ({\n runId: meta.runId,\n path: meta.filePath,\n name: meta.name,\n startedAt: meta.startedAt,\n status: meta.status,\n }))\n .sort((a, b) => a.runId.localeCompare(b.runId));\n\n if (entries.length < slice.length) {\n warnings.push(\n `indexer.partial: indexed ${entries.length} of ${slice.length} trace files`,\n );\n }\n\n return {\n traceDir,\n builtAt: new Date().toISOString(),\n entries,\n warnings,\n };\n },\n });\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-inspect/adapter-sdk",
|
|
3
|
-
"version": "6.4.
|
|
3
|
+
"version": "6.4.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Adapter authoring toolkit with conformance and privacy helpers",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"dist"
|
|
35
35
|
],
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"agent-inspect": "6.4.
|
|
37
|
+
"agent-inspect": "6.4.1"
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {},
|
|
40
40
|
"publishConfig": {
|