Skip to content

v1.0.0

Choose a tag to compare

@Winify Winify released this 21 Jul 10:20
· 3 commits to master since this release

Breaking Changes

Agentic Loop Removed

maxSteps and contextWindow config removed. Only single-pass execution — optimized for 4B–7B local models. ReAct loop, parseAgentStep(), buildAgentStep(), stripJsonComments(), and chat() provider method deleted. AgentResult simplified to { actions: AgentAction[] }goalAchieved, totalSteps, steps removed.

Provider Layer Rewritten

Six individual provider classes deleted (anthropic, openai, ollama, gemini, openrouter, base). Replaced by unified adapter at providers/send.ts with three explicit schemas: 'anthropic', 'openai', 'ollama'.

Config Changes

  • provider renamed to schema. Old field maps with a warning. Values: 'anthropic', 'openai', 'ollama'.
  • providerUrl and model now required — no defaults.
  • token config removed. Service targets local endpoints. Use send override for auth.
  • New: snapshotType ('elements' | 'a11y'), inViewportOnly, waitForHealing.
  • New: fixingSuggestions config for read-only selector fix collection.

Snapshot

get-elements.ts replaced by get-snapshot.ts — dual-mode: getElements() (flat list, lean, default) and getSnapshot() (a11y tree, rich). LLM uses e1, e2... virtual element IDs.

Peer Dependencies

@wdio/elements >=1.1.0, @wdio/globals >=9.0.0, @wdio/types >=9.0.0 now required.

New: Self-Healing System

Complete LLM-powered selector healing pipeline in healing/:

  • interceptor.ts — WDIO overwriteCommand interceptors for click, setValue, tap
  • healer.tshealSelector() calls LLM to find replacement selectors at runtime
  • report.tshealingReport store + formatHealingSummary() canonical formatter
  • Healing decision tree: stale element → re-find, click intercepted → scroll, element not found → LLM heal, invalid state → rethrow
  • browser.getHealingReport() + formatHealingSummary(report) for test reporting

New: Fixing Suggestions

Read-only counterpart to autoHeal — same interceptor infrastructure, but captures LLM-suggested selector fixes without retrying:

  • healing/fixing-suggestions.ts — suggestion store + formatFixingSuggestions()
  • installFixingSuggestionsInterceptor in healing/interceptor.ts
  • suggestFix() in healing/healer.ts
  • browser.getFixingSuggestions() command
  • When both features enabled on overlapping commands, autoHeal takes priority

Debug Tools

  • browser.snapshot({ maxElements?, snapshotType?, inViewportOnly? }) command dumps element tree
  • @wdio/logger used throughout for messages that survive filter levels

Mobile

  • Tap auto-healing — Appium scroll failures ("Could not scroll", "scroll to the element") trigger healing
  • New example specs: agent-mobile.spec.ts, self-healing-mobile.spec.ts
  • isElementNotFoundError expanded with Appium error patterns

Docs & CI

  • README.md complete rewrite — config table, provider setup, Ollama/LM Studio guides
  • CLAUDE.md added — project map, commands, core APIs, critical gotchas
  • Dependabot workflow added for automated dependency updates
  • CHANGELOG.md replaced with structured release notes

Test Coverage

  • tests/services/agent.service.test.ts — 605 lines of service-level tests
  • tests/providers/send.test.ts — 416 lines covering all three schemas
  • tests/healing/healer.test.ts, report.test.ts, fixing-suggestions.test.ts — healing pipeline
  • tests/commands/parse-llm-response.test.ts — response parser
  • Removed old provider-specific tests (replaced by unified send.test.ts)

Full Changelog: v0.2.0...v1.0.0