From bb8583d504daeca208ea59b3e28e305a891158db Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 5 Jul 2026 16:01:53 +0000 Subject: [PATCH 1/4] Initial plan From 92c6e89243286ee32af51d331b7ab71f7c5cdb9f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 5 Jul 2026 16:36:07 +0000 Subject: [PATCH 2/4] fix: replace raw fmt.Fprintf sub-step bullets with console.FormatListItemStderr in trial_confirmation.go Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- pkg/cli/trial_confirmation.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/cli/trial_confirmation.go b/pkg/cli/trial_confirmation.go index 8d003944efc..999eab907a3 100644 --- a/pkg/cli/trial_confirmation.go +++ b/pkg/cli/trial_confirmation.go @@ -179,8 +179,8 @@ func showTrialConfirmation(opts trialConfirmationOptions) error { workflowName := opts.parsedSpecs[0].WorkflowName if opts.repeatCount > 0 && opts.autoMergePRs { fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. For each of %d executions:\n"), stepNum, opts.repeatCount+1) - fmt.Fprintf(os.Stderr, " a. Execute %s\n", workflowName) - fmt.Fprintf(os.Stderr, " b. Auto-merge any pull requests created during execution\n") + fmt.Fprintln(os.Stderr, console.FormatListItemStderr(fmt.Sprintf("a. Execute %s", workflowName))) + fmt.Fprintln(os.Stderr, console.FormatListItemStderr("b. Auto-merge any pull requests created during execution")) } else if opts.repeatCount > 0 { fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. Execute %s %d times\n"), stepNum, workflowName, opts.repeatCount+1) } else if opts.autoMergePRs { @@ -196,8 +196,8 @@ func showTrialConfirmation(opts trialConfirmationOptions) error { if opts.repeatCount > 0 && opts.autoMergePRs { fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. For each of %d executions:\n"), stepNum, opts.repeatCount+1) - fmt.Fprintf(os.Stderr, " a. Execute: %s\n", workflowList) - fmt.Fprintf(os.Stderr, " b. Auto-merge any pull requests created during execution\n") + fmt.Fprintln(os.Stderr, console.FormatListItemStderr(fmt.Sprintf("a. Execute: %s", workflowList))) + fmt.Fprintln(os.Stderr, console.FormatListItemStderr("b. Auto-merge any pull requests created during execution")) } else if opts.repeatCount > 0 { fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. Execute %d times: %s\n"), stepNum, opts.repeatCount+1, workflowList) } else if opts.autoMergePRs { From 936f59c53b1b5e2fd6cf2de3b9c2f0fcc21bd955 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 5 Jul 2026 18:18:02 +0000 Subject: [PATCH 3/4] fix stderr-aware trial confirmation steps Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com> --- pkg/cli/trial_confirmation.go | 60 +++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/pkg/cli/trial_confirmation.go b/pkg/cli/trial_confirmation.go index 999eab907a3..6c7dc661346 100644 --- a/pkg/cli/trial_confirmation.go +++ b/pkg/cli/trial_confirmation.go @@ -14,6 +14,12 @@ import ( var trialConfirmationLog = logger.New("cli:trial_confirmation") +const trialNestedListIndent = " " + +func formatTrialNestedListItem(item string) string { + return trialNestedListIndent + console.FormatListItemStderr(item) +} + // trialConfirmationOptions holds parameters for showTrialConfirmation. type trialConfirmationOptions struct { parsedSpecs []*WorkflowSpec @@ -132,45 +138,45 @@ func showTrialConfirmation(opts trialConfirmationOptions) error { // Step 1: Repository creation/reuse stepNum := 1 if hostRepoExists && opts.forceDeleteHostRepo { - fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. Delete and recreate host repository\n"), stepNum) + fmt.Fprintf(os.Stderr, console.FormatInfoMessageStderr(" %d. Delete and recreate host repository\n"), stepNum) } else if hostRepoExists { - fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. Reuse existing host repository\n"), stepNum) + fmt.Fprintf(os.Stderr, console.FormatInfoMessageStderr(" %d. Reuse existing host repository\n"), stepNum) } else { - fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. Create a private host repository\n"), stepNum) + fmt.Fprintf(os.Stderr, console.FormatInfoMessageStderr(" %d. Create a private host repository\n"), stepNum) } stepNum++ // Step 2: Clone contents (only in clone-repo mode) if opts.cloneRepoSlug != "" { if hostRepoExists && !opts.forceDeleteHostRepo { - fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. Force push contents from %s (overwriting existing content)\n"), stepNum, opts.cloneRepoSlug) + fmt.Fprintf(os.Stderr, console.FormatInfoMessageStderr(" %d. Force push contents from %s (overwriting existing content)\n"), stepNum, opts.cloneRepoSlug) } else { - fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. Clone contents from %s\n"), stepNum, opts.cloneRepoSlug) + fmt.Fprintf(os.Stderr, console.FormatInfoMessageStderr(" %d. Clone contents from %s\n"), stepNum, opts.cloneRepoSlug) } stepNum++ // Show that workflows will be disabled if len(opts.parsedSpecs) == 1 { - fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. Disable all workflows in cloned repository except %s\n"), stepNum, opts.parsedSpecs[0].WorkflowName) + fmt.Fprintf(os.Stderr, console.FormatInfoMessageStderr(" %d. Disable all workflows in cloned repository except %s\n"), stepNum, opts.parsedSpecs[0].WorkflowName) } else { workflowNames := sliceutil.Map(opts.parsedSpecs, func(spec *WorkflowSpec) string { return spec.WorkflowName }) - fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. Disable all workflows in cloned repository except: %s\n"), stepNum, strings.Join(workflowNames, ", ")) + fmt.Fprintf(os.Stderr, console.FormatInfoMessageStderr(" %d. Disable all workflows in cloned repository except: %s\n"), stepNum, strings.Join(workflowNames, ", ")) } stepNum++ } // Step 3/2: Install and compile workflows if len(opts.parsedSpecs) == 1 { - fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. Install and compile %s\n"), stepNum, opts.parsedSpecs[0].WorkflowName) + fmt.Fprintf(os.Stderr, console.FormatInfoMessageStderr(" %d. Install and compile %s\n"), stepNum, opts.parsedSpecs[0].WorkflowName) } else { workflowNames := sliceutil.Map(opts.parsedSpecs, func(spec *WorkflowSpec) string { return spec.WorkflowName }) - fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. Install and compile: %s\n"), stepNum, strings.Join(workflowNames, ", ")) + fmt.Fprintf(os.Stderr, console.FormatInfoMessageStderr(" %d. Install and compile: %s\n"), stepNum, strings.Join(workflowNames, ", ")) } stepNum++ // Step: Configure secrets (only when engine override is specified) if opts.engineOverride != "" { - fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. Ensure %s API key secret is configured\n"), stepNum, opts.engineOverride) + fmt.Fprintf(os.Stderr, console.FormatInfoMessageStderr(" %d. Ensure %s API key secret is configured\n"), stepNum, opts.engineOverride) stepNum++ } @@ -178,47 +184,47 @@ func showTrialConfirmation(opts trialConfirmationOptions) error { if len(opts.parsedSpecs) == 1 { workflowName := opts.parsedSpecs[0].WorkflowName if opts.repeatCount > 0 && opts.autoMergePRs { - fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. For each of %d executions:\n"), stepNum, opts.repeatCount+1) - fmt.Fprintln(os.Stderr, console.FormatListItemStderr(fmt.Sprintf("a. Execute %s", workflowName))) - fmt.Fprintln(os.Stderr, console.FormatListItemStderr("b. Auto-merge any pull requests created during execution")) + fmt.Fprintf(os.Stderr, console.FormatInfoMessageStderr(" %d. For each of %d executions:\n"), stepNum, opts.repeatCount+1) + fmt.Fprintln(os.Stderr, formatTrialNestedListItem("Execute "+workflowName)) + fmt.Fprintln(os.Stderr, formatTrialNestedListItem("Auto-merge any pull requests created during execution")) } else if opts.repeatCount > 0 { - fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. Execute %s %d times\n"), stepNum, workflowName, opts.repeatCount+1) + fmt.Fprintf(os.Stderr, console.FormatInfoMessageStderr(" %d. Execute %s %d times\n"), stepNum, workflowName, opts.repeatCount+1) } else if opts.autoMergePRs { - fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. Execute %s\n"), stepNum, workflowName) + fmt.Fprintf(os.Stderr, console.FormatInfoMessageStderr(" %d. Execute %s\n"), stepNum, workflowName) stepNum++ - fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. Auto-merge any pull requests created during execution\n"), stepNum) + fmt.Fprintf(os.Stderr, console.FormatInfoMessageStderr(" %d. Auto-merge any pull requests created during execution\n"), stepNum) } else { - fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. Execute %s\n"), stepNum, workflowName) + fmt.Fprintf(os.Stderr, console.FormatInfoMessageStderr(" %d. Execute %s\n"), stepNum, workflowName) } } else { workflowNames := sliceutil.Map(opts.parsedSpecs, func(spec *WorkflowSpec) string { return spec.WorkflowName }) workflowList := strings.Join(workflowNames, ", ") if opts.repeatCount > 0 && opts.autoMergePRs { - fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. For each of %d executions:\n"), stepNum, opts.repeatCount+1) - fmt.Fprintln(os.Stderr, console.FormatListItemStderr(fmt.Sprintf("a. Execute: %s", workflowList))) - fmt.Fprintln(os.Stderr, console.FormatListItemStderr("b. Auto-merge any pull requests created during execution")) + fmt.Fprintf(os.Stderr, console.FormatInfoMessageStderr(" %d. For each of %d executions:\n"), stepNum, opts.repeatCount+1) + fmt.Fprintln(os.Stderr, formatTrialNestedListItem("Execute: "+workflowList)) + fmt.Fprintln(os.Stderr, formatTrialNestedListItem("Auto-merge any pull requests created during execution")) } else if opts.repeatCount > 0 { - fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. Execute %d times: %s\n"), stepNum, opts.repeatCount+1, workflowList) + fmt.Fprintf(os.Stderr, console.FormatInfoMessageStderr(" %d. Execute %d times: %s\n"), stepNum, opts.repeatCount+1, workflowList) } else if opts.autoMergePRs { - fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. Execute: %s\n"), stepNum, workflowList) + fmt.Fprintf(os.Stderr, console.FormatInfoMessageStderr(" %d. Execute: %s\n"), stepNum, workflowList) stepNum++ - fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. Auto-merge any pull requests created during execution\n"), stepNum) + fmt.Fprintf(os.Stderr, console.FormatInfoMessageStderr(" %d. Auto-merge any pull requests created during execution\n"), stepNum) } else { - fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. Execute: %s\n"), stepNum, workflowList) + fmt.Fprintf(os.Stderr, console.FormatInfoMessageStderr(" %d. Execute: %s\n"), stepNum, workflowList) } } stepNum++ // Final step: Delete/preserve repository if opts.deleteHostRepo { - fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. Delete the host repository\n"), stepNum) + fmt.Fprintf(os.Stderr, console.FormatInfoMessageStderr(" %d. Delete the host repository\n"), stepNum) } else { - fmt.Fprintf(os.Stderr, console.FormatInfoMessage(" %d. Preserve the host repository for inspection\n"), stepNum) + fmt.Fprintf(os.Stderr, console.FormatInfoMessageStderr(" %d. Preserve the host repository for inspection\n"), stepNum) } fmt.Fprintln(os.Stderr, "") - fmt.Fprintln(os.Stderr, console.FormatInfoMessage("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")) + fmt.Fprintln(os.Stderr, console.FormatInfoMessageStderr("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")) fmt.Fprintln(os.Stderr, "") // Ask for confirmation using console helper From be299926576ef05ff054bdb10506b8f52a46e2ac Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 5 Jul 2026 19:12:45 +0000 Subject: [PATCH 4/4] Plan PR finish-up Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com> --- .github/skills/agentic-workflows/SKILL.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/skills/agentic-workflows/SKILL.md b/.github/skills/agentic-workflows/SKILL.md index a7cbb15f3af..dc68e06a275 100644 --- a/.github/skills/agentic-workflows/SKILL.md +++ b/.github/skills/agentic-workflows/SKILL.md @@ -23,6 +23,7 @@ Load these files from `github/gh-aw` (they are not available locally). - `.github/aw/charts.md` - `.github/aw/cli-commands.md` - `.github/aw/context.md` +- `.github/aw/create-agentic-workflow-trigger-details.md` - `.github/aw/create-agentic-workflow.md` - `.github/aw/create-shared-agentic-workflow.md` - `.github/aw/debug-agentic-workflow.md`