feat: Add agent preview integration with auto-teardown and simplified commands
- Add agentId label to preview containers (cw.agent-id) for tracking - Add startForAgent/stopByAgentId methods to PreviewManager - Auto-teardown: previews torn down on agent:stopped event - Conditional preview prompt injection for execute/refine/discuss agents - Agent-simplified CLI: cw preview start/stop --agent <id> - cw preview setup command with --auto mode for guided config generation - hasPreviewConfig hint on cw project register output - New tRPC procedures: startPreviewForAgent, stopPreviewByAgent
This commit is contained in:
@@ -268,6 +268,7 @@ All preview containers get `cw.*` labels for metadata retrieval:
|
||||
| `cw.port` | Gateway port |
|
||||
| `cw.preview-id` | Nanoid for this deployment |
|
||||
| `cw.mode` | `"preview"` or `"dev"` |
|
||||
| `cw.agent-id` | Agent ID (optional, set when started via `--agent`) |
|
||||
|
||||
### Compose Project Naming
|
||||
|
||||
@@ -321,24 +322,62 @@ See [Setting Up Preview Deployments](#setting-up-preview-deployments-for-a-proje
|
||||
3. Branch is derived from `phaseBranchName(initiative.branch, phase.name)`
|
||||
4. Errors are caught and logged (best-effort, never blocks the phase transition)
|
||||
|
||||
## Agent Integration
|
||||
|
||||
Agents can spin up and tear down preview deployments using simplified commands that only require their agent ID — the server resolves initiative, project, branch, and mode automatically.
|
||||
|
||||
### Agent-Simplified Commands
|
||||
|
||||
When an agent has a `<preview_deployments>` section in its prompt (injected automatically if the initiative's project has `.cw-preview.yml`), it can use:
|
||||
|
||||
```
|
||||
cw preview start --agent <agentId> # Server resolves everything, starts dev mode
|
||||
cw preview stop --agent <agentId> # Stops all previews for this agent
|
||||
```
|
||||
|
||||
### Prompt Injection
|
||||
|
||||
Preview instructions are automatically appended to agent prompts when all conditions are met:
|
||||
1. Agent mode is `execute`, `refine`, or `discuss`
|
||||
2. Agent has an `initiativeId`
|
||||
3. Initiative has exactly one linked project
|
||||
4. Project clone directory contains `.cw-preview.yml`
|
||||
|
||||
The injected `<preview_deployments>` block includes prefilled `cw preview start/stop --agent <agentId>` commands.
|
||||
|
||||
### Agent ID Label
|
||||
|
||||
Previews started with `--agent` receive a `cw.agent-id` Docker container label. This enables:
|
||||
- **Auto-teardown**: When an agent stops (`agent:stopped` event), all previews labeled with its ID are automatically torn down (best-effort).
|
||||
- **Agent-scoped stop**: `cw preview stop --agent <id>` finds and stops previews by label.
|
||||
|
||||
### Setup Command
|
||||
|
||||
`cw preview setup` prints inline setup instructions for `.cw-preview.yml`. With `--auto --project <id>`, it creates an initiative and spawns a refine agent to analyze the project and generate the config file.
|
||||
|
||||
## tRPC Procedures
|
||||
|
||||
| Procedure | Type | Input |
|
||||
|-----------|------|-------|
|
||||
| `startPreview` | mutation | `{initiativeId, phaseId?, projectId, branch, mode?, worktreePath?}` |
|
||||
| `startPreview` | mutation | `{initiativeId, phaseId?, projectId, branch, mode?, worktreePath?, agentId?}` |
|
||||
| `startPreviewForAgent` | mutation | `{agentId}` |
|
||||
| `stopPreview` | mutation | `{previewId}` |
|
||||
| `stopPreviewByAgent` | mutation | `{agentId}` |
|
||||
| `listPreviews` | query | `{initiativeId?}` |
|
||||
| `getPreviewStatus` | query | `{previewId}` |
|
||||
|
||||
`mode` defaults to `'preview'`. Set to `'dev'` with a `worktreePath` for dev mode.
|
||||
`mode` defaults to `'preview'`. Set to `'dev'` with a `worktreePath` for dev mode. `startPreviewForAgent` always uses dev mode.
|
||||
|
||||
## CLI Commands
|
||||
|
||||
```
|
||||
cw preview start --initiative <id> --project <id> --branch <branch> [--phase <id>] [--mode preview|dev]
|
||||
cw preview start --initiative <id> --project <id> --branch <branch> [--phase <id>]
|
||||
cw preview start --agent <id>
|
||||
cw preview stop <previewId>
|
||||
cw preview stop --agent <id>
|
||||
cw preview list [--initiative <id>]
|
||||
cw preview status <previewId>
|
||||
cw preview setup [--auto --project <id> [--provider <name>]]
|
||||
```
|
||||
|
||||
## Frontend
|
||||
|
||||
Reference in New Issue
Block a user