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>
56 lines
1.5 KiB
JavaScript
56 lines
1.5 KiB
JavaScript
"use strict";
|
|
|
|
/**
|
|
* Representation a of zip file in js
|
|
* @constructor
|
|
*/
|
|
function JSZip() {
|
|
// if this constructor is used without `new`, it adds `new` before itself:
|
|
if(!(this instanceof JSZip)) {
|
|
return new JSZip();
|
|
}
|
|
|
|
if(arguments.length) {
|
|
throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");
|
|
}
|
|
|
|
// object containing the files :
|
|
// {
|
|
// "folder/" : {...},
|
|
// "folder/data.txt" : {...}
|
|
// }
|
|
// NOTE: we use a null prototype because we do not
|
|
// want filenames like "toString" coming from a zip file
|
|
// to overwrite methods and attributes in a normal Object.
|
|
this.files = Object.create(null);
|
|
|
|
this.comment = null;
|
|
|
|
// Where we are in the hierarchy
|
|
this.root = "";
|
|
this.clone = function() {
|
|
var newObj = new JSZip();
|
|
for (var i in this) {
|
|
if (typeof this[i] !== "function") {
|
|
newObj[i] = this[i];
|
|
}
|
|
}
|
|
return newObj;
|
|
};
|
|
}
|
|
JSZip.prototype = require("./object");
|
|
JSZip.prototype.loadAsync = require("./load");
|
|
JSZip.support = require("./support");
|
|
JSZip.defaults = require("./defaults");
|
|
|
|
// TODO find a better way to handle this version,
|
|
// a require('package.json').version doesn't work with webpack, see #327
|
|
JSZip.version = "3.10.1";
|
|
|
|
JSZip.loadAsync = function (content, options) {
|
|
return new JSZip().loadAsync(content, options);
|
|
};
|
|
|
|
JSZip.external = require("./external");
|
|
module.exports = JSZip;
|