testdriverai 7.0.0 → 7.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +2 -0
- package/.github/workflows/linux-tests.yml +28 -0
- package/README.md +126 -0
- package/agent/index.js +7 -9
- package/agent/interface.js +13 -2
- package/agent/lib/commands.js +795 -136
- package/agent/lib/redraw.js +124 -39
- package/agent/lib/sandbox.js +40 -3
- package/agent/lib/sdk.js +21 -0
- package/agent/lib/valid-version.js +2 -2
- package/debugger/index.html +1 -1
- package/docs/docs.json +86 -71
- package/docs/guide/best-practices-polling.mdx +154 -0
- package/docs/v6/getting-started/self-hosting.mdx +3 -2
- package/docs/v7/_drafts/agents.mdx +852 -0
- package/docs/v7/_drafts/auto-cache-key.mdx +167 -0
- package/docs/v7/_drafts/best-practices.mdx +486 -0
- package/docs/v7/_drafts/caching-ai.mdx +215 -0
- package/docs/v7/_drafts/caching-selectors.mdx +400 -0
- package/docs/v7/_drafts/caching.mdx +366 -0
- package/docs/v7/_drafts/cli-to-sdk-migration.mdx +425 -0
- package/docs/v7/_drafts/core.mdx +459 -0
- package/docs/v7/_drafts/dashcam-title-feature.mdx +89 -0
- package/docs/v7/_drafts/debugging.mdx +349 -0
- package/docs/v7/_drafts/error-handling.mdx +501 -0
- package/docs/v7/_drafts/faq.mdx +393 -0
- package/docs/v7/_drafts/hooks.mdx +360 -0
- package/docs/v7/_drafts/implementation-plan.mdx +994 -0
- package/docs/v7/_drafts/init-command.mdx +95 -0
- package/docs/v7/_drafts/optimal-sdk-design.mdx +1348 -0
- package/docs/v7/_drafts/performance.mdx +517 -0
- package/docs/v7/_drafts/presets.mdx +210 -0
- package/docs/v7/_drafts/progressive-disclosure.mdx +230 -0
- package/docs/v7/_drafts/provision.mdx +266 -0
- package/docs/{QUICK_START_TEST_RECORDING.md → v7/_drafts/quick-start-test-recording.mdx} +3 -3
- package/docs/v7/_drafts/sdk-v7-complete.mdx +345 -0
- package/docs/v7/{guides → _drafts}/self-hosting.mdx +1 -1
- package/docs/v7/_drafts/troubleshooting.mdx +526 -0
- package/docs/v7/_drafts/vitest-plugin.mdx +477 -0
- package/docs/v7/_drafts/vitest.mdx +535 -0
- package/docs/v7/api/{ai.mdx → act.mdx} +24 -24
- package/docs/v7/api/client.mdx +1 -1
- package/docs/v7/api/dashcam.mdx +497 -0
- package/docs/v7/api/doubleClick.mdx +102 -0
- package/docs/v7/api/elements.mdx +143 -41
- package/docs/v7/api/find.mdx +258 -0
- package/docs/v7/api/mouseDown.mdx +161 -0
- package/docs/v7/api/mouseUp.mdx +164 -0
- package/docs/v7/api/rightClick.mdx +123 -0
- package/docs/v7/api/type.mdx +51 -7
- package/docs/v7/features/ai-native.mdx +427 -0
- package/docs/v7/features/easy-to-write.mdx +351 -0
- package/docs/v7/features/enterprise.mdx +540 -0
- package/docs/v7/features/fast.mdx +424 -0
- package/docs/v7/features/observable.mdx +623 -0
- package/docs/v7/features/powerful.mdx +531 -0
- package/docs/v7/features/scalable.mdx +417 -0
- package/docs/v7/features/stable.mdx +514 -0
- package/docs/v7/getting-started/configuration.mdx +380 -0
- package/docs/v7/getting-started/generating-tests.mdx +525 -0
- package/docs/v7/getting-started/installation.mdx +486 -0
- package/docs/v7/getting-started/quickstart.mdx +320 -141
- package/docs/v7/getting-started/running-and-debugging.mdx +511 -0
- package/docs/v7/getting-started/setting-up-in-ci.mdx +612 -0
- package/docs/v7/getting-started/writing-tests.mdx +535 -0
- package/docs/v7/overview/what-is-testdriver.mdx +398 -0
- package/docs/v7/platforms/linux.mdx +308 -0
- package/docs/v7/platforms/macos.mdx +433 -0
- package/docs/v7/platforms/windows.mdx +430 -0
- package/docs/v7/playwright.mdx +3 -3
- package/docs/v7/presets/chrome-extension.mdx +223 -0
- package/docs/v7/presets/chrome.mdx +303 -0
- package/docs/v7/presets/electron.mdx +453 -0
- package/docs/v7/presets/vscode.mdx +417 -0
- package/docs/v7/presets/webapp.mdx +396 -0
- package/examples/run-tests-with-recording.sh +2 -2
- package/interfaces/cli/commands/init.js +358 -0
- package/interfaces/vitest-plugin.mjs +393 -103
- package/lib/core/Dashcam.js +506 -0
- package/lib/core/index.d.ts +150 -0
- package/lib/core/index.js +12 -0
- package/lib/presets/index.mjs +331 -0
- package/lib/vitest/hooks.d.ts +119 -0
- package/lib/vitest/hooks.mjs +316 -0
- package/lib/vitest/setup.mjs +44 -0
- package/package.json +13 -3
- package/sdk.d.ts +350 -44
- package/sdk.js +818 -105
- package/{self-hosted.yml → setup/aws/self-hosted.yml} +1 -1
- package/test/manual/test-console-logs.test.mjs +42 -0
- package/test/manual/test-init.sh +54 -0
- package/test/manual/test-provision-auth.mjs +22 -0
- package/test/testdriver/assert.test.mjs +41 -0
- package/test/testdriver/auto-cache-key-demo.test.mjs +56 -0
- package/test/testdriver/chrome-extension.test.mjs +89 -0
- package/{testdriver/acceptance-sdk → test/testdriver}/drag-and-drop.test.mjs +7 -19
- package/{testdriver/acceptance-sdk → test/testdriver}/element-not-found.test.mjs +6 -19
- package/{testdriver/acceptance-sdk → test/testdriver}/exec-js.test.mjs +6 -18
- package/{testdriver/acceptance-sdk → test/testdriver}/exec-output.test.mjs +9 -21
- package/{testdriver/acceptance-sdk → test/testdriver}/exec-pwsh.test.mjs +14 -26
- package/{testdriver/acceptance-sdk → test/testdriver}/focus-window.test.mjs +8 -20
- package/{testdriver/acceptance-sdk → test/testdriver}/formatted-logging.test.mjs +5 -20
- package/{testdriver/acceptance-sdk → test/testdriver}/hover-image.test.mjs +10 -19
- package/{testdriver/acceptance-sdk → test/testdriver}/hover-text-with-description.test.mjs +7 -19
- package/{testdriver/acceptance-sdk → test/testdriver}/hover-text.test.mjs +5 -19
- package/{testdriver/acceptance-sdk → test/testdriver}/match-image.test.mjs +7 -19
- package/{testdriver/acceptance-sdk → test/testdriver}/press-keys.test.mjs +5 -19
- package/{testdriver/acceptance-sdk → test/testdriver}/prompt.test.mjs +7 -19
- package/{testdriver/acceptance-sdk → test/testdriver}/scroll-keyboard.test.mjs +6 -20
- package/{testdriver/acceptance-sdk → test/testdriver}/scroll-until-image.test.mjs +6 -18
- package/test/testdriver/scroll-until-text.test.mjs +28 -0
- package/{testdriver/acceptance-sdk → test/testdriver}/scroll.test.mjs +12 -21
- package/test/testdriver/setup/lifecycleHelpers.mjs +262 -0
- package/{testdriver/acceptance-sdk → test/testdriver}/setup/testHelpers.mjs +25 -20
- package/test/testdriver/type.test.mjs +45 -0
- package/vitest.config.mjs +11 -56
- package/.github/dependabot.yml +0 -11
- package/.github/workflows/acceptance-linux.yml +0 -75
- package/.github/workflows/acceptance-sdk-tests.yml +0 -133
- package/.github/workflows/acceptance-tests.yml +0 -130
- package/.github/workflows/lint.yml +0 -27
- package/.github/workflows/publish-canary.yml +0 -40
- package/.github/workflows/publish-latest.yml +0 -61
- package/.github/workflows/test-install.yml +0 -29
- package/.vscode/extensions.json +0 -3
- package/.vscode/launch.json +0 -22
- package/.vscode/mcp.json +0 -9
- package/.vscode/settings.json +0 -14
- package/CODEOWNERS +0 -3
- package/MIGRATION.md +0 -389
- package/SDK_README.md +0 -1122
- package/_testdriver/acceptance/assert.yaml +0 -7
- package/_testdriver/acceptance/dashcam.yaml +0 -9
- package/_testdriver/acceptance/drag-and-drop.yaml +0 -49
- package/_testdriver/acceptance/embed.yaml +0 -9
- package/_testdriver/acceptance/exec-js.yaml +0 -29
- package/_testdriver/acceptance/exec-output.yaml +0 -43
- package/_testdriver/acceptance/exec-shell.yaml +0 -40
- package/_testdriver/acceptance/focus-window.yaml +0 -16
- package/_testdriver/acceptance/hover-image.yaml +0 -18
- package/_testdriver/acceptance/hover-text-with-description.yaml +0 -29
- package/_testdriver/acceptance/hover-text.yaml +0 -14
- package/_testdriver/acceptance/if-else.yaml +0 -31
- package/_testdriver/acceptance/match-image.yaml +0 -15
- package/_testdriver/acceptance/press-keys.yaml +0 -35
- package/_testdriver/acceptance/prompt.yaml +0 -11
- package/_testdriver/acceptance/remember.yaml +0 -27
- package/_testdriver/acceptance/screenshots/cart.png +0 -0
- package/_testdriver/acceptance/scroll-keyboard.yaml +0 -34
- package/_testdriver/acceptance/scroll-until-image.yaml +0 -26
- package/_testdriver/acceptance/scroll-until-text.yaml +0 -20
- package/_testdriver/acceptance/scroll.yaml +0 -33
- package/_testdriver/acceptance/snippets/login.yaml +0 -29
- package/_testdriver/acceptance/snippets/match-cart.yaml +0 -8
- package/_testdriver/acceptance/type.yaml +0 -29
- package/_testdriver/behavior/failure.yaml +0 -7
- package/_testdriver/behavior/hover-text.yaml +0 -13
- package/_testdriver/behavior/lifecycle/postrun.yaml +0 -10
- package/_testdriver/behavior/lifecycle/prerun.yaml +0 -8
- package/_testdriver/behavior/lifecycle/provision.yaml +0 -8
- package/_testdriver/behavior/secrets.yaml +0 -7
- package/_testdriver/edge-cases/dashcam-chrome.yaml +0 -8
- package/_testdriver/edge-cases/exec-pwsh-multiline.yaml +0 -10
- package/_testdriver/edge-cases/js-exception.yaml +0 -8
- package/_testdriver/edge-cases/js-promise.yaml +0 -19
- package/_testdriver/edge-cases/lifecycle/postrun.yaml +0 -10
- package/_testdriver/edge-cases/prompt-in-middle.yaml +0 -23
- package/_testdriver/edge-cases/prompt-nested.yaml +0 -7
- package/_testdriver/edge-cases/success-test.yaml +0 -9
- package/_testdriver/examples/android/example.yaml +0 -12
- package/_testdriver/examples/android/lifecycle/postrun.yaml +0 -11
- package/_testdriver/examples/android/lifecycle/provision.yaml +0 -47
- package/_testdriver/examples/android/readme.md +0 -7
- package/_testdriver/examples/chrome-extension/lifecycle/provision.yaml +0 -74
- package/_testdriver/examples/desktop/lifecycle/prerun.yaml +0 -0
- package/_testdriver/examples/desktop/lifecycle/provision.yaml +0 -64
- package/_testdriver/examples/vscode-extension/lifecycle/provision.yaml +0 -73
- package/_testdriver/examples/web/lifecycle/postrun.yaml +0 -7
- package/_testdriver/examples/web/lifecycle/prerun.yaml +0 -22
- package/_testdriver/lifecycle/postrun.yaml +0 -8
- package/_testdriver/lifecycle/prerun.yaml +0 -15
- package/_testdriver/lifecycle/provision.yaml +0 -25
- package/debug-screenshot-1763401388589.png +0 -0
- package/mcp-server/AI_GUIDELINES.md +0 -57
- package/scripts/view-test-results.mjs +0 -96
- package/styles/.vale-config/2-MDX.ini +0 -5
- package/styles/Microsoft/AMPM.yml +0 -9
- package/styles/Microsoft/Accessibility.yml +0 -30
- package/styles/Microsoft/Acronyms.yml +0 -64
- package/styles/Microsoft/Adverbs.yml +0 -272
- package/styles/Microsoft/Auto.yml +0 -11
- package/styles/Microsoft/Avoid.yml +0 -14
- package/styles/Microsoft/Contractions.yml +0 -50
- package/styles/Microsoft/Dashes.yml +0 -13
- package/styles/Microsoft/DateFormat.yml +0 -8
- package/styles/Microsoft/DateNumbers.yml +0 -40
- package/styles/Microsoft/DateOrder.yml +0 -8
- package/styles/Microsoft/Ellipses.yml +0 -9
- package/styles/Microsoft/FirstPerson.yml +0 -16
- package/styles/Microsoft/Foreign.yml +0 -13
- package/styles/Microsoft/Gender.yml +0 -8
- package/styles/Microsoft/GenderBias.yml +0 -42
- package/styles/Microsoft/GeneralURL.yml +0 -11
- package/styles/Microsoft/HeadingAcronyms.yml +0 -7
- package/styles/Microsoft/HeadingColons.yml +0 -8
- package/styles/Microsoft/HeadingPunctuation.yml +0 -13
- package/styles/Microsoft/Headings.yml +0 -28
- package/styles/Microsoft/Hyphens.yml +0 -14
- package/styles/Microsoft/Negative.yml +0 -13
- package/styles/Microsoft/Ordinal.yml +0 -13
- package/styles/Microsoft/OxfordComma.yml +0 -8
- package/styles/Microsoft/Passive.yml +0 -183
- package/styles/Microsoft/Percentages.yml +0 -7
- package/styles/Microsoft/Plurals.yml +0 -7
- package/styles/Microsoft/Quotes.yml +0 -7
- package/styles/Microsoft/RangeTime.yml +0 -13
- package/styles/Microsoft/Semicolon.yml +0 -8
- package/styles/Microsoft/SentenceLength.yml +0 -6
- package/styles/Microsoft/Spacing.yml +0 -8
- package/styles/Microsoft/Suspended.yml +0 -7
- package/styles/Microsoft/Terms.yml +0 -42
- package/styles/Microsoft/URLFormat.yml +0 -9
- package/styles/Microsoft/Units.yml +0 -16
- package/styles/Microsoft/Vocab.yml +0 -25
- package/styles/Microsoft/We.yml +0 -11
- package/styles/Microsoft/Wordiness.yml +0 -127
- package/styles/Microsoft/meta.json +0 -4
- package/styles/alex/Ablist.yml +0 -274
- package/styles/alex/Condescending.yml +0 -16
- package/styles/alex/Gendered.yml +0 -110
- package/styles/alex/LGBTQ.yml +0 -55
- package/styles/alex/OCD.yml +0 -10
- package/styles/alex/Press.yml +0 -12
- package/styles/alex/ProfanityLikely.yml +0 -1289
- package/styles/alex/ProfanityMaybe.yml +0 -282
- package/styles/alex/ProfanityUnlikely.yml +0 -251
- package/styles/alex/README.md +0 -27
- package/styles/alex/Race.yml +0 -85
- package/styles/alex/Suicide.yml +0 -26
- package/styles/alex/meta.json +0 -4
- package/styles/config/vocabularies/Docs/accept.txt +0 -47
- package/styles/config/vocabularies/Docs/reject.txt +0 -4
- package/styles/proselint/Airlinese.yml +0 -8
- package/styles/proselint/AnimalLabels.yml +0 -48
- package/styles/proselint/Annotations.yml +0 -9
- package/styles/proselint/Apologizing.yml +0 -8
- package/styles/proselint/Archaisms.yml +0 -52
- package/styles/proselint/But.yml +0 -8
- package/styles/proselint/Cliches.yml +0 -782
- package/styles/proselint/CorporateSpeak.yml +0 -30
- package/styles/proselint/Currency.yml +0 -5
- package/styles/proselint/Cursing.yml +0 -15
- package/styles/proselint/DateCase.yml +0 -7
- package/styles/proselint/DateMidnight.yml +0 -7
- package/styles/proselint/DateRedundancy.yml +0 -10
- package/styles/proselint/DateSpacing.yml +0 -7
- package/styles/proselint/DenizenLabels.yml +0 -52
- package/styles/proselint/Diacritical.yml +0 -95
- package/styles/proselint/GenderBias.yml +0 -45
- package/styles/proselint/GroupTerms.yml +0 -39
- package/styles/proselint/Hedging.yml +0 -8
- package/styles/proselint/Hyperbole.yml +0 -6
- package/styles/proselint/Jargon.yml +0 -11
- package/styles/proselint/LGBTOffensive.yml +0 -13
- package/styles/proselint/LGBTTerms.yml +0 -15
- package/styles/proselint/Malapropisms.yml +0 -8
- package/styles/proselint/Needless.yml +0 -358
- package/styles/proselint/Nonwords.yml +0 -38
- package/styles/proselint/Oxymorons.yml +0 -22
- package/styles/proselint/P-Value.yml +0 -6
- package/styles/proselint/RASSyndrome.yml +0 -30
- package/styles/proselint/README.md +0 -12
- package/styles/proselint/Skunked.yml +0 -13
- package/styles/proselint/Spelling.yml +0 -17
- package/styles/proselint/Typography.yml +0 -11
- package/styles/proselint/Uncomparables.yml +0 -50
- package/styles/proselint/Very.yml +0 -6
- package/styles/proselint/meta.json +0 -15
- package/styles/write-good/Cliches.yml +0 -702
- package/styles/write-good/E-Prime.yml +0 -32
- package/styles/write-good/Illusions.yml +0 -11
- package/styles/write-good/Passive.yml +0 -183
- package/styles/write-good/README.md +0 -27
- package/styles/write-good/So.yml +0 -5
- package/styles/write-good/ThereIs.yml +0 -6
- package/styles/write-good/TooWordy.yml +0 -221
- package/styles/write-good/Weasel.yml +0 -29
- package/styles/write-good/meta.json +0 -4
- package/test/mcp-example-test.yaml +0 -27
- package/test/test_parser.js +0 -47
- package/testdriver/acceptance-sdk/QUICK_REFERENCE.md +0 -61
- package/testdriver/acceptance-sdk/README.md +0 -128
- package/testdriver/acceptance-sdk/TEST_REPORTING.md +0 -245
- package/testdriver/acceptance-sdk/assert.test.mjs +0 -44
- package/testdriver/acceptance-sdk/scroll-until-text.test.mjs +0 -42
- package/testdriver/acceptance-sdk/setup/lifecycleHelpers.mjs +0 -239
- package/testdriver/acceptance-sdk/type-checking-demo.js +0 -49
- package/testdriver/acceptance-sdk/type.test.mjs +0 -84
- package/vale.ini +0 -18
- package/vitest.config.example.js +0 -19
- package/vitest.config.mjs.bak +0 -44
- /package/docs/{ARCHITECTURE.md → v7/_drafts/architecture.mdx} +0 -0
- /package/docs/{AWESOME_LOGS_QUICK_REF.md → v7/_drafts/awesome-logs-quick-ref.mdx} +0 -0
- /package/{CONTRIBUTING.md → docs/v7/_drafts/contributing.mdx} +0 -0
- /package/docs/v7/{guides → _drafts}/migration.mdx +0 -0
- /package/{PLUGIN_MIGRATION.md → docs/v7/_drafts/plugin-migration.mdx} +0 -0
- /package/{PROMPT_CACHE.md → docs/v7/_drafts/prompt-cache.mdx} +0 -0
- /package/docs/{SDK_AWESOME_LOGS.md → v7/_drafts/sdk-awesome-logs.mdx} +0 -0
- /package/docs/{sdk-browser-rendering.md → v7/_drafts/sdk-browser-rendering.mdx} +0 -0
- /package/{SDK_LOGGING.md → docs/v7/_drafts/sdk-logging.mdx} +0 -0
- /package/{SDK_MIGRATION.md → docs/v7/_drafts/sdk-migration.mdx} +0 -0
- /package/docs/{TEST_RECORDING.md → v7/_drafts/test-recording.mdx} +0 -0
- /package/docs/v7/{README.md → overview/readme.mdx} +0 -0
- /package/{debug-locate-response.js → test/manual/debug-locate-response.js} +0 -0
- /package/{test-find-api.js → test/manual/test-find-api.js} +0 -0
- /package/{test-prompt-cache.js → test/manual/test-prompt-cache.js} +0 -0
- /package/{test-sandbox-render.js → test/manual/test-sandbox-render.js} +0 -0
- /package/{test-sdk-methods.js → test/manual/test-sdk-methods.js} +0 -0
- /package/{test-sdk-refactor.js → test/manual/test-sdk-refactor.js} +0 -0
- /package/{test-stack-trace.mjs → test/manual/test-stack-trace.mjs} +0 -0
- /package/{verify-element-api.js → test/manual/verify-element-api.js} +0 -0
- /package/{verify-types.js → test/manual/verify-types.js} +0 -0
- /package/{testdriver/acceptance-sdk → test/testdriver}/setup/globalTeardown.mjs +0 -0
- /package/{testdriver/acceptance-sdk → test/testdriver}/setup/vitestSetup.mjs +0 -0
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
# SDK v7 Implementation - Complete Summary
|
|
2
|
+
|
|
3
|
+
## ✅ All Phases Complete
|
|
4
|
+
|
|
5
|
+
Implementation of the TestDriver SDK v7 redesign following progressive disclosure pattern.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Phase 1: Core Foundation ✅ (Week 1-2)
|
|
10
|
+
|
|
11
|
+
### Task 1.1: Dashcam Class Extraction ✅
|
|
12
|
+
- **Created:** `lib/core/Dashcam.js` (422 lines)
|
|
13
|
+
- **Features:**
|
|
14
|
+
- Composable Dashcam class independent of lifecycle helpers
|
|
15
|
+
- Methods: `auth()`, `addLog()`, `start()`, `stop()`, `isRecording()`
|
|
16
|
+
- Platform-aware shell handling (Windows/Linux/Mac)
|
|
17
|
+
- State tracking with `this.recording` property
|
|
18
|
+
- **Testing:** Unit tests in `test/dashcam.test.js` (5 passing)
|
|
19
|
+
|
|
20
|
+
### Task 1.2: Helper Functions Module (SKIPPED)
|
|
21
|
+
- Skipped per user request
|
|
22
|
+
- Not needed - lifecycle helpers remain as thin wrappers
|
|
23
|
+
|
|
24
|
+
### Task 1.3: Package Exports Finalization ✅
|
|
25
|
+
- **Modified:** `package.json`
|
|
26
|
+
- **Added exports:**
|
|
27
|
+
- `"."` → `./sdk.js` (main SDK)
|
|
28
|
+
- `"./core"` → `./lib/core/index.js` (TestDriver + Dashcam)
|
|
29
|
+
- `"./vitest"` → `./interfaces/vitest-plugin.mjs` (plugin)
|
|
30
|
+
- `"./vitest/hooks"` → `./lib/vitest/hooks.mjs` (hooks)
|
|
31
|
+
- `"./presets"` → `./lib/presets/index.mjs` (presets)
|
|
32
|
+
|
|
33
|
+
### Key Achievements:
|
|
34
|
+
- ✅ Backward compatibility maintained via thin wrappers
|
|
35
|
+
- ✅ WeakMap pattern for state persistence across helper calls
|
|
36
|
+
- ✅ Clean separation of concerns (core vs helpers)
|
|
37
|
+
- ✅ All acceptance tests passing
|
|
38
|
+
|
|
39
|
+
**Commit:** `66fe7c9` - Phase 1 Complete: Core Foundation
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Phase 2: Vitest Plugin Enhancement ✅ (Week 3-4)
|
|
44
|
+
|
|
45
|
+
### Task 2.1: Vitest Hooks API ✅
|
|
46
|
+
- **Created:** `lib/vitest/hooks.mjs` (221 lines)
|
|
47
|
+
- **Three hooks implemented:**
|
|
48
|
+
1. `useTestDriver(context, options)` - Managed TestDriver instance
|
|
49
|
+
- Auto-connect to sandbox (default: true)
|
|
50
|
+
- Automatic cleanup via `context.onTestFinished()`
|
|
51
|
+
- WeakMap storage for instance management
|
|
52
|
+
|
|
53
|
+
2. `useDashcam(context, client, options)` - Managed Dashcam instance
|
|
54
|
+
- Optional `autoAuth`, `autoStart`, `autoStop`
|
|
55
|
+
- Automatic URL registration with plugin
|
|
56
|
+
- Lifecycle tied to test context
|
|
57
|
+
|
|
58
|
+
3. `useTestDriverWithDashcam(context, options)` - Combined hook
|
|
59
|
+
- Single-line setup for both services
|
|
60
|
+
- Full auto-lifecycle management
|
|
61
|
+
- Simplest API for 90% of use cases
|
|
62
|
+
|
|
63
|
+
- **Created:** `testdriver/acceptance-sdk/hooks-example.test.mjs`
|
|
64
|
+
- **Pattern:** React-style hooks requiring Vitest context parameter
|
|
65
|
+
|
|
66
|
+
### Task 2.2: Auto-lifecycle Mode (DEFERRED)
|
|
67
|
+
- Not yet implemented (optional enhancement)
|
|
68
|
+
- Can be added in future iteration
|
|
69
|
+
|
|
70
|
+
### Task 2.3: Simplify Plugin Config (DEFERRED)
|
|
71
|
+
- Not yet implemented (optional enhancement)
|
|
72
|
+
- Current config already functional
|
|
73
|
+
|
|
74
|
+
**Commit:** `54b43b2` - Phase 2 Task 2.1: Vitest Hooks API
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Phase 3: Presets System ✅ (Week 5-6)
|
|
79
|
+
|
|
80
|
+
### Task 3.1: Built-in Presets ✅
|
|
81
|
+
- **Created:** `lib/presets/index.mjs` (400+ lines)
|
|
82
|
+
|
|
83
|
+
**chromePreset:**
|
|
84
|
+
- Auto-launches Chrome with configurable URL
|
|
85
|
+
- Options: `maximized`, `guest`, `dashcam`
|
|
86
|
+
- Platform-aware shell execution
|
|
87
|
+
- Returns: `{ client, browser, dashcam }`
|
|
88
|
+
|
|
89
|
+
**vscodePreset:**
|
|
90
|
+
- Opens VS Code with workspace/folder
|
|
91
|
+
- Auto-installs extensions on demand
|
|
92
|
+
- Dashcam integration included
|
|
93
|
+
- Returns: `{ client, vscode, dashcam }`
|
|
94
|
+
|
|
95
|
+
**electronPreset:**
|
|
96
|
+
- Launches Electron apps with custom args
|
|
97
|
+
- Platform-aware execution
|
|
98
|
+
- Returns: `{ client, app, dashcam }`
|
|
99
|
+
|
|
100
|
+
**webAppPreset:**
|
|
101
|
+
- Generic wrapper (currently delegates to chromePreset)
|
|
102
|
+
- Extensible for Firefox, Edge support
|
|
103
|
+
- Returns: `{ client, browser, dashcam }`
|
|
104
|
+
|
|
105
|
+
### Task 3.2: Preset Builder API ✅
|
|
106
|
+
**createPreset(config):**
|
|
107
|
+
- Factory function for custom presets
|
|
108
|
+
- Auto-handles TestDriver + Dashcam setup
|
|
109
|
+
- Simple `setup()` function pattern
|
|
110
|
+
- Automatic lifecycle management
|
|
111
|
+
|
|
112
|
+
### Task 3.3: Documentation ✅
|
|
113
|
+
- **Created:** `docs/PRESETS.md` (comprehensive guide)
|
|
114
|
+
- Usage examples for all presets
|
|
115
|
+
- Custom preset creation tutorial
|
|
116
|
+
- Progressive disclosure explanation
|
|
117
|
+
- Best practices
|
|
118
|
+
|
|
119
|
+
- **Created:** `testdriver/acceptance-sdk/presets-example.test.mjs`
|
|
120
|
+
- Working examples for all presets
|
|
121
|
+
- Custom preset demonstration
|
|
122
|
+
|
|
123
|
+
### Key Achievements:
|
|
124
|
+
- ✅ Zero-config setup for common applications
|
|
125
|
+
- ✅ Extensible preset system
|
|
126
|
+
- ✅ Full Dashcam integration by default
|
|
127
|
+
- ✅ Semantic aliases (browser, vscode, app)
|
|
128
|
+
- ✅ Test passing for chromePreset
|
|
129
|
+
|
|
130
|
+
**Commit:** `011e4f3` - Phase 3: Presets System
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Phase 4: DX Polish ✅ (Week 7-8)
|
|
135
|
+
|
|
136
|
+
### Task 4.1: TypeScript Definitions ✅
|
|
137
|
+
|
|
138
|
+
**Created: `lib/core/index.d.ts`**
|
|
139
|
+
- Full types for `TestDriver` and `Dashcam` classes
|
|
140
|
+
- Interfaces: `DashcamOptions`, `LogConfig`, `TestDriverOptions`, `ConnectOptions`
|
|
141
|
+
- Comprehensive JSDoc comments
|
|
142
|
+
|
|
143
|
+
**Created: `lib/vitest/hooks.d.ts`**
|
|
144
|
+
- Types for all three hooks
|
|
145
|
+
- Interfaces: `VitestContext`, `UseTestDriverOptions`, `UseDashcamOptions`
|
|
146
|
+
- Full autocomplete support
|
|
147
|
+
|
|
148
|
+
**Created: `lib/presets/index.d.ts`**
|
|
149
|
+
- Types for all presets
|
|
150
|
+
- Interfaces: `ChromePresetOptions`, `VSCodePresetOptions`, `ElectronPresetOptions`
|
|
151
|
+
- `PresetSetupFunction` and `PresetConfig` types
|
|
152
|
+
- Type-safe preset creation
|
|
153
|
+
|
|
154
|
+
### Task 4.2: Migration Guide ✅
|
|
155
|
+
|
|
156
|
+
**Created: `docs/MIGRATION.md`**
|
|
157
|
+
- Complete v6 → v7 migration guide
|
|
158
|
+
- Side-by-side before/after examples
|
|
159
|
+
- **Three migration strategies:**
|
|
160
|
+
1. Gradual - Keep old, use new for new tests
|
|
161
|
+
2. Convert to Hooks - Replace helpers
|
|
162
|
+
3. Adopt Presets - Use presets for common scenarios
|
|
163
|
+
|
|
164
|
+
- **Common pattern conversions:**
|
|
165
|
+
- Chrome testing: 7 LOC → 2 LOC (71% reduction)
|
|
166
|
+
- Dashcam control: Direct class replacement
|
|
167
|
+
- Custom apps: Preset pattern (reusable)
|
|
168
|
+
|
|
169
|
+
- TypeScript examples
|
|
170
|
+
- **Zero breaking changes** - 100% backward compatible
|
|
171
|
+
- Deprecation timeline
|
|
172
|
+
|
|
173
|
+
### Task 4.3: README Updates ✅
|
|
174
|
+
|
|
175
|
+
**Updated: `README.md`**
|
|
176
|
+
- Added v7 Progressive Disclosure section
|
|
177
|
+
- **Three levels clearly explained:**
|
|
178
|
+
- 🟢 **Beginner:** Presets (chromePreset) - Zero config
|
|
179
|
+
- 🟡 **Intermediate:** Hooks (useTestDriver/useDashcam) - Flexible
|
|
180
|
+
- 🔴 **Advanced:** Core Classes - Full control
|
|
181
|
+
|
|
182
|
+
- Code examples for each level
|
|
183
|
+
- Links to documentation
|
|
184
|
+
|
|
185
|
+
### Task 4.4: Comprehensive Examples ✅
|
|
186
|
+
- `hooks-example.test.mjs` - Hooks usage
|
|
187
|
+
- `presets-example.test.mjs` - Presets usage
|
|
188
|
+
- Migration guide examples
|
|
189
|
+
- README examples
|
|
190
|
+
|
|
191
|
+
**Commit:** `6a741df` - Phase 4: DX Polish - TypeScript Definitions and Migration Guide
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Architecture Summary
|
|
196
|
+
|
|
197
|
+
### Progressive Disclosure Hierarchy
|
|
198
|
+
|
|
199
|
+
```
|
|
200
|
+
Level 1 (Beginner): PRESETS
|
|
201
|
+
├── chromePreset(context, { url })
|
|
202
|
+
├── vscodePreset(context, { workspace })
|
|
203
|
+
├── electronPreset(context, { appPath })
|
|
204
|
+
└── webAppPreset(context, { url })
|
|
205
|
+
↓
|
|
206
|
+
Level 2 (Intermediate): HOOKS
|
|
207
|
+
├── useTestDriver(context, options)
|
|
208
|
+
├── useDashcam(context, client, options)
|
|
209
|
+
└── useTestDriverWithDashcam(context, options)
|
|
210
|
+
↓
|
|
211
|
+
Level 3 (Advanced): CORE CLASSES
|
|
212
|
+
├── new TestDriver(apiKey, options)
|
|
213
|
+
└── new Dashcam(client, options)
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Module Structure
|
|
217
|
+
|
|
218
|
+
```
|
|
219
|
+
testdriverai/
|
|
220
|
+
├── . (main) → sdk.js (unchanged)
|
|
221
|
+
├── /core → TestDriver + Dashcam classes
|
|
222
|
+
│ ├── index.js → Module exports
|
|
223
|
+
│ └── index.d.ts → TypeScript definitions
|
|
224
|
+
├── /vitest → Vitest plugin (unchanged)
|
|
225
|
+
├── /vitest/hooks → React-style hooks
|
|
226
|
+
│ ├── hooks.mjs → Hook implementations
|
|
227
|
+
│ └── hooks.d.ts → TypeScript definitions
|
|
228
|
+
└── /presets → Application presets
|
|
229
|
+
├── index.mjs → Preset implementations
|
|
230
|
+
└── index.d.ts → TypeScript definitions
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Backward Compatibility
|
|
234
|
+
|
|
235
|
+
**Legacy helpers still work:**
|
|
236
|
+
```javascript
|
|
237
|
+
// These continue to work (deprecated but functional)
|
|
238
|
+
import { authDashcam, startDashcam, stopDashcam } from 'testdriverai';
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
**Implemented via WeakMap thin wrappers:**
|
|
242
|
+
- `getDashcam(client, options)` - Returns cached instance
|
|
243
|
+
- State persists across helper calls
|
|
244
|
+
- Zero breaking changes
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Key Metrics
|
|
249
|
+
|
|
250
|
+
### Lines of Code (New)
|
|
251
|
+
- `lib/core/Dashcam.js`: 422 lines
|
|
252
|
+
- `lib/vitest/hooks.mjs`: 221 lines
|
|
253
|
+
- `lib/presets/index.mjs`: 400+ lines
|
|
254
|
+
- TypeScript definitions: 500+ lines
|
|
255
|
+
- Documentation: 1000+ lines
|
|
256
|
+
- **Total new code:** ~2500+ lines
|
|
257
|
+
|
|
258
|
+
### Test Coverage
|
|
259
|
+
- Unit tests: 5 passing (Dashcam)
|
|
260
|
+
- Integration tests: hooks-example.test.mjs
|
|
261
|
+
- Preset tests: presets-example.test.mjs (chromePreset ✅)
|
|
262
|
+
- All existing acceptance tests: Still passing ✅
|
|
263
|
+
|
|
264
|
+
### Boilerplate Reduction
|
|
265
|
+
- Chrome testing: **71% reduction** (7 LOC → 2 LOC)
|
|
266
|
+
- Simple dashcam: **60% reduction** (5 LOC → 2 LOC)
|
|
267
|
+
- Custom apps: **Reusable presets** (write once, use everywhere)
|
|
268
|
+
|
|
269
|
+
### Developer Experience
|
|
270
|
+
- ✅ TypeScript autocomplete
|
|
271
|
+
- ✅ Three learning levels
|
|
272
|
+
- ✅ Zero breaking changes
|
|
273
|
+
- ✅ Comprehensive docs
|
|
274
|
+
- ✅ Migration guide
|
|
275
|
+
- ✅ Working examples
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## Implementation Timeline
|
|
280
|
+
|
|
281
|
+
- **Phase 1:** Core Foundation (Nov 24, early session)
|
|
282
|
+
- **Phase 2:** Vitest Hooks API (Nov 24, mid session)
|
|
283
|
+
- **Phase 3:** Presets System (Nov 24, late session)
|
|
284
|
+
- **Phase 4:** DX Polish (Nov 24, late session)
|
|
285
|
+
|
|
286
|
+
**Total time:** Single day implementation ✨
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## What's Next (Optional Future Work)
|
|
291
|
+
|
|
292
|
+
### Not Yet Implemented:
|
|
293
|
+
1. **Auto-lifecycle plugin mode** (Phase 2, Task 2.2)
|
|
294
|
+
- Automatic setup/teardown via plugin
|
|
295
|
+
- No beforeEach/afterEach needed
|
|
296
|
+
|
|
297
|
+
2. **Simplified plugin config** (Phase 2, Task 2.3)
|
|
298
|
+
- Reduce vitest.config.js boilerplate
|
|
299
|
+
- Smart defaults
|
|
300
|
+
|
|
301
|
+
3. **Additional presets:**
|
|
302
|
+
- Firefox preset
|
|
303
|
+
- Edge preset
|
|
304
|
+
- Safari preset
|
|
305
|
+
- Docker preset
|
|
306
|
+
- Playwright integration
|
|
307
|
+
|
|
308
|
+
4. **Enhanced documentation:**
|
|
309
|
+
- Video tutorials
|
|
310
|
+
- Interactive examples
|
|
311
|
+
- Recipe book
|
|
312
|
+
|
|
313
|
+
### Ready for:
|
|
314
|
+
- ✅ User testing
|
|
315
|
+
- ✅ Beta release
|
|
316
|
+
- ✅ Documentation site
|
|
317
|
+
- ✅ npm publish
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
## Git History
|
|
322
|
+
|
|
323
|
+
```
|
|
324
|
+
6a741df - Phase 4: DX Polish - TypeScript Definitions and Migration Guide
|
|
325
|
+
011e4f3 - Phase 3: Presets System
|
|
326
|
+
54b43b2 - Phase 2 Task 2.1: Vitest Hooks API
|
|
327
|
+
66fe7c9 - Phase 1 Complete: Core Foundation
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
332
|
+
## Conclusion
|
|
333
|
+
|
|
334
|
+
The TestDriver SDK v7 redesign is **complete** with all major goals achieved:
|
|
335
|
+
|
|
336
|
+
✅ **Progressive Disclosure** - Three clear API levels
|
|
337
|
+
✅ **Backward Compatible** - Zero breaking changes
|
|
338
|
+
✅ **TypeScript Support** - Full type definitions
|
|
339
|
+
✅ **Documentation** - Comprehensive guides and examples
|
|
340
|
+
✅ **Testing** - All tests passing
|
|
341
|
+
✅ **DX Polish** - Professional developer experience
|
|
342
|
+
|
|
343
|
+
The SDK now provides a smooth learning curve from beginner to advanced users while maintaining full compatibility with existing code.
|
|
344
|
+
|
|
345
|
+
**Status:** ✅ **READY FOR RELEASE**
|