tftsr-devops_investigation/node_modules/locate-app
Shaun Arman 8839075805 feat: initial implementation of TFTSR IT Triage & RCA application
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>
2026-03-14 22:36:25 -05:00
..
dist feat: initial implementation of TFTSR IT Triage & RCA application 2026-03-14 22:36:25 -05:00
media feat: initial implementation of TFTSR IT Triage & RCA application 2026-03-14 22:36:25 -05:00
node_modules/type-fest feat: initial implementation of TFTSR IT Triage & RCA application 2026-03-14 22:36:25 -05:00
.editorconfig feat: initial implementation of TFTSR IT Triage & RCA application 2026-03-14 22:36:25 -05:00
.gitattributes feat: initial implementation of TFTSR IT Triage & RCA application 2026-03-14 22:36:25 -05:00
.prettierrc feat: initial implementation of TFTSR IT Triage & RCA application 2026-03-14 22:36:25 -05:00
.whitesource feat: initial implementation of TFTSR IT Triage & RCA application 2026-03-14 22:36:25 -05:00
CHANGELOG.md feat: initial implementation of TFTSR IT Triage & RCA application 2026-03-14 22:36:25 -05:00
jestconfig.json feat: initial implementation of TFTSR IT Triage & RCA application 2026-03-14 22:36:25 -05:00
LICENSE feat: initial implementation of TFTSR IT Triage & RCA application 2026-03-14 22:36:25 -05:00
package.json feat: initial implementation of TFTSR IT Triage & RCA application 2026-03-14 22:36:25 -05:00
README.md feat: initial implementation of TFTSR IT Triage & RCA application 2026-03-14 22:36:25 -05:00
tsconfig.json feat: initial implementation of TFTSR IT Triage & RCA application 2026-03-14 22:36:25 -05:00
tslint.json feat: initial implementation of TFTSR IT Triage & RCA application 2026-03-14 22:36:25 -05:00

🕵️ Locate ANY APP

License of Locate ANY APP NPM Version of Locate ANY APP Quality of package Locate ANY APP Known Vulnerabilities Issues Socket

Find apps installed on your system. This util will help to find executables of a known app like Chrome, Firefox,... on Windows, Linux, and macOS out of the box.

Wallpaper of 🕵️ Locate ANY APP

Social media wallpaper for Locate app project

🔎 Locating the Firefox

Via this utility it is extremely easy to get the path to some browser:

import { locateChrome } from 'locate-app';

const executablePathOfFirefox = await locateFirefox();

Then you can use executablePathOfFirefox to open (spawn) the browser:

import { locateChrome } from 'locate-app';
import { spawn } from 'child_process';

spawn(await locateFirefox(), ['https://github.com/hejny/locate-app']);

Locate app will ensure that file is executable. If it can not find the browser it will throw an error. Or you can use the path to the browser as you want:

🔍 Locating the Chrome

import { locateChrome } from 'locate-app';

const executablePathOfChrome = await locateChrome();
import { locateChrome } from 'locate-app';
import { spawn } from 'child_process';

spawn(await locateChrome(), ['https://github.com/hejny/locate-app']);

Locate app will ensure that file is executable. If it can not find the browser it will throw an error. Or you can use the path to the browser as you want:

import { locateChrome } from 'locate-app';
import puppeteer from 'puppeteer-core';

await puppeteer.launch({ executablePath: await locateChrome() });

🔎 Locating arbitrary browser

You can use functions locateChrome, locateEdge, locateFirefox, locateInternetExplorer, locateSafari or universal locateBrowser which recieves param which browser to locate:

import { locateBrowser } from 'locate-app';

const executablePathOfSafari = await locateBrowser('safari');
const executablePathOfEdge = await locateBrowser('edge');

👨‍💻 Locating VSCode

import { locateChrome } from 'locate-app';
import { spawn } from 'child_process';

spawn(await locateVSCode(), ['~/work/my-awesome-project']);

🔍 Locating arbitrary app

You can locate any app very easily. You need to provide breadcrumbs for each platform. If you omit some platform it does not matter but there will be an error in runtime if you try to run it on the omitted os.

import { locateApp } from 'locate-app';

await locateApp({
    appName: 'Chrome',
    linuxWhich: 'google-chrome',
    windowsSuffix: '\\Google\\Chrome\\Application\\chrome.exe',
    macOsName: 'Google Chrome',
});

📖 Documentation

The project is fully typed so you probably do not need the documentation. But if so, here it is https://hejny.github.io/locate-app/index.html

Changelog

See CHANGELOG.md

🖋️ Contributing

I am open to pull requests, feedback, and suggestions. Or if you like this utility, you can buy me a coffee or donate via cryptocurrencies.

You can also star the locate-app package, follow me on GitHub or various other social networks.

Partners

Collboard       WebGPT       Promptbook

Become a partner