From 16cef9f91f596b951f0ddebea262f28df0392618 Mon Sep 17 00:00:00 2001 From: Valeras Narbutas Date: Wed, 5 Mar 2025 15:53:26 +0200 Subject: [PATCH 1/5] Add resource allocation sample with environment setup and agent configuration --- samples/da-resource-allocation/.gitignore | 13 +++ .../.vscode/extensions.json | 5 ++ .../.vscode/launch.json | 37 ++++++++ .../.vscode/settings.json | 11 +++ samples/da-resource-allocation/README.md | 62 ++++++++++++++ .../appPackage/color.png | Bin 0 -> 5923 bytes .../appPackage/declarativeAgent.json | 41 +++++++++ .../appPackage/instruction.txt | 36 ++++++++ .../appPackage/manifest.json | 39 +++++++++ .../appPackage/outline.png | Bin 0 -> 492 bytes .../assets/ResourceAssistant.png | Bin 0 -> 67098 bytes .../da-resource-allocation/assets/sample.json | 68 +++++++++++++++ samples/da-resource-allocation/env/.env.dev | 11 +++ samples/da-resource-allocation/teamsapp.yml | 81 ++++++++++++++++++ 14 files changed, 404 insertions(+) create mode 100644 samples/da-resource-allocation/.gitignore create mode 100644 samples/da-resource-allocation/.vscode/extensions.json create mode 100644 samples/da-resource-allocation/.vscode/launch.json create mode 100644 samples/da-resource-allocation/.vscode/settings.json create mode 100644 samples/da-resource-allocation/README.md create mode 100644 samples/da-resource-allocation/appPackage/color.png create mode 100644 samples/da-resource-allocation/appPackage/declarativeAgent.json create mode 100644 samples/da-resource-allocation/appPackage/instruction.txt create mode 100644 samples/da-resource-allocation/appPackage/manifest.json create mode 100644 samples/da-resource-allocation/appPackage/outline.png create mode 100644 samples/da-resource-allocation/assets/ResourceAssistant.png create mode 100644 samples/da-resource-allocation/assets/sample.json create mode 100644 samples/da-resource-allocation/env/.env.dev create mode 100644 samples/da-resource-allocation/teamsapp.yml diff --git a/samples/da-resource-allocation/.gitignore b/samples/da-resource-allocation/.gitignore new file mode 100644 index 000000000..e56779951 --- /dev/null +++ b/samples/da-resource-allocation/.gitignore @@ -0,0 +1,13 @@ +# TeamsFx files +env/.env.*.user +env/.env.local +.localConfigs +appPackage/build + +# dependencies +node_modules/ + +# misc +.env +.deployment +.DS_Store diff --git a/samples/da-resource-allocation/.vscode/extensions.json b/samples/da-resource-allocation/.vscode/extensions.json new file mode 100644 index 000000000..aac0a6e34 --- /dev/null +++ b/samples/da-resource-allocation/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + "recommendations": [ + "TeamsDevApp.ms-teams-vscode-extension" + ] +} diff --git a/samples/da-resource-allocation/.vscode/launch.json b/samples/da-resource-allocation/.vscode/launch.json new file mode 100644 index 000000000..ed05f4de2 --- /dev/null +++ b/samples/da-resource-allocation/.vscode/launch.json @@ -0,0 +1,37 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Preview in Copilot (Edge)", + "type": "msedge", + "request": "launch", + "url": "https://m365.cloud.microsoft/chat/entity1-d870f6cd-4aa5-4d42-9626-ab690c041429/${agent-hint}?auth=2&developerMode=Basic", + "presentation": { + "group": "remote", + "order": 1 + }, + "internalConsoleOptions": "neverOpen", + "runtimeArgs": [ + "--remote-debugging-port=9222", + "--no-first-run", + "--user-data-dir=${env:TEMP}/copilot-msedge-user-data-dir" + ] + }, + { + "name": "Preview in Copilot (Chrome)", + "type": "chrome", + "request": "launch", + "url": "https://m365.cloud.microsoft/chat/entity1-d870f6cd-4aa5-4d42-9626-ab690c041429/${agent-hint}?auth=2&developerMode=Basic", + "presentation": { + "group": "remote", + "order": 2 + }, + "internalConsoleOptions": "neverOpen", + "runtimeArgs": [ + "--remote-debugging-port=9223", + "--no-first-run", + "--user-data-dir=${env:TEMP}/copilot-chrome-user-data-dir" + ] + } + ] +} diff --git a/samples/da-resource-allocation/.vscode/settings.json b/samples/da-resource-allocation/.vscode/settings.json new file mode 100644 index 000000000..429962025 --- /dev/null +++ b/samples/da-resource-allocation/.vscode/settings.json @@ -0,0 +1,11 @@ +{ + "debug.onTaskErrors": "abort", + "json.schemas": [ + { + "fileMatch": [ + "/aad.*.json" + ], + "schema": {} + } + ] +} diff --git a/samples/da-resource-allocation/README.md b/samples/da-resource-allocation/README.md new file mode 100644 index 000000000..d3c8a2943 --- /dev/null +++ b/samples/da-resource-allocation/README.md @@ -0,0 +1,62 @@ +# Overview of the Resource Assistant agent sample +![Resource assistant start screen](assets/ResourceAssistant.png) + +🚀 Resource Allocation Assistant is a Microsoft Teams Declarative AI Agent designed to help managers and project leads assess workloads, identify resource bottlenecks, and optimize task distribution within their teams. This AI-powered agent provides smart workload insights and recommendations based on user input, ensuring balanced work allocation and preventing burnout. + +## 🛠 **Features** +✅ **Workload Assessment** – Helps managers evaluate ongoing tasks and resource availability. +✅ **Task Redistribution** – Suggests optimal ways to balance workloads across team members. +✅ **Bottleneck Detection** – Identifies overworked employees and underutilized resources. + +## Get started with the template + +> **Prerequisites** +> +> To run this app template in your local dev machine, you will need: +> +> - [Node.js](https://nodejs.org/), supported versions: 18, 20 +> - A [Microsoft 365 account for development](https://docs.microsoft.com/microsoftteams/platform/toolkit/accounts). +> - [Teams Toolkit Visual Studio Code Extension](https://aka.ms/teams-toolkit) version 5.0.0 and higher or [Teams Toolkit CLI](https://aka.ms/teamsfx-toolkit-cli) +> - [Microsoft 365 Copilot license](https://learn.microsoft.com/microsoft-365-copilot/extensibility/prerequisites#prerequisites) + +![image](https://github.com/user-attachments/assets/e1c2a3b3-2e59-4e9b-8335-19315e92ba30) + +1. First, select the Teams Toolkit icon on the left in the VS Code toolbar. +2. In the Account section, sign in with your [Microsoft 365 account](https://docs.microsoft.com/microsoftteams/platform/toolkit/accounts) if you haven't already. +3. Create Teams app by clicking `Provision` in "Lifecycle" section. +4. Select `Preview in Copilot (Edge)` or `Preview in Copilot (Chrome)` from the launch configuration dropdown. +5. Once the Copilot app is loaded in the browser, click on the "…" menu and select "Copilot chats". You will see your declarative agent on the right rail. Clicking on it will change the experience to showcase the logo and name of your declarative agent. +6. Ask a question to your declarative agent and it should respond based on the instructions provided. + +## What's included in the template + +| Folder | Contents | +| ------------ | ---------------------------------------------------------------------------------------- | +| `.vscode` | VSCode files for debugging | +| `appPackage` | Templates for the Teams application manifest, the GPT manifest and the API specification | +| `env` | Environment files | + +The following files can be customized and demonstrate an example implementation to get you started. + +| File | Contents | +| ---------------------------------- | ---------------------------------------------------------------------------- | +| `appPackage/declarativeAgent.json` | Define the behaviour and configurations of the declarative agent. | +| `appPackage/manifest.json` | Teams application manifest that defines metadata for your declarative agent. | + +The following are Teams Toolkit specific project files. You can [visit a complete guide on Github](https://github.com/OfficeDev/TeamsFx/wiki/Teams-Toolkit-Visual-Studio-Code-v5-Guide#overview) to understand how Teams Toolkit works. + +| File | Contents | +| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| `teamsapp.yml` | This is the main Teams Toolkit project file. The project file defines two primary things: Properties and configuration Stage definitions. | + +## Extend the template + +- [Add conversation starters](https://learn.microsoft.com/microsoft-365-copilot/extensibility/build-declarative-agents?tabs=ttk&tutorial-step=3): Conversation starters are hints that are displayed to the user to demonstrate how they can get started using the declarative agent. +- [Add web content](https://learn.microsoft.com/microsoft-365-copilot/extensibility/build-declarative-agents?tabs=ttk&tutorial-step=4) for the ability to search web information. +- [Add OneDrive and SharePoint content](https://learn.microsoft.com/microsoft-365-copilot/extensibility/build-declarative-agents?tabs=ttk&tutorial-step=5) as grounding knowledge for the agent. +- [Add Microsoft Graph connectors content](https://learn.microsoft.com/microsoft-365-copilot/extensibility/build-declarative-agents?tabs=ttk&tutorial-step=6) to ground agent with enterprise knowledge. +- [Add API plugins](https://learn.microsoft.com/microsoft-365-copilot/extensibility/build-declarative-agents?tabs=ttk&tutorial-step=7) for agent to interact with REST APIs. + +## Addition information and references + +- [Declarative agents for Microsoft 365](https://aka.ms/teams-toolkit-declarative-agent) diff --git a/samples/da-resource-allocation/appPackage/color.png b/samples/da-resource-allocation/appPackage/color.png new file mode 100644 index 0000000000000000000000000000000000000000..11e255fa0b831ca86ff380e109882ffdca5dc3d2 GIT binary patch literal 5923 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 TvMtV90~2)p5d literal 0 HcmV?d00001 diff --git a/samples/da-resource-allocation/appPackage/declarativeAgent.json b/samples/da-resource-allocation/appPackage/declarativeAgent.json new file mode 100644 index 000000000..ae225a06b --- /dev/null +++ b/samples/da-resource-allocation/appPackage/declarativeAgent.json @@ -0,0 +1,41 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/copilot/declarative-agent/v1.2/schema.json", + "version": "v1.2", + "name": "Resource Allocation Assistant", + "description": "Resource Allocation Assistant is a declarative AI Agent that helps managers optimize team workloads and balance resource allocation effectively.", + "instructions": "$[file('instruction.txt')]", + "capabilities": [ + { + "name": "OneDriveAndSharePoint" + }, + { + "name": "GraphConnectors" + } + ], + "conversation_starters": [ + { + "title": "Assess Team Workload", + "text": "How many tasks is my team handling? Who is overloaded?" + }, + { + "title": "Identify Workload Imbalances", + "text": "Which team members are overloaded, and who has availability?" + }, + { + "title": "Optimize Task Distribution", + "text": "How can I redistribute tasks to balance workload across my team?" + }, + { + "title": "Manage High-Priority Tasks", + "text": "Which critical tasks need immediate reassignment?" + }, + { + "title": "Prevent Burnout & Improve Efficiency", + "text": "How can I reduce team overload while maintaining productivity?" + }, + { + "title": "Monitor and Adjust Workload", + "text": "Can you help track workload changes over time and suggest adjustments?" + } + ] +} diff --git a/samples/da-resource-allocation/appPackage/instruction.txt b/samples/da-resource-allocation/appPackage/instruction.txt new file mode 100644 index 000000000..c75d4e5c1 --- /dev/null +++ b/samples/da-resource-allocation/appPackage/instruction.txt @@ -0,0 +1,36 @@ +Purpose: +You are an expert Resource Allocation Advisor in Microsoft Teams. Your goal is to help managers balance workloads efficiently by asking structured questions, providing insights, and offering best practices. + +Goals: +* Assess workload distribution based on user-provided input. +* Identify overworked and underutilized team members through guided questions. +* Recommend workload balancing strategies without direct system access. +* Provide best practices for assigning tasks, upskilling, or deferring work. +* Help managers document decisions via Teams messages or Planner. + +User Interaction Flow: +First, understand the team’s workload. Start by asking: +* "How many active tasks or projects are currently in progress?" +* "Which team members are struggling with too many tasks?" +* "Who in your team has capacity to take on more work?" + +Second Identify workload bottlenecks: +* "It looks like [Employee X] has more than [Y] tasks. Should we consider redistributing?" +* "Are there any critical deadlines requiring immediate attention?" + +Third Recommend solutions based on input: +* "To improve efficiency, consider shifting [Task A] to [Employee B] who has availability." +* "You may want to upskill [Employee X] in [Skill Y] for better task distribution." + +Last Follow up: +* "Would you like to document this in a Teams message?" +* "Should I set a reminder for a follow-up check-in?" + +Overall Direction: +* Always keep responses structured and actionable. +* If the user provides incomplete details, ask follow-up questions. +* Avoid overwhelming users with multiple questions at once—guide them step by step. +* Keep a helpful and proactive tone. +* If asked for automatic task reassignment, suggest best practices instead (since the agent has no direct system access). +* After each response, ask if the user needs further assistance. +* If greeted or asked for capabilities, briefly explain your role and provide examples. \ No newline at end of file diff --git a/samples/da-resource-allocation/appPackage/manifest.json b/samples/da-resource-allocation/appPackage/manifest.json new file mode 100644 index 000000000..9da6b017a --- /dev/null +++ b/samples/da-resource-allocation/appPackage/manifest.json @@ -0,0 +1,39 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/teams/v1.19/MicrosoftTeams.schema.json", + "manifestVersion": "1.19", + "version": "1.0.0", + "id": "${{TEAMS_APP_ID}}", + "developer": { + "name": "Teams App, Inc.", + "websiteUrl": "https://www.example.com", + "privacyUrl": "https://www.example.com/privacy", + "termsOfUseUrl": "https://www.example.com/termofuse" + }, + "icons": { + "color": "color.png", + "outline": "outline.png" + }, + "name": { + "short": "Resource Allocation", + "full": "Resource Allocation App" + }, + "description": { + "short": "Make resource allocation easy", + "full": "Resource Allocation App helps you to allocate resources easily" + }, + "accentColor": "#FFFFFF", + "composeExtensions": [], + "permissions": [ + "identity", + "messageTeamMembers" + ], + "copilotAgents": { + "declarativeAgents": [ + { + "id": "declarativeAgent", + "file": "declarativeAgent.json" + } + ] + }, + "validDomains": [] +} \ No newline at end of file diff --git a/samples/da-resource-allocation/appPackage/outline.png b/samples/da-resource-allocation/appPackage/outline.png new file mode 100644 index 0000000000000000000000000000000000000000..f7a4c864475f219c8ff252e15ee250cd2308c9f5 GIT binary patch literal 492 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%0D%8hLIXTEqFWuYjD4+7u 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 literal 0 HcmV?d00001 diff --git a/samples/da-resource-allocation/assets/sample.json b/samples/da-resource-allocation/assets/sample.json new file mode 100644 index 000000000..52f82fc17 --- /dev/null +++ b/samples/da-resource-allocation/assets/sample.json @@ -0,0 +1,68 @@ +[ + { + "name": "pnp-copilot-pro-dev-resource-allocation", + "source": "pnp", + "title": "Resource Allocation Assistant", + "shortDescription": "Resource Allocation Assistant is a declarative AI Agent that helps managers optimize team workloads and balance resource allocation effectively.", + "url": "https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/da-resource-allocation", + "downloadUrl": "https://pnp.github.io/download-partial/?url=https://github.com/pnp/copilot-pro-dev-samples/tree/main/samples/da-resource-allocation", + "longDescription": [ + "The \"Resource Allocation\" declarative agent is a sample agent that helps managers optimize team workloads and balance resource allocation effectively. It provides conversation starters to help managers assess team workload, identify workload imbalances, optimize task distribution, manage high-priority tasks, prevent burnout and improve efficiency, and monitor and adjust workload." + ], + "creationDateTime": "2025-03-05", + "updateDateTime": "2025-03-05", + "products": [ + "Microsoft 365 Copilot" + ], + "metadata": [ + { + "key": "PLATFORM", + "value": "Node.js" + }, + { + "key": "LANGUAGE", + "value": "TypeScript" + }, + { + "key": "API-PLUGIN", + "value": "No" + }, + { + "key": "GRAPH-CONNECTOR", + "value": "No" + } + ], + "thumbnails": [ + { + "type": "image", + "order": 100, + "url": "https://raw.githubusercontent.com/pnp/copilot-pro-dev-samples/refs/heads/main/samples/da-CareerCoach/assets/ResourceAssistant.png", + "alt": "Resource Allocation Assistant" + } + ], + "authors": [ + { + "gitHubAccount": "Valeras Narbutas", + "pictureUrl": "https://github.com/ValerasNarbutas.png", + "name": "Valeras Narbutas" + } + ], + "references": [ + { + "name": "Microsoft 365 Copilot extensibility", + "description": "Learn more about what Microsoft 365 Copilot and how you can extend it.", + "url": "https://learn.microsoft.com/microsoft-365-copilot/extensibility/" + }, + { + "name": "Declarative agents for Microsoft 365 Copilot overview", + "description": "Learn more about what declarative agents for Microsoft 365 Copilot are.", + "url": "https://learn.microsoft.com/microsoft-365-copilot/extensibility/overview-declarative-agent" + }, + { + "name": "Build a declarative agent for Microsoft 365 Copilot", + "description": "Learn how to build a declarative agent for Microsoft 365 Copilot.", + "url": "https://learn.microsoft.com/microsoft-365-copilot/extensibility/build-declarative-agents" + } + ] + } + ] \ No newline at end of file diff --git a/samples/da-resource-allocation/env/.env.dev b/samples/da-resource-allocation/env/.env.dev new file mode 100644 index 000000000..64b1f94d7 --- /dev/null +++ b/samples/da-resource-allocation/env/.env.dev @@ -0,0 +1,11 @@ +# This file includes environment variables that will be committed to git by default. + +# Built-in environment variables +TEAMSFX_ENV=dev +APP_NAME_SUFFIX=dev + +# Generated during provision, you can also add your own variables. +TEAMS_APP_ID=8bcf6d75-5940-4706-943f-1dca24f1f79a +TEAMS_APP_TENANT_ID=05baed4d-e049-45c7-b47d-c99c66fdb589 +M365_TITLE_ID=U_16695303-0a45-d152-4938-696325c4e80c +M365_APP_ID=985775e7-f8b6-48a3-8a6e-621eb53c7e49 \ No newline at end of file diff --git a/samples/da-resource-allocation/teamsapp.yml b/samples/da-resource-allocation/teamsapp.yml new file mode 100644 index 000000000..b2d3840ce --- /dev/null +++ b/samples/da-resource-allocation/teamsapp.yml @@ -0,0 +1,81 @@ +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json +# Visit https://aka.ms/teamsfx-v5.0-guide for details on this file +# Visit https://aka.ms/teamsfx-actions for details on actions +version: v1.7 + +environmentFolderPath: ./env + +# Triggered when 'teamsapp provision' is executed +provision: + # Creates a Teams app + - uses: teamsApp/create + with: + # Teams app name + name: da-resource-allocation${{APP_NAME_SUFFIX}} + # Write the information of created resources into environment file for + # the specified environment variable(s). + writeToEnvironmentFile: + teamsAppId: TEAMS_APP_ID + + # Build Teams app package with latest env value + - uses: teamsApp/zipAppPackage + with: + # Path to manifest template + manifestPath: ./appPackage/manifest.json + outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip + outputFolder: ./appPackage/build + # Validate app package using validation rules + - uses: teamsApp/validateAppPackage + with: + # Relative path to this file. This is the path for built zip file. + appPackagePath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip + # Apply the Teams app manifest to an existing Teams app in + # Teams Developer Portal. + # Will use the app id in manifest file to determine which Teams app to update. + - uses: teamsApp/update + with: + # Relative path to this file. This is the path for built zip file. + appPackagePath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip + # Extend your Teams app to Outlook and the Microsoft 365 app + - uses: teamsApp/extendToM365 + with: + # Relative path to the build app package. + appPackagePath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip + # Write the information of created resources into environment file for + # the specified environment variable(s). + writeToEnvironmentFile: + titleId: M365_TITLE_ID + appId: M365_APP_ID + +# Triggered when 'teamsapp publish' is executed +publish: + # Build Teams app package with latest env value + - uses: teamsApp/zipAppPackage + with: + # Path to manifest template + manifestPath: ./appPackage/manifest.json + outputZipPath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip + outputFolder: ./appPackage/build + # Validate app package using validation rules + - uses: teamsApp/validateAppPackage + with: + # Relative path to this file. This is the path for built zip file. + appPackagePath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip + # Apply the Teams app manifest to an existing Teams app in + # Teams Developer Portal. + # Will use the app id in manifest file to determine which Teams app to update. + - uses: teamsApp/update + with: + # Relative path to this file. This is the path for built zip file. + appPackagePath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip + # Publish the app to + # Teams Admin Center (https://admin.teams.microsoft.com/policies/manage-apps) + # for review and approval + - uses: teamsApp/publishAppPackage + with: + appPackagePath: ./appPackage/build/appPackage.${{TEAMSFX_ENV}}.zip + # Write the information of created resources into environment file for + # the specified environment variable(s). + writeToEnvironmentFile: + publishedAppId: TEAMS_APP_PUBLISHED_APP_ID +projectId: 2c0a30c9-3f49-418e-bf38-894b3679e0e3 From 63ac2aa0e8cb491e8995a0ce1c01993807a0fed2 Mon Sep 17 00:00:00 2001 From: Valeras Narbutas Date: Wed, 5 Mar 2025 15:56:59 +0200 Subject: [PATCH 2/5] Fix image URL in sample.json for Resource Allocation Assistant --- samples/da-resource-allocation/assets/sample.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/da-resource-allocation/assets/sample.json b/samples/da-resource-allocation/assets/sample.json index 52f82fc17..21fc657c2 100644 --- a/samples/da-resource-allocation/assets/sample.json +++ b/samples/da-resource-allocation/assets/sample.json @@ -36,7 +36,7 @@ { "type": "image", "order": 100, - "url": "https://raw.githubusercontent.com/pnp/copilot-pro-dev-samples/refs/heads/main/samples/da-CareerCoach/assets/ResourceAssistant.png", + "url": "https://raw.githubusercontent.com/pnp/copilot-pro-dev-samples/refs/heads/main/samples/da-resource-allocation/assets/ResourceAssistant.png", "alt": "Resource Allocation Assistant" } ], From 0ea7b6f239b9bb80b8fd3ac4c1ebaa8829641e94 Mon Sep 17 00:00:00 2001 From: Valeras Narbutas Date: Wed, 5 Mar 2025 16:02:21 +0200 Subject: [PATCH 3/5] Update image URL in sample.json to use relative path for Resource Allocation Assistant --- samples/da-resource-allocation/assets/sample.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/da-resource-allocation/assets/sample.json b/samples/da-resource-allocation/assets/sample.json index 21fc657c2..7186b898a 100644 --- a/samples/da-resource-allocation/assets/sample.json +++ b/samples/da-resource-allocation/assets/sample.json @@ -36,7 +36,7 @@ { "type": "image", "order": 100, - "url": "https://raw.githubusercontent.com/pnp/copilot-pro-dev-samples/refs/heads/main/samples/da-resource-allocation/assets/ResourceAssistant.png", + "url": "assets/ResourceAssistant.png", "alt": "Resource Allocation Assistant" } ], From 14dd487c94d3504d2ea420291ca6a577c3a445bf Mon Sep 17 00:00:00 2001 From: Valeras Narbutas Date: Wed, 5 Mar 2025 16:09:08 +0200 Subject: [PATCH 4/5] Update image URL in sample.json to use absolute path for Resource Allocation Assistant --- samples/da-resource-allocation/assets/sample.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/da-resource-allocation/assets/sample.json b/samples/da-resource-allocation/assets/sample.json index 7186b898a..64dd51d02 100644 --- a/samples/da-resource-allocation/assets/sample.json +++ b/samples/da-resource-allocation/assets/sample.json @@ -36,7 +36,7 @@ { "type": "image", "order": 100, - "url": "assets/ResourceAssistant.png", + "url": "https://github.com/pnp/copilot-pro-dev-samples/blob/main/samples/da-resource-allocation/assets/ResourceAssistant.png?raw=true", "alt": "Resource Allocation Assistant" } ], From a076e4c1e48d796246d1558b51bae1b62d45f8ef Mon Sep 17 00:00:00 2001 From: Bob German Date: Wed, 12 Mar 2025 18:21:36 -0400 Subject: [PATCH 5/5] Cleaned .env.dev and added telemetry link --- samples/da-resource-allocation/README.md | 5 +++++ samples/da-resource-allocation/env/.env.dev | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/samples/da-resource-allocation/README.md b/samples/da-resource-allocation/README.md index d3c8a2943..4267fd8ea 100644 --- a/samples/da-resource-allocation/README.md +++ b/samples/da-resource-allocation/README.md @@ -60,3 +60,8 @@ The following are Teams Toolkit specific project files. You can [visit a complet ## Addition information and references - [Declarative agents for Microsoft 365](https://aka.ms/teams-toolkit-declarative-agent) + +![](https://m365-visitor-stats.azurewebsites.net/SamplesGallery/da-resource-allocation) + + + diff --git a/samples/da-resource-allocation/env/.env.dev b/samples/da-resource-allocation/env/.env.dev index 64b1f94d7..f73cd1a62 100644 --- a/samples/da-resource-allocation/env/.env.dev +++ b/samples/da-resource-allocation/env/.env.dev @@ -5,7 +5,7 @@ TEAMSFX_ENV=dev APP_NAME_SUFFIX=dev # Generated during provision, you can also add your own variables. -TEAMS_APP_ID=8bcf6d75-5940-4706-943f-1dca24f1f79a -TEAMS_APP_TENANT_ID=05baed4d-e049-45c7-b47d-c99c66fdb589 -M365_TITLE_ID=U_16695303-0a45-d152-4938-696325c4e80c -M365_APP_ID=985775e7-f8b6-48a3-8a6e-621eb53c7e49 \ No newline at end of file +TEAMS_APP_ID= +TEAMS_APP_TENANT_ID= +M365_TITLE_ID= +M365_APP_ID= \ No newline at end of file