@agent-inspect/adapter-sdk 6.4.0 → 6.5.0

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 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
- if (input.privacy.captureMode !== void 0) {
307
- privacy.captureMode = String(input.privacy.captureMode);
308
- }
309
- if (input.privacy.networkAllowed !== void 0) {
310
- privacy.networkAllowed = Boolean(input.privacy.networkAllowed);
311
- }
312
- if (input.privacy.uploadAllowed !== void 0) {
313
- privacy.uploadAllowed = Boolean(input.privacy.uploadAllowed);
314
- }
315
- if (input.privacy.redactionDocumented !== void 0) {
316
- privacy.redactionDocumented = Boolean(input.privacy.redactionDocumented);
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
- if (input.privacy.frameworkDepsPackageScoped !== void 0) {
319
- privacy.frameworkDepsPackageScoped = Boolean(input.privacy.frameworkDepsPackageScoped);
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");
@@ -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
- if (input.privacy.captureMode !== void 0) {
301
- privacy.captureMode = String(input.privacy.captureMode);
302
- }
303
- if (input.privacy.networkAllowed !== void 0) {
304
- privacy.networkAllowed = Boolean(input.privacy.networkAllowed);
305
- }
306
- if (input.privacy.uploadAllowed !== void 0) {
307
- privacy.uploadAllowed = Boolean(input.privacy.uploadAllowed);
308
- }
309
- if (input.privacy.redactionDocumented !== void 0) {
310
- privacy.redactionDocumented = Boolean(input.privacy.redactionDocumented);
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
- if (input.privacy.frameworkDepsPackageScoped !== void 0) {
313
- privacy.frameworkDepsPackageScoped = Boolean(input.privacy.frameworkDepsPackageScoped);
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");
@@ -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.0",
3
+ "version": "6.5.0",
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.0"
37
+ "agent-inspect": "6.5.0"
38
38
  },
39
39
  "peerDependencies": {},
40
40
  "publishConfig": {