{"_id":"@aevatar-react-sdk/agui","name":"@aevatar-react-sdk/agui","dist-tags":{"latest":"0.5.0"},"versions":{"0.5.0":{"name":"@aevatar-react-sdk/agui","version":"0.5.0","description":"AGUI protocol client — SSE, WebSocket, event normalization, React hooks","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"author":{"name":"AevatarAI"},"license":"ISC","keywords":["aevatar","agui","agent-ui","sse","websocket","react","hooks","workflow"],"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"homepage":"https://aevatar.ai/","repository":{"type":"git","url":"git+https://github.com/aevatarAI/aevatar-react-sdk.git","directory":"packages/agui"},"dependencies":{"@aevatar-react-sdk/types":"0.5.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"devDependencies":{"@types/react":"^19.0.0","react":"^19.0.0","vite":"^6.1.0","vite-plugin-dts":"latest","@vitest/coverage-v8":"3.0.6","vitest":"^3.0.6"},"scripts":{"dev":"vite","build":"vite build","test":"vitest --coverage","test:dev":"vitest --watch","lint":"biome lint --write .","format":"biome format --write ."},"_id":"@aevatar-react-sdk/agui@0.5.0","types":"./dist/index.d.ts","bugs":{"url":"https://github.com/aevatarAI/aevatar-react-sdk/issues"},"_integrity":"sha512-nKwVn8+XebbQ1O8ggyCTWAlJ2U6ULsSjDjmEQ0JtmDuTs2SWkyzMogvkFNtk/EKRUZZS5QPeTZ32dSbd9e96IQ==","_resolved":"/private/var/folders/d9/bmbzh5n14v7byzn_zznk3gr80000gn/T/b1b4bdd1f223d9a04445becb78d86ce5/aevatar-react-sdk-agui-0.5.0.tgz","_from":"file:aevatar-react-sdk-agui-0.5.0.tgz","_nodeVersion":"18.20.3","_npmVersion":"10.7.0","dist":{"integrity":"sha512-nKwVn8+XebbQ1O8ggyCTWAlJ2U6ULsSjDjmEQ0JtmDuTs2SWkyzMogvkFNtk/EKRUZZS5QPeTZ32dSbd9e96IQ==","shasum":"db8d410a6e5b9e25b4fe81fc7c868b7ad850da23","tarball":"https://registry.npmjs.org/@aevatar-react-sdk/agui/-/agui-0.5.0.tgz","fileCount":16,"unpackedSize":111590,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDYwCSiAlQgrM5NeQ/7dXZ0WBIXXe/z542GX4D7A3hvzgIhAOkXhMIwKBjMIXjcFumFaC1p8UpRlLelOZ/k6lBaHbFu"}]},"_npmUser":{"name":"potterf","email":"potter.sun@aelf.io"},"directories":{},"maintainers":[{"name":"potterf","email":"potter.sun@aelf.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/agui_0.5.0_1773111075388_0.55845894307221"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-10T02:51:15.293Z","0.5.0":"2026-03-10T02:51:15.576Z","modified":"2026-03-10T02:51:15.919Z"},"maintainers":[{"name":"potterf","email":"potter.sun@aelf.io"}],"description":"AGUI protocol client — SSE, WebSocket, event normalization, React hooks","homepage":"https://aevatar.ai/","keywords":["aevatar","agui","agent-ui","sse","websocket","react","hooks","workflow"],"repository":{"type":"git","url":"git+https://github.com/aevatarAI/aevatar-react-sdk.git","directory":"packages/agui"},"author":{"name":"AevatarAI"},"bugs":{"url":"https://github.com/aevatarAI/aevatar-react-sdk/issues"},"license":"ISC","readme":"# @aevatar-react-sdk/agui\n\nAGUI protocol client for Aevatar — SSE and WebSocket transports, event normalization, run session state tracking, and React hooks.\n\n## Install\n\n```bash\npnpm add @aevatar-react-sdk/agui @aevatar-react-sdk/types\n```\n\nPeer dependency: `react ^18.0.0 || ^19.0.0`\n\n## Quick Start\n\n```tsx\nimport { useChatStream } from \"@aevatar-react-sdk/agui\";\nimport type { ChatRunRequest } from \"@aevatar-react-sdk/types\";\n\n// Inject your own stream function (e.g. from ChatService)\nconst streamChat = async (request: ChatRunRequest, signal: AbortSignal) =>\n  fetch(\"/api/chat\", {\n    method: \"POST\",\n    headers: { \"Content-Type\": \"application/json\", Accept: \"text/event-stream\" },\n    body: JSON.stringify(request),\n    signal,\n  });\n\nfunction Chat() {\n  const { session, streaming, send, abort } = useChatStream({ streamChat });\n\n  return (\n    <div>\n      <button onClick={() => send({ prompt: \"Hello\" })}>Send</button>\n      <button onClick={abort} disabled={!streaming}>Stop</button>\n      <p>Status: {session.status}</p>\n      {session.messages.map((m) => (\n        <div key={m.messageId}>{m.content}</div>\n      ))}\n    </div>\n  );\n}\n```\n\n### With ChatService (recommended)\n\n```tsx\nimport { useChatStream, useHumanInteraction } from \"@aevatar-react-sdk/agui\";\n\n// chatService is an instance of ChatService from @aevatar-react-sdk/services\nconst { session, send, abort } = useChatStream({\n  streamChat: (req, signal) => chatService.streamChat(req, { signal }),\n});\n\nconst { resume, signal } = useHumanInteraction({\n  resume: (req) => chatService.resume(req),\n  signal: (req) => chatService.signal(req),\n});\n```\n\n## API\n\n### Transport\n\n| Export | Description |\n|--------|-------------|\n| `parseSSEStream(response, options?)` | Parse `text/event-stream` Response into `AsyncGenerator<AGUIEvent>` |\n| `connectChatWebSocket(request, options?)` | Connect to WebSocket, returns `{ events, close }` |\n\n### Event Processing\n\n| Export | Description |\n|--------|-------------|\n| `normalizeFrame(frame)` | Convert `WorkflowOutputFrame` to typed `AGUIEvent` |\n| `parseCustomEvent(event)` | Parse `CUSTOM` event into typed data structure |\n\n### Run Session\n\n| Export | Description |\n|--------|-------------|\n| `createRunSession()` | Create initial `RunSessionState` |\n| `reduceEvent(state, event)` | Pure reducer: returns new state with event applied |\n\n### React Hooks\n\n| Hook | Description |\n|------|-------------|\n| `useChatStream(options)` | SSE streaming — requires injected `streamChat` function |\n| `useRunSession()` | Standalone session state — `{ session, dispatch, reset }` |\n| `useHumanInteraction(options)` | Resume/signal — requires injected `resume` and `signal` functions |\n\n## AGUI Event Types\n\n12 core event types aligned with the Aevatar AGUI protocol:\n\n`RUN_STARTED` · `RUN_FINISHED` · `RUN_ERROR` · `STEP_STARTED` · `STEP_FINISHED` · `TEXT_MESSAGE_START` · `TEXT_MESSAGE_CONTENT` · `TEXT_MESSAGE_END` · `STATE_SNAPSHOT` · `TOOL_CALL_START` · `TOOL_CALL_END` · `CUSTOM`\n\n## Custom Event Names\n\n7 known custom event types:\n\n`aevatar.run.context` · `aevatar.step.request` · `aevatar.step.completed` · `aevatar.human_input.request` · `aevatar.workflow.waiting_signal` · `aevatar.workflow.signal.buffered` · `aevatar.llm.reasoning`\n\n## License\n\nISC\n","readmeFilename":"README.md","_rev":"1-f871b830b2861d3e3a7c841da80fcfec"}