@salesforce/plugin-agent 1.14.4 → 1.14.5-dev.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.
- package/README.md +24 -21
- package/lib/commands/agent/create.js +2 -2
- package/lib/commands/agent/create.js.map +1 -1
- package/lib/commands/agent/generate/test-spec.d.ts +3 -0
- package/lib/commands/agent/generate/test-spec.js +125 -76
- package/lib/commands/agent/generate/test-spec.js.map +1 -1
- package/lib/commands/agent/test/create.d.ts +3 -1
- package/lib/commands/agent/test/create.js +55 -16
- package/lib/commands/agent/test/create.js.map +1 -1
- package/lib/flags.d.ts +1 -0
- package/lib/flags.js +33 -0
- package/lib/flags.js.map +1 -1
- package/lib/handleTestResults.js +2 -21
- package/lib/handleTestResults.js.map +1 -1
- package/messages/agent.generate.test-spec.md +4 -0
- package/messages/agent.test.create.md +13 -7
- package/npm-shrinkwrap.json +194 -23
- package/oclif.lock +94 -39
- package/oclif.manifest.json +20 -7
- package/package.json +5 -4
- package/lib/read-dir.d.ts +0 -1
- package/lib/read-dir.js +0 -16
- package/lib/read-dir.js.map +0 -1
package/README.md
CHANGED
|
@@ -132,7 +132,7 @@ EXAMPLES
|
|
|
132
132
|
$ sf agent create --agent-name "Resort Manager" --spec specs/resortManagerAgent.yaml --preview
|
|
133
133
|
```
|
|
134
134
|
|
|
135
|
-
_See code: [src/commands/agent/create.ts](https://github.com/salesforcecli/plugin-agent/blob/1.14.
|
|
135
|
+
_See code: [src/commands/agent/create.ts](https://github.com/salesforcecli/plugin-agent/blob/1.14.5-dev.1/src/commands/agent/create.ts)_
|
|
136
136
|
|
|
137
137
|
## `sf agent generate agent-spec`
|
|
138
138
|
|
|
@@ -236,7 +236,7 @@ EXAMPLES
|
|
|
236
236
|
$ sf agent generate agent-spec --tone formal --agent-user resortmanager@myorg.com
|
|
237
237
|
```
|
|
238
238
|
|
|
239
|
-
_See code: [src/commands/agent/generate/agent-spec.ts](https://github.com/salesforcecli/plugin-agent/blob/1.14.
|
|
239
|
+
_See code: [src/commands/agent/generate/agent-spec.ts](https://github.com/salesforcecli/plugin-agent/blob/1.14.5-dev.1/src/commands/agent/generate/agent-spec.ts)_
|
|
240
240
|
|
|
241
241
|
## `sf agent generate template`
|
|
242
242
|
|
|
@@ -269,7 +269,7 @@ EXAMPLES
|
|
|
269
269
|
$ sf agent generate template --agent-api-name My_Packaged_Agent
|
|
270
270
|
```
|
|
271
271
|
|
|
272
|
-
_See code: [src/commands/agent/generate/template.ts](https://github.com/salesforcecli/plugin-agent/blob/1.14.
|
|
272
|
+
_See code: [src/commands/agent/generate/template.ts](https://github.com/salesforcecli/plugin-agent/blob/1.14.5-dev.1/src/commands/agent/generate/template.ts)_
|
|
273
273
|
|
|
274
274
|
## `sf agent generate test-spec`
|
|
275
275
|
|
|
@@ -277,7 +277,10 @@ Interactively generate a specification file for a AI evaluation test.
|
|
|
277
277
|
|
|
278
278
|
```
|
|
279
279
|
USAGE
|
|
280
|
-
$ sf agent generate test-spec [--flags-dir <value>]
|
|
280
|
+
$ sf agent generate test-spec [--flags-dir <value>] [-d <value>]
|
|
281
|
+
|
|
282
|
+
FLAGS
|
|
283
|
+
-d, --output-dir=<value> [default: specs] The directory to save the generated spec file.
|
|
281
284
|
|
|
282
285
|
GLOBAL FLAGS
|
|
283
286
|
--flags-dir=<value> Import flag values from a directory.
|
|
@@ -292,7 +295,7 @@ EXAMPLES
|
|
|
292
295
|
$ sf agent generate test-spec
|
|
293
296
|
```
|
|
294
297
|
|
|
295
|
-
_See code: [src/commands/agent/generate/test-spec.ts](https://github.com/salesforcecli/plugin-agent/blob/1.14.
|
|
298
|
+
_See code: [src/commands/agent/generate/test-spec.ts](https://github.com/salesforcecli/plugin-agent/blob/1.14.5-dev.1/src/commands/agent/generate/test-spec.ts)_
|
|
296
299
|
|
|
297
300
|
## `sf agent preview`
|
|
298
301
|
|
|
@@ -327,43 +330,43 @@ FLAG DESCRIPTIONS
|
|
|
327
330
|
the API name of the agent? (TBD based on agents library)
|
|
328
331
|
```
|
|
329
332
|
|
|
330
|
-
_See code: [src/commands/agent/preview.ts](https://github.com/salesforcecli/plugin-agent/blob/1.14.
|
|
333
|
+
_See code: [src/commands/agent/preview.ts](https://github.com/salesforcecli/plugin-agent/blob/1.14.5-dev.1/src/commands/agent/preview.ts)_
|
|
331
334
|
|
|
332
335
|
## `sf agent test create`
|
|
333
336
|
|
|
334
|
-
|
|
337
|
+
Convert a test spec file into an AiEvaluationDefinition and deploy it to your org.
|
|
335
338
|
|
|
336
339
|
```
|
|
337
340
|
USAGE
|
|
338
|
-
$ sf agent test create -
|
|
341
|
+
$ sf agent test create -o <value> [--json] [--flags-dir <value>] [--api-name <value>] [--spec <value>] [--api-version
|
|
342
|
+
<value>] [--preview] [-p]
|
|
339
343
|
|
|
340
344
|
FLAGS
|
|
341
345
|
-o, --target-org=<value> (required) Username or alias of the target org. Not required if the `target-org`
|
|
342
346
|
configuration variable is already set.
|
|
343
347
|
-p, --no-prompt Don't prompt for confirmation when overwriting an existing test.
|
|
344
|
-
|
|
348
|
+
--api-name=<value> The API name of the AiEvaluationDefinition.
|
|
345
349
|
--api-version=<value> Override the api version used for api requests made by this command
|
|
346
350
|
--preview Preview the test metadata without deploying to your org.
|
|
351
|
+
--spec=<value> The path to the spec file.
|
|
347
352
|
|
|
348
353
|
GLOBAL FLAGS
|
|
349
354
|
--flags-dir=<value> Import flag values from a directory.
|
|
350
355
|
--json Format output as json.
|
|
351
356
|
|
|
352
357
|
DESCRIPTION
|
|
353
|
-
|
|
358
|
+
Convert a test spec file into an AiEvaluationDefinition and deploy it to your org.
|
|
359
|
+
|
|
360
|
+
This command will convert a test spec file into an AiEvaluationDefinition and deploy it to your org. The spec file
|
|
361
|
+
must be in yaml format.
|
|
354
362
|
|
|
355
|
-
|
|
363
|
+
Use the --preview flag to see the metadata that will be deployed without actually deploying it.
|
|
356
364
|
|
|
357
365
|
EXAMPLES
|
|
358
366
|
$ sf agent test create
|
|
359
|
-
|
|
360
|
-
FLAG DESCRIPTIONS
|
|
361
|
-
-s, --spec=<value> Description of a flag.
|
|
362
|
-
|
|
363
|
-
More information about a flag. Don't repeat the summary.
|
|
364
367
|
```
|
|
365
368
|
|
|
366
|
-
_See code: [src/commands/agent/test/create.ts](https://github.com/salesforcecli/plugin-agent/blob/1.14.
|
|
369
|
+
_See code: [src/commands/agent/test/create.ts](https://github.com/salesforcecli/plugin-agent/blob/1.14.5-dev.1/src/commands/agent/test/create.ts)_
|
|
367
370
|
|
|
368
371
|
## `sf agent test list`
|
|
369
372
|
|
|
@@ -392,7 +395,7 @@ EXAMPLES
|
|
|
392
395
|
$ sf agent test list
|
|
393
396
|
```
|
|
394
397
|
|
|
395
|
-
_See code: [src/commands/agent/test/list.ts](https://github.com/salesforcecli/plugin-agent/blob/1.14.
|
|
398
|
+
_See code: [src/commands/agent/test/list.ts](https://github.com/salesforcecli/plugin-agent/blob/1.14.5-dev.1/src/commands/agent/test/list.ts)_
|
|
396
399
|
|
|
397
400
|
## `sf agent test results`
|
|
398
401
|
|
|
@@ -448,7 +451,7 @@ FLAG DESCRIPTIONS
|
|
|
448
451
|
test results aren't written.
|
|
449
452
|
```
|
|
450
453
|
|
|
451
|
-
_See code: [src/commands/agent/test/results.ts](https://github.com/salesforcecli/plugin-agent/blob/1.14.
|
|
454
|
+
_See code: [src/commands/agent/test/results.ts](https://github.com/salesforcecli/plugin-agent/blob/1.14.5-dev.1/src/commands/agent/test/results.ts)_
|
|
452
455
|
|
|
453
456
|
## `sf agent test resume`
|
|
454
457
|
|
|
@@ -511,7 +514,7 @@ FLAG DESCRIPTIONS
|
|
|
511
514
|
test results aren't written.
|
|
512
515
|
```
|
|
513
516
|
|
|
514
|
-
_See code: [src/commands/agent/test/resume.ts](https://github.com/salesforcecli/plugin-agent/blob/1.14.
|
|
517
|
+
_See code: [src/commands/agent/test/resume.ts](https://github.com/salesforcecli/plugin-agent/blob/1.14.5-dev.1/src/commands/agent/test/resume.ts)_
|
|
515
518
|
|
|
516
519
|
## `sf agent test run`
|
|
517
520
|
|
|
@@ -574,6 +577,6 @@ FLAG DESCRIPTIONS
|
|
|
574
577
|
test results aren't written.
|
|
575
578
|
```
|
|
576
579
|
|
|
577
|
-
_See code: [src/commands/agent/test/run.ts](https://github.com/salesforcecli/plugin-agent/blob/1.14.
|
|
580
|
+
_See code: [src/commands/agent/test/run.ts](https://github.com/salesforcecli/plugin-agent/blob/1.14.5-dev.1/src/commands/agent/test/run.ts)_
|
|
578
581
|
|
|
579
582
|
<!-- commandsstop -->
|
|
@@ -13,7 +13,7 @@ import { MultiStageOutput } from '@oclif/multi-stage-output';
|
|
|
13
13
|
import { input as inquirerInput } from '@inquirer/prompts';
|
|
14
14
|
import { colorize } from '@oclif/core/ux';
|
|
15
15
|
import { Agent, AgentCreateLifecycleStagesV2, generateAgentApiName, } from '@salesforce/agents';
|
|
16
|
-
import { makeFlags, promptForFlag, getAgentUserId, validateAgentType, validateTone, } from '../../flags.js';
|
|
16
|
+
import { makeFlags, promptForFlag, getAgentUserId, validateAgentType, validateTone, promptForYamlFile, } from '../../flags.js';
|
|
17
17
|
import { theme } from '../../inquirer-theme.js';
|
|
18
18
|
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
19
19
|
const messages = Messages.loadMessages('@salesforce/plugin-agent', 'agent.create');
|
|
@@ -90,7 +90,7 @@ export default class AgentCreate extends SfCommand {
|
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
// If we don't have an agent spec yet, prompt.
|
|
93
|
-
const specPath = flags.spec ?? (await
|
|
93
|
+
const specPath = flags.spec ?? (await promptForYamlFile(FLAGGABLE_PROMPTS['spec']));
|
|
94
94
|
// Read the agent spec and validate
|
|
95
95
|
const inputSpec = YAML.parse(readFileSync(resolve(specPath), 'utf8'));
|
|
96
96
|
validateSpec(inputSpec);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/agent/create.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,KAAK,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,KAAK,EAGL,4BAA4B,EAE5B,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,SAAS,EACT,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,YAAY,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/agent/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,5 +5,8 @@ export default class AgentGenerateTestSpec extends SfCommand<void> {
|
|
|
5
5
|
static readonly examples: string[];
|
|
6
6
|
static readonly enableJsonFlag = false;
|
|
7
7
|
static readonly state = "beta";
|
|
8
|
+
static readonly flags: {
|
|
9
|
+
'output-dir': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
};
|
|
8
11
|
run(): Promise<void>;
|
|
9
12
|
}
|
|
@@ -1,45 +1,71 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) 2025, salesforce.com, inc.
|
|
3
3
|
* All rights reserved.
|
|
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
7
|
import { readFile } from 'node:fs/promises';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
import { existsSync } from 'node:fs';
|
|
10
|
+
import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
|
|
11
|
+
import { Messages, SfError, SfProject } from '@salesforce/core';
|
|
11
12
|
import { generateTestSpec } from '@salesforce/agents';
|
|
12
13
|
import { select, input, confirm, checkbox } from '@inquirer/prompts';
|
|
13
14
|
import { XMLParser } from 'fast-xml-parser';
|
|
15
|
+
import { ComponentSetBuilder } from '@salesforce/source-deploy-retrieve';
|
|
14
16
|
import { theme } from '../../../inquirer-theme.js';
|
|
15
|
-
import { readDir } from '../../../read-dir.js';
|
|
16
17
|
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
17
18
|
const messages = Messages.loadMessages('@salesforce/plugin-agent', 'agent.generate.test-spec');
|
|
18
19
|
function castArray(value) {
|
|
19
20
|
return Array.isArray(value) ? value : [value];
|
|
20
21
|
}
|
|
21
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Prompts the user for test case information through interactive prompts.
|
|
24
|
+
*
|
|
25
|
+
* @param genAiPlugins - Record mapping topic names to GenAiPlugin XML file paths (used to find the related actions)
|
|
26
|
+
* @param genAiFunctions - Array of GenAiFunction names from the GenAiPlanner
|
|
27
|
+
* @returns Promise resolving to a TestCase object containing:
|
|
28
|
+
* - utterance: The user input string
|
|
29
|
+
* - expectedTopic: The expected topic for classification
|
|
30
|
+
* - expectedActions: Array of expected action names
|
|
31
|
+
* - expectedOutcome: Expected outcome string
|
|
32
|
+
*
|
|
33
|
+
* @remarks
|
|
34
|
+
* This function guides users through creating a test case by:
|
|
35
|
+
* 1. Prompting for an utterance
|
|
36
|
+
* 2. Selecting an expected topic (from GenAiPlugins specified in the Bot's GenAiPlanner)
|
|
37
|
+
* 3. Choosing expected actions (from GenAiFunctions in the GenAiPlanner or GenAiPlugin)
|
|
38
|
+
* 4. Defining an expected outcome
|
|
39
|
+
*/
|
|
40
|
+
async function promptForTestCase(genAiPlugins, genAiFunctions) {
|
|
22
41
|
const utterance = await input({
|
|
23
42
|
message: 'Utterance',
|
|
24
43
|
validate: (d) => d.length > 0 || 'utterance cannot be empty',
|
|
25
44
|
theme,
|
|
26
45
|
});
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
46
|
+
const expectedTopic = await select({
|
|
47
|
+
message: 'Expected topic',
|
|
48
|
+
choices: Object.keys(genAiPlugins),
|
|
49
|
+
theme,
|
|
50
|
+
});
|
|
51
|
+
// GenAiFunctions (aka actions) can be defined in the GenAiPlugin or GenAiPlanner
|
|
52
|
+
// the actions from the planner are passed in as an argument to this function
|
|
53
|
+
// the actions from the plugin are read from the GenAiPlugin file
|
|
54
|
+
let actions = [];
|
|
55
|
+
if (genAiPlugins[expectedTopic]) {
|
|
56
|
+
const genAiPluginXml = await readFile(genAiPlugins[expectedTopic], 'utf-8');
|
|
57
|
+
const parser = new XMLParser();
|
|
58
|
+
const parsed = parser.parse(genAiPluginXml);
|
|
59
|
+
actions = castArray(parsed.GenAiPlugin.genAiFunctions ?? []).map((f) => f.functionName);
|
|
60
|
+
}
|
|
61
|
+
const expectedActions = await checkbox({
|
|
30
62
|
message: 'Expected action(s)',
|
|
31
|
-
|
|
32
|
-
if (!d.length) {
|
|
33
|
-
return 'expected value cannot be empty';
|
|
34
|
-
}
|
|
35
|
-
return true;
|
|
36
|
-
},
|
|
63
|
+
choices: [...actions, ...genAiFunctions],
|
|
37
64
|
theme,
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
message: 'Expected response',
|
|
65
|
+
required: true,
|
|
66
|
+
});
|
|
67
|
+
const expectedOutcome = await input({
|
|
68
|
+
message: 'Expected outcome',
|
|
43
69
|
validate: (d) => {
|
|
44
70
|
if (!d.length) {
|
|
45
71
|
return 'expected value cannot be empty';
|
|
@@ -48,62 +74,91 @@ async function promptForTestCase(genAiPlugins) {
|
|
|
48
74
|
},
|
|
49
75
|
theme,
|
|
50
76
|
});
|
|
51
|
-
const expectedTopic = await select({
|
|
52
|
-
message: 'Expected topic',
|
|
53
|
-
choices: [...topics, customKey],
|
|
54
|
-
theme,
|
|
55
|
-
});
|
|
56
|
-
if (expectedTopic === customKey) {
|
|
57
|
-
return {
|
|
58
|
-
utterance,
|
|
59
|
-
expectedTopic: await input({
|
|
60
|
-
message: 'Expected topic',
|
|
61
|
-
validate: (d) => {
|
|
62
|
-
if (!d.length) {
|
|
63
|
-
return 'expected value cannot be empty';
|
|
64
|
-
}
|
|
65
|
-
return true;
|
|
66
|
-
},
|
|
67
|
-
theme,
|
|
68
|
-
}),
|
|
69
|
-
// If the user selects OTHER for the topic, then we don't have a genAiPlugin to get actions from so we ask for them for custom input
|
|
70
|
-
expectedActions: await askForOtherActions(),
|
|
71
|
-
expectedOutcome: await askForBotRating(),
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
const genAiPluginXml = await readFile(genAiPlugins[expectedTopic], 'utf-8');
|
|
75
|
-
const parser = new XMLParser();
|
|
76
|
-
const parsed = parser.parse(genAiPluginXml);
|
|
77
|
-
const actions = castArray(parsed.GenAiPlugin.genAiFunctions).map((f) => f.functionName);
|
|
78
|
-
let expectedActions = await checkbox({
|
|
79
|
-
message: 'Expected action(s)',
|
|
80
|
-
choices: [...actions, customKey],
|
|
81
|
-
theme,
|
|
82
|
-
required: true,
|
|
83
|
-
});
|
|
84
|
-
if (expectedActions.includes(customKey)) {
|
|
85
|
-
const additional = await askForOtherActions();
|
|
86
|
-
expectedActions = [...expectedActions.filter((a) => a !== customKey), ...additional];
|
|
87
|
-
}
|
|
88
|
-
const expectedOutcome = await askForBotRating();
|
|
89
77
|
return {
|
|
90
78
|
utterance,
|
|
79
|
+
expectedTopic,
|
|
91
80
|
expectedActions,
|
|
92
81
|
expectedOutcome,
|
|
93
|
-
expectedTopic,
|
|
94
82
|
};
|
|
95
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Retrieves GenAIPlugins and GenAiFunctions from a Bot's GenAiPlanner
|
|
86
|
+
*
|
|
87
|
+
* We have to get the bot version and planner for the selected bot so that we can get
|
|
88
|
+
* the actions (GenAiFunctions) and topics (GenAiPlugins) that can be selected for the
|
|
89
|
+
* test cases.
|
|
90
|
+
*
|
|
91
|
+
* The BotVersion tells us which GenAiPlanner to use, and the GenAiPlanner
|
|
92
|
+
* tells us which GenAiPlugins and GenAiFunctions are available. More GenAiFunctions
|
|
93
|
+
* might be available in the GenAiPlugin, so we read those later when the user
|
|
94
|
+
* has selected a GenAiPlugin/topic - inside of `promptForTestCase`.
|
|
95
|
+
*
|
|
96
|
+
* @param subjectName - The name of the Bot to analyze
|
|
97
|
+
* @param cs - ComponentSet containing Bot, GenAiPlanner, and GenAiPlugin components
|
|
98
|
+
*
|
|
99
|
+
* @returns Object containing:
|
|
100
|
+
* - genAiPlugins: Record of plugin names to their file paths
|
|
101
|
+
* - genAiFunctions: Array of function names
|
|
102
|
+
*/
|
|
103
|
+
async function getPluginsAndFunctions(subjectName, cs) {
|
|
104
|
+
const botVersions = [...cs.filter((component) => component.type.name === 'Bot' && component.fullName !== '*')].reduce((acc, component) => ({
|
|
105
|
+
...acc,
|
|
106
|
+
// this resolves to the BotVersion filepath
|
|
107
|
+
[component.fullName]: cs.getComponentFilenamesByNameAndType({
|
|
108
|
+
fullName: component.fullName,
|
|
109
|
+
type: 'Bot',
|
|
110
|
+
})[0],
|
|
111
|
+
}), {});
|
|
112
|
+
const genAiPlanners = [
|
|
113
|
+
...cs.filter((component) => component.type.name === 'GenAiPlanner' && component.fullName !== '*'),
|
|
114
|
+
].reduce((acc, component) => ({
|
|
115
|
+
...acc,
|
|
116
|
+
[component.fullName]: cs.getComponentFilenamesByNameAndType({
|
|
117
|
+
fullName: component.fullName,
|
|
118
|
+
type: 'GenAiPlanner',
|
|
119
|
+
})[0],
|
|
120
|
+
}), {});
|
|
121
|
+
const parser = new XMLParser();
|
|
122
|
+
const botVersionXml = await readFile(botVersions[subjectName], 'utf-8');
|
|
123
|
+
const parsedBotVersion = parser.parse(botVersionXml);
|
|
124
|
+
const plannerXml = await readFile(genAiPlanners[parsedBotVersion.BotVersion.conversationDefinitionPlanners.genAiPlannerName ?? subjectName], 'utf-8');
|
|
125
|
+
const parsedPlanner = parser.parse(plannerXml);
|
|
126
|
+
const genAiFunctions = castArray(parsedPlanner.GenAiPlanner.genAiFunctions).map(({ genAiFunctionName }) => genAiFunctionName);
|
|
127
|
+
const genAiPlugins = castArray(parsedPlanner.GenAiPlanner.genAiPlugins).reduce((acc, { genAiPluginName }) => ({
|
|
128
|
+
...acc,
|
|
129
|
+
[genAiPluginName]: cs.getComponentFilenamesByNameAndType({
|
|
130
|
+
fullName: genAiPluginName,
|
|
131
|
+
type: 'GenAiPlugin',
|
|
132
|
+
})[0],
|
|
133
|
+
}), {});
|
|
134
|
+
return { genAiPlugins, genAiFunctions };
|
|
135
|
+
}
|
|
96
136
|
export default class AgentGenerateTestSpec extends SfCommand {
|
|
97
137
|
static summary = messages.getMessage('summary');
|
|
98
138
|
static description = messages.getMessage('description');
|
|
99
139
|
static examples = messages.getMessages('examples');
|
|
100
140
|
static enableJsonFlag = false;
|
|
101
141
|
static state = 'beta';
|
|
142
|
+
static flags = {
|
|
143
|
+
'output-dir': Flags.directory({
|
|
144
|
+
char: 'd',
|
|
145
|
+
summary: messages.getMessage('flags.output-dir.summary'),
|
|
146
|
+
default: 'specs',
|
|
147
|
+
}),
|
|
148
|
+
};
|
|
102
149
|
async run() {
|
|
103
|
-
const
|
|
104
|
-
const
|
|
150
|
+
const { flags } = await this.parse(AgentGenerateTestSpec);
|
|
151
|
+
const directoryPaths = (await SfProject.resolve().then((project) => project.getPackageDirectories())).map((dir) => dir.fullPath);
|
|
152
|
+
const cs = await ComponentSetBuilder.build({
|
|
153
|
+
metadata: {
|
|
154
|
+
metadataEntries: ['GenAiPlanner', 'GenAiPlugin', 'Bot'],
|
|
155
|
+
directoryPaths,
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
const botsComponents = cs.filter((component) => component.type.name === 'Bot');
|
|
159
|
+
const bots = [...botsComponents.map((c) => c.fullName).filter((n) => n !== '*')];
|
|
105
160
|
if (bots.length === 0) {
|
|
106
|
-
throw new SfError(`No agents found in ${
|
|
161
|
+
throw new SfError(`No agents found in ${directoryPaths.join(', ')}`, 'NoAgentsFoundError');
|
|
107
162
|
}
|
|
108
163
|
const subjectType = await select({
|
|
109
164
|
message: 'What are you testing',
|
|
@@ -115,6 +170,7 @@ export default class AgentGenerateTestSpec extends SfCommand {
|
|
|
115
170
|
choices: bots,
|
|
116
171
|
theme,
|
|
117
172
|
});
|
|
173
|
+
const { genAiPlugins, genAiFunctions } = await getPluginsAndFunctions(subjectName, cs);
|
|
118
174
|
const name = await input({
|
|
119
175
|
message: 'Enter a name for the test definition',
|
|
120
176
|
validate(d) {
|
|
@@ -123,12 +179,6 @@ export default class AgentGenerateTestSpec extends SfCommand {
|
|
|
123
179
|
return 'Name cannot be empty';
|
|
124
180
|
}
|
|
125
181
|
return true;
|
|
126
|
-
// TODO: add back validation once we refine the regex
|
|
127
|
-
// check against FORTY_CHAR_API_NAME_REGEX
|
|
128
|
-
// if (!FORTY_CHAR_API_NAME_REGEX.test(d)) {
|
|
129
|
-
// return 'The non-namespaced portion an API name must begin with a letter, contain only letters, numbers, and underscores, not contain consecutive underscores, and not end with an underscore.';
|
|
130
|
-
// }
|
|
131
|
-
// return true;
|
|
132
182
|
},
|
|
133
183
|
theme,
|
|
134
184
|
});
|
|
@@ -136,31 +186,30 @@ export default class AgentGenerateTestSpec extends SfCommand {
|
|
|
136
186
|
message: 'Enter a description for test definition (optional)',
|
|
137
187
|
theme,
|
|
138
188
|
});
|
|
139
|
-
const genAiPluginDir = join('force-app', 'main', 'default', 'genAiPlugins');
|
|
140
|
-
const genAiPlugins = Object.fromEntries((await readDir(genAiPluginDir)).map((genAiPlugin) => [
|
|
141
|
-
genAiPlugin.replace('.genAiPlugin-meta.xml', ''),
|
|
142
|
-
join(genAiPluginDir, genAiPlugin),
|
|
143
|
-
]));
|
|
144
189
|
const testCases = [];
|
|
145
190
|
do {
|
|
146
191
|
this.log();
|
|
147
192
|
this.styledHeader(`Adding test case #${testCases.length + 1}`);
|
|
148
193
|
// eslint-disable-next-line no-await-in-loop
|
|
149
|
-
testCases.push(await promptForTestCase(genAiPlugins));
|
|
194
|
+
testCases.push(await promptForTestCase(genAiPlugins, genAiFunctions));
|
|
150
195
|
} while ( // eslint-disable-next-line no-await-in-loop
|
|
151
196
|
await confirm({
|
|
152
197
|
message: 'Would you like to add another test case',
|
|
153
198
|
default: true,
|
|
154
199
|
}));
|
|
155
200
|
this.log();
|
|
201
|
+
const outputFile = join(flags['output-dir'], `${subjectName}-test-spec.yaml`);
|
|
202
|
+
if (existsSync(outputFile)) {
|
|
203
|
+
await this.confirm({ message: `File ${outputFile} already exists. Overwrite?`, defaultAnswer: false });
|
|
204
|
+
}
|
|
156
205
|
await generateTestSpec({
|
|
157
206
|
name,
|
|
158
207
|
description,
|
|
159
208
|
subjectType,
|
|
160
209
|
subjectName,
|
|
161
210
|
testCases,
|
|
162
|
-
},
|
|
163
|
-
this.log(`Created ${
|
|
211
|
+
}, outputFile);
|
|
212
|
+
this.log(`Created ${outputFile}`);
|
|
164
213
|
}
|
|
165
214
|
}
|
|
166
215
|
//# sourceMappingURL=test-spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-spec.js","sourceRoot":"","sources":["../../../../src/commands/agent/generate/test-spec.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"test-spec.js","sourceRoot":"","sources":["../../../../src/commands/agent/generate/test-spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { SfCommand } from '@salesforce/sf-plugins-core';
|
|
2
2
|
import { SfError } from '@salesforce/core';
|
|
3
3
|
import { CLIError } from '@oclif/core/errors';
|
|
4
|
+
export declare const FORTY_CHAR_API_NAME_REGEX: RegExp;
|
|
4
5
|
export type AgentTestCreateResult = {
|
|
5
6
|
path: string;
|
|
6
7
|
contents: string;
|
|
@@ -11,11 +12,12 @@ export default class AgentTestCreate extends SfCommand<AgentTestCreateResult> {
|
|
|
11
12
|
static readonly examples: string[];
|
|
12
13
|
static readonly state = "beta";
|
|
13
14
|
static readonly flags: {
|
|
14
|
-
spec: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
15
|
'target-org': import("@oclif/core/interfaces").OptionFlag<import("@salesforce/core").Org, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
16
|
'api-version': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
17
|
preview: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
18
18
|
'no-prompt': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
19
|
+
spec: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
20
|
+
"api-name": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
21
|
};
|
|
20
22
|
private mso?;
|
|
21
23
|
run(): Promise<AgentTestCreateResult>;
|