{"_id":"@actionpackd/sdk-core","_rev":"2-677357e0fe62ba89d95663bcc2c71dab","name":"@actionpackd/sdk-core","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@actionpackd/sdk-core","version":"0.1.0","keywords":["ai","sdk","typescript","openai","anthropic","gemini","streaming","type-safe","security"],"author":{"name":"Actionpackd"},"license":"MIT","_id":"@actionpackd/sdk-core@0.1.0","maintainers":[{"name":"ramasundaram","email":"ramasundaram.s10@gmail.com"}],"homepage":"https://github.com/actionpackd/ai-sdk#readme","bugs":{"url":"https://github.com/actionpackd/ai-sdk/issues"},"dist":{"shasum":"c9c9d6e9341c1eae0e14b646c9af30bce0ead4bf","tarball":"https://registry.npmjs.org/@actionpackd/sdk-core/-/sdk-core-0.1.0.tgz","fileCount":22,"integrity":"sha512-8qVvjj52AaHethVHObyf6MjCtaA/cIoKjjIrG7KiX+AfzhrgZcdD83/2lflybBkHeSZhVHeGywV3X20W//BmYA==","signatures":[{"sig":"MEYCIQCKVwHzPqaeegGS2EHo9m3geZ/HBpYtKBBzUO4/Gj09+wIhAIHt1AZB+1rjGG5plnTabZA25xZuWt0ItzQLIQH6B0Ns","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251932},"main":"./dist/index.js","type":"module","_from":"file:actionpackd-sdk-core-0.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js","require":"./dist/client.cjs"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"scripts":{"lint":"eslint src","test":"vitest run --config ../../vitest.config.ts","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"ramasundaram","email":"ramasundaram.s10@gmail.com"},"_resolved":"/private/var/folders/gf/2vw2dfl573xd69lswwk2vnw80000gn/T/c2dcdc2c20cc94ee38e8df22329b38a1/actionpackd-sdk-core-0.1.0.tgz","_integrity":"sha512-8qVvjj52AaHethVHObyf6MjCtaA/cIoKjjIrG7KiX+AfzhrgZcdD83/2lflybBkHeSZhVHeGywV3X20W//BmYA==","repository":{"url":"git+https://github.com/actionpackd/ai-sdk.git","type":"git"},"_npmVersion":"10.9.2","description":"Actionpackd AI SDK - Secure, typed AI interactions with multiple providers","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.22.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","react":"^18.2.0","vitest":"^1.3.1","@types/node":"^18.18.0","@types/react":"^18.3.24"},"peerDependencies":{"react":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk-core_0.1.0_1758507882368_0.4458993585093416","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@actionpackd/sdk-core","version":"0.1.1","description":"Actionpackd AI SDK - Secure, typed AI interactions with multiple providers","repository":{"type":"git","url":"git+https://github.com/ActionpackdHQ/AI-SDK.git"},"keywords":["ai","sdk","typescript","openai","anthropic","gemini","streaming","type-safe","security"],"author":{"name":"Actionpackd"},"license":"MIT","bugs":{"url":"https://github.com/ActionpackdHQ/AI-SDK/issues"},"homepage":"https://github.com/ActionpackdHQ/AI-SDK#readme","type":"module","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","require":"./dist/index.cjs","types":"./dist/index.d.ts"},"./client":{"import":"./dist/client.js","require":"./dist/client.cjs","types":"./dist/client.d.ts"},"./server":{"import":"./dist/server.js","require":"./dist/server.cjs","types":"./dist/server.d.ts"}},"dependencies":{"zod":"^3.22.4"},"peerDependencies":{"react":"^18.0.0"},"devDependencies":{"@types/node":"^18.18.0","@types/react":"^18.3.24","react":"^18.2.0","tsup":"^8.3.5","vitest":"^1.3.1"},"engines":{"node":">=18"},"publishConfig":{"access":"public"},"scripts":{"build":"tsup","test":"vitest run --config ../../vitest.config.ts","test:watch":"vitest","lint":"eslint src","typecheck":"tsc --noEmit"},"_id":"@actionpackd/sdk-core@0.1.1","_integrity":"sha512-KHkTlijr4iaTkV1vidvnE62dgLjnYYkT0B4Z0Y/ijIHRZdEJDalgFWmLd31P3vD4ZEinu1PvnMpE34hi2iO0fA==","_resolved":"/private/var/folders/gf/2vw2dfl573xd69lswwk2vnw80000gn/T/410f4d8e14bfadaeeb4fad3db634fbb0/actionpackd-sdk-core-0.1.1.tgz","_from":"file:actionpackd-sdk-core-0.1.1.tgz","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-KHkTlijr4iaTkV1vidvnE62dgLjnYYkT0B4Z0Y/ijIHRZdEJDalgFWmLd31P3vD4ZEinu1PvnMpE34hi2iO0fA==","shasum":"356e82e66f75a3c40e3bde5aea4dbe6c6edde80a","tarball":"https://registry.npmjs.org/@actionpackd/sdk-core/-/sdk-core-0.1.1.tgz","fileCount":23,"unpackedSize":253006,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDSGzVoUSODvUZ9mcbmGt0/+gkyEod3xTiX5f5NRikbqQIhAPovONE6ooDVdtFuJErZeMfICoAMVY2igcn09WrUaaaC"}]},"_npmUser":{"name":"ramasundaram","email":"ramasundaram.s10@gmail.com"},"directories":{},"maintainers":[{"name":"ramasundaram","email":"ramasundaram.s10@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk-core_0.1.1_1758512976415_0.12355335255962041"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-22T02:24:42.278Z","modified":"2025-09-22T03:49:36.832Z","0.1.0":"2025-09-22T02:24:42.680Z","0.1.1":"2025-09-22T03:49:36.612Z"},"bugs":{"url":"https://github.com/ActionpackdHQ/AI-SDK/issues"},"author":{"name":"Actionpackd"},"license":"MIT","homepage":"https://github.com/ActionpackdHQ/AI-SDK#readme","keywords":["ai","sdk","typescript","openai","anthropic","gemini","streaming","type-safe","security"],"repository":{"type":"git","url":"git+https://github.com/ActionpackdHQ/AI-SDK.git"},"description":"Actionpackd AI SDK - Secure, typed AI interactions with multiple providers","maintainers":[{"name":"ramasundaram","email":"ramasundaram.s10@gmail.com"}],"readme":"# Actionpackd AI SDK\n\n2 lines to magic — typed, streaming AI outputs 🪄\n\nA secure, well-tested TypeScript SDK for interacting with AI models, with built-in support for:\n- Strong type safety with Zod schemas\n- Streaming responses with structured data detection\n- Safe template interpolation\n- PII redaction and security best practices\n- Multi-step flows with validation\n- React hooks for client-side use\n- Mock providers for easy testing and demos\n\n## Quick Start\n\n```bash\n# Install\n# Using npm\nnpm install @actionpackd/ai-sdk zod\n\n# Using yarn\nyarn add @actionpackd/ai-sdk zod\n\n# Using pnpm\npnpm add @actionpackd/ai-sdk zod\n\n# Try the demo\npnpm tsx examples/simple-demo.ts --provider openai\n```\n\n```typescript\nimport { createProvider, serverCompose } from '@actionpackd/ai-sdk';\nimport { z } from 'zod';\n\n// Create a provider\nconst provider = createProvider({ id: 'openai' });\n\n// Define your schema\nconst ProductSchema = z.object({\n  name: z.string(),\n  price: z.number(),\n  description: z.string(),\n});\n\n// Get typed, validated output\nconst product = await serverCompose(provider, 'Generate a product', {\n  schema: ProductSchema\n});\n```\n\n## Features\n\n### 🔒 Security First\n\n- No secrets in code - environment variables only\n- Automated secrets scanning in CI\n- PII redaction by default\n- Safe template interpolation (no eval)\n- Opt-in telemetry\n- Strong output validation\n\n### 🌊 Streaming Support\n\n```typescript\n// Server-side streaming\nconst stream = provider.generateStream('Tell me a story');\nfor await (const token of stream) {\n  console.log(token);\n}\n\n// React hook with streaming\nfunction Demo() {\n  const { completion, isLoading } = useCompose('Tell me a story');\n  return <div>{completion}</div>;\n}\n```\n\n### 📝 Type Safety\n\n```typescript\n// Define schema\nconst StorySchema = z.object({\n  title: z.string(),\n  content: z.string(),\n  genre: z.enum(['fiction', 'non-fiction']),\n});\n\n// Get typed output with validation\nconst story = await serverCompose(provider, 'Tell me a story', {\n  schema: StorySchema,\n  retries: 1, // Retry with schema hints if validation fails\n});\n```\n\n### 🔄 Multi-step Flows\n\n```typescript\nconst flow = flowBuilder(provider)\n  .addStep({\n    prompt: 'Generate a character',\n    schema: CharacterSchema,\n  })\n  .addStep({\n    prompt: 'Generate a story about {{results.step1.name}}',\n    schema: StorySchema,\n  });\n\nconst results = await flow.execute();\n```\n\n### 🎭 Mock Providers\n\nThe SDK includes mock providers for OpenAI, Anthropic, and Gemini that return realistic responses without making API calls. Perfect for:\n- Development and testing\n- CI environments\n- Demos and examples\n\nTry different providers:\n```bash\n# Try different mock providers\n./examples/multi-model-demo.sh --provider openai\n./examples/multi-model-demo.sh --provider anthropic\n./examples/multi-model-demo.sh --provider gemini\n```\n\n### 🌐 Next.js Demo\n\nA complete Next.js demo is included in `examples/next-starter` showing:\n- API route setup\n- Client-side streaming\n- Provider switching\n- Error handling\n\n```bash\ncd examples/next-starter\npnpm install\npnpm dev\n```\n\n## Security\n\nSee [SECURITY.md](../SECURITY.md) for:\n- Threat model\n- Security best practices\n- Vulnerability reporting\n\n## Adding Real Providers\n\nTo add a real provider (not included in core):\n\n1. Implement the Provider interface:\n```typescript\ninterface Provider {\n  id: string;\n  generateCompletion(prompt: string, options?: CompletionOptions): Promise<string>;\n  generateStream(prompt: string, options?: CompletionOptions): AsyncIterable<string>;\n}\n```\n\n2. Create provider package:\n```typescript\n// @actionpackd/provider-openai\nexport class OpenAIProvider implements Provider {\n  constructor(config: ProviderConfig) {\n    // Initialize with API key etc\n  }\n  \n  async generateCompletion(prompt: string) {\n    // Call OpenAI API\n  }\n  \n  async *generateStream(prompt: string) {\n    // Stream from OpenAI API\n  }\n}\n```\n\n3. Use provider:\n```typescript\nimport { OpenAIProvider } from '@actionpackd/provider-openai';\n\nconst provider = new OpenAIProvider({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n```\n\n## Migration Guide\n\nMigrating from useChat/ai.chat:\n\n```typescript\n// Before\nconst { messages } = useChat();\nai.chat('Hello');\n\n// After\nconst { completion } = useCompose('Hello');\nawait serverCompose(provider, 'Hello');\n```\n\n## Contributing\n\n1. Fork repo\n2. Create feature branch\n3. Make changes\n4. Add tests\n5. Submit PR\n\n## License\n\nMIT\n","readmeFilename":"README.md"}