@agent-inspect/adapter-sdk 6.8.0 → 6.10.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
@@ -482,7 +482,7 @@ async function indexIsStale(snapshot, traceDir) {
482
482
  const files = await td.list();
483
483
  for (const file of files) {
484
484
  const stats = await td.getFileStats(file);
485
- if (stats.mtimeMs > builtMs) return true;
485
+ if (Math.floor(stats.mtimeMs) > builtMs) return true;
486
486
  }
487
487
  return false;
488
488
  }
@@ -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\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"]}
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 // Floor sub-ms filesystem mtimes: Node `mtimeMs` is often fractional while\n // `builtAt` is millisecond-resolution ISO, so same-ms writes can look \"newer\".\n if (Math.floor(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
@@ -476,7 +476,7 @@ async function indexIsStale(snapshot, traceDir) {
476
476
  const files = await td.list();
477
477
  for (const file of files) {
478
478
  const stats = await td.getFileStats(file);
479
- if (stats.mtimeMs > builtMs) return true;
479
+ if (Math.floor(stats.mtimeMs) > builtMs) return true;
480
480
  }
481
481
  return false;
482
482
  }
@@ -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\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"]}
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 // Floor sub-ms filesystem mtimes: Node `mtimeMs` is often fractional while\n // `builtAt` is millisecond-resolution ISO, so same-ms writes can look \"newer\".\n if (Math.floor(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.8.0",
3
+ "version": "6.10.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.8.0"
37
+ "agent-inspect": "6.10.0"
38
38
  },
39
39
  "peerDependencies": {},
40
40
  "publishConfig": {