blob: a873ee3cf4e534b317912d9c04d3125c0315cb21 [file]
import 'agent_tool_metadata.dart';
/// Unique identifiers for the available agent tools.
enum AgentToolId {
readFile,
readLines,
grep,
glob,
fuzzyFileSearch,
writeFile,
applyPatch,
deleteFile,
analyzeStart,
askQuestion,
planExit,
workspaceMaintenance,
generateImage,
controlApp,
getWidgetTree,
getWidgetDetails,
findWidget,
screenshotWidget,
tapWidget,
enterText,
scrollWidget,
changeDeviceMode,
}
/// Canonical metadata derived from each [AgentToolId].
extension AgentToolIdMetadata on AgentToolId {
/// The UI presentation category for this tool.
AgentToolUiKind get uiKind => switch (this) {
AgentToolId.readFile || AgentToolId.readLines || AgentToolId.analyzeStart => AgentToolUiKind.read,
AgentToolId.grep || AgentToolId.glob || AgentToolId.fuzzyFileSearch => AgentToolUiKind.search,
AgentToolId.askQuestion || AgentToolId.planExit => AgentToolUiKind.interaction,
AgentToolId.writeFile ||
AgentToolId.applyPatch ||
AgentToolId.deleteFile ||
AgentToolId.workspaceMaintenance => AgentToolUiKind.edit,
AgentToolId.generateImage ||
AgentToolId.controlApp ||
AgentToolId.getWidgetTree ||
AgentToolId.getWidgetDetails ||
AgentToolId.findWidget ||
AgentToolId.screenshotWidget ||
AgentToolId.tapWidget ||
AgentToolId.enterText ||
AgentToolId.scrollWidget ||
AgentToolId.changeDeviceMode => AgentToolUiKind.preview,
};
/// Security or functional capability flags for this tool.
Set<AgentToolCapability> get capabilities => switch (this) {
AgentToolId.readFile ||
AgentToolId.readLines ||
AgentToolId.grep ||
AgentToolId.glob ||
AgentToolId.fuzzyFileSearch => const {AgentToolCapability.workspaceReadSearch},
AgentToolId.askQuestion || AgentToolId.planExit => const {AgentToolCapability.userInteraction},
AgentToolId.writeFile || AgentToolId.applyPatch || AgentToolId.deleteFile => const {
AgentToolCapability.workspaceMutate,
AgentToolCapability.requiresAnalysisAfterUse,
},
AgentToolId.workspaceMaintenance => const {
AgentToolCapability.workspaceMutate,
AgentToolCapability.requiresAnalysisAfterUse,
},
AgentToolId.analyzeStart => const {AgentToolCapability.workspaceReadSearch},
AgentToolId.generateImage ||
AgentToolId.controlApp ||
AgentToolId.getWidgetTree ||
AgentToolId.getWidgetDetails ||
AgentToolId.findWidget ||
AgentToolId.screenshotWidget ||
AgentToolId.tapWidget ||
AgentToolId.enterText ||
AgentToolId.scrollWidget ||
AgentToolId.changeDeviceMode => const {},
};
}