From 3f027be220be4489e437fe0488d50fb84b352961 Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Tue, 28 Apr 2026 08:44:54 -0700 Subject: [PATCH] refactor: route --in-place through worktree_mode override MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drop --allow-no-checkpoints and the paired ManifestArgs in_place / allow_no_checkpoints fields. The CLI now translates --in-place into a single ManifestArgs.worktree_mode = "never" signal that flows through the existing args→layer pipeline as run.sandbox.local.worktree_mode = Never. The server computes prepared.in_place from the resolved settings once, replacing the trio of bail!s and the sandbox-default fixup. --- docs/public/api-reference/fabro-api.yaml | 11 +- lib/crates/fabro-cli/src/args.rs | 6 +- lib/crates/fabro-cli/src/manifest_builder.rs | 47 ++++---- lib/crates/fabro-cli/tests/it/cmd/create.rs | 1 - lib/crates/fabro-cli/tests/it/cmd/run.rs | 1 - lib/crates/fabro-server/src/run_manifest.rs | 109 +++++++++--------- .../fabro-api-client/src/api/runs-api.ts | 107 ++++++++--------- .../src/models/dirty-status.ts | 5 +- .../src/models/fork-source-ref.ts | 3 +- .../src/models/manifest-args.ts | 8 +- .../src/models/pre-run-git-context.ts | 5 +- .../src/models/pre-run-push-outcome.ts | 4 +- .../fabro-api-client/src/models/run-spec.ts | 5 +- 13 files changed, 153 insertions(+), 159 deletions(-) diff --git a/docs/public/api-reference/fabro-api.yaml b/docs/public/api-reference/fabro-api.yaml index afdef2005..86b7452ab 100644 --- a/docs/public/api-reference/fabro-api.yaml +++ b/docs/public/api-reference/fabro-api.yaml @@ -3693,12 +3693,11 @@ components: type: boolean preserve_sandbox: type: boolean - in_place: - type: boolean - description: Run against the submitted source directory directly. - allow_no_checkpoints: - type: boolean - description: Required with `in_place`; disables git checkpointing. + worktree_mode: + type: string + description: | + Override `run.sandbox.local.worktree_mode` (e.g. `never` for + `--in-place`). label: type: array items: diff --git a/lib/crates/fabro-cli/src/args.rs b/lib/crates/fabro-cli/src/args.rs index 24625bf22..4ff68efe5 100644 --- a/lib/crates/fabro-cli/src/args.rs +++ b/lib/crates/fabro-cli/src/args.rs @@ -237,13 +237,9 @@ pub(crate) struct RunArgs { pub(crate) sandbox: Option, /// Run directly in the source checkout without git checkpoints - #[arg(long, requires = "allow_no_checkpoints", conflicts_with = "sandbox")] + #[arg(long, conflicts_with = "sandbox")] pub(crate) in_place: bool, - /// Acknowledge that --in-place disables checkpoints - #[arg(long, requires = "in_place")] - pub(crate) allow_no_checkpoints: bool, - /// Attach a label to this run (repeatable, format: KEY=VALUE) #[arg(long = "label", value_name = "KEY=VALUE")] pub(crate) label: Vec, diff --git a/lib/crates/fabro-cli/src/manifest_builder.rs b/lib/crates/fabro-cli/src/manifest_builder.rs index 822bf672d..9f3f6b757 100644 --- a/lib/crates/fabro-cli/src/manifest_builder.rs +++ b/lib/crates/fabro-cli/src/manifest_builder.rs @@ -162,44 +162,42 @@ pub(crate) fn build_run_manifest(input: ManifestBuildInput) -> Result Option { let payload = types::ManifestArgs { - auto_approve: args.auto_approve.then_some(true), - dry_run: args.dry_run.then_some(true), - label: args.label.clone(), - model: args.model.clone(), - no_retro: args.no_retro.then_some(true), - preserve_sandbox: args.preserve_sandbox.then_some(true), - provider: args.provider.clone(), - sandbox: args + auto_approve: args.auto_approve.then_some(true), + dry_run: args.dry_run.then_some(true), + label: args.label.clone(), + model: args.model.clone(), + no_retro: args.no_retro.then_some(true), + preserve_sandbox: args.preserve_sandbox.then_some(true), + provider: args.provider.clone(), + sandbox: args .sandbox .map(|provider| fabro_sandbox::SandboxProvider::from(provider).to_string()) .or_else(|| { args.in_place .then(|| fabro_sandbox::SandboxProvider::Local.to_string()) }), - docker_image: None, - verbose: args.verbose.then_some(true), - in_place: args.in_place.then_some(true), - allow_no_checkpoints: args.allow_no_checkpoints.then_some(true), + docker_image: None, + verbose: args.verbose.then_some(true), + worktree_mode: args.in_place.then(|| "never".to_string()), }; (!manifest_args_is_empty(&payload)).then_some(payload) } pub(crate) fn preflight_manifest_args(args: &PreflightArgs) -> Option { let payload = types::ManifestArgs { - auto_approve: None, - dry_run: None, - label: Vec::new(), - model: args.model.clone(), - no_retro: None, - preserve_sandbox: None, - provider: args.provider.clone(), - sandbox: args + auto_approve: None, + dry_run: None, + label: Vec::new(), + model: args.model.clone(), + no_retro: None, + preserve_sandbox: None, + provider: args.provider.clone(), + sandbox: args .sandbox .map(|provider| fabro_sandbox::SandboxProvider::from(provider).to_string()), - docker_image: None, - verbose: args.verbose.then_some(true), - in_place: None, - allow_no_checkpoints: None, + docker_image: None, + verbose: args.verbose.then_some(true), + worktree_mode: None, }; (!manifest_args_is_empty(&payload)).then_some(payload) } @@ -700,6 +698,7 @@ fn manifest_args_is_empty(args: &types::ManifestArgs) -> bool { && args.sandbox.is_none() && args.docker_image.is_none() && args.verbose.is_none() + && args.worktree_mode.is_none() } #[cfg(test)] diff --git a/lib/crates/fabro-cli/tests/it/cmd/create.rs b/lib/crates/fabro-cli/tests/it/cmd/create.rs index 4818b9745..94894178a 100644 --- a/lib/crates/fabro-cli/tests/it/cmd/create.rs +++ b/lib/crates/fabro-cli/tests/it/cmd/create.rs @@ -53,7 +53,6 @@ fn help() { -v, --verbose Enable verbose output --sandbox Sandbox for agent tools [possible values: local, docker, daytona] --in-place Run directly in the source checkout without git checkpoints - --allow-no-checkpoints Acknowledge that --in-place disables checkpoints --label Attach a label to this run (repeatable, format: KEY=VALUE) --no-retro Skip retro generation after the run --preserve-sandbox Keep the sandbox alive after the run finishes (for debugging) diff --git a/lib/crates/fabro-cli/tests/it/cmd/run.rs b/lib/crates/fabro-cli/tests/it/cmd/run.rs index dec66554a..08b4534a5 100644 --- a/lib/crates/fabro-cli/tests/it/cmd/run.rs +++ b/lib/crates/fabro-cli/tests/it/cmd/run.rs @@ -170,7 +170,6 @@ fn help() { -v, --verbose Enable verbose output --sandbox Sandbox for agent tools [possible values: local, docker, daytona] --in-place Run directly in the source checkout without git checkpoints - --allow-no-checkpoints Acknowledge that --in-place disables checkpoints --label Attach a label to this run (repeatable, format: KEY=VALUE) --no-retro Skip retro generation after the run --preserve-sandbox Keep the sandbox alive after the run finishes (for debugging) diff --git a/lib/crates/fabro-server/src/run_manifest.rs b/lib/crates/fabro-server/src/run_manifest.rs index 5bd597589..68abb3591 100644 --- a/lib/crates/fabro-server/src/run_manifest.rs +++ b/lib/crates/fabro-server/src/run_manifest.rs @@ -6,8 +6,9 @@ use anyhow::{Result, anyhow, bail}; use fabro_api::types; use fabro_auth::auth_issue_message; use fabro_config::{ - CliLayer, CliOutputLayer, DaytonaDockerfileLayer, DockerSandboxLayer, ReplaceMap, - RunExecutionLayer, RunLayer, RunModelLayer, RunSandboxLayer, WorkflowSettingsBuilder, + CliLayer, CliOutputLayer, DaytonaDockerfileLayer, DockerSandboxLayer, LocalSandboxLayer, + ReplaceMap, RunExecutionLayer, RunLayer, RunModelLayer, RunSandboxLayer, + WorkflowSettingsBuilder, }; use fabro_graphviz::graph::{Graph, is_llm_handler_type}; use fabro_graphviz::render::apply_direction; @@ -24,7 +25,7 @@ use fabro_types::settings::cli::OutputVerbosity; use fabro_types::settings::interp::InterpString; use fabro_types::settings::run::{ ApprovalMode, DaytonaNetworkLayer, DaytonaSettings, DockerSettings, DockerfileSource, RunGoal, - RunMode, RunNamespace, + RunMode, RunNamespace, WorktreeMode, }; use fabro_types::{DirtyStatus, PreRunGitContext, PreRunPushOutcome, RunId, WorkflowSettings}; use fabro_util::check_report::{CheckDetail, CheckReport, CheckResult, CheckSection, CheckStatus}; @@ -39,16 +40,16 @@ use crate::server::AppState; #[derive(Clone)] pub(crate) struct PreparedManifest { - pub cwd: PathBuf, - pub git: Option, - pub root_source: String, - pub run_id: Option, - pub settings: WorkflowSettings, - pub target_path: PathBuf, - pub workflow_bundle: WorkflowBundle, - pub workflow_input: BundledWorkflow, - pub source_directory: PathBuf, - pub checkpoints_disabled: bool, + pub cwd: PathBuf, + pub git: Option, + pub root_source: String, + pub run_id: Option, + pub settings: WorkflowSettings, + pub target_path: PathBuf, + pub workflow_bundle: WorkflowBundle, + pub workflow_input: BundledWorkflow, + pub source_directory: PathBuf, + pub in_place: bool, } #[derive(Clone, Debug, Default)] @@ -69,29 +70,6 @@ pub(crate) fn prepare_manifest( if manifest.version != 1 { bail!("unsupported manifest version {}", manifest.version); } - let (in_place, allow_no_checkpoints) = manifest.args.as_ref().map_or((false, false), |args| { - ( - args.in_place.unwrap_or(false), - args.allow_no_checkpoints.unwrap_or(false), - ) - }); - if in_place && !allow_no_checkpoints { - bail!("in_place requires allow_no_checkpoints"); - } - if allow_no_checkpoints && !in_place { - bail!("allow_no_checkpoints requires in_place"); - } - if in_place { - if let Some(sandbox) = manifest - .args - .as_ref() - .and_then(|args| args.sandbox.as_deref()) - { - if sandbox != "local" { - bail!("in_place requires the local sandbox provider"); - } - } - } let cwd = PathBuf::from(&manifest.cwd); let target_path = PathBuf::from(&manifest.target.path); @@ -141,6 +119,9 @@ pub(crate) fn prepare_manifest( settings.run.goal = Some(RunGoal::Inline(InterpString::parse(&goal.text))); } + let in_place = settings.run.sandbox.provider == "local" + && settings.run.sandbox.local.worktree_mode == WorktreeMode::Never; + Ok(PreparedManifest { cwd: cwd.clone(), git: manifest.git.clone(), @@ -156,7 +137,7 @@ pub(crate) fn prepare_manifest( workflow_bundle, workflow_input, source_directory: resolve_working_directory(&settings, &cwd), - checkpoints_disabled: in_place, + in_place, }) } @@ -191,7 +172,7 @@ pub(crate) fn create_run_input( base_branch: prepared.git.as_ref().map(|git| git.branch.clone()), pre_run_git: prepared.git.as_ref().map(pre_run_git_from_manifest), fork_source_ref: None, - checkpoints_disabled: prepared.checkpoints_disabled, + checkpoints_disabled: prepared.in_place, provenance: None, configured_providers, } @@ -315,16 +296,21 @@ fn manifest_args_overrides(args: Option<&types::ManifestArgs>) -> ManifestSettin name: args.model.as_deref().map(InterpString::parse), fallbacks: Vec::new(), }); - let sandbox_provider = args - .sandbox - .clone() - .or_else(|| (args.in_place == Some(true)).then(|| "local".to_string())); - let sandbox = (sandbox_provider.is_some() + let local_worktree = args + .worktree_mode + .as_deref() + .and_then(parse_worktree_mode_arg) + .map(|mode| LocalSandboxLayer { + worktree_mode: Some(mode), + }); + let sandbox = (args.sandbox.is_some() || args.preserve_sandbox.is_some() - || args.docker_image.is_some()) + || args.docker_image.is_some() + || local_worktree.is_some()) .then(|| RunSandboxLayer { - provider: sandbox_provider, + provider: args.sandbox.clone(), preserve: args.preserve_sandbox, + local: local_worktree, docker: args.docker_image.as_ref().map(|image| DockerSandboxLayer { image: Some(image.clone()), ..DockerSandboxLayer::default() @@ -373,6 +359,16 @@ fn manifest_args_overrides(args: Option<&types::ManifestArgs>) -> ManifestSettin ManifestSettingsOverrides { run, cli } } +fn parse_worktree_mode_arg(value: &str) -> Option { + match value { + "always" => Some(WorktreeMode::Always), + "clean" => Some(WorktreeMode::Clean), + "dirty" => Some(WorktreeMode::Dirty), + "never" => Some(WorktreeMode::Never), + _ => None, + } +} + fn parse_labels(labels: &[String]) -> HashMap { labels .iter() @@ -1164,18 +1160,17 @@ root = "/srv/fabro" ))); let mut manifest = minimal_manifest(); manifest.args = Some(types::ManifestArgs { - auto_approve: None, - dry_run: Some(true), - label: Vec::new(), - model: None, - no_retro: None, - preserve_sandbox: None, - provider: None, - sandbox: None, - docker_image: None, - verbose: None, - in_place: None, - allow_no_checkpoints: None, + auto_approve: None, + dry_run: Some(true), + label: Vec::new(), + model: None, + no_retro: None, + preserve_sandbox: None, + provider: None, + sandbox: None, + docker_image: None, + verbose: None, + worktree_mode: None, }); let prepared = prepare_manifest(&server_settings, &manifest).unwrap(); diff --git a/lib/packages/fabro-api-client/src/api/runs-api.ts b/lib/packages/fabro-api-client/src/api/runs-api.ts index c403589ae..f79957b47 100644 --- a/lib/packages/fabro-api-client/src/api/runs-api.ts +++ b/lib/packages/fabro-api-client/src/api/runs-api.ts @@ -5,7 +5,7 @@ * 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 @@ -67,7 +67,7 @@ import type { TimelineEntryResponse } from '../models'; export const RunsApiAxiosParamCreator = function (configuration?: Configuration) { return { /** - * Marks a terminal run (`succeeded`, `failed`, or `dead`) as `archived`. Archived runs are hidden from default listings and are read-only until unarchived. Idempotent on already-archived runs. Returns 409 if the run is not terminal. + * Marks a terminal run (`succeeded`, `failed`, or `dead`) as `archived`. Archived runs are hidden from default listings and are read-only until unarchived. Idempotent on already-archived runs. Returns 409 if the run is not terminal. * @summary Archive Run * @param {string} id Unique run identifier (ULID). * @param {*} [options] Override http request option. @@ -189,7 +189,7 @@ export const RunsApiAxiosParamCreator = function (configuration?: Configuration) /** * Creates a new workflow run in `submitted` status from a self-contained manifest. * @summary Create Run - * @param {RunManifest} runManifest + * @param {RunManifest} runManifest * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -231,7 +231,7 @@ export const RunsApiAxiosParamCreator = function (configuration?: Configuration) * Creates a pull request for a completed run on GitHub and persists the record on the server. * @summary Create Run Pull Request * @param {string} id Unique run identifier (ULID). - * @param {CreateRunPullRequestRequest} createRunPullRequestRequest + * @param {CreateRunPullRequestRequest} createRunPullRequestRequest * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -318,10 +318,10 @@ export const RunsApiAxiosParamCreator = function (configuration?: Configuration) }; }, /** - * Creates a new run from a checkpoint of the source run. The source run is left untouched. + * Creates a new run from a checkpoint of the source run. The source run is left untouched. * @summary Fork Run * @param {string} id Unique run identifier (ULID). - * @param {ForkRequest} [forkRequest] + * @param {ForkRequest} [forkRequest] * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -401,7 +401,7 @@ export const RunsApiAxiosParamCreator = function (configuration?: Configuration) }; }, /** - * Returns checkpoint timeline entries from durable run-store checkpoints. Metadata branches are write-only archives and are not read by this endpoint. + * Returns checkpoint timeline entries from durable run-store checkpoints. Metadata branches are write-only archives and are not read by this endpoint. * @summary Get Run Timeline * @param {string} id Unique run identifier (ULID). * @param {*} [options] Override http request option. @@ -541,7 +541,7 @@ export const RunsApiAxiosParamCreator = function (configuration?: Configuration) * Merges the stored pull request for a run on GitHub. * @summary Merge Run Pull Request * @param {string} id Unique run identifier (ULID). - * @param {MergeRunPullRequestRequest} mergeRunPullRequestRequest + * @param {MergeRunPullRequestRequest} mergeRunPullRequestRequest * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -625,7 +625,7 @@ export const RunsApiAxiosParamCreator = function (configuration?: Configuration) /** * Validates and renders a workflow manifest as SVG without creating a run. * @summary Render Workflow Graph - * @param {RenderWorkflowGraphRequest} renderWorkflowGraphRequest + * @param {RenderWorkflowGraphRequest} renderWorkflowGraphRequest * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -827,10 +827,10 @@ export const RunsApiAxiosParamCreator = function (configuration?: Configuration) }; }, /** - * Creates a new run from an earlier checkpoint of a terminal source run, archives the source run, and records `run.superseded_by` on the source after archive succeeds. Returns 207 when the new run was created but the source archive step failed. + * Creates a new run from an earlier checkpoint of a terminal source run, archives the source run, and records `run.superseded_by` on the source after archive succeeds. Returns 207 when the new run was created but the source archive step failed. * @summary Rewind Run * @param {string} id Unique run identifier (ULID). - * @param {RewindRequest} [rewindRequest] + * @param {RewindRequest} [rewindRequest] * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -872,7 +872,7 @@ export const RunsApiAxiosParamCreator = function (configuration?: Configuration) /** * Validates a workflow manifest without creating a run. * @summary Validate Workflow Manifest - * @param {RunManifest} runManifest + * @param {RunManifest} runManifest * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -914,7 +914,7 @@ export const RunsApiAxiosParamCreator = function (configuration?: Configuration) * Starts a submitted run, queuing it for execution. Provide `resume=true` to resume an interrupted run from checkpoint. Returns 409 if the run is not startable. * @summary Start Run * @param {string} id Unique run identifier (ULID). - * @param {StartRunRequest} [startRunRequest] + * @param {StartRunRequest} [startRunRequest] * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -954,7 +954,7 @@ export const RunsApiAxiosParamCreator = function (configuration?: Configuration) }; }, /** - * Restores an archived run to its prior terminal status. Idempotent on runs that are terminal but not archived (returns the current status without emitting an event). Returns 409 if the run is active. + * Restores an archived run to its prior terminal status. Idempotent on runs that are terminal but not archived (returns the current status without emitting an event). Returns 409 if the run is active. * @summary Unarchive Run * @param {string} id Unique run identifier (ULID). * @param {*} [options] Override http request option. @@ -1043,7 +1043,7 @@ export const RunsApiFp = function(configuration?: Configuration) { const localVarAxiosParamCreator = RunsApiAxiosParamCreator(configuration) return { /** - * Marks a terminal run (`succeeded`, `failed`, or `dead`) as `archived`. Archived runs are hidden from default listings and are read-only until unarchived. Idempotent on already-archived runs. Returns 409 if the run is not terminal. + * Marks a terminal run (`succeeded`, `failed`, or `dead`) as `archived`. Archived runs are hidden from default listings and are read-only until unarchived. Idempotent on already-archived runs. Returns 409 if the run is not terminal. * @summary Archive Run * @param {string} id Unique run identifier (ULID). * @param {*} [options] Override http request option. @@ -1084,7 +1084,7 @@ export const RunsApiFp = function(configuration?: Configuration) { /** * Creates a new workflow run in `submitted` status from a self-contained manifest. * @summary Create Run - * @param {RunManifest} runManifest + * @param {RunManifest} runManifest * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1098,7 +1098,7 @@ export const RunsApiFp = function(configuration?: Configuration) { * Creates a pull request for a completed run on GitHub and persists the record on the server. * @summary Create Run Pull Request * @param {string} id Unique run identifier (ULID). - * @param {CreateRunPullRequestRequest} createRunPullRequestRequest + * @param {CreateRunPullRequestRequest} createRunPullRequestRequest * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1123,10 +1123,10 @@ export const RunsApiFp = function(configuration?: Configuration) { return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); }, /** - * Creates a new run from a checkpoint of the source run. The source run is left untouched. + * Creates a new run from a checkpoint of the source run. The source run is left untouched. * @summary Fork Run * @param {string} id Unique run identifier (ULID). - * @param {ForkRequest} [forkRequest] + * @param {ForkRequest} [forkRequest] * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1150,7 +1150,7 @@ export const RunsApiFp = function(configuration?: Configuration) { return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); }, /** - * Returns checkpoint timeline entries from durable run-store checkpoints. Metadata branches are write-only archives and are not read by this endpoint. + * Returns checkpoint timeline entries from durable run-store checkpoints. Metadata branches are write-only archives and are not read by this endpoint. * @summary Get Run Timeline * @param {string} id Unique run identifier (ULID). * @param {*} [options] Override http request option. @@ -1195,7 +1195,7 @@ export const RunsApiFp = function(configuration?: Configuration) { * Merges the stored pull request for a run on GitHub. * @summary Merge Run Pull Request * @param {string} id Unique run identifier (ULID). - * @param {MergeRunPullRequestRequest} mergeRunPullRequestRequest + * @param {MergeRunPullRequestRequest} mergeRunPullRequestRequest * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1221,7 +1221,7 @@ export const RunsApiFp = function(configuration?: Configuration) { /** * Validates and renders a workflow manifest as SVG without creating a run. * @summary Render Workflow Graph - * @param {RenderWorkflowGraphRequest} renderWorkflowGraphRequest + * @param {RenderWorkflowGraphRequest} renderWorkflowGraphRequest * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1284,10 +1284,10 @@ export const RunsApiFp = function(configuration?: Configuration) { return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); }, /** - * Creates a new run from an earlier checkpoint of a terminal source run, archives the source run, and records `run.superseded_by` on the source after archive succeeds. Returns 207 when the new run was created but the source archive step failed. + * Creates a new run from an earlier checkpoint of a terminal source run, archives the source run, and records `run.superseded_by` on the source after archive succeeds. Returns 207 when the new run was created but the source archive step failed. * @summary Rewind Run * @param {string} id Unique run identifier (ULID). - * @param {RewindRequest} [rewindRequest] + * @param {RewindRequest} [rewindRequest] * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1300,7 +1300,7 @@ export const RunsApiFp = function(configuration?: Configuration) { /** * Validates a workflow manifest without creating a run. * @summary Validate Workflow Manifest - * @param {RunManifest} runManifest + * @param {RunManifest} runManifest * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1314,7 +1314,7 @@ export const RunsApiFp = function(configuration?: Configuration) { * Starts a submitted run, queuing it for execution. Provide `resume=true` to resume an interrupted run from checkpoint. Returns 409 if the run is not startable. * @summary Start Run * @param {string} id Unique run identifier (ULID). - * @param {StartRunRequest} [startRunRequest] + * @param {StartRunRequest} [startRunRequest] * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1325,7 +1325,7 @@ export const RunsApiFp = function(configuration?: Configuration) { return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); }, /** - * Restores an archived run to its prior terminal status. Idempotent on runs that are terminal but not archived (returns the current status without emitting an event). Returns 409 if the run is active. + * Restores an archived run to its prior terminal status. Idempotent on runs that are terminal but not archived (returns the current status without emitting an event). Returns 409 if the run is active. * @summary Unarchive Run * @param {string} id Unique run identifier (ULID). * @param {*} [options] Override http request option. @@ -1360,7 +1360,7 @@ export const RunsApiFactory = function (configuration?: Configuration, basePath? const localVarFp = RunsApiFp(configuration) return { /** - * Marks a terminal run (`succeeded`, `failed`, or `dead`) as `archived`. Archived runs are hidden from default listings and are read-only until unarchived. Idempotent on already-archived runs. Returns 409 if the run is not terminal. + * Marks a terminal run (`succeeded`, `failed`, or `dead`) as `archived`. Archived runs are hidden from default listings and are read-only until unarchived. Idempotent on already-archived runs. Returns 409 if the run is not terminal. * @summary Archive Run * @param {string} id Unique run identifier (ULID). * @param {*} [options] Override http request option. @@ -1392,7 +1392,7 @@ export const RunsApiFactory = function (configuration?: Configuration, basePath? /** * Creates a new workflow run in `submitted` status from a self-contained manifest. * @summary Create Run - * @param {RunManifest} runManifest + * @param {RunManifest} runManifest * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1403,7 +1403,7 @@ export const RunsApiFactory = function (configuration?: Configuration, basePath? * Creates a pull request for a completed run on GitHub and persists the record on the server. * @summary Create Run Pull Request * @param {string} id Unique run identifier (ULID). - * @param {CreateRunPullRequestRequest} createRunPullRequestRequest + * @param {CreateRunPullRequestRequest} createRunPullRequestRequest * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1422,10 +1422,10 @@ export const RunsApiFactory = function (configuration?: Configuration, basePath? return localVarFp.deleteRun(id, force, options).then((request) => request(axios, basePath)); }, /** - * Creates a new run from a checkpoint of the source run. The source run is left untouched. + * Creates a new run from a checkpoint of the source run. The source run is left untouched. * @summary Fork Run * @param {string} id Unique run identifier (ULID). - * @param {ForkRequest} [forkRequest] + * @param {ForkRequest} [forkRequest] * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1443,7 +1443,7 @@ export const RunsApiFactory = function (configuration?: Configuration, basePath? return localVarFp.getRunPullRequest(id, options).then((request) => request(axios, basePath)); }, /** - * Returns checkpoint timeline entries from durable run-store checkpoints. Metadata branches are write-only archives and are not read by this endpoint. + * Returns checkpoint timeline entries from durable run-store checkpoints. Metadata branches are write-only archives and are not read by this endpoint. * @summary Get Run Timeline * @param {string} id Unique run identifier (ULID). * @param {*} [options] Override http request option. @@ -1479,7 +1479,7 @@ export const RunsApiFactory = function (configuration?: Configuration, basePath? * Merges the stored pull request for a run on GitHub. * @summary Merge Run Pull Request * @param {string} id Unique run identifier (ULID). - * @param {MergeRunPullRequestRequest} mergeRunPullRequestRequest + * @param {MergeRunPullRequestRequest} mergeRunPullRequestRequest * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1499,7 +1499,7 @@ export const RunsApiFactory = function (configuration?: Configuration, basePath? /** * Validates and renders a workflow manifest as SVG without creating a run. * @summary Render Workflow Graph - * @param {RenderWorkflowGraphRequest} renderWorkflowGraphRequest + * @param {RenderWorkflowGraphRequest} renderWorkflowGraphRequest * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1547,10 +1547,10 @@ export const RunsApiFactory = function (configuration?: Configuration, basePath? return localVarFp.retrieveRunGraphSource(id, options).then((request) => request(axios, basePath)); }, /** - * Creates a new run from an earlier checkpoint of a terminal source run, archives the source run, and records `run.superseded_by` on the source after archive succeeds. Returns 207 when the new run was created but the source archive step failed. + * Creates a new run from an earlier checkpoint of a terminal source run, archives the source run, and records `run.superseded_by` on the source after archive succeeds. Returns 207 when the new run was created but the source archive step failed. * @summary Rewind Run * @param {string} id Unique run identifier (ULID). - * @param {RewindRequest} [rewindRequest] + * @param {RewindRequest} [rewindRequest] * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1560,7 +1560,7 @@ export const RunsApiFactory = function (configuration?: Configuration, basePath? /** * Validates a workflow manifest without creating a run. * @summary Validate Workflow Manifest - * @param {RunManifest} runManifest + * @param {RunManifest} runManifest * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1571,7 +1571,7 @@ export const RunsApiFactory = function (configuration?: Configuration, basePath? * Starts a submitted run, queuing it for execution. Provide `resume=true` to resume an interrupted run from checkpoint. Returns 409 if the run is not startable. * @summary Start Run * @param {string} id Unique run identifier (ULID). - * @param {StartRunRequest} [startRunRequest] + * @param {StartRunRequest} [startRunRequest] * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1579,7 +1579,7 @@ export const RunsApiFactory = function (configuration?: Configuration, basePath? return localVarFp.startRun(id, startRunRequest, options).then((request) => request(axios, basePath)); }, /** - * Restores an archived run to its prior terminal status. Idempotent on runs that are terminal but not archived (returns the current status without emitting an event). Returns 409 if the run is active. + * Restores an archived run to its prior terminal status. Idempotent on runs that are terminal but not archived (returns the current status without emitting an event). Returns 409 if the run is active. * @summary Unarchive Run * @param {string} id Unique run identifier (ULID). * @param {*} [options] Override http request option. @@ -1606,7 +1606,7 @@ export const RunsApiFactory = function (configuration?: Configuration, basePath? */ export class RunsApi extends BaseAPI { /** - * Marks a terminal run (`succeeded`, `failed`, or `dead`) as `archived`. Archived runs are hidden from default listings and are read-only until unarchived. Idempotent on already-archived runs. Returns 409 if the run is not terminal. + * Marks a terminal run (`succeeded`, `failed`, or `dead`) as `archived`. Archived runs are hidden from default listings and are read-only until unarchived. Idempotent on already-archived runs. Returns 409 if the run is not terminal. * @summary Archive Run * @param {string} id Unique run identifier (ULID). * @param {*} [options] Override http request option. @@ -1641,7 +1641,7 @@ export class RunsApi extends BaseAPI { /** * Creates a new workflow run in `submitted` status from a self-contained manifest. * @summary Create Run - * @param {RunManifest} runManifest + * @param {RunManifest} runManifest * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1653,7 +1653,7 @@ export class RunsApi extends BaseAPI { * Creates a pull request for a completed run on GitHub and persists the record on the server. * @summary Create Run Pull Request * @param {string} id Unique run identifier (ULID). - * @param {CreateRunPullRequestRequest} createRunPullRequestRequest + * @param {CreateRunPullRequestRequest} createRunPullRequestRequest * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1674,10 +1674,10 @@ export class RunsApi extends BaseAPI { } /** - * Creates a new run from a checkpoint of the source run. The source run is left untouched. + * Creates a new run from a checkpoint of the source run. The source run is left untouched. * @summary Fork Run * @param {string} id Unique run identifier (ULID). - * @param {ForkRequest} [forkRequest] + * @param {ForkRequest} [forkRequest] * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1697,7 +1697,7 @@ export class RunsApi extends BaseAPI { } /** - * Returns checkpoint timeline entries from durable run-store checkpoints. Metadata branches are write-only archives and are not read by this endpoint. + * Returns checkpoint timeline entries from durable run-store checkpoints. Metadata branches are write-only archives and are not read by this endpoint. * @summary Get Run Timeline * @param {string} id Unique run identifier (ULID). * @param {*} [options] Override http request option. @@ -1736,7 +1736,7 @@ export class RunsApi extends BaseAPI { * Merges the stored pull request for a run on GitHub. * @summary Merge Run Pull Request * @param {string} id Unique run identifier (ULID). - * @param {MergeRunPullRequestRequest} mergeRunPullRequestRequest + * @param {MergeRunPullRequestRequest} mergeRunPullRequestRequest * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1758,7 +1758,7 @@ export class RunsApi extends BaseAPI { /** * Validates and renders a workflow manifest as SVG without creating a run. * @summary Render Workflow Graph - * @param {RenderWorkflowGraphRequest} renderWorkflowGraphRequest + * @param {RenderWorkflowGraphRequest} renderWorkflowGraphRequest * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1811,10 +1811,10 @@ export class RunsApi extends BaseAPI { } /** - * Creates a new run from an earlier checkpoint of a terminal source run, archives the source run, and records `run.superseded_by` on the source after archive succeeds. Returns 207 when the new run was created but the source archive step failed. + * Creates a new run from an earlier checkpoint of a terminal source run, archives the source run, and records `run.superseded_by` on the source after archive succeeds. Returns 207 when the new run was created but the source archive step failed. * @summary Rewind Run * @param {string} id Unique run identifier (ULID). - * @param {RewindRequest} [rewindRequest] + * @param {RewindRequest} [rewindRequest] * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1825,7 +1825,7 @@ export class RunsApi extends BaseAPI { /** * Validates a workflow manifest without creating a run. * @summary Validate Workflow Manifest - * @param {RunManifest} runManifest + * @param {RunManifest} runManifest * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1837,7 +1837,7 @@ export class RunsApi extends BaseAPI { * Starts a submitted run, queuing it for execution. Provide `resume=true` to resume an interrupted run from checkpoint. Returns 409 if the run is not startable. * @summary Start Run * @param {string} id Unique run identifier (ULID). - * @param {StartRunRequest} [startRunRequest] + * @param {StartRunRequest} [startRunRequest] * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -1846,7 +1846,7 @@ export class RunsApi extends BaseAPI { } /** - * Restores an archived run to its prior terminal status. Idempotent on runs that are terminal but not archived (returns the current status without emitting an event). Returns 409 if the run is active. + * Restores an archived run to its prior terminal status. Idempotent on runs that are terminal but not archived (returns the current status without emitting an event). Returns 409 if the run is active. * @summary Unarchive Run * @param {string} id Unique run identifier (ULID). * @param {*} [options] Override http request option. @@ -1867,3 +1867,4 @@ export class RunsApi extends BaseAPI { return RunsApiFp(this.configuration).unpauseRun(id, options).then((request) => request(this.axios, this.basePath)); } } + diff --git a/lib/packages/fabro-api-client/src/models/dirty-status.ts b/lib/packages/fabro-api-client/src/models/dirty-status.ts index 2a89a3c2a..ddb6079f9 100644 --- a/lib/packages/fabro-api-client/src/models/dirty-status.ts +++ b/lib/packages/fabro-api-client/src/models/dirty-status.ts @@ -5,7 +5,7 @@ * 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 @@ -22,3 +22,6 @@ export const DirtyStatus = { } as const; export type DirtyStatus = typeof DirtyStatus[keyof typeof DirtyStatus]; + + + diff --git a/lib/packages/fabro-api-client/src/models/fork-source-ref.ts b/lib/packages/fabro-api-client/src/models/fork-source-ref.ts index 8ee8e63f2..f22e0852f 100644 --- a/lib/packages/fabro-api-client/src/models/fork-source-ref.ts +++ b/lib/packages/fabro-api-client/src/models/fork-source-ref.ts @@ -5,7 +5,7 @@ * 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 @@ -21,3 +21,4 @@ export interface ForkSourceRef { 'source_run_id': string; 'checkpoint_sha': string; } + diff --git a/lib/packages/fabro-api-client/src/models/manifest-args.ts b/lib/packages/fabro-api-client/src/models/manifest-args.ts index 6543a1a60..f41dc6b5b 100644 --- a/lib/packages/fabro-api-client/src/models/manifest-args.ts +++ b/lib/packages/fabro-api-client/src/models/manifest-args.ts @@ -31,13 +31,9 @@ export interface ManifestArgs { 'no_retro'?: boolean; 'preserve_sandbox'?: boolean; /** - * Run against the submitted source directory directly. + * Override `run.sandbox.local.worktree_mode` (e.g. `never` for `--in-place`). */ - 'in_place'?: boolean; - /** - * Required with `in_place`; disables git checkpointing. - */ - 'allow_no_checkpoints'?: boolean; + 'worktree_mode'?: string; 'label'?: Array; } diff --git a/lib/packages/fabro-api-client/src/models/pre-run-git-context.ts b/lib/packages/fabro-api-client/src/models/pre-run-git-context.ts index aaddc93e7..82b9fcb6a 100644 --- a/lib/packages/fabro-api-client/src/models/pre-run-git-context.ts +++ b/lib/packages/fabro-api-client/src/models/pre-run-git-context.ts @@ -5,7 +5,7 @@ * 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 @@ -28,3 +28,6 @@ export interface PreRunGitContext { 'local_dirty': DirtyStatus; 'push_outcome': PreRunPushOutcome; } + + + diff --git a/lib/packages/fabro-api-client/src/models/pre-run-push-outcome.ts b/lib/packages/fabro-api-client/src/models/pre-run-push-outcome.ts index b55fad2cb..e9258cd21 100644 --- a/lib/packages/fabro-api-client/src/models/pre-run-push-outcome.ts +++ b/lib/packages/fabro-api-client/src/models/pre-run-push-outcome.ts @@ -5,7 +5,7 @@ * 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 @@ -34,3 +34,5 @@ export const PreRunPushOutcomeTypeEnum = { } as const; export type PreRunPushOutcomeTypeEnum = typeof PreRunPushOutcomeTypeEnum[keyof typeof PreRunPushOutcomeTypeEnum]; + + diff --git a/lib/packages/fabro-api-client/src/models/run-spec.ts b/lib/packages/fabro-api-client/src/models/run-spec.ts index da5d7c704..7470a7817 100644 --- a/lib/packages/fabro-api-client/src/models/run-spec.ts +++ b/lib/packages/fabro-api-client/src/models/run-spec.ts @@ -5,7 +5,7 @@ * 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 @@ -26,7 +26,7 @@ import type { PreRunGitContext } from './pre-run-git-context'; export interface RunSpec { 'run_id': string; /** - * The persisted dense `WorkflowSettings` snapshot used for a specific run. This matches the resolved run settings recorded at launch time. + * The persisted dense `WorkflowSettings` snapshot used for a specific run. This matches the resolved run settings recorded at launch time. */ 'settings': { [key: string]: any; }; 'graph': { [key: string]: any; }; @@ -42,3 +42,4 @@ export interface RunSpec { 'fork_source_ref'?: ForkSourceRef | null; 'checkpoints_disabled': boolean; } +