Open
Conversation
* Add plan CRUD commands (compile, create, list, get, delete) Phase 1 of the plan CLI: basic plan management against the API. Commands: signadot plan compile -f <prompt-file> [--tag <name>] signadot plan create -f <spec.yaml> [--set var=val] signadot plan list signadot plan get <plan-id> signadot plan delete <plan-id> All commands support -o json and -o yaml output formats. Compile supports -f - for stdin. Create supports --set template substitution via the existing LoadUnstructuredTemplate path. Compile --tag compiles then tags the plan via PutPlanTag. Depends on go-sdk with plan CRUD client (signadot/signadot#6825). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Add plan tag commands (list, get, apply, delete) (#307) * Add plan tag commands (list, get, apply, delete) Phase 2 of the plan CLI: named references to plans. Commands: signadot plan tag list signadot plan tag get <tag-name> signadot plan tag apply <tag-name> --plan <plan-id> signadot plan tag delete <tag-name> Alias: signadot plan t <subcommand> ApplyTag is exported from the plantag package so compile --tag can reuse it. The local plan/tag.go wrapper is removed. Also extracts print.FirstLine as a shared helper, and improves command help text for agent discoverability. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Add plan execution commands and plan run (#308) * Add plan execution commands and plan run Plan execution management (signadot plan x / plan execution): - get <exec-id>: show execution details with step status table - cancel <exec-id>: cancel a running execution - outputs <exec-id>: list output metadata (inline/artifact, size, ready) - get-output <exec-id> <name>: download output to stdout - get-output <exec-id> <step>/<name>: download step-level output Plan run (signadot plan run): - Creates execution, polls until terminal phase, prints results - Resolve by plan ID or --tag - --param key=value for execution parameters - --wait=false for fire-and-forget - --timeout for poll timeout - --output-dir to export all outputs on completion - Exit codes: 0=completed, 1=failed, 2=cancelled - Ctrl+C cancels the execution via API Also adds --tag flag to plan create (matching compile --tag). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Remove plan list and add tag history rendering - Remove plan list command — tags are now the sole discovery mechanism per the plan lifecycle redesign. - Remove printPlanTable and PlanList config (dead code after removal). - Render tag-to-plan mapping history in plan tag get detail view. History table shows PLAN ID, TAGGED, UNTAGGED columns. Only displayed when there are previous mappings (len > 1). - 409 on plan delete (tagged plans) passes through as a clear API error message — no special handling needed. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Add plan recompile command signadot plan recompile <plan-id> [--tag <name>] Recompiles a plan from its original prompt, producing a new plan. Supports --tag to tag the result in one command. Shows the Compiled From field linking back to the source plan. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Update go-sdk and adapt to param renames Update go-sdk to latest feature-plan branch which normalises swagger parameter names: - WithPlanExecutionID → WithExecutionID - WithStepOutputName → WithOutputName Also adds PlanExecutionLogs client for streaming log endpoints. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Add plan execution log streaming (#309) * Add plan execution log streaming Two ways to stream plan execution logs: signadot plan x logs <exec-id> [step-id] signadot logs --plan <exec-id> [--step <step-id>] Without a step ID, streams aggregated logs for all steps. With a step ID, streams stdout or stderr (--stream flag) for that step. Extracts ParseSSEStream from the logs package into internal/print/sse.go to avoid an import cycle between logs and planexec packages. Also adds --plan and --step flags to the existing signadot logs command (previously job-only), making --job and --plan mutually exclusive. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Add plan execution list command (#310) * Add plan execution list command signadot plan x list [--plan <id>] [--tag <name>] [--phase <phase>] Lists plan executions with pagination support. Filters: --plan: filter by plan ID --tag: filter by tag name (resolved server-side) --phase: filter by execution phase Also unexports ShowPlanLogs (unused cross-package after import cycle fix). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Add plan run --attach for structured event streaming (#311) * Add plan run --attach for structured event streaming Streams execution events (logs, outputs, result) to stdout in real-time. Text mode (default): time=12:08:18 type=log step=greet stream=stdout msg="step starting" time=12:08:23 type=output name=greeting value="hello world" time=12:08:23 type=result id=abc123 phase=completed JSON mode (-o json): {"time":"...","type":"log","step":"greet","stream":"stdout","msg":"step starting\n"} Pipe-friendly: plan run --attach | grep type=output stderr reserved for CLI messages (Created execution...). Also fixes non-attach mode to write failure/cancellation details to stderr so stdout stays clean, and rejects -o yaml with --attach. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Plan outputs list fixes (#312) - Show both plan-level and step-level outputs in plan x outputs (previously only plan-level, which was often empty) - Add SCOPE column (plan/step) and rename TYPE to STORAGE - Compute inline output size from value length - Show READY as true for inline outputs (always available) - Deduplicate: step outputs already shown as plan outputs are skipped Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
3 tasks
The getAllOutputs() function only iterated over plan-level outputs (resp.Payload.Status.Outputs), causing "No outputs." when only step-scoped outputs existed. Now also collects outputs from resp.Payload.Status.Steps[*].Outputs, downloads them via the GetStepOutput API, and writes them into <dir>/<stepID>/<name> subdirectories to avoid name collisions. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds the full
signadot planCLI command surface — plan lifecycle management, tagging, execution control, log streaming, and real-time event attachment.This PR consolidates the following stacked branches (all squash-merged into
feature-plan):feature-plan-crudcompile,create,list,get,delete,recompilefeature-plan-tagstag list,tag get,tag apply,tag deletefeature-plan-exec-crudx get,x cancel,x outputs) andplan runfeature-plan-logsx logsandlogs --planfeature-plan-exec-list--plan,--tag,--phase) and paginationfeature-plan-run-attachplan run --attachfor structured SSE event streaming (text + JSON modes)feature-plan-outputs-fixesNew commands
Plan management (
signadot plan)plan compile -f <prompt-file> [--tag <name>]— compile a prompt into a planplan create -f <spec.yaml> [--set var=val]— create a plan from specplan list— list plansplan get <plan-id>— get plan detailsplan delete <plan-id>— delete a planplan recompile <plan-id>— recompile an existing planPlan tags (
signadot plan tag)plan tag list— list all tagsplan tag get <name>— get tag detailsplan tag apply -f <spec>— create/update a tagplan tag delete <name>— delete a tagPlan executions (
signadot plan x)plan x get <exec-id>— execution details with step statusplan x cancel <exec-id>— cancel a running executionplan x list [--plan <id>] [--tag <name>] [--phase <phase>]— list executions with filtersplan x outputs <exec-id>— list outputs (plan-level + step-level) with SCOPE columnplan x logs <exec-id> [step-id]— stream execution logs via SSEPlan run (
signadot plan run)plan run -f <spec> [--set var=val]— create + execute a planplan run --attach— stream execution events in real-time (text/JSON modes)Extended existing commands
signadot logs --plan <exec-id> [--step <step-id>]— plan log streaming via the existing logs commandChanged files
internal/command/plan/,internal/command/planexec/,internal/command/plantag/internal/config/plan.go,planexec.go,planrun.go,plantag.gointernal/print/attach.go,sse.go,text.gointernal/command/command.go(register plan commands),internal/command/logs/command.go(add--planflag)Dependencies