Skip to content

Latest commit

 

History

History
333 lines (258 loc) · 33.6 KB

CHANGELOG.md

File metadata and controls

333 lines (258 loc) · 33.6 KB

Changelog

[Unreleased]

Changed

  • Paginated console menu & top-down interactive selection:
    • scripts/lib/Common.ps1: Implemented Show-ConsoleMenu featuring interactive pagination (15 items per page), keyword filtering (/keyword or f keyword), page navigation ([n]ext / [p]rev), range selection (1-3), bulk recommendation shortcuts (rec / r), and persistent accumulation across pages.
    • scripts/lib/Common.ps1: Configured Show-FzfPicker with --layout=reverse, --height=80%, --border, --info=inline, and --cycle, ensuring natural top-down reading order with recommended items at the top.
    • scripts/lib/Common.ps1: Added Show-ItemPicker as a unified DRY dispatcher consolidating Show-OGV, Show-FzfPicker, and Show-ConsoleMenu, eliminating over 300 lines of duplicate menu code across scripts/init-user.ps1 and scripts/init-repo.ps1.
  • Console-first default & -Gui deprecation:
    • scripts/init-user.ps1, scripts/init-repo.ps1, configure.ps1: Defaulted interactive resource selection to cross-platform terminal selection (fzf or numbered console menu) across all operating systems including Windows.
    • Added -Gui switch to opt into the Windows Out-GridView table picker.
    • Formally marked -Gui and Show-OGV as deprecated with console notices and documentation annotations ahead of removal in v3.0 (preparation for standalone cross-platform Node / TypeScript CLI).
    • scripts/lib/Config.ps1: Added picker = 'console' to default configuration, supporting personal override to "picker": "gui" in ~/.awesome-copilot/config.json.

[v2.4.0] — 2026-10-04

Added

  • Conditional HTTP validation & offline catalogue fallback:

    • scripts/sync-awesome-copilot.ps1: Added HTTP conditional validation headers (If-None-Match for ETag and If-Modified-Since for Last-Modified) when fetching upstream llms.txt. If upstream is unchanged, the server returns HTTP 304 Not Modified; the script reuses cached catalogue data in <1s with 0 bytes transferred.
    • Offline fallback: Saves raw llms.txt to ~/.awesome-copilot/llms.txt and gracefully falls back to local cache if network connectivity is degraded or unavailable.
  • Shared Common Library (scripts/lib/Common.ps1):

    • Created a shared foundational library unifying core primitives across scripts: Assert-PathWithin (path traversal guard), Get-DirHash (SHA-256 tree hashing), Write-CopilotLog and Log (WCAG-compliant timestamped logging), Resolve-PromptsDirectory and Resolve-SkillsDirectory (cross-platform path resolution), Get-FrontmatterDescription / Get-Description (markdown metadata extraction), and Show-OGV / Show-FzfPicker (interactive GUI and CLI selection).
  • Security hardening & path traversal containment (Assert-PathWithin):

    • scripts/lib/Config.ps1, scripts/init-repo.ps1, scripts/init-user.ps1, scripts/update-repo.ps1, scripts/update-user.ps1: Added canonical path validation function Assert-PathWithin. Enforces that every file copy, directory installation, and removal target strictly resides within authorized base directories (.github/ for repository targets, %APPDATA%\Code\User\prompts\ and ~/.copilot/skills/ for user targets).
    • scripts/sync-awesome-copilot.ps1: Added path sanitization to the llms.txt catalogue parser, rejecting items containing .. or path navigation tokens and verifying that local paths remain within the destination root.
    • Strict error handling: Enforced $ErrorActionPreference = 'Stop' across scripts/lib/Config.ps1 and scripts/lib/AssetSchema.ps1.
  • Accessibility & terminal contrast enhancements:

    • Console contrast: Replaced DarkGray secondary text and prompts with Gray across configure.ps1, scripts/init-repo.ps1, and scripts/init-user.ps1, ensuring WCAG AA contrast compliance across diverse dark terminal themes.
    • Multi-modal status indication: Replaced low-contrast terminal colors (DarkCyan, DarkYellow, DarkMagenta) in item lists with high-contrast tones (Gray, White, Magenta, Yellow) paired with text badges ([★], [*], [↑], [~], [U], [!]), guaranteeing full legibility for colorblind and monochrome terminal users.
    • Markdown accessibility: Fixed heading hierarchy and pseudo-heading emphasis violations in CHANGELOG.md and TODO.md, ensuring full compliance with markdownlint and screen reader accessibility standards.
  • Vendor prefix isolation in Measure-ItemRelevance:

    • scripts/init-repo.ps1: Added vendor-prefix blocklist (dataverse, salesforce, shopify, pcf, arize, neon, etc.) to prevent vendor-specific packages (e.g. dataverse-python-*) from receiving name, title, or description matches against generic language/stack keywords unless that vendor prefix was detected in repository signals.
  • Cross-platform user prompt directory auto-detection:

    • scripts/init-repo.ps1, scripts/init-user.ps1, scripts/update-user.ps1: Default prompts directory now detects $IsMacOS (~/Library/Application Support/Code/User/prompts), $IsLinux (~/.config/Code/User/prompts respecting $env:XDG_CONFIG_HOME), and Windows fallback (%APPDATA%\Code\User\prompts).
  • Pre-computed requiresSetup metadata and in-memory fast path:

    • scripts/sync-awesome-copilot.ps1: Inspects files at sync time and stores "requiresSetup": true|false directly in ~/.awesome-copilot/catalogue.json.
    • scripts/init-repo.ps1 & scripts/init-user.ps1: Catalogue builders (Build-FlatCatalogue, Build-DirCatalogue, Build-UserCatalogue, Build-UserSkillsCatalogue) now look up RequiresSetup and curated descriptions from memory, eliminating disk reads across hundreds of items.
    • scripts/init-repo.ps1: Removed disk fallback loop from Measure-ItemRelevance for 100% in-memory scoring.
  • Refined user-level recommendation scoring:

    • scripts/init-user.ps1: Measure-GeneralRelevance now accepts Title and Description, evaluating technology negative filters against curated titles and positive engineering methodology signals against descriptions.
  • Cross-platform interactive terminal picker:

    • scripts/init-repo.ps1 & scripts/init-user.ps1: Added Show-FzfPicker supporting fuzzy multi-select in terminal when fzf is installed on PATH. Enhanced console menu with rec / recommended / r shortcut to instantly select all recommended items, and added all support to removal menus.
  • POSIX /bin/sh bootstrap wrapper:

    • run.sh: Lightweight POSIX shell wrapper for macOS and Linux that validates pwsh installation, displays actionable platform-specific installation instructions if missing, and dispatches subcommands (repo, user, update, sync, configure) transparently.
  • Persistent configuration manager:

    • scripts/lib/Config.ps1: Persistent configuration manager reading and writing ~/.awesome-copilot/config.json.
    • configure.ps1: Added -ShowConfig parameter and wired default categories and scope from configuration.
  • Canonical Asset Schema:

    • schemas/canonical-asset.schema.json: Formal JSON Schema for canonical AI asset definitions across repositories and target ecosystems.
    • scripts/lib/AssetSchema.ps1: PowerShell constructor (New-CanonicalAsset) and converter (ConvertTo-CanonicalAsset) transforming raw catalogue items into canonical assets.
  • Hybrid sync & curated llms.txt catalogue indexing:

    • scripts/sync-awesome-copilot.ps1: Fetches and indexes the official llms.txt catalogue (https://awesome-copilot.github.com/llms.txt), generating a structured metadata cache (~/.awesome-copilot/catalogue.json) containing human-readable titles, official descriptions, and direct URLs for all 842 curated resources.
    • scripts/init-repo.ps1 & scripts/init-user.ps1: Selection UI displays clean, human-readable titles alongside resource identifiers and official descriptions.
    • Enhanced recommendation scoring: Measure-ItemRelevance scores detected repo tech keywords against curated titles and descriptions.

Changed

  • DRY & KISS codebase refactoring:
    • configure.ps1, scripts/init-repo.ps1, scripts/init-user.ps1, scripts/update-repo.ps1, scripts/update-user.ps1, scripts/sync-awesome-copilot.ps1, and scripts/lib/Config.ps1: Dot-source scripts/lib/Common.ps1, eliminating duplicate implementations of logging, hash calculation, path assertions, and interactive pickers. Reduced boilerplate across the repository while preserving full backward compatibility.
  • Streamlined core categories (agents,instructions,skills):
    • scripts/sync-awesome-copilot.ps1: Default $Categories updated to 'agents,instructions,skills'. Drops unnecessary sparse checkout overhead from non-Copilot customization categories (such as GitHub agentic workflows and SDK cookbook recipes).
    • scripts/init-repo.ps1: Defaults to presenting pickers for the 3 core Copilot primitives (agents, instructions, skills). Advanced/distribution categories (hooks, plugins, workflows) remain accessible by passing -Category or explicit parameter switches.
    • scripts/sync-awesome-copilot.ps1: Mass-removal threshold calculation updated to compare removals only against items in the active $CategoriesList, preventing false-positive breaking-change warnings when category selections are narrowed.
    • configure.ps1: Prompts and parameter documentation updated to reflect the 3 core Copilot primitives.
    • README.md & llms.txt: Updated cache structure, category tables, and descriptions to reflect the hybrid sync model.

[v2.3.0] — 2026-06-23

Added

  • Standardized repository configurations (.editorconfig, Prettier)
  • Automated CSpell dictionaries and validation workflows
  • Automated GitHub Release workflows

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[2.2.0] - 2026-05-21

Added

  • Plugin support — full lifecycle management for the new plugins/ category in github/awesome-copilot. Plugins are curated bundles (agents + skills + plugin.json) maintained as named subdirectories.
    • scripts/sync-awesome-copilot.ps1: plugins added to the default $Categories sparse-checkout list.
    • scripts/init-repo.ps1: -Plugins / -SkipPlugins params; Build-PluginCatalogue function; #region Plugins install/uninstall block. Subscription tracking uses type='plugin' with a components array (agent, skill, pluginJson). Files distributed to: agents → .github/agents/, skills → .github/skills/, manifest → .github/plugin/<name>/plugin.json (namespaced). ConvertTo-Json -Depth bumped 5 → 8 throughout.
    • scripts/update-repo.ps1: plugin type branches in stale-check and apply-updates loops; depth bump.
    • README.md: Plugins row added to "What goes where" table; description and local cache structure updated.
  • Plugin recommendation scoring — Build-PluginCatalogue now parses each plugin's plugin.json keywords array and extracts dash-segment tokens from bundled agent/skill names, storing them as ExtraKeywords. Measure-ItemRelevance gains -ExtraKeywords; each match scores +2 (same weight as a name-segment hit). Select-Items threads ExtraKeywords through when present. Plugins like azure-cloud-development are correctly starred ★ on Azure/IaC repos even when the plugin name alone yields insufficient signal. Non-plugin categories are unaffected.
  • configure.ps1 -Update — runs sync + update scripts only (no interactive pickers). Works with -Scope (repo/user/both), -Force, -DryRun, and -Category.
  • configure.ps1 -Force — passes -Force to update-user.ps1 / update-repo.ps1, suppressing the interactive confirmation prompt. Useful for scripted/CI runs.
  • -Category param (all five scripts) — comma-separated filter controlling which resource types are processed. Examples: configure.ps1 -Update -Category "agents", init-repo.ps1 -Category "hooks,workflows", update-user.ps1 -Category "skills". Translates to internal -Skip* flags in init-repo.ps1 and init-user.ps1; filters subscription list before stale-check loop in the update scripts.

Changed

  • configure.ps1: -Force and -Category threaded through to update-user.ps1 and update-repo.ps1 in both the auto-update pre-check (Steps 1.5 / 2) and the new -Update shortcut.
  • configure.ps1: -Category threaded through to init-user.ps1 and init-repo.ps1 during install and uninstall flows.
  • Alphabetical category ordering — all category lists, operation sequences, and text outputs now consistently use the order: agents, hooks, instructions, plugins, skills, workflows. Affects picker execution order in init-repo.ps1, default $Categories in sync-awesome-copilot.ps1, prompt strings in configure.ps1, the "What goes where" table in README.md, and every category mention across all docs.
  • .gitignore: Added .github/plugin/ alongside the other awesome-copilot-sourced resource folders (agents, hooks, instructions, skills, workflows) so plugin manifests installed into this repo's own .github/ are never accidentally committed.

[2.1.0] - 2026-05-01

Added

  • configure.ps1: -Uninstall repo|user|both — replaces the two separate -Uninstall (switch) and -UninstallUser (switch) parameters with a single [ValidateSet] string parameter. repo removes .github/ resources for the current repo, user removes user-level resources (%APPDATA%\Code\User\prompts\ + ~/.copilot/skills/), both does both in one pass. Tab-completes in PowerShell. The old bare -Uninstall (no value) form is a breaking change — use -Uninstall repo going forward.
  • scripts/init-user.ps1: -Bootstrap switch — scans all three install locations against the local cache and writes user-subscriptions.json entries for every already-installed file/directory that has no existing subscription record. No files are copied or modified; only the manifest is updated. Supports -DryRun (reports count of what would be registered). Exits immediately after registering — does not proceed to the interactive pickers. Use this when the manifest is missing but resources are already on disk (e.g. installed before v2.0.0, or via the old publish-global.ps1 workflow).
  • configure.ps1: Auto-bootstrap on missing manifest — Step 1.5 now detects when user-subscriptions.json is absent but cache-origin files are installed at user level. When this condition is met it automatically calls init-user.ps1 -Bootstrap (or -Bootstrap -DryRun when running with -DryRun) before proceeding to the standard pickers. Previously, every configure.ps1 run would silently skip the update-user step and default to N on the prompt, leaving installed resources permanently untracked.

Changed

  • configure.ps1: -UninstallUser switch removed — replaced by -Uninstall user. Update any scripts or aliases that used -UninstallUser.

  • configure.ps1: Step 1.5 label updated from "User-level agents (available in all repos)" to "User-level resources (agents, instructions & skills — available in all repos)".

  • configure.ps1: Y/N prompt text updated from "Add user-level agents to VS Code?" to "Add/update user-level resources (agents, instructions & skills)?" with a second line "These are available in ALL repos — no .github/ needed.". Reflects that agents, instructions, and skills are all managed by this step since v2.0.0.

  • scripts/init-user.ps1: Extended $GeneralPositiveSegments — new general-purpose agent/instruction families now receive ★ recommendations:

    • implementer → gem-implementer, polyglot-test-implementer
    • engineer → software-engineer-agent-v1, prompt-engineer
    • designer → gem-designer
    • ux → se-ux-ui-designer (now scores 4 via ux + designer)
    • evaluator → technical-content-evaluator
    • investigator → devtools-regression-investigator, frontend-performance-investigator (now scores 4)
    • documenter → project-documenter
    • modernization → modernization
    • gitops → se-gitops-ci-specialist
    • safety → agent-safety.instructions.md
    • localization → localization.instructions.md
    • memory → memory-bank.instructions.md
  • scripts/init-user.ps1: Extended $TechSpecificSegments — new vendor/platform names added to prevent incorrect ★ recommendations:

    • mobile — blocks all *-mobile agents (gem-designer-mobile, gem-implementer-mobile, gem-mobile-tester)
    • foundry — blocks custom-agent-foundry (Azure AI Foundry)
    • defender — blocks defender-scout-kql (Microsoft Defender)
    • kql — blocks KQL-specific agents (Kusto Query Language)
    • terratest — blocks terratest-module-testing (Terraform testing framework)
    • kubestellar — blocks kubestellar-console (Kubernetes multi-cluster federation)
    • monday — blocks monday-bug-fixer (monday.com)
    • aem — blocks aem-frontend-specialist (Adobe Experience Manager)
    • lingodotdev — blocks lingodotdev-i18n (Lingo.dev translation platform)
    • context7 — blocks context7 (Context7 MCP documentation server)
  • scripts/init-repo.ps1: Extended Detect-RepoStack package.json detection — three additional frontend frameworks now auto-detected from package.json dependencies and scored for repo-level recommendations:

    • nuxt — Nuxt.js (Vue meta-framework)
    • electron — Electron (desktop apps)
    • ember — Ember.js (matched on ^ember dep prefix)

Testing

  • configure.ps1 -Uninstall repo / user / both — [ValidateSet] enforced; 'both-things' rejected at parameter binding.
  • configure.ps1 -Uninstall both -DryRun — $SkipSync = $true only; both user (init-user -Uninstall) and repo (init-repo -Uninstall) steps fire.
  • configure.ps1 -Uninstall repo -DryRun — $SkipUser = $true; only repo step fires.
  • configure.ps1 -Uninstall user -DryRun — $SkipInit = $true; only user step fires.
  • init-user.ps1 -Bootstrap -DryRun — correctly reports Would register 148 untracked installation(s) against disk state (76 agents, 17 instructions, 55 skills).
  • init-user.ps1 -Bootstrap — wrote user-subscriptions.json with exactly 148 entries; exit code 0.
  • Re-running -Bootstrap after manifest exists — reports nothing to register; exit code 0; manifest unchanged.
  • Scored all 203 agents against updated segment lists. Net change: 12 agents newly starred (from 72 to 84 starred), 0 regressions (no previously-starred agent lost its star).
  • Newly starred agents: devtools-regression-investigator, gem-designer, gem-implementer, modernization, polyglot-test-implementer (score ↑ to 4), project-documenter, prompt-engineer (score ↑ to 4), se-gitops-ci-specialist, se-ux-ui-designer (score ↑ to 4), software-engineer-agent-v1, technical-content-evaluator, frontend-performance-investigator (score ↑ to 4).
  • Confirmed all 10 new tech-specific segments correctly block their target agents.

[2.0.0] - 2026-04-18

Added

  • scripts/sync-awesome-copilot.ps1: Structural change detection — after each non-first-run pull, verifies every previously-synced category folder still exists on disk. Logs STRUCTURAL CHANGE DETECTED (with missing folder list) and exits non-zero if any are absent. Catches upstream category renames or removals before they silently break subscriptions.
  • scripts/sync-awesome-copilot.ps1: Mass-removal threshold — if ≥ 25 % of all previously tracked files disappear in a single pull (min 10 files prior), logs MASS-REMOVAL DETECTED with the actual ratio and exits before writing the new manifest. Guards against large upstream restructures being silently applied.
  • scripts/sync-awesome-copilot.ps1: -Force switch — bypasses both safety checks when an upstream restructure is intentional.
  • scripts/init-user.ps1: Instructions support — new -Instructions / -SkipInstructions parameters; interactive picker installs .instructions.md files to %APPDATA%\Code\User\prompts\. Only general-purpose (tech-agnostic) items are starred ★ using the same Measure-GeneralRelevance scoring as agents. Extended $GeneralPositiveSegments with refactor, remember, accessibility, a11y, performance, owasp.
  • scripts/init-user.ps1: Skills support — new -Skills / -SkipSkills / -SkillsDir parameters; interactive picker installs skill directories to ~/.copilot/skills/. New Build-UserSkillsCatalogue, Get-DirHash, Install-Directory, Remove-Directory helpers. Full install/update/remove lifecycle tracked in user-subscriptions.json with type: directory entries.
  • scripts/init-user.ps1: Trust warning — displayed before the install pickers (not shown on -Uninstall or -DryRun). Reminds the user that resources written to %APPDATA%\Code\User\prompts\ and ~/.copilot/skills/ are loaded by Copilot in all VS Code sessions.
  • scripts/update-user.ps1: -SkillsDir parameter; Get-DirHash helper; destination routing by subscription type field (directory → $SkillsDir, file → $PromptsDir); directory-type subscriptions mirrored file-by-file on update.
  • scripts/init-repo.ps1: [U] status indicator — agents and instructions now show [U] in the OGV Status column and console menu when the item is already installed at user level ($UserPromptsDir). New -UserPromptsDir parameter (defaults to %APPDATA%\Code\User\prompts). [U] is additive — combines with [*], [↑], [~], [!].

Fixed

  • scripts/init-user.ps1: Added power, flowstudio, and powershell to $TechSpecificSegments. power-bi, power-platform, power-apps, power-automate, flowstudio, and powershell-specific resources no longer receive a ★ recommendation in user-level pickers.
  • scripts/init-repo.ps1: Renamed $input → $rawInput in Select-Items and Select-ToRemove console-menu fallbacks. $input is PowerShell's automatic pipeline enumerator variable; shadowing it risks silent data loss in pipeline contexts.
  • scripts/sync-awesome-copilot.ps1: Changed $Global:LogFile to $script:LogFile. Global scope leaked the log path into the session, risking log corruption if two sync runs overlapped or another script reused the variable name.

Changed

  • scripts/init-user.ps1: header, validation log, and summary updated to reflect three resource categories and two destination directories.
  • README.md: updated init-user.ps1 section with three-location table, new parameters, and usage examples; updated update-user.ps1 section with -SkillsDir param; added [U] entry and clarifying tip to the symbol table.

Identified (not yet extracted)

  • Shared helper duplication — Log, Show-OGV, Get-DirHash, Get-Description, Install-File, Remove-File, Test-RequiresSetup, and the subscription upsert/remove pattern are defined independently in multiple scripts (init-repo.ps1, init-user.ps1, update-repo.ps1, update-user.ps1). Planned fix: extract to a dot-sourced scripts/Common.ps1 in a follow-up PR.

Testing

  • sync-awesome-copilot.ps1 -Plan — exits cleanly; structural/mass-removal checks correctly bypass in plan mode.
  • Structural check verified by temporarily renaming agents/ from the cache: STRUCTURAL CHANGE DETECTED fires with correct missing-folder output.
  • Mass-removal check verified by inflating manifest item count 5×: MASS-REMOVAL DETECTED fires at 80% removal ratio; -Force bypasses and restores a clean manifest.
  • init-user.ps1 -DryRun -Agents gem-reviewer -Instructions security-and-owasp -Skills refactor — all three categories resolve; agent reports unchanged (already installed), instruction and skill report would-add.
  • init-user.ps1 -DryRun -Uninstall -SkipAgents -SkipInstructions — correctly reports no script-managed skills to remove.
  • update-user.ps1 -DryRun — reads 67 existing agent subscriptions; Skills dir shown in header; all report current.
  • [U] flag: inline script confirms 67 of 203 agents have UserInstalled = true, matching existing user subscriptions; 4 have AlreadyInstalled = true (repo-installed).
  • power-bi, power-platform, flowstudio confirmed blocked (return 0 from Measure-GeneralRelevance); powershell also confirmed blocked.
  • init-repo.ps1 -DryRun — $rawInput rename verified; no pipeline variable collision.

[1.2.2] - 2026-02-27

Changed

  • configure.ps1: use $PSScriptRoot to locate the scripts/ folder (replaces $MyInvocation.MyCommand.Path which behaves differently when dot-sourced)
  • scripts/sync-awesome-copilot.ps1: replace manual SHA256 with built-in Get-FileHash — cleaner and avoids loading entire file into memory
  • scripts/publish-global.ps1: emit a WARN log when VS Code settings.json is not found (was a silent no-op); user is directed to open VS Code once to generate the file

[1.2.1] - 2026-02-27

Fixed

  • configure.ps1: -InstallTask / -UninstallTask now automatically skip the init-repo prompt (validation moved before Step 1 so the flag takes effect)
  • configure.ps1: prompts to overwrite when the scheduled task already exists, instead of throwing a hard error
  • scripts/install-scheduled-task.ps1: added -WorkingDirectory to both scheduled task actions (was defaulting to C:\Windows\System32, causing a permissions error creating the logs/ directory)
  • scripts/sync-awesome-copilot.ps1: replaced relative logs/ path with $PSScriptRoot/logs/ so logs always land in scripts/logs/ regardless of working directory
  • scripts/install-scheduled-task.ps1: updated task description (removed stale "combine" wording)
  • scripts/publish-global.ps1: fixed named-profile example path (agents\ → prompts\)
  • README.md: corrected default interval (6h → 4h), log paths, authentication section, and custom-repo instructions
  • .github/copilot-instructions.md: removed stale GitHub API / GITHUB_TOKEN references; updated cache structure

[1.2.0] - 2026-02-27

Changed

  • scripts/sync-awesome-copilot.ps1: Rewritten — replaced GitHub API + per-file HTTP download approach with git sparse-checkout. First run clones github/awesome-copilot shallowly with only the requested categories; subsequent runs run git pull for near-instant delta updates. Dramatically faster (single bulk transfer vs 700+ individual HTTP requests) and removes GitHub API rate-limit concerns entirely.
    • Prefers gh (GitHub CLI) for automatic auth; falls back to git
    • New -GitTool auto|gh|git parameter to override tool selection
    • Removed parameters: -NoDelete, -DiffOnly, -SkipBackup, -BackupRetention (git handles all of these natively)
    • Migrates automatically from the old API-based cache (renames non-git ~/.awesome-copilot/ to ~/.awesome-copilot-backup-<date> before cloning)
    • manifest.json still written (from local file scan) for backward compatibility with publish-global.ps1 and configure.ps1

Added

  • README.md: document gh/git requirement; update sync section to reflect git-based approach

[1.1.2] - 2026-02-27

Added

  • configure.ps1 — interactive orchestrator that chains sync → publish-global → init-repo; each step independently skippable via -SkipSync, -SkipPublish, -SkipInit; -DryRun passes through to all child scripts; shows last sync timestamp from cache manifest before running
  • init-repo.ps1: added Agents as a fourth interactive category (installs to .github/agents/)
  • init-repo.ps1: Detect-RepoStack — auto-detects language/framework from file signals and marks relevant items with ★ in the picker
  • init-repo.ps1: Prompt-RepoIntent — interactive fallback for new/empty repos; asks language, project type, and concerns
  • init-repo.ps1: -- none / skip -- sentinel row in every OGV picker so clicking OK with no intentional selection installs nothing
  • publish-global.ps1: auto-configures chat.useAgentSkills and chat.agentSkillsLocations in VS Code settings.json when skills are published
  • .github/copilot-instructions.md: Copilot instructions for this repository covering script workflow, conventions, and contributing guidelines

Fixed

  • normalize-copilot-folders.ps1: Split-Path -LeafParent → Split-Path -Parent (-LeafParent is not a valid parameter and would throw at runtime)
  • install-scheduled-task.ps1: removed -Quiet from publish-global.ps1 invocation (publish-global.ps1 has no -Quiet parameter; would throw on scheduled runs)
  • init-repo.ps1: $Items.IndexOf($_) → [Array]::IndexOf($Items, $_) (System.Object[] has no instance IndexOf method; affected console-menu fallback path)
  • init-repo.ps1: fixed OGV column name [*] Installed → Installed (special characters caused WPF binding errors at runtime)
  • init-repo.ps1: fixed return if (...) runtime error in Install-File — replaced with explicit if/else branches
  • publish-global.ps1: corrected agents target path to %APPDATA%\Code\User\prompts\ (was incorrectly set to agents\)
  • sync-awesome-copilot.ps1: changed $ErrorActionPreference from Inquire to Stop — Inquire caused the script to hang waiting for interactive input when run as a scheduled task

Changed

  • publish-global.ps1: updated inline comment from "CCA" to "VS Code Agent mode / Copilot CLI"
  • README.md: corrected all -Interval references to -Every; fixed -ProfileName → -ProfileRoot/-AllProfiles; updated agents path to %APPDATA%\Code\User\prompts\; updated init-repo.ps1 section to reflect agents category and smart detection; fixed custom -AgentsTarget example path
  • .github/copilot-instructions.md: corrected agents path from %APPDATA%\Code\User\agents\ to %APPDATA%\Code\User\prompts\
  • init-repo.ps1: removed skills from per-repo initialisation; skills are globally available via publish-global.ps1 (~/.copilot/skills/) and users should reference the source directly at github/awesome-copilot rather than committing point-in-time copies to repos

[1.1.0] - 2026-02-26

Added

  • publish-global.ps1 — publishes agents to the VS Code user agents folder (via junction so sync updates are reflected immediately) and skills to ~/.copilot/skills/; supports -DryRun, -SkipAgents, -SkipSkills, -AgentsTarget, -SkillsTarget
  • init-repo.ps1 — interactive script to initialise a repo with per-repo resources (instructions, hooks, workflows); uses Out-GridView on Windows with a numbered console-menu fallback; supports -RepoPath, -DryRun, -SkipInstructions, -SkipHooks, -SkipWorkflows

Changed

  • Updated default sync categories to match current awesome-copilot repository structure:
    • Added: agents, workflows, hooks, skills
    • Removed: chatmodes, prompts (no longer exist in awesome-copilot)
  • Added recursive directory traversal in sync-awesome-copilot.ps1 to support subdirectory-based categories (skills/, hooks/, plugins/)
  • Extended file extension filter to include .sh files (required for hooks to function — each hook ships shell scripts alongside its hooks.json)
  • Updated combine-and-publish-prompts.ps1 categories from chatmodes/instructions/prompts to agents/instructions/workflows; added deprecation notice at top (superseded by publish-global.ps1 + init-repo.ps1); kept for backwards compatibility
  • Updated normalize-copilot-folders.ps1 to classify *.agent.md → agents/ and ensure agents/ directory is created on normalize runs
  • Updated install-scheduled-task.ps1: default categories now agents,instructions,workflows,hooks,skills; -IncludeCollections replaced by -IncludePlugins; -SkipCombine replaced by -SkipPublishGlobal; scheduled actions now run publish-global.ps1 after sync

Removed

  • normalize-copilot-folders.ps1 — removed (legacy, superseded by junction-based agent publishing and init-repo.ps1)

  • plugins/ and cookbook/ are available but opt-in via -IncludePlugins due to their size

  • Hooks are synced as complete packages (README.md + hooks.json + .sh scripts) preserving their directory structure

  • Design rationale: agents and skills are global (agents available in all VS Code workspaces; skills loaded on-demand); instructions/hooks/workflows are per-repo opt-in via init-repo.ps1 to avoid conflicts between contradicting instruction files

[1.0.0] - 2025-10-20

Added

  • Initial release of VS Code Copilot Resource Sync Scripts
  • sync-awesome-copilot.ps1 - Sync resources from GitHub awesome-copilot repository
  • combine-and-publish-prompts.ps1 - Combine and publish resources to VS Code
  • publish-to-vscode-profile.ps1 - Publish resources to VS Code profiles
  • normalize-copilot-folders.ps1 - Clean up and organize resource files
  • install-scheduled-task.ps1 - Create automated sync task
  • uninstall-scheduled-task.ps1 - Remove scheduled task
  • GitHub API integration with optional GITHUB_TOKEN support
  • SHA256 hash-based change detection for efficient syncing
  • Automatic junction/symlink creation with copy fallback
  • Manifest-based sync state tracking
  • Comprehensive logging system
  • Support for multiple VS Code profiles

Features

  • Portable paths using environment variables ($HOME, $env:APPDATA)
  • Preserves user-created custom files in combined directory
  • Incremental updates (only downloads changed files)
  • Customizable sync intervals for scheduled task
  • Automatic categorization based on file suffixes
  • Detailed sync logs with timestamps

Security

  • No hardcoded credentials or personal information
  • Optional environment variable for GitHub token
  • All sensitive data handled via environment variables

Note: Version numbers follow Semantic Versioning:

  • MAJOR version for incompatible API changes
  • MINOR version for new functionality in a backwards compatible manner
  • PATCH version for backwards compatible bug fixes