@v0-sdk/react 0.5.0 → 3.0.0-canary.9ae7b76
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/README.md +83 -256
- package/dist/index-Byqc8Ogm.d.cts +111 -0
- package/dist/index-Byqc8Ogm.d.cts.map +1 -0
- package/dist/index-CknrgtQb.d.mts +111 -0
- package/dist/index-CknrgtQb.d.mts.map +1 -0
- package/dist/index.cjs +2 -1251
- package/dist/index.d.cts +3 -0
- package/dist/index.d.mts +3 -0
- package/dist/index.mjs +4 -0
- package/dist/index.mjs.map +1 -0
- package/dist/request-C1Ues3qu.cjs +1 -0
- package/dist/request-enP5rNQ_.mjs +2 -0
- package/dist/request-enP5rNQ_.mjs.map +1 -0
- package/dist/swr.cjs +1 -0
- package/dist/swr.d.cts +1009 -0
- package/dist/swr.d.cts.map +1 -0
- package/dist/swr.d.mts +1009 -0
- package/dist/swr.d.mts.map +1 -0
- package/dist/swr.mjs +2 -0
- package/dist/swr.mjs.map +1 -0
- package/package.json +66 -44
- package/dist/index.d.ts +0 -594
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -1202
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { C as toV0UIMessage, S as serializeDates, T as toV0UIMessages, _ as Serialized, a as V0Fetch, b as V0UIMessageMetadata, c as V0RequestOptions, d as V0ResponseTransformer, f as getResumableV0Assistant, g as v0StreamToUIMessageStream, h as V0SnapshotChunkReducer, i as V0TransportUrls, l as V0ResponseError, m as shouldResumeV0Chat, n as V0TransportChatUrl, o as V0HttpMethod, p as prependV0UIMessageHistory, r as V0TransportOptions, s as V0Operation, t as V0Transport, u as V0ResponseKind, v as V0UIDataTypes, w as toV0UIMessageMetadata, x as getV0PartId, y as V0UIMessage } from "./index-Byqc8Ogm.cjs";
|
|
2
|
+
export * from "v0/browser";
|
|
3
|
+
export { Serialized, V0Fetch, V0HttpMethod, V0Operation, V0RequestOptions, V0ResponseError, V0ResponseKind, V0ResponseTransformer, V0SnapshotChunkReducer, V0Transport, V0TransportChatUrl, V0TransportOptions, V0TransportUrls, V0UIDataTypes, V0UIMessage, V0UIMessageMetadata, getResumableV0Assistant, getV0PartId, prependV0UIMessageHistory, serializeDates, shouldResumeV0Chat, toV0UIMessage, toV0UIMessageMetadata, toV0UIMessages, v0StreamToUIMessageStream };
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { C as toV0UIMessage, S as serializeDates, T as toV0UIMessages, _ as Serialized, a as V0Fetch, b as V0UIMessageMetadata, c as V0RequestOptions, d as V0ResponseTransformer, f as getResumableV0Assistant, g as v0StreamToUIMessageStream, h as V0SnapshotChunkReducer, i as V0TransportUrls, l as V0ResponseError, m as shouldResumeV0Chat, n as V0TransportChatUrl, o as V0HttpMethod, p as prependV0UIMessageHistory, r as V0TransportOptions, s as V0Operation, t as V0Transport, u as V0ResponseKind, v as V0UIDataTypes, w as toV0UIMessageMetadata, x as getV0PartId, y as V0UIMessage } from "./index-CknrgtQb.mjs";
|
|
2
|
+
export * from "v0/browser";
|
|
3
|
+
export { Serialized, V0Fetch, V0HttpMethod, V0Operation, V0RequestOptions, V0ResponseError, V0ResponseKind, V0ResponseTransformer, V0SnapshotChunkReducer, V0Transport, V0TransportChatUrl, V0TransportOptions, V0TransportUrls, V0UIDataTypes, V0UIMessage, V0UIMessageMetadata, getResumableV0Assistant, getV0PartId, prependV0UIMessageHistory, serializeDates, shouldResumeV0Chat, toV0UIMessage, toV0UIMessageMetadata, toV0UIMessages, v0StreamToUIMessageStream };
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{n as e,t}from"./request-enP5rNQ_.mjs";import{readV0Stream as n}from"v0/browser";function r(e){let t=[];for(let n of e.attachments??[])t.push({type:`file`,url:n.url,mediaType:n.contentType||`application/octet-stream`,...n.name?{filename:n.name}:{}});return e.parts.forEach((n,r)=>{switch(n.type){case`text`:t.push({type:`text`,text:n.text,state:n.finishedAt||e.finishReason!==null?`done`:`streaming`});break;case`thinking`:t.push({type:`reasoning`,text:n.text,state:n.finishedAt||e.finishReason!==null?`done`:`streaming`});break;default:{let{type:i,...a}=n;t.push({type:`data-v0-${i}`,id:s(e.id,r),data:o(a)})}}}),{id:e.id,role:e.role,metadata:a(e),parts:t}}function i(e,t={}){return(t.newestFirst===!1?e:[...e].reverse()).map(r)}function a(e){let{role:t,content:n,parts:r,...i}=e;return o(i)}function o(e){return e instanceof Date?e.toISOString():Array.isArray(e)?e.map(e=>o(e)):typeof e==`object`&&e?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,o(t)])):e}function s(e,t){return`${e}:part:${t}`}var c=class{previous;metadata;metadataJson;started=!1;finished=!1;activeText=new Map;textPartAttempts=new Map;constructor(e){this.previous=e,this.metadata=e?a(e):void 0}push(e,t=e.status===`done`){let n=u(e,this.previous);if(!n||this.finished)return[];let r=[];this.metadata=d(e,n,this.metadata);let i=JSON.stringify(this.metadata),a=i!==this.metadataJson;if(this.started?a&&(r.push({type:`message-metadata`,messageMetadata:this.metadata}),this.metadataJson=i):(r.push({type:`start`,messageId:n.id,messageMetadata:this.metadata}),this.started=!0,this.metadataJson=i),n.parts.forEach((e,t)=>{let i=this.previous?.parts[t];switch(e.type){case`text`:case`thinking`:r.push(...this.updateTextPart(n,e,i,t));break;default:{let a=f(e);(i?.type!==e.type||JSON.stringify(a)!==JSON.stringify(f(i)))&&r.push({type:`data-v0-${e.type}`,id:s(n.id,t),data:a})}}}),this.previous=n,t){for(let{id:e,type:t}of this.activeText.values())r.push({type:t===`text`?`text-end`:`reasoning-end`,id:e});this.activeText.clear(),r.push({type:`finish`,...n.finishReason?{finishReason:n.finishReason}:{},messageMetadata:this.metadata}),this.finished=!0}return r}updateTextPart(e,t,n,r){let i=[],a=n?.type===t.type?n.text:``,o=t.text.startsWith(a)?t.text.slice(a.length):``,c=this.activeText.get(r);if(c&&c.type!==t.type&&(i.push({type:c.type===`text`?`text-end`:`reasoning-end`,id:c.id}),this.activeText.delete(r),c=void 0),(!n||o)&&!c){let a=this.textPartAttempts.get(r)??0,o=a===0?n?.type===t.type?`:continuation`:``:`:continuation:${a}`,l=`${s(e.id,r)}${o}`;this.textPartAttempts.set(r,a+1),c={id:l,type:t.type},this.activeText.set(r,c),i.push({type:t.type===`text`?`text-start`:`reasoning-start`,id:l})}return o&&c&&i.push({type:t.type===`text`?`text-delta`:`reasoning-delta`,id:c.id,delta:o}),c&&t.finishedAt&&(i.push({type:t.type===`text`?`text-end`:`reasoning-end`,id:c.id}),this.activeText.delete(r)),i}};function l(e,t={}){let n=new c(t.seed),r,i=!1,a=!1,o=()=>{a||(a=!0,t.onClose?.())};return new ReadableStream({async start(a){try{for(r=e.stream[Symbol.asyncIterator]();!i;){let e=await r.next();if(e.done)break;t.onUpdate?.(e.value);for(let t of n.push(e.value))a.enqueue(t)}if(!i){let r=await e.final;t.onUpdate?.(r);for(let e of n.push(r,!0))a.enqueue(e);a.close()}}catch(e){i||a.error(e)}finally{o()}},async cancel(e){i=!0,t.abort?.(e),await r?.return?.(),o()}})}function u(e,t){if(e.message)return{id:e.message.id,chatId:e.message.chatId,parts:e.parts,finishReason:e.message.finishReason};if(!t&&e.chat&&(e.event.object===`message.parts.chunk`||e.event.object===`message.usage`))return p(e);if(t&&e.status===`done`||t&&(e.event.object===`message.parts.chunk`||e.event.object===`message.usage`))return{...t,parts:e.parts}}function d(e,t,n){return e.message?{...a(e.message),...e.usage?{usage:e.usage}:{}}:{...n,id:t.id,chatId:e.chat?.id??n?.chatId??t.chatId,...e.usage?{usage:e.usage}:{}}}function f(e){if(!e)return;let{type:t,...n}=e;return o(n)}function p(e){return{id:e.event.id,chatId:e.chat.id,parts:e.parts,finishReason:null}}function m(e){let t=e[0];return t?.role===`assistant`&&t.finishReason===null}function h(e){return m(e)?e[0]:void 0}function g(e,t){let n=new Set(e.map(e=>e.id));return[...i(t).filter(e=>!n.has(e.id)),...e]}const _={id:`ai-sdk.stream`,method:`POST`,response:`stream`};var v=class{currentChatId;reconnecting=!1;seed;options;constructor(e){this.options=e,this.currentChatId=e.chatId??e.messages?.[0]?.chatId,this.seed=h(e.messages??[])}get chatId(){return this.currentChatId}async sendMessages(t){if(t.trigger===`regenerate-message`)throw Error(`V0Transport does not support regeneration because the v0 API has no regeneration operation`);let r=[...t.messages].reverse().find(e=>e.role===`user`);if(!r)throw Error(`V0Transport requires a user message to submit`);let i=r.parts.filter(e=>e.type===`text`).map(e=>e.text).join(`
|
|
2
|
+
|
|
3
|
+
`),a=r.parts.filter(e=>e.type===`file`).map(e=>({url:e.url})),o=S(t.body)?t.body:{},s=new AbortController,c=b(this.options.request,t.headers,x(this.options.request?.signal,t.abortSignal,s.signal));return l(n(await e(this.currentChatId?y(this.options.urls.send,this.currentChatId):this.options.urls.create,_,this.currentChatId?{...this.options.send,...o,message:i,...a.length?{attachments:a}:{}}:{...this.options.create,...o,message:i,...a.length?{attachments:a}:{}},c)),{onUpdate:e=>this.captureChatId(e),abort:e=>s.abort(e)})}async reconnectToStream(t){if(this.reconnecting)return null;let r=this.currentChatId??t.chatId;if(!r||!this.seed)return null;this.reconnecting=!0;let i=new AbortController;try{let a=await e(y(this.options.urls.resume,r),_,void 0,b(this.options.request,t.headers,x(this.options.request?.signal,i.signal)));return a.status===204?(this.reconnecting=!1,null):l(n(a),{seed:this.seed,onUpdate:e=>this.captureChatId(e),abort:e=>i.abort(e),onClose:()=>{this.reconnecting=!1}})}catch(e){throw this.reconnecting=!1,e}}captureChatId(e){let t=e.chat?.id??e.message?.chatId;!t||t===this.currentChatId||(this.currentChatId=t,this.options.onChatCreated?.(t))}};function y(e,t){return typeof e==`function`?e(t):e}function b(e,t,n){let r=new Headers(e?.headers);return new Headers(t).forEach((e,t)=>r.set(t,e)),{...e,headers:r,signal:n}}function x(...e){let t=e.filter(e=>e!=null);if(t.length===1)return t[0];let n=new AbortController,r=e=>{n.signal.aborted||n.abort(e.reason)};for(let e of t){if(e.aborted){r(e);break}e.addEventListener(`abort`,()=>r(e),{once:!0})}return n.signal}function S(e){return typeof e==`object`&&!!e}export{t as V0ResponseError,c as V0SnapshotChunkReducer,v as V0Transport,h as getResumableV0Assistant,s as getV0PartId,g as prependV0UIMessageHistory,o as serializeDates,m as shouldResumeV0Chat,r as toV0UIMessage,a as toV0UIMessageMetadata,i as toV0UIMessages,l as v0StreamToUIMessageStream};
|
|
4
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/chat/messages.ts","../src/chat/chunks.ts","../src/chat/composition.ts","../src/chat/transport.ts"],"sourcesContent":["import type { UIMessage } from 'ai'\nimport type { Message } from 'v0/browser'\n\ntype V0Part = Message['parts'][number]\nexport type Serialized<T> = T extends Date\n ? string\n : T extends Array<infer Item>\n ? Array<Serialized<Item>>\n : T extends object\n ? { [Key in keyof T]: Serialized<T[Key]> }\n : T\n\nexport type V0UIMessageMetadata = Serialized<Partial<Omit<Message, 'role' | 'content' | 'parts'>>>\n\ntype V0DataPart = Exclude<V0Part, { type: 'text' | 'thinking' }>\n\nexport type V0UIDataTypes = {\n [Part in V0DataPart as `v0-${Part['type']}`]: Serialized<Omit<Part, 'type'>>\n}\n\nexport type V0UIMessage = UIMessage<V0UIMessageMetadata, V0UIDataTypes>\n\n/** Converts a persisted v0 message to an AI SDK UI message. */\nexport function toV0UIMessage(message: Message): V0UIMessage {\n const parts: V0UIMessage['parts'] = []\n\n for (const attachment of message.attachments ?? []) {\n parts.push({\n type: 'file',\n url: attachment.url,\n mediaType: attachment.contentType || 'application/octet-stream',\n ...(attachment.name ? { filename: attachment.name } : {}),\n })\n }\n\n message.parts.forEach((part, index) => {\n switch (part.type) {\n case 'text':\n parts.push({\n type: 'text',\n text: part.text,\n state: part.finishedAt || message.finishReason !== null ? 'done' : 'streaming',\n })\n break\n case 'thinking':\n parts.push({\n type: 'reasoning',\n text: part.text,\n state: part.finishedAt || message.finishReason !== null ? 'done' : 'streaming',\n })\n break\n default: {\n const { type, ...data } = part\n parts.push({\n type: `data-v0-${type}`,\n id: getV0PartId(message.id, index),\n data: serializeDates(data),\n } as V0UIMessage['parts'][number])\n }\n }\n })\n\n return {\n id: message.id,\n role: message.role,\n metadata: toV0UIMessageMetadata(message),\n parts,\n }\n}\n\n/** Converts SDK history to chronological AI SDK UI messages. */\nexport function toV0UIMessages(\n messages: readonly Message[],\n options: { newestFirst?: boolean } = {},\n): V0UIMessage[] {\n const source = options.newestFirst === false ? messages : [...messages].reverse()\n return source.map(toV0UIMessage)\n}\n\nexport function toV0UIMessageMetadata(message: Message): V0UIMessageMetadata {\n const { role: _role, content: _content, parts: _parts, ...metadata } = message\n return serializeDates(metadata)\n}\n\nexport function serializeDates<T>(value: T): Serialized<T> {\n if (value instanceof Date) return value.toISOString() as Serialized<T>\n if (Array.isArray(value)) {\n return value.map((item) => serializeDates(item)) as Serialized<T>\n }\n if (value !== null && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [key, serializeDates(entry)]),\n ) as Serialized<T>\n }\n return value as Serialized<T>\n}\n\nexport function getV0PartId(messageId: string, index: number): string {\n return `${messageId}:part:${index}`\n}\n","import type { UIMessageChunk } from 'ai'\nimport type { Message, V0StreamFinal, V0StreamResult, V0StreamUpdate } from 'v0/browser'\n\nimport {\n getV0PartId,\n serializeDates,\n toV0UIMessageMetadata,\n type V0UIDataTypes,\n type V0UIMessageMetadata,\n} from './messages'\n\ntype V0Chunk = UIMessageChunk<V0UIMessageMetadata, V0UIDataTypes>\ntype V0Part = Message['parts'][number]\ntype V0MessageSnapshot = Pick<Message, 'id' | 'chatId' | 'parts' | 'finishReason'>\n\n/** Converts accumulated v0 message snapshots into incremental AI SDK chunks. */\nexport class V0SnapshotChunkReducer {\n private previous: V0MessageSnapshot | undefined\n private metadata: V0UIMessageMetadata | undefined\n private metadataJson: string | undefined\n private started = false\n private finished = false\n private readonly activeText = new Map<number, { id: string; type: 'text' | 'thinking' }>()\n private readonly textPartAttempts = new Map<number, number>()\n\n constructor(seed?: Message) {\n this.previous = seed\n this.metadata = seed ? toV0UIMessageMetadata(seed) : undefined\n }\n\n push(update: V0StreamUpdate | V0StreamFinal, final = update.status === 'done'): V0Chunk[] {\n const message = getMessageSnapshot(update, this.previous)\n if (!message || this.finished) return []\n\n const chunks: V0Chunk[] = []\n this.metadata = getUpdateMetadata(update, message, this.metadata)\n const metadataJson = JSON.stringify(this.metadata)\n const metadataChanged = metadataJson !== this.metadataJson\n if (!this.started) {\n chunks.push({\n type: 'start',\n messageId: message.id,\n messageMetadata: this.metadata,\n })\n this.started = true\n this.metadataJson = metadataJson\n } else if (metadataChanged) {\n chunks.push({\n type: 'message-metadata',\n messageMetadata: this.metadata,\n })\n this.metadataJson = metadataJson\n }\n\n message.parts.forEach((part, index) => {\n const previousPart = this.previous?.parts[index]\n switch (part.type) {\n case 'text':\n case 'thinking':\n chunks.push(...this.updateTextPart(message, part, previousPart, index))\n break\n default: {\n const data = serializePartData(part)\n if (\n previousPart?.type !== part.type ||\n JSON.stringify(data) !== JSON.stringify(serializePartData(previousPart))\n ) {\n chunks.push({\n type: `data-v0-${part.type}`,\n id: getV0PartId(message.id, index),\n data,\n } as V0Chunk)\n }\n }\n }\n })\n\n this.previous = message\n\n if (final) {\n for (const { id, type } of this.activeText.values()) {\n chunks.push({ type: type === 'text' ? 'text-end' : 'reasoning-end', id })\n }\n this.activeText.clear()\n chunks.push({\n type: 'finish',\n ...(message.finishReason ? { finishReason: message.finishReason } : {}),\n messageMetadata: this.metadata,\n })\n this.finished = true\n }\n\n return chunks\n }\n\n private updateTextPart(\n message: V0MessageSnapshot,\n part: Extract<V0Part, { type: 'text' | 'thinking' }>,\n previousPart: V0Part | undefined,\n index: number,\n ): V0Chunk[] {\n const chunks: V0Chunk[] = []\n const previousText = previousPart?.type === part.type ? previousPart.text : ''\n // AI SDK text chunks are append-only, so non-append snapshot rewrites cannot\n // be represented without corrupting the already-rendered text.\n const delta = part.text.startsWith(previousText) ? part.text.slice(previousText.length) : ''\n let active = this.activeText.get(index)\n\n if (active && active.type !== part.type) {\n chunks.push({ type: active.type === 'text' ? 'text-end' : 'reasoning-end', id: active.id })\n this.activeText.delete(index)\n active = undefined\n }\n\n if ((!previousPart || delta) && !active) {\n const attempt = this.textPartAttempts.get(index) ?? 0\n const suffix =\n attempt === 0\n ? previousPart?.type === part.type\n ? ':continuation'\n : ''\n : `:continuation:${attempt}`\n const id = `${getV0PartId(message.id, index)}${suffix}`\n this.textPartAttempts.set(index, attempt + 1)\n active = { id, type: part.type }\n this.activeText.set(index, active)\n chunks.push({ type: part.type === 'text' ? 'text-start' : 'reasoning-start', id })\n }\n\n if (delta && active) {\n chunks.push({\n type: part.type === 'text' ? 'text-delta' : 'reasoning-delta',\n id: active.id,\n delta,\n })\n }\n\n if (active && part.finishedAt) {\n chunks.push({ type: part.type === 'text' ? 'text-end' : 'reasoning-end', id: active.id })\n this.activeText.delete(index)\n }\n\n return chunks\n }\n}\n\n/** Adapts a parsed v0 stream to the stream consumed by AI SDK `useChat`. */\nexport function v0StreamToUIMessageStream(\n result: V0StreamResult,\n options: {\n seed?: Message\n onUpdate?: (update: V0StreamUpdate | V0StreamFinal) => void\n onClose?: () => void\n abort?: (reason?: unknown) => void\n } = {},\n): ReadableStream<V0Chunk> {\n const reducer = new V0SnapshotChunkReducer(options.seed)\n let iterator: AsyncIterator<V0StreamUpdate> | undefined\n let canceled = false\n let closed = false\n const close = () => {\n if (closed) return\n closed = true\n options.onClose?.()\n }\n\n return new ReadableStream<V0Chunk>({\n async start(controller) {\n try {\n iterator = result.stream[Symbol.asyncIterator]()\n while (!canceled) {\n const next = await iterator.next()\n if (next.done) break\n options.onUpdate?.(next.value)\n for (const chunk of reducer.push(next.value)) controller.enqueue(chunk)\n }\n\n if (!canceled) {\n const final = await result.final\n options.onUpdate?.(final)\n for (const chunk of reducer.push(final, true)) controller.enqueue(chunk)\n controller.close()\n }\n } catch (error) {\n if (!canceled) controller.error(error)\n } finally {\n close()\n }\n },\n async cancel(reason) {\n canceled = true\n options.abort?.(reason)\n await iterator?.return?.()\n close()\n },\n })\n}\n\nfunction getMessageSnapshot(\n update: V0StreamUpdate | V0StreamFinal,\n previous: V0MessageSnapshot | undefined,\n): V0MessageSnapshot | undefined {\n if (update.message) {\n return {\n id: update.message.id,\n chatId: update.message.chatId,\n parts: update.parts,\n finishReason: update.message.finishReason,\n }\n }\n\n if (\n !previous &&\n update.chat &&\n (update.event.object === 'message.parts.chunk' || update.event.object === 'message.usage')\n ) {\n return createAssistantSnapshot(update)\n }\n\n if (previous && update.status === 'done') {\n return { ...previous, parts: update.parts }\n }\n\n if (\n previous &&\n (update.event.object === 'message.parts.chunk' || update.event.object === 'message.usage')\n ) {\n return { ...previous, parts: update.parts }\n }\n\n return undefined\n}\n\nfunction getUpdateMetadata(\n update: V0StreamUpdate | V0StreamFinal,\n message: V0MessageSnapshot,\n previous: V0UIMessageMetadata | undefined,\n): V0UIMessageMetadata {\n if (update.message) {\n return {\n ...toV0UIMessageMetadata(update.message),\n ...(update.usage ? { usage: update.usage } : {}),\n }\n }\n\n return {\n ...previous,\n id: message.id,\n chatId: update.chat?.id ?? previous?.chatId ?? message.chatId,\n ...(update.usage ? { usage: update.usage } : {}),\n }\n}\n\nfunction serializePartData(part: V0Part | undefined): unknown {\n if (!part) return undefined\n const { type: _type, ...data } = part\n return serializeDates(data)\n}\n\nfunction createAssistantSnapshot(update: V0StreamUpdate | V0StreamFinal): V0MessageSnapshot {\n return {\n id: update.event.id,\n chatId: update.chat!.id,\n parts: update.parts,\n finishReason: null,\n }\n}\n","import type { Message } from 'v0/browser'\n\nimport { toV0UIMessages, type V0UIMessage } from './messages'\n\n/** True only when the newest SDK message is an unfinished assistant. */\nexport function shouldResumeV0Chat(messages: readonly Message[]): boolean {\n const newest = messages[0]\n return newest?.role === 'assistant' && newest.finishReason === null\n}\n\nexport function getResumableV0Assistant(messages: readonly Message[]): Message | undefined {\n return shouldResumeV0Chat(messages) ? messages[0] : undefined\n}\n\n/**\n * Prepends an older newest-first SDK page without replacing active AI SDK\n * message objects already present in local state.\n */\nexport function prependV0UIMessageHistory(\n current: readonly V0UIMessage[],\n olderNewestFirst: readonly Message[],\n): V0UIMessage[] {\n const currentIds = new Set(current.map((message) => message.id))\n const older = toV0UIMessages(olderNewestFirst).filter((message) => !currentIds.has(message.id))\n return [...older, ...current]\n}\n","import type { ChatTransport, UIMessageChunk } from 'ai'\nimport {\n readV0Stream,\n type ChatsCreateStreamData,\n type Message,\n type MessagesSendStreamData,\n type V0StreamFinal,\n type V0StreamUpdate,\n} from 'v0/browser'\n\nimport { requestV0Operation, type V0Operation, type V0RequestOptions } from '../request'\nimport { v0StreamToUIMessageStream } from './chunks'\nimport { getResumableV0Assistant } from './composition'\nimport type { V0UIMessage } from './messages'\n\nexport type V0TransportChatUrl = string | ((chatId: string) => string)\n\nexport interface V0TransportUrls {\n create: string\n send: V0TransportChatUrl\n resume: V0TransportChatUrl\n}\n\nexport interface V0TransportOptions {\n urls: V0TransportUrls\n chatId?: string\n /** Newest-first SDK history, used to seed a resumed assistant. */\n messages?: readonly Message[]\n create?: Omit<ChatsCreateStreamData['body'], 'message' | 'attachments'>\n send?: Omit<MessagesSendStreamData['body'], 'message' | 'attachments'>\n request?: V0RequestOptions\n onChatCreated?: (chatId: string) => void\n}\n\nconst streamOperation: V0Operation<Response> = {\n id: 'ai-sdk.stream',\n method: 'POST',\n response: 'stream',\n}\n\n/** AI SDK chat transport backed by caller-owned v0 proxy routes. */\nexport class V0Transport implements ChatTransport<V0UIMessage> {\n private currentChatId: string | undefined\n private reconnecting = false\n private readonly seed: Message | undefined\n private readonly options: V0TransportOptions\n\n constructor(options: V0TransportOptions) {\n this.options = options\n this.currentChatId = options.chatId ?? options.messages?.[0]?.chatId\n this.seed = getResumableV0Assistant(options.messages ?? [])\n }\n\n get chatId(): string | undefined {\n return this.currentChatId\n }\n\n async sendMessages(\n options: Parameters<ChatTransport<V0UIMessage>['sendMessages']>[0],\n ): Promise<ReadableStream<UIMessageChunk>> {\n if (options.trigger === 'regenerate-message') {\n throw new Error(\n 'V0Transport does not support regeneration because the v0 API has no regeneration operation',\n )\n }\n\n const userMessage = [...options.messages].reverse().find((message) => message.role === 'user')\n if (!userMessage) throw new Error('V0Transport requires a user message to submit')\n\n const message = userMessage.parts\n .filter((part): part is Extract<typeof part, { type: 'text' }> => part.type === 'text')\n .map((part) => part.text)\n .join('\\n\\n')\n const attachments = userMessage.parts\n .filter((part): part is Extract<typeof part, { type: 'file' }> => part.type === 'file')\n .map((part) => ({ url: part.url }))\n const extraBody = isObject(options.body) ? options.body : {}\n const controller = new AbortController()\n const request = mergeRequestOptions(\n this.options.request,\n options.headers,\n combineSignals(this.options.request?.signal, options.abortSignal, controller.signal),\n )\n\n const url = this.currentChatId\n ? resolveChatUrl(this.options.urls.send, this.currentChatId)\n : this.options.urls.create\n const body = this.currentChatId\n ? ({\n ...this.options.send,\n ...extraBody,\n message,\n ...(attachments.length ? { attachments } : {}),\n } satisfies MessagesSendStreamData['body'])\n : ({\n ...this.options.create,\n ...extraBody,\n message,\n ...(attachments.length ? { attachments } : {}),\n } satisfies ChatsCreateStreamData['body'])\n\n const response = await requestV0Operation<Response>(url, streamOperation, body, request)\n\n return v0StreamToUIMessageStream(readV0Stream(response), {\n onUpdate: (update) => this.captureChatId(update),\n abort: (reason) => controller.abort(reason),\n })\n }\n\n async reconnectToStream(\n options: Parameters<ChatTransport<V0UIMessage>['reconnectToStream']>[0],\n ): Promise<ReadableStream<UIMessageChunk> | null> {\n if (this.reconnecting) return null\n const chatId = this.currentChatId ?? options.chatId\n if (!chatId || !this.seed) return null\n\n this.reconnecting = true\n const controller = new AbortController()\n\n try {\n const url = resolveChatUrl(this.options.urls.resume, chatId)\n const response = await requestV0Operation<Response>(\n url,\n streamOperation,\n undefined,\n mergeRequestOptions(\n this.options.request,\n options.headers,\n combineSignals(this.options.request?.signal, controller.signal),\n ),\n )\n\n if (response.status === 204) {\n this.reconnecting = false\n return null\n }\n\n return v0StreamToUIMessageStream(readV0Stream(response), {\n seed: this.seed,\n onUpdate: (update) => this.captureChatId(update),\n abort: (reason) => controller.abort(reason),\n onClose: () => {\n this.reconnecting = false\n },\n })\n } catch (error) {\n this.reconnecting = false\n throw error\n }\n }\n\n private captureChatId(update: V0StreamUpdate | V0StreamFinal) {\n const chatId = update.chat?.id ?? update.message?.chatId\n if (!chatId || chatId === this.currentChatId) return\n this.currentChatId = chatId\n this.options.onChatCreated?.(chatId)\n }\n}\n\nfunction resolveChatUrl(url: V0TransportChatUrl, chatId: string): string {\n return typeof url === 'function' ? url(chatId) : url\n}\n\nfunction mergeRequestOptions(\n request: V0RequestOptions | undefined,\n extraHeaders: HeadersInit | undefined,\n signal: AbortSignal,\n): V0RequestOptions {\n const headers = new Headers(request?.headers)\n new Headers(extraHeaders).forEach((value, key) => headers.set(key, value))\n return { ...request, headers, signal }\n}\n\nfunction combineSignals(...values: Array<AbortSignal | null | undefined>): AbortSignal {\n const signals = values.filter(\n (value): value is AbortSignal => value !== null && value !== undefined,\n )\n if (signals.length === 1) return signals[0]!\n\n const controller = new AbortController()\n const abort = (signal: AbortSignal) => {\n if (!controller.signal.aborted) controller.abort(signal.reason)\n }\n\n for (const signal of signals) {\n if (signal.aborted) {\n abort(signal)\n break\n }\n signal.addEventListener('abort', () => abort(signal), { once: true })\n }\n return controller.signal\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require(`./swr.cjs`);let e=require(`v0/browser`);var t=class extends Error{status;statusText;body;response;constructor(e,t,n){super(n??c(e,t)),this.name=`V0ResponseError`,this.status=e.status,this.statusText=e.statusText,this.body=t,this.response=e}};async function n(e,t,n,o={}){let s=r(o),c=i(s,e,t.method===`GET`?n:void 0),l=await s.request({...a(o),baseUrl:c.baseUrl,body:t.method===`GET`?void 0:n,method:t.method,parseAs:t.response===`stream`?`stream`:t.response===`blob`?`blob`:`auto`,responseStyle:`fields`,throwOnError:!0,url:c.path});return t.response===`stream`?l.response:t.response===`blob`?l.data:t.transform?t.transform(l.data):l.data}function r(n){let r=(0,e.createClient)((0,e.createConfig)({...a(n)}));return r.interceptors.error.use((e,n)=>!n||e instanceof t?e:new t(n,e)),r}function i(e,t,n){let r=o(t),i=new URL(t,r?void 0:`http://v0.local`),a=e.buildUrl({baseUrl:r?i.origin:``,query:s(n)?n:void 0,url:i.pathname}),c=new URL(a,r?void 0:`http://v0.local`);for(let[e,t]of i.searchParams)c.searchParams.append(e,t);return{baseUrl:r?c.origin:``,path:`${c.pathname}${c.search}`}}function a(e){return e}function o(e){return/^[a-z][a-z\d+.-]*:/i.test(e)}function s(e){return typeof e==`object`&&!!e}function c(e,t){return typeof t==`object`&&t&&`message`in t&&typeof t.message==`string`?t.message:typeof t==`string`&&t.trim()?t:`v0 proxy request failed: ${e.status} ${e.statusText}`.trim()}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createClient as e,createConfig as t}from"v0/browser";var n=class extends Error{status;statusText;body;response;constructor(e,t,n){super(n??l(e,t)),this.name=`V0ResponseError`,this.status=e.status,this.statusText=e.statusText,this.body=t,this.response=e}};async function r(e,t,n,r={}){let s=i(r),c=a(s,e,t.method===`GET`?n:void 0),l=await s.request({...o(r),baseUrl:c.baseUrl,body:t.method===`GET`?void 0:n,method:t.method,parseAs:t.response===`stream`?`stream`:t.response===`blob`?`blob`:`auto`,responseStyle:`fields`,throwOnError:!0,url:c.path});return t.response===`stream`?l.response:t.response===`blob`?l.data:t.transform?t.transform(l.data):l.data}function i(r){let i=e(t({...o(r)}));return i.interceptors.error.use((e,t)=>!t||e instanceof n?e:new n(t,e)),i}function a(e,t,n){let r=s(t),i=new URL(t,r?void 0:`http://v0.local`),a=e.buildUrl({baseUrl:r?i.origin:``,query:c(n)?n:void 0,url:i.pathname}),o=new URL(a,r?void 0:`http://v0.local`);for(let[e,t]of i.searchParams)o.searchParams.append(e,t);return{baseUrl:r?o.origin:``,path:`${o.pathname}${o.search}`}}function o(e){return e}function s(e){return/^[a-z][a-z\d+.-]*:/i.test(e)}function c(e){return typeof e==`object`&&!!e}function l(e,t){return typeof t==`object`&&t&&`message`in t&&typeof t.message==`string`?t.message:typeof t==`string`&&t.trim()?t:`v0 proxy request failed: ${e.status} ${e.statusText}`.trim()}export{r as n,n as t};
|
|
2
|
+
//# sourceMappingURL=request-enP5rNQ_.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-enP5rNQ_.mjs","names":[],"sources":["../src/request.ts"],"sourcesContent":["import { createClient, createConfig, type Client, type ClientOptions } from 'v0/browser'\n\nexport type V0Fetch = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>\n\nexport interface V0RequestOptions extends Omit<RequestInit, 'body' | 'method'> {\n /** Override the Fetch implementation for this hook. */\n fetch?: V0Fetch\n}\n\nexport type V0HttpMethod = Uppercase<'get' | 'post' | 'patch' | 'delete' | 'put'>\nexport type V0ResponseKind = 'json' | 'stream' | 'blob'\nexport type V0ResponseTransformer<Data> = (data: unknown) => Data | Promise<Data>\n\nexport interface V0Operation<Data> {\n id: string\n method: V0HttpMethod\n response: V0ResponseKind\n transform?: V0ResponseTransformer<Data>\n}\n\n/** HTTP error returned by the application's v0 proxy. */\nexport class V0ResponseError<Body = unknown> extends Error {\n readonly status: number\n readonly statusText: string\n readonly body: Body\n readonly response: Response\n\n constructor(response: Response, body: Body, message?: string) {\n super(message ?? getErrorMessage(response, body))\n this.name = 'V0ResponseError'\n this.status = response.status\n this.statusText = response.statusText\n this.body = body\n this.response = response\n }\n}\n\nexport async function requestV0Operation<Data, ErrorBody = unknown>(\n url: string,\n operation: V0Operation<Data>,\n input: unknown,\n options: V0RequestOptions = {},\n): Promise<Data> {\n const client = createRequestClient(options)\n const resolved = buildRequestUrl(client, url, operation.method === 'GET' ? input : undefined)\n const result = await client.request<unknown, ErrorBody, true, 'fields'>({\n ...toClientOptions(options),\n baseUrl: resolved.baseUrl,\n body: operation.method === 'GET' ? undefined : input,\n method: operation.method,\n parseAs:\n operation.response === 'stream' ? 'stream' : operation.response === 'blob' ? 'blob' : 'auto',\n responseStyle: 'fields',\n throwOnError: true,\n url: resolved.path,\n })\n\n if (operation.response === 'stream') {\n return result.response as Data\n }\n if (operation.response === 'blob') {\n return result.data as Data\n }\n return operation.transform ? operation.transform(result.data) : (result.data as Data)\n}\n\nfunction createRequestClient(options: V0RequestOptions): Client {\n const client = createClient(\n createConfig<ClientOptions>({\n ...toClientOptions(options),\n }),\n )\n\n client.interceptors.error.use((error, response) => {\n if (!response || error instanceof V0ResponseError) {\n return error\n }\n return new V0ResponseError(response, error)\n })\n\n return client\n}\n\nfunction buildRequestUrl(client: Client, value: string, query: unknown) {\n const absolute = isAbsoluteUrl(value)\n const parsed = new URL(value, absolute ? undefined : 'http://v0.local')\n const generated = client.buildUrl({\n baseUrl: absolute ? parsed.origin : '',\n query: isRecord(query) ? query : undefined,\n url: parsed.pathname,\n })\n const generatedUrl = new URL(generated, absolute ? undefined : 'http://v0.local')\n\n for (const [key, item] of parsed.searchParams) {\n generatedUrl.searchParams.append(key, item)\n }\n\n return {\n baseUrl: absolute ? generatedUrl.origin : '',\n path: `${generatedUrl.pathname}${generatedUrl.search}`,\n }\n}\n\nfunction toClientOptions(options: V0RequestOptions) {\n return options as Omit<V0RequestOptions, 'fetch'> & {\n fetch?: typeof globalThis.fetch\n }\n}\n\nfunction isAbsoluteUrl(value: string): boolean {\n return /^[a-z][a-z\\d+.-]*:/i.test(value)\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null\n}\n\nfunction getErrorMessage(response: Response, body: unknown): string {\n if (\n typeof body === 'object' &&\n body !== null &&\n 'message' in body &&\n typeof body.message === 'string'\n ) {\n return body.message\n }\n\n if (typeof body === 'string' && body.trim()) {\n return body\n }\n\n return `v0 proxy request failed: ${response.status} ${response.statusText}`.trim()\n}\n"],"mappings":"4DAqBA,IAAa,EAAb,cAAqD,KAAM,CACzD,OACA,WACA,KACA,SAEA,YAAY,EAAoB,EAAY,EAAkB,CAC5D,MAAM,GAAW,EAAgB,EAAU,EAAK,CAAC,CACjD,KAAK,KAAO,kBACZ,KAAK,OAAS,EAAS,OACvB,KAAK,WAAa,EAAS,WAC3B,KAAK,KAAO,EACZ,KAAK,SAAW,IAIpB,eAAsB,EACpB,EACA,EACA,EACA,EAA4B,EAAE,CACf,CACf,IAAM,EAAS,EAAoB,EAAQ,CACrC,EAAW,EAAgB,EAAQ,EAAK,EAAU,SAAW,MAAQ,EAAQ,IAAA,GAAU,CACvF,EAAS,MAAM,EAAO,QAA4C,CACtE,GAAG,EAAgB,EAAQ,CAC3B,QAAS,EAAS,QAClB,KAAM,EAAU,SAAW,MAAQ,IAAA,GAAY,EAC/C,OAAQ,EAAU,OAClB,QACE,EAAU,WAAa,SAAW,SAAW,EAAU,WAAa,OAAS,OAAS,OACxF,cAAe,SACf,aAAc,GACd,IAAK,EAAS,KACf,CAAC,CAQF,OANI,EAAU,WAAa,SAClB,EAAO,SAEZ,EAAU,WAAa,OAClB,EAAO,KAET,EAAU,UAAY,EAAU,UAAU,EAAO,KAAK,CAAI,EAAO,KAG1E,SAAS,EAAoB,EAAmC,CAC9D,IAAM,EAAS,EACb,EAA4B,CAC1B,GAAG,EAAgB,EAAQ,CAC5B,CAAC,CACH,CASD,OAPA,EAAO,aAAa,MAAM,KAAK,EAAO,IAChC,CAAC,GAAY,aAAiB,EACzB,EAEF,IAAI,EAAgB,EAAU,EAAM,CAC3C,CAEK,EAGT,SAAS,EAAgB,EAAgB,EAAe,EAAgB,CACtE,IAAM,EAAW,EAAc,EAAM,CAC/B,EAAS,IAAI,IAAI,EAAO,EAAW,IAAA,GAAY,kBAAkB,CACjE,EAAY,EAAO,SAAS,CAChC,QAAS,EAAW,EAAO,OAAS,GACpC,MAAO,EAAS,EAAM,CAAG,EAAQ,IAAA,GACjC,IAAK,EAAO,SACb,CAAC,CACI,EAAe,IAAI,IAAI,EAAW,EAAW,IAAA,GAAY,kBAAkB,CAEjF,IAAK,GAAM,CAAC,EAAK,KAAS,EAAO,aAC/B,EAAa,aAAa,OAAO,EAAK,EAAK,CAG7C,MAAO,CACL,QAAS,EAAW,EAAa,OAAS,GAC1C,KAAM,GAAG,EAAa,WAAW,EAAa,SAC/C,CAGH,SAAS,EAAgB,EAA2B,CAClD,OAAO,EAKT,SAAS,EAAc,EAAwB,CAC7C,MAAO,sBAAsB,KAAK,EAAM,CAG1C,SAAS,EAAS,EAAkD,CAClE,OAAO,OAAO,GAAU,YAAY,EAGtC,SAAS,EAAgB,EAAoB,EAAuB,CAclE,OAZE,OAAO,GAAS,UAChB,GACA,YAAa,GACb,OAAO,EAAK,SAAY,SAEjB,EAAK,QAGV,OAAO,GAAS,UAAY,EAAK,MAAM,CAClC,EAGF,4BAA4B,EAAS,OAAO,GAAG,EAAS,aAAa,MAAM"}
|
package/dist/swr.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));const c=require(`./request-C1Ues3qu.cjs`);let l=require(`v0/browser`),u=require(`swr`);u=s(u,1);let d=require(`swr/infinite`);d=s(d,1);let f=require(`swr/mutation`);f=s(f,1);function p(e,t,n){return[`v0`,e,t,n]}function m(e,t,n,r={}){let{enabled:i,request:a,...o}=r;return(0,u.default)(t&&i!==!1?p(e.id,t,n):null,()=>c.n(t,e,n,a),o)}function h(e,t,n={}){let{request:r,...i}=n;return(0,f.default)(p(e.id,t,null),(n,{arg:i})=>c.n(t,e,i,r),i)}function g(e,t,n,r,i={}){let{enabled:a,request:o,...s}=i;return(0,d.default)((i,o)=>{if(!t||!n||a===!1||i>0&&(!o||!r(o)))return null;let s={...n,...i>0?{cursor:r(o)}:{}};return p(e.id,t,s)},n=>c.n(t,e,n.at(-1),o),s)}const _={"chats.create":`useCreateChatBlocking`,"chats.createAsync":`useCreateChatAsync`,"chats.createFromFiles":`useCreateChatFromFiles`,"chats.createFromRepo":`useCreateChatFromRepo`,"chats.createFromZip":`useCreateChatFromZip`,"chats.createStream":`useCreateChat`,"chats.createVercelProject":`useCreateProject`,"chats.delete":`useDeleteChat`,"chats.deploy":`useDeployChat`,"chats.downloadFiles":`useDownloadChatFiles`,"chats.duplicate":`useDuplicateChat`,"chats.get":`useChat`,"chats.getFiles":`useFiles`,"chats.getPreview":`usePreview`,"chats.list":`useChats`,"chats.restoreMessage":`useRestoreMessage`,"chats.resume":`useResumeChat`,"chats.update":`useUpdateChat`,"chats.updateFiles":`useUpdateChatFiles`,"mcpServers.create":`useCreateMcpServer`,"mcpServers.delete":`useDeleteMcpServer`,"mcpServers.get":`useMcpServer`,"mcpServers.list":`useMcpServers`,"mcpServers.update":`useUpdateMcpServer`,"messages.get":`useMessage`,"messages.list":`useMessages`,"messages.resolve":`useResolveTaskBlocking`,"messages.resolveAsync":`useResolveTaskAsync`,"messages.resolveStream":`useResolveTask`,"messages.send":`useSendMessageBlocking`,"messages.sendAsync":`useSendMessageAsync`,"messages.sendStream":`useSendMessage`,"messages.stop":`useStopMessage`,"webhooks.create":`useCreateWebhook`,"webhooks.delete":`useDeleteWebhook`,"webhooks.get":`useWebhook`,"webhooks.list":`useWebhooks`,"webhooks.update":`useUpdateWebhook`},ee={id:`chats.create`,method:`POST`,response:`json`,transform:l.chatsCreateResponseTransformer};function te(e,t={}){return h(ee,e,t)}const ne={id:`chats.createAsync`,method:`POST`,response:`json`};function v(e,t={}){return h(ne,e,t)}const y={id:`chats.createFromFiles`,method:`POST`,response:`json`,transform:l.chatsCreateFromFilesResponseTransformer};function b(e,t={}){return h(y,e,t)}const x={id:`chats.createFromRepo`,method:`POST`,response:`json`,transform:l.chatsCreateFromRepoResponseTransformer};function S(e,t={}){return h(x,e,t)}const C={id:`chats.createFromZip`,method:`POST`,response:`json`,transform:l.chatsCreateFromZipResponseTransformer};function w(e,t={}){return h(C,e,t)}const T={id:`chats.createStream`,method:`POST`,response:`stream`};function E(e,t={}){return h(T,e,t)}const D={id:`chats.createVercelProject`,method:`POST`,response:`json`};function O(e,t={}){return h(D,e,t)}const k={id:`chats.delete`,method:`DELETE`,response:`json`};function A(e,t={}){return h(k,e,t)}const j={id:`chats.deploy`,method:`POST`,response:`json`};function M(e,t={}){return h(j,e,t)}const N={id:`chats.downloadFiles`,method:`GET`,response:`blob`};function P(e,t={}){return h(N,e,t)}const F={id:`chats.duplicate`,method:`POST`,response:`json`,transform:l.chatsDuplicateResponseTransformer};function I(e,t={}){return h(F,e,t)}const L={id:`chats.get`,method:`GET`,response:`json`,transform:l.chatsGetResponseTransformer};function R(e,t={}){return m(L,e,void 0,t)}const z={id:`chats.getFiles`,method:`GET`,response:`json`};function B(e,t={}){return m(z,e,void 0,t)}const V={id:`chats.getPreview`,method:`GET`,response:`json`,transform:l.chatsGetPreviewResponseTransformer};function H(e,t={}){return m(V,e,void 0,t)}const U={id:`chats.list`,method:`GET`,response:`json`,transform:l.chatsListResponseTransformer};function W(e,t,n={}){return m(U,e,t,n)}function G(e,t,n={}){return g(U,e,t??{},e=>e.cursor,n)}const K={id:`chats.restoreMessage`,method:`POST`,response:`json`,transform:l.chatsRestoreMessageResponseTransformer};function q(e,t={}){return h(K,e,t)}const J={id:`chats.resume`,method:`POST`,response:`stream`};function Y(e,t={}){return h(J,e,t)}const X={id:`chats.update`,method:`PATCH`,response:`json`,transform:l.chatsUpdateResponseTransformer};function Z(e,t={}){return h(X,e,t)}const re={id:`chats.updateFiles`,method:`PATCH`,response:`json`,transform:l.chatsUpdateFilesResponseTransformer};function ie(e,t={}){return h(re,e,t)}const ae={id:`mcpServers.create`,method:`POST`,response:`json`,transform:l.mcpServersCreateResponseTransformer};function oe(e,t={}){return h(ae,e,t)}const se={id:`mcpServers.delete`,method:`DELETE`,response:`json`};function ce(e,t={}){return h(se,e,t)}const le={id:`mcpServers.get`,method:`GET`,response:`json`,transform:l.mcpServersGetResponseTransformer};function ue(e,t={}){return m(le,e,void 0,t)}const de={id:`mcpServers.list`,method:`GET`,response:`json`,transform:l.mcpServersListResponseTransformer};function fe(e,t={}){return m(de,e,void 0,t)}const pe={id:`mcpServers.update`,method:`PATCH`,response:`json`,transform:l.mcpServersUpdateResponseTransformer};function me(e,t={}){return h(pe,e,t)}const he={id:`messages.get`,method:`GET`,response:`json`,transform:l.messagesGetResponseTransformer};function ge(e,t={}){return m(he,e,void 0,t)}const Q={id:`messages.list`,method:`GET`,response:`json`,transform:l.messagesListResponseTransformer};function _e(e,t,n={}){return m(Q,e,t,n)}function ve(e,t,n={}){return g(Q,e,t,e=>e.cursor,n)}const ye={id:`messages.resolve`,method:`POST`,response:`json`,transform:l.messagesResolveResponseTransformer};function be(e,t={}){return h(ye,e,t)}const xe={id:`messages.resolveAsync`,method:`POST`,response:`json`};function Se(e,t={}){return h(xe,e,t)}const Ce={id:`messages.resolveStream`,method:`POST`,response:`stream`};function we(e,t={}){return h(Ce,e,t)}const Te={id:`messages.send`,method:`POST`,response:`json`,transform:l.messagesSendResponseTransformer};function Ee(e,t={}){return h(Te,e,t)}const De={id:`messages.sendAsync`,method:`POST`,response:`json`};function Oe(e,t={}){return h(De,e,t)}const ke={id:`messages.sendStream`,method:`POST`,response:`stream`};function Ae(e,t={}){return h(ke,e,t)}const je={id:`messages.stop`,method:`POST`,response:`json`};function Me(e,t={}){return h(je,e,t)}const Ne={id:`webhooks.create`,method:`POST`,response:`json`,transform:l.webhooksCreateResponseTransformer};function Pe(e,t={}){return h(Ne,e,t)}const $={id:`webhooks.delete`,method:`DELETE`,response:`json`};function Fe(e,t={}){return h($,e,t)}const Ie={id:`webhooks.get`,method:`GET`,response:`json`,transform:l.webhooksGetResponseTransformer};function Le(e,t={}){return m(Ie,e,void 0,t)}const Re={id:`webhooks.list`,method:`GET`,response:`json`};function ze(e,t={}){return m(Re,e,void 0,t)}const Be={id:`webhooks.update`,method:`PATCH`,response:`json`,transform:l.webhooksUpdateResponseTransformer};function Ve(e,t={}){return h(Be,e,t)}exports.V0_REACT_OPERATION_HOOKS=_,exports.createV0Key=p,exports.t=s,exports.useChat=R,exports.useChats=W,exports.useChatsInfinite=G,exports.useCreateChat=E,exports.useCreateChatAsync=v,exports.useCreateChatBlocking=te,exports.useCreateChatFromFiles=b,exports.useCreateChatFromRepo=S,exports.useCreateChatFromZip=w,exports.useCreateMcpServer=oe,exports.useCreateProject=O,exports.useCreateWebhook=Pe,exports.useDeleteChat=A,exports.useDeleteMcpServer=ce,exports.useDeleteWebhook=Fe,exports.useDeployChat=M,exports.useDownloadChatFiles=P,exports.useDuplicateChat=I,exports.useFiles=B,exports.useMcpServer=ue,exports.useMcpServers=fe,exports.useMessage=ge,exports.useMessages=_e,exports.useMessagesInfinite=ve,exports.usePreview=H,exports.useResolveTask=we,exports.useResolveTaskAsync=Se,exports.useResolveTaskBlocking=be,exports.useRestoreMessage=q,exports.useResumeChat=Y,exports.useSendMessage=Ae,exports.useSendMessageAsync=Oe,exports.useSendMessageBlocking=Ee,exports.useStopMessage=Me,exports.useUpdateChat=Z,exports.useUpdateChatFiles=ie,exports.useUpdateMcpServer=me,exports.useUpdateWebhook=Ve,exports.useWebhook=Le,exports.useWebhooks=ze;
|