@salesforce/plugin-agent 1.11.0 → 1.12.0

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.
@@ -1,16 +1,67 @@
1
1
  import { SfCommand } from '@salesforce/sf-plugins-core';
2
- import { Interfaces } from '@oclif/core';
2
+ import { AgentJobSpecV2 } from '@salesforce/agents';
3
3
  export type AgentCreateSpecResult = {
4
4
  isSuccess: boolean;
5
5
  errorMessage?: string;
6
- jobSpec?: string;
6
+ specPath?: string;
7
+ } & AgentJobSpecV2;
8
+ export type AgentSpecFileContents = AgentJobSpecV2 & {
9
+ agentUser?: string;
10
+ enrichLogs?: boolean;
11
+ tone?: 'casual' | 'formal' | 'neutral';
12
+ primaryLanguage?: 'en_US';
7
13
  };
8
- type FlaggablePrompt = {
9
- message: string;
10
- options?: readonly string[] | string[];
11
- validate: (d: string) => boolean | string;
12
- char?: Interfaces.AlphabetLowercase | Interfaces.AlphabetUppercase;
13
- required?: boolean;
14
+ export declare const FLAGGABLE_PROMPTS: {
15
+ type: {
16
+ message: string;
17
+ validate: (d: string) => boolean | string;
18
+ char: "t";
19
+ options: string[];
20
+ required: true;
21
+ };
22
+ role: {
23
+ message: string;
24
+ validate: (d: string) => boolean | string;
25
+ required: true;
26
+ };
27
+ 'company-name': {
28
+ message: string;
29
+ validate: (d: string) => boolean | string;
30
+ required: true;
31
+ };
32
+ 'company-description': {
33
+ message: string;
34
+ validate: (d: string) => boolean | string;
35
+ required: true;
36
+ };
37
+ 'company-website': {
38
+ message: string;
39
+ validate: (d: string) => boolean | string;
40
+ };
41
+ 'max-topics': {
42
+ message: string;
43
+ promptMessage: string;
44
+ validate: () => boolean | string;
45
+ };
46
+ 'agent-user': {
47
+ message: string;
48
+ promptMessage: string;
49
+ validate: () => boolean | string;
50
+ };
51
+ 'enrich-logs': {
52
+ message: string;
53
+ promptMessage: string;
54
+ validate: () => boolean | string;
55
+ options: string[];
56
+ default: string;
57
+ };
58
+ tone: {
59
+ message: string;
60
+ promptMessage: string;
61
+ validate: () => boolean | string;
62
+ options: string[];
63
+ default: string;
64
+ };
14
65
  };
15
66
  export default class AgentCreateSpec extends SfCommand<AgentCreateSpecResult> {
16
67
  static readonly summary: string;
@@ -19,24 +70,23 @@ export default class AgentCreateSpec extends SfCommand<AgentCreateSpecResult> {
19
70
  static state: string;
20
71
  static readonly requiresProject = true;
21
72
  static readonly flags: {
22
- 'output-dir': Interfaces.OptionFlag<string, Interfaces.CustomOptions>;
23
- 'file-name': Interfaces.OptionFlag<string, Interfaces.CustomOptions>;
24
- type: Interfaces.OptionFlag<string | undefined, Interfaces.CustomOptions>;
25
- role: Interfaces.OptionFlag<string | undefined, Interfaces.CustomOptions>;
26
- "company-name": Interfaces.OptionFlag<string | undefined, Interfaces.CustomOptions>;
27
- "company-description": Interfaces.OptionFlag<string | undefined, Interfaces.CustomOptions>;
28
- "company-website": Interfaces.OptionFlag<string | undefined, Interfaces.CustomOptions>;
29
- 'target-org': Interfaces.OptionFlag<import("@salesforce/core").Org, Interfaces.CustomOptions>;
30
- 'api-version': Interfaces.OptionFlag<string | undefined, Interfaces.CustomOptions>;
73
+ spec: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
74
+ 'output-file': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
75
+ 'full-interview': import("@oclif/core/interfaces").BooleanFlag<boolean>;
76
+ 'prompt-template': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
77
+ 'grounding-context': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
78
+ 'no-prompt': import("@oclif/core/interfaces").BooleanFlag<boolean>;
79
+ type: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
80
+ role: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
81
+ "company-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
82
+ "company-description": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
83
+ "company-website": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
84
+ "max-topics": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
85
+ "agent-user": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
86
+ "enrich-logs": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
87
+ tone: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
88
+ 'target-org': import("@oclif/core/interfaces").OptionFlag<import("@salesforce/core").Org, import("@oclif/core/interfaces").CustomOptions>;
89
+ 'api-version': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
31
90
  };
32
91
  run(): Promise<AgentCreateSpecResult>;
33
- /**
34
- * Get a flag value or prompt the user for a value.
35
- *
36
- * Resolution order:
37
- * - Flag value provided by the user
38
- * - Prompt the user for a value
39
- */
40
- getFlagOrPrompt(valueFromFlag: string | undefined, flagDef: FlaggablePrompt): Promise<string>;
41
92
  }
42
- export {};
@@ -4,18 +4,16 @@
4
4
  * Licensed under the BSD 3-Clause license.
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
- import { join } from 'node:path';
8
- import { writeFileSync } from 'node:fs';
9
- import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
7
+ import { join, resolve, dirname } from 'node:path';
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
- import ansis from 'ansis';
12
- import { select, input as inquirerInput } from '@inquirer/prompts';
13
- import figures from '@inquirer/figures';
11
+ import YAML from 'yaml';
14
12
  import { Agent } from '@salesforce/agents';
15
- import { theme } from '../../../inquirer-theme.js';
13
+ import { makeFlags, promptForFlag, validateAgentType, validateMaxTopics } from '../../../flags.js';
16
14
  Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
17
15
  const messages = Messages.loadMessages('@salesforce/plugin-agent', 'agent.generate.spec');
18
- const FLAGGABLE_PROMPTS = {
16
+ export const FLAGGABLE_PROMPTS = {
19
17
  type: {
20
18
  message: messages.getMessage('flags.type.summary'),
21
19
  validate: (d) => d.length > 0 || 'Type cannot be empty',
@@ -45,7 +43,10 @@ const FLAGGABLE_PROMPTS = {
45
43
  if (d.length === 0)
46
44
  return true;
47
45
  try {
48
- new URL(d);
46
+ const regExp = new RegExp('^(http|https)://', 'i');
47
+ const companySite = regExp.test(d) ? d : `https://${d}`;
48
+ new URL(companySite);
49
+ d = companySite;
49
50
  return true;
50
51
  }
51
52
  catch (e) {
@@ -53,28 +54,39 @@ const FLAGGABLE_PROMPTS = {
53
54
  }
54
55
  },
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
+ // },
56
89
  };
57
- function validateInput(input, validate) {
58
- const result = validate(input);
59
- if (typeof result === 'string')
60
- throw new Error(result);
61
- return input;
62
- }
63
- function makeFlags(flaggablePrompts) {
64
- return Object.fromEntries(Object.entries(flaggablePrompts).map(([key, value]) => [
65
- key,
66
- Flags.string({
67
- summary: value.message,
68
- options: value.options,
69
- char: value.char,
70
- // eslint-disable-next-line @typescript-eslint/require-await
71
- async parse(input) {
72
- return validateInput(input, value.validate);
73
- },
74
- // NOTE: we purposely omit the required property here because we want to allow the flag to be missing in interactive mode
75
- }),
76
- ]));
77
- }
78
90
  export default class AgentCreateSpec extends SfCommand {
79
91
  static summary = messages.getMessage('summary');
80
92
  static description = messages.getMessage('description');
@@ -85,83 +97,172 @@ export default class AgentCreateSpec extends SfCommand {
85
97
  'target-org': Flags.requiredOrg(),
86
98
  'api-version': Flags.orgApiVersion(),
87
99
  ...makeFlags(FLAGGABLE_PROMPTS),
88
- 'output-dir': Flags.directory({
89
- char: 'd',
100
+ // a spec file can be used as input. Allows iterative spec development.
101
+ spec: Flags.file({
102
+ summary: messages.getMessage('flags.spec.summary'),
90
103
  exists: true,
91
- summary: messages.getMessage('flags.output-dir.summary'),
92
- default: 'config',
93
104
  }),
94
- 'file-name': Flags.string({
95
- char: 'f',
96
- summary: messages.getMessage('flags.file-name.summary'),
97
- default: 'agentSpec.json',
105
+ 'output-file': Flags.file({
106
+ summary: messages.getMessage('flags.output-file.summary'),
107
+ default: join('config', 'agentSpec.yaml'),
108
+ }),
109
+ 'full-interview': Flags.boolean({
110
+ summary: messages.getMessage('flags.full-interview.summary'),
111
+ }),
112
+ 'prompt-template': Flags.string({
113
+ summary: messages.getMessage('flags.prompt-template.summary'),
114
+ }),
115
+ 'grounding-context': Flags.string({
116
+ summary: messages.getMessage('flags.grounding-context.summary'),
117
+ dependsOn: ['prompt-template'],
118
+ }),
119
+ 'no-prompt': Flags.boolean({
120
+ summary: messages.getMessage('flags.no-prompt.summary'),
98
121
  }),
99
122
  };
123
+ // eslint-disable-next-line complexity
100
124
  async run() {
101
125
  const { flags } = await this.parse(AgentCreateSpec);
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
+ }
102
135
  // throw error if --json is used and not all required flags are provided
103
136
  if (this.jsonEnabled()) {
104
137
  const missingFlags = Object.entries(FLAGGABLE_PROMPTS)
105
138
  .filter(([key, prompt]) => 'required' in prompt && prompt.required && !(key in flags))
106
139
  .map(([key]) => key);
107
140
  if (missingFlags.length) {
108
- throw new Error(`Missing required flags: ${missingFlags.join(', ')}`);
141
+ throw messages.createError('error.missingRequiredFlags', [missingFlags.join(', ')]);
109
142
  }
110
143
  }
111
144
  this.log();
112
145
  this.styledHeader('Agent Details');
113
- const type = (await this.getFlagOrPrompt(flags.type, FLAGGABLE_PROMPTS.type));
114
- const role = await this.getFlagOrPrompt(flags.role, FLAGGABLE_PROMPTS.role);
115
- const companyName = await this.getFlagOrPrompt(flags['company-name'], FLAGGABLE_PROMPTS['company-name']);
116
- const companyDescription = await this.getFlagOrPrompt(flags['company-description'], FLAGGABLE_PROMPTS['company-description']);
117
- const companyWebsite = await this.getFlagOrPrompt(flags['company-website'], FLAGGABLE_PROMPTS['company-website']);
146
+ // If spec is provided, read it first
147
+ let inputSpec = {};
148
+ if (flags.spec) {
149
+ inputSpec = YAML.parse(readFileSync(resolve(flags.spec), 'utf8'));
150
+ }
151
+ // Flags override inputSpec values. Prompt if neither is set.
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']));
154
+ const companyDescription = flags['company-description'] ??
155
+ inputSpec?.companyDescription ??
156
+ (await promptForFlag(FLAGGABLE_PROMPTS['company-description']));
157
+ const role = flags.role ?? inputSpec?.role ?? (await promptForFlag(FLAGGABLE_PROMPTS.role));
158
+ // full interview prompts
159
+ const companyWebsite = flags['company-website'] ??
160
+ inputSpec?.companyWebsite ??
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);
118
179
  this.log();
119
180
  this.spinner.start('Creating agent spec');
120
181
  const connection = flags['target-org'].getConnection(flags['api-version']);
121
182
  const agent = new Agent(connection, this.project);
122
- const agentSpec = await agent.createSpec({
123
- name: flags['file-name'].split('.json')[0],
124
- type,
125
- role,
183
+ const specConfig = {
184
+ agentType: type,
126
185
  companyName,
127
186
  companyDescription,
128
- companyWebsite,
129
- });
130
- // Write a file with the returned job specs
131
- const filePath = join(flags['output-dir'], flags['file-name']);
132
- writeFileSync(filePath, JSON.stringify({ type, role, companyName, companyDescription, companyWebsite, jobSpec: agentSpec }, null, 4));
133
- this.spinner.stop();
134
- this.log(`\nSaved agent spec: ${filePath}`);
135
- return {
136
- isSuccess: true,
137
- jobSpec: filePath,
187
+ role,
138
188
  };
139
- }
140
- /**
141
- * Get a flag value or prompt the user for a value.
142
- *
143
- * Resolution order:
144
- * - Flag value provided by the user
145
- * - Prompt the user for a value
146
- */
147
- async getFlagOrPrompt(valueFromFlag, flagDef) {
148
- const message = flagDef.message.replace(/\.$/, '');
149
- if (valueFromFlag) {
150
- this.log(`${ansis.green(figures.tick)} ${ansis.bold(message)} ${ansis.cyan(valueFromFlag)}`);
151
- return valueFromFlag;
189
+ if (companyWebsite) {
190
+ specConfig.companyWebsite = companyWebsite;
152
191
  }
153
- if (flagDef.options) {
154
- return select({
155
- choices: flagDef.options.map((o) => ({ name: o, value: o })),
156
- message,
157
- theme,
158
- });
192
+ const promptTemplateName = flags['prompt-template'] ?? inputSpec?.promptTemplateName;
193
+ if (promptTemplateName) {
194
+ specConfig.promptTemplateName = promptTemplateName;
195
+ const groundingContext = flags['grounding-context'] ?? inputSpec?.groundingContext;
196
+ if (groundingContext) {
197
+ specConfig.groundingContext = groundingContext;
198
+ }
159
199
  }
160
- return inquirerInput({
161
- message,
162
- validate: flagDef.validate,
163
- theme,
164
- });
200
+ if (maxNumOfTopics) {
201
+ specConfig.maxNumOfTopics = Number(maxNumOfTopics);
202
+ }
203
+ // Should we log the specConfig being used? It's returned in the JSON and the generated spec.
204
+ // this.log(`${ansis.green(figures.tick)} ${ansis.bold(message)} ${ansis.cyan(valueFromFlag)}`);
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);
209
+ this.spinner.stop();
210
+ this.log(`\nSaved agent spec: ${outputFilePath}`);
211
+ return { ...{ isSuccess: true, specPath: outputFilePath }, ...specResponse, ...specFileContents };
165
212
  }
166
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
+ };
245
+ const writeSpecFile = (outputFile, agentSpec) => {
246
+ // create the directory if not already created
247
+ const outputFilePath = resolve(outputFile);
248
+ mkdirSync(dirname(outputFilePath), { recursive: true });
249
+ // Write a yaml file with the returned job specs
250
+ writeFileSync(outputFilePath, YAML.stringify(agentSpec));
251
+ return outputFilePath;
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
+ };
167
268
  //# sourceMappingURL=spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../../../src/commands/agent/generate/spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../../../src/commands/agent/generate/spec.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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"}