Open
Conversation
Add end-to-end support for agent skills in M365 Agents Toolkit: - Manifest wrapper: AgentSkillElement, CRUD operations (add/remove/has/get), max 10 skills, x-agent_skills extension property with agent_skills fallback - Packaging: bundle skill directories in createAppPackage, validate path boundary and SKILL.md existence - Validation: skill folder/SKILL.md/frontmatter validation, error aggregation, telemetry, log formatting for CLI and VS Code - FxCore.addSkill(): new/existing skill flows, SKILL.md template generation, path normalization, confirmation dialog - Question flow: skill name, description, expose-to-copilot questions - CLI: atk add skill command with options and telemetry - VS Code: handler, command registration, telemetry events - Localization: all English strings for prompts and messages - Tests: 51 new unit tests across wrapper, packaging, validation, and command Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ore conflict - Rename checkCopilotAccess.title to checkCopilotAccess in all 16 nls files to match the %teamstoolkit.commands.checkCopilotAccess% reference in package.json - Remove redundant 'files' property from package.json since .vscodeignore is used for vsce packaging (newer vsce rejects having both) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add TreeViewCommand for addSkill below Add Action in the Development pane - Add fx-extension.addSkill command entry in package.json with enablement - Add localization keys (title, description, running, blockTooltip) across all 16 locales - Remove diagnostic logging from localizeUtils.ts and treeViewCommand.ts - Skill item shows only for declarative agent projects (isDeclarativeCopilotApp) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Replace ConfirmQuestion with SingleSelectQuestion (yes/no options) - Update FxCore.addSkill to compare string 'yes' instead of boolean - Add localization keys for yes/no options - Update CLI option type from boolean to string - Update tests accordingly - all 11 passing Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The addSkill flow had a showMessage() confirm dialog before proceeding, which interrupted the quickpick-only UX. Remove it so the flow stays entirely within the VS Code quickpick area. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Adds back the warn-level showMessage confirmation (matching addPlugin pattern) that asks users to confirm before modifying files. This was accidentally removed when the pre-action confirmation was stripped. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Allow uppercase letters in skill names (not just lowercase) - Validate for duplicate skill names (check if folder already exists) - Rename CLI flags: --name, --description, --expose-to-copilot, --from - Update validation error messages and placeholder text Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
When adding an existing skill via --from, the name and description are already in the SKILL.md file, so they shouldn't be required. Skip the name/description prompts in the question flow when --from is provided. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
When importing an existing skill via --from: - Validate folder name uses only letters, numbers, and hyphens - Read SKILL.md frontmatter and verify the name matches the folder name - Error out with clear messages if either check fails Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add AgentSkillsEnabled feature flag (default: false) following the established pattern (like EmbeddedKnowledge before cleanup). Gates: - VS Code tree view item (treeViewManager.ts) - VS Code command enablement (package.json) - VS Code context (extension.ts setContext) - CLI 'atk add skill' command (add.ts) Set TEAMSFX_AGENT_SKILLS=true to enable the feature. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add re-export of AgentSkillElement interface so it can be imported by consumers and test files. Previously the type was imported from generated-types and used internally but not re-exported, causing TS2459 errors in the manifest test suite. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Use path.resolve(projectPath, teamsManifestPath) for manifest file resolution to handle both absolute and relative paths correctly - Revert localized package.nls.*.json files (pipeline handles translations) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Update treeViewManager test to expect 9 items (Add Skill added) - Apply prettier formatting to CopilotGptManifestUtils and test files Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Merge upstream/dev to stay current - Fix CopilotGptManifestUtils.ts formatting (CI lint-pr.sh) - Add 5 new unit tests for addSkill coverage gaps: - copilotExtensions manifest format path - Skill outside appPackage validation - SKILL.md without name frontmatter - showMessage error handling - DA manifest with empty file property Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add 7 tests for addSkillQuestionNode (pattern validation, duplicates, conditions) - Add 4 tests for logValidationErrors with skill errors (VSC + CLI) - Add 1 test for validate driver with non-empty skillValidationResult - Remove 3 unused NLS keys (expose.description, from.title, from.placeholder) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Test VSCode View Agent Manifest button triggers openFile - Test CLI platform success message path - Test logValidationErrors with undefined skillValidationResult (covers ?? [] partials) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Skill folder paths were resolved relative to the DA manifest file location, which points to .generated/ during packaging. Since skill folders don't support env var substitution, they only exist in the original appPackage/ directory. Resolve skill folders relative to appDirectory instead, matching the pattern used by embedded knowledge files. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add ability to import skills from .zip files via UI (source type picker + file dialog) and CLI (--from flag with .zip path). Includes: - New SkillSourceType and SkillFromZipFile questions - importSkillFromZip method with security validation (path traversal, zip bomb protection), layout detection, and atomic extraction - NLS strings for UI labels and error messages - 8 new tests covering zip import happy path and error cases Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Restore 'files' field in package.json (was accidentally removed) - Restore 'checkCopilotAccess.title' key name in package.nls.json Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
These files had unrelated bulk translation changes and a merge conflict. Skill-related translations should be added separately. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
AdmZip.writeZip() normalizes ../../../etc/passwd to etc/passwd on disk. Use fs.writeFile with toBuffer() to preserve raw traversal entry names. Also remove duplicate validateInputs stub (already in beforeEach). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…S import
AdmZip.addFile() normalizes '../../../etc/passwd' to 'etc/passwd' at creation
time, so both writeZip() and toBuffer() produce a normalized entry. A real
malicious zip crafted externally preserves the raw traversal path. Construct
the ZIP binary manually to verify our entryName.includes('..') check works.
Also remove unused TOOLS import from test file.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## dev #15712 +/- ##
========================================
Coverage 92.99% 93.00%
========================================
Files 623 625 +2
Lines 38539 38892 +353
Branches 7030 7265 +235
========================================
+ Hits 35840 36172 +332
- Misses 1959 1977 +18
- Partials 740 743 +3
🚀 New features to boost your workflow:
|
…test.ts Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
VS Code only populates quickPick.selectedItems on explicit mouse clicks. Pressing Enter fires onDidAccept with selectedItems=[] while activeItems holds the keyboard-focused item. Add an activeItems fallback so Enter key navigation works correctly when selecting a manifest/file in the singleFile QuickPick (e.g. the Teams App manifest step in 'Add Skill'). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
|
@qfai My branch was updated with new requirements. Please refresh this one with the latest. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Add skill support for declarative agents.
Original PR from sebastienlevert/microsoft-365-agents-toolkit:feature/agent-skills-support, cleaned up unrelated changes:
work item