tftsr-devops_investigation/node_modules/@tauri-apps/api/menu/menu.cjs

149 lines
5.0 KiB
JavaScript
Raw Normal View History

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-15 03:36:25 +00:00
'use strict';
var submenu = require('./submenu.cjs');
var dpi = require('../dpi.cjs');
var core = require('../core.cjs');
var base = require('./base.cjs');
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
/** A type that is either a menu bar on the window
* on Windows and Linux or as a global menu in the menubar on macOS.
*
* #### Platform-specific:
*
* - **macOS**: if using {@linkcode Menu} for the global menubar, it can only contain {@linkcode Submenu}s.
*/
class Menu extends base.MenuItemBase {
/** @ignore */
constructor(rid, id) {
super(rid, id, 'Menu');
}
/** Create a new menu. */
static async new(opts) {
return base.newMenu('Menu', opts).then(([rid, id]) => new Menu(rid, id));
}
/** Create a default menu. */
static async default() {
return core.invoke('plugin:menu|create_default').then(([rid, id]) => new Menu(rid, id));
}
/**
* Add a menu item to the end of this menu.
*
* #### Platform-specific:
*
* - **macOS:** Only {@linkcode Submenu}s can be added to a {@linkcode Menu}.
*/
async append(items) {
return core.invoke('plugin:menu|append', {
rid: this.rid,
kind: this.kind,
items: (Array.isArray(items) ? items : [items]).map((i) => 'rid' in i ? [i.rid, i.kind] : i)
});
}
/**
* Add a menu item to the beginning of this menu.
*
* #### Platform-specific:
*
* - **macOS:** Only {@linkcode Submenu}s can be added to a {@linkcode Menu}.
*/
async prepend(items) {
return core.invoke('plugin:menu|prepend', {
rid: this.rid,
kind: this.kind,
items: (Array.isArray(items) ? items : [items]).map((i) => 'rid' in i ? [i.rid, i.kind] : i)
});
}
/**
* Add a menu item to the specified position in this menu.
*
* #### Platform-specific:
*
* - **macOS:** Only {@linkcode Submenu}s can be added to a {@linkcode Menu}.
*/
async insert(items, position) {
return core.invoke('plugin:menu|insert', {
rid: this.rid,
kind: this.kind,
items: (Array.isArray(items) ? items : [items]).map((i) => 'rid' in i ? [i.rid, i.kind] : i),
position
});
}
/** Remove a menu item from this menu. */
async remove(item) {
return core.invoke('plugin:menu|remove', {
rid: this.rid,
kind: this.kind,
item: [item.rid, item.kind]
});
}
/** Remove a menu item from this menu at the specified position. */
async removeAt(position) {
return core.invoke('plugin:menu|remove_at', {
rid: this.rid,
kind: this.kind,
position
}).then(submenu.itemFromKind);
}
/** Returns a list of menu items that has been added to this menu. */
async items() {
return core.invoke('plugin:menu|items', {
rid: this.rid,
kind: this.kind
}).then((i) => i.map(submenu.itemFromKind));
}
/** Retrieves the menu item matching the given identifier. */
async get(id) {
return core.invoke('plugin:menu|get', {
rid: this.rid,
kind: this.kind,
id
}).then((r) => (r ? submenu.itemFromKind(r) : null));
}
/**
* Popup this menu as a context menu on the specified window.
*
* @param at If a position is provided, it is relative to the window's top-left corner.
* If there isn't one provided, the menu will pop up at the current location of the mouse.
*/
async popup(at, window) {
var _a;
return core.invoke('plugin:menu|popup', {
rid: this.rid,
kind: this.kind,
window: (_a = window === null || window === void 0 ? void 0 : window.label) !== null && _a !== void 0 ? _a : null,
at: at instanceof dpi.Position ? at : at ? new dpi.Position(at) : null
});
}
/**
* Sets the app-wide menu and returns the previous one.
*
* If a window was not created with an explicit menu or had one set explicitly,
* this menu will be assigned to it.
*/
async setAsAppMenu() {
return core.invoke('plugin:menu|set_as_app_menu', {
rid: this.rid
}).then((r) => (r ? new Menu(r[0], r[1]) : null));
}
/**
* Sets the window menu and returns the previous one.
*
* #### Platform-specific:
*
* - **macOS:** Unsupported. The menu on macOS is app-wide and not specific to one
* window, if you need to set it, use {@linkcode Menu.setAsAppMenu} instead.
*/
async setAsWindowMenu(window) {
var _a;
return core.invoke('plugin:menu|set_as_window_menu', {
rid: this.rid,
window: (_a = window === null || window === void 0 ? void 0 : window.label) !== null && _a !== void 0 ? _a : null
}).then((r) => (r ? new Menu(r[0], r[1]) : null));
}
}
exports.Menu = Menu;