mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-08-28 05:27:41 +00:00
Replaces the legacy flat `ServerSettings` / `RunSettings` schemas in
`docs/api-reference/fabro-api.yaml` and 20+ supporting nested type
schemas (LlmSettings, SandboxSettings, HookDefinition, WebSettings,
ApiSettings, GitSettings, McpServerEntry, etc.) with two simple
`type: object, additionalProperties: true` schemas that declare the
wire shape as the v2 `SettingsFile` tree with secret-bearing subtrees
dropped before serialization.
Regenerates the Rust progenitor and TypeScript Axios clients against
the new spec. The progenitor generates `RunSettings` / `ServerSettings`
as `#[serde(transparent)]` newtypes over `serde_json::Map<String,
Value>`; the openapi-generator emits `{ [key: string]: any; }` inlined
into the API method signatures and no longer exports named model
types.
Updates fabro-web to define local `type ServerSettings =
Record<string, unknown>` / `type RunSettings = Record<string,
unknown>` aliases since the generated client no longer exports them.
The UI only `JSON.stringify`s these payloads into a CollapsibleFile,
so the opaque shape is fine.
All 3,756 workspace tests remain green. The OpenAPI conformance test
`server_settings_keys_match_openapi_spec` still passes because
`compare_schema` short-circuits on pure-map schemas (no `properties`);
it becomes a no-op that will be removed entirely when Stage 6.3b
deletes the legacy flat `Settings` struct it still builds.
Unblocks the server handler + CLI migration in the next commits of
Stage 6.6.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
40 lines
1 KiB
TypeScript
40 lines
1 KiB
TypeScript
import type { PaginationMeta } from "@qltysh/fabro-api-client";
|
|
|
|
/**
|
|
* Opaque settings payload returned by `/api/v1/runs/:id/settings`. Mirrors the
|
|
* v2 `SettingsFile` shape in `lib/crates/fabro-types/src/settings/tree.rs`,
|
|
* with secret-bearing subtrees dropped before serialization. Treated as a
|
|
* loose JSON object on the web side — consumers only render it.
|
|
*/
|
|
export type RunSettings = Record<string, unknown>;
|
|
|
|
export interface WorkflowScheduleSummary {
|
|
expression: string;
|
|
next_run?: string | null;
|
|
}
|
|
|
|
export interface WorkflowLastRunSummary {
|
|
ran_at?: string | null;
|
|
}
|
|
|
|
export interface WorkflowListItem {
|
|
name: string;
|
|
slug: string;
|
|
filename: string;
|
|
last_run?: WorkflowLastRunSummary | null;
|
|
schedule?: WorkflowScheduleSummary | null;
|
|
}
|
|
|
|
export interface PaginatedWorkflowListResponse {
|
|
data: WorkflowListItem[];
|
|
pagination?: PaginationMeta;
|
|
}
|
|
|
|
export interface WorkflowDetailResponse {
|
|
name: string;
|
|
slug: string;
|
|
description: string;
|
|
filename: string;
|
|
settings: RunSettings;
|
|
graph: string;
|
|
}
|