authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-02-12 15:46:34-08:00
committergravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-02-12 15:46:34-08:00
log73bc60ef8a3c43126c40f317ec65ca38c0a045ba
tree1db4574941823d9df60a93f3b667fc1766b5e7c0
parent86e7bd000c2b13fb1f3fbf946d61a6ed16b6fa87

simp


1 files changed, 24 insertions(+), 40 deletions(-)

packages/contracts/src/provider.ts+24-40
......@@ -59,17 +59,7 @@ export const PROVIDER_SEND_TURN_MAX_ATTACHMENTS = 8;
5959export const PROVIDER_SEND_TURN_MAX_IMAGE_BYTES = 10 * 1024 * 1024;
6060export const PROVIDER_SEND_TURN_MAX_IMAGE_DATA_URL_CHARS = 14_000_000;
6161
62function validateImageDataUrl(value: { dataUrl: string }, ctx: z.RefinementCtx): void {
63 if (!value.dataUrl.startsWith("data:image/")) {
64 ctx.addIssue({
65 code: z.ZodIssueCode.custom,
66 message: "Image dataUrl must start with data:image/",
67 path: ["dataUrl"],
68 });
69 }
70}
71
72const providerSendTurnImageAttachmentBaseSchema = z.object({
62export const providerSendTurnImageAttachmentSchema = z.object({
7363 type: z.literal("image"),
7464 name: z.string().trim().min(1).max(255),
7565 mimeType: z
......@@ -82,35 +72,30 @@ const providerSendTurnImageAttachmentBaseSchema = z.object({
8272 dataUrl: z.string().trim().min(1).max(PROVIDER_SEND_TURN_MAX_IMAGE_DATA_URL_CHARS),
8373});
8474
85export const providerSendTurnImageAttachmentInputSchema =
86 providerSendTurnImageAttachmentBaseSchema.superRefine(validateImageDataUrl);
87
8875export const providerSendTurnAttachmentInputSchema = z.discriminatedUnion("type", [
89 providerSendTurnImageAttachmentBaseSchema,
90]).superRefine((value, ctx) => {
91 if (value.type === "image") {
92 validateImageDataUrl(value, ctx);
93 }
94});
76 providerSendTurnImageAttachmentSchema,
77]);
9578
96export const providerSendTurnInputSchema = z.object({
97 sessionId: z.string().min(1),
98 input: z.string().trim().min(1).max(PROVIDER_SEND_TURN_MAX_INPUT_CHARS).optional(),
99 attachments: z
100 .array(providerSendTurnAttachmentInputSchema)
101 .max(PROVIDER_SEND_TURN_MAX_ATTACHMENTS)
102 .default([]),
103 model: z.string().trim().min(1).optional(),
104 effort: z.string().trim().min(1).optional(),
105}).superRefine((value, ctx) => {
106 if (!value.input && value.attachments.length === 0) {
107 ctx.addIssue({
108 code: z.ZodIssueCode.custom,
109 message: "Either input text or at least one attachment is required",
110 path: ["input"],
111 });
112 }
113});
79export const providerSendTurnInputSchema = z
80 .object({
81 sessionId: z.string().min(1),
82 input: z.string().trim().min(1).max(PROVIDER_SEND_TURN_MAX_INPUT_CHARS).optional(),
83 attachments: z
84 .array(providerSendTurnAttachmentInputSchema)
85 .max(PROVIDER_SEND_TURN_MAX_ATTACHMENTS)
86 .default([]),
87 model: z.string().trim().min(1).optional(),
88 effort: z.string().trim().min(1).optional(),
89 })
90 .superRefine((value, ctx) => {
91 if (!value.input && value.attachments.length === 0) {
92 ctx.addIssue({
93 code: z.ZodIssueCode.custom,
94 message: "Either input text or at least one attachment is required",
95 path: ["input"],
96 });
97 }
98 });
11499
115100export const providerTurnStartResultSchema = z.object({
116101 threadId: z.string().min(1),
......@@ -159,8 +144,7 @@ export type ProviderApprovalDecision = z.infer<typeof providerApprovalDecisionSc
159144export type ProviderSessionStatus = z.infer<typeof providerSessionStatusSchema>;
160145export type ProviderSession = z.infer<typeof providerSessionSchema>;
161146export type ProviderSessionStartInput = z.input<typeof providerSessionStartInputSchema>;
162export type ProviderSendTurnImageAttachment = z.infer<typeof providerSendTurnImageAttachmentInputSchema>;
163export type ProviderSendTurnImageAttachmentInput = z.input<typeof providerSendTurnImageAttachmentInputSchema>;
147export type ProviderSendTurnImageAttachment = z.infer<typeof providerSendTurnImageAttachmentSchema>;
164148export type ProviderSendTurnAttachment = z.infer<typeof providerSendTurnAttachmentInputSchema>;
165149export type ProviderSendTurnAttachmentInput = z.input<typeof providerSendTurnAttachmentInputSchema>;
166150export type ProviderSendTurnInput = z.input<typeof providerSendTurnInputSchema>;