feat(flows): add YAML flow format, flow-runner, and /agent/v1/flow endpoint
- ops-agent/src/lib/flow-runner.ts: loads YAML flows, validates all steps
against the command whitelist, executes sequentially; supports dry_run
(emits WOULD RUN lines) and on_failure: abort|continue per step
- ops-agent/src/routes/flow.ts: POST /agent/v1/flow { flow_key, dry_run }
streams step_start/stdout/stderr/step_done/done SSE events
- ops-agent/src/index.ts: register flow route, add FLOWS_PATH env var
- ops-agent/flows.example/: three flow definitions — update_scrum4me_web,
update_mcp_worker, update_caddy_config; deploy to /etc/ops-agent/flows/
- ops-agent/commands.yml.example: add curl_smoke_scrum4me_web and
docker_compose_ps_worker smoke-test commands
- app/api/flows/run/route.ts: Next.js proxy — creates FlowRun/FlowStep
DB records per step, forwards SSE stream to browser
- hooks/useFlowRun.ts: add startFlow(flowKey, dryRun) method; handle
step_start events to display step headers in the terminal
- components/StreamingTerminal.tsx: add 'info' line type (sky-400) for
step headers
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
3781fce1e2
commit
bdc24b57ba
10 changed files with 552 additions and 14 deletions
|
|
@ -3,7 +3,7 @@
|
|||
import { useEffect, useRef } from 'react'
|
||||
|
||||
export type TerminalLine = {
|
||||
type: 'stdout' | 'stderr'
|
||||
type: 'stdout' | 'stderr' | 'info'
|
||||
text: string
|
||||
}
|
||||
|
||||
|
|
@ -75,7 +75,11 @@ export default function StreamingTerminal({ lines, status, error, className = ''
|
|||
key={i}
|
||||
className={
|
||||
'whitespace-pre-wrap break-all leading-5 ' +
|
||||
(line.type === 'stderr' ? 'text-red-400' : 'text-zinc-100')
|
||||
(line.type === 'stderr'
|
||||
? 'text-red-400'
|
||||
: line.type === 'info'
|
||||
? 'text-sky-400'
|
||||
: 'text-zinc-100')
|
||||
}
|
||||
>
|
||||
{line.text}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue