{"_id":"@cogitator-ai/next","_rev":"6-036ebd67bc99d74719143cdd2ab9865f","name":"@cogitator-ai/next","dist-tags":{"latest":"0.2.12"},"versions":{"0.2.0":{"name":"@cogitator-ai/next","version":"0.2.0","keywords":["cogitator","ai","agents","nextjs","streaming","llm"],"license":"MIT","_id":"@cogitator-ai/next@0.2.0","maintainers":[{"name":"el1fe","email":"piuro.pavel@gmail.com"}],"homepage":"https://github.com/cogitator-ai/Cogitator-AI#readme","bugs":{"url":"https://github.com/cogitator-ai/Cogitator-AI/issues"},"dist":{"shasum":"55aa4a578fbeb313d9e4eb7e7d40d0bbd8eaf58c","tarball":"https://registry.npmjs.org/@cogitator-ai/next/-/next-0.2.0.tgz","fileCount":54,"integrity":"sha512-mi2rMp3ioxT+GV5XBtEUsArE5xN3IG46JkSUFwhbCmYESyrFsPWWk6XguXem8hbG5AgK4F2ryIbmGYAZxhkORg==","signatures":[{"sig":"MEUCIQD5ZI4HxTyrHccqyjgLbuJyOnHowpUsrZOmb4qiY/oNpwIgSdoOrAIN7S1NoFyQUBJk4frP8t1lcfFamR8h4U+BTu4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82674},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"}},"gitHead":"68ae52328fec8aa8e62b0dfb996c7bef0c2b441b","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"el1fe","email":"piuro.pavel@gmail.com"},"repository":{"url":"git+https://github.com/cogitator-ai/Cogitator-AI.git","type":"git","directory":"packages/next"},"_npmVersion":"10.9.0","description":"Next.js integration for Cogitator AI runtime","directories":{},"_nodeVersion":"22.11.0","dependencies":{"@cogitator-ai/core":"workspace:*","@cogitator-ai/types":"workspace:*"},"_hasShrinkwrap":false,"devDependencies":{"next":"^15.0.0","react":"^18.0.0","typescript":"^5.0.0","@types/react":"^18.0.0"},"peerDependencies":{"next":">=14.0.0","react":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/next_0.2.0_1769446733445_0.5954387937866412","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@cogitator-ai/next","version":"0.2.1","keywords":["cogitator","ai","agents","nextjs","streaming","llm"],"license":"MIT","_id":"@cogitator-ai/next@0.2.1","maintainers":[{"name":"el1fe","email":"piuro.pavel@gmail.com"}],"homepage":"https://github.com/cogitator-ai/Cogitator-AI#readme","bugs":{"url":"https://github.com/cogitator-ai/Cogitator-AI/issues"},"dist":{"shasum":"1487a1a50da0e283201ecdeec38f51277d71e28f","tarball":"https://registry.npmjs.org/@cogitator-ai/next/-/next-0.2.1.tgz","fileCount":54,"integrity":"sha512-BCpMBZmWIpc3s2tF6sbBmmS5xodTU/YsMu4J2CK3uuOGBa+r/096wBopR+AgKdsZ0f9SbJRKxRiw66J994P0Eg==","signatures":[{"sig":"MEYCIQDYIMz5iqovQxoyAjJPUbfENbo/soVHAgzuFUB5CD8f7AIhAKsW7N+Q9t0xtLmc9THJM8w2AQPZHuOyzcYRGi+k+S3s","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82685},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"}},"gitHead":"a6b9adee17ab69490d006ebca129a24d50e90b0f","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"el1fe","email":"piuro.pavel@gmail.com"},"repository":{"url":"git+https://github.com/cogitator-ai/Cogitator-AI.git","type":"git","directory":"packages/next"},"_npmVersion":"10.9.0","description":"Next.js integration for Cogitator AI runtime","directories":{},"_nodeVersion":"22.11.0","dependencies":{"@cogitator-ai/core":"workspace:*","@cogitator-ai/types":"workspace:*"},"_hasShrinkwrap":false,"devDependencies":{"next":"^15.0.0","react":"^18.0.0","typescript":"^5.0.0","@types/react":"^18.0.0"},"peerDependencies":{"next":">=14.0.0","react":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/next_0.2.1_1771596855408_0.8505352511569484","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@cogitator-ai/next","version":"0.2.4","keywords":["cogitator","ai","agents","nextjs","streaming","llm"],"license":"MIT","_id":"@cogitator-ai/next@0.2.4","maintainers":[{"name":"el1fe","email":"piuro.pavel@gmail.com"}],"homepage":"https://github.com/cogitator-ai/Cogitator-AI#readme","bugs":{"url":"https://github.com/cogitator-ai/Cogitator-AI/issues"},"dist":{"shasum":"72177746c1108f5fef979912981bd241b727c292","tarball":"https://registry.npmjs.org/@cogitator-ai/next/-/next-0.2.4.tgz","fileCount":54,"integrity":"sha512-NugglMfGAB+uSPyEhDaHaI32jtWkNeeyLswCJcsL7MD9/fjIrHVsdcjPmO2MzQ7CHKgbhXMOhZu0JH3s8a4YxA==","signatures":[{"sig":"MEUCIQCblcEGIWUjsB14K8gfs0PDHfwSxyxZ/qX37mzE3z2VJgIgBqzyEJ8H6CpE6xSXPThQ2RO5Ir/lfZVqv7v5WzGUWBw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82685},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"}},"gitHead":"f508be4a1a30c7bd136f0fa8b2e6cee5521416ab","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"el1fe","email":"piuro.pavel@gmail.com"},"repository":{"url":"git+https://github.com/cogitator-ai/Cogitator-AI.git","type":"git","directory":"packages/next"},"_npmVersion":"10.9.0","description":"Next.js integration for Cogitator AI runtime","directories":{},"_nodeVersion":"22.11.0","dependencies":{"@cogitator-ai/core":"workspace:*","@cogitator-ai/types":"workspace:*"},"_hasShrinkwrap":false,"devDependencies":{"next":"^15.0.0","react":"^18.0.0","typescript":"^5.0.0","@types/react":"^18.0.0"},"peerDependencies":{"next":">=14.0.0","react":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/next_0.2.4_1772035683001_0.9196493024273487","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"@cogitator-ai/next","version":"0.2.10","keywords":["cogitator","ai","agents","nextjs","streaming","llm"],"license":"MIT","_id":"@cogitator-ai/next@0.2.10","maintainers":[{"name":"el1fe","email":"piuro.pavel@gmail.com"}],"homepage":"https://github.com/cogitator-ai/Cogitator-AI#readme","bugs":{"url":"https://github.com/cogitator-ai/Cogitator-AI/issues"},"dist":{"shasum":"64a95bd0a1fb648a7734a1800b85142048ce156f","tarball":"https://registry.npmjs.org/@cogitator-ai/next/-/next-0.2.10.tgz","fileCount":54,"integrity":"sha512-I7st0ufM4kz0rUSezP8BVKR+Na5Dy2tegxWLlZ3RXfLBB6qP/KFWMwM5gGgbEnpQV+cUuBg5lzCLJPpcZOvpng==","signatures":[{"sig":"MEUCIQCqz70k5JfltMF9taZuqQ79KvYUdgzN2wFRWknQnx3eJQIgHZyw0ZXpj04EyLLZFZzen0hIiygijMChzylnQgaeNsc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82980},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"}},"gitHead":"33b6a8cb29bfdd7d2255acfa240b2df5d558354e","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","clean":"rm -rf dist","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"el1fe","email":"piuro.pavel@gmail.com"},"repository":{"url":"git+https://github.com/cogitator-ai/Cogitator-AI.git","type":"git","directory":"packages/next"},"_npmVersion":"10.9.0","description":"Next.js integration for Cogitator AI runtime","directories":{},"_nodeVersion":"22.11.0","dependencies":{"@cogitator-ai/core":"workspace:*","@cogitator-ai/types":"workspace:*"},"_hasShrinkwrap":false,"devDependencies":{"next":"^15.0.0","react":"^18.0.0","vitest":"^4.0.18","typescript":"^5.0.0","@types/react":"^18.0.0"},"peerDependencies":{"next":">=14.0.0","react":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/next_0.2.10_1778881381867_0.7012978774303285","host":"s3://npm-registry-packages-npm-production"}},"0.2.11":{"name":"@cogitator-ai/next","version":"0.2.11","keywords":["cogitator","ai","agents","nextjs","streaming","llm"],"license":"MIT","_id":"@cogitator-ai/next@0.2.11","maintainers":[{"name":"el1fe","email":"piuro.pavel@gmail.com"}],"homepage":"https://github.com/cogitator-ai/Cogitator-AI#readme","bugs":{"url":"https://github.com/cogitator-ai/Cogitator-AI/issues"},"dist":{"shasum":"e2e97ce3e987e65e9ad99d35507c10ad62d43734","tarball":"https://registry.npmjs.org/@cogitator-ai/next/-/next-0.2.11.tgz","fileCount":55,"integrity":"sha512-iEYtryKDfoXApB4wlv2dxzT/NFkGia3skkV/BxWVvWXX3pW/pVkZz3PTYI3tmrccA68ylk2X0gAByPS+dgYrjQ==","signatures":[{"sig":"MEYCIQDtfnvegg5sVBywP0S0CEvvSCuQKuNVyXbNLq3aw0b+BAIhAIt6Lk60fcMEGZL1uUy0DJ4E4GTd9Ox1TRSirsPVzI6k","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84048},"main":"./dist/index.js","type":"module","_from":"file:cogitator-ai-next-0.2.11.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"}},"scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","clean":"rm -rf dist","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"el1fe","email":"piuro.pavel@gmail.com"},"_resolved":"/private/var/folders/20/4d95hdvj45j337gtqpbx3v1m0000gn/T/3152cc58bda6b021115809dcc481f507/cogitator-ai-next-0.2.11.tgz","_integrity":"sha512-iEYtryKDfoXApB4wlv2dxzT/NFkGia3skkV/BxWVvWXX3pW/pVkZz3PTYI3tmrccA68ylk2X0gAByPS+dgYrjQ==","repository":{"url":"git+https://github.com/cogitator-ai/Cogitator-AI.git","type":"git","directory":"packages/next"},"_npmVersion":"10.9.0","description":"Next.js integration for Cogitator AI runtime","directories":{},"_nodeVersion":"22.11.0","dependencies":{"@cogitator-ai/core":"0.19.3","@cogitator-ai/types":"0.22.2"},"_hasShrinkwrap":false,"devDependencies":{"next":"^15.0.0","react":"^18.0.0","vitest":"^4.0.18","typescript":"^5.0.0","@types/react":"^18.0.0"},"peerDependencies":{"next":">=14.0.0","react":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/next_0.2.11_1778882288029_0.21371243184508093","host":"s3://npm-registry-packages-npm-production"}},"0.2.12":{"name":"@cogitator-ai/next","version":"0.2.12","description":"Next.js integration for Cogitator AI runtime","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js"}},"dependencies":{"@cogitator-ai/core":"0.19.4","@cogitator-ai/types":"0.22.3"},"peerDependencies":{"next":">=14.0.0","react":">=18.0.0"},"devDependencies":{"@types/react":"^18.0.0","next":"^15.0.0","react":"^18.0.0","typescript":"^5.0.0","vitest":"^4.0.18"},"keywords":["cogitator","ai","agents","nextjs","streaming","llm"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/cogitator-ai/Cogitator-AI.git","directory":"packages/next"},"scripts":{"build":"tsc","dev":"tsc --watch","typecheck":"tsc --noEmit","test":"vitest run","test:watch":"vitest","clean":"rm -rf dist"},"_id":"@cogitator-ai/next@0.2.12","bugs":{"url":"https://github.com/cogitator-ai/Cogitator-AI/issues"},"homepage":"https://github.com/cogitator-ai/Cogitator-AI#readme","_integrity":"sha512-6wfx06ACm95JdQhT5pPJFFSigFLZHiLbZL9ctJQAO/9K2T+bUZlw3CRvXQp19LwK7abCWzTzS8XEuzF4WZszdQ==","_resolved":"/private/var/folders/20/4d95hdvj45j337gtqpbx3v1m0000gn/T/ab8e5d02ad70ae44ee0c3d35875d5fa9/cogitator-ai-next-0.2.12.tgz","_from":"file:cogitator-ai-next-0.2.12.tgz","_nodeVersion":"22.23.1","_npmVersion":"10.9.8","dist":{"integrity":"sha512-6wfx06ACm95JdQhT5pPJFFSigFLZHiLbZL9ctJQAO/9K2T+bUZlw3CRvXQp19LwK7abCWzTzS8XEuzF4WZszdQ==","shasum":"76b502d02ebb7ba5aee62708d1f992e395732a10","tarball":"https://registry.npmjs.org/@cogitator-ai/next/-/next-0.2.12.tgz","fileCount":55,"unpackedSize":87494,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGn08M5snqWEJuVpdMTffX1EuoiAZlFGxr6OSc5I5rteAiEA9o/rCwnLyxJSaz97e2WW1dFepJYogNvoKH1nMWq3Qtc="}]},"_npmUser":{"name":"el1fe","email":"piuro.pavel@gmail.com"},"directories":{},"maintainers":[{"name":"el1fe","email":"piuro.pavel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/next_0.2.12_1785059695649_0.5907034574654895"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-26T16:58:53.384Z","modified":"2026-07-26T09:54:55.958Z","0.2.0":"2026-01-26T16:58:53.593Z","0.2.1":"2026-02-20T14:14:15.551Z","0.2.4":"2026-02-25T16:08:03.158Z","0.2.10":"2026-05-15T21:43:02.023Z","0.2.11":"2026-05-15T21:58:08.248Z","0.2.12":"2026-07-26T09:54:55.807Z"},"bugs":{"url":"https://github.com/cogitator-ai/Cogitator-AI/issues"},"license":"MIT","homepage":"https://github.com/cogitator-ai/Cogitator-AI#readme","keywords":["cogitator","ai","agents","nextjs","streaming","llm"],"repository":{"type":"git","url":"git+https://github.com/cogitator-ai/Cogitator-AI.git","directory":"packages/next"},"description":"Next.js integration for Cogitator AI runtime","maintainers":[{"name":"el1fe","email":"piuro.pavel@gmail.com"}],"readme":"# @cogitator-ai/next\n\nNext.js App Router integration for Cogitator AI runtime. Provides streaming chat handlers and React hooks compatible with the Vercel AI SDK protocol.\n\n## Installation\n\n```bash\npnpm add @cogitator-ai/next @cogitator-ai/core\n```\n\n## Quick Start\n\n### 1. Create API Route\n\n```typescript\n// app/api/chat/route.ts\nimport { Cogitator, Agent, tool } from '@cogitator-ai/core';\nimport { createChatHandler } from '@cogitator-ai/next';\nimport { z } from 'zod';\n\nconst cogitator = new Cogitator({\n  backend: { type: 'openai', apiKey: process.env.OPENAI_API_KEY! },\n});\n\nconst agent = new Agent({\n  name: 'assistant',\n  instructions: 'You are a helpful assistant.',\n  tools: [\n    tool({\n      name: 'get_weather',\n      description: 'Get weather for a location',\n      parameters: z.object({ location: z.string() }),\n      execute: async ({ location }) => `Weather in ${location}: 72°F, sunny`,\n    }),\n  ],\n});\n\nexport const POST = createChatHandler(cogitator, agent);\n```\n\n### 2. Use in Client Component\n\n```tsx\n'use client';\n\nimport { useCogitatorChat } from '@cogitator-ai/next/client';\n\nexport function Chat() {\n  const { messages, input, setInput, send, isLoading } = useCogitatorChat({\n    api: '/api/chat',\n  });\n\n  return (\n    <div>\n      {messages.map((m) => (\n        <div key={m.id}>\n          <strong>{m.role}:</strong> {m.content}\n        </div>\n      ))}\n\n      <form\n        onSubmit={(e) => {\n          e.preventDefault();\n          send();\n        }}\n      >\n        <input\n          value={input}\n          onChange={(e) => setInput(e.target.value)}\n          placeholder=\"Type a message...\"\n          disabled={isLoading}\n        />\n        <button type=\"submit\" disabled={isLoading}>\n          Send\n        </button>\n      </form>\n    </div>\n  );\n}\n```\n\n## Server Handlers\n\n### `createChatHandler`\n\nCreates a streaming chat handler compatible with AI SDK protocol.\n\n```typescript\nimport { createChatHandler } from '@cogitator-ai/next';\n\nexport const POST = createChatHandler(cogitator, agent, {\n  // Custom input parsing\n  parseInput: async (req) => {\n    const body = await req.json();\n    return {\n      messages: body.messages,\n      threadId: body.threadId,\n      metadata: body.metadata,\n    };\n  },\n\n  // Pre-processing hook\n  beforeRun: async (req, input) => {\n    console.log('Starting chat with', input.messages.length, 'messages');\n    return { userId: 'user-123' }; // Merged into context\n  },\n\n  // Post-processing hook\n  afterRun: async (result) => {\n    console.log('Chat completed:', result.output);\n  },\n});\n```\n\n### `createAgentHandler`\n\nCreates a batch (non-streaming) handler for long-running tasks.\n\n```typescript\nimport { createAgentHandler } from '@cogitator-ai/next';\n\nexport const POST = createAgentHandler(cogitator, researchAgent, {\n  parseInput: async (req) => {\n    const body = await req.json();\n    return {\n      input: body.query,\n      context: body.context,\n      threadId: body.threadId,\n    };\n  },\n});\n```\n\nResponse format:\n\n```json\n{\n  \"output\": \"Research results...\",\n  \"threadId\": \"thread-abc\",\n  \"usage\": {\n    \"inputTokens\": 150,\n    \"outputTokens\": 500,\n    \"totalTokens\": 650\n  },\n  \"toolCalls\": [...]\n}\n```\n\n## Client Hooks\n\n### `useCogitatorChat`\n\nFull-featured chat hook with streaming support.\n\n```typescript\nconst {\n  // State\n  messages, // ChatMessage[]\n  input, // string\n  isLoading, // boolean\n  error, // Error | null\n  threadId, // string | undefined\n\n  // Actions\n  setInput, // (value: string) => void\n  send, // (input?: string, metadata?: Record<string, unknown>) => Promise<void>\n  stop, // () => void\n  reload, // () => Promise<void>\n  setThreadId, // (id: string) => void\n\n  // Message management\n  appendMessage, // (message: ChatMessage) => void\n  clearMessages, // () => void\n  setMessages, // (messages: ChatMessage[]) => void\n} = useCogitatorChat({\n  api: '/api/chat',\n  threadId: 'optional-thread-id',\n  initialMessages: [],\n  headers: { 'X-Custom-Header': 'value' },\n\n  // Callbacks\n  onError: (error) => console.error(error),\n  onFinish: (message) => console.log('Done:', message),\n  onToolCall: (toolCall) => console.log('Tool called:', toolCall.name),\n  onToolResult: (result) => console.log('Tool result:', result),\n\n  // Retry configuration\n  retry: {\n    maxRetries: 3,\n    delay: 1000,\n    backoff: 'exponential', // 1s, 2s, 4s\n  },\n});\n```\n\n#### Sending with Metadata\n\n```typescript\n// Basic send\nawait send('Hello!');\n\n// Send with metadata (passed to server)\nawait send('Analyze this', {\n  userId: 'user-123',\n  priority: 'high',\n});\n\n// Send using input state\nsetInput('My message');\nawait send();\n```\n\n#### Message Management\n\n```typescript\n// Add a system message\nappendMessage({\n  id: crypto.randomUUID(),\n  role: 'system',\n  content: 'Context updated.',\n});\n\n// Clear conversation\nclearMessages();\n\n// Replace all messages\nsetMessages([{ id: '1', role: 'user', content: 'New conversation' }]);\n```\n\n### `useCogitatorAgent`\n\nHook for non-streaming batch requests (research, analysis, etc).\n\n```typescript\nconst {\n  run, // (input: AgentInput) => Promise<void>\n  result, // AgentResponse | null\n  isLoading, // boolean\n  error, // Error | null\n  reset, // () => void\n} = useCogitatorAgent({\n  api: '/api/research',\n  headers: { Authorization: 'Bearer token' },\n\n  onError: (error) => console.error(error),\n  onSuccess: (result) => console.log('Done:', result.output),\n\n  retry: {\n    maxRetries: 2,\n    delay: 2000,\n    backoff: 'linear',\n  },\n});\n\n// Execute\nawait run({\n  input: 'Research AI trends in 2025',\n  context: { focus: 'enterprise' },\n  threadId: 'research-session-1',\n});\n\n// Access result\nconsole.log(result?.output);\nconsole.log(result?.toolCalls);\n```\n\n## Streaming Protocol\n\nThe package implements Vercel AI SDK v5 streaming protocol:\n\n```\ndata: {\"type\":\"start\",\"messageId\":\"msg-1\"}\n\ndata: {\"type\":\"text-start\",\"id\":\"text-1\"}\n\ndata: {\"type\":\"text-delta\",\"id\":\"text-1\",\"delta\":\"Hello\"}\n\ndata: {\"type\":\"text-delta\",\"id\":\"text-1\",\"delta\":\" world\"}\n\ndata: {\"type\":\"text-end\",\"id\":\"text-1\"}\n\ndata: {\"type\":\"tool-call-start\",\"id\":\"tool-1\",\"toolName\":\"get_weather\"}\n\ndata: {\"type\":\"tool-call-delta\",\"id\":\"tool-1\",\"argsTextDelta\":\"{\\\"location\\\":\\\"NYC\\\"}\"}\n\ndata: {\"type\":\"tool-call-end\",\"id\":\"tool-1\"}\n\ndata: {\"type\":\"tool-result\",\"id\":\"tr-1\",\"toolCallId\":\"tool-1\",\"result\":\"72°F\"}\n\ndata: {\"type\":\"finish\",\"messageId\":\"msg-1\",\"usage\":{...}}\n\ndata: [DONE]\n```\n\n## Types\n\n```typescript\ninterface ChatMessage {\n  id: string;\n  role: 'user' | 'assistant' | 'system';\n  content: string;\n  toolCalls?: ToolCall[];\n  metadata?: Record<string, unknown>;\n  createdAt?: Date;\n}\n\ninterface AgentInput {\n  input: string;\n  context?: Record<string, unknown>;\n  threadId?: string;\n}\n\ninterface AgentResponse {\n  output: string;\n  threadId: string;\n  usage: {\n    inputTokens: number;\n    outputTokens: number;\n    totalTokens: number;\n  };\n  toolCalls: ToolCall[];\n}\n\ninterface RetryConfig {\n  maxRetries?: number; // default: 0\n  delay?: number; // default: 1000ms\n  backoff?: 'linear' | 'exponential';\n}\n```\n\n## Error Handling\n\nBoth hooks provide error state and callbacks:\n\n```typescript\nconst { error, isLoading } = useCogitatorChat({\n  api: '/api/chat',\n  onError: (err) => {\n    toast.error(err.message);\n  },\n});\n\nif (error) {\n  return <div>Error: {error.message}</div>;\n}\n```\n\nWith retry enabled, transient errors (network, 502/503/504) are automatically retried:\n\n```typescript\nuseCogitatorChat({\n  api: '/api/chat',\n  retry: {\n    maxRetries: 3,\n    delay: 1000,\n    backoff: 'exponential',\n  },\n});\n```\n\n## Cancellation\n\nStop ongoing requests with the `stop()` function:\n\n```typescript\nconst { send, stop, isLoading } = useCogitatorChat({ api: '/api/chat' });\n\n// Cancel current request\nif (isLoading) {\n  stop();\n}\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}