From 8268869a758b79d348282c41b54e7f166b188c93 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 15 May 2026 21:16:23 +0000
Subject: [PATCH 01/15] Initial plan
From 979bea79ec3a5349b658058db908b6a5398da8cc Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 15 May 2026 21:28:03 +0000
Subject: [PATCH 02/15] Make centralized slash-command dispatch inputs optional
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
---
.../slash_command_centralized_compile_test.go | 48 +++++++++++++++++++
pkg/workflow/tools.go | 21 ++++++++
2 files changed, 69 insertions(+)
diff --git a/pkg/workflow/slash_command_centralized_compile_test.go b/pkg/workflow/slash_command_centralized_compile_test.go
index a442854bc2e..d3002d3a5ca 100644
--- a/pkg/workflow/slash_command_centralized_compile_test.go
+++ b/pkg/workflow/slash_command_centralized_compile_test.go
@@ -9,6 +9,7 @@ import (
"github.com/github/gh-aw/pkg/stringutil"
"github.com/github/gh-aw/pkg/testutil"
+ "github.com/goccy/go-yaml"
"github.com/stretchr/testify/require"
)
@@ -84,3 +85,50 @@ tools:
require.Contains(t, compiled, "fromJSON(github.event.inputs.aw_context || '{}').trigger_label == 'triage'")
require.Contains(t, compiled, "fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issues'")
}
+
+func TestCompileWorkflow_SlashCommandCentralizedMakesDispatchInputsOptional(t *testing.T) {
+ tmpDir := testutil.TempDir(t, "workflow-centralized-slash-dispatch-inputs-test")
+
+ markdownPath := filepath.Join(tmpDir, "scout.md")
+ content := `---
+on:
+ slash_command:
+ name: scout
+ strategy: centralized
+ workflow_dispatch:
+ inputs:
+ topic:
+ description: "Research topic"
+ required: true
+ type: string
+tools:
+ github:
+ allowed: [list_issues]
+---
+
+# Scout
+`
+ require.NoError(t, os.WriteFile(markdownPath, []byte(content), 0644))
+
+ compiler := NewCompiler()
+ require.NoError(t, compiler.CompileWorkflow(markdownPath))
+
+ lockPath := stringutil.MarkdownToLockFile(markdownPath)
+ lockContent, err := os.ReadFile(lockPath)
+ require.NoError(t, err)
+
+ var workflow map[string]any
+ require.NoError(t, yaml.Unmarshal(lockContent, &workflow))
+
+ onMap, ok := workflow["on"].(map[string]any)
+ require.True(t, ok)
+ workflowDispatch, ok := onMap["workflow_dispatch"].(map[string]any)
+ require.True(t, ok)
+ inputs, ok := workflowDispatch["inputs"].(map[string]any)
+ require.True(t, ok)
+ topic, ok := inputs["topic"].(map[string]any)
+ require.True(t, ok)
+ required, ok := topic["required"].(bool)
+ require.True(t, ok)
+ require.False(t, required)
+}
diff --git a/pkg/workflow/tools.go b/pkg/workflow/tools.go
index 58f79350a23..9bc7cf21ab4 100644
--- a/pkg/workflow/tools.go
+++ b/pkg/workflow/tools.go
@@ -91,6 +91,7 @@ func (c *Compiler) applyDefaults(data *WorkflowData, markdownPath string) error
if len(data.CommandOtherEvents) > 0 {
maps.Copy(commandEventsMap, data.CommandOtherEvents)
}
+ setWorkflowDispatchInputsOptional(commandEventsMap)
if _, hasWorkflowDispatch := commandEventsMap["workflow_dispatch"]; !hasWorkflowDispatch {
commandEventsMap["workflow_dispatch"] = nil
}
@@ -420,6 +421,26 @@ func ensureWorkflowDispatchItemNumberInput(eventsMap map[string]any) bool {
return true
}
+func setWorkflowDispatchInputsOptional(eventsMap map[string]any) {
+ dispatchMap, ok := eventsMap["workflow_dispatch"].(map[string]any)
+ if !ok {
+ return
+ }
+
+ inputsMap, ok := dispatchMap["inputs"].(map[string]any)
+ if !ok {
+ return
+ }
+
+ for _, inputDef := range inputsMap {
+ inputDefMap, ok := inputDef.(map[string]any)
+ if !ok {
+ continue
+ }
+ inputDefMap["required"] = false
+ }
+}
+
// mergeToolsAndMCPServers merges tools, mcp-servers, and included tools
func (c *Compiler) mergeToolsAndMCPServers(topTools, mcpServers map[string]any, includedTools string) (map[string]any, error) {
toolsLog.Printf("Merging tools and MCP servers: topTools=%d, mcpServers=%d", len(topTools), len(mcpServers))
From fb65a7c9aa6bd6f0adf350b753bf0ace6b8d61ec Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 15 May 2026 21:29:06 +0000
Subject: [PATCH 03/15] Address review feedback on slash-command optional
inputs change
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
---
pkg/workflow/slash_command_centralized_compile_test.go | 10 +++++-----
pkg/workflow/tools.go | 3 +++
2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/pkg/workflow/slash_command_centralized_compile_test.go b/pkg/workflow/slash_command_centralized_compile_test.go
index d3002d3a5ca..6107b328114 100644
--- a/pkg/workflow/slash_command_centralized_compile_test.go
+++ b/pkg/workflow/slash_command_centralized_compile_test.go
@@ -121,14 +121,14 @@ tools:
require.NoError(t, yaml.Unmarshal(lockContent, &workflow))
onMap, ok := workflow["on"].(map[string]any)
- require.True(t, ok)
+ require.True(t, ok, "expected 'on' to be a map")
workflowDispatch, ok := onMap["workflow_dispatch"].(map[string]any)
- require.True(t, ok)
+ require.True(t, ok, "expected 'on.workflow_dispatch' to be a map")
inputs, ok := workflowDispatch["inputs"].(map[string]any)
- require.True(t, ok)
+ require.True(t, ok, "expected 'on.workflow_dispatch.inputs' to be a map")
topic, ok := inputs["topic"].(map[string]any)
- require.True(t, ok)
+ require.True(t, ok, "expected topic input to be present in workflow_dispatch inputs")
required, ok := topic["required"].(bool)
- require.True(t, ok)
+ require.True(t, ok, "expected topic.required to be a boolean")
require.False(t, required)
}
diff --git a/pkg/workflow/tools.go b/pkg/workflow/tools.go
index 9bc7cf21ab4..52b2cfe1396 100644
--- a/pkg/workflow/tools.go
+++ b/pkg/workflow/tools.go
@@ -421,6 +421,9 @@ func ensureWorkflowDispatchItemNumberInput(eventsMap map[string]any) bool {
return true
}
+// setWorkflowDispatchInputsOptional forces all workflow_dispatch inputs in the given on: map
+// to required: false. This is used for centralized slash-command workflows, which are
+// dispatched by the router and must not be blocked by required manual-dispatch inputs.
func setWorkflowDispatchInputsOptional(eventsMap map[string]any) {
dispatchMap, ok := eventsMap["workflow_dispatch"].(map[string]any)
if !ok {
From 40c4a8eedfbbd2faaee8e12859d074f30dc829a1 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 15 May 2026 21:46:31 +0000
Subject: [PATCH 04/15] Reject required workflow_dispatch inputs for
slash/label command triggers
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
---
pkg/workflow/command_dispatch_validation.go | 48 +++++++++++++++++
pkg/workflow/compiler_validators.go | 6 +++
.../slash_command_centralized_compile_test.go | 51 +++++++++++--------
pkg/workflow/tools.go | 24 ---------
4 files changed, 85 insertions(+), 44 deletions(-)
create mode 100644 pkg/workflow/command_dispatch_validation.go
diff --git a/pkg/workflow/command_dispatch_validation.go b/pkg/workflow/command_dispatch_validation.go
new file mode 100644
index 00000000000..80dd475a51b
--- /dev/null
+++ b/pkg/workflow/command_dispatch_validation.go
@@ -0,0 +1,48 @@
+package workflow
+
+import "fmt"
+
+// validateCommandWorkflowDispatchInputs rejects required workflow_dispatch inputs when
+// slash_command or label_command triggers are configured.
+func validateCommandWorkflowDispatchInputs(workflowData *WorkflowData) error {
+ if workflowData == nil || workflowData.RawFrontmatter == nil {
+ return nil
+ }
+
+ hasCommandTrigger := len(workflowData.Command) > 0 || len(workflowData.LabelCommand) > 0
+ if !hasCommandTrigger {
+ return nil
+ }
+
+ onMap, ok := workflowData.RawFrontmatter["on"].(map[string]any)
+ if !ok {
+ return nil
+ }
+
+ workflowDispatchMap, ok := onMap["workflow_dispatch"].(map[string]any)
+ if !ok {
+ return nil
+ }
+
+ inputsMap, ok := workflowDispatchMap["inputs"].(map[string]any)
+ if !ok {
+ return nil
+ }
+
+ for inputName, inputDef := range inputsMap {
+ inputDefMap, ok := inputDef.(map[string]any)
+ if !ok {
+ continue
+ }
+
+ required, ok := inputDefMap["required"].(bool)
+ if ok && required {
+ return fmt.Errorf(
+ "on.workflow_dispatch.inputs.%s.required: true is not allowed with slash_command or label_command; set required: false",
+ inputName,
+ )
+ }
+ }
+
+ return nil
+}
diff --git a/pkg/workflow/compiler_validators.go b/pkg/workflow/compiler_validators.go
index 0c23b600ed8..0b5511335fc 100644
--- a/pkg/workflow/compiler_validators.go
+++ b/pkg/workflow/compiler_validators.go
@@ -185,6 +185,12 @@ func (c *Compiler) validateToolConfiguration(workflowData *WorkflowData, markdow
return formatCompilerError(markdownPath, "error", err.Error(), err)
}
+ // Validate workflow_dispatch required inputs with slash/label command triggers.
+ log.Printf("Validating workflow_dispatch input requirements for command triggers")
+ if err := validateCommandWorkflowDispatchInputs(workflowData); err != nil {
+ return formatCompilerError(markdownPath, "error", err.Error(), err)
+ }
+
// Validate workflow-level concurrency group expression
log.Printf("Validating workflow-level concurrency configuration")
if workflowData.Concurrency != "" {
diff --git a/pkg/workflow/slash_command_centralized_compile_test.go b/pkg/workflow/slash_command_centralized_compile_test.go
index 6107b328114..ead1c3bfa5e 100644
--- a/pkg/workflow/slash_command_centralized_compile_test.go
+++ b/pkg/workflow/slash_command_centralized_compile_test.go
@@ -9,7 +9,6 @@ import (
"github.com/github/gh-aw/pkg/stringutil"
"github.com/github/gh-aw/pkg/testutil"
- "github.com/goccy/go-yaml"
"github.com/stretchr/testify/require"
)
@@ -86,7 +85,7 @@ tools:
require.Contains(t, compiled, "fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issues'")
}
-func TestCompileWorkflow_SlashCommandCentralizedMakesDispatchInputsOptional(t *testing.T) {
+func TestCompileWorkflow_SlashCommandCentralizedRejectsRequiredDispatchInputs(t *testing.T) {
tmpDir := testutil.TempDir(t, "workflow-centralized-slash-dispatch-inputs-test")
markdownPath := filepath.Join(tmpDir, "scout.md")
@@ -111,24 +110,36 @@ tools:
require.NoError(t, os.WriteFile(markdownPath, []byte(content), 0644))
compiler := NewCompiler()
- require.NoError(t, compiler.CompileWorkflow(markdownPath))
+ err := compiler.CompileWorkflow(markdownPath)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), "on.workflow_dispatch.inputs.topic.required: true is not allowed with slash_command or label_command")
+}
- lockPath := stringutil.MarkdownToLockFile(markdownPath)
- lockContent, err := os.ReadFile(lockPath)
- require.NoError(t, err)
+func TestCompileWorkflow_LabelCommandRejectsRequiredDispatchInputs(t *testing.T) {
+ tmpDir := testutil.TempDir(t, "workflow-label-dispatch-inputs-test")
+
+ markdownPath := filepath.Join(tmpDir, "triage.md")
+ content := `---
+on:
+ label_command:
+ name: triage
+ workflow_dispatch:
+ inputs:
+ topic:
+ description: "Research topic"
+ required: true
+ type: string
+tools:
+ github:
+ allowed: [list_issues]
+---
+
+# Triage
+`
+ require.NoError(t, os.WriteFile(markdownPath, []byte(content), 0644))
- var workflow map[string]any
- require.NoError(t, yaml.Unmarshal(lockContent, &workflow))
-
- onMap, ok := workflow["on"].(map[string]any)
- require.True(t, ok, "expected 'on' to be a map")
- workflowDispatch, ok := onMap["workflow_dispatch"].(map[string]any)
- require.True(t, ok, "expected 'on.workflow_dispatch' to be a map")
- inputs, ok := workflowDispatch["inputs"].(map[string]any)
- require.True(t, ok, "expected 'on.workflow_dispatch.inputs' to be a map")
- topic, ok := inputs["topic"].(map[string]any)
- require.True(t, ok, "expected topic input to be present in workflow_dispatch inputs")
- required, ok := topic["required"].(bool)
- require.True(t, ok, "expected topic.required to be a boolean")
- require.False(t, required)
+ compiler := NewCompiler()
+ err := compiler.CompileWorkflow(markdownPath)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), "on.workflow_dispatch.inputs.topic.required: true is not allowed with slash_command or label_command")
}
diff --git a/pkg/workflow/tools.go b/pkg/workflow/tools.go
index 52b2cfe1396..58f79350a23 100644
--- a/pkg/workflow/tools.go
+++ b/pkg/workflow/tools.go
@@ -91,7 +91,6 @@ func (c *Compiler) applyDefaults(data *WorkflowData, markdownPath string) error
if len(data.CommandOtherEvents) > 0 {
maps.Copy(commandEventsMap, data.CommandOtherEvents)
}
- setWorkflowDispatchInputsOptional(commandEventsMap)
if _, hasWorkflowDispatch := commandEventsMap["workflow_dispatch"]; !hasWorkflowDispatch {
commandEventsMap["workflow_dispatch"] = nil
}
@@ -421,29 +420,6 @@ func ensureWorkflowDispatchItemNumberInput(eventsMap map[string]any) bool {
return true
}
-// setWorkflowDispatchInputsOptional forces all workflow_dispatch inputs in the given on: map
-// to required: false. This is used for centralized slash-command workflows, which are
-// dispatched by the router and must not be blocked by required manual-dispatch inputs.
-func setWorkflowDispatchInputsOptional(eventsMap map[string]any) {
- dispatchMap, ok := eventsMap["workflow_dispatch"].(map[string]any)
- if !ok {
- return
- }
-
- inputsMap, ok := dispatchMap["inputs"].(map[string]any)
- if !ok {
- return
- }
-
- for _, inputDef := range inputsMap {
- inputDefMap, ok := inputDef.(map[string]any)
- if !ok {
- continue
- }
- inputDefMap["required"] = false
- }
-}
-
// mergeToolsAndMCPServers merges tools, mcp-servers, and included tools
func (c *Compiler) mergeToolsAndMCPServers(topTools, mcpServers map[string]any, includedTools string) (map[string]any, error) {
toolsLog.Printf("Merging tools and MCP servers: topTools=%d, mcpServers=%d", len(topTools), len(mcpServers))
From 7ea71b93ae6a82d04760e4588664e1755a83bd38 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 15 May 2026 21:48:34 +0000
Subject: [PATCH 05/15] Refine command-trigger dispatch input validation
diagnostics
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
---
pkg/workflow/command_dispatch_validation.go | 19 +++++++++++++++----
.../slash_command_centralized_compile_test.go | 4 ++--
2 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/pkg/workflow/command_dispatch_validation.go b/pkg/workflow/command_dispatch_validation.go
index 80dd475a51b..329d16a495b 100644
--- a/pkg/workflow/command_dispatch_validation.go
+++ b/pkg/workflow/command_dispatch_validation.go
@@ -9,8 +9,10 @@ func validateCommandWorkflowDispatchInputs(workflowData *WorkflowData) error {
return nil
}
- hasCommandTrigger := len(workflowData.Command) > 0 || len(workflowData.LabelCommand) > 0
- if !hasCommandTrigger {
+ hasSlashCommand := len(workflowData.Command) > 0
+ hasLabelCommand := len(workflowData.LabelCommand) > 0
+ hasSlashOrLabelCommand := hasSlashCommand || hasLabelCommand
+ if !hasSlashOrLabelCommand {
return nil
}
@@ -37,9 +39,18 @@ func validateCommandWorkflowDispatchInputs(workflowData *WorkflowData) error {
required, ok := inputDefMap["required"].(bool)
if ok && required {
+ triggerName := "slash_command or label_command"
+ if hasSlashCommand && hasLabelCommand {
+ triggerName = "slash_command and label_command"
+ } else if hasSlashCommand {
+ triggerName = "slash_command"
+ } else if hasLabelCommand {
+ triggerName = "label_command"
+ }
+
return fmt.Errorf(
- "on.workflow_dispatch.inputs.%s.required: true is not allowed with slash_command or label_command; set required: false",
- inputName,
+ "on.workflow_dispatch.inputs.%s.required: true is not allowed when using %s; set required: false",
+ inputName, triggerName,
)
}
}
diff --git a/pkg/workflow/slash_command_centralized_compile_test.go b/pkg/workflow/slash_command_centralized_compile_test.go
index ead1c3bfa5e..c64b12e468e 100644
--- a/pkg/workflow/slash_command_centralized_compile_test.go
+++ b/pkg/workflow/slash_command_centralized_compile_test.go
@@ -112,7 +112,7 @@ tools:
compiler := NewCompiler()
err := compiler.CompileWorkflow(markdownPath)
require.Error(t, err)
- require.Contains(t, err.Error(), "on.workflow_dispatch.inputs.topic.required: true is not allowed with slash_command or label_command")
+ require.Contains(t, err.Error(), "on.workflow_dispatch.inputs.topic.required: true is not allowed when using slash_command")
}
func TestCompileWorkflow_LabelCommandRejectsRequiredDispatchInputs(t *testing.T) {
@@ -141,5 +141,5 @@ tools:
compiler := NewCompiler()
err := compiler.CompileWorkflow(markdownPath)
require.Error(t, err)
- require.Contains(t, err.Error(), "on.workflow_dispatch.inputs.topic.required: true is not allowed with slash_command or label_command")
+ require.Contains(t, err.Error(), "on.workflow_dispatch.inputs.topic.required: true is not allowed when using label_command")
}
From 0400ef3fa21e054e932f7fd29778337bd2608967 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 15 May 2026 21:50:27 +0000
Subject: [PATCH 06/15] Polish dispatch-validation diagnostics and test naming
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
---
pkg/workflow/command_dispatch_validation.go | 4 ++--
pkg/workflow/slash_command_centralized_compile_test.go | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/pkg/workflow/command_dispatch_validation.go b/pkg/workflow/command_dispatch_validation.go
index 329d16a495b..a8e52e8b907 100644
--- a/pkg/workflow/command_dispatch_validation.go
+++ b/pkg/workflow/command_dispatch_validation.go
@@ -39,12 +39,12 @@ func validateCommandWorkflowDispatchInputs(workflowData *WorkflowData) error {
required, ok := inputDefMap["required"].(bool)
if ok && required {
- triggerName := "slash_command or label_command"
+ var triggerName string
if hasSlashCommand && hasLabelCommand {
triggerName = "slash_command and label_command"
} else if hasSlashCommand {
triggerName = "slash_command"
- } else if hasLabelCommand {
+ } else {
triggerName = "label_command"
}
diff --git a/pkg/workflow/slash_command_centralized_compile_test.go b/pkg/workflow/slash_command_centralized_compile_test.go
index c64b12e468e..19da99e3861 100644
--- a/pkg/workflow/slash_command_centralized_compile_test.go
+++ b/pkg/workflow/slash_command_centralized_compile_test.go
@@ -85,7 +85,7 @@ tools:
require.Contains(t, compiled, "fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issues'")
}
-func TestCompileWorkflow_SlashCommandCentralizedRejectsRequiredDispatchInputs(t *testing.T) {
+func TestCompileWorkflow_SlashCommandRejectsRequiredDispatchInputs(t *testing.T) {
tmpDir := testutil.TempDir(t, "workflow-centralized-slash-dispatch-inputs-test")
markdownPath := filepath.Join(tmpDir, "scout.md")
From aeaf54202b987bbe4f26810824fec7b8e0fd2480 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 15 May 2026 21:52:11 +0000
Subject: [PATCH 07/15] Simplify trigger-name formatting in dispatch validation
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
---
pkg/workflow/command_dispatch_validation.go | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/pkg/workflow/command_dispatch_validation.go b/pkg/workflow/command_dispatch_validation.go
index a8e52e8b907..a2bc018a238 100644
--- a/pkg/workflow/command_dispatch_validation.go
+++ b/pkg/workflow/command_dispatch_validation.go
@@ -1,6 +1,7 @@
package workflow
import "fmt"
+import "strings"
// validateCommandWorkflowDispatchInputs rejects required workflow_dispatch inputs when
// slash_command or label_command triggers are configured.
@@ -39,14 +40,14 @@ func validateCommandWorkflowDispatchInputs(workflowData *WorkflowData) error {
required, ok := inputDefMap["required"].(bool)
if ok && required {
- var triggerName string
- if hasSlashCommand && hasLabelCommand {
- triggerName = "slash_command and label_command"
- } else if hasSlashCommand {
- triggerName = "slash_command"
- } else {
- triggerName = "label_command"
+ var triggerNames []string
+ if hasSlashCommand {
+ triggerNames = append(triggerNames, "slash_command")
}
+ if hasLabelCommand {
+ triggerNames = append(triggerNames, "label_command")
+ }
+ triggerName := strings.Join(triggerNames, " and ")
return fmt.Errorf(
"on.workflow_dispatch.inputs.%s.required: true is not allowed when using %s; set required: false",
From fec8d8c64807c2ae0d6f8348090d849b3e757f6b Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 15 May 2026 21:53:56 +0000
Subject: [PATCH 08/15] Apply final review nits in command dispatch validation
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
---
pkg/workflow/command_dispatch_validation.go | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/pkg/workflow/command_dispatch_validation.go b/pkg/workflow/command_dispatch_validation.go
index a2bc018a238..1a488114d28 100644
--- a/pkg/workflow/command_dispatch_validation.go
+++ b/pkg/workflow/command_dispatch_validation.go
@@ -1,7 +1,9 @@
package workflow
-import "fmt"
-import "strings"
+import (
+ "fmt"
+ "strings"
+)
// validateCommandWorkflowDispatchInputs rejects required workflow_dispatch inputs when
// slash_command or label_command triggers are configured.
@@ -47,11 +49,11 @@ func validateCommandWorkflowDispatchInputs(workflowData *WorkflowData) error {
if hasLabelCommand {
triggerNames = append(triggerNames, "label_command")
}
- triggerName := strings.Join(triggerNames, " and ")
+ triggersPhrase := strings.Join(triggerNames, " and ")
return fmt.Errorf(
"on.workflow_dispatch.inputs.%s.required: true is not allowed when using %s; set required: false",
- inputName, triggerName,
+ inputName, triggersPhrase,
)
}
}
From b57bf678a11e037f4716f6a26aaa00d1b6b1626f Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 15 May 2026 21:55:42 +0000
Subject: [PATCH 09/15] Inline trigger presence check in dispatch validator
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
---
pkg/workflow/command_dispatch_validation.go | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/pkg/workflow/command_dispatch_validation.go b/pkg/workflow/command_dispatch_validation.go
index 1a488114d28..a79a93add28 100644
--- a/pkg/workflow/command_dispatch_validation.go
+++ b/pkg/workflow/command_dispatch_validation.go
@@ -14,8 +14,7 @@ func validateCommandWorkflowDispatchInputs(workflowData *WorkflowData) error {
hasSlashCommand := len(workflowData.Command) > 0
hasLabelCommand := len(workflowData.LabelCommand) > 0
- hasSlashOrLabelCommand := hasSlashCommand || hasLabelCommand
- if !hasSlashOrLabelCommand {
+ if !hasSlashCommand && !hasLabelCommand {
return nil
}
From 1f2ac3ed6f3dd7eb24633170574f3a575d610c16 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 15 May 2026 21:57:34 +0000
Subject: [PATCH 10/15] Rename dispatch input rejection tests for clarity
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
---
pkg/workflow/slash_command_centralized_compile_test.go | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pkg/workflow/slash_command_centralized_compile_test.go b/pkg/workflow/slash_command_centralized_compile_test.go
index 19da99e3861..5b43afd6c5d 100644
--- a/pkg/workflow/slash_command_centralized_compile_test.go
+++ b/pkg/workflow/slash_command_centralized_compile_test.go
@@ -85,7 +85,7 @@ tools:
require.Contains(t, compiled, "fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issues'")
}
-func TestCompileWorkflow_SlashCommandRejectsRequiredDispatchInputs(t *testing.T) {
+func TestSlashCommandRejectsRequiredDispatchInputs(t *testing.T) {
tmpDir := testutil.TempDir(t, "workflow-centralized-slash-dispatch-inputs-test")
markdownPath := filepath.Join(tmpDir, "scout.md")
@@ -115,7 +115,7 @@ tools:
require.Contains(t, err.Error(), "on.workflow_dispatch.inputs.topic.required: true is not allowed when using slash_command")
}
-func TestCompileWorkflow_LabelCommandRejectsRequiredDispatchInputs(t *testing.T) {
+func TestLabelCommandRejectsRequiredDispatchInputs(t *testing.T) {
tmpDir := testutil.TempDir(t, "workflow-label-dispatch-inputs-test")
markdownPath := filepath.Join(tmpDir, "triage.md")
From a7f05563d93d6189c5301d0d955f62c39bc55f74 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 15 May 2026 21:59:29 +0000
Subject: [PATCH 11/15] Tighten dispatch validation docs and compile-failure
assertions
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
---
pkg/workflow/command_dispatch_validation.go | 5 +++--
pkg/workflow/slash_command_centralized_compile_test.go | 10 ++++++++++
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/pkg/workflow/command_dispatch_validation.go b/pkg/workflow/command_dispatch_validation.go
index a79a93add28..01b576c85e0 100644
--- a/pkg/workflow/command_dispatch_validation.go
+++ b/pkg/workflow/command_dispatch_validation.go
@@ -7,6 +7,7 @@ import (
// validateCommandWorkflowDispatchInputs rejects required workflow_dispatch inputs when
// slash_command or label_command triggers are configured.
+// Returns an error if any workflow_dispatch input has required: true.
func validateCommandWorkflowDispatchInputs(workflowData *WorkflowData) error {
if workflowData == nil || workflowData.RawFrontmatter == nil {
return nil
@@ -48,11 +49,11 @@ func validateCommandWorkflowDispatchInputs(workflowData *WorkflowData) error {
if hasLabelCommand {
triggerNames = append(triggerNames, "label_command")
}
- triggersPhrase := strings.Join(triggerNames, " and ")
+ triggerNamesPhrase := strings.Join(triggerNames, " and ")
return fmt.Errorf(
"on.workflow_dispatch.inputs.%s.required: true is not allowed when using %s; set required: false",
- inputName, triggersPhrase,
+ inputName, triggerNamesPhrase,
)
}
}
diff --git a/pkg/workflow/slash_command_centralized_compile_test.go b/pkg/workflow/slash_command_centralized_compile_test.go
index 5b43afd6c5d..8840161a4ea 100644
--- a/pkg/workflow/slash_command_centralized_compile_test.go
+++ b/pkg/workflow/slash_command_centralized_compile_test.go
@@ -113,6 +113,11 @@ tools:
err := compiler.CompileWorkflow(markdownPath)
require.Error(t, err)
require.Contains(t, err.Error(), "on.workflow_dispatch.inputs.topic.required: true is not allowed when using slash_command")
+
+ lockPath := stringutil.MarkdownToLockFile(markdownPath)
+ _, statErr := os.Stat(lockPath)
+ require.Error(t, statErr)
+ require.True(t, os.IsNotExist(statErr))
}
func TestLabelCommandRejectsRequiredDispatchInputs(t *testing.T) {
@@ -142,4 +147,9 @@ tools:
err := compiler.CompileWorkflow(markdownPath)
require.Error(t, err)
require.Contains(t, err.Error(), "on.workflow_dispatch.inputs.topic.required: true is not allowed when using label_command")
+
+ lockPath := stringutil.MarkdownToLockFile(markdownPath)
+ _, statErr := os.Stat(lockPath)
+ require.Error(t, statErr)
+ require.True(t, os.IsNotExist(statErr))
}
From 9018f2374a7a1ce2dbeb43313e662350440c15f0 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 15 May 2026 22:01:19 +0000
Subject: [PATCH 12/15] Clarify dispatch-input error context and restore test
naming convention
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
---
pkg/workflow/command_dispatch_validation.go | 3 ++-
pkg/workflow/slash_command_centralized_compile_test.go | 4 ++--
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/pkg/workflow/command_dispatch_validation.go b/pkg/workflow/command_dispatch_validation.go
index 01b576c85e0..393901772ba 100644
--- a/pkg/workflow/command_dispatch_validation.go
+++ b/pkg/workflow/command_dispatch_validation.go
@@ -52,7 +52,8 @@ func validateCommandWorkflowDispatchInputs(workflowData *WorkflowData) error {
triggerNamesPhrase := strings.Join(triggerNames, " and ")
return fmt.Errorf(
- "on.workflow_dispatch.inputs.%s.required: true is not allowed when using %s; set required: false",
+ "on.workflow_dispatch.inputs.%s.required: true is not allowed when using %s; "+
+ "these triggers are dispatched automatically and cannot enforce required manual inputs; set required: false",
inputName, triggerNamesPhrase,
)
}
diff --git a/pkg/workflow/slash_command_centralized_compile_test.go b/pkg/workflow/slash_command_centralized_compile_test.go
index 8840161a4ea..694197dddae 100644
--- a/pkg/workflow/slash_command_centralized_compile_test.go
+++ b/pkg/workflow/slash_command_centralized_compile_test.go
@@ -85,7 +85,7 @@ tools:
require.Contains(t, compiled, "fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issues'")
}
-func TestSlashCommandRejectsRequiredDispatchInputs(t *testing.T) {
+func TestCompileWorkflow_SlashCommandRejectsRequiredDispatchInputs(t *testing.T) {
tmpDir := testutil.TempDir(t, "workflow-centralized-slash-dispatch-inputs-test")
markdownPath := filepath.Join(tmpDir, "scout.md")
@@ -120,7 +120,7 @@ tools:
require.True(t, os.IsNotExist(statErr))
}
-func TestLabelCommandRejectsRequiredDispatchInputs(t *testing.T) {
+func TestCompileWorkflow_LabelCommandRejectsRequiredDispatchInputs(t *testing.T) {
tmpDir := testutil.TempDir(t, "workflow-label-dispatch-inputs-test")
markdownPath := filepath.Join(tmpDir, "triage.md")
From a000647882b734ac82cf6999fa6ff4a74afc3732 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 15 May 2026 22:03:03 +0000
Subject: [PATCH 13/15] Refine command-trigger dispatch validation error
wording
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
---
pkg/workflow/command_dispatch_validation.go | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/pkg/workflow/command_dispatch_validation.go b/pkg/workflow/command_dispatch_validation.go
index 393901772ba..26099191279 100644
--- a/pkg/workflow/command_dispatch_validation.go
+++ b/pkg/workflow/command_dispatch_validation.go
@@ -52,8 +52,7 @@ func validateCommandWorkflowDispatchInputs(workflowData *WorkflowData) error {
triggerNamesPhrase := strings.Join(triggerNames, " and ")
return fmt.Errorf(
- "on.workflow_dispatch.inputs.%s.required: true is not allowed when using %s; "+
- "these triggers are dispatched automatically and cannot enforce required manual inputs; set required: false",
+ "on.workflow_dispatch.inputs.%s.required: true is not allowed when using %s; these triggers are dispatched automatically and cannot enforce required manual inputs; set required: false in workflow_dispatch.inputs",
inputName, triggerNamesPhrase,
)
}
From bfe68b68b7aada0ad509e1574ea52e3b3d810446 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 15 May 2026 22:09:19 +0000
Subject: [PATCH 14/15] Plan update: investigate PR feedback and CI failures
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
---
.github/workflows/agentic_commands.yml | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/agentic_commands.yml b/.github/workflows/agentic_commands.yml
index 086ace98c41..2039e860293 100644
--- a/.github/workflows/agentic_commands.yml
+++ b/.github/workflows/agentic_commands.yml
@@ -1,4 +1,4 @@
-# gh-aw-commands: {"payload_version":"v1","schema_version":"v1","compiler_version":"dev","commands":["ace","approach-validator","archie","brave","cloclo","craft","grumpy","mergefest","nit","plan","poem-bot","review","scout","security-review","summarize","tidy","unbloat"],"workflows":["ace-editor","approach-validator","archie","brave","ci-doctor","cloclo","craft","dev","grumpy-reviewer","mergefest","necromancer","pdf-summary","plan","poem-bot","pr-code-quality-reviewer","pr-nitpick-reviewer","scout","security-review","tidy","unbloat-docs"]}
+# gh-aw-commands: {"payload_version":"v1","schema_version":"v1","compiler_version":"dev","commands":["ace","approach-validator","archie","brave","cloclo","craft","grumpy","mergefest","nit","plan","poem-bot","review","security-review","tidy","unbloat"],"workflows":["ace-editor","approach-validator","archie","brave","ci-doctor","cloclo","craft","dev","grumpy-reviewer","mergefest","necromancer","plan","poem-bot","pr-code-quality-reviewer","pr-nitpick-reviewer","security-review","tidy","unbloat-docs"]}
# Routing summary (sorted):
# slash commands:
# /ace -> ace-editor [pull_request_comment] reaction=eyes
@@ -13,9 +13,7 @@
# /plan -> plan [discussion_comment,issue_comment] reaction=eyes
# /poem-bot -> poem-bot [issues] reaction=eyes
# /review -> pr-code-quality-reviewer [pull_request_comment,pull_request_review_comment] reaction=eyes
-# /scout -> scout [discussion,discussion_comment,issue_comment,issues,pull_request,pull_request_comment,pull_request_review_comment] reaction=eyes
# /security-review -> security-review [pull_request_comment,pull_request_review_comment] reaction=eyes
-# /summarize -> pdf-summary [issue_comment,issues] reaction=eyes
# /tidy -> tidy [pull_request_comment] reaction=eyes
# /unbloat -> unbloat-docs [pull_request_comment] reaction=eyes
# labels:
@@ -87,7 +85,7 @@ jobs:
- name: Route slash command
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
env:
- GH_AW_SLASH_ROUTING: '{"ace":[{"workflow":"ace-editor","events":["pull_request_comment"],"ai_reaction":"eyes"}],"approach-validator":[{"workflow":"approach-validator","events":["issue_comment","pull_request_comment"],"ai_reaction":"eyes"}],"archie":[{"workflow":"archie","events":["issue_comment","issues","pull_request","pull_request_comment"],"ai_reaction":"eyes"}],"brave":[{"workflow":"brave","events":["issue_comment"],"ai_reaction":"eyes"}],"cloclo":[{"workflow":"cloclo","events":["discussion","discussion_comment","issue_comment","issues","pull_request","pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}],"craft":[{"workflow":"craft","events":["issues"],"ai_reaction":"eyes"}],"grumpy":[{"workflow":"grumpy-reviewer","events":["pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}],"mergefest":[{"workflow":"mergefest","events":["pull_request_comment"],"ai_reaction":"eyes"}],"nit":[{"workflow":"pr-nitpick-reviewer","events":["pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}],"plan":[{"workflow":"plan","events":["discussion_comment","issue_comment"],"ai_reaction":"eyes"}],"poem-bot":[{"workflow":"poem-bot","events":["issues"],"ai_reaction":"eyes"}],"review":[{"workflow":"pr-code-quality-reviewer","events":["pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}],"scout":[{"workflow":"scout","events":["discussion","discussion_comment","issue_comment","issues","pull_request","pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}],"security-review":[{"workflow":"security-review","events":["pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}],"summarize":[{"workflow":"pdf-summary","events":["issue_comment","issues"],"ai_reaction":"eyes"}],"tidy":[{"workflow":"tidy","events":["pull_request_comment"],"ai_reaction":"eyes"}],"unbloat":[{"workflow":"unbloat-docs","events":["pull_request_comment"],"ai_reaction":"eyes"}]}'
+ GH_AW_SLASH_ROUTING: '{"ace":[{"workflow":"ace-editor","events":["pull_request_comment"],"ai_reaction":"eyes"}],"approach-validator":[{"workflow":"approach-validator","events":["issue_comment","pull_request_comment"],"ai_reaction":"eyes"}],"archie":[{"workflow":"archie","events":["issue_comment","issues","pull_request","pull_request_comment"],"ai_reaction":"eyes"}],"brave":[{"workflow":"brave","events":["issue_comment"],"ai_reaction":"eyes"}],"cloclo":[{"workflow":"cloclo","events":["discussion","discussion_comment","issue_comment","issues","pull_request","pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}],"craft":[{"workflow":"craft","events":["issues"],"ai_reaction":"eyes"}],"grumpy":[{"workflow":"grumpy-reviewer","events":["pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}],"mergefest":[{"workflow":"mergefest","events":["pull_request_comment"],"ai_reaction":"eyes"}],"nit":[{"workflow":"pr-nitpick-reviewer","events":["pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}],"plan":[{"workflow":"plan","events":["discussion_comment","issue_comment"],"ai_reaction":"eyes"}],"poem-bot":[{"workflow":"poem-bot","events":["issues"],"ai_reaction":"eyes"}],"review":[{"workflow":"pr-code-quality-reviewer","events":["pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}],"security-review":[{"workflow":"security-review","events":["pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}],"tidy":[{"workflow":"tidy","events":["pull_request_comment"],"ai_reaction":"eyes"}],"unbloat":[{"workflow":"unbloat-docs","events":["pull_request_comment"],"ai_reaction":"eyes"}]}'
GH_AW_LABEL_ROUTING: '{"approach-proposal":[{"workflow":"approach-validator","events":["issues","pull_request"],"ai_reaction":"eyes"}],"ci-doctor":[{"workflow":"ci-doctor","events":["pull_request"],"ai_reaction":"eyes"}],"cloclo":[{"workflow":"cloclo","events":["discussion","issues","pull_request"],"ai_reaction":"eyes"}],"dev":[{"workflow":"dev","events":["discussion","issues","pull_request"],"ai_reaction":"eyes"}],"necromancer":[{"workflow":"necromancer","events":["pull_request"],"ai_reaction":"eyes"}],"needs-design":[{"workflow":"approach-validator","events":["issues","pull_request"],"ai_reaction":"eyes"}]}'
with:
script: |
From b93490c7663a64a7afd192b09234a66c13b8c8e6 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 15 May 2026 22:15:54 +0000
Subject: [PATCH 15/15] Fix command workflow_dispatch required inputs and
recompile workflows
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
---
.github/workflows/agentic_commands.yml | 6 ++++--
.github/workflows/pdf-summary.lock.yml | 28 +++++++++++++-------------
.github/workflows/pdf-summary.md | 2 +-
.github/workflows/scout.lock.yml | 28 +++++++++++++-------------
.github/workflows/scout.md | 2 +-
5 files changed, 34 insertions(+), 32 deletions(-)
diff --git a/.github/workflows/agentic_commands.yml b/.github/workflows/agentic_commands.yml
index 2039e860293..086ace98c41 100644
--- a/.github/workflows/agentic_commands.yml
+++ b/.github/workflows/agentic_commands.yml
@@ -1,4 +1,4 @@
-# gh-aw-commands: {"payload_version":"v1","schema_version":"v1","compiler_version":"dev","commands":["ace","approach-validator","archie","brave","cloclo","craft","grumpy","mergefest","nit","plan","poem-bot","review","security-review","tidy","unbloat"],"workflows":["ace-editor","approach-validator","archie","brave","ci-doctor","cloclo","craft","dev","grumpy-reviewer","mergefest","necromancer","plan","poem-bot","pr-code-quality-reviewer","pr-nitpick-reviewer","security-review","tidy","unbloat-docs"]}
+# gh-aw-commands: {"payload_version":"v1","schema_version":"v1","compiler_version":"dev","commands":["ace","approach-validator","archie","brave","cloclo","craft","grumpy","mergefest","nit","plan","poem-bot","review","scout","security-review","summarize","tidy","unbloat"],"workflows":["ace-editor","approach-validator","archie","brave","ci-doctor","cloclo","craft","dev","grumpy-reviewer","mergefest","necromancer","pdf-summary","plan","poem-bot","pr-code-quality-reviewer","pr-nitpick-reviewer","scout","security-review","tidy","unbloat-docs"]}
# Routing summary (sorted):
# slash commands:
# /ace -> ace-editor [pull_request_comment] reaction=eyes
@@ -13,7 +13,9 @@
# /plan -> plan [discussion_comment,issue_comment] reaction=eyes
# /poem-bot -> poem-bot [issues] reaction=eyes
# /review -> pr-code-quality-reviewer [pull_request_comment,pull_request_review_comment] reaction=eyes
+# /scout -> scout [discussion,discussion_comment,issue_comment,issues,pull_request,pull_request_comment,pull_request_review_comment] reaction=eyes
# /security-review -> security-review [pull_request_comment,pull_request_review_comment] reaction=eyes
+# /summarize -> pdf-summary [issue_comment,issues] reaction=eyes
# /tidy -> tidy [pull_request_comment] reaction=eyes
# /unbloat -> unbloat-docs [pull_request_comment] reaction=eyes
# labels:
@@ -85,7 +87,7 @@ jobs:
- name: Route slash command
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
env:
- GH_AW_SLASH_ROUTING: '{"ace":[{"workflow":"ace-editor","events":["pull_request_comment"],"ai_reaction":"eyes"}],"approach-validator":[{"workflow":"approach-validator","events":["issue_comment","pull_request_comment"],"ai_reaction":"eyes"}],"archie":[{"workflow":"archie","events":["issue_comment","issues","pull_request","pull_request_comment"],"ai_reaction":"eyes"}],"brave":[{"workflow":"brave","events":["issue_comment"],"ai_reaction":"eyes"}],"cloclo":[{"workflow":"cloclo","events":["discussion","discussion_comment","issue_comment","issues","pull_request","pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}],"craft":[{"workflow":"craft","events":["issues"],"ai_reaction":"eyes"}],"grumpy":[{"workflow":"grumpy-reviewer","events":["pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}],"mergefest":[{"workflow":"mergefest","events":["pull_request_comment"],"ai_reaction":"eyes"}],"nit":[{"workflow":"pr-nitpick-reviewer","events":["pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}],"plan":[{"workflow":"plan","events":["discussion_comment","issue_comment"],"ai_reaction":"eyes"}],"poem-bot":[{"workflow":"poem-bot","events":["issues"],"ai_reaction":"eyes"}],"review":[{"workflow":"pr-code-quality-reviewer","events":["pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}],"security-review":[{"workflow":"security-review","events":["pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}],"tidy":[{"workflow":"tidy","events":["pull_request_comment"],"ai_reaction":"eyes"}],"unbloat":[{"workflow":"unbloat-docs","events":["pull_request_comment"],"ai_reaction":"eyes"}]}'
+ GH_AW_SLASH_ROUTING: '{"ace":[{"workflow":"ace-editor","events":["pull_request_comment"],"ai_reaction":"eyes"}],"approach-validator":[{"workflow":"approach-validator","events":["issue_comment","pull_request_comment"],"ai_reaction":"eyes"}],"archie":[{"workflow":"archie","events":["issue_comment","issues","pull_request","pull_request_comment"],"ai_reaction":"eyes"}],"brave":[{"workflow":"brave","events":["issue_comment"],"ai_reaction":"eyes"}],"cloclo":[{"workflow":"cloclo","events":["discussion","discussion_comment","issue_comment","issues","pull_request","pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}],"craft":[{"workflow":"craft","events":["issues"],"ai_reaction":"eyes"}],"grumpy":[{"workflow":"grumpy-reviewer","events":["pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}],"mergefest":[{"workflow":"mergefest","events":["pull_request_comment"],"ai_reaction":"eyes"}],"nit":[{"workflow":"pr-nitpick-reviewer","events":["pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}],"plan":[{"workflow":"plan","events":["discussion_comment","issue_comment"],"ai_reaction":"eyes"}],"poem-bot":[{"workflow":"poem-bot","events":["issues"],"ai_reaction":"eyes"}],"review":[{"workflow":"pr-code-quality-reviewer","events":["pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}],"scout":[{"workflow":"scout","events":["discussion","discussion_comment","issue_comment","issues","pull_request","pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}],"security-review":[{"workflow":"security-review","events":["pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}],"summarize":[{"workflow":"pdf-summary","events":["issue_comment","issues"],"ai_reaction":"eyes"}],"tidy":[{"workflow":"tidy","events":["pull_request_comment"],"ai_reaction":"eyes"}],"unbloat":[{"workflow":"unbloat-docs","events":["pull_request_comment"],"ai_reaction":"eyes"}]}'
GH_AW_LABEL_ROUTING: '{"approach-proposal":[{"workflow":"approach-validator","events":["issues","pull_request"],"ai_reaction":"eyes"}],"ci-doctor":[{"workflow":"ci-doctor","events":["pull_request"],"ai_reaction":"eyes"}],"cloclo":[{"workflow":"cloclo","events":["discussion","issues","pull_request"],"ai_reaction":"eyes"}],"dev":[{"workflow":"dev","events":["discussion","issues","pull_request"],"ai_reaction":"eyes"}],"necromancer":[{"workflow":"necromancer","events":["pull_request"],"ai_reaction":"eyes"}],"needs-design":[{"workflow":"approach-validator","events":["issues","pull_request"],"ai_reaction":"eyes"}]}'
with:
script: |
diff --git a/.github/workflows/pdf-summary.lock.yml b/.github/workflows/pdf-summary.lock.yml
index 53bb61070b1..346734b5c41 100644
--- a/.github/workflows/pdf-summary.lock.yml
+++ b/.github/workflows/pdf-summary.lock.yml
@@ -1,4 +1,4 @@
-# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"f17bccc0ed91e64b7c3cff907b5a513092549fd7d00d1d990492e24515bdf6f1","strict":true,"agent_id":"copilot"}
+# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"9545894780070d11ad24d202421b7fdb4a8ddddbd3ff48bc964aeebfc7e48932","strict":true,"agent_id":"copilot"}
# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"27d5ce7f107fe9357f9df03efb73ab90386fccae","version":"v5.0.5"},{"repo":"actions/cache/save","sha":"27d5ce7f107fe9357f9df03efb73ab90386fccae","version":"v5.0.5"},{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e","version":"v6.4.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.25.46"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.25.46"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.25.46"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.3.9","digest":"sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.3.9@sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388"},{"image":"ghcr.io/github/github-mcp-server:v1.0.4"},{"image":"mcp/markitdown","digest":"sha256:1cef3bf502503310ed0884441874ccf6cdaac20136dc1179797fa048269dc4cb","pinned_image":"mcp/markitdown@sha256:1cef3bf502503310ed0884441874ccf6cdaac20136dc1179797fa048269dc4cb"},{"image":"node:lts-alpine","digest":"sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f","pinned_image":"node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f"}]}
# ___ _ _
# / _ \ | | (_)
@@ -75,7 +75,7 @@ on:
type: string
url:
description: URL(s) to resource(s) to analyze (comma-separated for multiple URLs)
- required: true
+ required: false
type: string
permissions: {}
@@ -263,21 +263,21 @@ jobs:
run: |
bash "${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh"
{
- cat << 'GH_AW_PROMPT_13803584a5c506a8_EOF'
+ cat << 'GH_AW_PROMPT_83a82e91f64ea609_EOF'
- GH_AW_PROMPT_13803584a5c506a8_EOF
+ GH_AW_PROMPT_83a82e91f64ea609_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/cache_memory_prompt.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md"
- cat << 'GH_AW_PROMPT_13803584a5c506a8_EOF'
+ cat << 'GH_AW_PROMPT_83a82e91f64ea609_EOF'
Tools: add_comment, create_discussion, missing_tool, missing_data, noop
- GH_AW_PROMPT_13803584a5c506a8_EOF
+ GH_AW_PROMPT_83a82e91f64ea609_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/mcp_cli_tools_prompt.md"
- cat << 'GH_AW_PROMPT_13803584a5c506a8_EOF'
+ cat << 'GH_AW_PROMPT_83a82e91f64ea609_EOF'
The following GitHub context information is available for this workflow:
{{#if github.actor}}
@@ -306,19 +306,19 @@ jobs:
{{/if}}
- GH_AW_PROMPT_13803584a5c506a8_EOF
+ GH_AW_PROMPT_83a82e91f64ea609_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/github_mcp_tools_with_safeoutputs_prompt.md"
if [ "$GITHUB_EVENT_NAME" = "issue_comment" ] && [ -n "$GH_AW_IS_PR_COMMENT" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review_comment" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review" ]; then
cat "${RUNNER_TEMP}/gh-aw/prompts/pr_context_prompt.md"
fi
- cat << 'GH_AW_PROMPT_13803584a5c506a8_EOF'
+ cat << 'GH_AW_PROMPT_83a82e91f64ea609_EOF'
{{#runtime-import .github/workflows/shared/mcp/markitdown.md}}
{{#runtime-import .github/workflows/shared/reporting.md}}
{{#runtime-import .github/workflows/shared/observability-otlp.md}}
{{#runtime-import .github/workflows/shared/noop-reminder.md}}
{{#runtime-import .github/workflows/pdf-summary.md}}
- GH_AW_PROMPT_13803584a5c506a8_EOF
+ GH_AW_PROMPT_83a82e91f64ea609_EOF
} > "$GH_AW_PROMPT"
- name: Interpolate variables and render templates
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
@@ -570,9 +570,9 @@ jobs:
mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs"
mkdir -p /tmp/gh-aw/safeoutputs
mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs
- cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_7ec836cbd3f34cbd_EOF'
+ cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_515ba76f1bd04a4c_EOF'
{"add_comment":{"max":1},"create_discussion":{"expires":24,"fallback_to_issue":true,"max":1},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"true"},"report_incomplete":{}}
- GH_AW_SAFE_OUTPUTS_CONFIG_7ec836cbd3f34cbd_EOF
+ GH_AW_SAFE_OUTPUTS_CONFIG_515ba76f1bd04a4c_EOF
- name: Generate Safe Outputs Tools
env:
GH_AW_TOOLS_META_JSON: |
@@ -795,7 +795,7 @@ jobs:
mkdir -p /home/runner/.copilot
GH_AW_NODE=$(which node 2>/dev/null || command -v node 2>/dev/null || echo node)
- cat << GH_AW_MCP_CONFIG_7b16283d2c428515_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs"
+ cat << GH_AW_MCP_CONFIG_9ed7043b688a3489_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs"
{
"mcpServers": {
"github": {
@@ -855,7 +855,7 @@ jobs:
}
}
}
- GH_AW_MCP_CONFIG_7b16283d2c428515_EOF
+ GH_AW_MCP_CONFIG_9ed7043b688a3489_EOF
- name: Mount MCP servers as CLIs
id: mount-mcp-clis
continue-on-error: true
diff --git a/.github/workflows/pdf-summary.md b/.github/workflows/pdf-summary.md
index cf3697cce14..bfcc9e8d471 100644
--- a/.github/workflows/pdf-summary.md
+++ b/.github/workflows/pdf-summary.md
@@ -13,7 +13,7 @@ on:
inputs:
url:
description: 'URL(s) to resource(s) to analyze (comma-separated for multiple URLs)'
- required: true
+ required: false
type: string
query:
description: 'Query or question to answer about the resource(s)'
diff --git a/.github/workflows/scout.lock.yml b/.github/workflows/scout.lock.yml
index 8c984eb2964..6df3e0c645a 100644
--- a/.github/workflows/scout.lock.yml
+++ b/.github/workflows/scout.lock.yml
@@ -1,4 +1,4 @@
-# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"876ad3e3f5e72fe3ce92cf6800bad55f24d826e36fab9fa74b974d26ce2806b5","strict":true,"agent_id":"claude"}
+# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"d762596476e9ee11c5f0546bd2148f1b314544476475aa8103dfbd0cccc4a89b","strict":true,"agent_id":"claude"}
# gh-aw-manifest: {"version":1,"secrets":["ANTHROPIC_API_KEY","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GH_AW_OTEL_GRAFANA_AUTHORIZATION","GH_AW_OTEL_GRAFANA_ENDPOINT","GH_AW_OTEL_SENTRY_AUTHORIZATION","GH_AW_OTEL_SENTRY_ENDPOINT","GITHUB_TOKEN","TAVILY_API_KEY"],"actions":[{"repo":"actions/cache/restore","sha":"27d5ce7f107fe9357f9df03efb73ab90386fccae","version":"v5.0.5"},{"repo":"actions/cache/save","sha":"27d5ce7f107fe9357f9df03efb73ab90386fccae","version":"v5.0.5"},{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e","version":"v6.4.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.25.46"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.25.46"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.25.46"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.25.46"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.3.9","digest":"sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.3.9@sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388"},{"image":"ghcr.io/github/github-mcp-server:v1.0.4"},{"image":"mcp/arxiv-mcp-server","digest":"sha256:6dc6bba6dfed97f4ad6eb8d23a5c98ef5b7fa6184937d54b2d675801cd9dd29e","pinned_image":"mcp/arxiv-mcp-server@sha256:6dc6bba6dfed97f4ad6eb8d23a5c98ef5b7fa6184937d54b2d675801cd9dd29e"},{"image":"mcp/markitdown","digest":"sha256:1cef3bf502503310ed0884441874ccf6cdaac20136dc1179797fa048269dc4cb","pinned_image":"mcp/markitdown@sha256:1cef3bf502503310ed0884441874ccf6cdaac20136dc1179797fa048269dc4cb"},{"image":"node:lts-alpine","digest":"sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f","pinned_image":"node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f"}]}
# ___ _ _
# / _ \ | | (_)
@@ -89,7 +89,7 @@ on:
type: choice
topic:
description: Research topic or question
- required: true
+ required: false
permissions: {}
@@ -277,21 +277,21 @@ jobs:
run: |
bash "${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh"
{
- cat << 'GH_AW_PROMPT_3f97b0be61723276_EOF'
+ cat << 'GH_AW_PROMPT_10305b34369706b3_EOF'
- GH_AW_PROMPT_3f97b0be61723276_EOF
+ GH_AW_PROMPT_10305b34369706b3_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/cache_memory_prompt.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md"
- cat << 'GH_AW_PROMPT_3f97b0be61723276_EOF'
+ cat << 'GH_AW_PROMPT_10305b34369706b3_EOF'
Tools: add_comment, add_labels, missing_tool, missing_data, noop
- GH_AW_PROMPT_3f97b0be61723276_EOF
+ GH_AW_PROMPT_10305b34369706b3_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/mcp_cli_tools_prompt.md"
- cat << 'GH_AW_PROMPT_3f97b0be61723276_EOF'
+ cat << 'GH_AW_PROMPT_10305b34369706b3_EOF'
The following GitHub context information is available for this workflow:
{{#if github.actor}}
@@ -320,12 +320,12 @@ jobs:
{{/if}}
- GH_AW_PROMPT_3f97b0be61723276_EOF
+ GH_AW_PROMPT_10305b34369706b3_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/cli_proxy_with_safeoutputs_prompt.md"
if [ "$GITHUB_EVENT_NAME" = "issue_comment" ] && [ -n "$GH_AW_IS_PR_COMMENT" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review_comment" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review" ]; then
cat "${RUNNER_TEMP}/gh-aw/prompts/pr_context_prompt.md"
fi
- cat << 'GH_AW_PROMPT_3f97b0be61723276_EOF'
+ cat << 'GH_AW_PROMPT_10305b34369706b3_EOF'
{{#runtime-import .github/workflows/shared/reporting.md}}
{{#runtime-import .github/workflows/shared/mcp/arxiv.md}}
@@ -337,7 +337,7 @@ jobs:
{{#runtime-import .github/workflows/shared/observability-otlp.md}}
{{#runtime-import .github/workflows/shared/noop-reminder.md}}
{{#runtime-import .github/workflows/scout.md}}
- GH_AW_PROMPT_3f97b0be61723276_EOF
+ GH_AW_PROMPT_10305b34369706b3_EOF
} > "$GH_AW_PROMPT"
- name: Interpolate variables and render templates
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
@@ -590,9 +590,9 @@ jobs:
mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs"
mkdir -p /tmp/gh-aw/safeoutputs
mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs
- cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_7f1bdfc34579045a_EOF'
+ cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_3a67a53bc13a95ff_EOF'
{"add_comment":{"max":1},"add_labels":{"max":1},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"true"},"report_incomplete":{}}
- GH_AW_SAFE_OUTPUTS_CONFIG_7f1bdfc34579045a_EOF
+ GH_AW_SAFE_OUTPUTS_CONFIG_3a67a53bc13a95ff_EOF
- name: Generate Safe Outputs Tools
env:
GH_AW_TOOLS_META_JSON: |
@@ -805,7 +805,7 @@ jobs:
export MCP_GATEWAY_DOCKER_COMMAND='docker run -i --rm --network host --add-host host.docker.internal:127.0.0.1 --user '"${MCP_GATEWAY_UID}"':'"${MCP_GATEWAY_GID}"' --group-add '"${DOCKER_SOCK_GID}"' -v '"${DOCKER_SOCK_PATH}"':/var/run/docker.sock -e MCP_GATEWAY_PORT -e MCP_GATEWAY_DOMAIN -e MCP_GATEWAY_API_KEY -e MCP_GATEWAY_PAYLOAD_DIR -e MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD -e DOCKER_HOST=unix:///var/run/docker.sock -e DEBUG -e MCP_GATEWAY_LOG_DIR -e GH_AW_MCP_LOG_DIR -e GH_AW_SAFE_OUTPUTS -e GH_AW_SAFE_OUTPUTS_CONFIG_PATH -e GH_AW_SAFE_OUTPUTS_TOOLS_PATH -e GH_AW_ASSETS_BRANCH -e GH_AW_ASSETS_MAX_SIZE_KB -e GH_AW_ASSETS_ALLOWED_EXTS -e DEFAULT_BRANCH -e GITHUB_MCP_SERVER_TOKEN -e GITHUB_MCP_GUARD_MIN_INTEGRITY -e GITHUB_MCP_GUARD_REPOS -e GITHUB_REPOSITORY -e GITHUB_SERVER_URL -e GITHUB_SHA -e GITHUB_WORKSPACE -e GITHUB_TOKEN -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ATTEMPT -e GITHUB_JOB -e GITHUB_ACTION -e GITHUB_EVENT_NAME -e GITHUB_EVENT_PATH -e GITHUB_ACTOR -e GITHUB_ACTOR_ID -e GITHUB_TRIGGERING_ACTOR -e GITHUB_WORKFLOW -e GITHUB_WORKFLOW_REF -e GITHUB_WORKFLOW_SHA -e GITHUB_REF -e GITHUB_REF_NAME -e GITHUB_REF_TYPE -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GH_AW_SAFE_OUTPUTS_PORT -e GH_AW_SAFE_OUTPUTS_API_KEY -e GITHUB_AW_OTEL_TRACE_ID -e GITHUB_AW_OTEL_PARENT_SPAN_ID -e OTEL_EXPORTER_OTLP_HEADERS -e TAVILY_API_KEY -v /tmp/gh-aw/mcp-payloads:/tmp/gh-aw/mcp-payloads:rw -v /opt:/opt:ro -v /tmp:/tmp:rw -v '"${GITHUB_WORKSPACE}"':'"${GITHUB_WORKSPACE}"':rw ghcr.io/github/gh-aw-mcpg:v0.3.9'
GH_AW_NODE=$(which node 2>/dev/null || command -v node 2>/dev/null || echo node)
- cat << GH_AW_MCP_CONFIG_5ffea96d0f666af9_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs"
+ cat << GH_AW_MCP_CONFIG_ce395a5651924577_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs"
{
"mcpServers": {
"arxiv": {
@@ -915,7 +915,7 @@ jobs:
}
}
}
- GH_AW_MCP_CONFIG_5ffea96d0f666af9_EOF
+ GH_AW_MCP_CONFIG_ce395a5651924577_EOF
- name: Mount MCP servers as CLIs
id: mount-mcp-clis
continue-on-error: true
diff --git a/.github/workflows/scout.md b/.github/workflows/scout.md
index 32535679ea3..473060fc22f 100644
--- a/.github/workflows/scout.md
+++ b/.github/workflows/scout.md
@@ -12,7 +12,7 @@ on:
inputs:
topic:
description: 'Research topic or question'
- required: true
+ required: false
history:
description: "Git history to fetch: shallow (default) or full"
required: false