donobu
Version:
Create browser automations with an LLM agent and replay them as Playwright scripts.
121 lines (89 loc) • 7.17 kB
Markdown
# Donobu SDK
Create, run, and heal AI-assisted Playwright flows with a single dependency. The `donobu` package ships the Playwright fixture, Page.AI orchestration layer, CLI wrapper, failure triage, and plugin system to comprehensively test websites.
## Highlights
- **Typed Playwright fixture** - `import { test } from 'donobu'` to extend Playwright with `page.ai` helpers, smart selectors, and persistence.
- **Autonomous Page.AI** - run `page.ai()` with optional Zod schemas, cached tool-call replays, custom tool allow-lists, and env-var controls.
- **Prebuilt tools** - call keyboard, mouse, accessibility, cookie, and analysis tools via friendly wrappers (`page.runAccessibilityTest`, etc).
- **Failure triage & auto-heal** - `npx donobu test --auto-heal` captures screenshots, GPT reasoning, structured treatment plans, and can re-run fixes automatically.
## Prerequisites
- Node.js 18+ and a package manager (npm 8+, pnpm 10+, or yarn).
- Playwright browsers (`npx playwright install`).
- At least one LLM credential (OpenAI, Anthropic, Google Gemini, AWS Bedrock, or Donobu API).
## Installation
```bash
npm install --save-dev donobu @playwright/test
npx playwright install # downloads browsers if needed
```
## Quick Start
1. **Author a test using the Donobu fixture**
```ts
import { test } from 'donobu';
test('Test for https://www.starbucks.com', async ({ page }) => {
await page.goto('https://www.starbucks.com');
await page.ai('Go to the featured menu page');
await page.ai.assert(
`Assert that the featured menu page has a seasonally appropriate vibe for ${new Date()}`,
);
await page.ai('Find a Starbucks store in Stowe, Vermont');
await page.ai.assert(
'Assert that a store in Stowe, Vermont is found and the map shows Mt. Mansfield close by.',
);
});
```
2. **Run the test with Page.AI enabled**
```bash
OPENAI_API_KEY=sk-*** npx donobu test
```
`npx donobu test` proxies Playwright while wiring Donobu-specific env vars (triage directories, Page.AI cache clearing, auto-heal retries, etc.).
### Page.AI API Surface
| Method | Description |
| ---------------------------------------- | -------------------------------------------------------------------- |
| `await page.ai(instruction, opts?)` | Launches an autonomous Donobu flow that can call browser tools. |
| `await page.ai.assert(assertion, opts?)` | AI assertion against DOM text, screenshot, title, and URL. |
| `await page.ai.extract(schema, opts?)` | Produce JSON data shaped by a Zod schema using screenshot + history. |
- Every invocation of `page.ai()` is cached in `<spec directory>/.cache-lock/<spec-file>.cache.js`. Run `npx donobu test --clear-ai-cache` to regenerate the cache.
## Page.AI Caching, Env Vars, and Secrets
- Per-spec cache: Page.AI cache entries are saved next to the spec inside `.cache-lock/<spec-file>.cache.js`. Commit them to stabilise selectors or delete to regenerate.
- CLI toggles: `--clear-ai-cache` (or `DONOBU_PAGE_AI_CLEAR_CACHE=1`) clears cache before each `page.ai.act`.
- Allow specific env vars by explicitly referencing them by name in the `page.ai()` instruction or by passing them as options:
```ts
test('uses secret', async ({ page }, testInfo) => {
await page.ai('Log in using {{$.env.MY_SECRET}} credentials', {
envVars: ['SOME_OTHER_SECRET'],
});
});
```
In the above example, the `page.ai` agent will have access to the `MY_SECRET` and `SOME_OTHER_SECRET` env vars.
## CLI Usage
`npx donobu` mirrors Playwright subcommands and adds Donobu-specific tooling.
| Command | What it does |
| ------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| `npx donobu test [playwright args]` | Runs Playwright tests with Donobu fixtures, triage, optional auto-heal, and Page.AI caching controls. |
| `npx donobu test --auto-heal` | After failures, generate treatment plans and automatically retry tests whose plans recommend it. |
| `npx donobu test --no-triage` | Skip evidence gathering (faster but no treatment plans). |
| `npx donobu test --triage-output-dir ./artifacts` | Persist evidence outside `test-results/donobu-triage`. |
| `npx donobu test --clear-ai-cache` | Clear Page.AI cache before every `act()` invocation for the run. |
| `npx donobu heal --plan path/to/plan.json` | Re-run a previously generated treatment plan with matching Playwright args. |
| `npx playwright-json-to-markdown report.json` | Convert Playwright JSON reports into human-friendly Markdown. |
| `npx playwright-json-to-slack-json report.json` | Produce Slack-ready payloads from Playwright reports. |
### Failure Evidence & Auto-Heal
- During `donobu test`, failure evidence (flow metadata, screenshots, DOM dumps, GPT summaries) is stored under `test-results/donobu-triage/<timestamp>-<runId>/`.
- `triageTestFailure` builds a structured treatment plan containing failure reason, remediation steps, and automation directives. Plans are written next to the evidence (prefixed with `treatment-plan-`).
- Passing `--auto-heal` lets Donobu run an autonomous flow that attempts to fix selectors/code. Successful fixes attach regenerated tests (`fixed-test.ts`) and annotate runs with `@self-healed`.
## GPT Configuration
Donobu selects a GPT backend in the following priority order:
1. `BASE64_GPT_CONFIG` - Base64 JSON matching `GptConfigSchema`.
2. `DONOBU_API_KEY` - use Donobu hosted models.
3. Anthropic via AWS Bedrock (`AWS_BEDROCK_MODEL_NAME`, `AWS_REGION`, `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`).
4. Anthropic direct (`ANTHROPIC_API_KEY`, optional `ANTHROPIC_MODEL_NAME`).
5. Google Gemini (`GOOGLE_GENERATIVE_AI_API_KEY`, optional `GOOGLE_GENERATIVE_AI_MODEL_NAME`).
6. OpenAI (`OPENAI_API_KEY`, optional `OPENAI_API_MODEL_NAME`).
Additional runtime env vars:
| Env var | Purpose |
| ------------------------------------------------ | ---------------------------------------------------------------- |
| `DONOBU_PAGE_AI_CLEAR_CACHE` | Force cache invalidation for every `page.ai()` call. |
| `BASE_WORKING_DIR` | Override the platform-specific Donobu data directory. |
| `BROWSERBASE_API_KEY` / `BROWSERBASE_PROJECT_ID` | Run flows inside BrowserBase sessions instead of local Chromium. |
## Additional Resources
- Example flows and generated tests: <https://github.com/donobu-inc/playwright-flows>
- Support: <https://donobu.com>