27 lines
2.3 KiB
TypeScript
27 lines
2.3 KiB
TypeScript
import { z } from "zod"
|
|
import type { add } from "./actions.js"
|
|
import { SERVER_PROBE_OPERATION, SERVER_PROBE_RECEIPT_READ_OPERATION } from "../../services/server-probe-authority.js"
|
|
import { SERVER_PROBE_MCP_OPERATION_VERSION } from "./server-probe-actions.js"
|
|
import { createStorageServerProbeMcpAdapter } from "./server-probe-storage-host.js"
|
|
import { registerMcpService } from "./service-registry.js"
|
|
|
|
export const SERVER_PROBE_CANCEL_OPERATION = "servers.probes.cancel"
|
|
const cancelSchema = z.object({ operationId: z.string().uuid() }).strict()
|
|
|
|
/** Fixed production composition. Construction is inert; normal startup enrolls
|
|
* schema 0037 before serving tools. No request may select storage or callbacks. */
|
|
export function registerServerProbeActions(register: typeof add) {
|
|
const adapter = createStorageServerProbeMcpAdapter()
|
|
registerMcpService(SERVER_PROBE_OPERATION, adapter.service)
|
|
register(SERVER_PROBE_OPERATION, "mm_server_probe_plan", "Серверная диагностика с подтверждением человеком и без автоматического повтора", "servers", "mm:servers:write", "diagnostic", "servers", adapter.schema,
|
|
{ version: SERVER_PROBE_MCP_OPERATION_VERSION, target: adapter.target, prepare: adapter.prepare })
|
|
register(SERVER_PROBE_RECEIPT_READ_OPERATION, "mm_server_probe_receipt_get", "Постраничная квитанция диагностики с актуальным правом чтения", "servers", "mm:servers:read", "read", "servers", adapter.receiptSchema,
|
|
{ version: 1, target: adapter.receiptTarget, read: adapter.readPage })
|
|
// Immediate stop for an already human-approved owned run. The action uses the
|
|
// direct executor hook, but its descriptor remains a write: durable stop and
|
|
// audit records are created. The storage host rechecks owner/run/write/scope
|
|
// grants and exact approved source; cancellation cannot execute another run.
|
|
register(SERVER_PROBE_CANCEL_OPERATION, "mm_server_probe_cancel", "Остановить свою подтверждённую диагностику: записать запрос отмены и аудит", "servers", "mm:servers:write", "write", "connection", cancelSchema,
|
|
{ version: 1, read: (input, context) => adapter.cancel(context.principal, String(input.operationId), context.signal) })
|
|
}
|