fix: param-key mapping, phantom ops, and delete/update maps — close #12-#15

- #12: Remove tag from DELETE_PARAM_KEY (DeleteTag uses {id}, not {tag})
- #13: Remove 5 phantom execute ops (RunServerRefreshContainers/RunCommand/Scripts/Copy/Move)
- #14: Remove user_group from UPDATE_REQUEST_MAP (UpdateUserGroup doesn't exist)
- #15: Server-scoped execute ops pass {server} not {id}; RunSync passes {sync} not {id}
This commit is contained in:
2026-09-08 11:17:46 +00:00
parent e5f1200577
commit 417c8ca13d
6 changed files with 28 additions and 28 deletions
+26 -3
View File
@@ -2,11 +2,26 @@ import { z } from "zod";
import { KomodoClient } from "../komodo-client.js";
import { ExecuteOperation, EXECUTE_REQUEST_MAP } from "../types.js";
// Operations that need {server: <value>} instead of {id: <value>}
const SERVER_SCOPED_OPS = new Set([
"run_server_prune_images",
"run_server_prune_containers",
"run_server_prune_networks",
"rotate_all_server_keys",
"prune_buildx",
"prune_docker_builders",
"prune_system",
"prune_volumes",
"delete_image",
"delete_network",
"delete_volume",
]);
export const executeInputSchema = {
operation: ExecuteOperation.describe(
"Execute operation (run_build, deploy_stack, deploy_stack_service, deploy, deploy_stack_if_changed, destroy_stack, destroy_container, destroy_deployment, pull_stack, pull_deployment, build_repo, clone_repo, pull_repo, cancel_repo_build, clear_repo_cache, run_procedure, run_action, run_sync, cancel_action, cancel_build, cancel_procedure, start_stack, stop_stack, restart_stack, pause_stack, unpause_stack, start_container, stop_container, restart_container, pause_container, unpause_container, start_all_containers, stop_all_containers, restart_all_containers, pause_all_containers, unpause_all_containers, start_deployment, stop_deployment, restart_deployment, pause_deployment, unpause_deployment, run_server_refresh_containers, run_server_prune_images, run_server_prune_containers, run_server_prune_networks, run_server_run_command, run_server_scripts, run_server_copy, run_server_move, rotate_all_server_keys, prune_buildx, prune_docker_builders, prune_system, prune_volumes, delete_image, delete_network, delete_volume, remove_swarm_nodes, remove_swarm_services, remove_swarm_configs, remove_swarm_secrets, remove_swarm_stacks, create_swarm_config, create_swarm_secret, rotate_swarm_config, rotate_swarm_secret, update_swarm_node, batch_run_build, batch_deploy_stack, batch_deploy_stack_if_changed, batch_deploy, batch_pull_stack, batch_pull_repo, batch_build_repo, batch_clone_repo, batch_run_procedure, batch_run_action, batch_destroy_deployment, batch_destroy_stack, backup_core_database, rotate_core_keys, global_auto_update, send_alert, test_alerter)",
"Execute operation. Server-scoped ops (prune_*, delete_*) require the server name in the id field. RunSync requires the sync name/id in the id field.",
),
id: z.string().optional().describe("Resource ID or name for the operation"),
id: z.string().optional().describe("Resource ID, name, or server name (depends on operation)"),
params: z
.record(z.string(), z.unknown())
.optional()
@@ -29,7 +44,15 @@ export async function handleExecute(
}
const requestParams: Record<string, unknown> = { ...params };
if (id) requestParams.id = id;
if (id) {
if (SERVER_SCOPED_OPS.has(operation)) {
requestParams.server = id;
} else if (operation === "run_sync") {
requestParams.sync = id;
} else {
requestParams.id = id;
}
}
const result = await client.rpc(mapping.route, mapping.name, requestParams);