Saltar al contenido principal

Espacios de trabajo

Un binding de espacio de trabajo es un asiento de runtime para la terna aplicación externa × agente externo × usuario externo actual. Es lo que respalda las capacidades que necesitan estado duradero: una biblioteca de contexto con archivos, scripts, un contenedor.

ensureWorkspace() es opcional. Las integraciones de solo chat nunca lo necesitan.

Materializar un binding

const workspace = await client.ensureWorkspace({
requestedCapabilities: ['files'],
clientWorkspaceKey: 'checkout-support-seat',
});

console.log(workspace.workspaceBindingRef, workspace.capabilitiesEnabled);

clientWorkspaceKey es una clave de idempotencia. Reutiliza el mismo valor para el mismo asiento lógico y recibirás el mismo binding con created: false, en lugar de acumular asientos.

EnsureWorkspaceResult devuelve workspaceBindingRef, un workspaceRef opcional, status, created, capabilitiesEnabled y policy. Ten en cuenta que capabilitiesEnabled es lo que realmente se te concedió: puede ser más restrictivo que requestedCapabilities.

La llamada es lógica de cliente HTTP sin interfaz y devuelve solo refs públicas. Los IDs internos de workspace, runtime y almacenamiento, los nombres de bucket y los IDs de tool binding de AgentShelf nunca forman parte de la respuesta.

Esperar al runtime

Un binding puede existir antes de que su runtime esté listo. Dos métodos cubren esto:

const status = await client.getWorkspaceRuntimeStatus();

if (!status.ready) {
await client.waitForWorkspaceRuntime({
timeoutMs: 60_000,
pollIntervalMs: 2_000,
});
}

WorkspaceRuntimeStatus informa de lifecycleState, status y los booleanos sobre los que conviene ramificar — ready, provisioning, failed, canRunScripts, hasContainer — más un statusMessage opcional que puedes mostrar mientras el usuario espera.

Ambos aceptan un AbortSignal, así que un usuario que navega fuera puede cancelar el sondeo:

const controller = new AbortController();
await client.waitForWorkspaceRuntime({ signal: controller.signal });

waitForWorkspaceRuntime rechaza con el código de error timeout si el runtime no está listo a tiempo, y con aborted si se dispara la señal. Trata failed: true como terminal: volver a sondear no lo recuperará.

Cuándo necesitas uno

Escenario¿Espacio de trabajo?
Chat, streaming, artefactosNo
Operaciones de archivos en la biblioteca de contexto
Cualquier cosa que requiera canRunScripts

Las operaciones de archivos sobre la biblioteca de contexto requieren un binding materializado y soporte en la política — ver Archivos y artefactos.