tools

package
v0.35.0 Latest Latest
Warning

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

Go to latest
Published: Jan 17, 2026 License: MIT Imports: 24 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// 最大画像サイズ: 10MB
	MaxImageSize = 10 * 1024 * 1024
)

Variables

View Source
var ConfirmInteractive = func(message string) ConfirmResult {
	reader := bufio.NewReader(os.Stdin)

	for {
		yellow.Printf("%s [y/n/c]: ", message)

		response, err := reader.ReadString('\n')
		if err != nil {

			return ConfirmResult{Action: "no"}
		}
		response = strings.ToLower(strings.TrimSpace(response))

		if response == "" {
			continue
		}

		if response == "y" || response == "yes" || response == "y" || response == "はい" {
			return ConfirmResult{Action: "yes"}
		}

		if response == "n" || response == "no" || response == "n" || response == "いいえ" {
			return ConfirmResult{Action: "no"}
		}

		if response == "c" || response == "comment" || response == "コメント" {
			comment, image := readMultiLineComment(reader)
			return ConfirmResult{Action: "comment", Comment: comment, Image: image}
		}

		yellow.Println("Invalid input. Please enter y/n/c.")
	}
}

ConfirmInteractive は拡張確認プロンプト (y/n/c) c (comment) を選択すると複数行コメントを入力できる 外部パッケージからも使用可能なようにエクスポート NOTE: テスト時は環境変数 XELYON_INTERACTIVE_CONFIRM=0 で無効化される

View Source
var DefaultRegistry = NewRegistry()

DefaultRegistry はデフォルトのツールレジストリ

View Source
var ValidatePath = validatePathImpl

ValidatePath はパストラバーサル攻撃を防ぐためにパスを検証(テスト用にグローバル変数として定義)

Functions

func ConfirmApproved added in v0.31.0

func ConfirmApproved(message string) bool

ConfirmApproved is a compatibility helper that preserves the old bool-based API. NOTE: This drops comment/image information.

func FormatSize added in v0.29.0

func FormatSize(bytes int64) string

FormatSize はバイト数を人間が読みやすい形式に変換

func GetSafetyDescription added in v0.29.0

func GetSafetyDescription(safety ToolSafety) string

GetSafetyDescription は安全性レベルの説明を返す

func IsAutoApprovable added in v0.29.0

func IsAutoApprovable(toolName string, autoApprove bool) bool

IsAutoApprovable は --auto-approve フラグで自動承認可能かを判定

func IsInteractiveModeEnabled added in v0.29.0

func IsInteractiveModeEnabled() bool

IsInteractiveModeEnabled は対話的確認モードが有効かチェック デフォルトは有効。

無効化したい場合は以下のいずれかを設定:

  • XELYON_INTERACTIVE_CONFIRM=0
  • XELYON_INTERACTIVE_CONFIRM=false

func IsSafeToolAutoApprovable added in v0.31.0

func IsSafeToolAutoApprovable(toolName string) bool

IsSafeToolAutoApprovable は SafetyHigh ツールを設定に基づいて自動承認するか判定 config.tool_confirm.auto_approve_safe が true の場合、SafetyHigh ツールは確認なしで実行

func PreviewToolCall added in v0.31.0

func PreviewToolCall(tc *ToolCall)

PreviewToolCall displays tool information without executing it

func RegisterBuiltinTools

func RegisterBuiltinTools(r *Registry)

RegisterBuiltinTools はすべての組み込みツールを登録

func SetAutoApprove added in v0.29.0

func SetAutoApprove(enabled bool)

SetAutoApprove は --auto-approve フラグを設定

func ValidatePathAllowParent

func ValidatePathAllowParent(path string) (string, error)

ValidatePathAllowParent は親ディレクトリへのアクセスを許可 (特定の用途でのみ使用)

Types

type AppendFileTool

type AppendFileTool struct{}

===== Append File Tool =====

func (*AppendFileTool) Name

func (t *AppendFileTool) Name() string

func (*AppendFileTool) Run

func (t *AppendFileTool) Run(args map[string]string) (string, *FileChange, error)

type AstGrepTool added in v0.35.0

type AstGrepTool struct{}

AstGrepTool provides structural code search using ast-grep (Tree-sitter based)

func (*AstGrepTool) Name added in v0.35.0

func (t *AstGrepTool) Name() string

func (*AstGrepTool) Run added in v0.35.0

func (t *AstGrepTool) Run(args map[string]string) (string, *FileChange, error)

type BashTool

type BashTool struct{}

===== Bash Tool =====

func (*BashTool) Name

func (t *BashTool) Name() string

func (*BashTool) Run

func (t *BashTool) Run(args map[string]string) (string, *FileChange, error)

type ConfirmAction added in v0.31.0

type ConfirmAction string

ConfirmAction is the normalized action returned by confirmation prompts.

const (
	ConfirmYes     ConfirmAction = "yes"
	ConfirmNo      ConfirmAction = "no"
	ConfirmComment ConfirmAction = "comment"
)

type ConfirmDecision added in v0.31.0

type ConfirmDecision struct {
	Action  ConfirmAction
	Comment string
	Image   *ImageData
}

ConfirmDecision is the unified result for all confirmation prompts. Comment/Image are only set when Action==ConfirmComment.

func Confirm added in v0.31.0

func Confirm(message string) ConfirmDecision

Confirm asks user for confirmation and optionally captures feedback. If interactive confirmation is enabled, it supports y/n/c and multi-line comments. Otherwise it falls back to legacy y/n confirm.

type ConfirmResult added in v0.29.0

type ConfirmResult struct {
	Action  string     // "yes", "no", "comment"
	Comment string     // "comment" の場合のコメント内容
	Image   *ImageData // 画像データ(オプション)
}

ConfirmResult は確認結果

type CopyFileTool

type CopyFileTool struct{}

===== Copy File Tool =====

func (*CopyFileTool) Name

func (t *CopyFileTool) Name() string

func (*CopyFileTool) Run

func (t *CopyFileTool) Run(args map[string]string) (string, *FileChange, error)

type CreateDirTool

type CreateDirTool struct{}

===== Create Directory Tool =====

func (*CreateDirTool) Name

func (t *CreateDirTool) Name() string

func (*CreateDirTool) Run

func (t *CreateDirTool) Run(args map[string]string) (string, *FileChange, error)

type DeleteFileTool

type DeleteFileTool struct{}

DeleteFileTool deletes a file permanently (with backup)

func (*DeleteFileTool) Name

func (t *DeleteFileTool) Name() string

func (*DeleteFileTool) Run

func (t *DeleteFileTool) Run(args map[string]string) (string, *FileChange, error)

type DeleteLinesTool

type DeleteLinesTool struct{}

DeleteLinesTool deletes a range of lines from a file

func (*DeleteLinesTool) Name

func (t *DeleteLinesTool) Name() string

func (*DeleteLinesTool) Run

func (t *DeleteLinesTool) Run(args map[string]string) (string, *FileChange, error)

type DiffFilesTool added in v0.31.0

type DiffFilesTool struct{}

DiffFilesTool compares two files and shows differences

func (*DiffFilesTool) Name added in v0.31.0

func (t *DiffFilesTool) Name() string

func (*DiffFilesTool) Run added in v0.31.0

func (t *DiffFilesTool) Run(args map[string]string) (string, *FileChange, error)

type FileChange

type FileChange struct {
	FilePath    string
	BackupPath  string
	Timestamp   time.Time
	Tool        string
	Description string
}

FileChange はファイル変更履歴

func Execute

func Execute(tc *ToolCall) (string, *FileChange)

Execute はツールを実行(Registry経由)

type FileReplaceResult added in v0.31.0

type FileReplaceResult struct {
	FilePath   string
	MatchCount int
	BackupPath string
}

FileReplaceResult は1ファイルの置換結果

type FormatTool

type FormatTool struct{}

===== Format Tool =====

func (*FormatTool) Name

func (t *FormatTool) Name() string

func (*FormatTool) Run

func (t *FormatTool) Run(args map[string]string) (string, *FileChange, error)

type GitAddTool

type GitAddTool struct{}

===== Git Add Tool =====

func (*GitAddTool) Name

func (t *GitAddTool) Name() string

func (*GitAddTool) Run

func (t *GitAddTool) Run(args map[string]string) (string, *FileChange, error)

type GitBranchTool

type GitBranchTool struct{}

===== Git Branch Tool =====

func (*GitBranchTool) Name

func (t *GitBranchTool) Name() string

func (*GitBranchTool) Run

func (t *GitBranchTool) Run(args map[string]string) (string, *FileChange, error)

type GitCheckoutTool

type GitCheckoutTool struct{}

===== Git Checkout Tool =====

func (*GitCheckoutTool) Name

func (t *GitCheckoutTool) Name() string

func (*GitCheckoutTool) Run

func (t *GitCheckoutTool) Run(args map[string]string) (string, *FileChange, error)

type GitCommitTool

type GitCommitTool struct{}

===== Git Commit Tool =====

func (*GitCommitTool) Name

func (t *GitCommitTool) Name() string

func (*GitCommitTool) Run

func (t *GitCommitTool) Run(args map[string]string) (string, *FileChange, error)

type GitDiffTool

type GitDiffTool struct{}

===== Git Diff Tool =====

func (*GitDiffTool) Name

func (t *GitDiffTool) Name() string

func (*GitDiffTool) Run

func (t *GitDiffTool) Run(args map[string]string) (string, *FileChange, error)

type GitLogTool

type GitLogTool struct{}

===== Git Log Tool =====

func (*GitLogTool) Name

func (t *GitLogTool) Name() string

func (*GitLogTool) Run

func (t *GitLogTool) Run(args map[string]string) (string, *FileChange, error)

type GitPushTool

type GitPushTool struct{}

===== Git Push Tool =====

func (*GitPushTool) Name

func (t *GitPushTool) Name() string

func (*GitPushTool) Run

func (t *GitPushTool) Run(args map[string]string) (string, *FileChange, error)

type GitStashTool

type GitStashTool struct{}

===== Git Stash Tool =====

func (*GitStashTool) Name

func (t *GitStashTool) Name() string

func (*GitStashTool) Run

func (t *GitStashTool) Run(args map[string]string) (string, *FileChange, error)

type GitStatusTool

type GitStatusTool struct{}

===== Git Status Tool =====

func (*GitStatusTool) Name

func (t *GitStatusTool) Name() string

func (*GitStatusTool) Run

func (t *GitStatusTool) Run(args map[string]string) (string, *FileChange, error)

type GrepReplaceResult added in v0.31.0

type GrepReplaceResult struct {
	FilesModified int
	TotalMatches  int
	FileResults   []FileReplaceResult
	BackupPaths   map[string]string // filepath -> backupPath
}

GrepReplaceResult は一括置換の結果

type GrepReplaceTool added in v0.31.0

type GrepReplaceTool struct{}

GrepReplaceTool performs bulk find-and-replace across multiple files

func (*GrepReplaceTool) Name added in v0.31.0

func (t *GrepReplaceTool) Name() string

func (*GrepReplaceTool) Run added in v0.31.0

func (t *GrepReplaceTool) Run(args map[string]string) (string, *FileChange, error)

type HTTPRequestTool added in v0.31.0

type HTTPRequestTool struct{}

HTTPRequestTool executes HTTP requests

func (*HTTPRequestTool) Name added in v0.31.0

func (t *HTTPRequestTool) Name() string

func (*HTTPRequestTool) Run added in v0.31.0

func (t *HTTPRequestTool) Run(args map[string]string) (string, *FileChange, error)

type HTTPResponse added in v0.31.0

type HTTPResponse struct {
	StatusCode int               `json:"status_code"`
	Status     string            `json:"status"`
	Headers    map[string]string `json:"headers"`
	Body       string            `json:"body"`
	Duration   string            `json:"duration"`
}

HTTPResponse はHTTPリクエストの結果

type ImageData added in v0.29.0

type ImageData struct {
	Path      string // 元のファイルパス
	MediaType string // "image/png", "image/jpeg" 等
	Base64    string // Base64エンコードされた画像データ
	Size      int64  // ファイルサイズ(バイト)
}

ImageData は画像データを表す

func ConfirmWithFeedback added in v0.29.0

func ConfirmWithFeedback(message string) (approved bool, comment string, image *ImageData)

ConfirmWithFeedback は対話的確認を行う(互換ラッパー) interactiveMode=true の場合は y/n/c、false の場合は従来の y/n

NOTE: 新コードでは Confirm() / ConfirmDecision の利用を推奨。

func LoadImage added in v0.29.0

func LoadImage(path string) (*ImageData, error)

LoadImage は画像ファイルを読み込んでBase64エンコードする

type InsertAfterTool

type InsertAfterTool struct{}

===== Insert After Tool =====

func (*InsertAfterTool) Name

func (t *InsertAfterTool) Name() string

func (*InsertAfterTool) Run

func (t *InsertAfterTool) Run(args map[string]string) (string, *FileChange, error)

type InsertBeforeTool

type InsertBeforeTool struct{}

===== Insert Before Tool =====

func (*InsertBeforeTool) Name

func (t *InsertBeforeTool) Name() string

func (*InsertBeforeTool) Run

func (t *InsertBeforeTool) Run(args map[string]string) (string, *FileChange, error)

type LintTool

type LintTool struct{}

LintTool runs linter with optional auto-fix

func (*LintTool) Name

func (t *LintTool) Name() string

func (*LintTool) Run

func (t *LintTool) Run(args map[string]string) (string, *FileChange, error)

type ListBackupsTool added in v0.35.0

type ListBackupsTool struct{}

ListBackupsTool lists available backups for a file

func (*ListBackupsTool) Name added in v0.35.0

func (t *ListBackupsTool) Name() string

func (*ListBackupsTool) Run added in v0.35.0

func (t *ListBackupsTool) Run(args map[string]string) (string, *FileChange, error)

type ListDirTool

type ListDirTool struct{}

===== List Dir Tool =====

func (*ListDirTool) Name

func (t *ListDirTool) Name() string

func (*ListDirTool) Run

func (t *ListDirTool) Run(args map[string]string) (string, *FileChange, error)

type MoveFileTool

type MoveFileTool struct{}

MoveFileTool moves/renames a file

func (*MoveFileTool) Name

func (t *MoveFileTool) Name() string

func (*MoveFileTool) Run

func (t *MoveFileTool) Run(args map[string]string) (string, *FileChange, error)

type PatternSuggestion added in v0.31.0

type PatternSuggestion struct {
	Pattern string
	Lang    string
	Hint    string
}

PatternSuggestion はパターン提案の構造体

func GetPatternSuggestion added in v0.31.0

func GetPatternSuggestion(query string) PatternSuggestion

GetPatternSuggestion は自然言語クエリから推奨パターンを返す(LLM支援用) この関数はLLMが自然言語をast-grepパターンに変換する際の参考として使用できる

type PrependFileTool

type PrependFileTool struct{}

===== Prepend File Tool =====

func (*PrependFileTool) Name

func (t *PrependFileTool) Name() string

func (*PrependFileTool) Run

func (t *PrependFileTool) Run(args map[string]string) (string, *FileChange, error)

type ReadFileTool

type ReadFileTool struct{}

===== Read File Tool =====

func (*ReadFileTool) Name

func (t *ReadFileTool) Name() string

func (*ReadFileTool) Run

func (t *ReadFileTool) Run(args map[string]string) (string, *FileChange, error)

type Registry

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

Registry はツールの登録・管理を行う

func NewRegistry

func NewRegistry() *Registry

NewRegistry は新しいRegistryを作成

func (*Registry) Execute

func (r *Registry) Execute(tc *ToolCall) (string, *FileChange)

Execute はツール呼び出しを実行(スレッドセーフ + 監査ログ記録)

func (*Registry) Register

func (r *Registry) Register(tool Tool)

Register はツールを登録(スレッドセーフ)

type RestoreBackupTool added in v0.31.0

type RestoreBackupTool struct{}

RestoreBackupTool restores a file from its backup

func (*RestoreBackupTool) Name added in v0.31.0

func (t *RestoreBackupTool) Name() string

func (*RestoreBackupTool) Run added in v0.31.0

func (t *RestoreBackupTool) Run(args map[string]string) (string, *FileChange, error)

type RunTestTool

type RunTestTool struct{}

===== Run Test Tool =====

func (*RunTestTool) Name

func (t *RunTestTool) Name() string

func (*RunTestTool) Run

func (t *RunTestTool) Run(args map[string]string) (string, *FileChange, error)

type SearchCodeTool

type SearchCodeTool struct{}

===== Search Code Tool =====

func (*SearchCodeTool) Name

func (t *SearchCodeTool) Name() string

func (*SearchCodeTool) Run

func (t *SearchCodeTool) Run(args map[string]string) (string, *FileChange, error)

type SearchFileTool

type SearchFileTool struct{}

===== Search File Tool =====

func (*SearchFileTool) Name

func (t *SearchFileTool) Name() string

func (*SearchFileTool) Run

func (t *SearchFileTool) Run(args map[string]string) (string, *FileChange, error)

type StrReplaceTool

type StrReplaceTool struct{}

===== Str Replace Tool =====

func (*StrReplaceTool) Name

func (t *StrReplaceTool) Name() string

func (*StrReplaceTool) Run

func (t *StrReplaceTool) Run(args map[string]string) (string, *FileChange, error)

type Tool

type Tool interface {
	// Name はツール名を返す
	Name() string

	// Run はツールを実行
	// output: ツールの実行結果
	// change: ファイル変更情報(変更がない場合はnil)
	// err: エラー(エラーがない場合はnil)
	Run(args map[string]string) (output string, change *FileChange, err error)
}

Tool はツールの共通インターフェース

type ToolCall

type ToolCall struct {
	Tool    string         `json:"tool"`
	RawArgs map[string]any `json:"args"`
	Args    map[string]string
}

ToolCall はAIからのツール呼び出し

func ParseToolCall

func ParseToolCall(response string) *ToolCall

ParseToolCall はレスポンスからツール呼び出しを抽出(最初の1つのみ - 後方互換)

func ParseToolCalls added in v0.31.0

func ParseToolCalls(response string) []*ToolCall

ParseToolCalls はレスポンスから全てのツール呼び出しを抽出 Markdownコードブロック内のJSONは除外する

func (*ToolCall) NormalizeArgs added in v0.31.0

func (tc *ToolCall) NormalizeArgs()

NormalizeArgs はRawArgsをArgsに変換(数値→文字列)

type ToolSafety added in v0.29.0

type ToolSafety int

ToolSafety はツールの安全性レベル

const (
	// SafetyHigh - 読み取り専用操作(常に自動承認OK)
	SafetyHigh ToolSafety = iota
	// SafetyMedium - 書き込み操作(--auto-approve で承認)
	SafetyMedium
	// SafetyLow - 破壊的操作(常に確認必須)
	SafetyLow
)

func GetToolSafety added in v0.29.0

func GetToolSafety(toolName string) ToolSafety

GetToolSafety は指定されたツールの安全性レベルを返す 定義されていないツールは SafetyMedium(中レベル)として扱う

type WebSearchTool

type WebSearchTool struct{}

===== Web Search Tool =====

func (*WebSearchTool) Name

func (t *WebSearchTool) Name() string

func (*WebSearchTool) Run

func (t *WebSearchTool) Run(args map[string]string) (string, *FileChange, error)

type WriteFileTool

type WriteFileTool struct{}

===== Write File Tool =====

func (*WriteFileTool) Name

func (t *WriteFileTool) Name() string

func (*WriteFileTool) Run

func (t *WriteFileTool) Run(args map[string]string) (string, *FileChange, error)

Jump to

Keyboard shortcuts

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