Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
b1722e0
Add browser and security agent tools
gearnode Mar 14, 2026
c48d918
Add reusable progress reporting types to agent package
gearnode Mar 14, 2026
45c6bed
Replace single-agent vendor assessment with multi-agent system
gearnode Mar 14, 2026
07cbd24
Wire vendor assessor into service layer
gearnode Mar 14, 2026
dcaed80
Vary progress messages to feel more natural
gearnode Mar 14, 2026
7733e59
Pick progress messages randomly instead of cycling
gearnode Mar 14, 2026
a09fe76
Expand progress messages to at least five variants per tool
gearnode Mar 14, 2026
d66b06e
Rename vendor_assessment package to vetting
gearnode Mar 14, 2026
966e43d
Restore missing llm import and fix import ordering
gearnode Mar 14, 2026
da8302d
Add analyze_csp and check_cors to security prompt
gearnode Mar 14, 2026
c93fa03
Increase extract_page_text limit from 8K to 32K
gearnode Mar 14, 2026
f58dd07
Propagate caller context cancellation to Chrome tabs
gearnode Mar 14, 2026
fd2dcc4
Add SPF check tool for email security assessment
gearnode Mar 14, 2026
ab4c5b9
Add bug_bounty_url and data_locations to VendorInfo
gearnode Mar 14, 2026
2aed24c
Expand crawler prompt with more URL patterns
gearnode Mar 14, 2026
d899b82
Add risk scoring and improve orchestrator workflow
gearnode Mar 14, 2026
7b5f833
Improve analyzer prompt for long and linked documents
gearnode Mar 14, 2026
f26c54b
Expand compliance prompt with more frameworks and strategy
gearnode Mar 14, 2026
101c919
Add Cross-Origin-*-Policy headers to security check
gearnode Mar 14, 2026
a0a2f66
Add category descriptions to extraction prompt
gearnode Mar 14, 2026
bb44ac0
Add unit tests for security tool pure functions
gearnode Mar 14, 2026
2e6537f
Add 30-second timeout to browser tool calls
gearnode Mar 14, 2026
94699d0
Check HTTP-to-HTTPS redirect in security headers tool
gearnode Mar 14, 2026
6a7f79a
Enable parallel tool calls for security assessor agent
gearnode Mar 14, 2026
306a870
Fix review issues in vendor assessment agent
gearnode Mar 14, 2026
1b7804d
Fix SSL validity check, SPF policy parsing, and link cap
gearnode Mar 15, 2026
d21f512
Add market presence assessment sub-agent
gearnode Mar 24, 2026
accabd5
WIP
gearnode Apr 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions pkg/agent/agent.go
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,15 @@ func WithParallelToolCalls(enabled bool) Option {
}
}

func WithThinking(budgetTokens int) Option {
return func(a *Agent) {
a.modelSettings.Thinking = &llm.ThinkingConfig{
Enabled: true,
BudgetTokens: budgetTokens,
}
}
}

func WithLogger(l *log.Logger) Option {
return func(a *Agent) {
a.logger = l
Expand Down
1 change: 1 addition & 0 deletions pkg/agent/model_settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,5 @@ type ModelSettings struct {
MaxTokens *int
ToolChoice *llm.ToolChoice
ParallelToolCalls *bool
Thinking *llm.ThinkingConfig
}
36 changes: 36 additions & 0 deletions pkg/agent/progress.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
// Copyright (c) 2026 Probo Inc <hello@getprobo.com>.
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
// OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
// PERFORMANCE OF THIS SOFTWARE.

package agent

import "context"

type (
ProgressEventType string

ProgressEvent struct {
Type ProgressEventType `json:"type"`
Step string `json:"step"`
ParentStep string `json:"parent_step,omitempty"`
Message string `json:"message"`
}

ProgressReporter func(ctx context.Context, event ProgressEvent)
)

const (
ProgressEventStepStarted ProgressEventType = "step_started"
ProgressEventStepCompleted ProgressEventType = "step_completed"
ProgressEventStepFailed ProgressEventType = "step_failed"
)
21 changes: 15 additions & 6 deletions pkg/agent/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,7 @@ func coreLoop(ctx context.Context, startAgent *Agent, inputMessages []llm.Messag
ToolChoice: toolChoice,
ParallelToolCalls: s.agent.modelSettings.ParallelToolCalls,
ResponseFormat: responseFormat,
Thinking: s.agent.modelSettings.Thinking,
}

s.logger.InfoCtx(
Expand Down Expand Up @@ -852,12 +853,20 @@ func executeSingleTool(
emitHook(agent, func(h RunHooks) { h.OnToolEnd(ctx, agent, tool, result, nil) })
emitAgentHook(agent, func(h AgentHooks) { h.OnToolEnd(ctx, agent, tool, result) })

logger.InfoCtx(
ctx,
"tool execution completed",
log.String("tool", tool.Name()),
log.Bool("is_error", result.IsError),
)
if result.IsError {
logger.WarnCtx(
ctx,
"tool returned error",
log.String("tool", tool.Name()),
log.String("content", result.Content),
)
} else {
logger.InfoCtx(
ctx,
"tool execution completed",
log.String("tool", tool.Name()),
)
}

return result, nil
}
Expand Down
Loading
Loading