# C# workspace builder API

Source: https://libtmux.org/en/csharp/latest/workspace/reference/

> Internal reference for the C# workspace builder and configuration APIs.

The [`LibTmux.Workspace`](<https://libtmux.org/en/csharp/latest/reference/#LibTmux.Workspace>) namespace provides configuration objects and a builder
that uses a caller-supplied LibTmux [`Server`](<https://libtmux.org/en/csharp/latest/reference/libtmux-server/>).

## Configuration

[`WorkspaceFile`](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspacefile/) parses
YAML and holds the session description. [`WorkspaceWindow`](<https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspacewindow/>) and [`WorkspacePane`](<https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspacepane/>)
hold nested configuration. [`WorkspaceFormatException`](<https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspaceformatexception/>) identifies unsupported
or invalid configuration.

## Builder options

[`WorkspaceBuilder`](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspacebuilder/) accepts the server
to use. [`PlanAsync`](<https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspacebuilder-planasync/>) validates the declaration and observes that endpoint;
its returned [`WorkspacePlan`](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspaceplan/) lists the
actions to review before [`ApplyAsync`](<https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspacebuilder-applyasync/>) executes them. Enumerating those actions
performs no I/O. Application rechecks the observed daemon and session.

[`WorkspacePlanOptions`](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspaceplanoptions/) controls
existing-session conflicts, readiness, host scripts, and cleanup. The defaults
refuse an existing session and send pane input immediately. [`BuildAsync`](<https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspacebuilder-buildasync/>)
combines planning and application with those defaults.

Choose [`WorkspaceReadiness.Cooperative`](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspacereadiness/)
when pane startup can signal its assigned channel. Configure a positive
`ReadinessTimeout`; a timeout prevents command delivery to that pane.
[Topics](https://libtmux.org/en/csharp/latest/workspace/topics/) explains the startup contract and its limits.

## Results and failures

[`WorkspaceResult`](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspaceresult/)
contains the session, created windows, rejected final layouts, and action
journals. Reusing an existing session creates no windows. A rejected final
layout does not discard its window.

[`WorkspaceBuildException`](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspacebuildexception/)
keeps a `PartialResult` when state could be materialized before failure. It
can be null when no such result could be read. `Journal` records action
outcomes; `CompensationJournal` records attempted cleanup. Inspect live tmux
state before retrying; a missing result does not prove that no command reached
tmux.

Cancellation during application raises
[`WorkspaceOperationCanceledException`](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspaceoperationcanceledexception/)
with the caller's token, partial state, and journals. Cancellation does not
imply rollback. `CompensateOnFailure` requests bounded cleanup only of
resources proven to belong to that application.

[Result contract](https://github.com/libtmux/libtmux-dotnet/blob/ec8b6ab2a4f65e23664f43fba538ba200d4ae8bc/src/LibTmux.Workspace/WorkspaceResult.cs); [Failure contract](https://github.com/libtmux/libtmux-dotnet/blob/ec8b6ab2a4f65e23664f43fba538ba200d4ae8bc/src/LibTmux.Workspace/WorkspaceBuildException.cs).

## API declarations

- [LibTmux.Workspace.WorkspaceAction](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspaceaction/)
- [LibTmux.Workspace.WorkspaceActionKind](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspaceactionkind/)
- [LibTmux.Workspace.WorkspaceActionOutcome](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspaceactionoutcome/)
- [LibTmux.Workspace.WorkspaceActionState](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspaceactionstate/)
- [LibTmux.Workspace.WorkspaceBuilder](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspacebuilder/)
- [LibTmux.Workspace.WorkspaceBuildException](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspacebuildexception/)
- [LibTmux.Workspace.WorkspaceCommand](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspacecommand/)
- [LibTmux.Workspace.WorkspaceExistingSession](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspaceexistingsession/)
- [LibTmux.Workspace.WorkspaceFile](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspacefile/)
- [LibTmux.Workspace.WorkspaceFormatException](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspaceformatexception/)
- [LibTmux.Workspace.WorkspaceHostCommand](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspacehostcommand/)
- [LibTmux.Workspace.WorkspaceHostResult](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspacehostresult/)
- [LibTmux.Workspace.WorkspaceOperationCanceledException](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspaceoperationcanceledexception/)
- [LibTmux.Workspace.WorkspacePane](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspacepane/)
- [LibTmux.Workspace.WorkspacePlan](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspaceplan/)
- [LibTmux.Workspace.WorkspacePlanOptions](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspaceplanoptions/)
- [LibTmux.Workspace.WorkspaceReadiness](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspacereadiness/)
- [LibTmux.Workspace.WorkspaceResult](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspaceresult/)
- [LibTmux.Workspace.WorkspaceServerStartup](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspaceserverstartup/)
- [LibTmux.Workspace.WorkspaceWindow](https://libtmux.org/en/csharp/latest/workspace/reference/libtmux-workspace-workspacewindow/)
