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>
90 lines
1.7 KiB
Markdown
90 lines
1.7 KiB
Markdown
# @inquirer/ansi
|
|
|
|
A lightweight package providing ANSI escape sequences for terminal cursor manipulation and screen clearing.
|
|
|
|
# Installation
|
|
|
|
<table>
|
|
<tr>
|
|
<th>npm</th>
|
|
<th>yarn</th>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
|
|
```sh
|
|
npm install @inquirer/ansi
|
|
```
|
|
|
|
</td>
|
|
<td>
|
|
|
|
```sh
|
|
yarn add @inquirer/ansi
|
|
```
|
|
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
## Usage
|
|
|
|
```js
|
|
import {
|
|
cursorUp,
|
|
cursorDown,
|
|
cursorTo,
|
|
cursorLeft,
|
|
cursorHide,
|
|
cursorShow,
|
|
eraseLines,
|
|
} from '@inquirer/ansi';
|
|
|
|
// Move cursor up 3 lines
|
|
process.stdout.write(cursorUp(3));
|
|
|
|
// Move cursor to specific position (x: 10, y: 5)
|
|
process.stdout.write(cursorTo(10, 5));
|
|
|
|
// Hide/show cursor
|
|
process.stdout.write(cursorHide);
|
|
process.stdout.write(cursorShow);
|
|
|
|
// Clear 5 lines
|
|
process.stdout.write(eraseLines(5));
|
|
```
|
|
|
|
Or when used inside an inquirer prompt:
|
|
|
|
```js
|
|
import { cursorHide } from '@inquirer/ansi';
|
|
import { createPrompt } from '@inquirer/core';
|
|
|
|
export default createPrompt((config, done: (value: void) => void) => {
|
|
return `Choose an option${cursorHide}`;
|
|
});
|
|
```
|
|
|
|
## API
|
|
|
|
### Cursor Movement
|
|
|
|
- **`cursorUp(count?: number)`** - Move cursor up by `count` lines (default: 1)
|
|
- **`cursorDown(count?: number)`** - Move cursor down by `count` lines (default: 1)
|
|
- **`cursorTo(x: number, y?: number)`** - Move cursor to position (x, y). If y is omitted, only moves horizontally
|
|
- **`cursorLeft`** - Move cursor to beginning of line
|
|
|
|
### Cursor Visibility
|
|
|
|
- **`cursorHide`** - Hide the cursor
|
|
- **`cursorShow`** - Show the cursor
|
|
|
|
### Screen Manipulation
|
|
|
|
- **`eraseLines(count: number)`** - Clear `count` lines and position cursor at the beginning of the first cleared line
|
|
|
|
# License
|
|
|
|
Copyright (c) 2025 Simon Boudrias (twitter: [@vaxilart](https://twitter.com/Vaxilart))<br/>
|
|
Licensed under the MIT license.
|