{"_id":"@anek-codes/sdk","_rev":"2-4e2483f0e2d0e8437c7f0a86389c642e","name":"@anek-codes/sdk","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@anek-codes/sdk","version":"0.1.0","keywords":["anek","sdk","typescript","api","client"],"license":"MIT","_id":"@anek-codes/sdk@0.1.0","maintainers":[{"name":"sumansaurabh","email":"ss.sumansaurabh92@gmail.com"}],"dist":{"shasum":"399d5477224de22e50d0b3887b21cc2b8fa9ec92","tarball":"https://registry.npmjs.org/@anek-codes/sdk/-/sdk-0.1.0.tgz","fileCount":14,"integrity":"sha512-xdSNE1XT7yePP4AWHzH5BwyOnSG6YDzVBqmQaIjufEUvrZQrQmUcPJX3k9uFBiZ6OT5zfIzeOEj9ZLonQ3GoSw==","signatures":[{"sig":"MEUCIQDWzW0d9V3FzkMjhFEvAds00WyImcrAM51sOJxxaa0ZigIgMCaM0Hq4+3QiK/zu4bsSTfZrsqhOhl/PM5S/5R/EhQ4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205586},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"472cda17c8da432967dec4643073358ad796959b","scripts":{"test":"npm run build && node --test tests/*.js","build":"tsc -p tsconfig.json","prepublishOnly":"npm test"},"_npmUser":{"name":"sumansaurabh","email":"ss.sumansaurabh92@gmail.com"},"_npmVersion":"10.8.2","description":"TypeScript SDK for the Anek API","directories":{},"sideEffects":false,"_nodeVersion":"20.19.6","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_0.1.0_1767643777953_0.5003048309966605","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@anek-codes/sdk","version":"0.1.1","description":"TypeScript SDK for the Anek API","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"sideEffects":false,"scripts":{"build:tsc":"tsc -p tsconfig.json","build:obfuscate":"javascript-obfuscator dist --output dist --config obfuscator.config.json --exclude 'dist/**/*.d.ts,dist/**/*.d.ts.map'","build":"npm run build:tsc && npm run build:obfuscate","test":"npm run build && node --test tests/*.js","prepublishOnly":"npm test"},"engines":{"node":">=18"},"publishConfig":{"access":"public"},"keywords":["anek","sdk","typescript","api","client"],"license":"MIT","devDependencies":{"javascript-obfuscator":"^4.1.1","typescript":"^5.0.0"},"_id":"@anek-codes/sdk@0.1.1","gitHead":"0f0e752a463c1e029902c32d264555382da74157","_nodeVersion":"20.19.6","_npmVersion":"10.8.2","dist":{"integrity":"sha512-Ab3qNwrlI7EbVQ0OJM8CNqO/q+NJuVIx4Y+z1GXdDLJPb36ql17ILiTMyDC0wJYUHj/Sqz7rTIto6870y9++og==","shasum":"22c27415de4088a91e36d18a15883c25726ca3a1","tarball":"https://registry.npmjs.org/@anek-codes/sdk/-/sdk-0.1.1.tgz","fileCount":14,"unpackedSize":507139,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIB5v7JUBDji84EpAD73EysEskI2+eWuVPACYRbtqkeDDAiEA294M0wmw5Bilus4JRGvwQzGARRw48TM6wp4gTVkV+Io="}]},"_npmUser":{"name":"sumansaurabh","email":"ss.sumansaurabh92@gmail.com"},"directories":{},"maintainers":[{"name":"sumansaurabh","email":"ss.sumansaurabh92@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk_0.1.1_1767645507167_0.08589743533376404"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-05T20:09:37.880Z","modified":"2026-01-05T20:38:27.564Z","0.1.0":"2026-01-05T20:09:38.097Z","0.1.1":"2026-01-05T20:38:27.346Z"},"license":"MIT","keywords":["anek","sdk","typescript","api","client"],"description":"TypeScript SDK for the Anek API","maintainers":[{"name":"sumansaurabh","email":"ss.sumansaurabh92@gmail.com"}],"readme":"# Anek TypeScript SDK\n\nA TypeScript SDK for the Anek API. It uses HTTP calls and an API key (Bearer token by default).\n\n## Install\n\n```bash\nnpm install @anek-codes/sdk\n```\n\n## Quick start\n\n```ts\nimport { AnekClient } from '@anek-codes/sdk'\nimport type { Task, TaskLogEntry } from '@anek-codes/sdk'\n\nconst client = new AnekClient({\n  baseUrl: 'http://localhost:3000',\n  apiKey: 'YOUR_PERSONAL_ACCESS_TOKEN',\n})\n\nconst task = await client.agents.create({\n  prompt: 'Add a health check endpoint to the API',\n  repos: [\n    {\n      url: 'https://github.com/acme/my-repo',\n      baseBranch: 'main',\n    },\n  ],\n  selectedAgent: 'claude',\n})\n\nconst status = await client.agents.status(task.id)\nconst logs = await client.agents.logs(task.id, { limit: 100 })\nconst messages = await client.agents.messages(task.id)\n```\n\n## Available AI Models\n\nAnek supports multiple AI agents and models. You can specify both `selectedAgent` and `selectedModel` when creating tasks.\n\n### Supported Agents\n\n- **claude** - Anthropic's Claude models (default: `claude-sonnet-4-5-20250929`)\n- **codex** - OpenAI GPT models optimized for code (default: `openai/gpt-5.1`)\n- **copilot** - GitHub Copilot models (default: `claude-sonnet-4.5`)\n- **cursor** - Cursor AI models (default: `auto`)\n- **gemini** - Google's Gemini models (default: `gemini-3-pro-preview`)\n- **opencode** - Open-source and general models (default: `gpt-5`)\n\n### Example with Different Models\n\n```ts\n// Use Claude Opus for complex tasks\nconst task = await client.agents.create({\n  prompt: 'Refactor the authentication system',\n  repos: [{ url: 'https://github.com/acme/my-repo', baseBranch: 'main' }],\n  selectedAgent: 'claude',\n  selectedModel: 'claude-opus-4-5-20250201',\n})\n\n// Use GPT-5.1 Codex for code generation\nconst codeTask = await client.agents.create({\n  prompt: 'Generate REST API endpoints',\n  repos: [{ url: 'https://github.com/acme/my-repo', baseBranch: 'main' }],\n  selectedAgent: 'codex',\n  selectedModel: 'openai/gpt-5.1-codex',\n})\n```\n\n**For the complete list of available models**, visit the documentation at **[docs.anek.codes/concepts/models](https://docs.anek.codes/concepts/models)**\n\n## Sequences (multi-agent)\n\n```ts\nconst sequence = await client.sequences.create({\n  repos: [\n    {\n      url: 'https://github.com/acme/my-repo',\n      baseBranch: 'main',\n    },\n  ],\n  steps: [\n    {\n      name: 'analysis',\n      prompt: 'Analyze the repo and write an analysis.md with changes needed.',\n      selectedAgent: 'gemini',\n    },\n    {\n      name: 'implement',\n      prompt: 'Apply the plan from {{previousStep.response}} and update the code.',\n      selectedAgent: 'claude',\n    },\n  ],\n})\n\nconst taskId = sequence.task.id\n```\n\nYou can also call `client.agents.createSequence` as a convenience alias.\n\nFor local development in this repo, you can also import from `./sdk/typescript`.\n\n## Wait for completion\n\n```ts\nconst completed = await client.agents.waitForCompletion(task.id, {\n  intervalMs: 2000,\n})\n```\n\n## Stream messages and logs (SSE)\n\nReal-time streaming of messages, logs, and task updates:\n\n```ts\nawait client.tasks.streamMessages(task.id, {\n  onInit: (data) => {\n    console.log(`Initial: ${data.messages.length} messages, ${data.logs.length} logs`)\n  },\n  onMessage: (message) => {\n    console.log(`[${message.role}] ${message.content}`)\n  },\n  onLog: (log) => {\n    console.log(`[${log.type}] ${log.message}`)\n  },\n  onTaskUpdate: (task) => {\n    console.log(`Status: ${task.status}, Progress: ${task.progress}%`)\n  },\n  onComplete: (data) => {\n    console.log(`Completed with status: ${data.status}`)\n  },\n})\n```\n\nSee [sdk-e2e-test/STREAMING_API.md](./sdk-e2e-test/STREAMING_API.md) for detailed documentation.\n\n## Stream logs (polling)\n\n```ts\nfor await (const log of client.agents.watchLogs(task.id, { intervalMs: 1500 })) {\n  handleLogEntry(log)\n}\n```\n\n## Authentication\n\n- `apiKey` is sent as a Bearer token in the `Authorization` header by default.\n- Override `apiKeyHeader` or `apiKeyPrefix` if your deployment uses a different scheme.\n\n```ts\nconst client = new AnekClient({\n  baseUrl: 'https://api.example.com',\n  apiKey: 'YOUR_API_KEY',\n  apiKeyHeader: 'x-api-key',\n  apiKeyPrefix: '',\n})\n```\n\n## Build and test\n\n```bash\ncd sdk/typescript\nnpm install\nnpm run build\nnpm test\n```\n\n## Publish (npm)\n\nPublishing is automated via GitHub Actions in `/.github/workflows/publish-anek-sdk.yml`.\n\n1. Update the version in `sdk/typescript/package.json`.\n2. Create a git tag like `anek-sdk-v0.1.0` and push it.\n3. Ensure the repo has the `NPM_TOKEN` secret configured.\n\nThe workflow builds, tests, and publishes the package from `sdk/typescript`.\n\n## API surface\n\n- `client.agents`: create/status/logs/messages helpers plus polling utilities\n- `client.tasks`: full task API (files, diffs, PRs, sandbox control, deployments)\n- `client.auth`: session, PATs, OAuth connect helpers\n- `client.apiKeys`: store/check model provider keys\n- `client.git`, `client.github`, `client.gitlab`, `client.bitbucket`: repo discovery and metadata\n- `client.repos`: commits, issues, pull requests\n- `client.sandboxes`: list, health, lifecycle\n- `client.deployments`, `client.deploymentTokens`: deployment logs and tokens\n- `client.credits`, `client.payments`: billing APIs\n- `client.vercel`: scope listing\n- `client.connectors`, `client.taskManagement`: connector management\n- `client.mcp`: JSON-RPC interface\n- `client.webhooks`: webhook helpers\n- `client.misc`: health, OpenAPI, GitHub stars, Sentry test\n","readmeFilename":"README.md"}