File size: 4,724 Bytes
7a1ad33
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/**
 * @license
 * Copyright 2026 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */

/**
 * Represents a test agent used in evaluations and tests.
 */
export interface TestAgent {
  /** The unique name of the agent. */
  readonly name: string;
  /** The full YAML/Markdown definition of the agent. */
  readonly definition: string;
  /** The standard path where this agent should be saved in a test project. */
  readonly path: string;
  /** A helper to spread this agent directly into a 'files' object for evalTest. */
  readonly asFile: () => Record<string, string>;
}

/**
 * Helper to create a TestAgent with consistent formatting and pathing.
 */
function createAgent(options: {
  name: string;
  description: string;
  tools: string[];
  body: string;
}): TestAgent {
  const definition = `---
name: ${options.name}
description: ${options.description}
tools:
${options.tools.map((t) => `  - ${t}`).join('\n')}
---
${options.body}
`;

  const path = `.gemini/agents/${options.name}.md`;

  return {
    name: options.name,
    definition,
    path,
    asFile: () => ({ [path]: definition }),
  };
}

/**
 * A collection of predefined test agents for use in evaluations and tests.
 */
export const TEST_AGENTS = {
  /**
   * An agent with expertise in updating documentation.
   */
  DOCS_AGENT: createAgent({
    name: 'docs-agent',
    description: 'An agent with expertise in updating documentation.',
    tools: ['read_file', 'write_file', 'list_directory', 'grep_search', 'glob'],
    body: 'You are the docs agent. Update documentation clearly and accurately.',
  }),

  /**
   * An agent with expertise in writing and updating tests.
   */
  TESTING_AGENT: createAgent({
    name: 'testing-agent',
    description: 'An agent with expertise in writing and updating tests.',
    tools: ['read_file', 'write_file', 'list_directory', 'grep_search', 'glob'],
    body: 'You are the test agent. Add or update tests.',
  }),
  /**
   * An agent with expertise in database schemas, SQL, and creating database migrations.
   */
  DATABASE_AGENT: createAgent({
    name: 'database-agent',
    description:
      'An expert in database schemas, SQL, and creating database migrations.',
    tools: ['read_file', 'write_file', 'list_directory', 'grep_search', 'glob'],
    body: 'You are the database agent. Create and update SQL migrations.',
  }),

  /**
   * An agent with expertise in CSS, styling, and UI design.
   */
  CSS_AGENT: createAgent({
    name: 'css-agent',
    description: 'An expert in CSS, styling, and UI design.',
    tools: ['read_file', 'write_file', 'list_directory', 'grep_search', 'glob'],
    body: 'You are the CSS agent.',
  }),

  /**
   * An agent with expertise in internationalization and translations.
   */
  I18N_AGENT: createAgent({
    name: 'i18n-agent',
    description: 'An expert in internationalization and translations.',
    tools: ['read_file', 'write_file', 'list_directory', 'grep_search', 'glob'],
    body: 'You are the i18n agent.',
  }),

  /**
   * An agent with expertise in security audits and vulnerability patches.
   */
  SECURITY_AGENT: createAgent({
    name: 'security-agent',
    description: 'An expert in security audits and vulnerability patches.',
    tools: ['read_file', 'write_file', 'list_directory', 'grep_search', 'glob'],
    body: 'You are the security agent.',
  }),

  /**
   * An agent with expertise in CI/CD, Docker, and deployment scripts.
   */
  DEVOPS_AGENT: createAgent({
    name: 'devops-agent',
    description: 'An expert in CI/CD, Docker, and deployment scripts.',
    tools: ['read_file', 'write_file', 'list_directory', 'grep_search', 'glob'],
    body: 'You are the devops agent.',
  }),

  /**
   * An agent with expertise in tracking, analytics, and metrics.
   */
  ANALYTICS_AGENT: createAgent({
    name: 'analytics-agent',
    description: 'An expert in tracking, analytics, and metrics.',
    tools: ['read_file', 'write_file', 'list_directory', 'grep_search', 'glob'],
    body: 'You are the analytics agent.',
  }),

  /**
   * An agent with expertise in web accessibility and ARIA roles.
   */
  ACCESSIBILITY_AGENT: createAgent({
    name: 'accessibility-agent',
    description: 'An expert in web accessibility and ARIA roles.',
    tools: ['read_file', 'write_file', 'list_directory', 'grep_search', 'glob'],
    body: 'You are the accessibility agent.',
  }),

  /**
   * An agent with expertise in React Native and mobile app development.
   */
  MOBILE_AGENT: createAgent({
    name: 'mobile-agent',
    description: 'An expert in React Native and mobile app development.',
    tools: ['read_file', 'write_file', 'list_directory', 'grep_search', 'glob'],
    body: 'You are the mobile agent.',
  }),
} as const;