@salesforce/plugin-agent 1.11.0 → 1.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,14 +5,88 @@
5
5
  * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
6
6
  */
7
7
  import { join, resolve, dirname } from 'node:path';
8
- import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
9
- import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
8
+ import { mkdirSync, readFileSync, writeFileSync, existsSync } from 'node:fs';
9
+ import { SfCommand, Flags, prompts } from '@salesforce/sf-plugins-core';
10
10
  import { Messages } from '@salesforce/core';
11
11
  import YAML from 'yaml';
12
12
  import { Agent } from '@salesforce/agents';
13
- import { FLAGGABLE_SPEC_PROMPTS, makeFlags, promptForFlag, validateAgentType, validateMaxTopics, } from '../../../flags.js';
13
+ import { makeFlags, promptForFlag, validateAgentType, validateMaxTopics } from '../../../flags.js';
14
14
  Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
15
15
  const messages = Messages.loadMessages('@salesforce/plugin-agent', 'agent.generate.spec-v2');
16
+ export const FLAGGABLE_PROMPTS = {
17
+ type: {
18
+ message: messages.getMessage('flags.type.summary'),
19
+ validate: (d) => d.length > 0 || 'Type cannot be empty',
20
+ char: 't',
21
+ options: ['customer', 'internal'],
22
+ required: true,
23
+ },
24
+ role: {
25
+ message: messages.getMessage('flags.role.summary'),
26
+ validate: (d) => d.length > 0 || 'Role cannot be empty',
27
+ required: true,
28
+ },
29
+ 'company-name': {
30
+ message: messages.getMessage('flags.company-name.summary'),
31
+ validate: (d) => d.length > 0 || 'Company name cannot be empty',
32
+ required: true,
33
+ },
34
+ 'company-description': {
35
+ message: messages.getMessage('flags.company-description.summary'),
36
+ validate: (d) => d.length > 0 || 'Company description cannot be empty',
37
+ required: true,
38
+ },
39
+ 'company-website': {
40
+ message: messages.getMessage('flags.company-website.summary'),
41
+ validate: (d) => {
42
+ // Allow empty string
43
+ if (d.length === 0)
44
+ return true;
45
+ try {
46
+ const regExp = new RegExp('^(http|https)://', 'i');
47
+ const companySite = regExp.test(d) ? d : `https://${d}`;
48
+ new URL(companySite);
49
+ d = companySite;
50
+ return true;
51
+ }
52
+ catch (e) {
53
+ return 'Please enter a valid URL';
54
+ }
55
+ },
56
+ },
57
+ 'max-topics': {
58
+ message: messages.getMessage('flags.max-topics.summary'),
59
+ promptMessage: messages.getMessage('flags.max-topics.prompt'),
60
+ validate: () => true,
61
+ // min: 1,
62
+ // max: 30,
63
+ },
64
+ 'agent-user': {
65
+ message: messages.getMessage('flags.agent-user.summary'),
66
+ promptMessage: messages.getMessage('flags.agent-user.prompt'),
67
+ validate: () => true,
68
+ },
69
+ 'enrich-logs': {
70
+ message: messages.getMessage('flags.enrich-logs.summary'),
71
+ promptMessage: messages.getMessage('flags.enrich-logs.prompt'),
72
+ validate: () => true,
73
+ options: ['true', 'false'],
74
+ default: 'false',
75
+ },
76
+ tone: {
77
+ message: messages.getMessage('flags.tone.summary'),
78
+ promptMessage: messages.getMessage('flags.tone.prompt'),
79
+ validate: () => true,
80
+ options: ['formal', 'casual', 'neutral'],
81
+ default: 'casual',
82
+ },
83
+ // 'primary-language': {
84
+ // message: messages.getMessage('flags.primary-language.summary'),
85
+ // validate: (): boolean | string => true,
86
+ // options: ['en_US'],
87
+ // default: 'en_US',
88
+ // },
89
+ };
16
90
  export default class AgentCreateSpecV2 extends SfCommand {
17
91
  static summary = messages.getMessage('summary');
18
92
  static description = messages.getMessage('description');
@@ -22,7 +96,8 @@ export default class AgentCreateSpecV2 extends SfCommand {
22
96
  static flags = {
23
97
  'target-org': Flags.requiredOrg(),
24
98
  'api-version': Flags.orgApiVersion(),
25
- ...makeFlags(FLAGGABLE_SPEC_PROMPTS),
99
+ ...makeFlags(FLAGGABLE_PROMPTS),
100
+ // a spec file can be used as input. Allows iterative spec development.
26
101
  spec: Flags.file({
27
102
  summary: messages.getMessage('flags.spec.summary'),
28
103
  exists: true,
@@ -31,9 +106,8 @@ export default class AgentCreateSpecV2 extends SfCommand {
31
106
  summary: messages.getMessage('flags.output-file.summary'),
32
107
  default: join('config', 'agentSpec.yaml'),
33
108
  }),
34
- 'max-topics': Flags.integer({
35
- summary: messages.getMessage('flags.max-topics.summary'),
36
- min: 1,
109
+ 'full-interview': Flags.boolean({
110
+ summary: messages.getMessage('flags.full-interview.summary'),
37
111
  }),
38
112
  'prompt-template': Flags.string({
39
113
  summary: messages.getMessage('flags.prompt-template.summary'),
@@ -42,13 +116,25 @@ export default class AgentCreateSpecV2 extends SfCommand {
42
116
  summary: messages.getMessage('flags.grounding-context.summary'),
43
117
  dependsOn: ['prompt-template'],
44
118
  }),
119
+ 'no-prompt': Flags.boolean({
120
+ summary: messages.getMessage('flags.no-prompt.summary'),
121
+ }),
45
122
  };
46
123
  // eslint-disable-next-line complexity
47
124
  async run() {
48
125
  const { flags } = await this.parse(AgentCreateSpecV2);
126
+ let outputFile;
127
+ try {
128
+ outputFile = await resolveOutputFile(flags['output-file'], flags['no-prompt']);
129
+ }
130
+ catch (e) {
131
+ this.log(messages.getMessage('commandCanceled'));
132
+ // @ts-expect-error expected due to command cancelation.
133
+ return;
134
+ }
49
135
  // throw error if --json is used and not all required flags are provided
50
136
  if (this.jsonEnabled()) {
51
- const missingFlags = Object.entries(FLAGGABLE_SPEC_PROMPTS)
137
+ const missingFlags = Object.entries(FLAGGABLE_PROMPTS)
52
138
  .filter(([key, prompt]) => 'required' in prompt && prompt.required && !(key in flags))
53
139
  .map(([key]) => key);
54
140
  if (missingFlags.length) {
@@ -63,24 +149,42 @@ export default class AgentCreateSpecV2 extends SfCommand {
63
149
  inputSpec = YAML.parse(readFileSync(resolve(flags.spec), 'utf8'));
64
150
  }
65
151
  // Flags override inputSpec values. Prompt if neither is set.
66
- const type = flags.type ?? validateAgentType(inputSpec?.agentType) ?? (await promptForFlag(FLAGGABLE_SPEC_PROMPTS.type));
67
- const role = flags.role ?? inputSpec?.role ?? (await promptForFlag(FLAGGABLE_SPEC_PROMPTS.role));
68
- const companyName = flags['company-name'] ?? inputSpec?.companyName ?? (await promptForFlag(FLAGGABLE_SPEC_PROMPTS['company-name']));
152
+ const type = flags.type ?? validateAgentType(inputSpec?.agentType) ?? (await promptForFlag(FLAGGABLE_PROMPTS.type));
153
+ const companyName = flags['company-name'] ?? inputSpec?.companyName ?? (await promptForFlag(FLAGGABLE_PROMPTS['company-name']));
69
154
  const companyDescription = flags['company-description'] ??
70
155
  inputSpec?.companyDescription ??
71
- (await promptForFlag(FLAGGABLE_SPEC_PROMPTS['company-description']));
156
+ (await promptForFlag(FLAGGABLE_PROMPTS['company-description']));
157
+ const role = flags.role ?? inputSpec?.role ?? (await promptForFlag(FLAGGABLE_PROMPTS.role));
158
+ // full interview prompts
72
159
  const companyWebsite = flags['company-website'] ??
73
160
  inputSpec?.companyWebsite ??
74
- (await promptForFlag(FLAGGABLE_SPEC_PROMPTS['company-website']));
161
+ (flags['full-interview'] ? await promptForFlag(FLAGGABLE_PROMPTS['company-website']) : undefined);
162
+ const maxNumOfTopics = flags['max-topics'] ??
163
+ validateMaxTopics(inputSpec?.maxNumOfTopics) ??
164
+ (flags['full-interview'] ? await promptForFlag(FLAGGABLE_PROMPTS['max-topics']) : 10);
165
+ const agentUser = flags['agent-user'] ??
166
+ inputSpec?.agentUser ??
167
+ (flags['full-interview'] ? await promptForFlag(FLAGGABLE_PROMPTS['agent-user']) : undefined);
168
+ let enrichLogs = flags['enrich-logs'] ??
169
+ inputSpec?.enrichLogs ??
170
+ (flags['full-interview'] ? await promptForFlag(FLAGGABLE_PROMPTS['enrich-logs']) : undefined);
171
+ enrichLogs = Boolean(enrichLogs === 'true' || enrichLogs === true);
172
+ const tone = flags.tone ??
173
+ inputSpec?.tone ??
174
+ (flags['full-interview'] ? await promptForFlag(FLAGGABLE_PROMPTS.tone) : undefined);
175
+ // const primaryLanguage =
176
+ // flags['primary-language'] ??
177
+ // inputSpec?.primaryLanguage ??
178
+ // (flags['full-interview'] ? await promptForFlag(FLAGGABLE_PROMPTS['primary-language']) : undefined);
75
179
  this.log();
76
180
  this.spinner.start('Creating agent spec');
77
181
  const connection = flags['target-org'].getConnection(flags['api-version']);
78
182
  const agent = new Agent(connection, this.project);
79
183
  const specConfig = {
80
184
  agentType: type,
81
- role,
82
185
  companyName,
83
186
  companyDescription,
187
+ role,
84
188
  };
85
189
  if (companyWebsite) {
86
190
  specConfig.companyWebsite = companyWebsite;
@@ -93,19 +197,51 @@ export default class AgentCreateSpecV2 extends SfCommand {
93
197
  specConfig.groundingContext = groundingContext;
94
198
  }
95
199
  }
96
- const maxNumOfTopics = flags['max-topics'] ?? validateMaxTopics(inputSpec?.maxNumOfTopics);
97
200
  if (maxNumOfTopics) {
98
- specConfig.maxNumOfTopics = maxNumOfTopics;
201
+ specConfig.maxNumOfTopics = Number(maxNumOfTopics);
99
202
  }
100
203
  // Should we log the specConfig being used? It's returned in the JSON and the generated spec.
101
204
  // this.log(`${ansis.green(figures.tick)} ${ansis.bold(message)} ${ansis.cyan(valueFromFlag)}`);
102
- const agentSpec = await agent.createSpecV2(specConfig);
103
- const outputFilePath = writeSpecFile(flags['output-file'], agentSpec);
205
+ const specResponse = await agent.createSpecV2(specConfig);
206
+ // @ts-expect-error Need better typing
207
+ const specFileContents = buildSpecFile(specResponse, { agentUser, enrichLogs, tone });
208
+ const outputFilePath = writeSpecFile(outputFile, specFileContents);
104
209
  this.spinner.stop();
105
210
  this.log(`\nSaved agent spec: ${outputFilePath}`);
106
- return { ...{ isSuccess: true, specPath: outputFilePath }, ...agentSpec };
211
+ return { ...{ isSuccess: true, specPath: outputFilePath }, ...specResponse, ...specFileContents };
107
212
  }
108
213
  }
214
+ // Builds spec file contents from the spec response and any additional flags
215
+ // in a specific order.
216
+ const buildSpecFile = (specResponse, extraProps) => {
217
+ const propertyOrder = [
218
+ 'agentType',
219
+ 'companyName',
220
+ 'companyDescription',
221
+ 'companyWebsite',
222
+ 'role',
223
+ 'maxNumOfTopics',
224
+ 'agentUser',
225
+ 'enrichLogs',
226
+ 'tone',
227
+ // 'primaryLanguage',
228
+ 'promptTemplateName',
229
+ 'groundingContext',
230
+ 'topics',
231
+ ];
232
+ const specFileContents = {};
233
+ propertyOrder.map((prop) => {
234
+ // @ts-expect-error need better typing of the array.
235
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
236
+ const val = specResponse[prop] ?? extraProps[prop];
237
+ if (val != null || (typeof val === 'string' && val.length > 0)) {
238
+ // @ts-expect-error need better typing of the array.
239
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
240
+ specFileContents[prop] = val;
241
+ }
242
+ });
243
+ return specFileContents;
244
+ };
109
245
  const writeSpecFile = (outputFile, agentSpec) => {
110
246
  // create the directory if not already created
111
247
  const outputFilePath = resolve(outputFile);
@@ -114,4 +250,19 @@ const writeSpecFile = (outputFile, agentSpec) => {
114
250
  writeFileSync(outputFilePath, YAML.stringify(agentSpec));
115
251
  return outputFilePath;
116
252
  };
253
+ const resolveOutputFile = async (outputFile, noPrompt = false) => {
254
+ let resolvedOutputFile = resolve(outputFile);
255
+ if (!noPrompt) {
256
+ if (existsSync(resolvedOutputFile)) {
257
+ const message = messages.getMessage('confirmSpecOverwrite', [resolvedOutputFile]);
258
+ if (!(await prompts.confirm({ message }))) {
259
+ throw Error('NoOverwrite');
260
+ }
261
+ }
262
+ }
263
+ if (!resolvedOutputFile.endsWith('.yaml')) {
264
+ resolvedOutputFile = `${resolvedOutputFile}.yaml`;
265
+ }
266
+ return resolvedOutputFile;
267
+ };
117
268
  //# sourceMappingURL=spec-v2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spec-v2.js","sourceRoot":"","sources":["../../../../src/commands/agent/generate/spec-v2.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec-v2.js","sourceRoot":"","sources":["../../../../src/commands/agent/generate/spec-v2.ts"],"names":[],"mappings":"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"}
package/lib/flags.d.ts CHANGED
@@ -6,6 +6,7 @@ export type FlaggablePrompt = {
6
6
  char?: Interfaces.AlphabetLowercase | Interfaces.AlphabetUppercase;
7
7
  required?: boolean;
8
8
  default?: string | boolean;
9
+ promptMessage?: string;
9
10
  };
10
11
  type FlagsOfPrompts<T extends Record<string, FlaggablePrompt>> = Record<keyof T, Interfaces.OptionFlag<string | undefined, Interfaces.CustomOptions>>;
11
12
  export declare const resultFormatFlag: Interfaces.FlagDefinition<"json" | "human" | "junit" | "tap", Interfaces.CustomOptions, {
@@ -16,34 +17,6 @@ export declare const testOutputDirFlag: Interfaces.FlagDefinition<string, Interf
16
17
  multiple: false;
17
18
  requiredOrDefaulted: false;
18
19
  }>;
19
- export declare const FLAGGABLE_SPEC_PROMPTS: {
20
- type: {
21
- message: string;
22
- validate: (d: string) => boolean | string;
23
- char: "t";
24
- options: string[];
25
- required: true;
26
- };
27
- role: {
28
- message: string;
29
- validate: (d: string) => boolean | string;
30
- required: true;
31
- };
32
- 'company-name': {
33
- message: string;
34
- validate: (d: string) => boolean | string;
35
- required: true;
36
- };
37
- 'company-description': {
38
- message: string;
39
- validate: (d: string) => boolean | string;
40
- required: true;
41
- };
42
- 'company-website': {
43
- message: string;
44
- validate: (d: string) => boolean | string;
45
- };
46
- };
47
20
  export declare function makeFlags<T extends Record<string, FlaggablePrompt>>(flaggablePrompts: T): FlagsOfPrompts<T>;
48
21
  export declare const promptForFlag: (flagDef: FlaggablePrompt) => Promise<string>;
49
22
  export declare const validateAgentType: (agentType?: string, required?: boolean) => string | undefined;
package/lib/flags.js CHANGED
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import { Flags } from '@salesforce/sf-plugins-core';
8
8
  import { Messages } from '@salesforce/core';
9
+ import { camelCaseToTitleCase } from '@salesforce/kit';
9
10
  import { select, input as inquirerInput } from '@inquirer/prompts';
10
11
  import { theme } from './inquirer-theme.js';
11
12
  Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
@@ -20,45 +21,6 @@ export const testOutputDirFlag = Flags.custom({
20
21
  description: messages.getMessage('flags.output-dir.description'),
21
22
  summary: messages.getMessage('flags.output-dir.summary'),
22
23
  });
23
- export const FLAGGABLE_SPEC_PROMPTS = {
24
- type: {
25
- message: messages.getMessage('flags.type.summary'),
26
- validate: (d) => d.length > 0 || 'Type cannot be empty',
27
- char: 't',
28
- options: ['customer', 'internal'],
29
- required: true,
30
- },
31
- role: {
32
- message: messages.getMessage('flags.role.summary'),
33
- validate: (d) => d.length > 0 || 'Role cannot be empty',
34
- required: true,
35
- },
36
- 'company-name': {
37
- message: messages.getMessage('flags.company-name.summary'),
38
- validate: (d) => d.length > 0 || 'Company name cannot be empty',
39
- required: true,
40
- },
41
- 'company-description': {
42
- message: messages.getMessage('flags.company-description.summary'),
43
- validate: (d) => d.length > 0 || 'Company description cannot be empty',
44
- required: true,
45
- },
46
- 'company-website': {
47
- message: messages.getMessage('flags.company-website.summary'),
48
- validate: (d) => {
49
- // Allow empty string
50
- if (d.length === 0)
51
- return true;
52
- try {
53
- new URL(d);
54
- return true;
55
- }
56
- catch (e) {
57
- return 'Please enter a valid URL';
58
- }
59
- },
60
- },
61
- };
62
24
  function validateInput(input, validate) {
63
25
  const result = validate(input);
64
26
  if (typeof result === 'string')
@@ -81,10 +43,10 @@ export function makeFlags(flaggablePrompts) {
81
43
  ]));
82
44
  }
83
45
  export const promptForFlag = async (flagDef) => {
84
- const message = flagDef.message.replace(/\.$/, '');
46
+ const message = flagDef.promptMessage ?? flagDef.message.replace(/\.$/, '');
85
47
  if (flagDef.options) {
86
48
  return select({
87
- choices: flagDef.options.map((o) => ({ name: o, value: o })),
49
+ choices: flagDef.options.map((o) => ({ name: camelCaseToTitleCase(o), value: o })),
88
50
  message,
89
51
  theme,
90
52
  });
package/lib/flags.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"flags.js","sourceRoot":"","sources":["../src/flags.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flags.js","sourceRoot":"","sources":["../src/flags.ts"],"names":[],"mappings":"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"}
@@ -28,30 +28,18 @@ Name (label) of the new agent.
28
28
 
29
29
  API name of the new agent; if not specified, the API name is derived from the agent name (label); the API name must not exist in the org.
30
30
 
31
- # flags.user-id.summary
32
-
33
- ID of a user in your org that is assigned to your agent; determines what your agent can access and do.
34
-
35
- # flags.enrich-logs.summary
36
-
37
- Adds agent conversation data to event logs so you can view all agent session activity in one place.
38
-
39
- # flags.tone.summary
40
-
41
- Conversational style of the agent, such as how it expresses your brand personality in its messages through word choice, punctuation, and sentence structure.
42
-
43
- # flags.primary-language.summary
44
-
45
- Language the agent uses in conversations.
46
-
47
31
  # flags.planner-id.summary
48
32
 
49
- The GenAiPlanner ID to associate with the agent.
33
+ An existing GenAiPlanner ID to associate with the agent.
50
34
 
51
35
  # error.missingRequiredFlags
52
36
 
53
37
  Missing required flags: %s
54
38
 
39
+ # error.missingRequiredSpecProperties
40
+
41
+ Missing required spec file properties: %s
42
+
55
43
  # examples
56
44
 
57
45
  - Create an agent called "ResortManager" in an org with alias "my-org" using the specified agent spec file:
@@ -14,6 +14,26 @@ You can also specify a custom prompt template that the agent uses, and ground th
14
14
 
15
15
  When your agent spec is ready, you then create the agent in your org by running the "agent create" CLI command and specifying the spec with the --spec flag.
16
16
 
17
+ # flags.type.summary
18
+
19
+ Type of agent to create.
20
+
21
+ # flags.role.summary
22
+
23
+ Role of the agent.
24
+
25
+ # flags.company-name.summary
26
+
27
+ Name of your company.
28
+
29
+ # flags.company-description.summary
30
+
31
+ Description of your company.
32
+
33
+ # flags.company-website.summary
34
+
35
+ Website URL of your company.
36
+
17
37
  # flags.output-file.summary
18
38
 
19
39
  Path for the generated YAML agent spec file; can be an absolute or relative path.
@@ -22,6 +42,10 @@ Path for the generated YAML agent spec file; can be an absolute or relative path
22
42
 
23
43
  Maximum number of topics to generate in the agent spec; default is 10.
24
44
 
45
+ # flags.max-topics.prompt
46
+
47
+ Max number of topics to generate (1-30)
48
+
25
49
  # flags.prompt-template.summary
26
50
 
27
51
  API name of a customized prompt template to use instead of the default prompt template.
@@ -34,6 +58,42 @@ Context information and personalization that's added to your prompts when using
34
58
 
35
59
  Agent spec file, in YAML format, to use as input to the command.
36
60
 
61
+ # flags.full-interview.summary
62
+
63
+ Prompt for both required and optional flags.
64
+
65
+ # flags.agent-user.summary
66
+
67
+ Username of a user in your org to assign to your agent; determines what your agent can access and do.
68
+
69
+ # flags.agent-user.prompt
70
+
71
+ Username for agent
72
+
73
+ # flags.enrich-logs.summary
74
+
75
+ Adds agent conversation data to event logs so you can view all agent session activity in one place.
76
+
77
+ # flags.enrich-logs.prompt
78
+
79
+ Enrich event logs
80
+
81
+ # flags.tone.summary
82
+
83
+ Conversational style of the agent, such as how it expresses your brand personality in its messages through word choice, punctuation, and sentence structure.
84
+
85
+ # flags.tone.prompt
86
+
87
+ Agent conversation tone
88
+
89
+ # flags.primary-language.summary
90
+
91
+ Language the agent uses in conversations.
92
+
93
+ # flags.no-prompt.summary
94
+
95
+ Don't prompt the user to confirm spec file overwrite.
96
+
37
97
  # examples
38
98
 
39
99
  - Generate an agent spec in the default location and use flags to specify the agent properties, such as its role and your company details; use your default org:
@@ -51,3 +111,11 @@ Agent spec file, in YAML format, to use as input to the command.
51
111
  # error.missingRequiredFlags
52
112
 
53
113
  Missing required flags: %s
114
+
115
+ # confirmSpecOverwrite
116
+
117
+ Confirm overwrite of spec file %s?
118
+
119
+ # commandCanceled
120
+
121
+ Command canceled by user confirmation.
@@ -10,26 +10,6 @@ Directory to write the agent test results into.
10
10
 
11
11
  If the agent test run completes, write the results to the specified directory. If the test is still running, the test results aren't written.
12
12
 
13
- # flags.type.summary
14
-
15
- Type of agent to create.
16
-
17
- # flags.role.summary
18
-
19
- Role of the agent.
20
-
21
- # flags.company-name.summary
22
-
23
- Name of your company.
24
-
25
- # flags.company-description.summary
26
-
27
- Description of your company.
28
-
29
- # flags.company-website.summary
30
-
31
- Website URL of your company.
32
-
33
13
  # error.invalidAgentType
34
14
 
35
15
  agentType must be either "customer" or "internal". Found: [%s]