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>
58 lines
1.8 KiB
JavaScript
58 lines
1.8 KiB
JavaScript
// src/protocol-stub.ts
|
|
import { capabilitiesEnvironmentDetector } from "@wdio/utils";
|
|
var NOOP = () => {
|
|
};
|
|
var ProtocolStub = class {
|
|
static async newSession(options) {
|
|
const capabilities = emulateSessionCapabilities(options.capabilities);
|
|
const browser = {
|
|
options,
|
|
capabilities,
|
|
requestedCapabilities: capabilities,
|
|
customCommands: [],
|
|
// internally used to transfer custom commands to the actual protocol instance
|
|
overwrittenCommands: [],
|
|
// internally used to transfer overwritten commands to the actual protocol instance
|
|
commandList: [],
|
|
getWindowHandle: NOOP,
|
|
on: NOOP,
|
|
off: NOOP,
|
|
addCommand: NOOP,
|
|
overwriteCommand: NOOP,
|
|
...capabilitiesEnvironmentDetector(capabilities)
|
|
};
|
|
browser.addCommand = (...args) => browser.customCommands.push(args);
|
|
browser.overwriteCommand = (...args) => browser.overwrittenCommands.push(args);
|
|
return browser;
|
|
}
|
|
/**
|
|
* added just in case user wants to somehow reload webdriver before it was started.
|
|
*/
|
|
static reloadSession() {
|
|
throw new Error("Protocol Stub: Make sure to start the session before reloading it.");
|
|
}
|
|
static attachToSession(options, modifier) {
|
|
if (options || !modifier) {
|
|
throw new Error("You are trying to attach to a protocol stub, this should never occur, please file an issue.");
|
|
}
|
|
return modifier({
|
|
commandList: []
|
|
});
|
|
}
|
|
};
|
|
function emulateSessionCapabilities(caps) {
|
|
const capabilities = {};
|
|
Object.entries(caps).forEach(([key, value]) => {
|
|
const newKey = key.replace("appium:", "");
|
|
capabilities[newKey] = value;
|
|
});
|
|
const c = "alwaysMatch" in caps ? caps.alwaysMatch : caps;
|
|
if (c.browserName && c.browserName.toLowerCase() === "chrome") {
|
|
capabilities["goog:chromeOptions"] = {};
|
|
}
|
|
return capabilities;
|
|
}
|
|
export {
|
|
ProtocolStub as default
|
|
};
|