@modainteract/moda-interact-shared 2.5.1 → 2.7.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/{chunk-XUTUA6JD.js → chunk-FOM6C3JF.js} +5 -3
- package/dist/{chunk-XUTUA6JD.js.map → chunk-FOM6C3JF.js.map} +1 -1
- package/dist/chunk-QVPEX7KY.js +54 -0
- package/dist/chunk-QVPEX7KY.js.map +1 -0
- package/dist/{chunk-QJNZJACH.js → chunk-XTKCNFLQ.js} +271 -226
- package/dist/chunk-XTKCNFLQ.js.map +1 -0
- package/dist/commerce/index.d.ts +10 -3
- package/dist/commerce/index.js +29 -12
- package/dist/commerce/index.js.map +1 -1
- package/dist/commerce/model/node.d.ts +2 -2
- package/dist/commerce/model/node.js +2 -1
- package/dist/commerce/model/node.js.map +1 -1
- package/dist/commerce/runner/index.d.ts +3 -3
- package/dist/commerce/runner/index.js +5 -3
- package/dist/commerce/runner/index.js.map +1 -1
- package/dist/recovery-offer-proof.d.ts +133 -0
- package/dist/recovery-offer-proof.js +70 -0
- package/dist/recovery-offer-proof.js.map +1 -0
- package/dist/recovery-template-bindings.d.ts +142 -0
- package/dist/recovery-template-bindings.js +62 -0
- package/dist/recovery-template-bindings.js.map +1 -0
- package/dist/{response-DjZkLFT7.d.ts → response-C6-kYOel.d.ts} +305 -7
- package/dist/{types-LT58TPMW.d.ts → types-CGQgT51t.d.ts} +1 -1
- package/package.json +9 -1
- package/dist/chunk-QJNZJACH.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commerce/subset.ts","../src/commerce/external.ts","../src/commerce/definitions.ts","../src/commerce/definition-size.ts","../src/commerce/response.ts","../src/commerce/schemas.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { canonicalJson, jsonBytes } from \"./canonical-json\";\nexport type Json =\n null | boolean | number | string | Json[] | { [key: string]: Json };\nexport type SubsetSchema = {\n type: string | [string, \"null\"];\n description?: string;\n properties?: Record<string, SubsetSchema>;\n required?: string[];\n additionalProperties?: false;\n items?: SubsetSchema;\n enum?: Array<string | number | boolean | null>;\n minLength?: number;\n maxLength?: number;\n minimum?: number;\n maximum?: number;\n minItems?: number;\n maxItems?: number;\n pattern?: string;\n};\nexport const MONEY_PATTERN = \"^[0-9]{1,18}(\\\\.[0-9]{1,6})?$\";\nexport const safeName = (name: string) =>\n /^[A-Za-z][A-Za-z0-9_]{0,63}$/.test(name) &&\n ![\"__proto__\", \"prototype\", \"constructor\"].includes(name);\nexport const safePath = (path: string) =>\n path.length <= 256 && path.split(\".\").every(safeName);\nconst keywords = [\n \"type\",\n \"description\",\n \"properties\",\n \"required\",\n \"additionalProperties\",\n \"items\",\n \"enum\",\n \"minLength\",\n \"maxLength\",\n \"minimum\",\n \"maximum\",\n \"minItems\",\n \"maxItems\",\n];\nexport function validateSubset(\n value: unknown,\n mode: \"input\" | \"details\",\n): value is SubsetSchema {\n let propertyCount = 0;\n const maxDepth = mode === \"input\" ? 3 : 4;\n function walk(raw: unknown, depth: number): boolean {\n if (\n depth > maxDepth ||\n !raw ||\n typeof raw !== \"object\" ||\n Array.isArray(raw)\n )\n return false;\n const s = raw as SubsetSchema;\n if (\n Object.keys(s).some(\n (k) => !keywords.includes(k) && !(mode === \"input\" && k === \"pattern\"),\n )\n )\n return false;\n const nullable = Array.isArray(s.type);\n if (\n nullable &&\n (mode !== \"input\" || s.type.length !== 2 || s.type[1] !== \"null\")\n )\n return false;\n const type = typeof s.type === \"string\" ? s.type : s.type[0];\n if (\n ![\n \"object\",\n \"string\",\n \"integer\",\n \"boolean\",\n \"array\",\n ...(mode === \"details\" ? [\"number\"] : []),\n ].includes(type)\n )\n return false;\n if (\n s.description !== undefined &&\n (typeof s.description !== \"string\" || s.description.length > 1000)\n )\n return false;\n const specific: Record<string, string[]> = {\n object: [\"properties\", \"required\", \"additionalProperties\"],\n array: [\"items\", \"minItems\", \"maxItems\"],\n string: [\"minLength\", \"maxLength\", \"pattern\"],\n integer: [\"minimum\", \"maximum\"],\n number: [\"minimum\", \"maximum\"],\n boolean: [],\n };\n if (\n Object.keys(s).some(\n (k) =>\n ![\"type\", \"description\", \"enum\"].includes(k) &&\n !specific[type].includes(k),\n )\n )\n return false;\n if (\n s.enum !== undefined &&\n (!Array.isArray(s.enum) ||\n s.enum.length < 1 ||\n s.enum.length > (mode === \"input\" ? 32 : 20) ||\n new Set(s.enum.map((v) => canonicalJson(v))).size !== s.enum.length ||\n s.enum.some((v) =>\n v === null\n ? !nullable\n : typeof v !== (type === \"integer\" ? \"number\" : type) ||\n (type === \"integer\" && !Number.isSafeInteger(v)) ||\n typeof v === \"object\",\n ))\n )\n return false;\n for (const [lo, hi] of [\n [\"minLength\", \"maxLength\"],\n [\"minItems\", \"maxItems\"],\n [\"minimum\", \"maximum\"],\n ] as const) {\n if (\n s[lo] !== undefined &&\n (typeof s[lo] !== \"number\" || !Number.isFinite(s[lo]))\n )\n return false;\n if (\n s[hi] !== undefined &&\n (typeof s[hi] !== \"number\" || !Number.isFinite(s[hi]))\n )\n return false;\n if (\n lo !== \"minimum\" &&\n [s[lo], s[hi]].some(\n (v) => v !== undefined && (!Number.isSafeInteger(v) || v < 0),\n )\n )\n return false;\n if (s[lo] !== undefined && s[hi] !== undefined && s[lo]! > s[hi]!)\n return false;\n }\n if (type === \"string\")\n return (\n s.maxLength !== undefined &&\n s.maxLength <= 4096 &&\n (s.pattern === undefined || s.pattern === MONEY_PATTERN)\n );\n if (type === \"array\")\n return (\n s.maxItems !== undefined &&\n s.maxItems <= (mode === \"input\" ? 100 : 20) &&\n walk(s.items, depth + 1)\n );\n if (type === \"object\") {\n if (\n s.additionalProperties !== false ||\n !s.properties ||\n typeof s.properties !== \"object\" ||\n Array.isArray(s.properties)\n )\n return false;\n const names = Object.keys(s.properties);\n propertyCount += names.length;\n if (\n propertyCount > 32 ||\n names.some((n) => !safeName(n)) ||\n (s.required !== undefined &&\n (!Array.isArray(s.required) ||\n new Set(s.required).size !== s.required.length ||\n s.required.some((n) => !names.includes(n))))\n )\n return false;\n return Object.values(s.properties).every((child) =>\n walk(child, depth + 1),\n );\n }\n return true;\n }\n try {\n return (\n jsonBytes(value) <= 32768 &&\n walk(value, 1) &&\n (value as SubsetSchema).type === \"object\"\n );\n } catch {\n return false;\n }\n}\nexport const InputSchemaSchema = z.custom<SubsetSchema>((v) =>\n validateSubset(v, \"input\"),\n);\nexport const DetailsSchemaSchema = z.custom<SubsetSchema>((v) =>\n validateSubset(v, \"details\"),\n);\nexport function matchesSubset(schema: SubsetSchema, value: unknown): boolean {\n const nullable = Array.isArray(schema.type);\n const type = typeof schema.type === \"string\" ? schema.type : schema.type[0];\n if (value === null)\n return nullable && (!schema.enum || schema.enum.includes(null));\n if (schema.enum && !schema.enum.includes(value as never)) return false;\n if (type === \"string\")\n return (\n typeof value === \"string\" &&\n value.length >= (schema.minLength ?? 0) &&\n value.length <= schema.maxLength! &&\n (!schema.pattern || new RegExp(schema.pattern).test(value))\n );\n if (type === \"boolean\") return typeof value === \"boolean\";\n if (type === \"integer\" || type === \"number\")\n return (\n typeof value === \"number\" &&\n Number.isFinite(value) &&\n (type !== \"integer\" || Number.isSafeInteger(value)) &&\n value >= (schema.minimum ?? -Infinity) &&\n value <= (schema.maximum ?? Infinity)\n );\n if (type === \"array\")\n return (\n Array.isArray(value) &&\n value.length >= (schema.minItems ?? 0) &&\n value.length <= schema.maxItems! &&\n value.every((v) => matchesSubset(schema.items!, v))\n );\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const obj = value as Record<string, unknown>;\n return (\n Object.keys(obj).every((k) => Object.hasOwn(schema.properties!, k)) &&\n (schema.required ?? []).every((k) => Object.hasOwn(obj, k)) &&\n Object.entries(obj).every(([k, v]) =>\n matchesSubset(schema.properties![k], v),\n )\n );\n}\nexport function compileSubset(schema: SubsetSchema, mode: \"input\" | \"details\") {\n if (!validateSubset(schema, mode)) throw new TypeError(\"Unsupported schema\");\n return z.custom<Record<string, Json>>((value) => {\n try {\n return (\n jsonBytes(value) <= (mode === \"details\" ? 16384 : 131072) &&\n matchesSubset(schema, value)\n );\n } catch {\n return false;\n }\n });\n}\n","import { z } from \"zod\";\nimport { DateSchema, IdSchema } from \"./primitives\";\nimport { safeName, safePath } from \"./subset\";\nimport { jsonBytes } from \"./canonical-json\";\n\nconst utf8 = (value: string, maximum: number) => new TextEncoder().encode(value).length <= maximum;\nconst scalar = z.union([z.string().refine((value) => utf8(value, 2048)), z.number().finite(), z.boolean()]);\nexport const ExternalQueryValueSchema = scalar;\nconst scalarOrNull = z.union([scalar, z.null()]);\nconst record = <T extends z.ZodTypeAny>(item: T, max: number) => z.record(z.string().refine(safeName), item).refine((value) => Object.keys(value).length <= max);\n\nexport const ExternalQueryMappingSchema = z.union([\n z.strictObject({ input: z.string().refine(safeName), omitIfMissing: z.literal(true).optional() }),\n z.strictObject({ literal: scalar }),\n]);\nexport const ExternalQueryMappingsSchema = record(ExternalQueryMappingSchema, 32).superRefine((value, ctx) => {\n const reserved = /^(authorization|cookie|set-cookie|host|x-api-key|api_key|apikey|access_token|token|secret|password)$/i;\n for (const key of Object.keys(value)) if (reserved.test(key)) ctx.addIssue({ code: \"custom\", path: [key], message: \"Reserved query key\" });\n});\nexport const ExternalPathSchema = z.string().max(1024).refine((value) =>\n utf8(value, 1024) && /^\\/(?:[A-Za-z0-9._~-]+\\/)*[A-Za-z0-9._~-]*\\/?$/.test(value) &&\n !value.includes(\"//\") && !value.includes(\"%\") && !value.includes(\"\\\\\") &&\n !value.includes(\"?\") && !value.includes(\"#\") && !value.includes(\"{\") && !value.includes(\"}\") &&\n value.split(\"/\").every((segment) => segment !== \".\" && segment !== \"..\"),\n);\nconst mediaType = z.string().min(1).max(128).refine((value) => value === value.toLowerCase() && /^[a-z0-9!#$&^_.+-]+\\/[a-z0-9!#$&^_.+-]+$/.test(value));\nconst jsonMime = (value: string) => value === \"application/json\" || /^application\\/[a-z0-9!#$&^_.+-]+\\+json$/.test(value);\nconst textMime = (value: string) => /^text\\/[a-z0-9!#$&^_.+-]+$/.test(value) || value === \"application/xml\" || /^application\\/[a-z0-9!#$&^_.+-]+\\+xml$/.test(value) || jsonMime(value);\nexport const ExternalResponseFormatSchema = z.strictObject({ mode: z.enum([\"JSON\", \"TEXT\"]), mediaTypes: z.array(mediaType).min(1).max(8).refine((values) => new Set(values).size === values.length) }).refine((value) => value.mediaTypes.every(value.mode === \"JSON\" ? jsonMime : textMime));\nexport const FieldProjectionSchema = record(z.strictObject({ path: z.string().refine(safePath), omitIfMissing: z.literal(true).optional() }), 32).refine((value) => Object.keys(value).length >= 1);\nexport const ResponseFilterSchema = z.discriminatedUnion(\"op\", [\n z.strictObject({ path: z.string().refine(safePath), op: z.enum([\"EQ\", \"NE\", \"GT\", \"GTE\", \"LT\", \"LTE\", \"CONTAINS\", \"STARTS_WITH\"]), value: scalarOrNull }),\n z.strictObject({ path: z.string().refine(safePath), op: z.literal(\"IN\"), values: z.array(scalarOrNull).min(1).max(20) }),\n]);\nconst visualObject = z.strictObject({ kind: z.literal(\"OBJECT\"), fields: FieldProjectionSchema });\nconst visualList = z.strictObject({ kind: z.literal(\"LIST\"), fields: FieldProjectionSchema, filters: z.array(ResponseFilterSchema).max(8), sort: z.union([z.null(), z.strictObject({ path: z.string().refine(safePath), direction: z.enum([\"ASC\", \"DESC\"]) })]), limit: z.int().min(1).max(20) });\nexport const VisualResponseProcessingSchema = z.union([visualObject, visualList]);\nexport const ResponseProcessingSchema = z.union([VisualResponseProcessingSchema, z.strictObject({ kind: z.literal(\"JAVASCRIPT\"), runtimeVersion: z.literal(\"quickjs-sync.v1\"), source: z.string().min(1).refine((value) => utf8(value, 16384)) })]);\nexport const TransformResponseSchema = z.strictObject({ status: z.int().min(200).max(299), contentType: z.string().min(1).max(128), bodyText: z.string().refine((value) => utf8(value, 262144)), json: z.union([z.null(), z.json()]) });\nexport const TransformSampleSchema = z.strictObject({ status: z.int().min(200).max(299), contentType: z.string().min(1).max(128), bodyText: z.string().refine((value) => utf8(value, 262144)) }).refine((value) => jsonBytes(value) <= 524288);\nconst boundedValues = z.custom<Record<string, unknown>>((value) => {\n const visit = (node: unknown, depth: number): boolean =>\n depth <= 20 && (node === null || typeof node === \"string\" || typeof node === \"boolean\" || (typeof node === \"number\" && Number.isFinite(node)) ||\n (Array.isArray(node) && node.every((child) => visit(child, depth + 1))) ||\n (!!node && typeof node === \"object\" && !Array.isArray(node) && Object.getPrototypeOf(node) === Object.prototype && Object.entries(node).every(([key, child]) => ![\"__proto__\", \"prototype\", \"constructor\"].includes(key) && visit(child, depth + 1))));\n try { return !!value && typeof value === \"object\" && !Array.isArray(value) && visit(value, 1) && jsonBytes(value) <= 49152; } catch { return false; }\n});\nexport const ExternalHttpResultDataSchema = z.strictObject({ source: z.literal(\"EXTERNAL_HTTP\"), connectionRevisionId: IdSchema, observedAt: DateSchema, values: boundedValues });\nexport const ConnectionRevisionViewSchema = z.strictObject({ id: IdSchema, connectionId: IdSchema, revisionNumber: z.int().positive(), origin: z.string().min(1).max(2048), scope: z.enum([\"PLATFORM\", \"PER_SHOP\"]), authMode: z.enum([\"NONE\", \"BEARER\", \"API_KEY\"]), authHeader: z.string().min(1).max(128).nullable(), documentation: z.string().max(16000), createdAt: z.iso.datetime({ offset: false }) });\nexport const ConnectionViewSchema = z.strictObject({ id: IdSchema, key: z.string().regex(/^[a-z][a-z0-9_]{0,127}$/), displayName: z.string().min(1).max(255), description: z.string().max(4096), enabled: z.boolean(), editVersion: z.int().positive(), revisions: z.array(ConnectionRevisionViewSchema) });\nexport const CredentialStatusSchema = z.strictObject({ connectionRevisionId: IdSchema, shopId: IdSchema.nullable(), configured: z.boolean(), editVersion: z.int().positive().nullable(), updatedAt: z.iso.datetime({ offset: false }).nullable() });\nexport const ConnectionCommandSchema = z.strictObject({ operationId: IdSchema, reason: z.string().trim().min(1).max(1000) });\nexport const RevisionInputSchema = z.strictObject({ origin: z.string().min(1).max(2048), scope: z.enum([\"PLATFORM\", \"PER_SHOP\"]), authMode: z.enum([\"NONE\", \"BEARER\", \"API_KEY\"]), authHeader: z.string().min(1).max(128).nullable(), documentation: z.string().max(16000) });\nexport const ConnectionIssueSchema = z.strictObject({ path: z.string().max(256), message: z.string().min(1).max(512) });\nexport const ConnectionResultSchema = <T extends z.ZodType>(value: T) => z.discriminatedUnion(\"kind\", [\n z.strictObject({ kind: z.literal(\"ok\"), value }),\n z.strictObject({ kind: z.literal(\"not-found\") }),\n z.strictObject({ kind: z.literal(\"forbidden\") }),\n z.strictObject({ kind: z.literal(\"unavailable\") }),\n z.strictObject({ kind: z.literal(\"invalid\"), issues: z.array(ConnectionIssueSchema).max(32) }),\n z.strictObject({ kind: z.literal(\"conflict\"), code: z.enum([\"STALE_CAS\", \"CONFLICTING_REPLAY\"]) }),\n]);\nexport type ExternalResponseFormat = z.infer<typeof ExternalResponseFormatSchema>;\nexport type FieldProjection = z.infer<typeof FieldProjectionSchema>;\nexport type ResponseFilter = z.infer<typeof ResponseFilterSchema>;\nexport type VisualResponseProcessing = z.infer<typeof VisualResponseProcessingSchema>;\nexport type ResponseProcessing = z.infer<typeof ResponseProcessingSchema>;\nexport type TransformResponse = z.infer<typeof TransformResponseSchema>;\nexport type TransformSample = z.infer<typeof TransformSampleSchema>;\nexport type ExternalHttpResultData = z.infer<typeof ExternalHttpResultDataSchema>;\nexport type ConnectionRevisionView = z.infer<typeof ConnectionRevisionViewSchema>;\nexport type ConnectionView = z.infer<typeof ConnectionViewSchema>;\nexport type CredentialStatus = z.infer<typeof CredentialStatusSchema>;\nexport type ConnectionCommand = z.infer<typeof ConnectionCommandSchema>;\nexport type RevisionInput = z.infer<typeof RevisionInputSchema>;\nexport type ConnectionResult<T> =\n | { kind: \"ok\"; value: T }\n | { kind: \"not-found\" | \"forbidden\" | \"unavailable\" }\n | { kind: \"invalid\"; issues: Array<z.infer<typeof ConnectionIssueSchema>> }\n | { kind: \"conflict\"; code: \"STALE_CAS\" | \"CONFLICTING_REPLAY\" };\nexport type VisualResponseProcessorInput = { source: unknown; processing: VisualResponseProcessing; limits: { maxResults: number; deadlineAt: number }; signal: AbortSignal };\nexport type VisualResponseProcessorResult = { ok: true; values: Record<string, unknown> } | { ok: false; code: \"INVALID_RESPONSE\" | \"DEADLINE\" | \"CANCELLED\" };\nexport type CodeResponseProcessorInput = { response: TransformResponse; processing: Extract<ResponseProcessing, { kind: \"JAVASCRIPT\" }>; limits: { maxResults: number; deadlineAt: number }; signal: AbortSignal };\nexport type CodeResponseProcessorResult = { ok: true; values: Record<string, unknown> } | { ok: false; code: \"INVALID_RESPONSE\" | \"DEADLINE\" | \"CANCELLED\" | \"THROTTLED\"; diagnostic?: { code: \"SYNTAX_ERROR\" | \"EXECUTION_ERROR\" | \"INVALID_OUTPUT\" | \"RESOURCE_LIMIT\" | \"RUNTIME_UNAVAILABLE\"; line: number | null; column: number | null } };\n","import { z } from \"zod\";\nimport { gt } from \"semver\";\nimport {\n boundedJson,\n ContractVersionSchema,\n IdSchema,\n SemverSchema,\n HashSchema,\n distinct,\n} from \"./primitives\";\nimport {\n InputSchemaSchema,\n DetailsSchemaSchema,\n safeName,\n safePath,\n type SubsetSchema,\n compileSubset,\n} from \"./subset\";\nimport { canonicalJson } from \"./canonical-json\";\nimport {\n definitionFitsStorage,\n DEFINITION_SIZE_MESSAGE,\n} from \"./definition-size\";\nimport {\n ExternalPathSchema,\n ExternalQueryMappingsSchema,\n ExternalQueryValueSchema,\n ExternalResponseFormatSchema,\n ResponseProcessingSchema,\n} from \"./external\";\nexport const ToolNameSchema = z\n .string()\n .regex(/^[a-z][a-z0-9_]{0,127}$/)\n .refine((n) => n !== \"finalResponse\");\nexport const GrantedToolSchema = z.strictObject({\n toolId: IdSchema,\n toolRevisionId: IdSchema,\n toolName: ToolNameSchema,\n definitionVersion: SemverSchema,\n capabilityKeys: z\n .array(IdSchema)\n .min(1)\n .max(32)\n .refine((v) => distinct(v) && v.join(\"\\0\") === [...v].sort().join(\"\\0\")),\n});\nexport const GrantedToolsSchema = z\n .array(GrantedToolSchema)\n .max(32)\n .refine(\n (v) =>\n distinct(v.map((x) => x.toolId)) && distinct(v.map((x) => x.toolName)),\n );\nexport const ToolDescriptorSchema = z.strictObject({\n toolId: IdSchema,\n toolRevisionId: IdSchema,\n name: ToolNameSchema,\n definitionVersion: SemverSchema,\n description: z.string().min(1).max(4096),\n inputSchema: InputSchemaSchema,\n});\nconst MappingSchema = z.union([\n z.strictObject({\n input: z.string().refine(safeName),\n omitIfMissing: z.literal(true).optional(),\n }),\n z.strictObject({ literal: boundedJson(8192) }),\n]);\nconst MappingsSchema = z\n .record(z.string().refine(safeName), MappingSchema)\n .refine((v) => Object.keys(v).length <= 32);\nexport const POLICY_OPERATIONS = [\n \"recovery.getBasket\",\n \"shopify.searchProducts\",\n \"discounts.getOptions\",\n \"discounts.evaluate\",\n \"products.findQualifying\",\n \"products.findSimilar\",\n] as const;\nexport const ExternalHttpExecutionSchema = z\n .strictObject({\n kind: z.literal(\"EXTERNAL_HTTP\"),\n executorVersion: z.literal(\"1.0.0\"),\n connectionRevisionId: IdSchema,\n method: z.literal(\"GET\"),\n path: ExternalPathSchema,\n query: ExternalQueryMappingsSchema,\n responseFormat: ExternalResponseFormatSchema,\n resultPath: z.string().refine((value) => value === \"\" || safePath(value)),\n responseProcessing: ResponseProcessingSchema,\n resultSchema: DetailsSchemaSchema,\n })\n .superRefine((value, ctx) => {\n if (value.responseProcessing.kind === \"JAVASCRIPT\" && value.resultPath !== \"\")\n ctx.addIssue({ code: \"custom\", path: [\"resultPath\"], message: \"JAVASCRIPT processing requires an empty resultPath\" });\n if (value.responseProcessing.kind !== \"JAVASCRIPT\" && value.responseFormat.mode !== \"JSON\")\n ctx.addIssue({ code: \"custom\", path: [\"responseFormat\", \"mode\"], message: \"Visual processing requires JSON\" });\n });\nexport const CommerceExecutionSchema = z.discriminatedUnion(\"kind\", [\n z.strictObject({\n kind: z.literal(\"SHOPIFY_STOREFRONT_QUERY\"),\n executorVersion: z.literal(\"1.0.0\"),\n apiVersion: z.literal(\"2026-07\"),\n schemaHash: HashSchema,\n document: z\n .string()\n .min(1)\n .refine((v) => new TextEncoder().encode(v).length <= 16384),\n operationName: z.string().refine(safeName),\n variables: MappingsSchema,\n resultPath: z.string().refine(safePath),\n }),\n z.strictObject({\n kind: z.literal(\"POLICY_OPERATION\"),\n operation: z.enum(POLICY_OPERATIONS),\n operationVersion: z.literal(\"1.0.0\"),\n arguments: MappingsSchema,\n }),\n ExternalHttpExecutionSchema,\n]);\nexport type ExternalHttpExecution = Extract<\n z.infer<typeof CommerceExecutionSchema>,\n { kind: \"EXTERNAL_HTTP\" }\n>;\nfunction tokensValid(text: string, root: \"result\" | \"item\") {\n if (/[<>]/.test(text)) return false;\n const residue = text.replace(/\\{\\{([^{}]+)\\}\\}/g, (_all, path: string) =>\n path.startsWith(root + \".\") && safePath(path.slice(root.length + 1))\n ? \"\"\n : \"{{invalid}}\",\n );\n return !residue.includes(\"{{\") && !residue.includes(\"}}\");\n}\nconst fixed = z\n .string()\n .max(4096)\n .refine((v) => !/[<>]|\\{\\{|\\}\\}/.test(v));\nexport const ResponseTemplateSchema = z.discriminatedUnion(\"kind\", [\n z.strictObject({\n kind: z.literal(\"text\"),\n text: z\n .string()\n .max(4096)\n .refine((v) => tokensValid(v, \"result\")),\n unavailable: fixed,\n }),\n z.strictObject({\n kind: z.literal(\"items\"),\n itemsPath: z.string().refine(safePath),\n item: z\n .string()\n .max(4096)\n .refine((v) => tokensValid(v, \"item\")),\n empty: fixed,\n unavailable: fixed,\n }),\n]);\nconst identity = {\n name: ToolNameSchema,\n definitionVersion: SemverSchema,\n description: z.string().min(1).max(4096),\n};\nconst forbiddenInput =\n /^(shopid|customerid|checkoutrecoveryid|conversationid|grantid|releaseid|token|accesstoken|domain|headers|url|graphql|document|authorization)$/i;\nconst forbiddenExternalInput = /^(authorization|cookie|set-cookie|host|x-api-key|api_key|apikey|access_token|token|secret|password)$/i;\nexport const CommerceToolDefinitionSchema = z\n .strictObject({\n ...identity,\n inputSchema: InputSchemaSchema,\n execution: CommerceExecutionSchema,\n responseTemplate: ResponseTemplateSchema,\n })\n .refine(definitionFitsStorage, { message: DEFINITION_SIZE_MESSAGE })\n .superRefine((d, ctx) => {\n const properties = d.inputSchema.properties!;\n const containsAuthority = (schema: SubsetSchema): boolean =>\n Object.entries(schema.properties ?? {}).some(\n ([name, child]) =>\n forbiddenInput.test(name) || containsAuthority(child),\n ) || !!(schema.items && containsAuthority(schema.items));\n if (containsAuthority(d.inputSchema))\n ctx.addIssue({\n code: \"custom\",\n message: \"Authority/credential inputs are forbidden\",\n });\n const mapping =\n d.execution.kind === \"POLICY_OPERATION\"\n ? d.execution.arguments\n : d.execution.kind === \"SHOPIFY_STOREFRONT_QUERY\"\n ? d.execution.variables\n : d.execution.query;\n for (const [name, m] of Object.entries(mapping))\n if (\"input\" in m && !Object.hasOwn(properties, m.input))\n ctx.addIssue({\n code: \"custom\",\n path: [\"execution\", name],\n message: \"Unknown mapped input\",\n });\n if (d.execution.kind === \"EXTERNAL_HTTP\")\n for (const [name, mapping] of Object.entries(d.execution.query))\n if (\"input\" in mapping) {\n const target = properties[mapping.input];\n const type = target && (Array.isArray(target.type) ? target.type[0] : target.type);\n if (forbiddenExternalInput.test(mapping.input) || ![\"string\", \"integer\", \"boolean\"].includes(type ?? \"\"))\n ctx.addIssue({ code: \"custom\", path: [\"execution\", \"query\", name], message: \"External mappings require a top-level scalar input\" });\n }\n });\nconst draftObject = boundedJson(65536).refine(\n (v) => !!v && typeof v === \"object\" && !Array.isArray(v),\n);\nexport const CommerceToolDraftDefinitionSchema = z\n .strictObject({\n ...identity,\n inputSchema: draftObject,\n execution: draftObject,\n responseTemplate: draftObject,\n })\n .refine(definitionFitsStorage, { message: DEFINITION_SIZE_MESSAGE });\nexport type CommerceToolDefinition = z.infer<\n typeof CommerceToolDefinitionSchema\n>;\nexport type CommerceToolDraftDefinition = z.infer<\n typeof CommerceToolDraftDefinitionSchema\n>;\nexport type GrantedTool = z.infer<typeof GrantedToolSchema>;\nexport type ToolDescriptor = z.infer<typeof ToolDescriptorSchema>;\n/** Commerce owns schema-backed GraphQL parsing, restrictions and output derivation. */\nexport interface CommerceDefinitionCompiler {\n compile(\n execution: CommerceToolDefinition[\"execution\"],\n input: SubsetSchema,\n ): {\n outputSchema: SubsetSchema;\n validateMappedArguments: (\n mapping: CommerceToolDefinition[\"execution\"],\n ) => boolean;\n };\n}\nfunction externalOutputSchema(execution: ExternalHttpExecution): SubsetSchema {\n return {\n type: \"object\",\n properties: { values: execution.resultSchema },\n required: [\"values\"],\n additionalProperties: false,\n };\n}\nfunction scalarSchema(schema: SubsetSchema | undefined) {\n const type = schema && (Array.isArray(schema.type) ? schema.type[0] : schema.type);\n return !!schema && [\"string\", \"integer\", \"number\", \"boolean\"].includes(type ?? \"\");\n}\nfunction visualPublicationCompatible(execution: ExternalHttpExecution) {\n if (execution.responseProcessing.kind === \"JAVASCRIPT\") return true;\n const processing = execution.responseProcessing;\n const schema = execution.resultSchema;\n if (processing.kind === \"LIST\") {\n const items = schema.properties?.items;\n if (!items || items.type !== \"array\" || !(schema.required ?? []).includes(\"items\")) return false;\n if (Object.keys(schema.properties ?? {}).some((name) => name !== \"items\")) return false;\n if (items.minItems !== undefined && items.minItems > 0) return false;\n if (items.maxItems !== undefined && items.maxItems < processing.limit) return false;\n }\n const output = processing.kind === \"OBJECT\"\n ? schema\n : schema.properties?.items?.items;\n if (!output || output.type !== \"object\" || !output.properties || output.additionalProperties !== false) return false;\n const fields = processing.fields;\n if (Object.keys(output.properties).some((name) => !Object.hasOwn(fields, name) || !scalarSchema(output.properties![name]))) return false;\n if (Object.keys(fields).some((name) => !Object.hasOwn(output.properties!, name))) return false;\n return (output.required ?? []).every((name) => !fields[name]?.omitIfMissing);\n}\nfunction at(schema: SubsetSchema, path: string) {\n let current: SubsetSchema | undefined = schema;\n for (const part of path.split(\".\")) current = current?.properties?.[part];\n return current;\n}\nexport function validateDefinitionForPublication(\n raw: unknown,\n compiler: CommerceDefinitionCompiler,\n) {\n const definition = CommerceToolDefinitionSchema.parse(raw);\n if (definition.execution.kind === \"EXTERNAL_HTTP\" && !visualPublicationCompatible(definition.execution))\n throw new TypeError(\"External visual projection is incompatible with resultSchema\");\n const compiled =\n definition.execution.kind === \"EXTERNAL_HTTP\"\n ? { outputSchema: externalOutputSchema(definition.execution), validateMappedArguments: () => true }\n : compiler.compile(definition.execution, definition.inputSchema);\n if (!compiled.validateMappedArguments(definition.execution))\n throw new TypeError(\"Invalid variable/operation mapping\");\n const template = definition.responseTemplate;\n const schema =\n template.kind === \"text\"\n ? compiled.outputSchema\n : at(compiled.outputSchema, template.itemsPath)?.items;\n if (!schema) throw new TypeError(\"Unknown template items path\");\n const text = template.kind === \"text\" ? template.text : template.item;\n for (const match of text.matchAll(/\\{\\{(?:result|item)\\.([^{}]+)\\}\\}/g)) {\n const target = at(schema, match[1]);\n const type =\n target && (Array.isArray(target.type) ? target.type[0] : target.type);\n if (!type || [\"object\", \"array\"].includes(type))\n throw new TypeError(\"Unknown or nonscalar template path\");\n }\n return definition;\n}\nexport function definitionToMcpDescriptor(definition: CommerceToolDefinition) {\n const d = CommerceToolDefinitionSchema.parse(definition);\n return {\n name: d.name,\n description: d.description,\n inputSchema: d.inputSchema,\n };\n}\nexport function mapToolArguments(\n definition: CommerceToolDefinition,\n raw: unknown,\n) {\n const input = compileSubset(definition.inputSchema, \"input\").parse(raw);\n const mapping =\n definition.execution.kind === \"POLICY_OPERATION\"\n ? definition.execution.arguments\n : definition.execution.kind === \"SHOPIFY_STOREFRONT_QUERY\"\n ? definition.execution.variables\n : definition.execution.query;\n const result: Record<string, unknown> = Object.create(null);\n for (const [key, m] of Object.entries(mapping)) {\n if (\"literal\" in m) result[key] = m.literal;\n else if (Object.hasOwn(input, m.input)) {\n const value = input[m.input];\n if (definition.execution.kind === \"EXTERNAL_HTTP\" && !ExternalQueryValueSchema.safeParse(value).success)\n throw new TypeError(\"Invalid external mapped scalar\");\n result[key] = value;\n }\n else if (!m.omitIfMissing) throw new TypeError(\"Missing mapped input\");\n }\n return result;\n}\nexport const toolHashInput = (definition: CommerceToolDefinition) => ({\n contractVersion: ContractVersionSchema.value,\n definition: CommerceToolDefinitionSchema.parse(definition),\n});\n/** Publication adapters supply the actual highest published version from persistence. */\nexport function validateDefinitionVersion(\n proposed: string,\n highestPublished: string | null,\n) {\n SemverSchema.parse(proposed);\n if (highestPublished === null) return proposed === \"1.0.0\";\n SemverSchema.parse(highestPublished);\n return gt(proposed, highestPublished);\n}\nexport const CommerceToolIdentitySchema = z.strictObject({\n id: IdSchema,\n name: ToolNameSchema,\n enabled: z.boolean(),\n});\nexport const CommerceToolRevisionIdentitySchema = z.strictObject({\n toolId: IdSchema,\n toolRevisionId: IdSchema,\n definitionVersion: SemverSchema,\n contentHash: HashSchema,\n});\nexport const POLICY_OPERATION_DESCRIPTORS = POLICY_OPERATIONS.map(\n (operation) => ({ operation, operationVersion: \"1.0.0\" as const }),\n);\n","import { canonicalJson } from \"./canonical-json\";\n\n/** Bytes of PostgreSQL jsonb::text for JSON.stringify-serialized values.\n * jsonb adds spaces after separators and expands exponent-form JSON numbers.\n * Key ordering changes no byte counts. This is not the canonical hash encoder.\n */\nexport function definitionStorageBytes(value: unknown): number {\n const normalized: unknown = JSON.parse(canonicalJson(value));\n const bytes = (s: string) => new TextEncoder().encode(s).length;\n function size(v: unknown): number {\n if (typeof v === \"number\") {\n const text = JSON.stringify(v);\n if (!text.includes(\"e\")) return text.length;\n const [coefficient, exponent] = text.split(\"e\");\n const sign = coefficient.startsWith(\"-\") ? 1 : 0;\n const unsigned = coefficient.slice(sign);\n const digits = unsigned.replace(\".\", \"\").length;\n const point =\n (unsigned.indexOf(\".\") < 0 ? unsigned.length : unsigned.indexOf(\".\")) +\n Number(exponent);\n return (\n sign +\n (point <= 0 ? 2 - point + digits : point >= digits ? point : digits + 1)\n );\n }\n if (Array.isArray(v))\n return (\n 2 +\n Math.max(0, v.length - 1) * 2 +\n v.reduce((sum, item) => sum + size(item), 0)\n );\n if (v && typeof v === \"object\") {\n const entries = Object.entries(v);\n return (\n 2 +\n Math.max(0, entries.length - 1) * 2 +\n entries.reduce(\n (sum, [key, item]) =>\n sum + bytes(JSON.stringify(key)) + 2 + size(item),\n 0,\n )\n );\n }\n return bytes(JSON.stringify(v));\n }\n return size(normalized);\n}\nexport const definitionFitsStorage = (value: unknown): boolean => {\n try {\n return definitionStorageBytes(value) <= 65536;\n } catch {\n return false;\n }\n};\nexport const DEFINITION_SIZE_MESSAGE =\n \"Definition exceeds the 65536-byte jsonb text limit\";\n","import { z } from \"zod\";\nimport { IdSchema, LanguageSchema } from \"./primitives\";\nimport { DetailsSchemaSchema, compileSubset, type Json } from \"./subset\";\nimport {\n jsonBytes,\n responseContractCanonicalJson,\n type Digest,\n} from \"./canonical-json\";\nimport { canonicaliseLanguageTag } from \"../internationalization\";\nexport const CommerceResponseContractSchema = z\n .strictObject({\n version: z.literal(\"response.v1\"),\n instructions: z.string().min(1).max(8000),\n detailsSchema: DetailsSchemaSchema,\n })\n .refine((v) => jsonBytes(v) <= 32768);\nexport type CommerceResponseContract = z.infer<\n typeof CommerceResponseContractSchema\n>;\nexport const EMPTY_RESPONSE_CONTRACT: CommerceResponseContract = {\n version: \"response.v1\",\n instructions:\n \"Write a concise, natural WhatsApp reply supported by the available facts. Return an empty details object.\",\n detailsSchema: {\n type: \"object\",\n properties: {},\n required: [],\n additionalProperties: false,\n },\n};\nexport const ReferralReasonSchema = z.enum([\n \"INSUFFICIENT_TOOLS\",\n \"UNVERIFIABLE_FACTS\",\n \"TOOL_UNAVAILABLE\",\n \"TOOL_REVOKED\",\n]);\n\nconst DetectedLanguageTagSchema = z\n .string()\n .min(1)\n .max(128)\n .transform((value, ctx) => {\n const canonical = canonicaliseLanguageTag(value);\n\n if (!canonical) {\n ctx.addIssue({\n code: \"custom\",\n message: \"Invalid detected language tag\",\n });\n return z.NEVER;\n }\n\n return canonical;\n });\n\nexport const CommerceFinalResponseSchema = z\n .strictObject({\n answerKind: z.enum([\"ANSWER\", \"REFER_TO_STORE\"]),\n replyText: z.string().min(1).max(4096),\n referralReason: ReferralReasonSchema.nullable(),\n detectedLanguageTag: DetectedLanguageTagSchema.nullable(),\n detectedLanguageConfidence: z.number().min(0).max(1).nullable(),\n evidenceIds: z\n .array(IdSchema)\n .max(3)\n .refine((v) => new Set(v).size === v.length),\n details: z.record(z.string(), z.unknown()).refine((v) => {\n try {\n return jsonBytes(v) <= 16384;\n } catch {\n return false;\n }\n }),\n })\n .superRefine((value, ctx) => {\n\n if (value.answerKind === \"ANSWER\") {\n if (value.referralReason !== null) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"referralReason\"],\n message: \"ANSWER must not include a referral reason\",\n });\n }\n }\n\n if (value.answerKind === \"REFER_TO_STORE\") {\n if (value.referralReason === null) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"referralReason\"],\n message: \"REFER_TO_STORE requires a referral reason\",\n });\n }\n\n if (value.evidenceIds.length !== 0) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"evidenceIds\"],\n message: \"REFER_TO_STORE must not include evidence\",\n });\n }\n\n if (Object.keys(value.details).length !== 0) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"details\"],\n message: \"REFER_TO_STORE must not include details\",\n });\n }\n }\n });\nexport type CommerceFinalResponse = z.infer<typeof CommerceFinalResponseSchema>;\nexport function finalResponseSchema(definition: CommerceResponseContract) {\n const contract = CommerceResponseContractSchema.parse(definition);\n const details = compileSubset(contract.detailsSchema, \"details\");\n return CommerceFinalResponseSchema.refine(\n (v) =>\n v.answerKind === \"REFER_TO_STORE\" || details.safeParse(v.details).success,\n {\n path: [\"details\"],\n message: \"Details do not match pinned contract\",\n },\n );\n}\nexport function verifyResponseContract(\n definition: unknown,\n hash: string,\n digest: Digest,\n) {\n const parsed = CommerceResponseContractSchema.parse(definition);\n if (\n !/^[a-f0-9]{64}$/.test(hash) ||\n digest(responseContractCanonicalJson(parsed)) !== hash\n )\n throw new TypeError(\"Incompatible response contract\");\n return parsed;\n}\n/** JSON Schema branches retain the immutable envelope; only ANSWER details vary. */\nexport function finalResponseToolSchema(definition: CommerceResponseContract) {\n const contract = CommerceResponseContractSchema.parse(definition);\n const properties = {\n answerKind: { enum: [\"ANSWER\", \"REFER_TO_STORE\"] },\n replyText: { type: \"string\", minLength: 1, maxLength: 4096 },\n referralReason: {\n enum: [\n null,\n \"INSUFFICIENT_TOOLS\",\n \"UNVERIFIABLE_FACTS\",\n \"TOOL_UNAVAILABLE\",\n \"TOOL_REVOKED\",\n ],\n },\n detectedLanguageTag: { type: [\"string\", \"null\"], maxLength: 128 },\n detectedLanguageConfidence: {\n type: [\"number\", \"null\"],\n minimum: 0,\n maximum: 1,\n },\n evidenceIds: {\n type: \"array\",\n maxItems: 3,\n uniqueItems: true,\n items: { type: \"string\", maxLength: 128 },\n },\n details: { type: \"object\" },\n };\n return {\n type: \"object\",\n additionalProperties: false,\n properties,\n required: Object.keys(properties),\n allOf: [\n {\n oneOf: [\n {\n properties: {\n answerKind: { const: \"ANSWER\" },\n referralReason: { type: \"null\" },\n details: contract.detailsSchema,\n },\n },\n {\n properties: {\n answerKind: { const: \"REFER_TO_STORE\" },\n referralReason: { enum: ReferralReasonSchema.options },\n evidenceIds: { maxItems: 0 },\n details: {\n type: \"object\",\n properties: {},\n additionalProperties: false,\n },\n },\n },\n ],\n },\n {\n oneOf: [\n {\n properties: {\n detectedLanguageTag: { type: \"null\" },\n detectedLanguageConfidence: { type: \"null\" },\n },\n },\n {\n properties: {\n detectedLanguageTag: { type: \"string\" },\n detectedLanguageConfidence: { type: \"number\" },\n },\n },\n ],\n },\n ],\n } as unknown as Json;\n}\n","import { z } from \"zod\";\nimport { validRange } from \"semver\";\nimport {\n ContractVersionSchema as V,\n IdSchema as ID,\n SemverSchema,\n HashSchema,\n DateSchema,\n MoneySchema,\n CurrencySchema,\n distinct,\n boundedJson,\n} from \"./primitives\";\nimport { GrantedToolsSchema, ToolDescriptorSchema } from \"./definitions\";\nimport { CommerceResponseContractSchema } from \"./response\";\nimport { canonicalJson, jsonBytes } from \"./canonical-json\";\nexport const CommerceTurnIdentitySchema = z.strictObject({\n contractVersion: V,\n shopId: ID,\n checkoutRecoveryId: ID,\n conversationId: ID,\n inboundVersion: z.number().int().positive(),\n});\nexport type CommerceTurnIdentity = z.infer<typeof CommerceTurnIdentitySchema>;\nexport const CommerceConversationGrantSchema = z\n .strictObject({\n id: ID,\n shopId: ID,\n conversationId: ID,\n initialInboundVersion: z.number().int().positive(),\n releaseId: ID,\n selectedCapabilityKeys: z\n .array(ID)\n .max(32)\n .refine(distinct),\n grantedTools: GrantedToolsSchema,\n runnerVersion: SemverSchema,\n createdAt: DateSchema,\n expiresAt: DateSchema.nullable(),\n })\n .superRefine((v, c) => {\n if (v.expiresAt && Date.parse(v.expiresAt) <= Date.parse(v.createdAt))\n c.addIssue({ code: \"custom\", message: \"Invalid grant retention date\" });\n if (\n jsonBytes(v.grantedTools) > 65536 ||\n jsonBytes(v.selectedCapabilityKeys) > 8192 ||\n v.grantedTools.some((t) =>\n t.capabilityKeys.some((k) => !v.selectedCapabilityKeys.includes(k)),\n )\n )\n c.addIssue({ code: \"custom\", message: \"Unselected grant provenance\" });\n });\nexport type CommerceConversationGrant = z.infer<\n typeof CommerceConversationGrantSchema\n>;\nexport const CommerceManifestSchema = z\n .strictObject({\n contractVersion: V,\n releaseId: ID,\n runnerCompatibility: z\n .string()\n .min(1)\n .max(128)\n .refine((v) => !!validRange(v)),\n capabilities: z\n .array(\n z.strictObject({\n capabilityId: ID,\n key: ID,\n featureId: ID,\n position: z.number().int().nonnegative(),\n toolDescriptor: ToolDescriptorSchema,\n }),\n )\n .max(32),\n featureBehaviours: z\n .array(\n z.strictObject({\n featureId: ID,\n behaviourPrompt: z.string().max(32000),\n }),\n )\n .max(32),\n selectedCapabilityKeys: z.array(ID).max(32).refine(distinct),\n grantedTools: GrantedToolsSchema,\n responseContract: CommerceResponseContractSchema,\n responseContractHash: HashSchema,\n })\n .superRefine((v, c) => {\n if (jsonBytes(v) > 262144)\n c.addIssue({ code: \"custom\", message: \"Manifest exceeds output limit\" });\n const keys = v.capabilities.map((x) => x.key);\n const capabilityIds = v.capabilities.map((x) => x.capabilityId);\n const representedFeatures = [...new Set(v.capabilities.map((x) => x.featureId))];\n const behaviourFeatureIds = v.featureBehaviours.map((x) => x.featureId);\n if (\n !distinct(keys) ||\n !distinct(capabilityIds) ||\n JSON.stringify(keys) !== JSON.stringify(v.selectedCapabilityKeys) ||\n v.capabilities.some(\n (x, i) => i > 0 && x.position <= v.capabilities[i - 1].position,\n ) ||\n !distinct(behaviourFeatureIds) ||\n JSON.stringify(representedFeatures) !== JSON.stringify(behaviourFeatureIds)\n )\n c.addIssue({\n code: \"custom\",\n message: \"Invalid capability ordering/selection\",\n });\n const union = new Map<\n string,\n { tool: (typeof v.grantedTools)[number]; descriptor: string }\n >();\n for (const cap of v.capabilities) {\n const d = cap.toolDescriptor;\n const old = union.get(d.toolId);\n const descriptor = canonicalJson(d);\n if (old) {\n if (old.descriptor !== descriptor)\n c.addIssue({\n code: \"custom\",\n message: \"Conflicting tool revisions/descriptors\",\n });\n old.tool.capabilityKeys.push(cap.key);\n } else\n union.set(d.toolId, {\n descriptor,\n tool: {\n toolId: d.toolId,\n toolRevisionId: d.toolRevisionId,\n toolName: d.name,\n definitionVersion: d.definitionVersion,\n capabilityKeys: [cap.key],\n },\n });\n }\n if (\n union.size !== v.grantedTools.length ||\n v.grantedTools.some((t) => {\n const expected = union.get(t.toolId)?.tool;\n return (\n !expected ||\n expected.toolRevisionId !== t.toolRevisionId ||\n expected.toolName !== t.toolName ||\n expected.definitionVersion !== t.definitionVersion ||\n JSON.stringify([...new Set(expected.capabilityKeys)].sort()) !==\n JSON.stringify(t.capabilityKeys)\n );\n })\n )\n c.addIssue({\n code: \"custom\",\n message: \"Grant must equal selected capability set\",\n });\n });\nexport type CommerceManifest = z.infer<typeof CommerceManifestSchema>;\nexport const CommerceReleaseIdentitySchema = z.strictObject({\n contractVersion: V,\n releaseId: ID,\n runnerCompatibility: z\n .string()\n .min(1)\n .max(128)\n .refine((v) => !!validRange(v)),\n});\nexport const CommerceResolveAssertionSchema = CommerceTurnIdentitySchema.extend(\n { purpose: z.literal(\"resolve\") },\n);\nexport const CommerceExecuteAssertionSchema = CommerceTurnIdentitySchema.extend(\n { purpose: z.literal(\"execute\"), grantId: ID, releaseId: ID },\n);\nexport const CommerceAssertionSchema = z.discriminatedUnion(\"purpose\", [\n CommerceResolveAssertionSchema,\n CommerceExecuteAssertionSchema,\n]);\nconst qty = z.number().int().min(1).max(999);\nexport const CommerceProposalSchema = z\n .strictObject({\n operations: z\n .array(\n z.discriminatedUnion(\"kind\", [\n z.strictObject({\n kind: z.literal(\"ADD\"),\n variantId: ID,\n quantity: qty,\n }),\n z.strictObject({\n kind: z.literal(\"REPLACE\"),\n lineId: ID,\n variantId: ID,\n quantity: qty,\n }),\n ]),\n )\n .min(1)\n .max(3),\n })\n .refine((v) =>\n distinct(\n v.operations.flatMap((o) => (o.kind === \"REPLACE\" ? [o.lineId] : [])),\n ),\n );\nexport const CommerceBasketSchema = z\n .strictObject({\n basketId: ID,\n source: z.enum([\"RECOVERY_SNAPSHOT\", \"PROPOSED\"]),\n observedAt: DateSchema,\n currency: CurrencySchema.nullable(),\n lines: z\n .array(\n z.strictObject({\n lineId: ID,\n productId: ID.nullable(),\n variantId: ID.nullable(),\n quantity: qty.nullable(),\n unitPrice: MoneySchema.nullable(),\n }),\n )\n .max(100),\n fingerprint: HashSchema,\n unknownFields: z.array(z.string().min(1).max(256)).max(128),\n })\n .refine((v) => distinct(v.lines.map((line) => line.lineId)));\nexport const CommerceProductSaleEvidenceSchema = z.strictObject({\n regularPrice: MoneySchema.nullable(),\n salePrice: MoneySchema.nullable(),\n observedAt: DateSchema,\n});\nexport type CommerceProductSaleEvidence =\n z.infer<typeof CommerceProductSaleEvidenceSchema>;\n\nexport const CommerceProductSchema = z.strictObject({\n productId: ID,\n variantId: ID.nullable(),\n title: z.string().min(1).max(512),\n url: z\n .url({ protocol: /^https$/ })\n .refine((v) => {\n const u = new URL(v);\n return !u.username && !u.password && !u.port;\n })\n .nullable(),\n available: z.boolean().nullable(),\n unitPrice: MoneySchema.nullable(),\n currency: CurrencySchema.nullable(),\n productType: z.string().max(512).nullable(),\n vendor: z.string().max(512).nullable(),\n categories: z.array(z.string()).optional(),\n categoryIds: z.array(ID).max(128).optional(),\n collectionIds: z.array(ID).max(128).optional(),\n imageUrl: z.string().nullable().optional(),\n saleEvidence: CommerceProductSaleEvidenceSchema.nullable().optional(),\n observedAt: DateSchema,\n});\nexport const CommerceOfferSchema = z\n .strictObject({\n offerId: ID,\n title: z.string().min(1).max(512),\n method: z.enum([\"AUTOMATIC\", \"CODE\"]),\n code: z.string().min(1).max(128).nullable(),\n startsAt: DateSchema.nullable(),\n endsAt: DateSchema.nullable(),\n support: z.enum([\"SUPPORTED\", \"UNSUPPORTED\", \"UNKNOWN\"]),\n reasonCodes: z.array(z.string().min(1).max(64)).max(16),\n })\n .refine(\n (v) =>\n (v.startsAt === null ||\n v.endsAt === null ||\n Date.parse(v.startsAt) < Date.parse(v.endsAt)) &&\n (v.method !== \"AUTOMATIC\" || v.code === null),\n );\nexport const CommerceDiscountConditionFactsSchema = z.strictObject({\n provider: z.enum([\"SHOPIFY\", \"WOOCOMMERCE\"]),\n completeness: z.enum([\"COMPLETE\", \"PARTIAL\", \"UNKNOWN\"]),\n observedAt: DateSchema,\n providerStatus: z.string().max(64),\n unavailableAt: DateSchema.nullable(),\n discountKind: z.enum([\n \"PERCENTAGE\",\n \"FIXED_AMOUNT\",\n \"FREE_SHIPPING\",\n \"BUY_X_GET_Y\",\n \"OTHER\",\n \"UNKNOWN\",\n ]),\n discountValue: MoneySchema.nullable(),\n discountCurrency: CurrencySchema.nullable(),\n targeting: z.strictObject({\n kind: z.enum([\n \"ALL\",\n \"PRODUCTS\",\n \"VARIANTS\",\n \"CATEGORIES\",\n \"COLLECTIONS\",\n \"MIXED\",\n \"UNKNOWN\",\n ]),\n includedProductIds: z.array(ID).max(128),\n includedVariantIds: z.array(ID).max(128),\n includedCategoryIds: z.array(ID).max(128),\n includedCollectionIds: z.array(ID).max(128),\n excludedProductIds: z.array(ID).max(128),\n excludedVariantIds: z.array(ID).max(128),\n excludedCategoryIds: z.array(ID).max(128),\n excludedCollectionIds: z.array(ID).max(128),\n }),\n minimumSubtotal: MoneySchema.nullable(),\n maximumSubtotal: MoneySchema.nullable(),\n minimumQuantity: z.number().int().nonnegative().nullable(),\n usageLimit: z.number().int().nonnegative().nullable(),\n usageCount: z.number().int().nonnegative().nullable(),\n perCustomerLimit: z.number().int().nonnegative().nullable(),\n customerScope: z.enum([\"ALL\", \"RESTRICTED\", \"UNKNOWN\"]),\n excludesSaleItems: z.boolean().nullable(),\n individualUse: z.boolean().nullable(),\n unrepresentedConditions: z.array(z.string().min(1).max(128)).max(24),\n});\nexport type CommerceDiscountConditionFacts = z.infer<\n typeof CommerceDiscountConditionFactsSchema\n>;\nexport const CommerceDiscountDetailsSchema = z.strictObject({\n offer: CommerceOfferSchema,\n facts: CommerceDiscountConditionFactsSchema,\n});\nexport type CommerceDiscountDetails = z.infer<\n typeof CommerceDiscountDetailsSchema\n>;\nconst condition = z.strictObject({\n code: z.string().min(1).max(64),\n description: z.string().max(256),\n});\nexport const CommerceEvidenceSchema = z\n .strictObject({\n evidenceId: HashSchema,\n turn: CommerceTurnIdentitySchema,\n grantId: ID,\n releaseId: ID,\n offerId: ID,\n proposal: CommerceProposalSchema.nullable(),\n basketFingerprint: HashSchema,\n ruleFingerprint: HashSchema,\n evaluatedAt: DateSchema,\n expiresAt: DateSchema,\n outcome: z.enum([\n \"QUALIFIES_FOR_KNOWN_RULES\",\n \"DOES_NOT_QUALIFY\",\n \"UNKNOWN\",\n \"UNSUPPORTED\",\n ]),\n currency: CurrencySchema.nullable(),\n savings: MoneySchema.nullable(),\n resultingTotal: MoneySchema.nullable(),\n evaluatedConditions: z.array(condition).max(32),\n unresolvedConditions: z.array(condition).max(32),\n })\n .superRefine((v, c) => {\n if (Date.parse(v.expiresAt) - Date.parse(v.evaluatedAt) > 60000)\n c.addIssue({\n code: \"custom\",\n message: \"Evidence lifetime exceeds ceiling\",\n });\n if (\n v.outcome === \"QUALIFIES_FOR_KNOWN_RULES\" &&\n (v.unresolvedConditions.length ||\n Date.parse(v.expiresAt) <= Date.parse(v.evaluatedAt) ||\n v.currency === null ||\n v.savings === null ||\n v.resultingTotal === null)\n )\n c.addIssue({ code: \"custom\", message: \"Unsupported qualifying claim\" });\n });\nexport type CommerceEvidence = z.infer<typeof CommerceEvidenceSchema>;\nexport const CommerceAlternativeSchema = z\n .strictObject({\n product: CommerceProductSchema,\n proposal: CommerceProposalSchema,\n extraSpend: MoneySchema.nullable(),\n resultingTotal: MoneySchema.nullable(),\n currency: CurrencySchema.nullable(),\n evidence: CommerceEvidenceSchema.nullable(),\n similarityReasons: z.array(z.string().max(256)).max(3),\n })\n .refine((v) => v.product.available === true);\nexport const CommerceErrorCodeSchema = z.enum([\n \"INVALID_INPUT\",\n \"DENIED\",\n \"STALE_TURN\",\n \"NOT_FOUND\",\n \"UNAVAILABLE\",\n \"THROTTLED\",\n \"DEADLINE\",\n \"INCOMPATIBLE_VERSION\",\n]);\nexport function commerceToolResultSchema<T extends z.ZodType>(data: T) {\n return z.union([\n z.strictObject({\n contractVersion: V,\n status: z.literal(\"OK\"),\n data,\n renderedText: z.string().max(4096),\n }),\n z.strictObject({\n contractVersion: V,\n status: z.literal(\"ERROR\"),\n code: CommerceErrorCodeSchema,\n retryable: z.boolean(),\n renderedText: z.string().max(4096).optional(),\n }),\n ]);\n}\nexport const CommerceToolResultSchema = commerceToolResultSchema(\n boundedJson(262144),\n);\nexport type CommerceToolResult = z.infer<typeof CommerceToolResultSchema>;\nconst limit = z.number().int().min(1).max(3).default(3);\nexport const CommerceToolInputs = {\n commerce_get_basket: z.strictObject({}),\n commerce_search_products: z.strictObject({\n query: z.string().min(1).max(200),\n maximumPrice: MoneySchema.optional(),\n availableOnly: z.boolean().default(true),\n limit: z.number().int().min(1).max(20).default(10),\n cursor: z.string().max(2048).nullable().default(null),\n }),\n commerce_get_product: z.strictObject({\n productId: ID,\n variantId: ID.nullable(),\n }),\n commerce_get_discount_options: z.strictObject({\n limit: z.number().int().min(1).max(50).default(20),\n cursor: z.string().max(2048).nullable().default(null),\n }),\n commerce_get_discount_details: z.strictObject({ offerId: ID }),\n commerce_evaluate_discount: z.strictObject({\n offerId: ID,\n proposal: CommerceProposalSchema.nullable(),\n }),\n commerce_find_qualifying_products: z.strictObject({\n offerId: ID,\n query: z.string().min(1).max(200).nullable(),\n limit,\n }),\n commerce_find_similar_products: z.strictObject({\n variantId: ID,\n offerId: ID.nullable(),\n limit,\n }),\n};\nconst alternatives = z.strictObject({\n alternatives: z.array(CommerceAlternativeSchema).max(3),\n truncated: z.boolean(),\n});\nexport const CommerceToolOutputs = {\n commerce_get_basket: CommerceBasketSchema,\n commerce_search_products: z.strictObject({\n products: z.array(CommerceProductSchema).max(20),\n cursor: z.string().max(2048).nullable(),\n truncated: z.boolean(),\n }),\n commerce_get_product: z.strictObject({\n product: CommerceProductSchema.nullable(),\n }),\n commerce_get_discount_options: z.strictObject({\n mode: z.enum([\"NONE\", \"FIXED\", \"AI_BEST_APPLICABLE\"]),\n offers: z.array(CommerceOfferSchema).max(50),\n truncated: z.boolean(),\n cursor: z.string().max(2048).nullable().optional(),\n }),\n commerce_get_discount_details: z.strictObject({\n details: CommerceDiscountDetailsSchema.nullable(),\n }),\n commerce_evaluate_discount: CommerceEvidenceSchema,\n commerce_find_qualifying_products: alternatives,\n commerce_find_similar_products: alternatives,\n};\nexport function productBelongsToDomain(\n product: z.infer<typeof CommerceProductSchema>,\n verifiedDomain: string,\n) {\n try {\n return (\n product.url === null || new URL(product.url).hostname === verifiedDomain\n );\n } catch {\n return false;\n }\n}\n"],"mappings":"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","names":["z","z","z","z","mapping","z","z","z","z"]}
|
package/dist/commerce/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as CommerceConversationGrant, T as ToolDescriptor, G as GrantedTool, b as CommerceManifest, S as SubsetSchema, e as CommerceToolDefinition, d as CommerceFinalResponse, D as Digest, C as CommerceTurnIdentity } from '../response-
|
|
2
|
-
export { f as CommerceAlternativeSchema, g as CommerceAssertionSchema, h as CommerceBasketSchema, i as CommerceConversationGrantSchema, j as CommerceDefinitionCompiler, k as
|
|
1
|
+
import { a as CommerceConversationGrant, T as ToolDescriptor, G as GrantedTool, b as CommerceManifest, S as SubsetSchema, e as CommerceToolDefinition, d as CommerceFinalResponse, D as Digest, C as CommerceTurnIdentity } from '../response-C6-kYOel.js';
|
|
2
|
+
export { f as CommerceAlternativeSchema, g as CommerceAssertionSchema, h as CommerceBasketSchema, i as CommerceConversationGrantSchema, j as CommerceDefinitionCompiler, k as CommerceDiscountConditionFacts, l as CommerceDiscountConditionFactsSchema, m as CommerceDiscountDetails, n as CommerceDiscountDetailsSchema, o as CommerceErrorCodeSchema, p as CommerceEvidence, q as CommerceEvidenceSchema, r as CommerceExecuteAssertionSchema, s as CommerceExecutionSchema, t as CommerceFinalResponseSchema, u as CommerceManifestSchema, v as CommerceOfferSchema, w as CommerceProductSaleEvidence, x as CommerceProductSaleEvidenceSchema, y as CommerceProductSchema, z as CommerceProposalSchema, A as CommerceReleaseIdentitySchema, B as CommerceResolveAssertionSchema, E as CommerceResponseContract, F as CommerceResponseContractSchema, H as CommerceToolDefinitionSchema, I as CommerceToolDraftDefinition, J as CommerceToolDraftDefinitionSchema, K as CommerceToolIdentitySchema, L as CommerceToolInputs, M as CommerceToolOutputs, c as CommerceToolResult, N as CommerceToolResultSchema, O as CommerceToolRevisionIdentitySchema, P as CommerceTurnIdentitySchema, Q as DetailsSchemaSchema, R as EMPTY_RESPONSE_CONTRACT, U as ExternalHttpExecution, V as ExternalHttpExecutionSchema, W as GrantedToolSchema, X as GrantedToolsSchema, Y as InputSchemaSchema, Z as Json, _ as MONEY_PATTERN, $ as POLICY_OPERATIONS, a0 as POLICY_OPERATION_DESCRIPTORS, a1 as ReferralReasonSchema, a2 as ResponseTemplateSchema, a3 as ToolDescriptorSchema, a4 as ToolNameSchema, a5 as canonicalJson, a6 as commerceToolResultSchema, a7 as compileSubset, a8 as definitionToMcpDescriptor, a9 as finalResponseSchema, aa as finalResponseToolSchema, ab as jsonBytes, ac as mapToolArguments, ad as matchesSubset, ae as productBelongsToDomain, af as responseContractCanonicalJson, ag as safeName, ah as safePath, ai as toolHashInput, aj as validateDefinitionForPublication, ak as validateDefinitionVersion, al as validateSubset, am as verifyResponseContract } from '../response-C6-kYOel.js';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
|
|
5
5
|
declare const ContractVersionSchema: z.ZodLiteral<"commerce.v1">;
|
|
@@ -422,6 +422,13 @@ declare function renderStoreCategoryPromptTemplate(input: {
|
|
|
422
422
|
context: StoreCategoryPromptContext;
|
|
423
423
|
}): StoreCategoryPromptRenderResult;
|
|
424
424
|
|
|
425
|
+
declare const CommerceOutreachToolContextSchema: z.ZodObject<{
|
|
426
|
+
purpose: z.ZodLiteral<"INITIAL_RECOVERY_OUTREACH">;
|
|
427
|
+
checkoutRecoveryId: z.ZodString;
|
|
428
|
+
outreachAttemptId: z.ZodString;
|
|
429
|
+
}, z.core.$strict>;
|
|
430
|
+
type CommerceOutreachToolContext = z.infer<typeof CommerceOutreachToolContextSchema>;
|
|
431
|
+
|
|
425
432
|
/** Synthetic examples; no provider identity, schema artifact or publication claim. */
|
|
426
433
|
|
|
427
434
|
declare const exampleTool: ToolDescriptor;
|
|
@@ -431,4 +438,4 @@ declare function exampleManifest(digest: Digest, withTool?: boolean): CommerceMa
|
|
|
431
438
|
declare function exampleGrant(manifest: CommerceManifest): CommerceConversationGrant;
|
|
432
439
|
declare const exampleFinal: CommerceFinalResponse;
|
|
433
440
|
|
|
434
|
-
export { type CodeResponseProcessorInput, type CodeResponseProcessorResult, CommerceConversationGrant, CommerceFinalResponse, CommerceManifest, CommerceToolDefinition, CommerceTurnIdentity, type ConnectionCommand, ConnectionCommandSchema, ConnectionIssueSchema, type ConnectionResult, ConnectionResultSchema, type ConnectionRevisionView, ConnectionRevisionViewSchema, type ConnectionView, ConnectionViewSchema, ContractVersionSchema, type CredentialStatus, CredentialStatusSchema, CurrencySchema, DateSchema, Digest, type ExternalHttpResultData, ExternalHttpResultDataSchema, ExternalPathSchema, ExternalQueryMappingSchema, ExternalQueryMappingsSchema, ExternalQueryValueSchema, type ExternalResponseFormat, ExternalResponseFormatSchema, type FeatureFacts, type FieldProjection, FieldProjectionSchema, GrantedTool, HashSchema, IdSchema, LanguageSchema, MAX_STORE_CATEGORY_PROMPT_CONDITIONS, MAX_STORE_CATEGORY_PROMPT_RENDERED_CHARS, MAX_STORE_CATEGORY_PROMPT_SOURCE_CHARS, MoneySchema, type ResponseFilter, ResponseFilterSchema, type ResponseProcessing, ResponseProcessingSchema, type RevisionInput, RevisionInputSchema, STORE_CATEGORY_PROMPT_RUNTIME_VERSION, SemverSchema, type StoreCategoryPromptConditionKey, StoreCategoryPromptConditionKeySchema, type StoreCategoryPromptContext, StoreCategoryPromptContextSchema, type StoreCategoryPromptRenderResult, type StoreCategoryPromptTemplateIssue, type StoreCategoryPromptTemplateValidation, SubsetSchema, ToolDescriptor, type TransformResponse, TransformResponseSchema, type TransformSample, TransformSampleSchema, type VisualResponseProcessing, VisualResponseProcessingSchema, type VisualResponseProcessorInput, type VisualResponseProcessorResult, boundedJson, createStoreCategoryPromptConditionBlock, createStoreCategoryPromptContext, currentlyGrantedTools, deduplicateTools, distinct, exampleDefinition, exampleFinal, exampleGrant, exampleManifest, exampleTool, exampleTurn, manifestMatchesGrant, parseCommerceManifest, renderStoreCategoryPromptTemplate, selectCapabilities, validateStoreCategoryPromptTemplate };
|
|
441
|
+
export { type CodeResponseProcessorInput, type CodeResponseProcessorResult, CommerceConversationGrant, CommerceFinalResponse, CommerceManifest, type CommerceOutreachToolContext, CommerceOutreachToolContextSchema, CommerceToolDefinition, CommerceTurnIdentity, type ConnectionCommand, ConnectionCommandSchema, ConnectionIssueSchema, type ConnectionResult, ConnectionResultSchema, type ConnectionRevisionView, ConnectionRevisionViewSchema, type ConnectionView, ConnectionViewSchema, ContractVersionSchema, type CredentialStatus, CredentialStatusSchema, CurrencySchema, DateSchema, Digest, type ExternalHttpResultData, ExternalHttpResultDataSchema, ExternalPathSchema, ExternalQueryMappingSchema, ExternalQueryMappingsSchema, ExternalQueryValueSchema, type ExternalResponseFormat, ExternalResponseFormatSchema, type FeatureFacts, type FieldProjection, FieldProjectionSchema, GrantedTool, HashSchema, IdSchema, LanguageSchema, MAX_STORE_CATEGORY_PROMPT_CONDITIONS, MAX_STORE_CATEGORY_PROMPT_RENDERED_CHARS, MAX_STORE_CATEGORY_PROMPT_SOURCE_CHARS, MoneySchema, type ResponseFilter, ResponseFilterSchema, type ResponseProcessing, ResponseProcessingSchema, type RevisionInput, RevisionInputSchema, STORE_CATEGORY_PROMPT_RUNTIME_VERSION, SemverSchema, type StoreCategoryPromptConditionKey, StoreCategoryPromptConditionKeySchema, type StoreCategoryPromptContext, StoreCategoryPromptContextSchema, type StoreCategoryPromptRenderResult, type StoreCategoryPromptTemplateIssue, type StoreCategoryPromptTemplateValidation, SubsetSchema, ToolDescriptor, type TransformResponse, TransformResponseSchema, type TransformSample, TransformSampleSchema, type VisualResponseProcessing, VisualResponseProcessingSchema, type VisualResponseProcessorInput, type VisualResponseProcessorResult, boundedJson, createStoreCategoryPromptConditionBlock, createStoreCategoryPromptContext, currentlyGrantedTools, deduplicateTools, distinct, exampleDefinition, exampleFinal, exampleGrant, exampleManifest, exampleTool, exampleTurn, manifestMatchesGrant, parseCommerceManifest, renderStoreCategoryPromptTemplate, selectCapabilities, validateStoreCategoryPromptTemplate };
|
package/dist/commerce/index.js
CHANGED
|
@@ -4,12 +4,14 @@ import {
|
|
|
4
4
|
manifestMatchesGrant,
|
|
5
5
|
parseCommerceManifest,
|
|
6
6
|
selectCapabilities
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-FOM6C3JF.js";
|
|
8
8
|
import {
|
|
9
9
|
CommerceAlternativeSchema,
|
|
10
10
|
CommerceAssertionSchema,
|
|
11
11
|
CommerceBasketSchema,
|
|
12
12
|
CommerceConversationGrantSchema,
|
|
13
|
+
CommerceDiscountConditionFactsSchema,
|
|
14
|
+
CommerceDiscountDetailsSchema,
|
|
13
15
|
CommerceErrorCodeSchema,
|
|
14
16
|
CommerceEvidenceSchema,
|
|
15
17
|
CommerceExecuteAssertionSchema,
|
|
@@ -17,6 +19,7 @@ import {
|
|
|
17
19
|
CommerceFinalResponseSchema,
|
|
18
20
|
CommerceManifestSchema,
|
|
19
21
|
CommerceOfferSchema,
|
|
22
|
+
CommerceProductSaleEvidenceSchema,
|
|
20
23
|
CommerceProductSchema,
|
|
21
24
|
CommerceProposalSchema,
|
|
22
25
|
CommerceReleaseIdentitySchema,
|
|
@@ -35,10 +38,7 @@ import {
|
|
|
35
38
|
ConnectionResultSchema,
|
|
36
39
|
ConnectionRevisionViewSchema,
|
|
37
40
|
ConnectionViewSchema,
|
|
38
|
-
ContractVersionSchema,
|
|
39
41
|
CredentialStatusSchema,
|
|
40
|
-
CurrencySchema,
|
|
41
|
-
DateSchema,
|
|
42
42
|
DetailsSchemaSchema,
|
|
43
43
|
EMPTY_RESPONSE_CONTRACT,
|
|
44
44
|
ExternalHttpExecutionSchema,
|
|
@@ -51,12 +51,8 @@ import {
|
|
|
51
51
|
FieldProjectionSchema,
|
|
52
52
|
GrantedToolSchema,
|
|
53
53
|
GrantedToolsSchema,
|
|
54
|
-
HashSchema,
|
|
55
|
-
IdSchema,
|
|
56
54
|
InputSchemaSchema,
|
|
57
|
-
LanguageSchema,
|
|
58
55
|
MONEY_PATTERN,
|
|
59
|
-
MoneySchema,
|
|
60
56
|
POLICY_OPERATIONS,
|
|
61
57
|
POLICY_OPERATION_DESCRIPTORS,
|
|
62
58
|
ReferralReasonSchema,
|
|
@@ -64,17 +60,14 @@ import {
|
|
|
64
60
|
ResponseProcessingSchema,
|
|
65
61
|
ResponseTemplateSchema,
|
|
66
62
|
RevisionInputSchema,
|
|
67
|
-
SemverSchema,
|
|
68
63
|
ToolDescriptorSchema,
|
|
69
64
|
ToolNameSchema,
|
|
70
65
|
TransformResponseSchema,
|
|
71
66
|
TransformSampleSchema,
|
|
72
67
|
VisualResponseProcessingSchema,
|
|
73
|
-
boundedJson,
|
|
74
68
|
commerceToolResultSchema,
|
|
75
69
|
compileSubset,
|
|
76
70
|
definitionToMcpDescriptor,
|
|
77
|
-
distinct,
|
|
78
71
|
finalResponseSchema,
|
|
79
72
|
finalResponseToolSchema,
|
|
80
73
|
mapToolArguments,
|
|
@@ -87,7 +80,19 @@ import {
|
|
|
87
80
|
validateDefinitionVersion,
|
|
88
81
|
validateSubset,
|
|
89
82
|
verifyResponseContract
|
|
90
|
-
} from "../chunk-
|
|
83
|
+
} from "../chunk-XTKCNFLQ.js";
|
|
84
|
+
import {
|
|
85
|
+
ContractVersionSchema,
|
|
86
|
+
CurrencySchema,
|
|
87
|
+
DateSchema,
|
|
88
|
+
HashSchema,
|
|
89
|
+
IdSchema,
|
|
90
|
+
LanguageSchema,
|
|
91
|
+
MoneySchema,
|
|
92
|
+
SemverSchema,
|
|
93
|
+
boundedJson,
|
|
94
|
+
distinct
|
|
95
|
+
} from "../chunk-QVPEX7KY.js";
|
|
91
96
|
import {
|
|
92
97
|
canonicalJson,
|
|
93
98
|
jsonBytes,
|
|
@@ -473,6 +478,14 @@ function renderStoreCategoryPromptTemplate(input) {
|
|
|
473
478
|
return { ok: true, promptText: output, referencedConditionKeys: validation.referencedConditionKeys };
|
|
474
479
|
}
|
|
475
480
|
|
|
481
|
+
// src/commerce/outreach-context.ts
|
|
482
|
+
import { z as z2 } from "zod";
|
|
483
|
+
var CommerceOutreachToolContextSchema = z2.strictObject({
|
|
484
|
+
purpose: z2.literal("INITIAL_RECOVERY_OUTREACH"),
|
|
485
|
+
checkoutRecoveryId: IdSchema,
|
|
486
|
+
outreachAttemptId: IdSchema
|
|
487
|
+
});
|
|
488
|
+
|
|
476
489
|
// src/commerce/fixtures.ts
|
|
477
490
|
var exampleTool = {
|
|
478
491
|
toolId: "tool-fixture",
|
|
@@ -573,6 +586,8 @@ export {
|
|
|
573
586
|
CommerceAssertionSchema,
|
|
574
587
|
CommerceBasketSchema,
|
|
575
588
|
CommerceConversationGrantSchema,
|
|
589
|
+
CommerceDiscountConditionFactsSchema,
|
|
590
|
+
CommerceDiscountDetailsSchema,
|
|
576
591
|
CommerceErrorCodeSchema,
|
|
577
592
|
CommerceEvidenceSchema,
|
|
578
593
|
CommerceExecuteAssertionSchema,
|
|
@@ -580,6 +595,8 @@ export {
|
|
|
580
595
|
CommerceFinalResponseSchema,
|
|
581
596
|
CommerceManifestSchema,
|
|
582
597
|
CommerceOfferSchema,
|
|
598
|
+
CommerceOutreachToolContextSchema,
|
|
599
|
+
CommerceProductSaleEvidenceSchema,
|
|
583
600
|
CommerceProductSchema,
|
|
584
601
|
CommerceProposalSchema,
|
|
585
602
|
CommerceReleaseIdentitySchema,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commerce/store-category-prompt.ts","../../src/commerce/fixtures.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const STORE_CATEGORY_PROMPT_RUNTIME_VERSION = \"store-category-prompt.v1\" as const;\nexport const MAX_STORE_CATEGORY_PROMPT_SOURCE_CHARS = 100_000;\nexport const MAX_STORE_CATEGORY_PROMPT_RENDERED_CHARS = 100_000;\nexport const MAX_STORE_CATEGORY_PROMPT_CONDITIONS = 256;\nconst MAX_CONTROL_TAGS = 512;\nconst MAX_CONTROL_DEPTH = 8;\nconst MAX_EXPRESSION_CHARS = 1_024;\n\nconst forbiddenConditionKeys = new Set([\"__proto__\", \"prototype\", \"constructor\"]);\nconst conditionKeyPattern = /^[a-z][a-z0-9_]{0,127}$/;\n\nexport const StoreCategoryPromptConditionKeySchema = z\n .string()\n .regex(conditionKeyPattern)\n .refine((value) => !forbiddenConditionKeys.has(value));\n\nexport type StoreCategoryPromptConditionKey = z.infer<typeof StoreCategoryPromptConditionKeySchema>;\n\nexport const StoreCategoryPromptContextSchema = z.strictObject({\n mappings: z\n .record(StoreCategoryPromptConditionKeySchema, z.boolean())\n .refine((value) => Object.keys(value).length <= MAX_STORE_CATEGORY_PROMPT_CONDITIONS),\n});\n\nexport type StoreCategoryPromptContext = z.infer<typeof StoreCategoryPromptContextSchema>;\n\nexport type StoreCategoryPromptTemplateIssue = {\n path: \"/promptText\";\n code:\n | \"invalid_prompt_source\"\n | \"unsupported_template_construct\"\n | \"invalid_template_structure\"\n | \"invalid_template_expression\"\n | \"invalid_mapping_condition\"\n | \"unknown_mapping_condition\"\n | \"template_too_complex\"\n | \"rendered_prompt_too_large\";\n message: string;\n};\n\nexport type StoreCategoryPromptTemplateValidation = {\n valid: boolean;\n issues: StoreCategoryPromptTemplateIssue[];\n referencedConditionKeys: string[];\n};\n\nexport type StoreCategoryPromptRenderResult =\n | { ok: true; promptText: string; referencedConditionKeys: string[] }\n | { ok: false; issues: StoreCategoryPromptTemplateIssue[] };\n\ntype ExpressionNode =\n | { kind: \"condition\"; key: string }\n | { kind: \"not\"; operand: ExpressionNode }\n | { kind: \"and\"; left: ExpressionNode; right: ExpressionNode }\n | { kind: \"or\"; left: ExpressionNode; right: ExpressionNode };\n\ntype TemplateNode =\n | { kind: \"text\"; text: string }\n | {\n kind: \"if\";\n branches: Array<{ expression: ExpressionNode; body: TemplateNode[] }>;\n elseBody: TemplateNode[] | null;\n };\n\ntype TemplateToken =\n | { kind: \"text\"; text: string }\n | { kind: \"control\"; source: string }\n | { kind: \"unsupported\"; source: string; marker: \"interpolation\" | \"comment\" };\n\ntype CompileResult = {\n issues: StoreCategoryPromptTemplateIssue[];\n nodes: TemplateNode[];\n referencedConditionKeys: string[];\n};\n\nfunction issue(code: StoreCategoryPromptTemplateIssue[\"code\"], message: string): StoreCategoryPromptTemplateIssue {\n return { path: \"/promptText\", code, message };\n}\n\nfunction boundedIssues(issues: StoreCategoryPromptTemplateIssue[]): StoreCategoryPromptTemplateIssue[] {\n return issues.slice(0, 32).map((entry) => ({\n path: entry.path,\n code: entry.code,\n message: entry.message.slice(0, 512),\n }));\n}\n\nfunction sourceLength(value: string): number {\n return Array.from(value).length;\n}\n\nfunction findNextMarker(source: string, start: number): { index: number; marker: \"{%\" | \"{{\" | \"{#\" } | null {\n let best: { index: number; marker: \"{%\" | \"{{\" | \"{#\" } | null = null;\n for (const marker of [\"{%\", \"{{\", \"{#\"] as const) {\n const index = source.indexOf(marker, start);\n if (index >= 0 && (!best || index < best.index)) best = { index, marker };\n }\n return best;\n}\n\nfunction tokenizeTemplate(source: string, issues: StoreCategoryPromptTemplateIssue[]): TemplateToken[] {\n const tokens: TemplateToken[] = [];\n let cursor = 0;\n while (cursor < source.length) {\n const next = findNextMarker(source, cursor);\n if (!next) {\n tokens.push({ kind: \"text\", text: source.slice(cursor) });\n break;\n }\n if (next.index > cursor) tokens.push({ kind: \"text\", text: source.slice(cursor, next.index) });\n const closeMarker = next.marker === \"{%\" ? \"%}\" : next.marker === \"{{\" ? \"}}\" : \"#}\";\n const close = source.indexOf(closeMarker, next.index + 2);\n if (close < 0) {\n issues.push(issue(\"invalid_template_structure\", `Unclosed ${next.marker} template construct.`));\n tokens.push({ kind: \"text\", text: source.slice(next.index) });\n break;\n }\n const raw = source.slice(next.index + 2, close).trim();\n if (next.marker === \"{%\") tokens.push({ kind: \"control\", source: raw });\n else tokens.push({ kind: \"unsupported\", source: raw, marker: next.marker === \"{{\" ? \"interpolation\" : \"comment\" });\n cursor = close + 2;\n }\n if (source.length === 0) tokens.push({ kind: \"text\", text: \"\" });\n return tokens;\n}\n\ntype ExprToken = { kind: \"word\"; value: string } | { kind: \"dot\" } | { kind: \"lparen\" } | { kind: \"rparen\" };\n\nfunction lexExpression(source: string, issues: StoreCategoryPromptTemplateIssue[]): ExprToken[] | null {\n if (sourceLength(source) > MAX_EXPRESSION_CHARS) {\n issues.push(issue(\"template_too_complex\", `Conditional expressions must not exceed ${MAX_EXPRESSION_CHARS} characters.`));\n return null;\n }\n const tokens: ExprToken[] = [];\n let cursor = 0;\n while (cursor < source.length) {\n const char = source[cursor];\n if (/\\s/.test(char)) {\n cursor += 1;\n continue;\n }\n if (char === \".\") {\n tokens.push({ kind: \"dot\" });\n cursor += 1;\n continue;\n }\n if (char === \"(\") {\n tokens.push({ kind: \"lparen\" });\n cursor += 1;\n continue;\n }\n if (char === \")\") {\n tokens.push({ kind: \"rparen\" });\n cursor += 1;\n continue;\n }\n const match = /^[A-Za-z_][A-Za-z0-9_]*/.exec(source.slice(cursor));\n if (!match) {\n issues.push(issue(\"invalid_template_expression\", \"Conditional expressions may only use mappings.<conditionKey>, not, and, or, and parentheses.\"));\n return null;\n }\n tokens.push({ kind: \"word\", value: match[0] });\n cursor += match[0].length;\n }\n return tokens;\n}\n\nfunction parseExpression(source: string, issues: StoreCategoryPromptTemplateIssue[], referenced: string[]): ExpressionNode | null {\n const tokens = lexExpression(source, issues);\n if (!tokens || tokens.length === 0) {\n if (tokens?.length === 0) issues.push(issue(\"invalid_template_expression\", \"A conditional expression is required.\"));\n return null;\n }\n let index = 0;\n const peekWord = (word: string) => {\n const token = tokens[index];\n return token?.kind === \"word\" && token.value === word;\n };\n\n const parsePrimary = (): ExpressionNode | null => {\n const token = tokens[index];\n if (token?.kind === \"lparen\") {\n index += 1;\n const inner = parseOr();\n if (tokens[index]?.kind !== \"rparen\") {\n issues.push(issue(\"invalid_template_expression\", \"Conditional expression parentheses are unbalanced.\"));\n return null;\n }\n index += 1;\n return inner;\n }\n if (!peekWord(\"mappings\")) {\n issues.push(issue(\"invalid_template_expression\", \"Conditional expressions must reference mappings.<conditionKey>.\"));\n return null;\n }\n index += 1;\n if (tokens[index]?.kind !== \"dot\") {\n issues.push(issue(\"invalid_template_expression\", \"Mapping conditions must use mappings.<conditionKey>.\"));\n return null;\n }\n index += 1;\n const keyToken = tokens[index];\n if (keyToken?.kind !== \"word\") {\n issues.push(issue(\"invalid_mapping_condition\", \"A valid mapping condition key is required after mappings.\"));\n return null;\n }\n index += 1;\n if (!StoreCategoryPromptConditionKeySchema.safeParse(keyToken.value).success) {\n issues.push(issue(\"invalid_mapping_condition\", `Invalid mapping condition key: ${keyToken.value}.`));\n return null;\n }\n if (!referenced.includes(keyToken.value)) referenced.push(keyToken.value);\n return { kind: \"condition\", key: keyToken.value };\n };\n\n const parseNot = (): ExpressionNode | null => {\n if (peekWord(\"not\")) {\n index += 1;\n const operand = parseNot();\n return operand ? { kind: \"not\", operand } : null;\n }\n return parsePrimary();\n };\n\n const parseAnd = (): ExpressionNode | null => {\n let left = parseNot();\n while (left && peekWord(\"and\")) {\n index += 1;\n const right = parseNot();\n if (!right) return null;\n left = { kind: \"and\", left, right };\n }\n return left;\n };\n\n const parseOr = (): ExpressionNode | null => {\n let left = parseAnd();\n while (left && peekWord(\"or\")) {\n index += 1;\n const right = parseAnd();\n if (!right) return null;\n left = { kind: \"or\", left, right };\n }\n return left;\n };\n\n const expression = parseOr();\n if (expression && index !== tokens.length) {\n issues.push(issue(\"invalid_template_expression\", \"Conditional expression contains unsupported syntax.\"));\n return null;\n }\n return expression;\n}\n\nfunction compileStoreCategoryPromptTemplate(source: string): CompileResult {\n const issues: StoreCategoryPromptTemplateIssue[] = [];\n const referencedConditionKeys: string[] = [];\n const nodes: TemplateNode[] = [];\n\n if (source.trim().length === 0) issues.push(issue(\"invalid_prompt_source\", \"Prompt template must not be blank.\"));\n if (sourceLength(source) > MAX_STORE_CATEGORY_PROMPT_SOURCE_CHARS) {\n issues.push(issue(\"invalid_prompt_source\", `Prompt template must not exceed ${MAX_STORE_CATEGORY_PROMPT_SOURCE_CHARS.toLocaleString()} characters.`));\n }\n\n const tokens = tokenizeTemplate(source, issues);\n type Frame = {\n node: Extract<TemplateNode, { kind: \"if\" }>;\n parentBody: TemplateNode[];\n currentBody: TemplateNode[];\n sawElse: boolean;\n };\n const stack: Frame[] = [];\n let currentBody = nodes;\n let controlCount = 0;\n\n for (const token of tokens) {\n if (token.kind === \"text\") {\n if (token.text) currentBody.push({ kind: \"text\", text: token.text });\n continue;\n }\n if (token.kind === \"unsupported\") {\n issues.push(issue(\n \"unsupported_template_construct\",\n token.marker === \"interpolation\"\n ? \"Variable interpolation is not supported in Store Category prompt templates.\"\n : \"Template comments are not supported in Store Category prompt templates.\",\n ));\n continue;\n }\n\n controlCount += 1;\n if (controlCount > MAX_CONTROL_TAGS) {\n issues.push(issue(\"template_too_complex\", `Prompt template must not contain more than ${MAX_CONTROL_TAGS} control tags.`));\n break;\n }\n\n const ifMatch = /^if\\s+([\\s\\S]+)$/.exec(token.source);\n if (ifMatch) {\n if (stack.length >= MAX_CONTROL_DEPTH) {\n issues.push(issue(\"template_too_complex\", `Conditional nesting must not exceed ${MAX_CONTROL_DEPTH} levels.`));\n continue;\n }\n const expression = parseExpression(ifMatch[1].trim(), issues, referencedConditionKeys);\n if (!expression) continue;\n const branchBody: TemplateNode[] = [];\n const node: Extract<TemplateNode, { kind: \"if\" }> = {\n kind: \"if\",\n branches: [{ expression, body: branchBody }],\n elseBody: null,\n };\n currentBody.push(node);\n const frame: Frame = { node, parentBody: currentBody, currentBody: branchBody, sawElse: false };\n stack.push(frame);\n currentBody = branchBody;\n continue;\n }\n\n const elifMatch = /^elif\\s+([\\s\\S]+)$/.exec(token.source);\n if (elifMatch) {\n const frame = stack.at(-1);\n if (!frame || frame.sawElse) {\n issues.push(issue(\"invalid_template_structure\", \"elif must appear inside an if block and before else.\"));\n continue;\n }\n const expression = parseExpression(elifMatch[1].trim(), issues, referencedConditionKeys);\n if (!expression) continue;\n const branchBody: TemplateNode[] = [];\n frame.node.branches.push({ expression, body: branchBody });\n frame.currentBody = branchBody;\n currentBody = branchBody;\n continue;\n }\n\n if (token.source === \"else\") {\n const frame = stack.at(-1);\n if (!frame || frame.sawElse) {\n issues.push(issue(\"invalid_template_structure\", \"else must appear once inside an if block.\"));\n continue;\n }\n const elseBody: TemplateNode[] = [];\n frame.node.elseBody = elseBody;\n frame.currentBody = elseBody;\n frame.sawElse = true;\n currentBody = elseBody;\n continue;\n }\n\n if (token.source === \"endif\") {\n const frame = stack.pop();\n if (!frame) {\n issues.push(issue(\"invalid_template_structure\", \"endif does not have a matching if block.\"));\n continue;\n }\n currentBody = frame.parentBody;\n continue;\n }\n\n issues.push(issue(\n \"unsupported_template_construct\",\n \"Only if, elif, else, and endif control tags are supported in Store Category prompt templates.\",\n ));\n }\n\n if (stack.length) issues.push(issue(\"invalid_template_structure\", \"Every if block must end with endif.\"));\n return { issues: boundedIssues(issues), nodes, referencedConditionKeys };\n}\n\nfunction validateAvailableConditionKeys(values: readonly string[], issues: StoreCategoryPromptTemplateIssue[]): Set<string> {\n if (values.length > MAX_STORE_CATEGORY_PROMPT_CONDITIONS) {\n issues.push(issue(\"template_too_complex\", `At most ${MAX_STORE_CATEGORY_PROMPT_CONDITIONS} mapping conditions are supported.`));\n }\n const keys = new Set<string>();\n for (const value of values.slice(0, MAX_STORE_CATEGORY_PROMPT_CONDITIONS + 1)) {\n if (!StoreCategoryPromptConditionKeySchema.safeParse(value).success) {\n issues.push(issue(\"invalid_mapping_condition\", `Invalid mapping condition key: ${value}.`));\n continue;\n }\n if (keys.has(value)) {\n issues.push(issue(\"invalid_mapping_condition\", `Duplicate mapping condition key: ${value}.`));\n continue;\n }\n keys.add(value);\n }\n return keys;\n}\n\nexport function validateStoreCategoryPromptTemplate(input: {\n source: string;\n availableConditionKeys: readonly string[];\n}): StoreCategoryPromptTemplateValidation {\n const compiled = compileStoreCategoryPromptTemplate(input.source);\n const issues = [...compiled.issues];\n const available = validateAvailableConditionKeys(input.availableConditionKeys, issues);\n for (const key of compiled.referencedConditionKeys) {\n if (!available.has(key)) issues.push(issue(\"unknown_mapping_condition\", `Prompt template references unavailable mapping condition: mappings.${key}.`));\n }\n const bounded = boundedIssues(issues);\n return { valid: bounded.length === 0, issues: bounded, referencedConditionKeys: compiled.referencedConditionKeys };\n}\n\n\nexport function createStoreCategoryPromptConditionBlock(conditionKey: string): string {\n const parsed = StoreCategoryPromptConditionKeySchema.safeParse(conditionKey);\n if (!parsed.success) throw new TypeError(`Invalid mapping condition key: ${conditionKey}.`);\n return `{% if mappings.${conditionKey} %}\\n\\n{% endif %}`;\n}\n\nexport function createStoreCategoryPromptContext(input: {\n availableConditionKeys: readonly string[];\n selectedConditionKeys: readonly string[];\n}): StoreCategoryPromptContext {\n const issues: StoreCategoryPromptTemplateIssue[] = [];\n const available = validateAvailableConditionKeys(input.availableConditionKeys, issues);\n const selected = validateAvailableConditionKeys(input.selectedConditionKeys, issues);\n for (const key of selected) {\n if (!available.has(key)) issues.push(issue(\"unknown_mapping_condition\", `Selected mapping condition is unavailable: ${key}.`));\n }\n if (issues.length) throw new TypeError(issues[0].message);\n const mappings = Object.create(null) as Record<string, boolean>;\n for (const key of available) mappings[key] = selected.has(key);\n return { mappings };\n}\n\nfunction evaluateExpression(expression: ExpressionNode, mappings: Record<string, boolean>): boolean {\n switch (expression.kind) {\n case \"condition\":\n return mappings[expression.key] === true;\n case \"not\":\n return !evaluateExpression(expression.operand, mappings);\n case \"and\":\n return evaluateExpression(expression.left, mappings) && evaluateExpression(expression.right, mappings);\n case \"or\":\n return evaluateExpression(expression.left, mappings) || evaluateExpression(expression.right, mappings);\n }\n}\n\nfunction renderNodes(nodes: TemplateNode[], mappings: Record<string, boolean>, append: (text: string) => boolean): boolean {\n for (const node of nodes) {\n if (node.kind === \"text\") {\n if (!append(node.text)) return false;\n continue;\n }\n let renderedBranch = false;\n for (const branch of node.branches) {\n if (evaluateExpression(branch.expression, mappings)) {\n if (!renderNodes(branch.body, mappings, append)) return false;\n renderedBranch = true;\n break;\n }\n }\n if (!renderedBranch && node.elseBody && !renderNodes(node.elseBody, mappings, append)) return false;\n }\n return true;\n}\n\nexport function renderStoreCategoryPromptTemplate(input: {\n source: string;\n context: StoreCategoryPromptContext;\n}): StoreCategoryPromptRenderResult {\n const contextResult = StoreCategoryPromptContextSchema.safeParse(input.context);\n if (!contextResult.success) {\n return { ok: false, issues: [issue(\"invalid_mapping_condition\", \"Store Category prompt context contains invalid mapping conditions.\")] };\n }\n const availableConditionKeys = Object.keys(contextResult.data.mappings);\n const validation = validateStoreCategoryPromptTemplate({ source: input.source, availableConditionKeys });\n if (!validation.valid) return { ok: false, issues: validation.issues };\n\n const compiled = compileStoreCategoryPromptTemplate(input.source);\n let output = \"\";\n let outputChars = 0;\n const append = (text: string) => {\n outputChars += sourceLength(text);\n if (outputChars > MAX_STORE_CATEGORY_PROMPT_RENDERED_CHARS) return false;\n output += text;\n return true;\n };\n const rendered = renderNodes(compiled.nodes, contextResult.data.mappings, append);\n if (!rendered) {\n return {\n ok: false,\n issues: [issue(\"rendered_prompt_too_large\", `Rendered prompt must not exceed ${MAX_STORE_CATEGORY_PROMPT_RENDERED_CHARS.toLocaleString()} characters.`)],\n };\n }\n return { ok: true, promptText: output, referencedConditionKeys: validation.referencedConditionKeys };\n}\n","/** Synthetic examples; no provider identity, schema artifact or publication claim. */\nimport type {\n CommerceManifest,\n CommerceConversationGrant,\n CommerceTurnIdentity,\n} from \"./schemas\";\nimport {\n EMPTY_RESPONSE_CONTRACT,\n type CommerceFinalResponse,\n} from \"./response\";\nimport type { Digest } from \"./canonical-json\";\nimport { responseContractCanonicalJson } from \"./canonical-json\";\nimport type { ToolDescriptor, CommerceToolDefinition } from \"./definitions\";\nexport const exampleTool: ToolDescriptor = {\n toolId: \"tool-fixture\",\n toolRevisionId: \"revision-fixture\",\n name: \"never_seeded_catalogue_facts\",\n definitionVersion: \"1.0.0\",\n description: \"Read synthetic catalogue facts.\",\n inputSchema: {\n type: \"object\",\n properties: { handle: { type: \"string\", minLength: 1, maxLength: 255 } },\n required: [\"handle\"],\n additionalProperties: false,\n },\n};\nexport const exampleDefinition: CommerceToolDefinition = {\n name: exampleTool.name,\n definitionVersion: \"1.0.0\",\n description: exampleTool.description,\n inputSchema: exampleTool.inputSchema,\n execution: {\n kind: \"SHOPIFY_STOREFRONT_QUERY\",\n executorVersion: \"1.0.0\",\n apiVersion: \"2026-07\",\n schemaHash: \"a\".repeat(64),\n document:\n \"query ProductDetails($handle: String!) { product(handle: $handle) { title description } }\",\n operationName: \"ProductDetails\",\n variables: { handle: { input: \"handle\" } },\n resultPath: \"product\",\n },\n responseTemplate: {\n kind: \"text\",\n text: \"{{result.values.title}}: {{result.values.description}}\",\n unavailable: \"Product details could not be verified.\",\n },\n};\nexport const exampleTurn: CommerceTurnIdentity = {\n contractVersion: \"commerce.v1\",\n shopId: \"shop-fixture\",\n checkoutRecoveryId: \"recovery-fixture\",\n conversationId: \"conversation-fixture\",\n inboundVersion: 1,\n};\nexport function exampleManifest(\n digest: Digest,\n withTool = false,\n): CommerceManifest {\n const capabilities = withTool\n ? [{\n capabilityId: \"capability-fixture\",\n key: \"feature_product_read\",\n featureId: \"feature-fixture\",\n position: 0,\n toolDescriptor: structuredClone(exampleTool),\n }]\n : [];\n return {\n contractVersion: \"commerce.v1\",\n releaseId: \"release-fixture\",\n runnerCompatibility: \"^1.0.0\",\n capabilities,\n featureBehaviours: withTool\n ? [{ featureId: \"feature-fixture\", behaviourPrompt: \"Synthetic Feature behavior.\" }]\n : [],\n selectedCapabilityKeys: capabilities.map((capability) => capability.key),\n grantedTools: withTool\n ? [\n {\n toolId: exampleTool.toolId,\n toolRevisionId: exampleTool.toolRevisionId,\n toolName: exampleTool.name,\n definitionVersion: \"1.0.0\",\n capabilityKeys: [\"feature_product_read\"],\n },\n ]\n : [],\n responseContract: structuredClone(EMPTY_RESPONSE_CONTRACT),\n responseContractHash: digest(\n responseContractCanonicalJson(EMPTY_RESPONSE_CONTRACT),\n ),\n };\n}\nexport function exampleGrant(\n manifest: CommerceManifest,\n): CommerceConversationGrant {\n return {\n id: \"grant-fixture\",\n shopId: exampleTurn.shopId,\n conversationId: exampleTurn.conversationId,\n initialInboundVersion: 1,\n releaseId: manifest.releaseId,\n selectedCapabilityKeys: [...manifest.selectedCapabilityKeys],\n grantedTools: structuredClone(manifest.grantedTools),\n runnerVersion: \"1.0.0\",\n createdAt: \"2026-09-20T00:00:00.000Z\",\n expiresAt: null,\n };\n}\nexport const exampleFinal: CommerceFinalResponse = {\n answerKind: \"REFER_TO_STORE\",\n replyText:\n \"I cannot verify that information. Please contact the store directly.\",\n referralReason: \"INSUFFICIENT_TOOLS\",\n detectedLanguageTag: null,\n detectedLanguageConfidence: null,\n evidenceIds: [],\n details: {},\n};\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/commerce/store-category-prompt.ts","../../src/commerce/outreach-context.ts","../../src/commerce/fixtures.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const STORE_CATEGORY_PROMPT_RUNTIME_VERSION = \"store-category-prompt.v1\" as const;\nexport const MAX_STORE_CATEGORY_PROMPT_SOURCE_CHARS = 100_000;\nexport const MAX_STORE_CATEGORY_PROMPT_RENDERED_CHARS = 100_000;\nexport const MAX_STORE_CATEGORY_PROMPT_CONDITIONS = 256;\nconst MAX_CONTROL_TAGS = 512;\nconst MAX_CONTROL_DEPTH = 8;\nconst MAX_EXPRESSION_CHARS = 1_024;\n\nconst forbiddenConditionKeys = new Set([\"__proto__\", \"prototype\", \"constructor\"]);\nconst conditionKeyPattern = /^[a-z][a-z0-9_]{0,127}$/;\n\nexport const StoreCategoryPromptConditionKeySchema = z\n .string()\n .regex(conditionKeyPattern)\n .refine((value) => !forbiddenConditionKeys.has(value));\n\nexport type StoreCategoryPromptConditionKey = z.infer<typeof StoreCategoryPromptConditionKeySchema>;\n\nexport const StoreCategoryPromptContextSchema = z.strictObject({\n mappings: z\n .record(StoreCategoryPromptConditionKeySchema, z.boolean())\n .refine((value) => Object.keys(value).length <= MAX_STORE_CATEGORY_PROMPT_CONDITIONS),\n});\n\nexport type StoreCategoryPromptContext = z.infer<typeof StoreCategoryPromptContextSchema>;\n\nexport type StoreCategoryPromptTemplateIssue = {\n path: \"/promptText\";\n code:\n | \"invalid_prompt_source\"\n | \"unsupported_template_construct\"\n | \"invalid_template_structure\"\n | \"invalid_template_expression\"\n | \"invalid_mapping_condition\"\n | \"unknown_mapping_condition\"\n | \"template_too_complex\"\n | \"rendered_prompt_too_large\";\n message: string;\n};\n\nexport type StoreCategoryPromptTemplateValidation = {\n valid: boolean;\n issues: StoreCategoryPromptTemplateIssue[];\n referencedConditionKeys: string[];\n};\n\nexport type StoreCategoryPromptRenderResult =\n | { ok: true; promptText: string; referencedConditionKeys: string[] }\n | { ok: false; issues: StoreCategoryPromptTemplateIssue[] };\n\ntype ExpressionNode =\n | { kind: \"condition\"; key: string }\n | { kind: \"not\"; operand: ExpressionNode }\n | { kind: \"and\"; left: ExpressionNode; right: ExpressionNode }\n | { kind: \"or\"; left: ExpressionNode; right: ExpressionNode };\n\ntype TemplateNode =\n | { kind: \"text\"; text: string }\n | {\n kind: \"if\";\n branches: Array<{ expression: ExpressionNode; body: TemplateNode[] }>;\n elseBody: TemplateNode[] | null;\n };\n\ntype TemplateToken =\n | { kind: \"text\"; text: string }\n | { kind: \"control\"; source: string }\n | { kind: \"unsupported\"; source: string; marker: \"interpolation\" | \"comment\" };\n\ntype CompileResult = {\n issues: StoreCategoryPromptTemplateIssue[];\n nodes: TemplateNode[];\n referencedConditionKeys: string[];\n};\n\nfunction issue(code: StoreCategoryPromptTemplateIssue[\"code\"], message: string): StoreCategoryPromptTemplateIssue {\n return { path: \"/promptText\", code, message };\n}\n\nfunction boundedIssues(issues: StoreCategoryPromptTemplateIssue[]): StoreCategoryPromptTemplateIssue[] {\n return issues.slice(0, 32).map((entry) => ({\n path: entry.path,\n code: entry.code,\n message: entry.message.slice(0, 512),\n }));\n}\n\nfunction sourceLength(value: string): number {\n return Array.from(value).length;\n}\n\nfunction findNextMarker(source: string, start: number): { index: number; marker: \"{%\" | \"{{\" | \"{#\" } | null {\n let best: { index: number; marker: \"{%\" | \"{{\" | \"{#\" } | null = null;\n for (const marker of [\"{%\", \"{{\", \"{#\"] as const) {\n const index = source.indexOf(marker, start);\n if (index >= 0 && (!best || index < best.index)) best = { index, marker };\n }\n return best;\n}\n\nfunction tokenizeTemplate(source: string, issues: StoreCategoryPromptTemplateIssue[]): TemplateToken[] {\n const tokens: TemplateToken[] = [];\n let cursor = 0;\n while (cursor < source.length) {\n const next = findNextMarker(source, cursor);\n if (!next) {\n tokens.push({ kind: \"text\", text: source.slice(cursor) });\n break;\n }\n if (next.index > cursor) tokens.push({ kind: \"text\", text: source.slice(cursor, next.index) });\n const closeMarker = next.marker === \"{%\" ? \"%}\" : next.marker === \"{{\" ? \"}}\" : \"#}\";\n const close = source.indexOf(closeMarker, next.index + 2);\n if (close < 0) {\n issues.push(issue(\"invalid_template_structure\", `Unclosed ${next.marker} template construct.`));\n tokens.push({ kind: \"text\", text: source.slice(next.index) });\n break;\n }\n const raw = source.slice(next.index + 2, close).trim();\n if (next.marker === \"{%\") tokens.push({ kind: \"control\", source: raw });\n else tokens.push({ kind: \"unsupported\", source: raw, marker: next.marker === \"{{\" ? \"interpolation\" : \"comment\" });\n cursor = close + 2;\n }\n if (source.length === 0) tokens.push({ kind: \"text\", text: \"\" });\n return tokens;\n}\n\ntype ExprToken = { kind: \"word\"; value: string } | { kind: \"dot\" } | { kind: \"lparen\" } | { kind: \"rparen\" };\n\nfunction lexExpression(source: string, issues: StoreCategoryPromptTemplateIssue[]): ExprToken[] | null {\n if (sourceLength(source) > MAX_EXPRESSION_CHARS) {\n issues.push(issue(\"template_too_complex\", `Conditional expressions must not exceed ${MAX_EXPRESSION_CHARS} characters.`));\n return null;\n }\n const tokens: ExprToken[] = [];\n let cursor = 0;\n while (cursor < source.length) {\n const char = source[cursor];\n if (/\\s/.test(char)) {\n cursor += 1;\n continue;\n }\n if (char === \".\") {\n tokens.push({ kind: \"dot\" });\n cursor += 1;\n continue;\n }\n if (char === \"(\") {\n tokens.push({ kind: \"lparen\" });\n cursor += 1;\n continue;\n }\n if (char === \")\") {\n tokens.push({ kind: \"rparen\" });\n cursor += 1;\n continue;\n }\n const match = /^[A-Za-z_][A-Za-z0-9_]*/.exec(source.slice(cursor));\n if (!match) {\n issues.push(issue(\"invalid_template_expression\", \"Conditional expressions may only use mappings.<conditionKey>, not, and, or, and parentheses.\"));\n return null;\n }\n tokens.push({ kind: \"word\", value: match[0] });\n cursor += match[0].length;\n }\n return tokens;\n}\n\nfunction parseExpression(source: string, issues: StoreCategoryPromptTemplateIssue[], referenced: string[]): ExpressionNode | null {\n const tokens = lexExpression(source, issues);\n if (!tokens || tokens.length === 0) {\n if (tokens?.length === 0) issues.push(issue(\"invalid_template_expression\", \"A conditional expression is required.\"));\n return null;\n }\n let index = 0;\n const peekWord = (word: string) => {\n const token = tokens[index];\n return token?.kind === \"word\" && token.value === word;\n };\n\n const parsePrimary = (): ExpressionNode | null => {\n const token = tokens[index];\n if (token?.kind === \"lparen\") {\n index += 1;\n const inner = parseOr();\n if (tokens[index]?.kind !== \"rparen\") {\n issues.push(issue(\"invalid_template_expression\", \"Conditional expression parentheses are unbalanced.\"));\n return null;\n }\n index += 1;\n return inner;\n }\n if (!peekWord(\"mappings\")) {\n issues.push(issue(\"invalid_template_expression\", \"Conditional expressions must reference mappings.<conditionKey>.\"));\n return null;\n }\n index += 1;\n if (tokens[index]?.kind !== \"dot\") {\n issues.push(issue(\"invalid_template_expression\", \"Mapping conditions must use mappings.<conditionKey>.\"));\n return null;\n }\n index += 1;\n const keyToken = tokens[index];\n if (keyToken?.kind !== \"word\") {\n issues.push(issue(\"invalid_mapping_condition\", \"A valid mapping condition key is required after mappings.\"));\n return null;\n }\n index += 1;\n if (!StoreCategoryPromptConditionKeySchema.safeParse(keyToken.value).success) {\n issues.push(issue(\"invalid_mapping_condition\", `Invalid mapping condition key: ${keyToken.value}.`));\n return null;\n }\n if (!referenced.includes(keyToken.value)) referenced.push(keyToken.value);\n return { kind: \"condition\", key: keyToken.value };\n };\n\n const parseNot = (): ExpressionNode | null => {\n if (peekWord(\"not\")) {\n index += 1;\n const operand = parseNot();\n return operand ? { kind: \"not\", operand } : null;\n }\n return parsePrimary();\n };\n\n const parseAnd = (): ExpressionNode | null => {\n let left = parseNot();\n while (left && peekWord(\"and\")) {\n index += 1;\n const right = parseNot();\n if (!right) return null;\n left = { kind: \"and\", left, right };\n }\n return left;\n };\n\n const parseOr = (): ExpressionNode | null => {\n let left = parseAnd();\n while (left && peekWord(\"or\")) {\n index += 1;\n const right = parseAnd();\n if (!right) return null;\n left = { kind: \"or\", left, right };\n }\n return left;\n };\n\n const expression = parseOr();\n if (expression && index !== tokens.length) {\n issues.push(issue(\"invalid_template_expression\", \"Conditional expression contains unsupported syntax.\"));\n return null;\n }\n return expression;\n}\n\nfunction compileStoreCategoryPromptTemplate(source: string): CompileResult {\n const issues: StoreCategoryPromptTemplateIssue[] = [];\n const referencedConditionKeys: string[] = [];\n const nodes: TemplateNode[] = [];\n\n if (source.trim().length === 0) issues.push(issue(\"invalid_prompt_source\", \"Prompt template must not be blank.\"));\n if (sourceLength(source) > MAX_STORE_CATEGORY_PROMPT_SOURCE_CHARS) {\n issues.push(issue(\"invalid_prompt_source\", `Prompt template must not exceed ${MAX_STORE_CATEGORY_PROMPT_SOURCE_CHARS.toLocaleString()} characters.`));\n }\n\n const tokens = tokenizeTemplate(source, issues);\n type Frame = {\n node: Extract<TemplateNode, { kind: \"if\" }>;\n parentBody: TemplateNode[];\n currentBody: TemplateNode[];\n sawElse: boolean;\n };\n const stack: Frame[] = [];\n let currentBody = nodes;\n let controlCount = 0;\n\n for (const token of tokens) {\n if (token.kind === \"text\") {\n if (token.text) currentBody.push({ kind: \"text\", text: token.text });\n continue;\n }\n if (token.kind === \"unsupported\") {\n issues.push(issue(\n \"unsupported_template_construct\",\n token.marker === \"interpolation\"\n ? \"Variable interpolation is not supported in Store Category prompt templates.\"\n : \"Template comments are not supported in Store Category prompt templates.\",\n ));\n continue;\n }\n\n controlCount += 1;\n if (controlCount > MAX_CONTROL_TAGS) {\n issues.push(issue(\"template_too_complex\", `Prompt template must not contain more than ${MAX_CONTROL_TAGS} control tags.`));\n break;\n }\n\n const ifMatch = /^if\\s+([\\s\\S]+)$/.exec(token.source);\n if (ifMatch) {\n if (stack.length >= MAX_CONTROL_DEPTH) {\n issues.push(issue(\"template_too_complex\", `Conditional nesting must not exceed ${MAX_CONTROL_DEPTH} levels.`));\n continue;\n }\n const expression = parseExpression(ifMatch[1].trim(), issues, referencedConditionKeys);\n if (!expression) continue;\n const branchBody: TemplateNode[] = [];\n const node: Extract<TemplateNode, { kind: \"if\" }> = {\n kind: \"if\",\n branches: [{ expression, body: branchBody }],\n elseBody: null,\n };\n currentBody.push(node);\n const frame: Frame = { node, parentBody: currentBody, currentBody: branchBody, sawElse: false };\n stack.push(frame);\n currentBody = branchBody;\n continue;\n }\n\n const elifMatch = /^elif\\s+([\\s\\S]+)$/.exec(token.source);\n if (elifMatch) {\n const frame = stack.at(-1);\n if (!frame || frame.sawElse) {\n issues.push(issue(\"invalid_template_structure\", \"elif must appear inside an if block and before else.\"));\n continue;\n }\n const expression = parseExpression(elifMatch[1].trim(), issues, referencedConditionKeys);\n if (!expression) continue;\n const branchBody: TemplateNode[] = [];\n frame.node.branches.push({ expression, body: branchBody });\n frame.currentBody = branchBody;\n currentBody = branchBody;\n continue;\n }\n\n if (token.source === \"else\") {\n const frame = stack.at(-1);\n if (!frame || frame.sawElse) {\n issues.push(issue(\"invalid_template_structure\", \"else must appear once inside an if block.\"));\n continue;\n }\n const elseBody: TemplateNode[] = [];\n frame.node.elseBody = elseBody;\n frame.currentBody = elseBody;\n frame.sawElse = true;\n currentBody = elseBody;\n continue;\n }\n\n if (token.source === \"endif\") {\n const frame = stack.pop();\n if (!frame) {\n issues.push(issue(\"invalid_template_structure\", \"endif does not have a matching if block.\"));\n continue;\n }\n currentBody = frame.parentBody;\n continue;\n }\n\n issues.push(issue(\n \"unsupported_template_construct\",\n \"Only if, elif, else, and endif control tags are supported in Store Category prompt templates.\",\n ));\n }\n\n if (stack.length) issues.push(issue(\"invalid_template_structure\", \"Every if block must end with endif.\"));\n return { issues: boundedIssues(issues), nodes, referencedConditionKeys };\n}\n\nfunction validateAvailableConditionKeys(values: readonly string[], issues: StoreCategoryPromptTemplateIssue[]): Set<string> {\n if (values.length > MAX_STORE_CATEGORY_PROMPT_CONDITIONS) {\n issues.push(issue(\"template_too_complex\", `At most ${MAX_STORE_CATEGORY_PROMPT_CONDITIONS} mapping conditions are supported.`));\n }\n const keys = new Set<string>();\n for (const value of values.slice(0, MAX_STORE_CATEGORY_PROMPT_CONDITIONS + 1)) {\n if (!StoreCategoryPromptConditionKeySchema.safeParse(value).success) {\n issues.push(issue(\"invalid_mapping_condition\", `Invalid mapping condition key: ${value}.`));\n continue;\n }\n if (keys.has(value)) {\n issues.push(issue(\"invalid_mapping_condition\", `Duplicate mapping condition key: ${value}.`));\n continue;\n }\n keys.add(value);\n }\n return keys;\n}\n\nexport function validateStoreCategoryPromptTemplate(input: {\n source: string;\n availableConditionKeys: readonly string[];\n}): StoreCategoryPromptTemplateValidation {\n const compiled = compileStoreCategoryPromptTemplate(input.source);\n const issues = [...compiled.issues];\n const available = validateAvailableConditionKeys(input.availableConditionKeys, issues);\n for (const key of compiled.referencedConditionKeys) {\n if (!available.has(key)) issues.push(issue(\"unknown_mapping_condition\", `Prompt template references unavailable mapping condition: mappings.${key}.`));\n }\n const bounded = boundedIssues(issues);\n return { valid: bounded.length === 0, issues: bounded, referencedConditionKeys: compiled.referencedConditionKeys };\n}\n\n\nexport function createStoreCategoryPromptConditionBlock(conditionKey: string): string {\n const parsed = StoreCategoryPromptConditionKeySchema.safeParse(conditionKey);\n if (!parsed.success) throw new TypeError(`Invalid mapping condition key: ${conditionKey}.`);\n return `{% if mappings.${conditionKey} %}\\n\\n{% endif %}`;\n}\n\nexport function createStoreCategoryPromptContext(input: {\n availableConditionKeys: readonly string[];\n selectedConditionKeys: readonly string[];\n}): StoreCategoryPromptContext {\n const issues: StoreCategoryPromptTemplateIssue[] = [];\n const available = validateAvailableConditionKeys(input.availableConditionKeys, issues);\n const selected = validateAvailableConditionKeys(input.selectedConditionKeys, issues);\n for (const key of selected) {\n if (!available.has(key)) issues.push(issue(\"unknown_mapping_condition\", `Selected mapping condition is unavailable: ${key}.`));\n }\n if (issues.length) throw new TypeError(issues[0].message);\n const mappings = Object.create(null) as Record<string, boolean>;\n for (const key of available) mappings[key] = selected.has(key);\n return { mappings };\n}\n\nfunction evaluateExpression(expression: ExpressionNode, mappings: Record<string, boolean>): boolean {\n switch (expression.kind) {\n case \"condition\":\n return mappings[expression.key] === true;\n case \"not\":\n return !evaluateExpression(expression.operand, mappings);\n case \"and\":\n return evaluateExpression(expression.left, mappings) && evaluateExpression(expression.right, mappings);\n case \"or\":\n return evaluateExpression(expression.left, mappings) || evaluateExpression(expression.right, mappings);\n }\n}\n\nfunction renderNodes(nodes: TemplateNode[], mappings: Record<string, boolean>, append: (text: string) => boolean): boolean {\n for (const node of nodes) {\n if (node.kind === \"text\") {\n if (!append(node.text)) return false;\n continue;\n }\n let renderedBranch = false;\n for (const branch of node.branches) {\n if (evaluateExpression(branch.expression, mappings)) {\n if (!renderNodes(branch.body, mappings, append)) return false;\n renderedBranch = true;\n break;\n }\n }\n if (!renderedBranch && node.elseBody && !renderNodes(node.elseBody, mappings, append)) return false;\n }\n return true;\n}\n\nexport function renderStoreCategoryPromptTemplate(input: {\n source: string;\n context: StoreCategoryPromptContext;\n}): StoreCategoryPromptRenderResult {\n const contextResult = StoreCategoryPromptContextSchema.safeParse(input.context);\n if (!contextResult.success) {\n return { ok: false, issues: [issue(\"invalid_mapping_condition\", \"Store Category prompt context contains invalid mapping conditions.\")] };\n }\n const availableConditionKeys = Object.keys(contextResult.data.mappings);\n const validation = validateStoreCategoryPromptTemplate({ source: input.source, availableConditionKeys });\n if (!validation.valid) return { ok: false, issues: validation.issues };\n\n const compiled = compileStoreCategoryPromptTemplate(input.source);\n let output = \"\";\n let outputChars = 0;\n const append = (text: string) => {\n outputChars += sourceLength(text);\n if (outputChars > MAX_STORE_CATEGORY_PROMPT_RENDERED_CHARS) return false;\n output += text;\n return true;\n };\n const rendered = renderNodes(compiled.nodes, contextResult.data.mappings, append);\n if (!rendered) {\n return {\n ok: false,\n issues: [issue(\"rendered_prompt_too_large\", `Rendered prompt must not exceed ${MAX_STORE_CATEGORY_PROMPT_RENDERED_CHARS.toLocaleString()} characters.`)],\n };\n }\n return { ok: true, promptText: output, referencedConditionKeys: validation.referencedConditionKeys };\n}\n","import { z } from \"zod\";\nimport { IdSchema } from \"./primitives\";\n\nexport const CommerceOutreachToolContextSchema = z.strictObject({\n purpose: z.literal(\"INITIAL_RECOVERY_OUTREACH\"),\n checkoutRecoveryId: IdSchema,\n outreachAttemptId: IdSchema,\n});\n\nexport type CommerceOutreachToolContext =\n z.infer<typeof CommerceOutreachToolContextSchema>;\n","/** Synthetic examples; no provider identity, schema artifact or publication claim. */\nimport type {\n CommerceManifest,\n CommerceConversationGrant,\n CommerceTurnIdentity,\n} from \"./schemas\";\nimport {\n EMPTY_RESPONSE_CONTRACT,\n type CommerceFinalResponse,\n} from \"./response\";\nimport type { Digest } from \"./canonical-json\";\nimport { responseContractCanonicalJson } from \"./canonical-json\";\nimport type { ToolDescriptor, CommerceToolDefinition } from \"./definitions\";\nexport const exampleTool: ToolDescriptor = {\n toolId: \"tool-fixture\",\n toolRevisionId: \"revision-fixture\",\n name: \"never_seeded_catalogue_facts\",\n definitionVersion: \"1.0.0\",\n description: \"Read synthetic catalogue facts.\",\n inputSchema: {\n type: \"object\",\n properties: { handle: { type: \"string\", minLength: 1, maxLength: 255 } },\n required: [\"handle\"],\n additionalProperties: false,\n },\n};\nexport const exampleDefinition: CommerceToolDefinition = {\n name: exampleTool.name,\n definitionVersion: \"1.0.0\",\n description: exampleTool.description,\n inputSchema: exampleTool.inputSchema,\n execution: {\n kind: \"SHOPIFY_STOREFRONT_QUERY\",\n executorVersion: \"1.0.0\",\n apiVersion: \"2026-07\",\n schemaHash: \"a\".repeat(64),\n document:\n \"query ProductDetails($handle: String!) { product(handle: $handle) { title description } }\",\n operationName: \"ProductDetails\",\n variables: { handle: { input: \"handle\" } },\n resultPath: \"product\",\n },\n responseTemplate: {\n kind: \"text\",\n text: \"{{result.values.title}}: {{result.values.description}}\",\n unavailable: \"Product details could not be verified.\",\n },\n};\nexport const exampleTurn: CommerceTurnIdentity = {\n contractVersion: \"commerce.v1\",\n shopId: \"shop-fixture\",\n checkoutRecoveryId: \"recovery-fixture\",\n conversationId: \"conversation-fixture\",\n inboundVersion: 1,\n};\nexport function exampleManifest(\n digest: Digest,\n withTool = false,\n): CommerceManifest {\n const capabilities = withTool\n ? [{\n capabilityId: \"capability-fixture\",\n key: \"feature_product_read\",\n featureId: \"feature-fixture\",\n position: 0,\n toolDescriptor: structuredClone(exampleTool),\n }]\n : [];\n return {\n contractVersion: \"commerce.v1\",\n releaseId: \"release-fixture\",\n runnerCompatibility: \"^1.0.0\",\n capabilities,\n featureBehaviours: withTool\n ? [{ featureId: \"feature-fixture\", behaviourPrompt: \"Synthetic Feature behavior.\" }]\n : [],\n selectedCapabilityKeys: capabilities.map((capability) => capability.key),\n grantedTools: withTool\n ? [\n {\n toolId: exampleTool.toolId,\n toolRevisionId: exampleTool.toolRevisionId,\n toolName: exampleTool.name,\n definitionVersion: \"1.0.0\",\n capabilityKeys: [\"feature_product_read\"],\n },\n ]\n : [],\n responseContract: structuredClone(EMPTY_RESPONSE_CONTRACT),\n responseContractHash: digest(\n responseContractCanonicalJson(EMPTY_RESPONSE_CONTRACT),\n ),\n };\n}\nexport function exampleGrant(\n manifest: CommerceManifest,\n): CommerceConversationGrant {\n return {\n id: \"grant-fixture\",\n shopId: exampleTurn.shopId,\n conversationId: exampleTurn.conversationId,\n initialInboundVersion: 1,\n releaseId: manifest.releaseId,\n selectedCapabilityKeys: [...manifest.selectedCapabilityKeys],\n grantedTools: structuredClone(manifest.grantedTools),\n runnerVersion: \"1.0.0\",\n createdAt: \"2026-09-20T00:00:00.000Z\",\n expiresAt: null,\n };\n}\nexport const exampleFinal: CommerceFinalResponse = {\n answerKind: \"REFER_TO_STORE\",\n replyText:\n \"I cannot verify that information. Please contact the store directly.\",\n referralReason: \"INSUFFICIENT_TOOLS\",\n detectedLanguageTag: null,\n detectedLanguageConfidence: null,\n evidenceIds: [],\n details: {},\n};\n"],"mappings":"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","names":["z","z"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { R as RunnerTransportCode, C as CommerceModelInvoker, M as ModelStep } from '../../types-
|
|
1
|
+
import { R as RunnerTransportCode, C as CommerceModelInvoker, M as ModelStep } from '../../types-CGQgT51t.js';
|
|
2
2
|
import { CommerceModelProvider, CommerceProviderModelId } from './index.js';
|
|
3
|
-
import '../../response-
|
|
3
|
+
import '../../response-C6-kYOel.js';
|
|
4
4
|
import 'zod';
|
|
5
5
|
import '../../types-B32wDMLO.js';
|
|
6
6
|
|
|
@@ -4,7 +4,8 @@ import {
|
|
|
4
4
|
} from "../../chunk-XB5NIOKJ.js";
|
|
5
5
|
import {
|
|
6
6
|
CommerceToolResultSchema
|
|
7
|
-
} from "../../chunk-
|
|
7
|
+
} from "../../chunk-XTKCNFLQ.js";
|
|
8
|
+
import "../../chunk-QVPEX7KY.js";
|
|
8
9
|
import {
|
|
9
10
|
COMMERCE_MODEL_CONFIGURATION_SCHEMA_VERSION,
|
|
10
11
|
CommerceModelConfigurationSchema,
|