{"_id":"@agentic-dev-library/vitest-control","name":"@agentic-dev-library/vitest-control","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@agentic-dev-library/vitest-control","version":"1.0.0","description":"Vitest plugin with fixtures and utilities for @agentic-dev-library/control E2E testing","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./mocking":{"types":"./dist/mocking.d.ts","import":"./dist/mocking.js"},"./fixtures":{"types":"./dist/fixtures.d.ts","import":"./dist/fixtures.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./providers":{"types":"./dist/providers.d.ts","import":"./dist/providers.js"},"./sandbox":{"types":"./dist/sandbox.d.ts","import":"./dist/sandbox.js"}},"scripts":{"build":"tsc","dev":"tsc --watch","test":"vitest","lint":"biome lint src/","lint:fix":"biome lint --write src/","format":"biome format --write src/","format:check":"biome format src/","check":"biome check src/","check:fix":"biome check --write src/","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"peerDependencies":{"vitest":">=1.0.0"},"devDependencies":{"@types/node":"^22.15.0","typescript":"^5.7.0","vitest":"^4.0.14"},"engines":{"node":">=22.0.0"},"keywords":["vitest","testing","fixtures","agentic-dev-library","control","e2e","mcp","ai-agents","mocking"],"author":{"name":"Jon Bogaty"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/agentic-dev-library/control.git","directory":"packages/vitest-agentic-control"},"homepage":"https://agentic-dev-library.github.io/packages/control/","bugs":{"url":"https://github.com/agentic-dev-library/control/issues"},"publishConfig":{"access":"public"},"gitHead":"1d4493c0d65da997bb529508193bbee1961cb947","_id":"@agentic-dev-library/vitest-control@1.0.0","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-waa17/bWmzy5uDXDCOVbZRdJJPMNJZsItJU+9GP52cDKxTQYtMt/5mephU6XbEEZu6lpV+4kLC2WKrHLqmWO0g==","shasum":"d9766275afd7df6b682f8b201470da915937583d","tarball":"https://registry.npmjs.org/@agentic-dev-library/vitest-control/-/vitest-control-1.0.0.tgz","fileCount":26,"unpackedSize":138286,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAnqTL5NYCg7PA+HA2AtgBdQDzySSHc40NcJIe69FWiuAiAA5WL61nmANqYZwtcaMHIzC4xO3fFQ1Iq6/ItSFB0YKQ=="}]},"_npmUser":{"name":"jbdevprimary","email":"jon@jonbogaty.com"},"directories":{},"maintainers":[{"name":"jbdevprimary","email":"jon@jonbogaty.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vitest-control_1.0.0_1766801013203_0.12872826534555903"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-27T02:03:33.121Z","1.0.0":"2025-12-27T02:03:33.355Z","modified":"2025-12-27T02:03:33.648Z"},"maintainers":[{"name":"jbdevprimary","email":"jon@jonbogaty.com"}],"description":"Vitest plugin with fixtures and utilities for @agentic-dev-library/control E2E testing","homepage":"https://agentic-dev-library.github.io/packages/control/","keywords":["vitest","testing","fixtures","agentic-dev-library","control","e2e","mcp","ai-agents","mocking"],"repository":{"type":"git","url":"git+https://github.com/agentic-dev-library/control.git","directory":"packages/vitest-agentic-control"},"author":{"name":"Jon Bogaty"},"bugs":{"url":"https://github.com/agentic-dev-library/control/issues"},"license":"MIT","readme":"# vitest-agentic-control\n\nVitest plugin with fixtures and utilities for agentic-control E2E testing.\n\n## Installation\n\n```bash\npnpm add -D vitest-agentic-control\n```\n\n## Features\n\n- **MCP Mocking**: Mock MCP servers, tools, and resources without real implementations\n- **Provider Mocking**: Mock AI providers (Anthropic, OpenAI, Google, Mistral, Azure, Ollama)\n- **Sandbox Mocking**: Mock Docker container execution and sandbox operations\n- **Test Fixtures**: Pre-configured fixtures for tokens, fleet, triage, and sandbox\n- **Environment Helpers**: Easy setup and cleanup of test environment variables\n\n## Quick Start\n\n```typescript\nimport { describe, it, expect, beforeEach, afterEach } from 'vitest';\nimport {\n    createAgenticMocker,\n    withTestEnv,\n    DEFAULT_TEST_ENV,\n} from 'vitest-agentic-control';\n\ndescribe('My Agentic Tests', () => {\n    let cleanup: () => void;\n    let mocker: ReturnType<typeof createAgenticMocker>;\n\n    beforeEach(() => {\n        // Set up test environment\n        cleanup = withTestEnv(DEFAULT_TEST_ENV);\n        mocker = createAgenticMocker();\n    });\n\n    afterEach(() => {\n        // Clean up\n        mocker.restoreAll();\n        cleanup();\n    });\n\n    it('should mock MCP server', async () => {\n        const server = mocker.mcp.mockServer('test-server', {\n            tools: [\n                {\n                    name: 'get_data',\n                    handler: () => ({ data: 'mocked' }),\n                },\n            ],\n        });\n\n        await server.connect();\n        const result = await server.callTool('get_data', {});\n        expect(result).toEqual({ data: 'mocked' });\n    });\n\n    it('should mock AI provider', async () => {\n        mocker.providers.mockAnthropic({\n            response: 'Hello from mocked Claude!',\n        });\n\n        // Your test code that uses Anthropic\n    });\n\n    it('should mock sandbox execution', async () => {\n        mocker.sandbox.mockExecution({\n            success: true,\n            stdout: 'Task completed successfully',\n            exitCode: 0,\n        });\n\n        const container = mocker.sandbox.createMockContainer({\n            image: 'node:22',\n        });\n\n        await container.start();\n        const result = await container.exec(['npm', 'test']);\n        expect(result.success).toBe(true);\n    });\n});\n```\n\n## MCP Mocking\n\n```typescript\nimport { createMcpMocker } from 'vitest-agentic-control';\n\nconst mcpMocker = createMcpMocker();\n\n// Create a mock MCP server with tools and resources\nconst server = mcpMocker.mockServer('my-server', {\n    tools: [\n        {\n            name: 'search',\n            description: 'Search for documents',\n            inputSchema: {\n                type: 'object',\n                properties: {\n                    query: { type: 'string' },\n                },\n            },\n            handler: (args) => ({\n                results: ['doc1', 'doc2'],\n            }),\n        },\n    ],\n    resources: [\n        {\n            uri: 'file:///config.json',\n            content: '{\"key\": \"value\"}',\n            mimeType: 'application/json',\n        },\n    ],\n});\n\n// Use the mock server\nawait server.connect();\nconst tools = await server.listTools();\nconst result = await server.callTool('search', { query: 'test' });\n```\n\n## Provider Mocking\n\n```typescript\nimport { createProviderMocker } from 'vitest-agentic-control';\n\nconst providerMocker = createProviderMocker();\n\n// Mock Anthropic\nproviderMocker.mockAnthropic({\n    response: 'Hello! I am Claude.',\n    usage: {\n        promptTokens: 10,\n        completionTokens: 20,\n        totalTokens: 30,\n    },\n});\n\n// Mock OpenAI with streaming\nproviderMocker.mockOpenAI({\n    response: 'Hello! I am GPT.',\n    stream: true,\n});\n\n// Mock with simulated latency\nproviderMocker.mockGoogle({\n    response: 'Hello! I am Gemini.',\n    latency: 500, // 500ms delay\n});\n\n// Mock with error\nproviderMocker.mockMistral({\n    error: new Error('Rate limit exceeded'),\n});\n```\n\n## Sandbox Mocking\n\n```typescript\nimport { createSandboxMocker } from 'vitest-agentic-control';\n\nconst sandboxMocker = createSandboxMocker();\n\n// Set default execution result\nsandboxMocker.mockExecution({\n    success: true,\n    stdout: 'Build completed',\n    exitCode: 0,\n});\n\n// Queue multiple results for sequential executions\nsandboxMocker.queueResults([\n    { success: true, stdout: 'Step 1 done', exitCode: 0 },\n    { success: true, stdout: 'Step 2 done', exitCode: 0 },\n    { success: false, stderr: 'Step 3 failed', exitCode: 1 },\n]);\n\n// Create and use mock container\nconst container = sandboxMocker.createMockContainer({\n    image: 'python:3.11',\n    workdir: '/app',\n    memory: 512,\n});\n\nawait container.start();\nconst result1 = await container.exec(['pip', 'install', '-r', 'requirements.txt']);\nconst result2 = await container.exec(['python', 'main.py']);\nawait container.stop();\n```\n\n## Test Fixtures\n\n```typescript\nimport {\n    createTestConfig,\n    createTokenConfig,\n    createFleetConfig,\n    createTriageConfig,\n    createSandboxConfig,\n    createMockGitHubIssue,\n    createMockGitHubPR,\n} from 'vitest-agentic-control';\n\n// Create full test configuration\nconst config = createTestConfig({\n    logLevel: 'debug',\n    tokens: true,\n    fleet: true,\n    triage: true,\n    sandbox: true,\n});\n\n// Create individual configs with overrides\nconst tokens = createTokenConfig({\n    organizations: {\n        'my-org': { name: 'my-org', tokenEnvVar: 'MY_ORG_TOKEN' },\n    },\n});\n\nconst triage = createTriageConfig({\n    provider: 'openai',\n    model: 'gpt-4-turbo',\n});\n\n// Create mock GitHub objects\nconst issue = createMockGitHubIssue({\n    number: 42,\n    title: 'Fix the bug',\n    labels: ['bug', 'priority:high'],\n});\n\nconst pr = createMockGitHubPR({\n    number: 123,\n    title: 'Add new feature',\n    state: 'open',\n    labels: ['enhancement'],\n});\n```\n\n## Environment Setup\n\n```typescript\nimport { withTestEnv, DEFAULT_TEST_ENV } from 'vitest-agentic-control';\nimport { beforeEach, afterEach } from 'vitest';\n\ndescribe('Tests with environment', () => {\n    let cleanup: () => void;\n\n    beforeEach(() => {\n        // Set up test environment. You can use the defaults:\n        // cleanup = withTestEnv(DEFAULT_TEST_ENV);\n        \n        // Or provide custom values:\n        cleanup = withTestEnv({\n            GITHUB_TOKEN: 'custom-token',\n            ANTHROPIC_API_KEY: 'custom-api-key',\n            MY_CUSTOM_VAR: 'custom-value',\n        });\n    });\n\n    afterEach(() => {\n        cleanup();\n    });\n\n    it('should have test tokens available', () => {\n        expect(process.env.GITHUB_TOKEN).toBeDefined();\n    });\n});\n```\n\n## API Reference\n\n### Main Mocker\n\n- `createAgenticMocker(options?)` - Create the main mocker instance\n- `AgenticMocker.mcp` - MCP mocking utilities\n- `AgenticMocker.providers` - Provider mocking utilities\n- `AgenticMocker.sandbox` - Sandbox mocking utilities\n- `AgenticMocker.mockEnv(env)` - Mock environment variables\n- `AgenticMocker.mockGitHubClient(options?)` - Mock GitHub client\n- `AgenticMocker.restoreAll()` - Restore all mocks\n\n### MCP Mocking\n\n- `createMcpMocker(options?)` - Create MCP mocker\n- `McpMocker.mockServer(name, config)` - Create mock MCP server\n- `McpMocker.mockClient()` - Mock MCP client module\n- `McpMocker.createMockTool(name, handler, options?)` - Create mock tool\n- `McpMocker.createMockResource(uri, content, options?)` - Create mock resource\n\n### Provider Mocking\n\n- `createProviderMocker(options?)` - Create provider mocker\n- `ProviderMocker.mockAnthropic(config?)` - Mock Anthropic\n- `ProviderMocker.mockOpenAI(config?)` - Mock OpenAI\n- `ProviderMocker.mockGoogle(config?)` - Mock Google\n- `ProviderMocker.mockMistral(config?)` - Mock Mistral\n- `ProviderMocker.mockAzure(config?)` - Mock Azure\n- `ProviderMocker.mockOllama(config?)` - Mock Ollama\n- `ProviderMocker.createMockModel(provider, modelId, config?)` - Create mock model\n\n### Sandbox Mocking\n\n- `createSandboxMocker(options?)` - Create sandbox mocker\n- `SandboxMocker.mockExecution(result)` - Set default execution result\n- `SandboxMocker.queueResult(result)` - Queue execution result\n- `SandboxMocker.createMockContainer(config?)` - Create mock container\n- `SandboxMocker.mockDockerCommands()` - Mock Docker CLI commands\n- `SandboxMocker.mockContainerManager()` - Mock ContainerManager class\n\n### Fixtures\n\n- `createTestConfig(options?)` - Create full test configuration\n- `createTokenConfig(overrides?)` - Create token configuration\n- `createFleetConfig(overrides?)` - Create fleet configuration\n- `createTriageConfig(overrides?)` - Create triage configuration\n- `createSandboxConfig(overrides?)` - Create sandbox configuration\n- `withTestEnv(env?)` - Set up test environment\n- `createMockGitHubIssue(overrides?)` - Create mock GitHub issue\n- `createMockGitHubPR(overrides?)` - Create mock GitHub PR\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-c42bdc13f6e628fdec0b777194e63bb6"}