agentcassette 0.1.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/LICENSE +21 -0
- package/README.md +249 -0
- package/dist/cli.cjs +437 -0
- package/dist/cli.cjs.map +1 -0
- package/dist/cli.d.cts +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +435 -0
- package/dist/cli.js.map +1 -0
- package/dist/client-CgkW5WWa.d.cts +179 -0
- package/dist/client-CgkW5WWa.d.ts +179 -0
- package/dist/index.cjs +903 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +48 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.js +881 -0
- package/dist/index.js.map +1 -0
- package/dist/jest.cjs +500 -0
- package/dist/jest.cjs.map +1 -0
- package/dist/jest.d.cts +7 -0
- package/dist/jest.d.ts +7 -0
- package/dist/jest.js +498 -0
- package/dist/jest.js.map +1 -0
- package/dist/testing-Bj7F-tqU.d.ts +9 -0
- package/dist/testing-S6vBH_XM.d.cts +9 -0
- package/dist/vitest.cjs +500 -0
- package/dist/vitest.cjs.map +1 -0
- package/dist/vitest.d.cts +7 -0
- package/dist/vitest.d.ts +7 -0
- package/dist/vitest.js +498 -0
- package/dist/vitest.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/canonical.ts","../src/core/diff.ts","../src/core/events.ts","../src/core/fingerprint.ts","../src/core/redaction.ts","../src/core/storage.ts","../src/core/client.ts","../src/providers/common.ts","../src/providers/anthropic.ts","../src/providers/google.ts","../src/providers/openai.ts","../src/providers/semantic.ts"],"names":["id"],"mappings":"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","file":"index.js","sourcesContent":["import type { ContentPart, JsonValue, MessageRole, SemanticMessage } from \"./types.js\";\n\nconst ISO_TIMESTAMP = /\\b\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,9})?)?(?:Z|[+-]\\d{2}:?\\d{2})\\b/giu;\nconst UNIX_TIMESTAMP = /\\b1[5-9]\\d{8}(?:\\d{3})?\\b/gu;\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function asJsonValue(value: unknown): JsonValue {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return value;\n if (typeof value === \"number\") return Number.isFinite(value) ? value : String(value);\n if (Array.isArray(value)) return value.map(asJsonValue);\n if (isRecord(value)) {\n const result: { [key: string]: JsonValue } = {};\n for (const [key, item] of Object.entries(value)) {\n if (item !== undefined) result[key] = asJsonValue(item);\n }\n return result;\n }\n return String(value);\n}\n\nexport function stableStringify(value: unknown): string {\n return JSON.stringify(sortValue(asJsonValue(value)));\n}\n\nfunction sortValue(value: JsonValue): JsonValue {\n if (Array.isArray(value)) return value.map(sortValue);\n if (isRecord(value)) {\n const result: { [key: string]: JsonValue } = {};\n for (const key of Object.keys(value).sort()) {\n const item = value[key];\n if (item !== undefined) result[key] = sortValue(item as JsonValue);\n }\n return result;\n }\n return value;\n}\n\nexport function normalizeSemanticText(text: string): string {\n return text\n .normalize(\"NFKC\")\n .replace(ISO_TIMESTAMP, \"<timestamp>\")\n .replace(UNIX_TIMESTAMP, \"<timestamp>\")\n .replace(/\\s+/gu, \" \")\n .trim();\n}\n\nexport function textPart(text: string): ContentPart {\n return { type: \"text\", text };\n}\n\nexport function normalizeRole(value: unknown): MessageRole {\n if (value === \"system\" || value === \"assistant\" || value === \"tool\") return value;\n if (value === \"model\") return \"assistant\";\n if (value === \"function\") return \"tool\";\n return \"user\";\n}\n\nexport function contentToText(content: ContentPart[]): string {\n return content\n .map((part) => {\n if (part.type === \"text\") return part.text;\n if (part.type === \"json\") return stableStringify(part.value);\n return `[image:${part.source}]`;\n })\n .join(\"\\n\");\n}\n\nexport function unknownToContent(value: unknown): ContentPart[] {\n if (typeof value === \"string\") return [textPart(value)];\n if (value === null || value === undefined) return [];\n if (Array.isArray(value)) {\n return value.flatMap((part) => {\n if (typeof part === \"string\") return [textPart(part)];\n if (!isRecord(part)) return [{ type: \"json\", value: asJsonValue(part) } satisfies ContentPart];\n if (typeof part.text === \"string\") return [textPart(part.text)];\n if (part.type === \"text\" && typeof part.text === \"string\") return [textPart(part.text)];\n if (part.type === \"image_url\" && isRecord(part.image_url) && typeof part.image_url.url === \"string\") {\n return [{ type: \"image\", source: part.image_url.url } satisfies ContentPart];\n }\n return [{ type: \"json\", value: asJsonValue(part) } satisfies ContentPart];\n });\n }\n return [{ type: \"json\", value: asJsonValue(value) }];\n}\n\nexport function messageFromUnknown(value: unknown): SemanticMessage {\n if (!isRecord(value)) return { role: \"user\", content: unknownToContent(value) };\n const message: SemanticMessage = {\n role: normalizeRole(value.role),\n content: unknownToContent(value.content),\n };\n if (typeof value.name === \"string\") message.name = value.name;\n if (typeof value.tool_call_id === \"string\") message.toolCallId = value.tool_call_id;\n if (typeof value.toolCallId === \"string\") message.toolCallId = value.toolCallId;\n return message;\n}\n","import { stableStringify } from \"./canonical.js\";\nimport type { JsonValue, SemanticRequest } from \"./types.js\";\n\nexport type DiffKind = \"added\" | \"removed\" | \"changed\" | \"type-changed\";\n\nexport interface DiffEntry {\n path: string;\n kind: DiffKind;\n expected?: JsonValue;\n actual?: JsonValue;\n}\n\nexport function structuredDiff(expected: unknown, actual: unknown): DiffEntry[] {\n const entries: DiffEntry[] = [];\n walk(expected, actual, \"$\", entries);\n return entries;\n}\n\nfunction walk(expected: unknown, actual: unknown, path: string, entries: DiffEntry[]): void {\n if (Object.is(expected, actual)) return;\n if (expected === undefined) {\n entries.push({ path, kind: \"added\", actual: toDiffValue(actual) });\n return;\n }\n if (actual === undefined) {\n entries.push({ path, kind: \"removed\", expected: toDiffValue(expected) });\n return;\n }\n if (Array.isArray(expected) && Array.isArray(actual)) {\n const length = Math.max(expected.length, actual.length);\n for (let index = 0; index < length; index += 1) {\n walk(expected[index], actual[index], `${path}[${index}]`, entries);\n }\n return;\n }\n if (isPlainObject(expected) && isPlainObject(actual)) {\n const keys = new Set([...Object.keys(expected), ...Object.keys(actual)]);\n for (const key of [...keys].sort()) walk(expected[key], actual[key], `${path}.${key}`, entries);\n return;\n }\n const kind: DiffKind = typeof expected === typeof actual ? \"changed\" : \"type-changed\";\n entries.push({ path, kind, expected: toDiffValue(expected), actual: toDiffValue(actual) });\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction toDiffValue(value: unknown): JsonValue {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return value;\n if (typeof value === \"number\") return Number.isFinite(value) ? value : String(value);\n if (Array.isArray(value)) return value.map(toDiffValue);\n if (isPlainObject(value)) {\n const result: { [key: string]: JsonValue } = {};\n for (const [key, item] of Object.entries(value)) {\n if (item !== undefined) result[key] = toDiffValue(item);\n }\n return result;\n }\n return String(value);\n}\n\nexport interface DivergenceReport {\n cassette: string;\n turn: number;\n expectedFingerprint: string;\n actualFingerprint: string;\n expected: SemanticRequest;\n actual: SemanticRequest;\n diff: DiffEntry[];\n}\n\nexport class CassetteDivergenceError extends Error {\n readonly report: DivergenceReport;\n\n constructor(report: DivergenceReport) {\n super(formatDivergence(report));\n this.name = \"CassetteDivergenceError\";\n this.report = report;\n }\n}\n\nfunction formatDivergence(report: DivergenceReport): string {\n const lines = [\n `Agent cassette diverged at turn ${report.turn + 1} in \"${report.cassette}\".`,\n `Expected fingerprint: ${report.expectedFingerprint}`,\n `Actual fingerprint: ${report.actualFingerprint}`,\n \"\",\n \"Structured request diff:\",\n ];\n if (report.diff.length === 0) {\n lines.push(\" Requests differ under the configured fingerprint, but their stored structures are equal.\");\n } else {\n for (const item of report.diff.slice(0, 30)) {\n const expected = item.expected === undefined ? \"<missing>\" : stableStringify(item.expected);\n const actual = item.actual === undefined ? \"<missing>\" : stableStringify(item.actual);\n lines.push(` ${item.path} (${item.kind})`, ` expected: ${expected}`, ` actual: ${actual}`);\n }\n if (report.diff.length > 30) lines.push(` …and ${report.diff.length - 30} more differences.`);\n }\n lines.push(\"\", \"Fix the changed request, re-record this cassette intentionally, or provide a custom fingerprint when the change is non-behavioral.\");\n return lines.join(\"\\n\");\n}\n","import type { SemanticEvent, SemanticRequest, SemanticResponse } from \"./types.js\";\n\nexport function eventsForTurn(request: SemanticRequest, response: SemanticResponse): SemanticEvent[] {\n const events: SemanticEvent[] = [{ type: \"messages.sent\", messages: request.messages }];\n for (const message of request.messages) {\n if (message.role === \"tool\") events.push({ type: \"tool.result.returned\", message });\n }\n for (const call of response.toolCalls) events.push({ type: \"tool.call.proposed\", call });\n if (response.content.length > 0) events.push({ type: \"output.final\", content: response.content });\n return events;\n}\n","import { createHash } from \"node:crypto\";\nimport { contentToText, normalizeSemanticText, stableStringify } from \"./canonical.js\";\nimport type { FingerprintFunction, SemanticRequest } from \"./types.js\";\n\nexport const defaultFingerprint: FingerprintFunction = (request) => {\n const finalUser = [...request.messages].reverse().find((message) => message.role === \"user\");\n const shape = request.messages.map((message) => ({\n role: message.role,\n content: message.content.map((part) => part.type),\n ...(message.name === undefined ? {} : { name: message.name }),\n ...(message.toolCallId === undefined ? {} : { toolCallId: message.toolCallId }),\n }));\n const tools = request.tools.map((tool) => ({\n name: tool.name,\n ...(tool.description === undefined ? {} : { description: normalizeSemanticText(tool.description) }),\n inputSchema: tool.inputSchema,\n }));\n const semanticFinalUserTurn = finalUser\n ? normalizeSemanticText(contentToText(finalUser.content))\n : \"\";\n const decisionHistory = request.messages.flatMap((message, index) => {\n if (message.role === \"system\" || message === finalUser) return [];\n return [{\n index,\n role: message.role,\n content: normalizeSemanticText(contentToText(message.content)),\n toolCalls: message.toolCalls ?? [],\n ...(message.name === undefined ? {} : { name: message.name }),\n ...(message.toolCallId === undefined ? {} : { toolCallId: message.toolCallId }),\n }];\n });\n const canonical = stableStringify({ tools, shape, decisionHistory, semanticFinalUserTurn });\n return `sha256:${createHash(\"sha256\").update(canonical).digest(\"hex\")}`;\n};\n\nexport function explainDefaultFingerprint(request: SemanticRequest): {\n conversationRoles: string[];\n finalUserTurn: string;\n toolNames: string[];\n} {\n const finalUser = [...request.messages].reverse().find((message) => message.role === \"user\");\n return {\n conversationRoles: request.messages.map((message) => message.role),\n finalUserTurn: finalUser ? normalizeSemanticText(contentToText(finalUser.content)) : \"\",\n toolNames: request.tools.map((tool) => tool.name),\n };\n}\n","import { asJsonValue, isRecord } from \"./canonical.js\";\nimport type { JsonValue } from \"./types.js\";\n\nexport interface RedactionContext {\n path: string;\n key?: string;\n value: JsonValue;\n}\n\nexport interface RedactionRule {\n name: string;\n match(context: RedactionContext): boolean;\n replacement?: JsonValue;\n}\n\nexport interface RedactionOptions {\n rules?: RedactionRule[];\n includeDefaults?: boolean;\n}\n\nconst SECRET_KEY = /(?:api[-_]?key|authorization|password|passwd|secret|access[-_]?token|refresh[-_]?token|cookie)/iu;\nconst BEARER_TOKEN = /\\bBearer\\s+[A-Za-z0-9._~+/=-]+/giu;\nconst EMAIL = /\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b/giu;\nconst PHONE_CANDIDATE = /(?<!\\d)(?:\\+?\\d[\\d ().-]{7,}\\d)(?!\\d)/gu;\n\nexport const defaultRedactionRules: RedactionRule[] = [\n {\n name: \"secret-key\",\n match: ({ key }) => key !== undefined && SECRET_KEY.test(key),\n },\n];\n\nexport function redact<T>(value: T, options: RedactionOptions = {}): T {\n const rules = [\n ...(options.includeDefaults === false ? [] : defaultRedactionRules),\n ...(options.rules ?? []),\n ];\n return visit(value, \"$\", undefined, rules, options.includeDefaults !== false) as T;\n}\n\nfunction visit(\n value: unknown,\n path: string,\n key: string | undefined,\n rules: RedactionRule[],\n redactDefaultStrings: boolean,\n): unknown {\n const json = asJsonValue(value);\n const context: RedactionContext = key === undefined ? { path, value: json } : { path, key, value: json };\n const rule = rules.find((candidate) => {\n try {\n return candidate.match(context);\n } catch {\n return false;\n }\n });\n if (rule) return rule.replacement ?? \"[REDACTED]\";\n\n if (typeof value === \"string\" && redactDefaultStrings) {\n return value\n .replace(BEARER_TOKEN, \"Bearer [REDACTED]\")\n .replace(EMAIL, \"[REDACTED_EMAIL]\")\n .replace(PHONE_CANDIDATE, (candidate) => countDigits(candidate) >= 10 ? \"[REDACTED_PHONE]\" : candidate);\n }\n if (Array.isArray(value)) {\n return value.map((item, index) => visit(item, `${path}[${index}]`, undefined, rules, redactDefaultStrings));\n }\n if (isRecord(value)) {\n const result: Record<string, unknown> = {};\n for (const [childKey, item] of Object.entries(value)) {\n result[childKey] = visit(item, `${path}.${childKey}`, childKey, rules, redactDefaultStrings);\n }\n return result;\n }\n return value;\n}\n\nfunction countDigits(value: string): number {\n return value.replace(/\\D/gu, \"\").length;\n}\n","import { mkdir, readFile, readdir, rename, rm, stat, writeFile } from \"node:fs/promises\";\nimport { dirname, join, resolve } from \"node:path\";\nimport type { Cassette, ContentPart, JsonValue, SemanticMessage, SemanticRequest, SemanticResponse, ToolCall } from \"./types.js\";\n\nexport interface CassetteStore {\n exists(name: string): Promise<boolean>;\n read(name: string): Promise<Cassette>;\n write(cassette: Cassette): Promise<void>;\n list(): Promise<string[]>;\n remove(name: string): Promise<void>;\n}\n\nexport class FileCassetteStore implements CassetteStore {\n readonly directory: string;\n\n constructor(directory = \".agentcassette/cassettes\") {\n this.directory = resolve(directory);\n }\n\n async exists(name: string): Promise<boolean> {\n try {\n await stat(this.pathFor(name));\n return true;\n } catch (error) {\n if (hasCode(error, \"ENOENT\")) return false;\n throw error;\n }\n }\n\n async read(name: string): Promise<Cassette> {\n const source = await readFile(this.pathFor(name), \"utf8\");\n return parseCassette(source, name);\n }\n\n async write(cassette: Cassette): Promise<void> {\n const destination = this.pathFor(cassette.name);\n await mkdir(dirname(destination), { recursive: true });\n const temporary = `${destination}.${process.pid}.${Date.now()}.tmp`;\n await writeFile(temporary, `${JSON.stringify(cassette, null, 2)}\\n`, { encoding: \"utf8\", mode: 0o600 });\n await rename(temporary, destination);\n }\n\n async list(): Promise<string[]> {\n try {\n const entries = await readdir(this.directory, { withFileTypes: true });\n return entries\n .filter((entry) => entry.isFile() && entry.name.endsWith(\".json\"))\n .map((entry) => entry.name.slice(0, -5))\n .filter(isValidCassetteName)\n .sort();\n } catch (error) {\n if (hasCode(error, \"ENOENT\")) return [];\n throw error;\n }\n }\n\n async remove(name: string): Promise<void> {\n await rm(this.pathFor(name), { force: true });\n }\n\n pathFor(name: string): string {\n if (!isValidCassetteName(name)) {\n throw new Error(\"Cassette names must start with a lowercase letter or digit and contain only lowercase letters, digits, dots, underscores, or hyphens.\");\n }\n return join(this.directory, `${name}.json`);\n }\n}\n\nexport class MemoryCassetteStore implements CassetteStore {\n readonly cassettes = new Map<string, Cassette>();\n\n async exists(name: string): Promise<boolean> {\n return this.cassettes.has(name);\n }\n\n async read(name: string): Promise<Cassette> {\n const cassette = this.cassettes.get(name);\n if (!cassette) throw new Error(`Cassette \"${name}\" does not exist.`);\n return structuredClone(cassette);\n }\n\n async write(cassette: Cassette): Promise<void> {\n this.cassettes.set(cassette.name, structuredClone(cassette));\n }\n\n async list(): Promise<string[]> {\n return [...this.cassettes.keys()].sort();\n }\n\n async remove(name: string): Promise<void> {\n this.cassettes.delete(name);\n }\n}\n\nexport function parseCassette(source: string, expectedName?: string): Cassette {\n const value: unknown = JSON.parse(source);\n if (!isCassette(value)) throw new Error(`Invalid agentcassette file${expectedName ? `: ${expectedName}` : \"\"}.`);\n if (expectedName !== undefined && value.name !== expectedName) {\n throw new Error(`Cassette identity mismatch: expected \"${expectedName}\", file contains \"${value.name}\".`);\n }\n return value;\n}\n\nfunction isValidCassetteName(name: string): boolean {\n return /^[a-z0-9][a-z0-9._-]*$/u.test(name);\n}\n\nfunction isCassette(value: unknown): value is Cassette {\n if (!isObject(value)) return false;\n return value.schemaVersion === 1\n && typeof value.name === \"string\"\n && isValidCassetteName(value.name)\n && typeof value.createdAt === \"string\"\n && typeof value.updatedAt === \"string\"\n && (value.metadata === undefined || isMetadata(value.metadata))\n && Array.isArray(value.turns)\n && value.turns.every((turn, index) => isTurn(turn, index));\n}\n\nfunction isTurn(value: unknown, index: number): boolean {\n return isObject(value)\n && value.index === index\n && typeof value.fingerprint === \"string\"\n && isRequest(value.request)\n && Array.isArray(value.events)\n && value.events.every(isEvent)\n && isResponse(value.response);\n}\n\nfunction isMetadata(value: unknown): boolean {\n return isObject(value)\n && (value.provider === undefined || typeof value.provider === \"string\")\n && (value.testFile === undefined || typeof value.testFile === \"string\")\n && (value.tags === undefined || (Array.isArray(value.tags) && value.tags.every((tag) => typeof tag === \"string\")))\n && (value.fingerprint === undefined || value.fingerprint === \"default\" || value.fingerprint === \"custom\");\n}\n\nfunction isEvent(value: unknown): boolean {\n if (!isObject(value)) return false;\n if (value.type === \"messages.sent\") return Array.isArray(value.messages) && value.messages.every(isMessage);\n if (value.type === \"tool.result.returned\") return isMessage(value.message);\n if (value.type === \"tool.call.proposed\") return isToolCall(value.call);\n return value.type === \"output.final\" && Array.isArray(value.content) && value.content.every(isContentPart);\n}\n\nfunction isRequest(value: unknown): value is SemanticRequest {\n return isObject(value)\n && Array.isArray(value.messages)\n && value.messages.every(isMessage)\n && Array.isArray(value.tools)\n && value.tools.every((tool) => isObject(tool) && typeof tool.name === \"string\" && isJsonValue(tool.inputSchema))\n && (value.model === undefined || typeof value.model === \"string\");\n}\n\nfunction isResponse(value: unknown): value is SemanticResponse {\n return isObject(value)\n && Array.isArray(value.content)\n && value.content.every(isContentPart)\n && Array.isArray(value.toolCalls)\n && value.toolCalls.every(isToolCall)\n && (value.sequence === undefined || (Array.isArray(value.sequence) && value.sequence.every(isResponseItem)))\n && (value.id === undefined || typeof value.id === \"string\")\n && (value.model === undefined || typeof value.model === \"string\")\n && (value.finishReason === undefined || typeof value.finishReason === \"string\")\n && (value.usage === undefined || (isObject(value.usage)\n && typeof value.usage.inputTokens === \"number\"\n && typeof value.usage.outputTokens === \"number\"\n && typeof value.usage.totalTokens === \"number\"\n && (value.usage.costUsd === undefined || typeof value.usage.costUsd === \"number\")));\n}\n\nfunction isMessage(value: unknown): value is SemanticMessage {\n return isObject(value)\n && (value.role === \"system\" || value.role === \"user\" || value.role === \"assistant\" || value.role === \"tool\")\n && Array.isArray(value.content)\n && value.content.every(isContentPart)\n && (value.name === undefined || typeof value.name === \"string\")\n && (value.toolCallId === undefined || typeof value.toolCallId === \"string\")\n && (value.toolCalls === undefined || (Array.isArray(value.toolCalls) && value.toolCalls.every(isToolCall)));\n}\n\nfunction isContentPart(value: unknown): value is ContentPart {\n if (!isObject(value)) return false;\n if (value.type === \"text\") return typeof value.text === \"string\";\n if (value.type === \"image\") return typeof value.source === \"string\";\n return value.type === \"json\" && isJsonValue(value.value);\n}\n\nfunction isResponseItem(value: unknown): boolean {\n return isObject(value)\n && ((value.type === \"content\" && isContentPart(value.part))\n || (value.type === \"toolCall\" && isToolCall(value.call)));\n}\n\nfunction isToolCall(value: unknown): value is ToolCall {\n return isObject(value)\n && typeof value.name === \"string\"\n && isJsonValue(value.arguments)\n && (value.id === undefined || typeof value.id === \"string\");\n}\n\nfunction isJsonValue(value: unknown): value is JsonValue {\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return true;\n if (typeof value === \"number\") return Number.isFinite(value);\n if (Array.isArray(value)) return value.every(isJsonValue);\n return isObject(value) && Object.values(value).every(isJsonValue);\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction hasCode(error: unknown, code: string): boolean {\n return typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: unknown }).code === code;\n}\n","import { CassetteDivergenceError, structuredDiff } from \"./diff.js\";\nimport { eventsForTurn } from \"./events.js\";\nimport { defaultFingerprint } from \"./fingerprint.js\";\nimport { redact, type RedactionOptions } from \"./redaction.js\";\nimport { FileCassetteStore, type CassetteStore } from \"./storage.js\";\nimport type {\n Cassette,\n CassetteMetadata,\n CassetteMode,\n ClientBoundary,\n CostCalculator,\n FingerprintFunction,\n ProviderAdapter,\n SemanticRequest,\n SemanticResponse,\n} from \"./types.js\";\n\nexport interface ReplayContext {\n cassette: string;\n turn: number;\n response: SemanticResponse;\n}\n\nexport interface CassetteClientOptions<Request, Response> {\n name: string;\n adapter: ProviderAdapter<Request, Response>;\n client?: ClientBoundary<Request, Response>;\n mode?: CassetteMode;\n store?: CassetteStore;\n fingerprint?: FingerprintFunction;\n redaction?: RedactionOptions;\n replayTurns?: number;\n metadata?: CassetteMetadata;\n calculateCost?: CostCalculator;\n onReplay?: (context: ReplayContext) => void | Promise<void>;\n}\n\nexport interface CassetteClient<Request, Response> {\n (request: Request): Promise<Response>;\n readonly cassetteName: string;\n readonly mode: \"record\" | \"replay\";\n readonly turn: number;\n}\n\nexport async function createCassetteClient<Request, Response>(\n options: CassetteClientOptions<Request, Response>,\n): Promise<CassetteClient<Request, Response>> {\n validateOptions(options);\n const store = options.store ?? new FileCassetteStore();\n const requestedMode = options.mode ?? \"auto\";\n const mode = requestedMode === \"auto\"\n ? (await store.exists(options.name) ? \"replay\" : \"record\")\n : requestedMode;\n const fingerprint = options.fingerprint ?? defaultFingerprint;\n const replayTurns = options.replayTurns ?? Number.POSITIVE_INFINITY;\n let cassette = mode === \"replay\"\n ? await store.read(options.name)\n : newCassette(options.name, options.adapter.provider, options.metadata, options.fingerprint === undefined);\n let position = 0;\n let queue: Promise<void> = Promise.resolve();\n\n const invoke = async (input: Request): Promise<Response> => {\n const normalizedRequest = redacted(options.adapter.normalizeRequest(input), options.redaction);\n const actualFingerprint = fingerprint(normalizedRequest);\n const shouldReplay = mode === \"replay\" && position < replayTurns;\n\n if (shouldReplay) {\n const expected = cassette.turns[position];\n if (!expected) {\n throw new CassetteDivergenceError({\n cassette: cassette.name,\n turn: position,\n expectedFingerprint: \"<end-of-cassette>\",\n actualFingerprint,\n expected: emptyRequest(),\n actual: normalizedRequest,\n diff: structuredDiff(emptyRequest(), normalizedRequest),\n });\n }\n if (expected.fingerprint !== actualFingerprint) {\n throw new CassetteDivergenceError({\n cassette: cassette.name,\n turn: position,\n expectedFingerprint: expected.fingerprint,\n actualFingerprint,\n expected: expected.request,\n actual: normalizedRequest,\n diff: structuredDiff(expected.request, normalizedRequest),\n });\n }\n position += 1;\n if (options.onReplay) {\n await options.onReplay({ cassette: cassette.name, turn: expected.index, response: structuredClone(expected.response) });\n }\n return options.adapter.replayResponse(structuredClone(expected.response));\n }\n\n const client = options.client;\n if (!client) {\n const reason = mode === \"record\" ? \"record mode\" : `partial replay after turn ${replayTurns}`;\n throw new Error(`A real client boundary is required for ${reason}.`);\n }\n const liveResponse = await client(input);\n const normalizedResponse = withCalculatedCost(\n redacted(options.adapter.normalizeResponse(liveResponse), options.redaction),\n normalizedRequest,\n options.calculateCost,\n );\n\n if (mode === \"record\") {\n const now = new Date().toISOString();\n cassette.turns.push({\n index: position,\n fingerprint: actualFingerprint,\n request: normalizedRequest,\n events: eventsForTurn(normalizedRequest, normalizedResponse),\n response: normalizedResponse,\n });\n cassette.updatedAt = now;\n await store.write(cassette);\n }\n position += 1;\n return liveResponse;\n };\n\n const wrapped = ((input: Request): Promise<Response> => {\n const result = queue.then(() => invoke(input));\n queue = result.then(() => undefined, () => undefined);\n return result;\n }) as CassetteClient<Request, Response>;\n\n Object.defineProperties(wrapped, {\n cassetteName: { value: options.name, enumerable: true },\n mode: { value: mode, enumerable: true },\n turn: { get: () => position, enumerable: true },\n });\n return wrapped;\n}\n\nfunction validateOptions<Request, Response>(options: CassetteClientOptions<Request, Response>): void {\n if (!options.name.trim()) throw new Error(\"Cassette name cannot be empty.\");\n if (options.replayTurns !== undefined && (!Number.isInteger(options.replayTurns) || options.replayTurns < 0)) {\n throw new Error(\"replayTurns must be a non-negative integer.\");\n }\n}\n\nfunction redacted<T>(value: T, options: RedactionOptions | undefined): T {\n return redact(value, options ?? {});\n}\n\nfunction withCalculatedCost(\n response: SemanticResponse,\n request: SemanticRequest,\n calculator: CostCalculator | undefined,\n): SemanticResponse {\n if (!calculator) return response;\n const cost = calculator({ request, response });\n if (cost === undefined) return response;\n if (!Number.isFinite(cost) || cost < 0) throw new Error(\"calculateCost must return a non-negative finite number or undefined.\");\n const usage = response.usage ?? { inputTokens: 0, outputTokens: 0, totalTokens: 0 };\n return { ...response, usage: { ...usage, costUsd: cost } };\n}\n\nfunction newCassette(\n name: string,\n provider: string,\n metadata: CassetteMetadata | undefined,\n usesDefaultFingerprint: boolean,\n): Cassette {\n const now = new Date().toISOString();\n const mergedMetadata: CassetteMetadata = {\n ...metadata,\n provider,\n fingerprint: usesDefaultFingerprint ? \"default\" : \"custom\",\n };\n return {\n schemaVersion: 1,\n name,\n createdAt: now,\n updatedAt: now,\n turns: [],\n metadata: mergedMetadata,\n };\n}\n\nfunction emptyRequest(): SemanticRequest {\n return { messages: [], tools: [] };\n}\n","import { asJsonValue, isRecord, unknownToContent } from \"../core/canonical.js\";\nimport type { ContentPart, JsonValue, TokenUsage, ToolDefinition } from \"../core/types.js\";\n\nexport function records(value: unknown): Record<string, unknown>[] {\n return Array.isArray(value) ? value.filter(isRecord) : [];\n}\n\nexport function stringValue(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nexport function numberValue(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nexport function parseJson(value: unknown): JsonValue {\n if (typeof value !== \"string\") return asJsonValue(value);\n try {\n return asJsonValue(JSON.parse(value));\n } catch {\n return value;\n }\n}\n\nexport function normalizeTools(value: unknown, style: \"openai\" | \"anthropic\" | \"google\"): ToolDefinition[] {\n const source = style === \"google\"\n ? records(value).flatMap((group) => records(group.functionDeclarations ?? group.function_declarations))\n : records(value);\n return source.flatMap((item) => {\n const fn = style === \"openai\" && isRecord(item.function) ? item.function : item;\n const name = stringValue(fn.name);\n if (!name) return [];\n const schema = fn.parameters ?? fn.parametersJsonSchema ?? fn.parameters_json_schema ?? fn.input_schema ?? fn.inputSchema ?? {};\n const tool: ToolDefinition = { name, inputSchema: asJsonValue(schema) };\n const description = stringValue(fn.description);\n if (description !== undefined) tool.description = description;\n return [tool];\n });\n}\n\nexport function normalizeUsage(\n value: unknown,\n inputKeys: string[],\n outputKeys: string[],\n totalKeys: string[] = [],\n): TokenUsage | undefined {\n if (!isRecord(value)) return undefined;\n const inputTokens = firstNumber(value, inputKeys) ?? 0;\n const outputTokens = firstNumber(value, outputKeys) ?? 0;\n const totalTokens = firstNumber(value, totalKeys) ?? inputTokens + outputTokens;\n if (inputTokens === 0 && outputTokens === 0 && totalTokens === 0) return undefined;\n return { inputTokens, outputTokens, totalTokens };\n}\n\nfunction firstNumber(record: Record<string, unknown>, keys: string[]): number | undefined {\n for (const key of keys) {\n const result = numberValue(record[key]);\n if (result !== undefined) return result;\n }\n return undefined;\n}\n\nexport function contentParts(value: unknown): ContentPart[] {\n return unknownToContent(value);\n}\n\nexport function contentToProviderText(content: ContentPart[]): string | null {\n if (content.length === 0) return null;\n return content.map((part) => {\n if (part.type === \"text\") return part.text;\n if (part.type === \"json\") return JSON.stringify(part.value);\n return `[image:${part.source}]`;\n }).join(\"\\n\");\n}\n","import { asJsonValue, isRecord, normalizeRole, textPart, unknownToContent } from \"../core/canonical.js\";\nimport type { ProviderAdapter, SemanticMessage, SemanticRequest, SemanticResponse, ToolCall } from \"../core/types.js\";\nimport { normalizeTools, normalizeUsage, records, stringValue } from \"./common.js\";\n\nexport function anthropic<Request = unknown, Response = unknown>(): ProviderAdapter<Request, Response> {\n return {\n provider: \"anthropic\",\n normalizeRequest: (request) => normalizeAnthropicRequest(request),\n normalizeResponse: (response) => normalizeAnthropicResponse(response),\n replayResponse: (response) => replayAnthropicResponse(response) as Response,\n };\n}\n\nexport function normalizeAnthropicRequest(value: unknown): SemanticRequest {\n const request = isRecord(value) ? value : {};\n const messages: SemanticMessage[] = [];\n if (request.system !== undefined) messages.push({ role: \"system\", content: unknownToContent(request.system) });\n for (const source of records(request.messages)) {\n const role = normalizeRole(source.role);\n if (!Array.isArray(source.content)) {\n messages.push({ role, content: unknownToContent(source.content) });\n continue;\n }\n for (const block of source.content) {\n if (!isRecord(block)) {\n messages.push({ role, content: unknownToContent(block) });\n continue;\n }\n if (block.type === \"tool_result\") {\n const message: SemanticMessage = { role: \"tool\", content: unknownToContent(block.content) };\n const id = stringValue(block.tool_use_id);\n if (id !== undefined) message.toolCallId = id;\n messages.push(message);\n continue;\n }\n if (block.type === \"tool_use\" && typeof block.name === \"string\") {\n const call: ToolCall = { name: block.name, arguments: asJsonValue(block.input) };\n const id = stringValue(block.id);\n if (id !== undefined) call.id = id;\n messages.push({ role: \"assistant\", content: [], toolCalls: [call] });\n continue;\n }\n messages.push({ role, content: block.type === \"text\" ? unknownToContent(block.text) : unknownToContent(block) });\n }\n }\n const normalized: SemanticRequest = { messages, tools: normalizeTools(request.tools, \"anthropic\") };\n const model = stringValue(request.model);\n if (model !== undefined) normalized.model = model;\n return normalized;\n}\n\nexport function normalizeAnthropicResponse(value: unknown): SemanticResponse {\n const response = isRecord(value) ? value : {};\n const content = [];\n const toolCalls: ToolCall[] = [];\n const sequence: NonNullable<SemanticResponse[\"sequence\"]> = [];\n for (const block of records(response.content)) {\n if (block.type === \"text\" && typeof block.text === \"string\") {\n const part = textPart(block.text);\n content.push(part);\n sequence.push({ type: \"content\", part });\n }\n if (block.type === \"tool_use\" && typeof block.name === \"string\") {\n const call: ToolCall = { name: block.name, arguments: asJsonValue(block.input) };\n const id = stringValue(block.id);\n if (id !== undefined) call.id = id;\n toolCalls.push(call);\n sequence.push({ type: \"toolCall\", call });\n }\n }\n const normalized: SemanticResponse = { content, toolCalls, sequence };\n const id = stringValue(response.id);\n if (id !== undefined) normalized.id = id;\n const model = stringValue(response.model);\n if (model !== undefined) normalized.model = model;\n const finishReason = stringValue(response.stop_reason);\n if (finishReason !== undefined) normalized.finishReason = finishReason;\n const usage = normalizeUsage(response.usage, [\"input_tokens\"], [\"output_tokens\"]);\n if (usage !== undefined) normalized.usage = usage;\n return normalized;\n}\n\nfunction replayAnthropicResponse(response: SemanticResponse): unknown {\n return {\n id: response.id ?? \"msg_agentcassette_replay\",\n model: response.model,\n type: \"message\",\n role: \"assistant\",\n content: response.sequence\n ? response.sequence.map((item, index) => item.type === \"content\"\n ? anthropicContentBlock(item.part)\n : {\n type: \"tool_use\",\n id: item.call.id ?? `toolu_replay_${index}`,\n name: item.call.name,\n input: item.call.arguments,\n })\n : [\n ...response.content.map(anthropicContentBlock),\n ...response.toolCalls.map((call, index) => ({\n type: \"tool_use\",\n id: call.id ?? `toolu_replay_${index}`,\n name: call.name,\n input: call.arguments,\n })),\n ],\n stop_reason: response.finishReason ?? (response.toolCalls.length > 0 ? \"tool_use\" : \"end_turn\"),\n stop_sequence: null,\n usage: response.usage ? {\n input_tokens: response.usage.inputTokens,\n output_tokens: response.usage.outputTokens,\n } : undefined,\n };\n}\n\nfunction anthropicContentBlock(part: SemanticResponse[\"content\"][number]): { type: \"text\"; text: string } {\n return part.type === \"text\"\n ? { type: \"text\", text: part.text }\n : { type: \"text\", text: JSON.stringify(part.type === \"json\" ? part.value : part.source) };\n}\n","import { asJsonValue, isRecord, normalizeRole, textPart, unknownToContent } from \"../core/canonical.js\";\nimport type { ProviderAdapter, SemanticMessage, SemanticRequest, SemanticResponse, ToolCall } from \"../core/types.js\";\nimport { normalizeTools, normalizeUsage, records, stringValue } from \"./common.js\";\n\nexport function google<Request = unknown, Response = unknown>(): ProviderAdapter<Request, Response> {\n return {\n provider: \"google\",\n normalizeRequest: (request) => normalizeGoogleRequest(request),\n normalizeResponse: (response) => normalizeGoogleResponse(response),\n replayResponse: (response) => replayGoogleResponse(response) as Response,\n };\n}\n\nexport function normalizeGoogleRequest(value: unknown): SemanticRequest {\n const request = isRecord(value) ? value : {};\n const config = isRecord(request.config) ? request.config : {};\n const messages: SemanticMessage[] = [];\n const system = request.systemInstruction ?? request.system_instruction ?? config.systemInstruction ?? config.system_instruction;\n if (system !== undefined) {\n const content = isRecord(system) ? googleTextParts(system.parts) : unknownToContent(system);\n messages.push({ role: \"system\", content });\n }\n for (const source of records(request.contents)) {\n const role = normalizeRole(source.role);\n if (!Array.isArray(source.parts)) {\n messages.push({ role, content: unknownToContent(source.parts) });\n continue;\n }\n for (const part of source.parts) appendGooglePart(messages, role, part);\n }\n const normalized: SemanticRequest = {\n messages,\n tools: normalizeTools(request.tools ?? config.tools, \"google\"),\n };\n const model = stringValue(request.model);\n if (model !== undefined) normalized.model = model;\n return normalized;\n}\n\nexport function normalizeGoogleResponse(value: unknown): SemanticResponse {\n const response = isRecord(value) ? value : {};\n const candidate = records(response.candidates)[0];\n const candidateContent = candidate && isRecord(candidate.content) ? candidate.content : {};\n const content = [];\n const toolCalls: ToolCall[] = [];\n for (const part of records(candidateContent.parts)) {\n if (typeof part.text === \"string\") content.push(textPart(part.text));\n const fn = part.functionCall ?? part.function_call;\n if (isRecord(fn) && typeof fn.name === \"string\") {\n toolCalls.push({ name: fn.name, arguments: asJsonValue(fn.args) });\n }\n }\n const normalized: SemanticResponse = { content, toolCalls };\n const id = stringValue(response.responseId ?? response.response_id);\n if (id !== undefined) normalized.id = id;\n const model = stringValue(response.modelVersion ?? response.model_version);\n if (model !== undefined) normalized.model = model;\n const finishReason = candidate ? stringValue(candidate.finishReason ?? candidate.finish_reason) : undefined;\n if (finishReason !== undefined) normalized.finishReason = finishReason;\n const usage = normalizeUsage(response.usageMetadata ?? response.usage_metadata, [\"promptTokenCount\", \"prompt_token_count\"], [\"candidatesTokenCount\", \"candidates_token_count\"], [\"totalTokenCount\", \"total_token_count\"]);\n if (usage !== undefined) normalized.usage = usage;\n return normalized;\n}\n\nfunction appendGooglePart(messages: SemanticMessage[], role: SemanticMessage[\"role\"], value: unknown): void {\n if (!isRecord(value)) {\n messages.push({ role, content: unknownToContent(value) });\n return;\n }\n if (typeof value.text === \"string\") {\n messages.push({ role, content: [textPart(value.text)] });\n return;\n }\n const functionCall = value.functionCall ?? value.function_call;\n if (isRecord(functionCall) && typeof functionCall.name === \"string\") {\n messages.push({\n role: \"assistant\",\n content: [],\n toolCalls: [{ name: functionCall.name, arguments: asJsonValue(functionCall.args) }],\n });\n return;\n }\n const functionResponse = value.functionResponse ?? value.function_response;\n if (isRecord(functionResponse)) {\n const message: SemanticMessage = {\n role: \"tool\",\n content: [{ type: \"json\", value: asJsonValue(functionResponse.response) }],\n };\n const name = stringValue(functionResponse.name);\n if (name !== undefined) message.name = name;\n messages.push(message);\n return;\n }\n messages.push({ role, content: [{ type: \"json\", value: asJsonValue(value) }] });\n}\n\nfunction googleTextParts(value: unknown): ReturnType<typeof unknownToContent> {\n return records(value).flatMap((part) => typeof part.text === \"string\"\n ? [textPart(part.text)]\n : [{ type: \"json\" as const, value: asJsonValue(part) }]);\n}\n\nfunction replayGoogleResponse(response: SemanticResponse): unknown {\n return {\n responseId: response.id,\n modelVersion: response.model,\n candidates: [{\n content: {\n role: \"model\",\n parts: [\n ...response.content.map((part) => part.type === \"text\" ? { text: part.text } : { text: JSON.stringify(part.type === \"json\" ? part.value : part.source) }),\n ...response.toolCalls.map((call) => ({ functionCall: { name: call.name, args: call.arguments } })),\n ],\n },\n finishReason: response.finishReason ?? \"STOP\",\n }],\n usageMetadata: response.usage ? {\n promptTokenCount: response.usage.inputTokens,\n candidatesTokenCount: response.usage.outputTokens,\n totalTokenCount: response.usage.totalTokens,\n } : undefined,\n };\n}\n","import { isRecord, messageFromUnknown } from \"../core/canonical.js\";\nimport type { ProviderAdapter, SemanticRequest, SemanticResponse, ToolCall } from \"../core/types.js\";\nimport { contentParts, contentToProviderText, normalizeTools, normalizeUsage, parseJson, records, stringValue } from \"./common.js\";\n\nexport function openAI<Request = unknown, Response = unknown>(): ProviderAdapter<Request, Response> {\n return {\n provider: \"openai\",\n normalizeRequest: (request) => normalizeOpenAIRequest(request),\n normalizeResponse: (response) => normalizeOpenAIResponse(response),\n replayResponse: (response) => replayOpenAIResponse(response) as Response,\n };\n}\n\nexport const openAICompatible = openAI;\n\nexport function normalizeOpenAIRequest(value: unknown): SemanticRequest {\n const request = isRecord(value) ? value : {};\n const normalized: SemanticRequest = {\n messages: (Array.isArray(request.messages) ? request.messages : []).map((source) => {\n const message = messageFromUnknown(source);\n if (isRecord(source)) {\n const toolCalls = openAIToolCalls(source.tool_calls ?? source.toolCalls);\n if (toolCalls.length > 0) message.toolCalls = toolCalls;\n }\n return message;\n }),\n tools: normalizeTools(request.tools, \"openai\"),\n };\n const model = stringValue(request.model);\n if (model !== undefined) normalized.model = model;\n return normalized;\n}\n\nexport function normalizeOpenAIResponse(value: unknown): SemanticResponse {\n const response = isRecord(value) ? value : {};\n const choice = records(response.choices)[0];\n const message = choice && isRecord(choice.message) ? choice.message : {};\n const toolCalls = openAIToolCalls(message.tool_calls ?? message.toolCalls);\n const normalized: SemanticResponse = {\n content: contentParts(message.content),\n toolCalls,\n };\n const id = stringValue(response.id);\n if (id !== undefined) normalized.id = id;\n const model = stringValue(response.model);\n if (model !== undefined) normalized.model = model;\n const finishReason = choice ? stringValue(choice.finish_reason ?? choice.finishReason) : undefined;\n if (finishReason !== undefined) normalized.finishReason = finishReason;\n const usage = normalizeUsage(response.usage, [\"prompt_tokens\", \"input_tokens\"], [\"completion_tokens\", \"output_tokens\"], [\"total_tokens\"]);\n if (usage !== undefined) normalized.usage = usage;\n return normalized;\n}\n\nfunction replayOpenAIResponse(response: SemanticResponse): unknown {\n return {\n id: response.id ?? \"agentcassette-replay\",\n object: \"chat.completion\",\n created: 0,\n model: response.model,\n choices: [{\n index: 0,\n message: {\n role: \"assistant\",\n content: contentToProviderText(response.content),\n tool_calls: response.toolCalls.map((call, index) => ({\n id: call.id ?? `call_replay_${index}`,\n type: \"function\",\n function: { name: call.name, arguments: JSON.stringify(call.arguments) },\n })),\n },\n finish_reason: response.finishReason ?? (response.toolCalls.length > 0 ? \"tool_calls\" : \"stop\"),\n }],\n usage: response.usage ? {\n prompt_tokens: response.usage.inputTokens,\n completion_tokens: response.usage.outputTokens,\n total_tokens: response.usage.totalTokens,\n } : undefined,\n };\n}\n\nfunction openAIToolCalls(value: unknown): ToolCall[] {\n return records(value).flatMap((item) => {\n const fn = isRecord(item.function) ? item.function : item;\n const name = stringValue(fn.name);\n if (!name) return [];\n const call: ToolCall = { name, arguments: parseJson(fn.arguments) };\n const id = stringValue(item.id);\n if (id !== undefined) call.id = id;\n return [call];\n });\n}\n","import type { ProviderAdapter, SemanticRequest, SemanticResponse } from \"../core/types.js\";\n\nexport function semantic(): ProviderAdapter<SemanticRequest, SemanticResponse> {\n return {\n provider: \"semantic\",\n normalizeRequest: (request) => structuredClone(request),\n normalizeResponse: (response) => structuredClone(response),\n replayResponse: (response) => structuredClone(response),\n };\n}\n"]}
|