mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-09-22 00:31:12 +00:00
## Summary Terminal run failures now use a first-class `RunFailure` contract so downstream consumers receive structured diagnostics instead of flat `error` / `causes` / `reason` fields. The wire shape keeps concise public messages, source-chain causes, classification, optional actor/signature data, and redacted exec output tail in one nested value. Refs fabro-sh/fabro#198 ## What Changed - Added `fabro_types::RunFailure` and changed `run.failed` to emit `properties.failure` with `final_git_commit_sha` for failed-run commit state. - Replaced `Conclusion.failure_reason` with `Conclusion.failure` while leaving stage-level `StageCompletion.failure_reason` untouched. - Updated workflow internals to preserve owned error source chains until terminal event projection, then convert them into `RunFailure.causes`. - Updated store, server, CLI, OpenAPI, and generated TypeScript client consumers to use the nested failure object. - Added serialization, OpenAPI replacement, projection, and lifecycle coverage for the new contract. ## Validation - `cargo nextest run -p fabro-api -p fabro-types -p fabro-workflow -p fabro-store -p fabro-server -p fabro-cli` - `cargo +nightly-2026-04-14 clippy --workspace --all-targets -- -D warnings` - `cargo +nightly-2026-04-14 fmt --check --all` - `cd apps/fabro-web && bun run typecheck` - `cd apps/fabro-web && bun test` - `git diff --check` --- [](https://github.com/EveryInc/compound-engineering-plugin) 🤖 Generated with GPT-5 via [Codex](https://openai.com/codex)
242 lines
12 KiB
TypeScript
242 lines
12 KiB
TypeScript
/* tslint:disable */
|
|
/* eslint-disable */
|
|
/**
|
|
* Fabro Run API
|
|
* HTTP API for managing Fabro workflow run executions.
|
|
*
|
|
* The version of the OpenAPI document: 0.1.0
|
|
*
|
|
*
|
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
* https://openapi-generator.tech
|
|
* Do not edit the class manually.
|
|
*/
|
|
|
|
|
|
import type { Configuration } from '../configuration';
|
|
import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios';
|
|
import globalAxios from 'axios';
|
|
// Some imports not used depending on template conditions
|
|
// @ts-ignore
|
|
import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction, replaceWithSerializableTypeIfNeeded } from '../common';
|
|
// @ts-ignore
|
|
import { BASE_PATH, COLLECTION_FORMATS, type RequestArgs, BaseAPI, RequiredError, operationServerMap } from '../base';
|
|
// @ts-ignore
|
|
import type { ErrorResponse } from '../models';
|
|
// @ts-ignore
|
|
import type { ModelTestMode } from '../models';
|
|
// @ts-ignore
|
|
import type { ModelTestResult } from '../models';
|
|
// @ts-ignore
|
|
import type { PaginatedModelList } from '../models';
|
|
/**
|
|
* ModelsApi - axios parameter creator
|
|
*/
|
|
export const ModelsApiAxiosParamCreator = function (configuration?: Configuration) {
|
|
return {
|
|
/**
|
|
* Returns a paginated list of available LLM models from the built-in catalog.
|
|
* @summary List Models
|
|
* @param {string} [provider] Filter models by provider ID. Unknown provider IDs return an empty result set.
|
|
* @param {string} [query] Case-insensitive substring search across `id`, `display_name`, and `aliases`.
|
|
* @param {number} [pageLimit] Maximum number of items to return per page.
|
|
* @param {number} [pageOffset] Number of items to skip before returning results.
|
|
* @param {*} [options] Override http request option.
|
|
* @throws {RequiredError}
|
|
*/
|
|
listModels: async (provider?: string, query?: string, pageLimit?: number, pageOffset?: number, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
|
|
const localVarPath = `/api/v1/models`;
|
|
// use dummy base URL string because the URL constructor only accepts absolute URLs.
|
|
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
|
|
let baseOptions;
|
|
if (configuration) {
|
|
baseOptions = configuration.baseOptions;
|
|
}
|
|
|
|
const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
|
|
const localVarHeaderParameter = {} as any;
|
|
const localVarQueryParameter = {} as any;
|
|
|
|
// authentication SessionCookie required
|
|
|
|
// authentication BearerAuth required
|
|
// http bearer authentication required
|
|
await setBearerAuthToObject(localVarHeaderParameter, configuration)
|
|
|
|
if (provider !== undefined) {
|
|
localVarQueryParameter['provider'] = provider;
|
|
}
|
|
|
|
if (query !== undefined) {
|
|
localVarQueryParameter['query'] = query;
|
|
}
|
|
|
|
if (pageLimit !== undefined) {
|
|
localVarQueryParameter['page[limit]'] = pageLimit;
|
|
}
|
|
|
|
if (pageOffset !== undefined) {
|
|
localVarQueryParameter['page[offset]'] = pageOffset;
|
|
}
|
|
|
|
localVarHeaderParameter['Accept'] = 'application/json';
|
|
|
|
setSearchParams(localVarUrlObj, localVarQueryParameter);
|
|
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
|
|
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
|
|
|
|
return {
|
|
url: toPathString(localVarUrlObj),
|
|
options: localVarRequestOptions,
|
|
};
|
|
},
|
|
/**
|
|
* Tests a model by sending a simple prompt and reporting pass/fail.
|
|
* @summary Test Model
|
|
* @param {string} id The model identifier.
|
|
* @param {ModelTestMode} [mode] Test mode for the single-model test endpoint. Defaults to `basic`.
|
|
* @param {*} [options] Override http request option.
|
|
* @throws {RequiredError}
|
|
*/
|
|
testModel: async (id: string, mode?: ModelTestMode, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
|
|
// verify required parameter 'id' is not null or undefined
|
|
assertParamExists('testModel', 'id', id)
|
|
const localVarPath = `/api/v1/models/{id}/test`
|
|
.replace(`{${"id"}}`, encodeURIComponent(String(id)));
|
|
// use dummy base URL string because the URL constructor only accepts absolute URLs.
|
|
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
|
|
let baseOptions;
|
|
if (configuration) {
|
|
baseOptions = configuration.baseOptions;
|
|
}
|
|
|
|
const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
|
|
const localVarHeaderParameter = {} as any;
|
|
const localVarQueryParameter = {} as any;
|
|
|
|
// authentication SessionCookie required
|
|
|
|
// authentication BearerAuth required
|
|
// http bearer authentication required
|
|
await setBearerAuthToObject(localVarHeaderParameter, configuration)
|
|
|
|
if (mode !== undefined) {
|
|
localVarQueryParameter['mode'] = mode;
|
|
}
|
|
|
|
localVarHeaderParameter['Accept'] = 'application/json';
|
|
|
|
setSearchParams(localVarUrlObj, localVarQueryParameter);
|
|
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
|
|
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
|
|
|
|
return {
|
|
url: toPathString(localVarUrlObj),
|
|
options: localVarRequestOptions,
|
|
};
|
|
},
|
|
}
|
|
};
|
|
|
|
/**
|
|
* ModelsApi - functional programming interface
|
|
*/
|
|
export const ModelsApiFp = function(configuration?: Configuration) {
|
|
const localVarAxiosParamCreator = ModelsApiAxiosParamCreator(configuration)
|
|
return {
|
|
/**
|
|
* Returns a paginated list of available LLM models from the built-in catalog.
|
|
* @summary List Models
|
|
* @param {string} [provider] Filter models by provider ID. Unknown provider IDs return an empty result set.
|
|
* @param {string} [query] Case-insensitive substring search across `id`, `display_name`, and `aliases`.
|
|
* @param {number} [pageLimit] Maximum number of items to return per page.
|
|
* @param {number} [pageOffset] Number of items to skip before returning results.
|
|
* @param {*} [options] Override http request option.
|
|
* @throws {RequiredError}
|
|
*/
|
|
async listModels(provider?: string, query?: string, pageLimit?: number, pageOffset?: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedModelList>> {
|
|
const localVarAxiosArgs = await localVarAxiosParamCreator.listModels(provider, query, pageLimit, pageOffset, options);
|
|
const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
|
|
const localVarOperationServerBasePath = operationServerMap['ModelsApi.listModels']?.[localVarOperationServerIndex]?.url;
|
|
return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
|
|
},
|
|
/**
|
|
* Tests a model by sending a simple prompt and reporting pass/fail.
|
|
* @summary Test Model
|
|
* @param {string} id The model identifier.
|
|
* @param {ModelTestMode} [mode] Test mode for the single-model test endpoint. Defaults to `basic`.
|
|
* @param {*} [options] Override http request option.
|
|
* @throws {RequiredError}
|
|
*/
|
|
async testModel(id: string, mode?: ModelTestMode, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ModelTestResult>> {
|
|
const localVarAxiosArgs = await localVarAxiosParamCreator.testModel(id, mode, options);
|
|
const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
|
|
const localVarOperationServerBasePath = operationServerMap['ModelsApi.testModel']?.[localVarOperationServerIndex]?.url;
|
|
return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
|
|
},
|
|
}
|
|
};
|
|
|
|
/**
|
|
* ModelsApi - factory interface
|
|
*/
|
|
export const ModelsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
|
|
const localVarFp = ModelsApiFp(configuration)
|
|
return {
|
|
/**
|
|
* Returns a paginated list of available LLM models from the built-in catalog.
|
|
* @summary List Models
|
|
* @param {string} [provider] Filter models by provider ID. Unknown provider IDs return an empty result set.
|
|
* @param {string} [query] Case-insensitive substring search across `id`, `display_name`, and `aliases`.
|
|
* @param {number} [pageLimit] Maximum number of items to return per page.
|
|
* @param {number} [pageOffset] Number of items to skip before returning results.
|
|
* @param {*} [options] Override http request option.
|
|
* @throws {RequiredError}
|
|
*/
|
|
listModels(provider?: string, query?: string, pageLimit?: number, pageOffset?: number, options?: RawAxiosRequestConfig): AxiosPromise<PaginatedModelList> {
|
|
return localVarFp.listModels(provider, query, pageLimit, pageOffset, options).then((request) => request(axios, basePath));
|
|
},
|
|
/**
|
|
* Tests a model by sending a simple prompt and reporting pass/fail.
|
|
* @summary Test Model
|
|
* @param {string} id The model identifier.
|
|
* @param {ModelTestMode} [mode] Test mode for the single-model test endpoint. Defaults to `basic`.
|
|
* @param {*} [options] Override http request option.
|
|
* @throws {RequiredError}
|
|
*/
|
|
testModel(id: string, mode?: ModelTestMode, options?: RawAxiosRequestConfig): AxiosPromise<ModelTestResult> {
|
|
return localVarFp.testModel(id, mode, options).then((request) => request(axios, basePath));
|
|
},
|
|
};
|
|
};
|
|
|
|
/**
|
|
* ModelsApi - object-oriented interface
|
|
*/
|
|
export class ModelsApi extends BaseAPI {
|
|
/**
|
|
* Returns a paginated list of available LLM models from the built-in catalog.
|
|
* @summary List Models
|
|
* @param {string} [provider] Filter models by provider ID. Unknown provider IDs return an empty result set.
|
|
* @param {string} [query] Case-insensitive substring search across `id`, `display_name`, and `aliases`.
|
|
* @param {number} [pageLimit] Maximum number of items to return per page.
|
|
* @param {number} [pageOffset] Number of items to skip before returning results.
|
|
* @param {*} [options] Override http request option.
|
|
* @throws {RequiredError}
|
|
*/
|
|
public listModels(provider?: string, query?: string, pageLimit?: number, pageOffset?: number, options?: RawAxiosRequestConfig) {
|
|
return ModelsApiFp(this.configuration).listModels(provider, query, pageLimit, pageOffset, options).then((request) => request(this.axios, this.basePath));
|
|
}
|
|
|
|
/**
|
|
* Tests a model by sending a simple prompt and reporting pass/fail.
|
|
* @summary Test Model
|
|
* @param {string} id The model identifier.
|
|
* @param {ModelTestMode} [mode] Test mode for the single-model test endpoint. Defaults to `basic`.
|
|
* @param {*} [options] Override http request option.
|
|
* @throws {RequiredError}
|
|
*/
|
|
public testModel(id: string, mode?: ModelTestMode, options?: RawAxiosRequestConfig) {
|
|
return ModelsApiFp(this.configuration).testModel(id, mode, options).then((request) => request(this.axios, this.basePath));
|
|
}
|
|
}
|