Implements Phases 1-8 of the TFTSR implementation plan. Rust backend (Tauri 2.x, src-tauri/): - Multi-provider AI: OpenAI-compatible, Anthropic, Gemini, Mistral, Ollama - PII detection engine: 11 regex patterns with overlap resolution - SQLCipher AES-256 encrypted database with 10 versioned migrations - 28 Tauri IPC commands for triage, analysis, document, and system ops - Ollama: hardware probe, model recommendations, pull/delete with events - RCA and blameless post-mortem Markdown document generators - PDF export via printpdf - Audit log: SHA-256 hash of every external data send - Integration stubs for Confluence, ServiceNow, Azure DevOps (v0.2) Frontend (React 18 + TypeScript + Vite, src/): - 9 pages: full triage workflow NewIssue→LogUpload→Triage→Resolution→RCA→Postmortem→History+Settings - 7 components: ChatWindow, TriageProgress, PiiDiffViewer, DocEditor, HardwareReport, ModelSelector, UI primitives - 3 Zustand stores: session, settings (persisted), history - Type-safe tauriCommands.ts matching Rust backend types exactly - 8 IT domain system prompts (Linux, Windows, Network, K8s, DB, Virt, HW, Obs) DevOps: - .woodpecker/test.yml: rustfmt, clippy, cargo test, tsc, vitest on every push - .woodpecker/release.yml: linux/amd64 + linux/arm64 builds, Gogs release upload Verified: - cargo check: zero errors - tsc --noEmit: zero errors - vitest run: 13/13 unit tests passing Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2.0 KiB
2.0 KiB
Support for Shadow DOM in CodeceptJS
- Supported CodeceptJS Helpers: Playwright only.
- CodeceptJS 2.6.0 released webdriver.io support as an alternative if you don't want to use Playwright
Support for this plugin is currently limited to Playwright, this is mostly due to the fact that playwright
allows for the addition of custom selector engines.
Goal/Example: To be able to write a test that works easily with shadow dom web components. See Issues for what currently works and what doesn't
Feature("The chrome downloads page");
Scenario("Can interact with the search box", async I => {
I.amOnPage("chrome://downloads");
I.see("Files you download appear here", {shadow: "#no-downloads span"});
I.waitForVisible({shadow: "#no-downloads"}, 5);
I.click({shadow: `[title="Search downloads"]`});
I.waitForVisible({shadow: '#searchInput'}, 5);
I.fillField({shadow: '#searchInput'}, "A download")
I.waitForValue({shadow: '#searchInput'}, "A download", 5)
I.waitForText("No search results found", 3, {shadow: "#no-downloads span"});
I.clearField({shadow: '#searchInput'})
I.waitForValue({shadow: '#searchInput'}, "", 5)
});
Setup:
npm install query-selector-shadow-dom codeceptjs playwright- Setup a codeceptjs project: https://codecept.io/quickstart/
- In
codecept.config.jsadd this shadow dom plugin
plugins: {
shadowDom: {
enabled: true,
locator: "shadow",
require: "query-selector-shadow-dom/plugins/codeceptjs"
}
}
- Start using the custom locator
{shadow: "..."}You may rename the locator in the config file from "shadow" to something else. - Read issues below as not everything currently works.
Issues:
What works
- Most of the APIs listed here should work with shadow dom https://codecept.io/helpers/Playwright/#playwright
The following methods are not supported as of right now:
- waitForNoVisibleElements (looking for help should be do-able, feel free to PR to CodeceptJS)