359e09fd65
Adds a reviewable in-app install path for Hermes plugins: hermes://plugin/install?repo=owner/repo (and Settings -> Plugins -> Install from Git) opens a confirmation modal showing the repo identity and source links, shallow-clones to probe for agent and/or desktop plugin artifacts, lets the user pick components, then installs — agent side through the gateway's new plugins.manage `install` action (wrapping the existing dashboard_install_plugin), desktop side through a new Electron git-install module with subdir-escape guards, a 60s clone timeout, non-interactive git env, and insecure-scheme warnings. Never auto-installs; hybrid repos get one dialog. Legacy plugin-agent / plugin-desktop deeplinks route into the same modal. Salvaged from PR #82735 by @serefyarar (net diff applied onto current main as a single authored commit; the branch carried merge commits). The preview screenshot PNG from the original branch was intentionally not carried over — images live in PR bodies, not the repo.
23 lines
672 B
TypeScript
23 lines
672 B
TypeScript
import { atom } from 'nanostores'
|
|
|
|
/** Which plugin component(s) a legacy deeplink pre-selects after probe. */
|
|
export type PluginInstallLegacyHint = 'agent' | 'desktop' | null
|
|
|
|
/** Future metrics (opt-in): install count + success/failure, per repo. */
|
|
export interface PluginInstallRequest {
|
|
repo: string
|
|
enable?: boolean
|
|
force?: boolean
|
|
legacyHint?: PluginInstallLegacyHint
|
|
}
|
|
|
|
export const $pluginInstallRequest = atom<PluginInstallRequest | null>(null)
|
|
|
|
export function openPluginInstallRequest(request: PluginInstallRequest): void {
|
|
$pluginInstallRequest.set(request)
|
|
}
|
|
|
|
export function closePluginInstallRequest(): void {
|
|
$pluginInstallRequest.set(null)
|
|
}
|