[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6PJCFNGCX555YERYQ459JFE":3,"skill-same:01M6PJCFNGCX555YERYQ459JFE":73},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":46,"repositoryHtmlUrl":47,"repositoryHomepageUrl":48,"ownerHtmlUrl":49,"ownerBlogUrl":50,"ownerDescription":51,"updatedAt":52,"install":53,"resources":66},"01M6PJCFNGCX555YERYQ459JFE","teams-sdk-to-agents-sdk-typescript-migration",null,"Migrate a JavaScript or TypeScript application using the Microsoft Teams SDK App runtime to Microsoft 365 Agents SDK while preserving its Teams behaviors. Use for Teams SDK migrations, including automated sample synchronization; use the separate Bot Framework migration skill for botbuilder applications.","microsoft\u002FAgents","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M69B7CR81D1HSNV69XDT8KAR",1107,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FAgents\u002Fblob\u002Fmain\u002Fagent-plugins\u002Fagents-for-js\u002Fskills\u002Fteams-sdk-to-agents-sdk-typescript-migration\u002FSKILL.md",[],[19,20,21,22,23,24,25,9,26,27,28,29,30,31,32,33,34,35,36,37],"typescript","teams sdk to agents sdk typescript migration","migration","agents sdk typescript","teams","sdk","agents sdk","javascript","applications","migrate","synchronization","use","migrations","sample","runtime","app","microsoft teams","for","bot","2026-11-10 10:12:30",false,"---\nname: teams-sdk-to-agents-sdk-typescript-migration\ndescription: Migrate a JavaScript or TypeScript application using the Microsoft Teams SDK App runtime to Microsoft 365 Agents SDK while preserving its Teams behaviors. Use for Teams SDK migrations, including automated sample synchronization; use the separate Bot Framework migration skill for botbuilder applications.\n---\n\n# Teams SDK to Agents SDK for TypeScript\n\n## Overview\n\nMigrate the Teams SDK App runtime to Agents SDK AgentApplication. For applications\nusing botbuilder, use the Bot Framework migration skill instead. Honor read-only\nreview requests and caller-provided validation tools.\n\n## Core rules\n\n- Preserve commands, text matching, responses and state transitions, except that\n  user-facing references to the migrated runtime must say \"agent\", not \"bot\".\n  Apply this to README text, catalog descriptions, greetings and other messages.\n  Keep platform terms such as Azure Bot, bot ID and `bots[]`, and preserve existing\n  source-derived paths and identifiers unless the caller requests a rename.\n- Preserve explicit customer SDK selections and authentication models. Do not\n  introduce a new major version or prerelease without an applicable policy.\n- Verify signatures and payloads against the installed selected-version types\n  and implementation; similarly named APIs across SDKs are not interchangeable.\n- Use the application's logging conventions, include operation context and the\n  full Error, and avoid logging credentials or sensitive payloads.\n\nRead the source handlers, startup, dependencies, environment configuration and\nmanifest before changing code. Inventory each command, invoke payload, response,\nstate transition and external call. Preserve command precedence and visibility,\nincluding targeted versus public messages. A similarly named .NET API is not\nevidence that a TypeScript API exists.\n\n## Packages and runtime\n\nUse stable published Agents SDK packages compatible with one another:\n\n- `@microsoft\u002Fagents-activity`: Activity models and protocol helpers.\n- `@microsoft\u002Fagents-hosting`: AgentApplication, state and storage.\n- `@microsoft\u002Fagents-hosting-express`: Express startup.\n- `@microsoft\u002Fagents-hosting-extensions-msteams`: Teams routes and client helpers.\n\nRemove `@microsoft\u002Fteams.apps` and its runtime plugins. Supporting Teams card\u002Fmodel\npackages can remain when used intentionally; the MSTeams extension itself depends\non `@microsoft\u002Fteams.api`. Do not globally ban every package in that namespace.\nAvoid the deprecated `agents-hosting-extensions-teams` package for new migrations.\n\nFor synchronization, `context.migration.packages` is the frozen exact npm package\nmap. Declare those versions directly. The minimum is a floor, not the version to\ncopy. Do not translate NuGet floating versions into npm syntax. Node 24 is the\nsync runtime; inspect published engines for customer applications.\n\n## Migration steps\n\n1. Inventory source handlers, dispatch precedence, payloads, state, external calls\n   and setup. Record behaviors that need real Teams or tenant validation.\n2. Scaffold the caller's destination, preserving existing layout and assets.\n   In sample sync, use the configured destination and factory\u002Fstartup convention below.\n3. Replace dependencies and bootstrap with the selected Agents runtime. Keep\n   server startup separate from the application factory and preserve static pages.\n4. Migrate handlers using the mappings below; test actual dispatch and response\n   envelopes, including unknown commands, empty inputs and failure paths.\n5. Migrate configuration without changing the authentication model. Use an ignored\n   `.env` for local credentials and a checked-in template with placeholders. Keep\n   identity values consistent across connections, manifest placeholders and Graph\n   configuration. Initialize optional external clients lazily so missing credentials\n   do not prevent local startup; report missing configuration when the feature is used.\n6. Reconcile the manifest using `teams-app-manifest`. Preserve valid metadata,\n   use approved placeholders, and do not guess scopes, domains or permissions.\n   Report unresolved decisions as `needs-policy` in automated sync. Return manifest\n   evidence in the caller's report; do not create `manifest-evidence.md` by default.\n7. Verify the final candidate as described below, separating local evidence from\n   portal, identity, permission and live Teams checks.\n\n## Application and route mapping\n\nCreate an `AgentApplication` with explicit storage. Keep an importable agent\nfactory separate from `startServer` so contracts can run routes without opening a\nport. For Teams-specific behavior, construct `TeamsAgentExtension(app)` and call\n`app.registerExtension(teams, callback)`; the callback is required. Inspect the\nselected package's declarations and implementation before choosing signatures.\n\nTypical mappings in the 1.9 SDK family:\n\n| Teams SDK behavior | Agents SDK surface |\n| --- | --- |\n| `app.message` \u002F `app.on('message')` | `app.onMessage` or `onTeamsMessage` |\n| `context.send` | `context.sendActivity(Activity.fromObject(...))` for structured activity; strings can be sent directly |\n| `card.action` | `app.adaptiveCards.actionExecute`; inspect the callback's action object and its `data` |\n| `message.ext.query` | `teams.messageExtensions.onQuery(commandId, handler)` |\n| `message.ext.query-link` | `teams.messageExtensions.onQueryLink` |\n| `dialog.open` \u002F `dialog.submit` | `teams.taskModules.onFetch` \u002F `onSubmit` |\n| `file.consent` | `teams.fileConsent` acceptance\u002Fdecline routes |\n| Meeting events | `teams.meetings` registration helpers |\n| Feedback invoke | `onTeamsFeedbackLoop` |\n| Teams API calls | `TeamsTurnContext.client` or `teams.getTeamsClient(context)` |\n| Targeted activity | `TeamsTurnContext.sendTargetedActivity` and Activity targeting helpers |\n\nRoute ranks sort from smallest to largest. `RouteRank.Unspecified` is very large;\na numeric fallback such as 1000 can unexpectedly run first. Use explicit ranks\nfor competing routes and `RouteRank.Last` for catch-alls. Preserve existing\nif\u002Felse precedence and unknown-command handling.\n\nOrdinary `onActivity` routes receive a base `TurnContext`. Construct\n`new TeamsTurnContext(context)` before using `.client`; a TypeScript cast does\nnot add the runtime getter. Message selectors that inspect text can skip\nattachment-only messages; use `onActivity('message', ...)` when those are valid.\n\nIn 1.9.1, Activity parsing drops extra nested account\u002Freaction fields, including\nTeams' `recipient.isTargeted` and `reaction.user`. Preserve required values at\nthe HTTP boundary before parsing, using retained entities. Use\n`Activity.makeTargetedActivity()` with a group conversation and explicit recipient\nfor private group delivery; preserve `targetedMessageInfo` for slash prompt preview.\nClone a captured conversation reference before normalizing its ID: the SDK can\nretain references to incoming activity objects.\n\nAn Agents `Activity` is a class, not a plain Teams SDK message object. Convert\nstructured replies with `Activity.fromObject`, or use MessageFactory\u002FCardFactory.\nKeep Adaptive Card execute responses, task responses and compose-extension\nresponses in their proper envelopes. Sending a normal reply does not replace the\nrequired invoke response.\n\nFor lifecycle events, AI metadata, Graph authentication and long-running invokes,\nread [feature migration guidance](references\u002Ffeature-migration.md) when those\nfeatures appear in the source. It describes behavior to preserve, not .NET APIs\nor a requirement to add features the source does not have.\n\n## State, external services and assets\n\nKeep sample-local state scoped to the application factory. MemoryStorage and\nin-memory reminders are development examples and reset at process restart.\nPreserve timer cancellation, upload cleanup and targeted delivery semantics.\nInject external services where useful so tests can cover behavior without\nGraph, file-transfer, Wikipedia or Teams credentials.\n\nUse the Agents connection configuration conventions instead of copying Teams\nruntime authentication bootstrap. Preserve delegated versus app-only Graph access using the appropriate configured\nconnection\u002Fauthorization helper (see the feature reference). Never put secrets into manifests or test data.\nKeep static task-module pages available under the URLs returned by handlers.\n\nAfter code migration, use the standalone `teams-app-manifest` skill to reconcile\nsource, README\u002Fhelp and actual manifest JSON. Check exact command IDs\u002Ftitles,\nsurfaces, task pages, file support and link domains. Do not assume schema validity\nproves feature coverage.\nMeeting event handlers also require manifest RSC grants and `webApplicationInfo`;\nparticipant events require bot registration subscriptions in the Teams Developer\nPortal. Verify these prerequisites separately from injected route tests.\n\n## Verification\n\nOutside automation, install dependencies using the project's package manager,\ncompile\u002Ftypecheck the application, and run its behavior tests. Start the server\nwith the documented configuration and verify its health endpoint (normally\n`GET \u002F` on port 3978). Check required static pages as well as startup. Run the\nmanifest skill's schema, asset and capability checks. A successful build does not\nprove routing, invoke envelopes or tenant behavior.\n\nIn automation, use the supplied validation tool instead of requesting unavailable\nshell access. Require current full validation after the last change. Tests must\npreserve Agents-specific behavior, including terminology; matching upstream text\nverbatim is not a reason to replace \"Agent\" with \"Bot\" or weaken an existing test.\nReport failed, blocked and untested checks explicitly.\n\n## Common mistakes\n\n| Mistake | Correction |\n| --- | --- |\n| Copying upstream \"Bot\" greetings | Preserve the greeting's intent with \"Agent\" terminology |\n| Treating a TypeScript cast as a runtime wrapper | Construct TeamsTurnContext where required |\n| Letting a catch-all shadow commands | Verify route ranks and overlapping selectors |\n| Sending a normal reply instead of an invoke response | Use the proper route and response envelope |\n| Waiting for a long upload before invoke acknowledgment | Queue work and use proactive continuation |\n| Replacing app-only Graph calls with delegated calls | Preserve the original permission model |\n| Copying .NET AI models or rejecting all plain JS entities | Verify JS helpers and serialized wire fields |\n| Considering schema validity sufficient | Reconcile implemented capabilities and run behavioral tests |\n\n## Automated sample synchronization\n\nFollow the caller's read-only planning and frozen-plan protocol. Only edit the\nselected sample; protected contracts and automation are outside its write scope.\nUse `validate_sample` for dependency preparation, compilation, contracts, manifest\nand startup checks. The trusted tool generates the lockfile with npm; do not\ninvent lockfile integrity values or request unrestricted shell access.\n\nKeep package scripts explicit and finite, with no recursive npm install hooks.\nExport `createAgent` from `src\u002Fagent.ts`, start the server in `src\u002Findex.ts`, and\ncompile strict NodeNext source from `src` to `dist`. Retain a credential-free\nhealth endpoint. Report unsupported behavior as a concrete blocker with source\nevidence rather than omitting it or claiming the migration passed.\n\nOfficial source: \u003Chttps:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FAgents-for-js>. The installed\nselected package types and source are authoritative for the run's API surface.\n\n## Repository manifest identity convention\n\nFor this repository, use `${{AAD_APP_CLIENT_ID}}` consistently for application client ID placeholders in the Teams manifest, including `id`, `bots[].botId` and `composeExtensions[].botId`. Preserve unrelated suffix and domain placeholders. Align setup documentation and provisioning substitutions. Keep source-derived sample identifiers; describe migrated runtimes as agents while preserving platform and schema names.\n","# Teams SDK to Agents SDK for TypeScript\n\n## Overview\n\nMigrate the Teams SDK App runtime to Agents SDK AgentApplication. For applications\nusing botbuilder, use the Bot Framework migration skill instead. Honor read-only\nreview requests and caller-provided validation tools.\n\n## Core rules\n\n- Preserve commands, text matching, responses and state transitions, except that\n  user-facing references to the migrated runtime must say \"agent\", not \"bot\".\n  Apply this to README text, catalog descriptions, greetings and other messages.\n  Keep platform terms such as Azure Bot, bot ID and `bots[]`, and preserve existing\n  source-derived paths and identifiers unless the caller requests a rename.\n- Preserve explicit customer SDK selections and authentication models. Do not\n  introduce a new major version or prerelease without an applicable policy.\n- Verify signatures and payloads against the installed selected-version types\n  and implementation; similarly named APIs across SDKs are not interchangeable.\n- Use the application's logging conventions, include operation context and the\n  full Error, and avoid logging credentials or sensitive payloads.\n\nRead the source handlers, startup, dependencies, environment configuration and\nmanifest before changing code. Inventory each command, invoke payload, response,\nstate transition and external call. Preserve command precedence and visibility,\nincluding targeted versus public messages. A similarly named .NET API is not\nevidence that a TypeScript API exists.\n\n## Packages and runtime\n\nUse stable published Agents SDK packages compatible with one another:\n\n- `@microsoft\u002Fagents-activity`: Activity models and protocol helpers.\n- `@microsoft\u002Fagents-hosting`: AgentApplication, state and storage.\n- `@microsoft\u002Fagents-hosting-express`: Express startup.\n- `@microsoft\u002Fagents-hosting-extensions-msteams`: Teams routes and client helpers.\n\nRemove `@microsoft\u002Fteams.apps` and its runtime plugins. Supporting Teams card\u002Fmodel\npackages can remain when used intentionally; the MSTeams extension itself depends\non `@microsoft\u002Fteams.api`. Do not globally ban every package in that namespace.\nAvoid the deprecated `agents-hosting-extensions-teams` package for new migrations.\n\nFor synchronization, `context.migration.packages` is the frozen exact npm package\nmap. Declare those versions directly. The minimum is a floor, not the version to\ncopy. Do not translate NuGet floating versions into npm syntax. Node 24 is the\nsync runtime; inspect published engines for customer applications.\n\n## Migration steps\n\n1. Inventory source handlers, dispatch precedence, payloads, state, external calls\n   and setup. Record behaviors that need real Teams or tenant validation.\n2. Scaffold the caller's destination, preserving existing layout and assets.\n   In sample sync, use the configured destination and factory\u002Fstartup convention below.\n3. Replace dependencies and bootstrap with the selected Agents runtime. Keep\n   server startup separate from the application factory and preserve static pages.\n4. Migrate handlers using the mappings below; test actual dispatch and response\n   envelopes, including unknown commands, empty inputs and failure paths.\n5. Migrate configuration without changing the authentication model. Use an ignored\n   `.env` for local credentials and a checked-in template with placeholders. Keep\n   identity values consistent across connections, manifest placeholders and Graph\n   configuration. Initialize optional external clients lazily so missing credentials\n   do not prevent local startup; report missing configuration when the feature is used.\n6. Reconcile the manifest using `teams-app-manifest`. Preserve valid metadata,\n   use approved placeholders, and do not guess scopes, domains or permissions.\n   Report unresolved decisions as `needs-policy` in automated sync. Return manifest\n   evidence in the caller's report; do not create `manifest-evidence.md` by default.\n7. Verify the final candidate as described below, separating local evidence from\n   portal, identity, permission and live Teams checks.\n\n## Application and route mapping\n\nCreate an `AgentApplication` with explicit storage. Keep an importable agent\nfactory separate from `startServer` so contracts can run routes without opening a\nport. For Teams-specific behavior, construct `TeamsAgentExtension(app)` and call\n`app.registerExtension(teams, callback)`; the callback is required. Inspect the\nselected package's declarations and implementation before choosing signatures.\n\nTypical mappings in the 1.9 SDK family:\n\n| Teams SDK behavior | Agents SDK surface |\n| --- | --- |\n| `app.message` \u002F `app.on('message')` | `app.onMessage` or `onTeamsMessage` |\n| `context.send` | `context.sendActivity(Activity.fromObject(...))` for structured activity; strings can be sent directly |\n| `card.action` | `app.adaptiveCards.actionExecute`; inspect the callback's action object and its `data` |\n| `message.ext.query` | `teams.messageExtensions.onQuery(commandId, handler)` |\n| `message.ext.query-link` | `teams.messageExtensions.onQueryLink` |\n| `dialog.open` \u002F `dialog.submit` | `teams.taskModules.onFetch` \u002F `onSubmit` |\n| `file.consent` | `teams.fileConsent` acceptance\u002Fdecline routes |\n| Meeting events | `teams.meetings` registration helpers |\n| Feedback invoke | `onTeamsFeedbackLoop` |\n| Teams API calls | `TeamsTurnContext.client` or `teams.getTeamsClient(context)` |\n| Targeted activity | `TeamsTurnContext.sendTargetedActivity` and Activity targeting helpers |\n\nRoute ranks sort from smallest to largest. `RouteRank.Unspecified` is very large;\na numeric fallback such as 1000 can unexpectedly run first. Use explicit ranks\nfor competing routes and `RouteRank.Last` for catch-alls. Preserve existing\nif\u002Felse precedence and unknown-command handling.\n\nOrdinary `onActivity` routes receive a base `TurnContext`. Construct\n`new TeamsTurnContext(context)` before using `.client`; a TypeScript cast does\nnot add the runtime getter. Message selectors that inspect text can skip\nattachment-only messages; use `onActivity('message', ...)` when those are valid.\n\nIn 1.9.1, Activity parsing drops extra nested account\u002Freaction fields, including\nTeams' `recipient.isTargeted` and `reaction.user`. Preserve required values at\nthe HTTP boundary before parsing, using retained entities. Use\n`Activity.makeTargetedActivity()` with a group conversation and explicit recipient\nfor private group delivery; preserve `targetedMessageInfo` for slash prompt preview.\nClone a captured conversation reference before normalizing its ID: the SDK can\nretain references to incoming activity objects.\n\nAn Agents `Activity` is a class, not a plain Teams SDK message object. Convert\nstructured replies with `Activity.fromObject`, or use MessageFactory\u002FCardFactory.\nKeep Adaptive Card execute responses, task responses and compose-extension\nresponses in their proper envelopes. Sending a normal reply does not replace the\nrequired invoke response.\n\nFor lifecycle events, AI metadata, Graph authentication and long-running invokes,\nread [feature migration guidance](references\u002Ffeature-migration.md) when those\nfeatures appear in the source. It describes behavior to preserve, not .NET APIs\nor a requirement to add features the source does not have.\n\n## State, external services and assets\n\nKeep sample-local state scoped to the application factory. MemoryStorage and\nin-memory reminders are development examples and reset at process restart.\nPreserve timer cancellation, upload cleanup and targeted delivery semantics.\nInject external services where useful so tests can cover behavior without\nGraph, file-transfer, Wikipedia or Teams credentials.\n\nUse the Agents connection configuration conventions instead of copying Teams\nruntime authentication bootstrap. Preserve delegated versus app-only Graph access using the appropriate configured\nconnection\u002Fauthorization helper (see the feature reference). Never put secrets into manifests or test data.\nKeep static task-module pages available under the URLs returned by handlers.\n\nAfter code migration, use the standalone `teams-app-manifest` skill to reconcile\nsource, README\u002Fhelp and actual manifest JSON. Check exact command IDs\u002Ftitles,\nsurfaces, task pages, file support and link domains. Do not assume schema validity\nproves feature coverage.\nMeeting event handlers also require manifest RSC grants and `webApplicationInfo`;\nparticipant events require bot registration subscriptions in the Teams Developer\nPortal. Verify these prerequisites separately from injected route tests.\n\n## Verification\n\nOutside automation, install dependencies using the project's package manager,\ncompile\u002Ftypecheck the application, and run its behavior tests. Start the server\nwith the documented configuration and verify its health endpoint (normally\n`GET \u002F` on port 3978). Check required static pages as well as startup. Run the\nmanifest skill's schema, asset and capability checks. A successful build does not\nprove routing, invoke envelopes or tenant behavior.\n\nIn automation, use the supplied validation tool instead of requesting unavailable\nshell access. Require current full validation after the last change. Tests must\npreserve Agents-specific behavior, including terminology; matching upstream text\nverbatim is not a reason to replace \"Agent\" with \"Bot\" or weaken an existing test.\nReport failed, blocked and untested checks explicitly.\n\n## Common mistakes\n\n| Mistake | Correction |\n| --- | --- |\n| Copying upstream \"Bot\" greetings | Preserve the greeting's intent with \"Agent\" terminology |\n| Treating a TypeScript cast as a runtime wrapper | Construct TeamsTurnContext where required |\n| Letting a catch-all shadow commands | Verify route ranks and overlapping selectors |\n| Sending a normal reply instead of an invoke response | Use the proper route and response envelope |\n| Waiting for a long upload before invoke acknowledgment | Queue work and use proactive continuation |\n| Replacing app-only Graph calls with delegated calls | Preserve the original permission model |\n| Copying .NET AI models or rejecting all plain JS entities | Verify JS helpers and serialized wire fields |\n| Considering schema validity sufficient | Reconcile implemented capabilities and run behavioral tests |\n\n## Automated sample synchronization\n\nFollow the caller's read-only planning and frozen-plan protocol. Only edit the\nselected sample; protected contracts and automation are outside its write scope.\nUse `validate_sample` for dependency preparation, compilation, contracts, manifest\nand startup checks. The trusted tool generates the lockfile with npm; do not\ninvent lockfile integrity values or request unrestricted shell access.\n\nKeep package scripts explicit and finite, with no recursive npm install hooks.\nExport `createAgent` from `src\u002Fagent.ts`, start the server in `src\u002Findex.ts`, and\ncompile strict NodeNext source from `src` to `dist`. Retain a credential-free\nhealth endpoint. Report unsupported behavior as a concrete blocker with source\nevidence rather than omitting it or claiming the migration passed.\n\nOfficial source: \u003Chttps:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FAgents-for-js>. The installed\nselected package types and source are authoritative for the run's API surface.\n\n## Repository manifest identity convention\n\nFor this repository, use `${{AAD_APP_CLIENT_ID}}` consistently for application client ID placeholders in the Teams manifest, including `id`, `bots[].botId` and `composeExtensions[].botId`. Preserve unrelated suffix and domain placeholders. Align setup documentation and provisioning substitutions. Keep source-derived sample identifiers; describe migrated runtimes as agents while preserving platform and schema names.\n",{"name":5,"description":7},"main","93be4925735518cba1e63592542c388576253a37","agent-plugins\u002Fagents-for-js\u002Fskills\u002Fteams-sdk-to-agents-sdk-typescript-migration",347,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FAgents","https:\u002F\u002Faka.ms\u002Fagentsdkdocs","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-12 12:49:01",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add microsoft\u002FAgents --skill teams-sdk-to-agents-sdk-typescript-migration",{"tool":59,"command":60},"bunx","bunx skills add microsoft\u002FAgents --skill teams-sdk-to-agents-sdk-typescript-migration",{"tool":62,"command":63},"pnpm","pnpm dlx skills add microsoft\u002FAgents --skill teams-sdk-to-agents-sdk-typescript-migration","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FAgents\u002Fblob\u002Fmain\u002Fagent-plugins\u002Fagents-for-js\u002Fskills\u002Fteams-sdk-to-agents-sdk-typescript-migration\u002FSKILL.md",true,[67],{"path":68,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":71,"sourceHtmlUrl":72},"references\u002Ffeature-migration.md","REFERENCE","参考文档",3070,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FAgents\u002Fblob\u002Fmain\u002Fagent-plugins\u002Fagents-for-js\u002Fskills\u002Fteams-sdk-to-agents-sdk-typescript-migration\u002Freferences\u002Ffeature-migration.md",[74,88,103,116,125,148],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":38},"01M6PJCYCYJQDX318SQN3EBF0E","sync-teams-samples-to-agents-sdk","CI instructions for a bounded Teams SDK to Agents SDK sample synchronization using the selected language profile.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FAgents\u002Fblob\u002Fmain\u002Fautomation\u002Fteams-sample-sync\u002Fskills\u002Fsync-teams-samples-to-agents-sdk\u002FSKILL.md",[],[25,24,81,23,82,83,29,84,85,86,32,36,87],"sync","sync teams samples to agents sdk","ci","instructions","profile","language","bounded",{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":99,"publishedAt":38},"01M69B8QV24JVPXH25EH77X0SZ","teams-app-manifest","Create or audit a Microsoft Teams app manifest for an existing Microsoft 365 Agents SDK application by mapping declared intent and source-code evidence to released manifest capabilities. Use when manifest.json is missing, incomplete, or must be checked against implemented Teams features. Does not configure Microsoft Entra, Azure Bot, Developer Portal, or deployment unless separately requested.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FAgents\u002Fblob\u002Fmain\u002Fagent-plugins\u002Fagents-sdk-common\u002Fskills\u002Fteams-app-manifest\u002FSKILL.md",[94],{"categoryNo":95,"categoryName":96,"taxonomyType":97,"taxonomyTypeDesc":98},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[23,100,24,101,102,9,25,37],"teams app manifest","deployment","azure",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":38},"01M69B8MN62NBY93YTJAQG2Y81","agents-sdk-provision","Use when provisioning Azure resources for a Microsoft Agents SDK application — including creating an Azure Bot Service resource, setting up Entra app registrations, configuring identity credentials (UserManagedIdentity, FederatedCredentials, or ClientSecret), adding a Teams channel, running Bicep deployments for SSO, or setting up OAuth user sign-in connections via az CLI. Trigger even if the user doesn't say \"provision\" — use on requests like \"set up my bot on Azure\", \"deploy my bot\", \"configure Azure for my bot\", or \"get Teams SSO working.\" Applies to all languages (dotnet, Node.js, Python).","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FAgents\u002Fblob\u002Fmain\u002Fagent-plugins\u002Fagents-sdk-common\u002Fskills\u002Fagents-sdk-provision\u002FSKILL.md",[],[24,25,110,111,23,102,112,113,37,114,115,9],"agents sdk provision","deploy","dotnet","identity","cli","python",{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":122,"publishedAt":38},"01M69B8HFZ45NQGWQQD483TWPB","agents-sdk-to-prod","Assess, create, harden, deploy, or review production readiness of Python Microsoft 365 Agents SDK agents and their direct hosting\u002Foperations files. Use only for Agents SDK scenarios, not unrelated application hardening.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FAgents\u002Fblob\u002Fmain\u002Fagent-plugins\u002Fagents-for-python\u002Fskills\u002Fagents-sdk-to-prod\u002FSKILL.md",[],[25,24,123,124,115,9,111],"agents sdk to prod","review",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":139,"publishedAt":38},"01M69B8ENJGC9NPQBZAYAN4706","agents-sdk-python-otel","Use when adding, configuring, validating, or troubleshooting OpenTelemetry observability for a Microsoft 365 Agents SDK application in Python. Trigger when the user mentions OpenTelemetry, OTel, telemetry, traces, metrics, logs, OTLP, Aspire Dashboard, Application Insights, Azure Monitor, distributed tracing, custom tracers or meters, span sampling, or observing microsoft_agents SDK signals.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FAgents\u002Fblob\u002Fmain\u002Fagent-plugins\u002Fagents-for-python\u002Fskills\u002Fagents-sdk-python-otel\u002FSKILL.md",[131,136],{"categoryNo":132,"categoryName":133,"taxonomyType":134,"taxonomyTypeDesc":135},"01JBSEEDCAT000000000000013","分析与可视化","SCENARIO","使用场景",{"categoryNo":137,"categoryName":138,"taxonomyType":97,"taxonomyTypeDesc":98},"01JBSEEDCAT000000000000033","数据分析师",[25,24,140,141,115,142,9,143,144,145,102,146,147],"otel","agents sdk python otel","dashboard","telemetry","aspire","distributed","monitor","aspire dashboard",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":154,"publishedAt":38},"01M69B8C2FGRWXRJ35ZETW8ZV2","teams-sdk-to-agents-sdk-dotnet-migration","Use when migrating a customer's Teams SDK (teams.net) bot to the Microsoft 365 Agents SDK in .NET. Triggered by projects that depend on Microsoft.Teams.Plugins.AspNetCore, Microsoft.Teams.Apps, or Microsoft.Teams.Api and call builder.AddTeams() \u002F app.UseTeams().","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FAgents\u002Fblob\u002Fmain\u002Fagent-plugins\u002Fagents-for-net\u002Fskills\u002Fteams-sdk-to-agents-sdk-dotnet-migration\u002FSKILL.md",[],[25,155,21,23,156,112,24,9,157,37,158,34,159,160,30,161,162,163],"agents sdk dotnet","teams sdk to agents sdk dotnet migration","customer","apps","call","builder","projects","api","plugins"]