tools

package
v0.0.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 25, 2026 License: Apache-2.0 Imports: 22 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// DefaultOutputLimit is the maximum tool output size before truncation (30KB).
	DefaultOutputLimit = 30 * 1024
)

Variables

This section is empty.

Functions

func CleanOldOutputs added in v0.0.2

func CleanOldOutputs()

CleanOldOutputs removes tool output files older than 7 days.

func ExpandShellInjections added in v0.0.4

func ExpandShellInjections(body string) string

ExpandShellInjections executes !`command` placeholders and replaces them with output. Commands run in the current working directory with a short timeout. On error, the placeholder is replaced with an error message.

func ExpandSkillArgs added in v0.0.4

func ExpandSkillArgs(body, rawArgs string) string

ExpandSkillArgs substitutes $ARGUMENTS, $@, $N, and $ARGUMENTS[N] in body. If none of these placeholders exist and args is non-empty, appends "ARGUMENTS: <args>".

func ExpandSkillVars added in v0.0.4

func ExpandSkillVars(body, skillDir, sessionID string) string

ExpandSkillVars substitutes ${CODEBOT_SKILL_DIR} and ${CODEBOT_SESSION_ID} in body. Also supports the official ${CLAUDE_SKILL_DIR} / ${CLAUDE_SESSION_ID} aliases for compatibility.

func NewCronTools added in v0.0.2

func NewCronTools() (*cron.Store, []agentcore.Tool)

NewCronTools creates a cron.Store and the three cron tools that share it.

func NewEnterPlanMode added in v0.0.2

func NewEnterPlanMode() *enterPlanModeTool

func NewExitPlanMode added in v0.0.2

func NewExitPlanMode() *exitPlanModeTool

func WrapWithOutputLimit added in v0.0.2

func WrapWithOutputLimit(tools []agentcore.Tool) []agentcore.Tool

WrapWithOutputLimit wraps tools in the limitable set with output truncation. Tools not in the set are returned unchanged.

Types

type AllowToolsSetter added in v0.0.4

type AllowToolsSetter func(tools []string)

AllowToolsSetter grants temporary tool permissions for the active skill. Called with nil/empty to clear grants from the previous skill.

type AskUserHandler

type AskUserHandler func(ctx context.Context, questions []Question) (*AskUserResponse, error)

AskUserHandler blocks until the user answers all questions. Returns answers and notes. Returns error on cancel or timeout.

type AskUserResponse

type AskUserResponse struct {
	Answers map[string]string // question text → answer
	Notes   map[string]string // question text → user note (from "Type something" or preview notes)
}

AskUserResponse carries answers and optional user notes.

type AskUserTool

type AskUserTool struct {
	// contains filtered or unexported fields
}

AskUserTool lets the LLM ask the user structured questions.

func NewAskUser

func NewAskUser() *AskUserTool

NewAskUser creates an AskUserTool with no handler (set later via SetHandler).

func (*AskUserTool) Description

func (t *AskUserTool) Description() string

func (*AskUserTool) Execute

func (t *AskUserTool) Execute(ctx context.Context, args json.RawMessage) (json.RawMessage, error)

func (*AskUserTool) Label

func (t *AskUserTool) Label() string

func (*AskUserTool) Name

func (t *AskUserTool) Name() string

func (*AskUserTool) Schema

func (t *AskUserTool) Schema() map[string]any

func (*AskUserTool) SetHandler

func (t *AskUserTool) SetHandler(h AskUserHandler)

SetHandler sets the UI callback. Must be called before the tool is used.

type CronCreateTool added in v0.0.2

type CronCreateTool struct {
	// contains filtered or unexported fields
}

CronCreateTool creates a scheduled cron job.

func (*CronCreateTool) Description added in v0.0.2

func (t *CronCreateTool) Description() string

func (*CronCreateTool) Execute added in v0.0.2

func (*CronCreateTool) Label added in v0.0.2

func (t *CronCreateTool) Label() string

func (*CronCreateTool) Name added in v0.0.2

func (t *CronCreateTool) Name() string

func (*CronCreateTool) Schema added in v0.0.2

func (t *CronCreateTool) Schema() map[string]any

Schema exposes cron, prompt, recurring to the LLM. The durable parameter is intentionally omitted from the LLM schema but accepted internally (used by /loop command).

func (*CronCreateTool) Store added in v0.0.2

func (t *CronCreateTool) Store() *cron.Store

Store returns the underlying cron.Store.

type CronDeleteTool added in v0.0.2

type CronDeleteTool struct {
	// contains filtered or unexported fields
}

CronDeleteTool deletes a cron job by ID.

func (*CronDeleteTool) Description added in v0.0.2

func (t *CronDeleteTool) Description() string

func (*CronDeleteTool) Execute added in v0.0.2

func (*CronDeleteTool) Label added in v0.0.2

func (t *CronDeleteTool) Label() string

func (*CronDeleteTool) Name added in v0.0.2

func (t *CronDeleteTool) Name() string

func (*CronDeleteTool) Schema added in v0.0.2

func (t *CronDeleteTool) Schema() map[string]any

type CronListTool added in v0.0.2

type CronListTool struct {
	// contains filtered or unexported fields
}

CronListTool lists all cron jobs.

func (*CronListTool) Description added in v0.0.2

func (t *CronListTool) Description() string

func (*CronListTool) Execute added in v0.0.2

func (*CronListTool) Label added in v0.0.2

func (t *CronListTool) Label() string

func (*CronListTool) Name added in v0.0.2

func (t *CronListTool) Name() string

func (*CronListTool) Schema added in v0.0.2

func (t *CronListTool) Schema() map[string]any

type FetchProvider

type FetchProvider interface {
	Fetch(ctx context.Context, targetURL string) (string, error)
}

FetchProvider performs web page content extraction.

type ForkExecutor added in v0.0.4

type ForkExecutor func(ctx context.Context, args json.RawMessage) (json.RawMessage, error)

ForkExecutor runs a task in a forked subagent context. It matches the SubAgentTool.Execute signature so it can be wired directly.

type JinaFetchProvider

type JinaFetchProvider struct {
	APIKey  string
	Client  *http.Client
	BaseURL string
}

func (*JinaFetchProvider) Fetch

func (p *JinaFetchProvider) Fetch(ctx context.Context, targetURL string) (string, error)

type JinaProvider

type JinaProvider struct {
	APIKey  string
	Client  *http.Client // nil uses default with 30s timeout
	BaseURL string       // default: https://s.jina.ai/
}

JinaProvider implements SearchProvider using the Jina search endpoint. It calls POST https://s.jina.ai/ with X-Respond-With: no-content to return only SERP metadata (title, URL, snippet) without full page content.

func (*JinaProvider) Search

func (p *JinaProvider) Search(ctx context.Context, query string, maxResults int) ([]SearchResult, error)

type Option

type Option struct {
	Label       string `json:"label"`
	Description string `json:"description"`
	Preview     string `json:"preview,omitempty"` // optional markdown preview content
}

Option is a selectable choice for a question.

type OutputLimitedTool added in v0.0.2

type OutputLimitedTool struct {
	// contains filtered or unexported fields
}

OutputLimitedTool wraps a Tool and truncates oversized output to disk.

func (*OutputLimitedTool) Description added in v0.0.2

func (t *OutputLimitedTool) Description() string

func (*OutputLimitedTool) Execute added in v0.0.2

func (*OutputLimitedTool) Label added in v0.0.2

func (t *OutputLimitedTool) Label() string

Label forwards the optional ToolLabeler interface.

func (*OutputLimitedTool) Name added in v0.0.2

func (t *OutputLimitedTool) Name() string

func (*OutputLimitedTool) Schema added in v0.0.2

func (t *OutputLimitedTool) Schema() map[string]any

func (*OutputLimitedTool) Unwrap added in v0.0.3

func (t *OutputLimitedTool) Unwrap() agentcore.Tool

Unwrap returns the underlying tool, allowing type assertions through the wrapper.

type Question

type Question struct {
	Question    string   `json:"question"`
	Header      string   `json:"header"`
	Options     []Option `json:"options"`
	MultiSelect bool     `json:"multiSelect"`
}

Question is a single question with selectable options.

type SearchProvider

type SearchProvider interface {
	Search(ctx context.Context, query string, maxResults int) ([]SearchResult, error)
}

SearchProvider performs web searches.

type SearchResult

type SearchResult struct {
	Title   string `json:"title"`
	URL     string `json:"url"`
	Snippet string `json:"content"`
}

SearchResult represents a single web search result.

type SkillTool added in v0.0.4

type SkillTool struct {
	// contains filtered or unexported fields
}

SkillTool lets the LLM invoke skills by name. It loads the skill file, strips frontmatter, expands $ARGUMENTS placeholders, and returns the formatted content as a tool result. Skills with context: fork are delegated to a subagent via the ForkExecutor.

func NewSkillTool added in v0.0.4

func NewSkillTool(skills []config.Skill, sessionID string) *SkillTool

NewSkillTool creates a SkillTool with the given initial skill list.

func (*SkillTool) Description added in v0.0.4

func (t *SkillTool) Description() string

func (*SkillTool) Execute added in v0.0.4

func (t *SkillTool) Execute(ctx context.Context, args json.RawMessage) (json.RawMessage, error)

func (*SkillTool) Label added in v0.0.4

func (t *SkillTool) Label() string

func (*SkillTool) Name added in v0.0.4

func (t *SkillTool) Name() string

func (*SkillTool) Schema added in v0.0.4

func (t *SkillTool) Schema() map[string]any

func (*SkillTool) SetAllowToolsSetter added in v0.0.4

func (t *SkillTool) SetAllowToolsSetter(fn AllowToolsSetter)

SetAllowToolsSetter sets the function used to grant temporary tool permissions.

func (*SkillTool) SetForkExecutor added in v0.0.4

func (t *SkillTool) SetForkExecutor(fn ForkExecutor)

SetForkExecutor sets the function used to run context: fork skills in a subagent.

func (*SkillTool) SetSkills added in v0.0.4

func (t *SkillTool) SetSkills(skills []config.Skill)

SetSkills replaces the skill list (called on /reload).

type Task

type Task struct {
	ID          string         `json:"id"`
	Subject     string         `json:"subject"`
	Description string         `json:"description,omitempty"`
	ActiveForm  string         `json:"activeForm,omitempty"`
	Status      TaskStatus     `json:"status"`
	Owner       string         `json:"owner,omitempty"`
	Blocks      []string       `json:"blocks"`
	BlockedBy   []string       `json:"blockedBy"`
	Metadata    map[string]any `json:"metadata,omitempty"`
}

Task is a single tracked work item.

type TaskCreateTool

type TaskCreateTool struct {
	// contains filtered or unexported fields
}

TaskCreateTool creates new tasks.

func (*TaskCreateTool) Description

func (t *TaskCreateTool) Description() string

func (*TaskCreateTool) Execute

func (*TaskCreateTool) Label

func (t *TaskCreateTool) Label() string

func (*TaskCreateTool) Name

func (t *TaskCreateTool) Name() string

func (*TaskCreateTool) Schema

func (t *TaskCreateTool) Schema() map[string]any

func (*TaskCreateTool) SetNotifyFn

func (t *TaskCreateTool) SetNotifyFn(fn TaskNotifyFn)

SetNotifyFn registers the TUI notification callback (delegates to store).

func (*TaskCreateTool) Store

func (t *TaskCreateTool) Store() *TaskStore

Store returns the underlying TaskStore (used for persistence wiring).

type TaskGetTool

type TaskGetTool struct {
	// contains filtered or unexported fields
}

TaskGetTool retrieves a single task by ID.

func (*TaskGetTool) Description

func (t *TaskGetTool) Description() string

func (*TaskGetTool) Execute

func (t *TaskGetTool) Execute(_ context.Context, args json.RawMessage) (json.RawMessage, error)

func (*TaskGetTool) Label

func (t *TaskGetTool) Label() string

func (*TaskGetTool) Name

func (t *TaskGetTool) Name() string

func (*TaskGetTool) Schema

func (t *TaskGetTool) Schema() map[string]any

type TaskListTool

type TaskListTool struct {
	// contains filtered or unexported fields
}

TaskListTool lists all tasks.

func (*TaskListTool) Description

func (t *TaskListTool) Description() string

func (*TaskListTool) Execute

func (*TaskListTool) Label

func (t *TaskListTool) Label() string

func (*TaskListTool) Name

func (t *TaskListTool) Name() string

func (*TaskListTool) Schema

func (t *TaskListTool) Schema() map[string]any

type TaskNotifyFn

type TaskNotifyFn func(TaskSnapshot)

TaskNotifyFn is called after each store mutation with the latest snapshot.

type TaskSnapshot

type TaskSnapshot struct {
	Tasks      []Task
	Pending    int
	InProgress int
	Completed  int
	Total      int
}

TaskSnapshot is a read-only snapshot of all tasks sent to the TUI.

type TaskStatus

type TaskStatus string

TaskStatus represents the lifecycle state of a task.

const (
	TaskPending    TaskStatus = "pending"
	TaskInProgress TaskStatus = "in_progress"
	TaskCompleted  TaskStatus = "completed"
)

type TaskStore

type TaskStore struct {
	// contains filtered or unexported fields
}

TaskStore is a thread-safe task store with optional file persistence.

func NewTaskStore

func NewTaskStore() *TaskStore

NewTaskStore creates an empty store.

func NewTaskTools

func NewTaskTools() (*TaskStore, []agentcore.Tool)

NewTaskTools creates a TaskStore and the four task tools that share it.

func (*TaskStore) Create

func (s *TaskStore) Create(subject, description, activeForm string, metadata map[string]any) *Task

Create adds a new task and returns a copy.

func (*TaskStore) Get

func (s *TaskStore) Get(id string) (*Task, bool)

Get returns a copy of the task or false if not found.

func (*TaskStore) List

func (s *TaskStore) List() []Task

List returns copies of all non-deleted tasks sorted by ID.

func (*TaskStore) SetDir

func (s *TaskStore) SetDir(dir string) error

SetDir enables file persistence. It creates the directory if needed and loads any existing tasks from disk. Call before the store is used.

func (*TaskStore) SetNotifyFn

func (s *TaskStore) SetNotifyFn(fn TaskNotifyFn)

SetNotifyFn registers a callback invoked after every mutation.

func (*TaskStore) Snapshot

func (s *TaskStore) Snapshot() TaskSnapshot

Snapshot returns the current read-only snapshot (public, for initial TUI state).

func (*TaskStore) Update

func (s *TaskStore) Update(id string, opts UpdateOpts) (*Task, error)

Update modifies a task and returns the updated copy.

type TaskUpdateTool

type TaskUpdateTool struct {
	// contains filtered or unexported fields
}

TaskUpdateTool modifies an existing task.

func (*TaskUpdateTool) Description

func (t *TaskUpdateTool) Description() string

func (*TaskUpdateTool) Execute

func (*TaskUpdateTool) Label

func (t *TaskUpdateTool) Label() string

func (*TaskUpdateTool) Name

func (t *TaskUpdateTool) Name() string

func (*TaskUpdateTool) Schema

func (t *TaskUpdateTool) Schema() map[string]any

type TavilyFetchProvider

type TavilyFetchProvider struct {
	APIKey string
	Client *http.Client
}

func (*TavilyFetchProvider) Fetch

func (p *TavilyFetchProvider) Fetch(ctx context.Context, targetURL string) (string, error)

type TavilyProvider

type TavilyProvider struct {
	APIKey string
	Client *http.Client // nil uses default with 30s timeout
}

TavilyProvider implements SearchProvider using the Tavily API.

func (*TavilyProvider) Search

func (p *TavilyProvider) Search(ctx context.Context, query string, maxResults int) ([]SearchResult, error)

type UpdateOpts

type UpdateOpts struct {
	Status       *TaskStatus
	Subject      *string
	Description  *string
	ActiveForm   *string
	Owner        *string
	Metadata     map[string]any // merged; nil-valued keys are deleted
	AddBlocks    []string
	AddBlockedBy []string
}

UpdateOpts describes optional fields to update.

type WebFetchTool

type WebFetchTool struct {
	// contains filtered or unexported fields
}

WebFetchTool fetches web content and returns markdown.

func NewWebFetch

func NewWebFetch(providerName, apiKey string) *WebFetchTool

NewWebFetch creates a WebFetchTool for the configured provider. Supported providers: tavily, jina.

func (*WebFetchTool) Description

func (t *WebFetchTool) Description() string

func (*WebFetchTool) Execute

func (t *WebFetchTool) Execute(ctx context.Context, args json.RawMessage) (json.RawMessage, error)

func (*WebFetchTool) Label

func (t *WebFetchTool) Label() string

func (*WebFetchTool) Name

func (t *WebFetchTool) Name() string

func (*WebFetchTool) Schema

func (t *WebFetchTool) Schema() map[string]any

type WebSearchTool

type WebSearchTool struct {
	// contains filtered or unexported fields
}

WebSearchTool provides web search capability.

func NewWebSearch

func NewWebSearch(providerName, apiKey string) *WebSearchTool

NewWebSearch creates a WebSearchTool for the configured provider. Supported providers: tavily, jina.

func (*WebSearchTool) Description

func (t *WebSearchTool) Description() string

func (*WebSearchTool) Execute

func (t *WebSearchTool) Execute(ctx context.Context, args json.RawMessage) (json.RawMessage, error)

func (*WebSearchTool) Label

func (t *WebSearchTool) Label() string

func (*WebSearchTool) Name

func (t *WebSearchTool) Name() string

func (*WebSearchTool) Schema

func (t *WebSearchTool) Schema() map[string]any

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL