Skip to content

Commit

Permalink
Merge pull request #77 from salesforcecli/sh/agent-gen-template
Browse files Browse the repository at this point in the history
W-17753069 - feat: add agent generate template command
  • Loading branch information
shetzel authored Feb 5, 2025
2 parents 6663c77 + d5f7aca commit c0b5ab2
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 0 deletions.
8 changes: 8 additions & 0 deletions command-snapshot.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,14 @@
],
"plugin": "@salesforce/plugin-agent"
},
{
"alias": [],
"command": "agent:generate:template",
"flagAliases": [],
"flagChars": ["d", "o"],
"flags": ["agent-api-name", "api-version", "flags-dir", "json", "output-dir", "target-org"],
"plugin": "@salesforce/plugin-agent"
},
{
"alias": [],
"command": "agent:generate:test-spec",
Expand Down
21 changes: 21 additions & 0 deletions messages/agent.generate.template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# summary

Generate an agent template for packaging.

# description

Generate agent template metadata to for packaging your agent.

# flags.agent-api-name.summary

API name of an existing Bot.

# flags.output-dir.summary

Directory to write the agent template.

# examples

- Generate an agent template from a Bot API name in your default package dir:

<%= config.bin %> <%= command.id %> --agent-api-name My_Packaged_Agent
16 changes: 16 additions & 0 deletions schemas/agent-generate-template.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$ref": "#/definitions/AgentGenerateTemplateResult",
"definitions": {
"AgentGenerateTemplateResult": {
"type": "object",
"properties": {
"path": {
"type": "string"
}
},
"required": ["path"],
"additionalProperties": false
}
}
}
62 changes: 62 additions & 0 deletions src/commands/agent/generate/template.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/*
* Copyright (c) 2024, salesforce.com, inc.
* All rights reserved.
* Licensed under the BSD 3-Clause license.
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
*/

import { dirname, join, resolve } from 'node:path';
import { mkdirSync, writeFileSync } from 'node:fs';
import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
import { Messages } from '@salesforce/core';

Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
const messages = Messages.loadMessages('@salesforce/plugin-agent', 'agent.generate.template');

export type AgentGenerateTemplateResult = {
path: string;
};

export default class AgentGenerateTemplate extends SfCommand<AgentGenerateTemplateResult> {
public static readonly summary = messages.getMessage('summary');
public static readonly description = messages.getMessage('description');
public static readonly examples = messages.getMessages('examples');
public static state = 'beta';
public static readonly requiresProject = true;

public static readonly flags = {
'target-org': Flags.requiredOrg(),
'api-version': Flags.orgApiVersion(),
'agent-api-name': Flags.string({
summary: messages.getMessage('flags.agent-api-name.summary'),
required: true,
}),
'output-dir': Flags.directory({
char: 'd',
exists: true,
summary: messages.getMessage('flags.output-dir.summary'),
}),
};

public async run(): Promise<AgentGenerateTemplateResult> {
const { flags } = await this.parse(AgentGenerateTemplate);

// TODO: look for a Bot with the agent API name
const botName = flags['agent-api-name'];
const outputDir = flags['output-dir'] ? resolve(flags['output-dir']) : this.project?.getDefaultPackage().fullPath;

const agentTemplateFilePath = join(outputDir as string, 'agentTemplates', `${botName}.agentTemplate-meta.xml`);
mkdirSync(dirname(agentTemplateFilePath), { recursive: true });

writeFileSync(agentTemplateFilePath, xmlContent);

this.log(`\nSaved agent template: ${agentTemplateFilePath}`);

return { path: agentTemplateFilePath };
}
}

const xmlContent = `<?xml version="1.0" encoding="UTF-8"?>
<AgentTemplate xmlns="http://soap.sforce.com/2006/04/metadata">
</AgentTemplate>
`;

0 comments on commit c0b5ab2

Please sign in to comment.