Skip to content

Commit 7d77523

Browse files
authored
feat(template): add collaborator agent (#14609)
* feat(template): add collaborator agent * fix: collaborator local debug bug * fix: remote deployment * fix: bug * feat: add teams collaborator agent template * fix: bug * feat: add cli support * test: add e2e test * fix: e2e test * fix: bug
1 parent 5d6cb8a commit 7d77523

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+3959
-72
lines changed

packages/cli/src/commands/models/listTemplates.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ export function listAllCapabilities(): OptionItem[] {
4848
CustomEngineAgentOptions.weatherAgent(),
4949
TeamsAgentCapabilityOptions.basicChatbot(),
5050
TeamsAgentCapabilityOptions.customCopilotRag(),
51+
TeamsAgentCapabilityOptions.collaboratorAgent(),
5152
// TeamsAgentCapabilityOptions.aiAgent(),
5253
BotCapabilityOptions.basicBot(),
5354
// BotCapabilityOptions.notificationBot(),

packages/fx-core/resource/package.nls.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,8 @@
372372
"core.createProjectQuestion.capability.customCopilotBasicOption.detail": "Agent that chats with users in Teams built with Teams AI Library and connects to LLMs",
373373
"core.createProjectQuestion.capability.customCopilotRagOption.label": "Teams Agent with Data",
374374
"core.createProjectQuestion.capability.customCopilotRagOption.detail": "Agent that uses your content and knowledge to accurately answer domain-specific questions",
375+
"core.createProjectQuestion.capability.teamsAgent.collaborator.label": "Teams Collaborator Agent",
376+
"core.createProjectQuestion.capability.teamsAgent.collaborator.detail": "Agent that enhances collaboration in group chat, channels or meetings through summarization, task management, and conversation search",
375377
"core.createProjectQuestion.capability.teamsAgent.others.label": "Other Teams Capabilities",
376378
"core.createProjectQuestion.capability.teamsAgent.others.detail": "App that uses tab, bot and message extension",
377379
"core.createProjectQuestion.capability.customCopilotAssistantOption.label": "Agent with API",

packages/fx-core/src/component/generator/defaultGenerator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ export class DefaultTemplateGenerator implements IGenerator {
127127
});
128128

129129
const templateMetadata = getAllTemplatesOnPlatform(inputs.platform).find(
130-
(t) => t.name === name
130+
(t) => t.name === name && t.language === templateInfo.language
131131
);
132132
const folderName =
133133
templateMetadata?.language === "common" || templateMetadata?.language === "none"

packages/fx-core/src/component/generator/templates/metadata/index.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,31 @@
22
// Licensed under the MIT license.
33

44
import { Platform } from "@microsoft/teamsfx-api";
5-
import { agentForTeamsTemplates } from "./agentForTeams";
6-
import { basicBotTemplates } from "./bot";
75
import { customEngineAgentTemplates } from "./customEngineAgent";
6+
import { declarativeAgentTemplates } from "./da";
87
import { graphConnectorTemplates } from "./graphConnector";
98
import { Template } from "./interface";
109
import { messagingExtensionTemplates } from "./me";
1110
import { specialTemplates } from "./special";
12-
import { tabTemplates } from "./tab";
11+
import { teamsAgentsAndAppsTemplates } from "./teams";
1312
import { vsOnlyTemplates } from "./vs";
1413
import { wxpTemplates } from "./wxp";
1514

1615
const allTemplates: Template[] = [
17-
...tabTemplates,
18-
...basicBotTemplates,
19-
...messagingExtensionTemplates,
16+
...declarativeAgentTemplates,
2017
...customEngineAgentTemplates,
21-
...agentForTeamsTemplates,
18+
...teamsAgentsAndAppsTemplates,
19+
...messagingExtensionTemplates,
2220
...specialTemplates,
2321
...vsOnlyTemplates,
2422
...wxpTemplates,
2523
...graphConnectorTemplates,
2624
];
2725

2826
const defaultGeneratorTemplates: Template[] = [
29-
...tabTemplates,
30-
...basicBotTemplates,
31-
...messagingExtensionTemplates,
3227
...customEngineAgentTemplates,
33-
...agentForTeamsTemplates,
28+
...teamsAgentsAndAppsTemplates,
29+
...messagingExtensionTemplates,
3430
...vsOnlyTemplates,
3531
...graphConnectorTemplates,
3632
];

packages/fx-core/src/component/generator/templates/metadata/me.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,6 @@ import { TemplateNames } from "../templateNames";
55
import { Template } from "./interface";
66

77
export const messagingExtensionTemplates: Template[] = [
8-
{
9-
id: "message-extension-v2-ts",
10-
name: TemplateNames.DefaultMessageExtension,
11-
language: "typescript",
12-
description: "",
13-
},
14-
{
15-
id: "message-extension-v2-csharp",
16-
name: TemplateNames.DefaultMessageExtension,
17-
language: "csharp",
18-
description: "",
19-
},
208
{
219
id: "message-extension-with-api-from-scratch-ts",
2210
name: TemplateNames.MessageExtensionWithNewApiFromScratch,

packages/fx-core/src/component/generator/templates/metadata/special.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
// Licensed under the MIT license.
33

44
import { TemplateNames } from "../templateNames";
5-
import { declarativeAgentTemplates } from "./da";
65
import { Template } from "./interface";
76

87
// these template are not handled by default generator which means they need extra steps during scaffolding
@@ -67,5 +66,4 @@ export const specialTemplates: Template[] = [
6766
language: "csharp",
6867
description: "",
6968
},
70-
...declarativeAgentTemplates,
7169
];
Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT license.
3+
4+
import { TemplateNames } from "../templateNames";
5+
import { Template } from "./interface";
6+
7+
const chatWithYourDataTemplates: Template[] = [
8+
{
9+
id: "custom-copilot-rag-customize-ts",
10+
name: TemplateNames.CustomCopilotRagCustomize,
11+
language: "typescript",
12+
description: "",
13+
},
14+
{
15+
id: "custom-copilot-rag-customize-js",
16+
name: TemplateNames.CustomCopilotRagCustomize,
17+
language: "javascript",
18+
description: "",
19+
},
20+
{
21+
id: "custom-copilot-rag-customize-csharp",
22+
name: TemplateNames.CustomCopilotRagCustomize,
23+
language: "csharp",
24+
description: "",
25+
},
26+
{
27+
id: "custom-copilot-rag-azure-ai-search-ts",
28+
name: TemplateNames.CustomCopilotRagAzureAISearch,
29+
language: "typescript",
30+
description: "",
31+
},
32+
{
33+
id: "custom-copilot-rag-azure-ai-search-js",
34+
name: TemplateNames.CustomCopilotRagAzureAISearch,
35+
language: "javascript",
36+
description: "",
37+
},
38+
{
39+
id: "custom-copilot-rag-azure-ai-search-csharp",
40+
name: TemplateNames.CustomCopilotRagAzureAISearch,
41+
language: "csharp",
42+
description: "",
43+
},
44+
{
45+
id: "custom-copilot-rag-microsoft365-ts",
46+
name: TemplateNames.CustomCopilotRagMicrosoft365,
47+
language: "typescript",
48+
description: "",
49+
},
50+
{
51+
id: "custom-copilot-rag-microsoft365-js",
52+
name: TemplateNames.CustomCopilotRagMicrosoft365,
53+
language: "javascript",
54+
description: "",
55+
},
56+
{
57+
id: "custom-copilot-rag-microsoft365-csharp",
58+
name: TemplateNames.CustomCopilotRagMicrosoft365,
59+
language: "csharp",
60+
description: "",
61+
},
62+
{
63+
id: "custom-copilot-assistant-new-ts",
64+
name: TemplateNames.CustomCopilotAssistantNew,
65+
language: "typescript",
66+
description: "",
67+
},
68+
{
69+
id: "custom-copilot-assistant-new-js",
70+
name: TemplateNames.CustomCopilotAssistantNew,
71+
language: "javascript",
72+
description: "",
73+
},
74+
{
75+
id: "custom-copilot-assistant-new-csharp",
76+
name: TemplateNames.CustomCopilotAssistantNew,
77+
language: "csharp",
78+
description: "",
79+
},
80+
{
81+
id: "custom-copilot-assistant-assistants-api-ts",
82+
name: TemplateNames.CustomCopilotAssistantAssistantsApi,
83+
language: "typescript",
84+
description: "",
85+
},
86+
{
87+
id: "custom-copilot-assistant-assistants-api-js",
88+
name: TemplateNames.CustomCopilotAssistantAssistantsApi,
89+
language: "javascript",
90+
description: "",
91+
},
92+
{
93+
id: "custom-copilot-assistant-assistants-api-csharp",
94+
name: TemplateNames.CustomCopilotAssistantAssistantsApi,
95+
language: "csharp",
96+
description: "",
97+
},
98+
];
99+
100+
const teamsOtherTemplates: Template[] = [
101+
{
102+
id: "basic-tab-ts",
103+
name: TemplateNames.Tab,
104+
language: "typescript",
105+
description: "Simple Teams Tab App",
106+
},
107+
{
108+
id: "default-bot-ts",
109+
name: TemplateNames.DefaultBot,
110+
language: "typescript",
111+
description: "",
112+
},
113+
{
114+
id: "default-bot-js",
115+
name: TemplateNames.DefaultBot,
116+
language: "javascript",
117+
description: "",
118+
},
119+
{
120+
id: "message-extension-v2-ts",
121+
name: TemplateNames.DefaultMessageExtension,
122+
language: "typescript",
123+
description: "",
124+
},
125+
// VS templates below
126+
{
127+
id: "basic-tab-csharp",
128+
name: TemplateNames.Tab,
129+
language: "csharp",
130+
description: "Simple Teams Tab App",
131+
},
132+
{
133+
id: "default-bot-csharp",
134+
name: TemplateNames.DefaultBot,
135+
language: "csharp",
136+
description: "",
137+
},
138+
{
139+
id: "notification-http-trigger-csharp",
140+
name: TemplateNames.NotificationHttpTrigger,
141+
language: "csharp",
142+
description: "",
143+
},
144+
{
145+
id: "notification-timer-trigger-csharp",
146+
name: TemplateNames.NotificationTimerTrigger,
147+
language: "csharp",
148+
description: "",
149+
},
150+
{
151+
id: "notification-http-timer-trigger-csharp",
152+
name: TemplateNames.NotificationHttpTimerTrigger,
153+
language: "csharp",
154+
description: "",
155+
},
156+
{
157+
id: "notification-webapi-csharp",
158+
name: TemplateNames.NotificationWebApi,
159+
language: "csharp",
160+
description: "",
161+
},
162+
{
163+
id: "command-and-response-csharp",
164+
name: TemplateNames.CommandAndResponse,
165+
language: "csharp",
166+
description: "",
167+
},
168+
{
169+
id: "workflow-csharp",
170+
name: TemplateNames.Workflow,
171+
language: "csharp",
172+
description: "",
173+
},
174+
{
175+
id: "message-extension-v2-csharp",
176+
name: TemplateNames.DefaultMessageExtension,
177+
language: "csharp",
178+
description: "",
179+
},
180+
];
181+
182+
export const teamsAgentsAndAppsTemplates: Template[] = [
183+
{
184+
id: "custom-copilot-basic-ts",
185+
name: TemplateNames.CustomCopilotBasic,
186+
language: "typescript",
187+
description: "",
188+
},
189+
{
190+
id: "custom-copilot-basic-js",
191+
name: TemplateNames.CustomCopilotBasic,
192+
language: "javascript",
193+
description: "",
194+
},
195+
{
196+
id: "custom-copilot-basic-csharp",
197+
name: TemplateNames.CustomCopilotBasic,
198+
language: "csharp",
199+
description: "",
200+
},
201+
...chatWithYourDataTemplates,
202+
{
203+
id: "teams-collaborator-agent-ts",
204+
name: TemplateNames.TeamsCollaboratorAgent,
205+
language: "typescript",
206+
description: "",
207+
},
208+
...teamsOtherTemplates,
209+
];

packages/fx-core/src/component/generator/templates/templateNames.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export enum TemplateNames {
3030
CustomCopilotRagMicrosoft365 = "custom-copilot-rag-microsoft365",
3131
CustomCopilotAssistantNew = "custom-copilot-assistant-new",
3232
CustomCopilotAssistantAssistantsApi = "custom-copilot-assistant-assistants-api",
33+
TeamsCollaboratorAgent = "teams-collaborator-agent",
3334

3435
// Copilot connector
3536
GraphConnector = "graph-connector", // vsc only

packages/fx-core/src/question/scaffold/vsc/CapabilityOptions.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,19 @@ export class TeamsAgentCapabilityOptions {
122122
};
123123
}
124124

125+
static collaboratorAgent(): OptionItem {
126+
return {
127+
id: "teams-collaborator-agent",
128+
label: getLocalizedString(
129+
"core.createProjectQuestion.capability.teamsAgent.collaborator.label"
130+
),
131+
detail: getLocalizedString(
132+
"core.createProjectQuestion.capability.teamsAgent.collaborator.detail"
133+
),
134+
data: TemplateNames.TeamsCollaboratorAgent,
135+
};
136+
}
137+
125138
static others(): OptionItem {
126139
const description = featureFlagManager.getBooleanValue(FeatureFlags.CEAEnabled)
127140
? getLocalizedString("core.createProjectQuestion.capability.customEngineAgent.description")

packages/fx-core/src/question/scaffold/vsc/createRootNode.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ export function getProjectTypeByCapability(capability: string): string {
189189
[
190190
TeamsAgentCapabilityOptions.basicChatbot().id,
191191
TeamsAgentCapabilityOptions.customCopilotRag().id,
192+
TeamsAgentCapabilityOptions.collaboratorAgent().id,
192193
BotCapabilityOptions.basicBot().id,
193194
TabCapabilityOptions.nonSsoTab().id,
194195
MeCapabilityOptions.basicMe().id,
@@ -231,6 +232,7 @@ export function getTeamsAppTypeByCapability(capability: string): string {
231232
[
232233
TeamsAgentCapabilityOptions.basicChatbot().id,
233234
TeamsAgentCapabilityOptions.customCopilotRag().id,
235+
TeamsAgentCapabilityOptions.collaboratorAgent().id,
234236
].includes(capability)
235237
) {
236238
return capability;

0 commit comments

Comments
 (0)