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>
71 lines
1.4 KiB
TypeScript
71 lines
1.4 KiB
TypeScript
import type { AnyNode } from "domhandler";
|
|
/**
|
|
* The medium of a media item.
|
|
*
|
|
* @category Feeds
|
|
*/
|
|
export type FeedItemMediaMedium = "image" | "audio" | "video" | "document" | "executable";
|
|
/**
|
|
* The type of a media item.
|
|
*
|
|
* @category Feeds
|
|
*/
|
|
export type FeedItemMediaExpression = "sample" | "full" | "nonstop";
|
|
/**
|
|
* A media item of a feed entry.
|
|
*
|
|
* @category Feeds
|
|
*/
|
|
export interface FeedItemMedia {
|
|
medium: FeedItemMediaMedium | undefined;
|
|
isDefault: boolean;
|
|
url?: string;
|
|
fileSize?: number;
|
|
type?: string;
|
|
expression?: FeedItemMediaExpression;
|
|
bitrate?: number;
|
|
framerate?: number;
|
|
samplingrate?: number;
|
|
channels?: number;
|
|
duration?: number;
|
|
height?: number;
|
|
width?: number;
|
|
lang?: string;
|
|
}
|
|
/**
|
|
* An entry of a feed.
|
|
*
|
|
* @category Feeds
|
|
*/
|
|
export interface FeedItem {
|
|
id?: string;
|
|
title?: string;
|
|
link?: string;
|
|
description?: string;
|
|
pubDate?: Date;
|
|
media: FeedItemMedia[];
|
|
}
|
|
/**
|
|
* The root of a feed.
|
|
*
|
|
* @category Feeds
|
|
*/
|
|
export interface Feed {
|
|
type: string;
|
|
id?: string;
|
|
title?: string;
|
|
link?: string;
|
|
description?: string;
|
|
updated?: Date;
|
|
author?: string;
|
|
items: FeedItem[];
|
|
}
|
|
/**
|
|
* Get the feed object from the root of a DOM tree.
|
|
*
|
|
* @category Feeds
|
|
* @param doc - The DOM to to extract the feed from.
|
|
* @returns The feed.
|
|
*/
|
|
export declare function getFeed(doc: AnyNode[]): Feed | null;
|
|
//# sourceMappingURL=feeds.d.ts.map
|