feat(extension): 接入 stdio MCP Plugin Host
This commit is contained in:
@@ -255,6 +255,22 @@ export type PluginStatus =
|
||||
| 'dependency_missing'
|
||||
| 'permission_required'
|
||||
|
||||
export type PluginHostState = 'stopped' | 'starting' | 'ready' | 'unhealthy' | 'error'
|
||||
|
||||
export interface PluginHostStatus {
|
||||
plugin_id: string
|
||||
backend_type: 'mcp' | 'internal_rpc' | 'none'
|
||||
transport: 'stdio' | 'http' | 'none'
|
||||
status: PluginHostState
|
||||
tools_count: number
|
||||
started_at?: string | null
|
||||
last_seen_at?: string | null
|
||||
protocol_version?: string | null
|
||||
server_name?: string | null
|
||||
server_version?: string | null
|
||||
error?: string | null
|
||||
}
|
||||
|
||||
export interface PluginContribution {
|
||||
type: 'tool' | 'command' | 'importer' | 'exporter' | 'sidebar_panel' | 'settings_section'
|
||||
id: string
|
||||
@@ -539,7 +555,14 @@ export interface ApiPlugin {
|
||||
panels: string[]
|
||||
settings_sections: string[]
|
||||
}
|
||||
backend: { type: 'mcp' | 'internal_rpc' | 'none'; transport: 'stdio' | 'http' | 'none' }
|
||||
backend: {
|
||||
type: 'mcp' | 'internal_rpc' | 'none'
|
||||
transport: 'stdio' | 'http' | 'none'
|
||||
command?: string | null
|
||||
args?: string[]
|
||||
startup_timeout_seconds?: number
|
||||
tool_timeout_seconds?: number
|
||||
}
|
||||
}
|
||||
status: PluginStatus
|
||||
enabled: boolean
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import apiClient from './apiClient'
|
||||
import type { ApiPlugin, OperationResponse, Plugin, PluginContribution } from '@/contracts'
|
||||
import type { ApiPlugin, OperationResponse, Plugin, PluginContribution, PluginHostStatus } from '@/contracts'
|
||||
|
||||
function toPlugin(plugin: ApiPlugin): Plugin {
|
||||
const { manifest } = plugin
|
||||
@@ -54,6 +54,14 @@ export async function grantPluginPermissions(pluginId: string, permissions: stri
|
||||
return toPlugin(await apiClient.put<ApiPlugin>(`/api/plugins/${pluginId}/permissions`, { permissions }))
|
||||
}
|
||||
|
||||
export async function getPluginHostStatus(pluginId: string): Promise<PluginHostStatus> {
|
||||
return apiClient.get(`/api/plugins/${pluginId}/host`)
|
||||
}
|
||||
|
||||
export async function restartPluginHost(pluginId: string): Promise<OperationResponse> {
|
||||
return apiClient.post(`/api/plugins/${pluginId}/host/restart`)
|
||||
}
|
||||
|
||||
export async function uninstallPlugin(pluginId: string): Promise<OperationResponse> {
|
||||
return apiClient.delete(`/api/plugins/${pluginId}`)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user