tools

package
v0.29.0 Latest Latest
Warning

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

Go to latest
Published: Jan 11, 2026 License: MIT Imports: 19 Imported by: 0

Documentation

Index

Constants

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

Variables

View Source
var ConfirmInteractive = func(message string) ConfirmResult {
	yellow.Printf("%s [y/n/c]: ", message)

	reader := bufio.NewReader(os.Stdin)
	response, err := reader.ReadString('\n')
	if err != nil {
		return ConfirmResult{Action: "no"}
	}
	response = strings.ToLower(strings.TrimSpace(response))

	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. Assuming 'no'.")
	return ConfirmResult{Action: "no"}
}

ConfirmInteractive は拡張確認プロンプト (y/n/c) c (comment) を選択すると複数行コメントを入力できる 外部パッケージからも使用可能なようにエクスポート

View Source
var DefaultRegistry = NewRegistry()

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

View Source
var ValidatePath = validatePathImpl

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

Functions

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=1 で有効化

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 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 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 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 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 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

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 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 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 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"`
	Args map[string]string `json:"args"`
}

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

func ParseToolCall

func ParseToolCall(response string) *ToolCall

ParseToolCall はレスポンスからツール呼び出しを抽出

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