{"_id":"@automatey-org/agent-core","_rev":"4-039ee1ea9940d28772927d2b080406a7","name":"@automatey-org/agent-core","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.1":{"name":"@automatey-org/agent-core","version":"0.1.1","keywords":["ai","agent","vercel-ai-sdk","streaming","reasoning","react-loop","nemotron","automatey"],"license":"MIT","_id":"@automatey-org/agent-core@0.1.1","maintainers":[{"name":"maxgolovanov","email":"max.golovanov@gmail.com"}],"dist":{"shasum":"98e88bff93dfbe26e1dfe2ff3095b728073d5608","tarball":"https://registry.npmjs.org/@automatey-org/agent-core/-/agent-core-0.1.1.tgz","fileCount":14,"integrity":"sha512-n+ZrQ/wnxtz5DasLLVXivluOqcd4Mkn74s+2UjAmMQwQAzSIUxmcQ13SHHO0AGRp8CfzTHYp7I00nTW6CXj9eA==","signatures":[{"sig":"MEUCIQDg+knLdtEU0q1cXSaSneqWotkyJQSzUfi6KbJodU409wIgHM3Z4dJh82BC6osRvyXrHIDtMOawNCnxYwAwEoUnhwA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15270},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"3ea423195809db00d5430abb5abb5415bf9528b0","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"maxgolovanov","email":"max.golovanov@gmail.com"},"deprecated":"Broken for Node ESM (extensionless relative imports); use 0.1.2+.","_npmVersion":"11.12.1","description":"Framework-agnostic Vercel AI SDK ReAct streaming loop: text + reasoning + tools + metrics. The one agent loop shared by the CLI, web, and extension.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.11","typescript":"^5.6.0"},"peerDependencies":{"ai":">=7 <8"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.1.1_1783220451163_0.873154271410501","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@automatey-org/agent-core","version":"0.1.2","keywords":["ai","agent","vercel-ai-sdk","streaming","reasoning","react-loop","nemotron","automatey"],"license":"MIT","_id":"@automatey-org/agent-core@0.1.2","maintainers":[{"name":"maxgolovanov","email":"max.golovanov@gmail.com"}],"dist":{"shasum":"259d95ab932acd69fdef8183092f948763d1f6d1","tarball":"https://registry.npmjs.org/@automatey-org/agent-core/-/agent-core-0.1.2.tgz","fileCount":14,"integrity":"sha512-a3HY6zw0UuzEXc2Kk6C7ifALvWwU+UJjD0QemltlCtnSl74TRd2d2rOjC4XrCRFTYcewFoj4sKa5qgkPmVe+wg==","signatures":[{"sig":"MEQCIEjoA+WuCLW0qMd9KZevTq9lEHP+zF9IYB6Ll7lzDuSlAiBy7Oj0sjf5TBLNl3tCD8P3Bdb/XHwjf4sOcS4fx/8k+A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15312},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"3ea423195809db00d5430abb5abb5415bf9528b0","scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"maxgolovanov","email":"max.golovanov@gmail.com"},"_npmVersion":"11.12.1","description":"Framework-agnostic Vercel AI SDK ReAct streaming loop: text + reasoning + tools + metrics. The one agent loop shared by the CLI, web, and extension.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^7.0.11","typescript":"^5.6.0"},"peerDependencies":{"ai":">=7 <8"},"_npmOperationalInternal":{"tmp":"tmp/agent-core_0.1.2_1783225436015_0.6990221049478895","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@automatey-org/agent-core","version":"0.1.3","description":"Framework-agnostic Vercel AI SDK ReAct streaming loop: text + reasoning + tools + metrics. The one agent loop shared by the CLI, web, and extension.","keywords":["ai","agent","vercel-ai-sdk","streaming","reasoning","react-loop","nemotron","automatey"],"license":"MIT","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","main":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"sideEffects":false,"scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run build"},"peerDependencies":{"ai":">=7 <8"},"devDependencies":{"ai":"^7.0.11","typescript":"^5.6.0"},"publishConfig":{"access":"public"},"gitHead":"3ea423195809db00d5430abb5abb5415bf9528b0","_id":"@automatey-org/agent-core@0.1.3","_nodeVersion":"24.15.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-5z3659mzmIcemkuFCwc6FqISr7Gco2QlfSA5Z7pXky0PB4EKFLg85L+J2yuD9sZt238Q2tf7d8dfIJdcAct6BQ==","shasum":"de8309ae3c5f6998934b8a69a9b2cc57fef5a488","tarball":"https://registry.npmjs.org/@automatey-org/agent-core/-/agent-core-0.1.3.tgz","fileCount":14,"unpackedSize":16854,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD/6u9aDiGq5wSVqjJMTGW8j6MXq9RGsCgDICVrA8go8QIhAJiTD0klp9yJ+BJg/xthyaRn+/ZvGQ3e0vfWpKAcLugk"}]},"_npmUser":{"name":"maxgolovanov","email":"max.golovanov@gmail.com"},"directories":{},"maintainers":[{"name":"maxgolovanov","email":"max.golovanov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/agent-core_0.1.3_1783272700657_0.2132298169123763"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-05T03:00:50.863Z","modified":"2026-07-05T17:31:40.943Z","0.1.1":"2026-07-05T03:00:51.292Z","0.1.2":"2026-07-05T04:23:56.142Z","0.1.3":"2026-07-05T17:31:40.805Z"},"license":"MIT","keywords":["ai","agent","vercel-ai-sdk","streaming","reasoning","react-loop","nemotron","automatey"],"description":"Framework-agnostic Vercel AI SDK ReAct streaming loop: text + reasoning + tools + metrics. The one agent loop shared by the CLI, web, and extension.","maintainers":[{"name":"maxgolovanov","email":"max.golovanov@gmail.com"}],"readme":"# @automatey-org/agent-core\r\n\r\nThe one framework-agnostic **Vercel AI SDK ReAct streaming loop** — shared by the\r\nAutomatey CLI, the web app, and the browser extension. No React, no DOM, no\r\nprovider construction. Just the turn loop, a stable callback contract, and types.\r\n\r\n```ts\r\nimport { Agent } from '@automatey-org/agent-core';\r\nimport { createOpenAICompatible } from '@ai-sdk/openai-compatible';\r\n\r\nconst model = createOpenAICompatible({ name: 'vllm', baseURL, apiKey })('nvidia/…');\r\n\r\nconst agent = new Agent({\r\n  model,\r\n  tools,                       // Record<string, Tool> (Vercel AI SDK ToolSet)\r\n  systemPrompt,\r\n  maxSteps: 8,\r\n  modelLabel: 'Nemotron',\r\n  extractReasoningTag: 'think', // optional: pull <think>…</think> into reasoning\r\n});\r\n\r\nawait agent.run('hello', {\r\n  onToken: (t) => …,           // answer text delta\r\n  onReasoning: (t) => …,       // live reasoning delta\r\n  onToolCall: (name, input) => …,\r\n  onToolResult: (name, output) => …,\r\n  onStatus: (s) => …,          // 'thinking' | 'generating' | 'tool' | 'done'\r\n  onMetrics: (m) => …,         // { model, durationMs, firstTokenMs, *Tokens }\r\n  signal,                      // AbortSignal\r\n});\r\n```\r\n\r\n## Design\r\n- **Provider-agnostic:** pass an already-built model. Provider construction\r\n  (Nemotron thinking budget, OpenAI, Anthropic) lives in `@automatey-org/nemotron`.\r\n- **Minimal core, optional features:** the `<tag>` reasoning extraction is opt-in\r\n  (`extractReasoningTag`); everything else is the smallest viable loop.\r\n- **Vercel AI SDK v7:** `streamText` + `stopWhen: stepCountIs(n)`, unified\r\n  `fullStream` (`text-delta`, `reasoning-delta`, `tool-call`, `tool-result`,\r\n  `finish-step`). `ai` is a **peer dependency** so there is one SDK instance.\r\n\r\nPeer dependency: `ai >= 7`.\r\n","readmeFilename":"README.md"}