diff --git a/.github/workflows/dotnet-codeql.yml b/.github/workflows/dotnet-codeql.yml index 1186d870c..100426386 100644 --- a/.github/workflows/dotnet-codeql.yml +++ b/.github/workflows/dotnet-codeql.yml @@ -39,7 +39,7 @@ jobs: - name: Checkout uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Initialize CodeQL - uses: github/codeql-action/init@eb055d739abdc2e8de2e5f4ba1a8b246daa779aa # v3.26.0 + uses: github/codeql-action/init@883d8588e56d1753a8a58c1c86e88976f0c23449 # v3.26.3 with: languages: csharp - name: Setup .NET @@ -50,6 +50,6 @@ jobs: working-directory: dotnet/packages/Microsoft.TeamsAI/ run: dotnet build Microsoft.Teams.AI.sln --configuration Release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@eb055d739abdc2e8de2e5f4ba1a8b246daa779aa # v3.26.0 + uses: github/codeql-action/analyze@883d8588e56d1753a8a58c1c86e88976f0c23449 # v3.26.3 with: category: "/language:csharp" diff --git a/.github/workflows/js-codeql.yml b/.github/workflows/js-codeql.yml index 71379f62e..f47a2f2b5 100644 --- a/.github/workflows/js-codeql.yml +++ b/.github/workflows/js-codeql.yml @@ -38,10 +38,10 @@ jobs: - name: Checkout uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Initialize CodeQL - uses: github/codeql-action/init@eb055d739abdc2e8de2e5f4ba1a8b246daa779aa # v3.26.0 + uses: github/codeql-action/init@883d8588e56d1753a8a58c1c86e88976f0c23449 # v3.26.3 with: languages: javascript - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@eb055d739abdc2e8de2e5f4ba1a8b246daa779aa # v3.26.0 + uses: github/codeql-action/analyze@883d8588e56d1753a8a58c1c86e88976f0c23449 # v3.26.3 with: category: "/language:javascript" diff --git a/.github/workflows/python-codeql.yml b/.github/workflows/python-codeql.yml index 4721a78fb..347ad1306 100644 --- a/.github/workflows/python-codeql.yml +++ b/.github/workflows/python-codeql.yml @@ -38,10 +38,10 @@ jobs: - name: Checkout uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Initialize CodeQL - uses: github/codeql-action/init@eb055d739abdc2e8de2e5f4ba1a8b246daa779aa # v3.26.0 + uses: github/codeql-action/init@883d8588e56d1753a8a58c1c86e88976f0c23449 # v3.26.3 with: languages: python - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@eb055d739abdc2e8de2e5f4ba1a8b246daa779aa # v3.26.0 + uses: github/codeql-action/analyze@883d8588e56d1753a8a58c1c86e88976f0c23449 # v3.26.3 with: category: "/language:python" diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 3688dc46e..a8e742223 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -66,6 +66,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@eb055d739abdc2e8de2e5f4ba1a8b246daa779aa # v3.26.0 + uses: github/codeql-action/upload-sarif@883d8588e56d1753a8a58c1c86e88976f0c23449 # v3.26.3 with: sarif_file: results.sarif diff --git a/js/package.json b/js/package.json index ef0fa3c19..7a3350add 100644 --- a/js/package.json +++ b/js/package.json @@ -26,16 +26,16 @@ "devDependencies": { "@azure/logger": "^1.1.4", "@azure/ms-rest-js": "2.7.0", - "@microsoft/api-extractor": "^7.47.5", + "@microsoft/api-extractor": "^7.47.6", "@standardlabs/is-private": "^1.0.1", "@types/jsonwebtoken": "9.0.4", "@types/lodash": "^4.17.7", "@types/mocha": "^10.0.7", - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/sinon": "^10.0.19", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", - "applicationinsights": "^2.9.5", + "applicationinsights": "^2.9.6", "browserify": "^17.0.0", "chai": "^4.5.0", "depcheck": "^1.4.7", diff --git a/js/packages/teams-ai/package.json b/js/packages/teams-ai/package.json index 96e02d1a5..b14160c6f 100644 --- a/js/packages/teams-ai/package.json +++ b/js/packages/teams-ai/package.json @@ -30,7 +30,7 @@ }, "dependencies": { "@azure/openai-assistants": "1.0.0-beta.5", - "@azure/msal-node": "^2.12.0", + "@azure/msal-node": "^2.13.0", "axios": "^1.7.4", "botbuilder-dialogs": "^4.22.3", "botframework-connector": "^4.22.1", @@ -50,7 +50,7 @@ "@types/express": "^4.17.21", "@types/jsonwebtoken": "^9.0.4", "@types/mocha": "^10.0.7", - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/uuid": "^9.0.8", "botbuilder-core": "^4.22.1", "eslint": "^8.57.0", diff --git a/js/samples/01.getting-started/a.echoBot/.gitignore b/js/samples/01.getting-started/a.echoBot/.gitignore index d35dca83b..32d17f0a3 100644 --- a/js/samples/01.getting-started/a.echoBot/.gitignore +++ b/js/samples/01.getting-started/a.echoBot/.gitignore @@ -112,3 +112,6 @@ env/.env.*.user env/.env.local appPackage/build .deployment +env/.env.testtool +.localConfigs.testTool +devTools/ diff --git a/js/samples/01.getting-started/a.echoBot/.vscode/launch.json b/js/samples/01.getting-started/a.echoBot/.vscode/launch.json index 063ae2e52..d0de4b86d 100644 --- a/js/samples/01.getting-started/a.echoBot/.vscode/launch.json +++ b/js/samples/01.getting-started/a.echoBot/.vscode/launch.json @@ -90,6 +90,18 @@ "order": 2 }, "stopAll": true + }, + { + "name": "Debug in Test Tool", + "configurations": [ + "Attach to Local Service" + ], + "preLaunchTask": "Start Teams App (Test Tool)", + "presentation": { + "group": "local", + "order": 1 + }, + "stopAll": true } ] } diff --git a/js/samples/01.getting-started/a.echoBot/.vscode/tasks.json b/js/samples/01.getting-started/a.echoBot/.vscode/tasks.json index 585f86ae9..0110ef75e 100644 --- a/js/samples/01.getting-started/a.echoBot/.vscode/tasks.json +++ b/js/samples/01.getting-started/a.echoBot/.vscode/tasks.json @@ -100,6 +100,105 @@ "endsPattern": "restify listening to|Bot/ME service listening at|[nodemon] app crashed" } } + }, + { + "label": "Start Teams App (Test Tool)", + "dependsOn": [ + "Validate prerequisites (Test Tool)", + "Deploy (Test Tool)", + "Start application (Test Tool)", + "Start Test Tool", + ], + "dependsOrder": "sequence" + }, + { + // Check all required prerequisites. + // See https://aka.ms/teamsfx-tasks/check-prerequisites to know the details and how to customize the args. + "label": "Validate prerequisites (Test Tool)", + "type": "teamsfx", + "command": "debug-check-prerequisites", + "args": { + "prerequisites": [ + "nodejs", // Validate if Node.js is installed. + "portOccupancy" // Validate available ports to ensure those debug ones are not occupied. + ], + "portOccupancy": [ + 3978, // app service port + 9239, // app inspector port for Node.js debugger + 56150, // test tool port + ] + } + }, + { + // Build project. + // See https://aka.ms/teamsfx-tasks/deploy to know the details and how to customize the args. + "label": "Deploy (Test Tool)", + "type": "teamsfx", + "command": "deploy", + "args": { + "env": "testtool", + } + }, + { + "label": "Start application (Test Tool)", + "type": "shell", + "command": "npm run dev:teamsfx:testtool", + "isBackground": true, + "options": { + "cwd": "${workspaceFolder}", + }, + "problemMatcher": { + "pattern": [ + { + "regexp": "^.*$", + "file": 0, + "location": 1, + "message": 2 + } + ], + "background": { + "activeOnStart": true, + "beginsPattern": "[nodemon] starting", + "endsPattern": "restify listening to|Bot/ME service listening at|[nodemon] app crashed" + } + } + }, + { + "label": "Start Test Tool", + "type": "shell", + "command": "npm run dev:teamsfx:launch-testtool", + "isBackground": true, + "options": { + "env": { + "PATH": "${workspaceFolder}/devTools/teamsapptester/node_modules/.bin:${env:PATH}" + } + }, + "windows": { + "options": { + "env": { + "PATH": "${workspaceFolder}/devTools/teamsapptester/node_modules/.bin;${env:PATH}" + } + } + }, + "problemMatcher": { + "pattern": [ + { + "regexp": "^.*$", + "file": 0, + "location": 1, + "message": 2 + } + ], + "background": { + "activeOnStart": true, + "beginsPattern": ".*", + "endsPattern": "Listening on" + } + }, + "presentation": { + "panel": "dedicated", + "reveal": "silent" + } } ] } \ No newline at end of file diff --git a/js/samples/01.getting-started/a.echoBot/README.md b/js/samples/01.getting-started/a.echoBot/README.md index f02dfe8b4..2a2f232cb 100644 --- a/js/samples/01.getting-started/a.echoBot/README.md +++ b/js/samples/01.getting-started/a.echoBot/README.md @@ -11,6 +11,7 @@ This sample shows how to incorporate a basic conversational flow into a Microsof - [Setting up the sample](#setting-up-the-sample) - [Testing the sample](#testing-the-sample) - [Using Teams Toolkit for Visual Studio Code](#using-teams-toolkit-for-visual-studio-code) + - [Using Teams App test tool](#using-teams-app-test-tool) @@ -81,3 +82,15 @@ The simplest way to run this sample in Teams is to use Teams Toolkit for Visual 1. In the browser that launches, select the **Add** button to install the app to Teams.. > If you do not have permission to upload custom apps (sideloading), Teams Toolkit will recommend creating and using a Microsoft 365 Developer Program account - a free program to get your own dev environment sandbox that includes Teams. + +### Using Teams App test tool + +Use **Teams App test tool** (integrated into teams Toolkit) to run this sample. + +1. Ensure you have downloaded and installed [Visual Studio Code](https://code.visualstudio.com/docs/setup/setup-overview) +1. Install the [Teams Toolkit extension](https://marketplace.visualstudio.com/items?itemName=TeamsDevApp.ms-teams-vscode-extension) +1. Copy this sample into a new folder outside of teams-ai +1. Select File > Open Folder in VS Code and choose this sample's directory +1. From the left pane, select **Run and Debug**(Ctrl+Shift+D) and select **Debug in Test Tool** in dropdown list. +1. Select Debug > Start Debugging or F5 to run the app. +1. The browser will pop up to open Teams App Test Tool. diff --git a/js/samples/01.getting-started/a.echoBot/env/.env.testtool b/js/samples/01.getting-started/a.echoBot/env/.env.testtool new file mode 100644 index 000000000..eb864f366 --- /dev/null +++ b/js/samples/01.getting-started/a.echoBot/env/.env.testtool @@ -0,0 +1,5 @@ +TEAMSFX_ENV=testtool + +# Environment variables used by test tool +TEAMSAPPTESTER_PORT=56150 +TEAMSFX_NOTIFICATION_STORE_FILENAME=.notification.testtoolstore.json \ No newline at end of file diff --git a/js/samples/01.getting-started/a.echoBot/package.json b/js/samples/01.getting-started/a.echoBot/package.json index 0b6f07a4f..22512474b 100644 --- a/js/samples/01.getting-started/a.echoBot/package.json +++ b/js/samples/01.getting-started/a.echoBot/package.json @@ -27,15 +27,16 @@ "restify": "~11.1.0" }, "devDependencies": { - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/restify": "^8.5.12", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", + "env-cmd": "^10.1.0", "eslint": "^8.57.0", "nodemon": "~3.0.1", "prettier": "^3.3.3", "rimraf": "^5.0.10", - "typescript": "^5.5.4", - "ts-node": "^10.9.2" + "ts-node": "^10.9.2", + "typescript": "^5.5.4" } } diff --git a/js/samples/01.getting-started/a.echoBot/teamsapp.testtool.yml b/js/samples/01.getting-started/a.echoBot/teamsapp.testtool.yml new file mode 100644 index 000000000..5ed441f5f --- /dev/null +++ b/js/samples/01.getting-started/a.echoBot/teamsapp.testtool.yml @@ -0,0 +1,24 @@ +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/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.5 + +deploy: + # Install development tool(s) + - uses: devTool/install + with: + testTool: + version: ~0.2.1 + symlinkDir: ./devTools/teamsapptester + + # Run npm command + - uses: cli/runNpmCommand + with: + args: install --no-audit --workspaces=false + + # Generate runtime environment variables + - uses: file/createOrUpdateEnvironmentFile + with: + target: ./.localConfigs.testTool + envs: + TEAMSFX_NOTIFICATION_STORE_FILENAME: ${{TEAMSFX_NOTIFICATION_STORE_FILENAME}} \ No newline at end of file diff --git a/js/samples/02.teams-features/a.messageExtensions.searchCommand/package.json b/js/samples/02.teams-features/a.messageExtensions.searchCommand/package.json index 2ad3814d0..2a4101b32 100644 --- a/js/samples/02.teams-features/a.messageExtensions.searchCommand/package.json +++ b/js/samples/02.teams-features/a.messageExtensions.searchCommand/package.json @@ -28,7 +28,7 @@ "restify": "~11.1.0" }, "devDependencies": { - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/restify": "^8.5.12", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", diff --git a/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/.gitignore b/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/.gitignore index d35dca83b..32d17f0a3 100644 --- a/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/.gitignore +++ b/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/.gitignore @@ -112,3 +112,6 @@ env/.env.*.user env/.env.local appPackage/build .deployment +env/.env.testtool +.localConfigs.testTool +devTools/ diff --git a/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/.vscode/launch.json b/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/.vscode/launch.json index e862592af..eb52d6d07 100644 --- a/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/.vscode/launch.json +++ b/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/.vscode/launch.json @@ -80,6 +80,18 @@ "order": 2 }, "stopAll": true + }, + { + "name": "Debug in Test Tool", + "configurations": [ + "Attach to Local Service" + ], + "preLaunchTask": "Start Teams App (Test Tool)", + "presentation": { + "group": "local", + "order": 1 + }, + "stopAll": true } ] } diff --git a/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/.vscode/tasks.json b/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/.vscode/tasks.json index 585f86ae9..0110ef75e 100644 --- a/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/.vscode/tasks.json +++ b/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/.vscode/tasks.json @@ -100,6 +100,105 @@ "endsPattern": "restify listening to|Bot/ME service listening at|[nodemon] app crashed" } } + }, + { + "label": "Start Teams App (Test Tool)", + "dependsOn": [ + "Validate prerequisites (Test Tool)", + "Deploy (Test Tool)", + "Start application (Test Tool)", + "Start Test Tool", + ], + "dependsOrder": "sequence" + }, + { + // Check all required prerequisites. + // See https://aka.ms/teamsfx-tasks/check-prerequisites to know the details and how to customize the args. + "label": "Validate prerequisites (Test Tool)", + "type": "teamsfx", + "command": "debug-check-prerequisites", + "args": { + "prerequisites": [ + "nodejs", // Validate if Node.js is installed. + "portOccupancy" // Validate available ports to ensure those debug ones are not occupied. + ], + "portOccupancy": [ + 3978, // app service port + 9239, // app inspector port for Node.js debugger + 56150, // test tool port + ] + } + }, + { + // Build project. + // See https://aka.ms/teamsfx-tasks/deploy to know the details and how to customize the args. + "label": "Deploy (Test Tool)", + "type": "teamsfx", + "command": "deploy", + "args": { + "env": "testtool", + } + }, + { + "label": "Start application (Test Tool)", + "type": "shell", + "command": "npm run dev:teamsfx:testtool", + "isBackground": true, + "options": { + "cwd": "${workspaceFolder}", + }, + "problemMatcher": { + "pattern": [ + { + "regexp": "^.*$", + "file": 0, + "location": 1, + "message": 2 + } + ], + "background": { + "activeOnStart": true, + "beginsPattern": "[nodemon] starting", + "endsPattern": "restify listening to|Bot/ME service listening at|[nodemon] app crashed" + } + } + }, + { + "label": "Start Test Tool", + "type": "shell", + "command": "npm run dev:teamsfx:launch-testtool", + "isBackground": true, + "options": { + "env": { + "PATH": "${workspaceFolder}/devTools/teamsapptester/node_modules/.bin:${env:PATH}" + } + }, + "windows": { + "options": { + "env": { + "PATH": "${workspaceFolder}/devTools/teamsapptester/node_modules/.bin;${env:PATH}" + } + } + }, + "problemMatcher": { + "pattern": [ + { + "regexp": "^.*$", + "file": 0, + "location": 1, + "message": 2 + } + ], + "background": { + "activeOnStart": true, + "beginsPattern": ".*", + "endsPattern": "Listening on" + } + }, + "presentation": { + "panel": "dedicated", + "reveal": "silent" + } } ] } \ No newline at end of file diff --git a/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/README.md b/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/README.md index f53ce3a84..fa5b81aa6 100644 --- a/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/README.md +++ b/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/README.md @@ -11,6 +11,7 @@ This sample shows how to incorporate Adaptive Cards into a Microsoft Teams appli - [Setting up the sample](#setting-up-the-sample) - [Testing the sample](#testing-the-sample) - [Using Teams Toolkit for Visual Studio Code](#using-teams-toolkit-for-visual-studio-code) + - [Using Teams App test tool](#using-teams-app-test-tool) @@ -81,3 +82,15 @@ The simplest way to run this sample in Teams is to use Teams Toolkit for Visual 1. In the browser that launches, select the **Add** button to install the app to Teams. > If you do not have permission to upload custom apps (sideloading), Teams Toolkit will recommend creating and using a Microsoft 365 Developer Program account - a free program to get your own dev environment sandbox that includes Teams. + +### Using Teams App test tool + +Use **Teams App test tool** (integrated into teams Toolkit) to run this sample. + +1. Ensure you have downloaded and installed [Visual Studio Code](https://code.visualstudio.com/docs/setup/setup-overview) +1. Install the [Teams Toolkit extension](https://marketplace.visualstudio.com/items?itemName=TeamsDevApp.ms-teams-vscode-extension) +1. Copy this sample into a new folder outside of teams-ai +1. Select File > Open Folder in VS Code and choose this sample's directory +1. From the left pane, select **Run and Debug**(Ctrl+Shift+D) and select **Debug in Test Tool** in dropdown list. +1. Select Debug > Start Debugging or F5 to run the app. +1. The browser will pop up to open Teams App Test Tool. \ No newline at end of file diff --git a/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/env/.env.testtool b/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/env/.env.testtool new file mode 100644 index 000000000..eb864f366 --- /dev/null +++ b/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/env/.env.testtool @@ -0,0 +1,5 @@ +TEAMSFX_ENV=testtool + +# Environment variables used by test tool +TEAMSAPPTESTER_PORT=56150 +TEAMSFX_NOTIFICATION_STORE_FILENAME=.notification.testtoolstore.json \ No newline at end of file diff --git a/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/package.json b/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/package.json index a12ae8263..6183ecbc8 100644 --- a/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/package.json +++ b/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/package.json @@ -28,15 +28,16 @@ "restify": "~11.1.0" }, "devDependencies": { - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/restify": "^8.5.12", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", + "env-cmd": "^10.1.0", "eslint": "^8.57.0", "nodemon": "~3.0.1", "prettier": "^3.3.3", "rimraf": "^5.0.10", - "typescript": "^5.5.4", - "ts-node": "^10.9.2" + "ts-node": "^10.9.2", + "typescript": "^5.5.4" } } diff --git a/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/teamsapp.testtool.yml b/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/teamsapp.testtool.yml new file mode 100644 index 000000000..5ed441f5f --- /dev/null +++ b/js/samples/02.teams-features/b.adaptiveCards.typeAheadBot/teamsapp.testtool.yml @@ -0,0 +1,24 @@ +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/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.5 + +deploy: + # Install development tool(s) + - uses: devTool/install + with: + testTool: + version: ~0.2.1 + symlinkDir: ./devTools/teamsapptester + + # Run npm command + - uses: cli/runNpmCommand + with: + args: install --no-audit --workspaces=false + + # Generate runtime environment variables + - uses: file/createOrUpdateEnvironmentFile + with: + target: ./.localConfigs.testTool + envs: + TEAMSFX_NOTIFICATION_STORE_FILENAME: ${{TEAMSFX_NOTIFICATION_STORE_FILENAME}} \ No newline at end of file diff --git a/js/samples/03.ai-concepts/a.twentyQuestions/package.json b/js/samples/03.ai-concepts/a.twentyQuestions/package.json index 33bbca960..37ef0c61a 100644 --- a/js/samples/03.ai-concepts/a.twentyQuestions/package.json +++ b/js/samples/03.ai-concepts/a.twentyQuestions/package.json @@ -29,7 +29,7 @@ "restify": "~11.1.0" }, "devDependencies": { - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/restify": "^8.5.12", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", diff --git a/js/samples/03.ai-concepts/b.AI-messageExtensions/package.json b/js/samples/03.ai-concepts/b.AI-messageExtensions/package.json index d45c140fe..7aa22930c 100644 --- a/js/samples/03.ai-concepts/b.AI-messageExtensions/package.json +++ b/js/samples/03.ai-concepts/b.AI-messageExtensions/package.json @@ -27,7 +27,7 @@ "restify": "~11.1.0" }, "devDependencies": { - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/restify": "^8.5.12", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", diff --git a/js/samples/03.ai-concepts/c.actionMapping-lightBot/.gitignore b/js/samples/03.ai-concepts/c.actionMapping-lightBot/.gitignore index d35dca83b..32d17f0a3 100644 --- a/js/samples/03.ai-concepts/c.actionMapping-lightBot/.gitignore +++ b/js/samples/03.ai-concepts/c.actionMapping-lightBot/.gitignore @@ -112,3 +112,6 @@ env/.env.*.user env/.env.local appPackage/build .deployment +env/.env.testtool +.localConfigs.testTool +devTools/ diff --git a/js/samples/03.ai-concepts/c.actionMapping-lightBot/.vscode/launch.json b/js/samples/03.ai-concepts/c.actionMapping-lightBot/.vscode/launch.json index 063ae2e52..d0de4b86d 100644 --- a/js/samples/03.ai-concepts/c.actionMapping-lightBot/.vscode/launch.json +++ b/js/samples/03.ai-concepts/c.actionMapping-lightBot/.vscode/launch.json @@ -90,6 +90,18 @@ "order": 2 }, "stopAll": true + }, + { + "name": "Debug in Test Tool", + "configurations": [ + "Attach to Local Service" + ], + "preLaunchTask": "Start Teams App (Test Tool)", + "presentation": { + "group": "local", + "order": 1 + }, + "stopAll": true } ] } diff --git a/js/samples/03.ai-concepts/c.actionMapping-lightBot/.vscode/tasks.json b/js/samples/03.ai-concepts/c.actionMapping-lightBot/.vscode/tasks.json index 585f86ae9..0110ef75e 100644 --- a/js/samples/03.ai-concepts/c.actionMapping-lightBot/.vscode/tasks.json +++ b/js/samples/03.ai-concepts/c.actionMapping-lightBot/.vscode/tasks.json @@ -100,6 +100,105 @@ "endsPattern": "restify listening to|Bot/ME service listening at|[nodemon] app crashed" } } + }, + { + "label": "Start Teams App (Test Tool)", + "dependsOn": [ + "Validate prerequisites (Test Tool)", + "Deploy (Test Tool)", + "Start application (Test Tool)", + "Start Test Tool", + ], + "dependsOrder": "sequence" + }, + { + // Check all required prerequisites. + // See https://aka.ms/teamsfx-tasks/check-prerequisites to know the details and how to customize the args. + "label": "Validate prerequisites (Test Tool)", + "type": "teamsfx", + "command": "debug-check-prerequisites", + "args": { + "prerequisites": [ + "nodejs", // Validate if Node.js is installed. + "portOccupancy" // Validate available ports to ensure those debug ones are not occupied. + ], + "portOccupancy": [ + 3978, // app service port + 9239, // app inspector port for Node.js debugger + 56150, // test tool port + ] + } + }, + { + // Build project. + // See https://aka.ms/teamsfx-tasks/deploy to know the details and how to customize the args. + "label": "Deploy (Test Tool)", + "type": "teamsfx", + "command": "deploy", + "args": { + "env": "testtool", + } + }, + { + "label": "Start application (Test Tool)", + "type": "shell", + "command": "npm run dev:teamsfx:testtool", + "isBackground": true, + "options": { + "cwd": "${workspaceFolder}", + }, + "problemMatcher": { + "pattern": [ + { + "regexp": "^.*$", + "file": 0, + "location": 1, + "message": 2 + } + ], + "background": { + "activeOnStart": true, + "beginsPattern": "[nodemon] starting", + "endsPattern": "restify listening to|Bot/ME service listening at|[nodemon] app crashed" + } + } + }, + { + "label": "Start Test Tool", + "type": "shell", + "command": "npm run dev:teamsfx:launch-testtool", + "isBackground": true, + "options": { + "env": { + "PATH": "${workspaceFolder}/devTools/teamsapptester/node_modules/.bin:${env:PATH}" + } + }, + "windows": { + "options": { + "env": { + "PATH": "${workspaceFolder}/devTools/teamsapptester/node_modules/.bin;${env:PATH}" + } + } + }, + "problemMatcher": { + "pattern": [ + { + "regexp": "^.*$", + "file": 0, + "location": 1, + "message": 2 + } + ], + "background": { + "activeOnStart": true, + "beginsPattern": ".*", + "endsPattern": "Listening on" + } + }, + "presentation": { + "panel": "dedicated", + "reveal": "silent" + } } ] } \ No newline at end of file diff --git a/js/samples/03.ai-concepts/c.actionMapping-lightBot/README.md b/js/samples/03.ai-concepts/c.actionMapping-lightBot/README.md index 22bcf340e..924045bad 100644 --- a/js/samples/03.ai-concepts/c.actionMapping-lightBot/README.md +++ b/js/samples/03.ai-concepts/c.actionMapping-lightBot/README.md @@ -11,6 +11,7 @@ LightBot: Your Enlightened Assistant. This example showcases how the LightBot un - [Setting up the sample](#setting-up-the-sample) - [Testing the sample](#testing-the-sample) - [Using Teams Toolkit for Visual Studio Code](#using-teams-toolkit-for-visual-studio-code) + - [Using Teams App Test Tool](#using-teams-app-test-tool) @@ -118,3 +119,29 @@ If you are using Azure OpenAI then follow these steps: 1. In the browser that launches, select the **Add** button to install the app to Teams. > If you do not have permission to upload custom apps (sideloading), Teams Toolkit will recommend creating and using a Microsoft 365 Developer Program account - a free program to get your own dev environment sandbox that includes Teams. + +### Using Teams App test tool + +If you are using Azure OpenAI then follow these steps: + +- Comment the `SECRET_OPENAI_KEY` variable in the `./env/.env.testtool` file. +- Add your Azure OpenAI key and endpoint values to the `SECRET_AZURE_OPENAI_KEY` and `SECRET_AZURE_OPENAI_ENDPOINT` variables +- Open the `teamsapp.testtool.yml` file and modify the last step to use Azure OpenAI variables instead: + +```yml +- uses: file/createOrUpdateEnvironmentFile + with: + target: ./.localConfigs.testTool + envs: + TEAMSFX_NOTIFICATION_STORE_FILENAME: ${{TEAMSFX_NOTIFICATION_STORE_FILENAME}} + # OPENAI_KEY: ${{SECRET_OPENAI_KEY}} + AZURE_OPENAI_KEY: ${{SECRET_AZURE_OPENAI_KEY}} + AZURE_OPENAI_ENDPOINT: ${{SECRET_AZURE_OPENAI_ENDPOINT}} +``` +1. Ensure you have downloaded and installed [Visual Studio Code](https://code.visualstudio.com/docs/setup/setup-overview) +1. Install the [Teams Toolkit extension](https://marketplace.visualstudio.com/items?itemName=TeamsDevApp.ms-teams-vscode-extension) +1. Copy this sample into a new folder outside of teams-ai +1. Select File > Open Folder in VS Code and choose this sample's directory +1. From the left pane, select **Run and Debug**(Ctrl+Shift+D) and select **Debug in Test Tool** in dropdown list. +1. Select Debug > Start Debugging or F5 to run the app. +1. The browser will pop up to open Teams App Test Tool. \ No newline at end of file diff --git a/js/samples/03.ai-concepts/c.actionMapping-lightBot/env/.env.testtool b/js/samples/03.ai-concepts/c.actionMapping-lightBot/env/.env.testtool new file mode 100644 index 000000000..c7882a486 --- /dev/null +++ b/js/samples/03.ai-concepts/c.actionMapping-lightBot/env/.env.testtool @@ -0,0 +1,9 @@ +TEAMSFX_ENV=testtool + +# Environment variables used by test tool +TEAMSAPPTESTER_PORT=56150 +TEAMSFX_NOTIFICATION_STORE_FILENAME=.notification.testtoolstore.json + +SECRET_OPENAI_KEY= +#SECRET_AZURE_OPENAI_KEY= +#SECRET_AZURE_OPENAI_ENDPOINT= \ No newline at end of file diff --git a/js/samples/03.ai-concepts/c.actionMapping-lightBot/package.json b/js/samples/03.ai-concepts/c.actionMapping-lightBot/package.json index 875a48bb8..f16e2dc54 100644 --- a/js/samples/03.ai-concepts/c.actionMapping-lightBot/package.json +++ b/js/samples/03.ai-concepts/c.actionMapping-lightBot/package.json @@ -12,31 +12,34 @@ "start": "tsc --build && node ./lib/index.js", "test": "echo \"Error: no test specified\" && exit 1", "watch": "nodemon --watch ./src -e ts --exec \"yarn start\"", - "dev:teamsfx": "nodemon --exec node --inspect=9239 --signal SIGINT -r ts-node/register ./src/index.ts" + "dev:teamsfx": "nodemon --exec node --inspect=9239 --signal SIGINT -r ts-node/register ./src/index.ts", + "dev:teamsfx:testtool": "env-cmd --silent -f .localConfigs.testTool npm run dev:teamsfx", + "dev:teamsfx:launch-testtool": "env-cmd --silent -f env/.env.testtool teamsapptester start" }, "repository": { "type": "git", "url": "https://github.com/microsoft/teams-ai" }, "dependencies": { - "botbuilder": "^4.22.3", "@microsoft/teams-ai": "~1.3.1", + "botbuilder": "^4.22.3", "dotenv": "^16.4.5", "openai": "4.28.4", "replace": "~1.2.0", "restify": "~11.1.0" }, "devDependencies": { - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/restify": "8.5.12", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", + "env-cmd": "^10.1.0", "eslint": "^8.57.0", "nodemon": "~1.19.4", "prettier": "^3.3.3", "rimraf": "^5.0.10", - "typescript": "^5.5.4", "shx": "^0.3.4", - "ts-node": "^10.9.2" + "ts-node": "^10.9.2", + "typescript": "^5.5.4" } } diff --git a/js/samples/03.ai-concepts/c.actionMapping-lightBot/teamsapp.testtool.yml b/js/samples/03.ai-concepts/c.actionMapping-lightBot/teamsapp.testtool.yml new file mode 100644 index 000000000..24c41a080 --- /dev/null +++ b/js/samples/03.ai-concepts/c.actionMapping-lightBot/teamsapp.testtool.yml @@ -0,0 +1,28 @@ +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/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.5 + +deploy: + # Install development tool(s) + - uses: devTool/install + with: + testTool: + version: ~0.2.1 + symlinkDir: ./devTools/teamsapptester + + # Run npm command + - uses: cli/runNpmCommand + with: + args: install --no-audit --workspaces=false + + # Generate runtime environment variables + - uses: file/createOrUpdateEnvironmentFile + with: + target: ./.localConfigs.testTool + envs: + TEAMSFX_NOTIFICATION_STORE_FILENAME: ${{TEAMSFX_NOTIFICATION_STORE_FILENAME}} + OPENAI_KEY: ${{SECRET_OPENAI_KEY}} + # AZURE_OPENAI_KEY: ${{SECRET_AZURE_OPENAI_KEY}} + # AZURE_OPENAI_ENDPOINT: ${{SECRET_AZURE_OPENAI_ENDPOINT}} + \ No newline at end of file diff --git a/js/samples/03.ai-concepts/d.chainedActions-listBot/.gitignore b/js/samples/03.ai-concepts/d.chainedActions-listBot/.gitignore index d35dca83b..1dd331113 100644 --- a/js/samples/03.ai-concepts/d.chainedActions-listBot/.gitignore +++ b/js/samples/03.ai-concepts/d.chainedActions-listBot/.gitignore @@ -112,3 +112,6 @@ env/.env.*.user env/.env.local appPackage/build .deployment +env/.env.testtool +.localConfigs.testTool +devTools/ \ No newline at end of file diff --git a/js/samples/03.ai-concepts/d.chainedActions-listBot/.vscode/launch.json b/js/samples/03.ai-concepts/d.chainedActions-listBot/.vscode/launch.json index 063ae2e52..d0de4b86d 100644 --- a/js/samples/03.ai-concepts/d.chainedActions-listBot/.vscode/launch.json +++ b/js/samples/03.ai-concepts/d.chainedActions-listBot/.vscode/launch.json @@ -90,6 +90,18 @@ "order": 2 }, "stopAll": true + }, + { + "name": "Debug in Test Tool", + "configurations": [ + "Attach to Local Service" + ], + "preLaunchTask": "Start Teams App (Test Tool)", + "presentation": { + "group": "local", + "order": 1 + }, + "stopAll": true } ] } diff --git a/js/samples/03.ai-concepts/d.chainedActions-listBot/.vscode/tasks.json b/js/samples/03.ai-concepts/d.chainedActions-listBot/.vscode/tasks.json index 585f86ae9..0110ef75e 100644 --- a/js/samples/03.ai-concepts/d.chainedActions-listBot/.vscode/tasks.json +++ b/js/samples/03.ai-concepts/d.chainedActions-listBot/.vscode/tasks.json @@ -100,6 +100,105 @@ "endsPattern": "restify listening to|Bot/ME service listening at|[nodemon] app crashed" } } + }, + { + "label": "Start Teams App (Test Tool)", + "dependsOn": [ + "Validate prerequisites (Test Tool)", + "Deploy (Test Tool)", + "Start application (Test Tool)", + "Start Test Tool", + ], + "dependsOrder": "sequence" + }, + { + // Check all required prerequisites. + // See https://aka.ms/teamsfx-tasks/check-prerequisites to know the details and how to customize the args. + "label": "Validate prerequisites (Test Tool)", + "type": "teamsfx", + "command": "debug-check-prerequisites", + "args": { + "prerequisites": [ + "nodejs", // Validate if Node.js is installed. + "portOccupancy" // Validate available ports to ensure those debug ones are not occupied. + ], + "portOccupancy": [ + 3978, // app service port + 9239, // app inspector port for Node.js debugger + 56150, // test tool port + ] + } + }, + { + // Build project. + // See https://aka.ms/teamsfx-tasks/deploy to know the details and how to customize the args. + "label": "Deploy (Test Tool)", + "type": "teamsfx", + "command": "deploy", + "args": { + "env": "testtool", + } + }, + { + "label": "Start application (Test Tool)", + "type": "shell", + "command": "npm run dev:teamsfx:testtool", + "isBackground": true, + "options": { + "cwd": "${workspaceFolder}", + }, + "problemMatcher": { + "pattern": [ + { + "regexp": "^.*$", + "file": 0, + "location": 1, + "message": 2 + } + ], + "background": { + "activeOnStart": true, + "beginsPattern": "[nodemon] starting", + "endsPattern": "restify listening to|Bot/ME service listening at|[nodemon] app crashed" + } + } + }, + { + "label": "Start Test Tool", + "type": "shell", + "command": "npm run dev:teamsfx:launch-testtool", + "isBackground": true, + "options": { + "env": { + "PATH": "${workspaceFolder}/devTools/teamsapptester/node_modules/.bin:${env:PATH}" + } + }, + "windows": { + "options": { + "env": { + "PATH": "${workspaceFolder}/devTools/teamsapptester/node_modules/.bin;${env:PATH}" + } + } + }, + "problemMatcher": { + "pattern": [ + { + "regexp": "^.*$", + "file": 0, + "location": 1, + "message": 2 + } + ], + "background": { + "activeOnStart": true, + "beginsPattern": ".*", + "endsPattern": "Listening on" + } + }, + "presentation": { + "panel": "dedicated", + "reveal": "silent" + } } ] } \ No newline at end of file diff --git a/js/samples/03.ai-concepts/d.chainedActions-listBot/README.md b/js/samples/03.ai-concepts/d.chainedActions-listBot/README.md index c9008c71f..4d9d6fb36 100644 --- a/js/samples/03.ai-concepts/d.chainedActions-listBot/README.md +++ b/js/samples/03.ai-concepts/d.chainedActions-listBot/README.md @@ -11,6 +11,7 @@ ListBot: Your Ultimate List Management Companion. Powered by advanced AI capabil - [Setting up the sample](#setting-up-the-sample) - [Testing the sample](#testing-the-sample) - [Using Teams Toolkit for Visual Studio Code](#using-teams-toolkit-for-visual-studio-code) + - [Using Teams App Test Tool](#using-teams-app-test-tool) @@ -196,3 +197,29 @@ If you are using Azure OpenAI then follow these steps: 1. In the browser that launches, select the **Add** button to install the app to Teams. > If you do not have permission to upload custom apps (sideloading), Teams Toolkit will recommend creating and using a Microsoft 365 Developer Program account - a free program to get your own dev environment sandbox that includes Teams. + +### Using Teams App test tool + +If you are using Azure OpenAI then follow these steps: + +- Comment the `SECRET_OPENAI_KEY` variable in the `./env/.env.testtool` file. +- Add your Azure OpenAI key and endpoint values to the `SECRET_AZURE_OPENAI_KEY` and `SECRET_AZURE_OPENAI_ENDPOINT` variables +- Open the `teamsapp.testtool.yml` file and modify the last step to use Azure OpenAI variables instead: + +```yml +- uses: file/createOrUpdateEnvironmentFile + with: + target: ./.localConfigs.testTool + envs: + TEAMSFX_NOTIFICATION_STORE_FILENAME: ${{TEAMSFX_NOTIFICATION_STORE_FILENAME}} + # OPENAI_KEY: ${{SECRET_OPENAI_KEY}} + AZURE_OPENAI_KEY: ${{SECRET_AZURE_OPENAI_KEY}} + AZURE_OPENAI_ENDPOINT: ${{SECRET_AZURE_OPENAI_ENDPOINT}} +``` +1. Ensure you have downloaded and installed [Visual Studio Code](https://code.visualstudio.com/docs/setup/setup-overview) +1. Install the [Teams Toolkit extension](https://marketplace.visualstudio.com/items?itemName=TeamsDevApp.ms-teams-vscode-extension) +1. Copy this sample into a new folder outside of teams-ai +1. Select File > Open Folder in VS Code and choose this sample's directory +1. From the left pane, select **Run and Debug**(Ctrl+Shift+D) and select **Debug in Test Tool** in dropdown list. +1. Select Debug > Start Debugging or F5 to run the app. +1. The browser will pop up to open Teams App Test Tool. \ No newline at end of file diff --git a/js/samples/03.ai-concepts/d.chainedActions-listBot/env/.env.testtool b/js/samples/03.ai-concepts/d.chainedActions-listBot/env/.env.testtool new file mode 100644 index 000000000..c7882a486 --- /dev/null +++ b/js/samples/03.ai-concepts/d.chainedActions-listBot/env/.env.testtool @@ -0,0 +1,9 @@ +TEAMSFX_ENV=testtool + +# Environment variables used by test tool +TEAMSAPPTESTER_PORT=56150 +TEAMSFX_NOTIFICATION_STORE_FILENAME=.notification.testtoolstore.json + +SECRET_OPENAI_KEY= +#SECRET_AZURE_OPENAI_KEY= +#SECRET_AZURE_OPENAI_ENDPOINT= \ No newline at end of file diff --git a/js/samples/03.ai-concepts/d.chainedActions-listBot/package.json b/js/samples/03.ai-concepts/d.chainedActions-listBot/package.json index 0d3ab95c8..a844e58ac 100644 --- a/js/samples/03.ai-concepts/d.chainedActions-listBot/package.json +++ b/js/samples/03.ai-concepts/d.chainedActions-listBot/package.json @@ -12,7 +12,9 @@ "start": "tsc --build && node ./lib/index.js", "test": "echo \"Error: no test specified\" && exit 1", "watch": "nodemon --watch ./src -e ts --exec \"yarn start\"", - "dev:teamsfx": "nodemon --exec node --inspect=9239 --signal SIGINT -r ts-node/register ./src/index.ts" + "dev:teamsfx": "nodemon --exec node --inspect=9239 --signal SIGINT -r ts-node/register ./src/index.ts", + "dev:teamsfx:testtool": "env-cmd --silent -f .localConfigs.testTool npm run dev:teamsfx", + "dev:teamsfx:launch-testtool": "env-cmd --silent -f env/.env.testtool teamsapptester start" }, "repository": { "type": "git", @@ -27,11 +29,12 @@ "restify": "~11.1.0" }, "devDependencies": { - "@types/node": "^20.14.15", "@types/jsonwebtoken": "^9.0.4", + "@types/node": "^20.16.1", "@types/restify": "8.5.12", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", + "env-cmd": "^10.1.0", "eslint": "^8.57.0", "nodemon": "~1.19.4", "prettier": "^3.3.3", diff --git a/js/samples/03.ai-concepts/d.chainedActions-listBot/teamsapp.testtool.yml b/js/samples/03.ai-concepts/d.chainedActions-listBot/teamsapp.testtool.yml new file mode 100644 index 000000000..117e24c28 --- /dev/null +++ b/js/samples/03.ai-concepts/d.chainedActions-listBot/teamsapp.testtool.yml @@ -0,0 +1,27 @@ +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/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.5 + +deploy: + # Install development tool(s) + - uses: devTool/install + with: + testTool: + version: ~0.2.1 + symlinkDir: ./devTools/teamsapptester + + # Run npm command + - uses: cli/runNpmCommand + with: + args: install --no-audit --workspaces=false + + # Generate runtime environment variables + - uses: file/createOrUpdateEnvironmentFile + with: + target: ./.localConfigs.testTool + envs: + TEAMSFX_NOTIFICATION_STORE_FILENAME: ${{TEAMSFX_NOTIFICATION_STORE_FILENAME}} + OPENAI_KEY: ${{SECRET_OPENAI_KEY}} + # AZURE_OPENAI_KEY: ${{SECRET_AZURE_OPENAI_KEY}} + # AZURE_OPENAI_ENDPOINT: ${{SECRET_AZURE_OPENAI_ENDPOINT}} diff --git a/js/samples/03.ai-concepts/e.customModel-LLAMA/package.json b/js/samples/03.ai-concepts/e.customModel-LLAMA/package.json index 0654fef7a..e24fbe1e6 100644 --- a/js/samples/03.ai-concepts/e.customModel-LLAMA/package.json +++ b/js/samples/03.ai-concepts/e.customModel-LLAMA/package.json @@ -30,7 +30,7 @@ "restify": "~11.1.0" }, "devDependencies": { - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/restify": "8.5.12", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", diff --git a/js/samples/03.ai-concepts/f.chatModeration/package.json b/js/samples/03.ai-concepts/f.chatModeration/package.json index 9be84feb6..f12e68c38 100644 --- a/js/samples/03.ai-concepts/f.chatModeration/package.json +++ b/js/samples/03.ai-concepts/f.chatModeration/package.json @@ -29,7 +29,7 @@ "restify": "~11.1.0" }, "devDependencies": { - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/restify": "^8.5.12", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", diff --git a/js/samples/04.ai-apps/a.teamsChefBot/.gitignore b/js/samples/04.ai-apps/a.teamsChefBot/.gitignore index d35dca83b..1dd331113 100644 --- a/js/samples/04.ai-apps/a.teamsChefBot/.gitignore +++ b/js/samples/04.ai-apps/a.teamsChefBot/.gitignore @@ -112,3 +112,6 @@ env/.env.*.user env/.env.local appPackage/build .deployment +env/.env.testtool +.localConfigs.testTool +devTools/ \ No newline at end of file diff --git a/js/samples/04.ai-apps/a.teamsChefBot/.vscode/launch.json b/js/samples/04.ai-apps/a.teamsChefBot/.vscode/launch.json index 063ae2e52..d0de4b86d 100644 --- a/js/samples/04.ai-apps/a.teamsChefBot/.vscode/launch.json +++ b/js/samples/04.ai-apps/a.teamsChefBot/.vscode/launch.json @@ -90,6 +90,18 @@ "order": 2 }, "stopAll": true + }, + { + "name": "Debug in Test Tool", + "configurations": [ + "Attach to Local Service" + ], + "preLaunchTask": "Start Teams App (Test Tool)", + "presentation": { + "group": "local", + "order": 1 + }, + "stopAll": true } ] } diff --git a/js/samples/04.ai-apps/a.teamsChefBot/.vscode/tasks.json b/js/samples/04.ai-apps/a.teamsChefBot/.vscode/tasks.json index 585f86ae9..0110ef75e 100644 --- a/js/samples/04.ai-apps/a.teamsChefBot/.vscode/tasks.json +++ b/js/samples/04.ai-apps/a.teamsChefBot/.vscode/tasks.json @@ -100,6 +100,105 @@ "endsPattern": "restify listening to|Bot/ME service listening at|[nodemon] app crashed" } } + }, + { + "label": "Start Teams App (Test Tool)", + "dependsOn": [ + "Validate prerequisites (Test Tool)", + "Deploy (Test Tool)", + "Start application (Test Tool)", + "Start Test Tool", + ], + "dependsOrder": "sequence" + }, + { + // Check all required prerequisites. + // See https://aka.ms/teamsfx-tasks/check-prerequisites to know the details and how to customize the args. + "label": "Validate prerequisites (Test Tool)", + "type": "teamsfx", + "command": "debug-check-prerequisites", + "args": { + "prerequisites": [ + "nodejs", // Validate if Node.js is installed. + "portOccupancy" // Validate available ports to ensure those debug ones are not occupied. + ], + "portOccupancy": [ + 3978, // app service port + 9239, // app inspector port for Node.js debugger + 56150, // test tool port + ] + } + }, + { + // Build project. + // See https://aka.ms/teamsfx-tasks/deploy to know the details and how to customize the args. + "label": "Deploy (Test Tool)", + "type": "teamsfx", + "command": "deploy", + "args": { + "env": "testtool", + } + }, + { + "label": "Start application (Test Tool)", + "type": "shell", + "command": "npm run dev:teamsfx:testtool", + "isBackground": true, + "options": { + "cwd": "${workspaceFolder}", + }, + "problemMatcher": { + "pattern": [ + { + "regexp": "^.*$", + "file": 0, + "location": 1, + "message": 2 + } + ], + "background": { + "activeOnStart": true, + "beginsPattern": "[nodemon] starting", + "endsPattern": "restify listening to|Bot/ME service listening at|[nodemon] app crashed" + } + } + }, + { + "label": "Start Test Tool", + "type": "shell", + "command": "npm run dev:teamsfx:launch-testtool", + "isBackground": true, + "options": { + "env": { + "PATH": "${workspaceFolder}/devTools/teamsapptester/node_modules/.bin:${env:PATH}" + } + }, + "windows": { + "options": { + "env": { + "PATH": "${workspaceFolder}/devTools/teamsapptester/node_modules/.bin;${env:PATH}" + } + } + }, + "problemMatcher": { + "pattern": [ + { + "regexp": "^.*$", + "file": 0, + "location": 1, + "message": 2 + } + ], + "background": { + "activeOnStart": true, + "beginsPattern": ".*", + "endsPattern": "Listening on" + } + }, + "presentation": { + "panel": "dedicated", + "reveal": "silent" + } } ] } \ No newline at end of file diff --git a/js/samples/04.ai-apps/a.teamsChefBot/README.md b/js/samples/04.ai-apps/a.teamsChefBot/README.md index 7247f3a2f..9ad77a714 100644 --- a/js/samples/04.ai-apps/a.teamsChefBot/README.md +++ b/js/samples/04.ai-apps/a.teamsChefBot/README.md @@ -11,6 +11,7 @@ This is a conversational bot for Microsoft Teams that thinks it's a Chef to help - [Setting up the sample](#setting-up-the-sample) - [Testing the sample](#testing-the-sample) - [Using Teams Toolkit for Visual Studio Code](#using-teams-toolkit-for-visual-studio-code) + - [Using Teams App test tool](#using-teams-app-test-tool) @@ -96,3 +97,29 @@ The simplest way to run this sample in Teams is to use Teams Toolkit for Visual 1. In the browser that launches, select the **Add** button to install the app to Teams. > If you do not have permission to upload custom apps (sideloading), Teams Toolkit will recommend creating and using a Microsoft 365 Developer Program account - a free program to get your own dev environment sandbox that includes Teams. + +### Using Teams App test tool + +If you are using Azure OpenAI then follow these steps: + +- Comment the `SECRET_OPENAI_KEY` variable in the `./env/.env.testtool` file. +- Add your Azure OpenAI key and endpoint values to the `SECRET_AZURE_OPENAI_KEY` and `SECRET_AZURE_OPENAI_ENDPOINT` variables +- Open the `teamsapp.testtool.yml` file and modify the last step to use Azure OpenAI variables instead: + +```yml +- uses: file/createOrUpdateEnvironmentFile + with: + target: ./.localConfigs.testTool + envs: + TEAMSFX_NOTIFICATION_STORE_FILENAME: ${{TEAMSFX_NOTIFICATION_STORE_FILENAME}} + # OPENAI_KEY: ${{SECRET_OPENAI_KEY}} + AZURE_OPENAI_KEY: ${{SECRET_AZURE_OPENAI_KEY}} + AZURE_OPENAI_ENDPOINT: ${{SECRET_AZURE_OPENAI_ENDPOINT}} +``` +1. Ensure you have downloaded and installed [Visual Studio Code](https://code.visualstudio.com/docs/setup/setup-overview) +1. Install the [Teams Toolkit extension](https://marketplace.visualstudio.com/items?itemName=TeamsDevApp.ms-teams-vscode-extension) +1. Copy this sample into a new folder outside of teams-ai +1. Select File > Open Folder in VS Code and choose this sample's directory +1. From the left pane, select **Run and Debug**(Ctrl+Shift+D) and select **Debug in Test Tool** in dropdown list. +1. Select Debug > Start Debugging or F5 to run the app. +1. The browser will pop up to open Teams App Test Tool. \ No newline at end of file diff --git a/js/samples/04.ai-apps/a.teamsChefBot/env/.env.testtool b/js/samples/04.ai-apps/a.teamsChefBot/env/.env.testtool new file mode 100644 index 000000000..c7882a486 --- /dev/null +++ b/js/samples/04.ai-apps/a.teamsChefBot/env/.env.testtool @@ -0,0 +1,9 @@ +TEAMSFX_ENV=testtool + +# Environment variables used by test tool +TEAMSAPPTESTER_PORT=56150 +TEAMSFX_NOTIFICATION_STORE_FILENAME=.notification.testtoolstore.json + +SECRET_OPENAI_KEY= +#SECRET_AZURE_OPENAI_KEY= +#SECRET_AZURE_OPENAI_ENDPOINT= \ No newline at end of file diff --git a/js/samples/04.ai-apps/a.teamsChefBot/package.json b/js/samples/04.ai-apps/a.teamsChefBot/package.json index 23472b0be..d8d823391 100644 --- a/js/samples/04.ai-apps/a.teamsChefBot/package.json +++ b/js/samples/04.ai-apps/a.teamsChefBot/package.json @@ -21,21 +21,22 @@ }, "dependencies": { "@microsoft/teams-ai": "~1.3.1", - "@microsoft/teamsfx": "^2.3.2", "@microsoft/teams-js": "^2.26.0", + "@microsoft/teamsfx": "^2.3.2", "botbuilder": "^4.22.3", "dotenv": "^16.4.5", "openai": "4.28.4", "replace": "~1.2.0", "restify": "~11.1.0", - "vectra": "^0.7.6" + "vectra": "^0.9.0" }, "devDependencies": { "@types/jsonwebtoken": "^9.0.6", - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/restify": "^8.5.12", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", + "env-cmd": "^10.1.0", "eslint": "^8.57.0", "nodemon": "~3.0.1", "prettier": "^3.3.3", diff --git a/js/samples/04.ai-apps/a.teamsChefBot/teamsapp.testtool.yml b/js/samples/04.ai-apps/a.teamsChefBot/teamsapp.testtool.yml new file mode 100644 index 000000000..117e24c28 --- /dev/null +++ b/js/samples/04.ai-apps/a.teamsChefBot/teamsapp.testtool.yml @@ -0,0 +1,27 @@ +# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.5/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.5 + +deploy: + # Install development tool(s) + - uses: devTool/install + with: + testTool: + version: ~0.2.1 + symlinkDir: ./devTools/teamsapptester + + # Run npm command + - uses: cli/runNpmCommand + with: + args: install --no-audit --workspaces=false + + # Generate runtime environment variables + - uses: file/createOrUpdateEnvironmentFile + with: + target: ./.localConfigs.testTool + envs: + TEAMSFX_NOTIFICATION_STORE_FILENAME: ${{TEAMSFX_NOTIFICATION_STORE_FILENAME}} + OPENAI_KEY: ${{SECRET_OPENAI_KEY}} + # AZURE_OPENAI_KEY: ${{SECRET_AZURE_OPENAI_KEY}} + # AZURE_OPENAI_ENDPOINT: ${{SECRET_AZURE_OPENAI_ENDPOINT}} diff --git a/js/samples/04.ai-apps/b.devOpsBot/package.json b/js/samples/04.ai-apps/b.devOpsBot/package.json index 312e2af12..6da2ac573 100644 --- a/js/samples/04.ai-apps/b.devOpsBot/package.json +++ b/js/samples/04.ai-apps/b.devOpsBot/package.json @@ -28,7 +28,7 @@ }, "devDependencies": { "@types/jsonwebtoken": "^9.0.6", - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/restify": "^8.5.12", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", diff --git a/js/samples/04.ai-apps/c.vision-cardGazer/package.json b/js/samples/04.ai-apps/c.vision-cardGazer/package.json index ac49e2d8e..efce05d7a 100644 --- a/js/samples/04.ai-apps/c.vision-cardGazer/package.json +++ b/js/samples/04.ai-apps/c.vision-cardGazer/package.json @@ -29,7 +29,7 @@ "restify": "~11.1.0" }, "devDependencies": { - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/restify": "8.5.12", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", diff --git a/js/samples/04.ai-apps/d.assistants-mathBot/package.json b/js/samples/04.ai-apps/d.assistants-mathBot/package.json index 5e9d3655b..e9b50d00c 100644 --- a/js/samples/04.ai-apps/d.assistants-mathBot/package.json +++ b/js/samples/04.ai-apps/d.assistants-mathBot/package.json @@ -29,7 +29,7 @@ "restify": "~11.1.0" }, "devDependencies": { - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/restify": "^8.5.12", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", diff --git a/js/samples/04.ai-apps/e.assistants-orderBot/package.json b/js/samples/04.ai-apps/e.assistants-orderBot/package.json index 20074e2fe..dc99bcfa7 100644 --- a/js/samples/04.ai-apps/e.assistants-orderBot/package.json +++ b/js/samples/04.ai-apps/e.assistants-orderBot/package.json @@ -29,7 +29,7 @@ "restify": "~11.1.0" }, "devDependencies": { - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/jsonwebtoken": "^9.0.4", "@types/restify": "8.5.12", "@typescript-eslint/eslint-plugin": "^6.21.0", diff --git a/js/samples/04.ai-apps/f.whoBot/package.json b/js/samples/04.ai-apps/f.whoBot/package.json index e225b8cd1..4706189a8 100644 --- a/js/samples/04.ai-apps/f.whoBot/package.json +++ b/js/samples/04.ai-apps/f.whoBot/package.json @@ -28,7 +28,7 @@ "restify": "~11.1.0" }, "devDependencies": { - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/jsonwebtoken": "^8.5.4", "@types/restify": "8.5.12", "@typescript-eslint/eslint-plugin": "^6.21.0", diff --git a/js/samples/04.ai-apps/g.datasource-azureAISearch/package.json b/js/samples/04.ai-apps/g.datasource-azureAISearch/package.json index 00df1436a..c90e86185 100644 --- a/js/samples/04.ai-apps/g.datasource-azureAISearch/package.json +++ b/js/samples/04.ai-apps/g.datasource-azureAISearch/package.json @@ -36,12 +36,12 @@ "openai": "4.28.4", "replace": "~1.2.0", "restify": "~11.1.0", - "vectra": "^0.7.6" + "vectra": "^0.9.0" }, "devDependencies": { "@types/debug": "^4.1.12", "@types/jsonwebtoken": "^8.5.0", - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/restify": "8.5.12", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", diff --git a/js/samples/04.ai-apps/h.datasource-azureOpenAI/package.json b/js/samples/04.ai-apps/h.datasource-azureOpenAI/package.json index 743d297db..85b1574ad 100644 --- a/js/samples/04.ai-apps/h.datasource-azureOpenAI/package.json +++ b/js/samples/04.ai-apps/h.datasource-azureOpenAI/package.json @@ -34,12 +34,12 @@ "openai": "4.28.4", "replace": "~1.2.0", "restify": "~11.1.0", - "vectra": "^0.7.6" + "vectra": "^0.9.0" }, "devDependencies": { "@types/debug": "^4.1.12", "@types/jsonwebtoken": "^8.5.0", - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/restify": "8.5.12", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", diff --git a/js/samples/05.authentication/a.oauth-adaptiveCard/package.json b/js/samples/05.authentication/a.oauth-adaptiveCard/package.json index bf1b73260..01f0b03b7 100644 --- a/js/samples/05.authentication/a.oauth-adaptiveCard/package.json +++ b/js/samples/05.authentication/a.oauth-adaptiveCard/package.json @@ -29,7 +29,7 @@ "restify": "~11.1.0" }, "devDependencies": { - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/isomorphic-fetch": "^0.0.39", "@types/jsonwebtoken": "^8.5.4", "@types/restify": "8.5.12", diff --git a/js/samples/05.authentication/b.oauth-bot/package.json b/js/samples/05.authentication/b.oauth-bot/package.json index 23c5872ec..f89bb55c0 100644 --- a/js/samples/05.authentication/b.oauth-bot/package.json +++ b/js/samples/05.authentication/b.oauth-bot/package.json @@ -29,7 +29,7 @@ }, "devDependencies": { "@types/jsonwebtoken": "^8.5.4", - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/restify": "8.5.12", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", diff --git a/js/samples/05.authentication/c.oauth-messageExtension/package.json b/js/samples/05.authentication/c.oauth-messageExtension/package.json index 657392763..14c93c8bb 100644 --- a/js/samples/05.authentication/c.oauth-messageExtension/package.json +++ b/js/samples/05.authentication/c.oauth-messageExtension/package.json @@ -29,7 +29,7 @@ "restify": "~11.1.0" }, "devDependencies": { - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/isomorphic-fetch": "^0.0.39", "@types/jsonwebtoken": "^8.5.4", "@types/restify": "8.5.12", diff --git a/js/samples/05.authentication/d.teamsSSO-bot/package.json b/js/samples/05.authentication/d.teamsSSO-bot/package.json index abda427e7..fa642ebe2 100644 --- a/js/samples/05.authentication/d.teamsSSO-bot/package.json +++ b/js/samples/05.authentication/d.teamsSSO-bot/package.json @@ -29,7 +29,7 @@ "shx": "^0.3.4" }, "devDependencies": { - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/jsonwebtoken": "^8.5.4", "@types/restify": "8.5.12", "@typescript-eslint/eslint-plugin": "^6.21.0", diff --git a/js/samples/05.authentication/e.teamsSSO-messageExtension/package.json b/js/samples/05.authentication/e.teamsSSO-messageExtension/package.json index 69de80523..bb7683333 100644 --- a/js/samples/05.authentication/e.teamsSSO-messageExtension/package.json +++ b/js/samples/05.authentication/e.teamsSSO-messageExtension/package.json @@ -31,7 +31,7 @@ "shx": "^0.3.4" }, "devDependencies": { - "@types/node": "^20.14.15", + "@types/node": "^20.16.1", "@types/isomorphic-fetch": "^0.0.39", "@types/jsonwebtoken": "^8.5.4", "@types/restify": "8.5.12", diff --git a/js/yarn.lock b/js/yarn.lock index 36669440b..58cc852fb 100644 --- a/js/yarn.lock +++ b/js/yarn.lock @@ -41,14 +41,14 @@ dependencies: tslib "^2.6.2" -"@azure/core-auth@^1.1.4", "@azure/core-auth@^1.3.0", "@azure/core-auth@^1.4.0", "@azure/core-auth@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.5.0.tgz#a41848c5c31cb3b7c84c409885267d55a2c92e44" - integrity sha512-udzoBuYG1VBoHVohDTrvKjyzel34zt77Bhp7dQntVGGD0ehVq48owENbBG8fIgkHRNUBQH5k1r0hpoMu5L8+kw== +"@azure/core-auth@1.7.2", "@azure/core-auth@^1.1.4", "@azure/core-auth@^1.3.0", "@azure/core-auth@^1.4.0", "@azure/core-auth@^1.5.0": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.7.2.tgz#558b7cb7dd12b00beec07ae5df5907d74df1ebd9" + integrity sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g== dependencies: - "@azure/abort-controller" "^1.0.0" + "@azure/abort-controller" "^2.0.0" "@azure/core-util" "^1.1.0" - tslib "^2.2.0" + tslib "^2.6.2" "@azure/core-client@^1.3.0", "@azure/core-client@^1.4.0", "@azure/core-client@^1.5.0", "@azure/core-client@^1.7.3", "@azure/core-client@^1.9.2": version "1.9.2" @@ -118,31 +118,15 @@ dependencies: tslib "^2.2.0" -"@azure/core-rest-pipeline@1.10.1": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.10.1.tgz#348290847ca31b9eecf9cf5de7519aaccdd30968" - integrity sha512-Kji9k6TOFRDB5ZMTw8qUf2IJ+CeJtsuMdAHox9eqpTf1cefiNMpzrfnF6sINEBZJsaVaWgQ0o48B6kcUH68niA== - dependencies: - "@azure/abort-controller" "^1.0.0" - "@azure/core-auth" "^1.4.0" - "@azure/core-tracing" "^1.0.1" - "@azure/core-util" "^1.0.0" - "@azure/logger" "^1.0.0" - form-data "^4.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - tslib "^2.2.0" - uuid "^8.3.0" - -"@azure/core-rest-pipeline@^1.1.0", "@azure/core-rest-pipeline@^1.13.0", "@azure/core-rest-pipeline@^1.3.0", "@azure/core-rest-pipeline@^1.5.0", "@azure/core-rest-pipeline@^1.8.0", "@azure/core-rest-pipeline@^1.9.1": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.15.2.tgz#421729bbd8cd5f9f50b403e79941f27ac1bdc302" - integrity sha512-BmWfpjc/QXc2ipHOh6LbUzp3ONCaa6xzIssTU0DwH9bbYNXJlGUL6tujx5TrbVd/QQknmS+vlQJGrCq2oL1gZA== +"@azure/core-rest-pipeline@1.16.3", "@azure/core-rest-pipeline@^1.1.0", "@azure/core-rest-pipeline@^1.13.0", "@azure/core-rest-pipeline@^1.3.0", "@azure/core-rest-pipeline@^1.5.0", "@azure/core-rest-pipeline@^1.8.0", "@azure/core-rest-pipeline@^1.9.1": + version "1.16.3" + resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.16.3.tgz#bde3bc3ebad7f885ddd9de6af5e5a8fc254b287e" + integrity sha512-VxLk4AHLyqcHsfKe4MZ6IQ+D+ShuByy+RfStKfSjxJoL3WBWq17VNmrz8aT8etKzqc2nAeIyLxScjpzsS4fz8w== dependencies: "@azure/abort-controller" "^2.0.0" "@azure/core-auth" "^1.4.0" "@azure/core-tracing" "^1.0.1" - "@azure/core-util" "^1.3.0" + "@azure/core-util" "^1.9.0" "@azure/logger" "^1.0.0" http-proxy-agent "^7.0.0" https-proxy-agent "^7.0.0" @@ -163,14 +147,6 @@ dependencies: tslib "^2.2.0" -"@azure/core-util@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.2.0.tgz#3499deba1fc36dda6f1912b791809b6f15d4a392" - integrity sha512-ffGIw+Qs8bNKNLxz5UPkz4/VBM/EZY07mPve1ZYFqYUdPwFqRj0RPk0U7LZMOfT7GCck9YjuT1Rfp1PApNl1ng== - dependencies: - "@azure/abort-controller" "^1.0.0" - tslib "^2.2.0" - "@azure/core-util@^1.0.0", "@azure/core-util@^1.1.0", "@azure/core-util@^1.1.1", "@azure/core-util@^1.2.0", "@azure/core-util@^1.3.0", "@azure/core-util@^1.6.1": version "1.9.0" resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.9.0.tgz#469afd7e6452d5388b189f90d33f7756b0b210d1" @@ -179,6 +155,14 @@ "@azure/abort-controller" "^2.0.0" tslib "^2.6.2" +"@azure/core-util@^1.9.0": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.9.2.tgz#1dc37dc5b0dae34c578be62cf98905ba7c0cafe7" + integrity sha512-l1Qrqhi4x1aekkV+OlcqsJa4AnAkj5p0JV8omgwjaV9OAbP41lvrMvs+CptfetKkeEaGRGSzby7sjPZEX7+kkQ== + dependencies: + "@azure/abort-controller" "^2.0.0" + tslib "^2.6.2" + "@azure/identity@^2.0.1", "@azure/identity@^2.0.4": version "2.1.0" resolved "https://registry.yarnpkg.com/@azure/identity/-/identity-2.1.0.tgz#89f0bfc1d1264dfd3d0cb19837c33a9c6706d548" @@ -288,10 +272,10 @@ resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-14.13.1.tgz#e296cf8cc556082af9c35d803496424e8a95d8b7" integrity sha512-iUp3BYrsRZ4X3EiaZ2fDjNFjmtYMv9rEQd6c1op6ULn0HWk4ACvDmosL6NaBgWOhl1BAblIbd9vmB5/ilF8d4A== -"@azure/msal-common@14.14.0": - version "14.14.0" - resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-14.14.0.tgz#31a015070d5864ebcf9ebb988fcbc5c5536f22d1" - integrity sha512-OxcOk9H1/1fktHh6//VCORgSNJc2dCQObTm6JNmL824Z6iZSO6eFo/Bttxe0hETn9B+cr7gDouTQtsRq3YPuSQ== +"@azure/msal-common@14.14.1": + version "14.14.1" + resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-14.14.1.tgz#62e4569518d2c52e7de1f460d40ab919ca66b99b" + integrity sha512-2Q3tqNz/PZLfSr8BvcHZVpRRfSn4MjGSqjj9J+HlBsmbf1Uu4P0WeXnemjTJwwx9KrmplsrN3UkZ/LPOR720rw== "@azure/msal-common@^7.0.0": version "7.6.0" @@ -307,12 +291,12 @@ jsonwebtoken "^9.0.0" uuid "^8.3.0" -"@azure/msal-node@^2.12.0", "@azure/msal-node@^2.9.2": - version "2.12.0" - resolved "https://registry.yarnpkg.com/@azure/msal-node/-/msal-node-2.12.0.tgz#57ee6b6011a320046d72dc0828fec46278f2ab2c" - integrity sha512-jmk5Im5KujRA2AcyCb0awA3buV8niSrwXZs+NBJWIvxOz76RvNlusGIqi43A0h45BPUy93Qb+CPdpJn82NFTIg== +"@azure/msal-node@^2.13.0", "@azure/msal-node@^2.9.2": + version "2.13.0" + resolved "https://registry.yarnpkg.com/@azure/msal-node/-/msal-node-2.13.0.tgz#007ffffa84e4f91f00f816b980740837ce6626fe" + integrity sha512-DhP97ycs7qlCVzzzWGzJiwAFyFj5okno74E4FUZ61oCLfKh4IxA1kxirqzrWuYZWpBe9HVPL6GA4NvmlEOBN5Q== dependencies: - "@azure/msal-common" "14.14.0" + "@azure/msal-common" "14.14.1" jsonwebtoken "^9.0.0" uuid "^8.3.0" @@ -828,27 +812,27 @@ markdown-it "^13.0.2" react "^17.0.2" -"@microsoft/api-extractor-model@7.29.4": - version "7.29.4" - resolved "https://registry.yarnpkg.com/@microsoft/api-extractor-model/-/api-extractor-model-7.29.4.tgz#098f94f304db98f3cea8618fd1107946e212eaf5" - integrity sha512-LHOMxmT8/tU1IiiiHOdHFF83Qsi+V8d0kLfscG4EvQE9cafiR8blOYr8SfkQKWB1wgEilQgXJX3MIA4vetDLZw== +"@microsoft/api-extractor-model@7.29.5": + version "7.29.5" + resolved "https://registry.yarnpkg.com/@microsoft/api-extractor-model/-/api-extractor-model-7.29.5.tgz#48452a5d74c969bdabcd1773bdfcefa15597bd0b" + integrity sha512-axMwj4pgtYH6/IclP9ly33laSwTym1kBwSUcoHElc2LYAE5NNlhGT78ucEpIZtqEZaGgA8yxGXIyS17XCC2Iuw== dependencies: "@microsoft/tsdoc" "~0.15.0" "@microsoft/tsdoc-config" "~0.17.0" - "@rushstack/node-core-library" "5.5.1" + "@rushstack/node-core-library" "5.6.0" -"@microsoft/api-extractor@^7.47.5": - version "7.47.5" - resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.47.5.tgz#e44f92f803c823538fd21dc98f54cf02d058a44b" - integrity sha512-edKt4dFO2t25xmI2FX2rsP5liIgwKW1yuQImA0JM+5YGHCoo51GEQ7j+On17SvVpRJnuqLE/QVgtjIQ1Hpg98w== +"@microsoft/api-extractor@^7.47.6": + version "7.47.6" + resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.47.6.tgz#92f3d3b80c56a0a26cbbc01c5c0a120230666402" + integrity sha512-saI7n319+PdJ8PAePr14LWeIPOW2fHSr3KZfYFqJ2VUpIc1TTSh6ATFZfLPWI1LK7eZHun8+FpNsuxonyvxTgQ== dependencies: - "@microsoft/api-extractor-model" "7.29.4" + "@microsoft/api-extractor-model" "7.29.5" "@microsoft/tsdoc" "~0.15.0" "@microsoft/tsdoc-config" "~0.17.0" - "@rushstack/node-core-library" "5.5.1" + "@rushstack/node-core-library" "5.6.0" "@rushstack/rig-package" "0.5.3" - "@rushstack/terminal" "0.13.3" - "@rushstack/ts-command-line" "4.22.4" + "@rushstack/terminal" "0.13.4" + "@rushstack/ts-command-line" "4.22.5" lodash "~4.17.15" minimatch "~3.0.3" resolve "~1.22.1" @@ -1081,10 +1065,10 @@ resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.0.tgz#7d8dacb7fdef0e4387caf7396cbd77f179867d06" integrity sha512-Zwq5OCzuwJC2jwqmpEQt7Ds1DTi6BWSwoGkbb1n9pO3hzb35BoJELx7c0T23iDkBGkh2e7tvOtjF3tr3OaQHDQ== -"@rushstack/node-core-library@5.5.1": - version "5.5.1" - resolved "https://registry.yarnpkg.com/@rushstack/node-core-library/-/node-core-library-5.5.1.tgz#890db37eafaab582c79eb6bf421447b82b3a964b" - integrity sha512-ZutW56qIzH8xIOlfyaLQJFx+8IBqdbVCZdnj+XT1MorQ1JqqxHse8vbCpEM+2MjsrqcbxcgDIbfggB1ZSQ2A3g== +"@rushstack/node-core-library@5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@rushstack/node-core-library/-/node-core-library-5.6.0.tgz#8f71de4501a053fc19f4414aadc7c6b249368544" + integrity sha512-3ixIcEHseqU1sbnvoQkvxvfTYWbi1IIhnq/vexJcex7j6D8lnQCiYnd/E2oXbUH0Zv48CjtfslC/2MVFd71mpg== dependencies: ajv "~8.13.0" ajv-draft-04 "~1.0.0" @@ -1103,20 +1087,20 @@ resolve "~1.22.1" strip-json-comments "~3.1.1" -"@rushstack/terminal@0.13.3": - version "0.13.3" - resolved "https://registry.yarnpkg.com/@rushstack/terminal/-/terminal-0.13.3.tgz#9a05b8cf759f14161a49d3ccb09d556e4161caca" - integrity sha512-fc3zjXOw8E0pXS5t9vTiIPx9gHA0fIdTXsu9mT4WbH+P3mYvnrX0iAQ5a6NvyK1+CqYWBTw/wVNx7SDJkI+WYQ== +"@rushstack/terminal@0.13.4": + version "0.13.4" + resolved "https://registry.yarnpkg.com/@rushstack/terminal/-/terminal-0.13.4.tgz#f564fe7defd8a7ffd0754126e741c8fc3f576054" + integrity sha512-h7g2RuffpqBCDKOijlUmvQ0b2O9kpIOK9TWCX9IR+2kvudp6MdtCYDu29zeqweWwCSWUnuAaUfB5HT88s0YCiw== dependencies: - "@rushstack/node-core-library" "5.5.1" + "@rushstack/node-core-library" "5.6.0" supports-color "~8.1.1" -"@rushstack/ts-command-line@4.22.4": - version "4.22.4" - resolved "https://registry.yarnpkg.com/@rushstack/ts-command-line/-/ts-command-line-4.22.4.tgz#63f24b8f6d214d3d4971c8cae7fc54a401abd87b" - integrity sha512-QoyhbWfyF9Ixg5DWdPzxO3h2RmJ7i5WH9b7qLzD5h5WFya/ZqicjdPrVwQiGtrFvAbBj8jhcC9DhbzU9xAk78g== +"@rushstack/ts-command-line@4.22.5": + version "4.22.5" + resolved "https://registry.yarnpkg.com/@rushstack/ts-command-line/-/ts-command-line-4.22.5.tgz#1a88e607519a0b79d20314b495d2241f3d5a6f40" + integrity sha512-eFm+5DJboPHAy3epLNQtmG+hDlBzS950g26nZPbciMQeXmZ5shGGNe6ERjV77wnr5IuxfLhYGJ4ZjPy8Z56MBA== dependencies: - "@rushstack/terminal" "0.13.3" + "@rushstack/terminal" "0.13.4" "@types/argparse" "1.0.38" argparse "~1.0.9" string-argv "~0.3.1" @@ -1161,11 +1145,6 @@ resolved "https://registry.yarnpkg.com/@standardlabs/is-private/-/is-private-1.0.1.tgz#bf0196f91d294cfe60c2f2892ee2e085f0b27471" integrity sha512-gzFtZ7e1Ob7HXzGe4IoQWM/qWydboNLtMDWd3OqtyQo0Ngir24bzWu016TulH2w5SyvOr0LbMw1b3K10IocNIA== -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== - "@tsconfig/node10@^1.0.7": version "1.0.9" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" @@ -1387,12 +1366,12 @@ "@types/node" "*" form-data "^4.0.0" -"@types/node@*", "@types/node@^20.14.15": - version "20.14.15" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.15.tgz#e59477ab7bc7db1f80c85540bfd192a0becc588b" - integrity sha512-Fz1xDMCF/B00/tYSVMlmK7hVeLh7jE5f3B7X1/hmV0MJBwE27KlS7EvD/Yp+z1lm8mVhwV5w+n8jOZG8AfTlKw== +"@types/node@*", "@types/node@^20.16.1": + version "20.16.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.16.1.tgz#0b44b15271d0e2191ca68faf1fbe506e06aed732" + integrity sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ== dependencies: - undici-types "~5.26.4" + undici-types "~6.19.2" "@types/node@^10.17.27": version "10.17.60" @@ -1797,13 +1776,6 @@ adaptivecards@~2.10.0: resolved "https://registry.yarnpkg.com/adaptivecards/-/adaptivecards-2.10.0.tgz#1c94e84491afe5a4f2d4060f6e0fc57b895205e3" integrity sha512-QcgXGFlX3rgIfZkxvQY896zEVBh30mE37z3XKhcQW2OqSUrVH6dNT78MkM//W4wRdrZizSHqXKLaKyVVxAgVFg== -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - agent-base@^7.0.2: version "7.1.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" @@ -1989,14 +1961,13 @@ append-transform@^2.0.0: dependencies: default-require-extensions "^3.0.0" -applicationinsights@^2.9.5: - version "2.9.5" - resolved "https://registry.yarnpkg.com/applicationinsights/-/applicationinsights-2.9.5.tgz#34bcf71ad596721c520987a252e40d7495aa3503" - integrity sha512-APQ8IWyYDHFvKbitFKpsmZXxkzQh0yYTFacQqoVW7HwlPo3eeLprwnq5RFNmmG6iqLmvQ+xRJSDLEQCgqPh+bw== +applicationinsights@^2.9.6: + version "2.9.6" + resolved "https://registry.yarnpkg.com/applicationinsights/-/applicationinsights-2.9.6.tgz#67528e667d7953c8dd57b5fb16e0a4714fc07aed" + integrity sha512-BLeBYJUZaKmnzqG/6Q/IFSCqpiVECjSTIvwozLex/1ZZpSxOjPiBxGMev+iIBfNZ2pc7vvnV7DuPOtsoG2DJeQ== dependencies: - "@azure/core-auth" "^1.5.0" - "@azure/core-rest-pipeline" "1.10.1" - "@azure/core-util" "1.2.0" + "@azure/core-auth" "1.7.2" + "@azure/core-rest-pipeline" "1.16.3" "@azure/opentelemetry-instrumentation-azure-sdk" "^1.0.0-beta.5" "@microsoft/applicationinsights-web-snippet" "1.0.1" "@opentelemetry/api" "^1.7.0" @@ -5541,15 +5512,6 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== - dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" - http-proxy-agent@^7.0.0: version "7.0.2" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" @@ -5581,14 +5543,6 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - https-proxy-agent@^7.0.0: version "7.0.4" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz#8e97b841a029ad8ddc8731f26595bad868cb4168" @@ -9849,6 +9803,11 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -10023,10 +9982,10 @@ vasync@^2.2.0: dependencies: verror "1.10.0" -vectra@^0.7.6: - version "0.7.6" - resolved "https://registry.yarnpkg.com/vectra/-/vectra-0.7.6.tgz#65e80a56ba8914eb73f453ed6cd659feabd91da0" - integrity sha512-n6z4UA27yNZZuJO/rjqViIx0ZtqKC/aCBk7SGIZebwluSYC9InPB+0KZqXU1U7aSOXSdvrEu8AW2Tajczsjp1g== +vectra@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/vectra/-/vectra-0.9.0.tgz#8eef1076ff9e6ccc31007a3cd51ee6babe3ddac3" + integrity sha512-Ynt+es19854syZJKgCFTEiWP3CrUZepi4xeIhEpVgeWmFV38XXwgrh8WvPhEyw7WqPJ/ze56JkR4+eUOTyPzNA== dependencies: axios "^1.3.4" cheerio "^1.0.0-rc.12"