Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .eslintignore

This file was deleted.

18 changes: 0 additions & 18 deletions .eslintrc.cjs

This file was deleted.

76 changes: 76 additions & 0 deletions eslint-suppressions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
{
"src/agentActivation.ts": {
"no-useless-assignment": {
"count": 1
}
},
"src/commands/agent/adl/create.ts": {
"sf-plugin/flag-min-max-default": {
"count": 1
}
},
"src/commands/agent/adl/upload.ts": {
"sf-plugin/flag-min-max-default": {
"count": 1
}
},
"src/commands/agent/generate/agent-spec.ts": {
"@typescript-eslint/no-unused-vars": {
"count": 1
}
},
"src/commands/agent/generate/test-spec.ts": {
"@typescript-eslint/no-unused-vars": {
"count": 2
}
},
"src/commands/agent/publish/authoring-bundle.ts": {
"@typescript-eslint/explicit-function-return-type": {
"count": 1
}
},
"src/commands/agent/test/create.ts": {
"complexity": {
"count": 1
}
},
"src/commands/agent/test/run.ts": {
"sf-plugin/flag-min-max-default": {
"count": 1
}
},
"src/components/agent-preview-react.tsx": {
"@typescript-eslint/explicit-function-return-type": {
"count": 1
},
"@typescript-eslint/no-unused-vars": {
"count": 1
}
},
"src/flags.ts": {
"@typescript-eslint/no-unused-vars": {
"count": 1
}
},
"test/nuts/agent.activate.nut.ts": {
"@typescript-eslint/no-unused-vars": {
"count": 1
}
},
"test/nuts/shared-setup.ts": {
"@typescript-eslint/no-unused-vars": {
"count": 1
},
"@typescript-eslint/prefer-promise-reject-errors": {
"count": 1
}
},
"test/nuts/z2.agent.publish.nut.ts": {
"@typescript-eslint/no-unused-vars": {
"count": 1
},
"@typescript-eslint/prefer-promise-reject-errors": {
"count": 1
}
}
}
1 change: 1 addition & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default } from 'eslint-config-salesforce-typescript';

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This isn't equivalent to the old one. We also need to be using sf-plugin/recommended and xo-react.

23 changes: 15 additions & 8 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@
"@inquirer/prompts": "^7.10.1",
"@oclif/core": "^5.0.0",
"@oclif/multi-stage-output": "^1.0.0",
"@salesforce/agents": "^2.1.0",
"@salesforce/core": "^9.1.8",
"@salesforce/agents": "^2.3.0",
"@salesforce/core": "^9.1.10",
"@salesforce/kit": "^4.0.0",
"@salesforce/sf-plugins-core": "^13.0.4",
"@salesforce/source-deploy-retrieve": "^13.3.0",
"@salesforce/source-deploy-retrieve": "^13.3.1",
"@salesforce/types": "1.8.0",
"ansis": "^3.17.0",
"fast-xml-parser": "^5.11.1",
Expand All @@ -31,19 +31,25 @@
"@oclif/plugin-command-snapshot": "^6.0.0",
"@oclif/test": "^5.0.0",
"@salesforce/cli-plugins-testkit": "^5.3.66",
"@salesforce/dev-scripts": "^11.0.4",
"@salesforce/plugin-command-reference": "^3.1.132",
"@salesforce/dev-scripts": "^14.0.0",
"@salesforce/plugin-command-reference": "^3.1.133",
"@types/chai": "^4.3.17",
"@types/inquirer": "^9.0.10",
"@types/mocha": "^10.0.10",
"@types/node": "^18",
"@types/react": "^18.3.31",
"@types/sinon": "^10.0.20",
"eslint": "^10.4.0",
"eslint-config-salesforce-typescript": "^6.0.0",
"eslint-config-xo": "^0.50.0",
"eslint-config-xo-react": "^0.27.0",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^4.6.2",
"eslint-plugin-sf-plugin": "^1.20.33",
"eslint-plugin-sf-plugin": "^3.0.0",
"esmock": "^2.7.6",
"oclif": "^5.0.0",
"oclif": "^5.0.1",
"ts-node": "^10.9.2",
"typescript": "^5.9.3"
"typescript": "^6.0.3"
},
"engines": {
"node": ">=22.0.0"
Expand Down Expand Up @@ -179,6 +185,7 @@
"src/**/*.ts",
"test/**/*.ts",
"messages/**",
"**/eslint.config.*",
"**/.eslint*",
"**/tsconfig.json"
],
Expand Down
2 changes: 1 addition & 1 deletion src/commands/agent/generate/agent-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ export default class AgentCreateSpec extends SfCommand<AgentCreateSpecResult> {
(flags.tone as AgentTone) ??
inputSpec?.tone ??
(flags['full-interview'] ? await promptForFlag(FLAGGABLE_PROMPTS.tone) : 'casual');
tone = validateTone(tone as AgentTone);
tone = validateTone(tone);
// const primaryLanguage =
// flags['primary-language'] ??
// inputSpec?.primaryLanguage ??
Expand Down
3 changes: 1 addition & 2 deletions src/commands/agent/mcp/create.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import {
type McpServerCreateOutput,
type McpServerCreateInput,
type McpServerAuthorizationInput,
type McpAuthType,
} from '@salesforce/agents';

Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
Expand Down Expand Up @@ -77,7 +76,7 @@ export default class ApiCatalogMcpServerCreate extends SfCommand<McpServerCreate
const { flags } = await this.parse(ApiCatalogMcpServerCreate);
const connection = flags['target-org'].getConnection(flags['api-version']);

const authType = flags['auth-type'] as McpAuthType;
const authType = flags['auth-type'];

if (authType === 'OAUTH') {
if (!flags['identity-provider'] || !flags['client-id'] || !flags['client-secret'] || !flags.scope) {
Expand Down
10 changes: 2 additions & 8 deletions src/commands/agent/mcp/update.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import {
type McpServerOutput,
type McpServerUpdateInput,
type McpServerAuthorizationInput,
type McpAuthType,
} from '@salesforce/agents';

Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
Expand Down Expand Up @@ -89,16 +88,11 @@ export default class ApiCatalogMcpServerUpdate extends SfCommand<ApiCatalogMcpSe
input.serverUrl = flags['server-url'];
}

const authType = flags['auth-type'] as McpAuthType | undefined;
const authType = flags['auth-type'];

if (authType) {
if (authType === 'OAUTH') {
if (
!flags['identity-provider'] ||
!flags['client-id'] ||
!flags['client-secret'] ||
!flags.scope
) {
if (!flags['identity-provider'] || !flags['client-id'] || !flags['client-secret'] || !flags.scope) {
throw new SfError(messages.getMessage('error.missingOauthFields'), 'MissingOauthFields', [], 1);
}

Expand Down
2 changes: 1 addition & 1 deletion src/commands/agent/test/create.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ const FLAGGABLE_PROMPTS = {
},
};

async function promptUntilUniqueName(connection: Connection, name?: string | undefined): Promise<string | undefined> {
async function promptUntilUniqueName(connection: Connection, name?: string): Promise<string | undefined> {
const apiName = name ?? (await promptForFlag(FLAGGABLE_PROMPTS['api-name']));
const existingDefinitions = await AgentTest.list(connection);
if (existingDefinitions.some((d) => d.fullName === apiName)) {
Expand Down
2 changes: 1 addition & 1 deletion src/commands/agent/test/resume.ts
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ export default class AgentTestResume extends SfCommand<AgentTestRunResult> {
process.exitCode = 1;
}

return { ...response, runId, status: 'COMPLETED' } as AgentTestRunResult;
return { ...response, runId, status: 'COMPLETED' };
}

protected catch(error: Error | SfError | CLIError): Promise<never> {
Expand Down
5 changes: 2 additions & 3 deletions src/commands/agent/test/run-eval.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import {
splitIntoBatches,
type EvalApiResponse,
formatResults,
type ResultFormat,
isYamlTestSpec,
parseTestSpec,
translateTestSpec,
Expand Down Expand Up @@ -190,10 +189,10 @@ export default class AgentTestRunEval extends SfCommand<RunEvalResult> {
);
});

const mergedResponse: EvalApiResponse = { results: allResults as EvalApiResponse['results'] };
const mergedResponse: EvalApiResponse = { results: allResults };

// 7. Format output
this.log(formatResults(mergedResponse, (flags['result-format'] ?? 'human') as ResultFormat));
this.log(formatResults(mergedResponse, flags['result-format'] ?? 'human'));

// 8. Build structured result for --json
const { summary, testSummaries } = buildResultSummary(mergedResponse);
Expand Down
2 changes: 1 addition & 1 deletion src/commands/agent/test/run.ts
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ export default class AgentTestRun extends SfCommand<AgentTestRunResult> {
process.exitCode = 1;
}

return { ...detailsResponse, status: 'COMPLETED', runId: response.runId } as AgentTestRunResult;
return { ...detailsResponse, status: 'COMPLETED', runId: response.runId };
} else {
this.mso.stop();
this.log(
Expand Down
2 changes: 1 addition & 1 deletion src/commands/agent/trace/read.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ export type AgentTraceReadResult = {
};

const isFunctionStep = (s: PlanStep): s is FunctionStep => s.type === 'FunctionStep';
const asFunctionWithErrors = (s: FunctionStep): FunctionStepWithErrors => s as FunctionStepWithErrors;
const asFunctionWithErrors = (s: FunctionStep): FunctionStepWithErrors => s;

function summarizeTurn(turn: number, planId: string, trace: PlannerResponse): TurnSummary {
const plan = trace.plan;
Expand Down
8 changes: 3 additions & 5 deletions src/handleTestResults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ export function humanFormatAgentforceStudio(results: AgentforceStudioTestResults
const tables: string[] = [];

for (const testCase of results.testCases) {
const inputs = getTestCaseInputs(testCase as AgentforceStudioTestCaseResultWithInputs);
const inputs = getTestCaseInputs(testCase);
const parsedSubjectResponse = parseSubjectResponse(testCase.subjectResponse);

const titleLines = [ansis.bold(`Test Case #${testCase.testNumber}`)];
Expand Down Expand Up @@ -344,7 +344,7 @@ export function humanFormat(results: AgentTestResultsResponse, verbose = false):
data: testCase.testResults
// this is the table for topics/action/output validation (actual v expected)
// filter out other metrics from it
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access

.filter((f) => !metric.includes(f.name as (typeof metric)[number]))
.map((r) => ({
test: humanFriendlyName(r.name),
Expand All @@ -357,7 +357,6 @@ export function humanFormat(results: AgentTestResultsResponse, verbose = false):
});
tables.push(table);

// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-call
const metrics = testCase.testResults.filter((f) => metric.includes(f.name as (typeof metric)[number]));

if (metrics.length > 0) {
Expand All @@ -384,7 +383,7 @@ export function humanFormat(results: AgentTestResultsResponse, verbose = false):
width: '100%',
});
tables.push(table);
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument

metricResults.push(...metrics);
}
// it's not a real string[], more like just a string "[&#39;IdentifyRecordByName&#39;]", so >2 means more than "[]"
Expand Down Expand Up @@ -434,7 +433,6 @@ export function humanFormat(results: AgentTestResultsResponse, verbose = false):
}, 0);
const outcomePassPercent = (outcomePassCount / results.testCases.length) * 100;

// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
const metricPassCount = metricResults.filter(
(f) => f.result === 'PASS' || f.name === 'output_latency_milliseconds'
).length;
Expand Down
25 changes: 0 additions & 25 deletions test/.eslintrc.cjs

This file was deleted.

12 changes: 6 additions & 6 deletions test/agentActivation.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ describe('agentActivation', () => {

it('should return version flag when provided', async () => {
const result = await getVersionForActivation({
agent: mockAgent as unknown as ProductionAgent,
agent: mockAgent,
status: 'Active',
versionFlag: 5,
});
Expand All @@ -303,7 +303,7 @@ describe('agentActivation', () => {
} as BotMetadata);

const result = await getVersionForActivation({
agent: mockAgent as unknown as ProductionAgent,
agent: mockAgent,
status: 'Active',
});

Expand All @@ -322,7 +322,7 @@ describe('agentActivation', () => {
} as BotMetadata);

const result = await getVersionForActivation({
agent: mockAgent as unknown as ProductionAgent,
agent: mockAgent,
status: 'Active',
});

Expand All @@ -343,7 +343,7 @@ describe('agentActivation', () => {
} as BotMetadata);

const result = await getVersionForActivation({
agent: mockAgent as unknown as ProductionAgent,
agent: mockAgent,
status: 'Active',
jsonEnabled: true,
});
Expand All @@ -363,7 +363,7 @@ describe('agentActivation', () => {
} as BotMetadata);

const result = await getVersionForActivation({
agent: mockAgent as unknown as ProductionAgent,
agent: mockAgent,
status: 'Active',
});

Expand All @@ -383,7 +383,7 @@ describe('agentActivation', () => {

try {
await getVersionForActivation({
agent: mockAgent as unknown as ProductionAgent,
agent: mockAgent,
status: 'Active',
jsonEnabled: true,
});
Expand Down
2 changes: 1 addition & 1 deletion test/commands/agent/adl/create.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

/* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */

import { expect } from 'chai';
import { TestContext, MockTestOrgData } from '@salesforce/core/testSetup';
Expand Down
Loading
Loading