8dd350286e
- Add Docker Compose and Dockerfile support for tool definitions - Implement readiness probes with configurable command, timeout, interval - Create ConfigFolder model for reusable file collections with project overrides - Add rich tool config fields: port_override, start_command, working_directory, env vars, volumes - Build unified Tool Workshop UI at /tool-workshop replacing /tool-configs and /tool-types - Update instance creation to support dockerfile builds, config folder mounting, readiness probes - Add 3 database migrations for tool_types, tool_configs, and new config_folders table - Create docker_build.py and readiness_probe.py services - Add config_folders API with CRUD and project override endpoints Quality gates: frontend build passes, Python syntax valid, all phases complete Addresses tool-workshop OpenSpec change
75 lines
2.0 KiB
TypeScript
75 lines
2.0 KiB
TypeScript
import { apiClient } from "./client";
|
|
|
|
export interface ToolConfig {
|
|
id: string;
|
|
tool_type_id: string;
|
|
project_id: string | null;
|
|
key: string;
|
|
value: string;
|
|
config_type: string;
|
|
file_path: string | null;
|
|
port_override: number | null;
|
|
start_command: string | null;
|
|
working_directory: string | null;
|
|
environment_variables: Record<string, string> | null;
|
|
volumes: Array<{ source: string; target: string; type?: string }> | null;
|
|
}
|
|
|
|
export interface CreateToolConfigRequest {
|
|
tool_type_id: string;
|
|
project_id?: string;
|
|
key: string;
|
|
value: string;
|
|
config_type?: string;
|
|
file_path?: string;
|
|
port_override?: number;
|
|
start_command?: string;
|
|
working_directory?: string;
|
|
environment_variables?: Record<string, string>;
|
|
volumes?: Array<{ source: string; target: string; type?: string }>;
|
|
}
|
|
|
|
export const listToolConfigs = async (
|
|
tool_type_id?: string,
|
|
project_id?: string
|
|
): Promise<ToolConfig[]> => {
|
|
const params = new URLSearchParams();
|
|
if (tool_type_id) params.append("tool_type_id", tool_type_id);
|
|
if (project_id) params.append("project_id", project_id);
|
|
|
|
const response = await apiClient.get<{ configs: ToolConfig[] }>(
|
|
`/tool-configs?${params.toString()}`
|
|
);
|
|
return response.data.configs;
|
|
};
|
|
|
|
export const createToolConfig = async (
|
|
data: CreateToolConfigRequest
|
|
): Promise<ToolConfig> => {
|
|
const response = await apiClient.post<{ configs: ToolConfig[] }>("/tool-configs", data);
|
|
return response.data.configs[0];
|
|
};
|
|
|
|
export const updateToolConfig = async (
|
|
id: string,
|
|
data: CreateToolConfigRequest
|
|
): Promise<ToolConfig> => {
|
|
const response = await apiClient.put<{ configs: ToolConfig[] }>(
|
|
`/tool-configs/${id}`,
|
|
data
|
|
);
|
|
return response.data.configs[0];
|
|
};
|
|
|
|
export const deleteToolConfig = async (id: string): Promise<void> => {
|
|
await apiClient.delete(`/tool-configs/${id}`);
|
|
};
|
|
|
|
export const getToolConfigDefaults = async (
|
|
toolTypeId: string
|
|
): Promise<ToolConfig> => {
|
|
const response = await apiClient.get<ToolConfig>(
|
|
`/tool-configs/defaults/${toolTypeId}`
|
|
);
|
|
return response.data;
|
|
}; |