Skip to content

Commit b837f3d

Browse files
authored
Merge pull request #2156 from dgageot/decline-elicitations
Decline elicitations in run --exec --json mode
2 parents 6d396ca + 967f285 commit b837f3d

2 files changed

Lines changed: 38 additions & 3 deletions

File tree

pkg/cli/runner.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ func Run(ctx context.Context, out *Printer, cfg Config, rt runtime.Runtime, sess
110110
if !cfg.AutoApprove {
111111
rt.Resume(ctx, runtime.ResumeReject(""))
112112
}
113+
case *runtime.ElicitationRequestEvent:
114+
_ = rt.ResumeElicitation(ctx, "decline", nil)
113115
case *runtime.MaxIterationsReachedEvent:
114116
switch handleMaxIterationsAutoApprove(cfg.AutoApprove, &autoExtensions, e.MaxIterations) {
115117
case maxIterContinue:

pkg/cli/runner_test.go

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@ import (
2121
type mockRuntime struct {
2222
events []runtime.Event
2323

24-
mu sync.Mutex
25-
resumes []runtime.ResumeRequest
24+
mu sync.Mutex
25+
resumes []runtime.ResumeRequest
26+
elicitationDeclines int
27+
elicitationLastAction tools.ElicitationAction
2628
}
2729

2830
func (m *mockRuntime) CurrentAgentName() string { return "test" }
@@ -37,7 +39,11 @@ func (m *mockRuntime) Run(context.Context, *session.Session) ([]session.Message,
3739
return nil, nil
3840
}
3941

40-
func (m *mockRuntime) ResumeElicitation(context.Context, tools.ElicitationAction, map[string]any) error {
42+
func (m *mockRuntime) ResumeElicitation(_ context.Context, action tools.ElicitationAction, _ map[string]any) error {
43+
m.mu.Lock()
44+
defer m.mu.Unlock()
45+
m.elicitationDeclines++
46+
m.elicitationLastAction = action
4147
return nil
4248
}
4349
func (m *mockRuntime) SessionStore() session.Store { return nil }
@@ -178,6 +184,33 @@ func TestMaxIterationsRejectInJSONModeWithoutYolo(t *testing.T) {
178184
assert.Equal(t, resumes[0].Type, runtime.ResumeTypeReject)
179185
}
180186

187+
func TestElicitationAutoDeclineInJSONMode(t *testing.T) {
188+
t.Parallel()
189+
190+
rt := &mockRuntime{
191+
events: []runtime.Event{
192+
&runtime.ElicitationRequestEvent{
193+
Type: "elicitation_request",
194+
Message: "Please authorize",
195+
Meta: map[string]any{"cagent/server_url": "https://example.com"},
196+
},
197+
},
198+
}
199+
200+
var buf bytes.Buffer
201+
out := NewPrinter(&buf)
202+
sess := session.New()
203+
cfg := Config{OutputJSON: true}
204+
205+
err := Run(t.Context(), out, cfg, rt, sess, []string{"hello"})
206+
assert.NilError(t, err)
207+
208+
rt.mu.Lock()
209+
defer rt.mu.Unlock()
210+
assert.Equal(t, rt.elicitationDeclines, 1)
211+
assert.Equal(t, rt.elicitationLastAction, tools.ElicitationAction("decline"))
212+
}
213+
181214
func TestMaxIterationsSafetyCapJSONMode(t *testing.T) {
182215
t.Parallel()
183216

0 commit comments

Comments
 (0)