diff --git a/.github/workflows/winget.yml b/.github/workflows/winget.yml index 094defe6..873e55b3 100644 --- a/.github/workflows/winget.yml +++ b/.github/workflows/winget.yml @@ -41,4 +41,26 @@ jobs: .\wingetcreate.exe update $packageId ` --version $packageVersion ` --urls "$installerUrlx64|x64" "$installerUrlarm64|arm64" ` - --submit + --out manifests + + # Add PowerShell dependency to installer manifest + $installerManifest = Get-ChildItem -Path manifests -Filter "*.installer.yaml" -Recurse | Select-Object -First 1 -ExpandProperty FullName + if (-not $installerManifest) { + Write-Error "No installer manifest (*.installer.yaml) was found in the 'manifests' directory." + exit 1 + } + $content = Get-Content -Path $installerManifest -Raw + $dependency = @" + Dependencies: + PackageDependencies: + - PackageIdentifier: Microsoft.PowerShell + MinimumVersion: "7.0.0" + "@ + # Remove existing top-level Dependencies block (if any), then insert ours + $content = $content -replace '(?m)^Dependencies:\r?\n([ ]+.+\r?\n)*', '' + $content = $content -replace '(?m)^Installers:', "$dependency`nInstallers:" + Set-Content -Path $installerManifest -Value $content + + # Submit the modified manifest + $manifestPath = Split-Path $installerManifest + .\wingetcreate.exe submit $manifestPath diff --git a/README.md b/README.md index d5dae010..347cf2dc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# GitHub Copilot CLI (Public Preview) +# GitHub Copilot CLI The power of GitHub Copilot, now in your terminal. @@ -38,61 +38,64 @@ If you have access to GitHub Copilot via your organization or enterprise, you ca ### Installation -Install with [WinGet](https://github.com/microsoft/winget-cli) (Windows): +Install with the install script (macOS and Linux): ```bash -winget install GitHub.Copilot +curl -fsSL https://gh.io/copilot-install | bash ``` +Or + ```bash -winget install GitHub.Copilot.Prerelease +wget -qO- https://gh.io/copilot-install | bash ``` -Install with [Homebrew](https://formulae.brew.sh/cask/copilot-cli) (macOS and Linux): +Use `| sudo bash` to run as root and install to `/usr/local/bin`. -```bash -brew install copilot-cli -``` +Set `PREFIX` to install to `$PREFIX/bin/` directory. Defaults to `/usr/local` +when run as root or `$HOME/.local` when run as a non-root user. + +Set `VERSION` to install a specific version. Defaults to the latest version. + +For example, to install version `v0.0.369` to a custom directory: ```bash -brew install copilot-cli@prerelease +curl -fsSL https://gh.io/copilot-install | VERSION="v0.0.369" PREFIX="$HOME/custom" bash ``` -Install with [npm](https://www.npmjs.com/package/@github/copilot) (macOS, Linux, and Windows): +Install with [Homebrew](https://formulae.brew.sh/cask/copilot-cli) (macOS and Linux): ```bash -npm install -g @github/copilot +brew install copilot-cli ``` ```bash -npm install -g @github/copilot@prerelease +brew install copilot-cli@prerelease ``` -Install with the install script (macOS and Linux): + +Install with [WinGet](https://github.com/microsoft/winget-cli) (Windows): ```bash -curl -fsSL https://gh.io/copilot-install | bash +winget install GitHub.Copilot ``` -Or - ```bash -wget -qO- https://gh.io/copilot-install | bash +winget install GitHub.Copilot.Prerelease ``` -Use `| sudo bash` to run as root and install to `/usr/local/bin`. -Set `PREFIX` to install to `$PREFIX/bin/` directory. Defaults to `/usr/local` -when run as root or `$HOME/.local` when run as a non-root user. - -Set `VERSION` to install a specific version. Defaults to the latest version. +Install with [npm](https://www.npmjs.com/package/@github/copilot) (macOS, Linux, and Windows): -For example, to install version `v0.0.369` to a custom directory: +```bash +npm install -g @github/copilot +``` ```bash -curl -fsSL https://gh.io/copilot-install | VERSION="v0.0.369" PREFIX="$HOME/custom" bash +npm install -g @github/copilot@prerelease ``` + ### Launching the CLI ```bash @@ -118,14 +121,74 @@ Launch `copilot` in a folder that contains code you want to work with. By default, `copilot` utilizes Claude Sonnet 4.5. Run the `/model` slash command to choose from other available models, including Claude Sonnet 4 and GPT-5. +### Experimental Mode + +Experimental mode enables access to new features that are still in development. You can activate experimental mode by: + +- Launching with the `--experimental` flag: `copilot --experimental` +- Using the `/experimental` slash command from within the CLI + +Once activated, the setting is persisted in your config, so the `--experimental` flag is no longer needed on subsequent launches. + +#### Experimental Features + +- **Autopilot mode:** Autopilot is a new mode (press `Shift+Tab` to cycle through modes), which encourages the agent to continue working until a task is completed. + Each time you submit a prompt to GitHub Copilot CLI, your monthly quota of premium requests is reduced by one. For information about premium requests, see [About premium requests](https://docs.github.com/copilot/managing-copilot/monitoring-usage-and-entitlements/about-premium-requests). For more information about how to use the GitHub Copilot CLI, see [our official documentation](https://docs.github.com/copilot/concepts/agents/about-copilot-cli). +## 🔧 Configuring LSP Servers + +GitHub Copilot CLI supports Language Server Protocol (LSP) for enhanced code intelligence. This feature provides intelligent code features like go-to-definition, hover information, and diagnostics. + +### Installing Language Servers + +Copilot CLI does not bundle LSP servers. You need to install them separately. For example, to set up TypeScript support: + +```bash +npm install -g typescript-language-server +``` + +For other languages, install the corresponding LSP server and configure it following the same pattern shown below. + +### Configuring LSP Servers + +LSP servers are configured through a dedicated LSP configuration file. You can configure LSP servers at the user level or repository level: + +**User-level configuration** (applies to all projects): +Edit `~/.copilot/lsp-config.json` + +**Repository-level configuration** (applies to specific project): +Create `.github/lsp.json` in your repository root + +Example configuration: + +```json +{ + "lspServers": { + "typescript": { + "command": "typescript-language-server", + "args": ["--stdio"], + "fileExtensions": { + ".ts": "typescript", + ".tsx": "typescript" + } + } + } +} +``` + +### Viewing LSP Server Status + +Check configured LSP servers using the `/lsp` command in an interactive session, or view your configuration files directly. + +For more information, see the [changelog](./changelog.md). + ## 📢 Feedback and Participation We're excited to have you join us early in the Copilot CLI journey. -This is an early-stage preview, and we're building quickly. Expect frequent updates--please keep your client up to date for the latest features and fixes! +We're building quickly. Expect frequent updates--please keep your client up to date for the latest features and fixes! -Your insights are invaluable! Open issue in this repo, join Discussions, and run `/feedback` from the CLI to submit a confidential feedback survey! +Your insights are invaluable! Open an issue in this repo, join Discussions, and run `/feedback` from the CLI to submit a confidential feedback survey! diff --git a/changelog.md b/changelog.md index 42dc91f4..a05efb69 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,522 @@ +## 1.0.5 - 2026-03-13 + +- Terminal title resets to default after running /clear or /new +- Add /extensions command to view, enable, and disable CLI extensions +- @ file mentions now support paths outside the project: absolute paths (@/usr/...), home directory (@~/...), and relative parent paths (@../...) +- Toggling experimental mode with /experimental on|off automatically restarts the CLI to apply changes immediately +- Right-click paste goes to the active dialog input instead of the main conversation input +- Introducing /pr to help create and view PRs, automatically fix CI failures, address review feedback, and resolve merge conflicts +- Block network (UNC) paths to prevent credential leakage via SMB authentication +- Send follow-up messages to background agents with the write_agent tool for multi-turn conversations +- Memory storage errors now indicate when repository doesn't exist or you lack write access +- Show a clear error when a classic Personal Access Token (ghp\_) is set in environment variables instead of silently exiting +- Diff view displays correctly on Windows instead of showing corrupted/overwritten text +- Fix Kitty keyboard protocol escape sequences appearing at shutdown +- Setting claude-sonnet-4.6 as the default model is now preserved correctly +- Plugin uninstall reliably removes files using the stored install path +- Add /version command to display CLI version and check for updates from within the session +- Add experimental embedding-based dynamic retrieval of MCP and skill instructions per turn +- Syntax highlighting in /diff with support for 17 programming languages +- Add preCompact hook to run commands before context compaction starts +- Request ID from the API now appears in the timeline when errors occur after retries are exhausted +- PR descriptions with backtick-formatted code render correctly on Windows/PowerShell +- Show a helpful error message when a file path is passed as a CLI command +- Session reports an authentication error instead of hanging when the token is invalid or expired +- View tool shows partial content for large single-line files (e.g. minified JS, large JSON blobs) instead of empty output +- /changelog supports `last `, `since `, and `summarize` to browse and summarize multiple release notes at once +- Hooks config files that omit the version field are now accepted by the CLI + +## 1.0.4 - 2026-03-11 + +- Add `session.shell.exec` and `session.shell.kill` RPC methods for executing shell commands with streaming stdout/stderr output +- Custom agents from --plugin-dir plugins now load correctly in ACP mode +- Adaptive color engine with dynamic color modes and interactive theme picker. Gracefully degrades on limited-color terminals and Windows +- MCP OAuth re-authentication works reliably when callback port changes or when using Microsoft Entra ID +- Replace /pr open with /pr view [local|web] to view PR status locally or open in browser +- Enables OpenTelemetry instrumentation for observability into agent sessions, LLM calls, and tool executions +- Extensions can now be written as CommonJS modules (extension.cjs) +- Show loaded extensions count in the Environment loaded startup message +- Support disableAllHooks flag to disable all hooks from a configuration file +- Support Azure DevOps repository identification in session logs +- Session export header renders each field on its own line in shared gists +- Auto-update now retries without authentication token on SAML enforcement errors +- Autopilot mode stops continuing after API errors instead of looping indefinitely +- Status line context window percentage no longer inflates across turns by using the last call's input and output tokens instead of cumulative totals +- Kitty keyboard protocol is properly disabled on suspend when using alternate screen +- Only show reasoning headers when it's the only reasoning text available. +- Terminal properly resets when CLI crashes, preventing shell corruption +- /update command automatically restarts to apply updates instead of requiring manual exit +- OAuth authentication now handles Microsoft Entra ID and other OIDC servers reliably with proper resource indicators and refresh token support +- Show individual instruction file names in /instructions picker with [external] labels for injected files +- Path permission dialog offers a one-time approval option in addition to adding the path to the allowed list +- Add --reasoning-effort CLI flag to set reasoning effort level +- Hooks can now request user confirmation before tool execution with 'ask' permission decision +- Add configure-copilot sub-agent for managing MCP servers, custom agents, and skills via the task tool +- Interactive shell initialization no longer times out on slow machines +- Faster shell commands on Windows by skipping PowerShell profile loading +- Improve CLI help documentation to use standard --option=value format and comma-separated list syntax + +## 1.0.3 - 2026-03-09 + +- Enable alternate screen buffer by default for staff users +- Extensions are now available as an experimental feature — ask Copilot to write custom tools and hooks for itself using @github/copilot-sdk +- Document GH_HOST, HTTP_PROXY, HTTPS_PROXY, NO_COLOR, and NO_PROXY environment variables in help +- Read MCP server configuration from .devcontainer/devcontainer.json +- Add --binary-version flag to query the CLI binary version without launching +- Add /restart command to hot restart the CLI while preserving your session +- Background task notifications display in timeline with expandable detail +- Type 'quit' to exit the CLI, in addition to 'exit' +- Add extraKnownMarketplaces repository setting to replace marketplaces +- Add Windows Terminal support to /terminal-setup command +- /reset-allowed-tools now fully undoes /allow-all and re-triggers the autopilot permission dialog +- Improved handling of batched queries in the SQL tool +- Login flow no longer hangs on Ubuntu when system keyring is unresponsive +- Terminal is properly reset when CLI crashes unexpectedly +- Table disables borders in screen reader mode to prevent announcing decorative characters +- MCP servers with non-conforming outputSchema are now accessible +- /plugin update now works for GitHub-installed plugins +- /add-dir directories persist across session changes like /clear and /resume +- Prevent env command from being treated as safe to allow without approval +- Placeholder text color displays correctly when wrapping in narrow terminals +- /plugin update now works with marketplaces defined in project settings +- Retry status messages now display to show progress during server error recovery +- Show loading spinner in diff mode while fetching changes +- Suppress /init suggestion when .github/instructions/ contains instructions +- Rename merge_strategy config to mergeStrategy for consistency +- Suppress unknown field warnings in skill and command frontmatter +- Trust safe sed commands to run without confirmation + +## 1.0.2 - 2026-03-06 + +To commemorate GitHub Copilot CLI reaching general availability last week, we're incrementing the major version to 1.0! + +- Type 'exit' as a bare command to close the CLI +- Ask_user form now submits with Enter key and allows custom responses in enum fields +- Support 'command' field as cross-platform alias for bash/powershell in hook configs +- Hook configurations now accept timeout as alias for timeoutSec +- Fix handling of meta with control keys (including shift+enter from /terminal-setup) + +## 0.0.423 - 2026-03-06 + +- Users are prompted for shell commands with potentially dangerous expansion or substitution use cases, additional guardrails for malicious exploits +- Block /share gist for EMU and GHE Cloud users with clear error messaging +- Elicitation enum and boolean fields now require Enter to confirm a selection, with a ✓ indicator for confirmed values vs ❯ for the browsing cursor +- MCP servers can now request users to visit a URL for out-of-band interactions such as OAuth flows or API key entry +- Improve explore agent precision and large repository support with better context sharing +- Diff mode displays cleanly on Windows with CRLF line endings + +## 0.0.422 - 2026-03-05 + +- Display request ID in authentication and authorization error messages to aid troubleshooting +- Load personal hooks from ~/.copilot/hooks in addition to repo-level .github/hooks +- Timeline now shows the question in a box and displays 'Making best guess on autopilot' when ask_user is auto-responded +- Add support for GPT-5.4 model +- Plugin cache automatically recovers from a corrupted or incomplete clone without manual intervention +- Show a clear, actionable error message when git is not installed and a remote plugin or marketplace is used +- Text selection persists after copying to clipboard in alt screen +- Scroll view no longer jumps to earlier messages when scrolling during response streaming or with popups open +- Add copy_on_select config option to auto-copy selected text to clipboard in alt screen mode +- IME candidate windows appear at correct cursor position in CJK input +- Add mouse scroll support to /diff in alt-screen mode +- Reduce memory usage in alt-screen mode for long sessions +- Diff mode now works correctly when git color.diff=always is configured +- Opening links on Windows correctly handles URLs with & query parameters +- @-mention file completion always reflects the current state of the working directory +- ESC key to cancel works correctly in tmux and other non-kitty terminals +- Click in the prompt input to reposition the text cursor +- Add /copy command to copy the last response to clipboard +- Links in alt-screen mode are rendered with underline styling for better visibility +- /delegate prompts for a target remote in multi-remote repositories and clarifies confirmation text +- GitHub MCP server stays enabled in repositories that have both Azure DevOps and GitHub remotes +- Colons in inline code render correctly inside markdown tables +- Pressing Ctrl+C on the help dialog now dismisses it cleanly +- Plugin-contributed LSP servers are now loaded, started, and shown in /lsp show +- Pressing Enter in required enum field now selects the highlighted option +- Hide noisy todo bookkeeping queries and show dependency details in timeline +- CLI no longer hangs for minutes when working in a directory with a large number of files +- Add --output-format json flag to emit JSONL in prompt mode for programmatic integrations +- Add exitPlanMode.request protocol method for SDK plan approval support +- Automatic notifications when background shell commands and agents complete +- GitHub MCP server connection status is accurately tracked and counted in the status indicator +- Press Ctrl+R to search command history with reverse incremental search (like Bash) +- Long diff lines no longer overflow and wrap in the diff view +- Add startup prompt hooks to auto-submit prompts or slash commands when a session starts +- Ctrl+K joins lines when cursor is at end of line, matching standard Emacs/terminal behavior +- Escape sequences split across input chunks no longer leak into text input +- Rename `launch_messages` config setting to `companyAnnouncements` +- Show a waiting message when the terminal is handed to an external editor +- Support enabledPlugins in config for automatic plugin installation at startup +- Improve key bindings in reverse history search: Ctrl+J to accept, Ctrl+G to cancel +- Rename repository config from `.github/copilot/config.json` to `settings.json` +- Support installing plugins from ssh:// URLs +- Session usage metrics (requests, tokens, code changes) are now persisted to events.jsonl after each session ends + +## 0.0.421 - 2026-03-03 + +- Autopilot permission dialog appears on first prompt submission instead of on mode switch +- AUTO theme now reads your terminal's ANSI color palette and uses it directly, so colors match your terminal theme +- Add structured form input for the ask_user tool using MCP Elicitations (experimental) +- Plugin commands read extraKnownMarketplaces from project-level .claude/settings.json for Claude compatibility +- Git hooks can detect Copilot CLI subprocesses via the COPILOT_CLI=1 environment variable to skip interactive prompts +- Spurious "write EIO" error entries no longer appear in the timeline during session resume or terminal state transitions +- Python-based MCP servers no longer time out due to buffered stdout +- Error when --model flag specifies an unavailable model +- MCP server availability correctly updates after signing in, switching accounts, or signing out +- Display clickable PR reference next to branch name in the status bar +- Add --plugin-dir flag to load a plugin from a local directory +- Mouse text selection is automatically copied to the Linux primary selection buffer (middle-click to paste) +- Fix VS Code shift+enter and ctrl+enter keybindings for multiline input +- Use consistent ~/.copilot/pkg path for auto-update instead of XDG_STATE_HOME +- ACP clients can configure reasoning effort via session config options +- Click links in the terminal to open them in your default browser +- Support repo-level config via .github/copilot/config.json for shared project settings like marketplaces and launch messages +- Streaming output no longer truncates when running in alt-screen mode +- Right-click paste no longer produces garbled text on Windows +- Shell command output on Windows no longer renders as "No changes detected" in the timeline +- GitHub API errors no longer appear as raw HTTP messages in the terminal when using the # reference picker +- Markdown tables render with proper column widths, word wrap, and Unicode borders that adapt to terminal width +- MCP elicitation form displays taller multi-line text input, hides tab bar for single-field forms, and fixes error flashing on field navigation + +## 0.0.420 - 2026-02-27 + +- Auto-update now also updates the binary executable, not just the JS package +- Plugin and marketplace git repos update correctly after force-pushes and tag-based installs +- 502 bad gateway errors are retried automatically and no longer crash the session with raw HTML output +- Copy hint shows cmd+c in Ghostty on macOS and right-click as an alternative for all terminals +- Type # to reference GitHub issues, pull requests and discussions + +## 0.0.419 - 2026-02-27 + +- Add /chronicle command with standup, tips, and improve subcommands powered by session history (experimental) +- Scrolling left or right no longer triggers unintended mouse button presses +- Add Ctrl+F/Ctrl+B as page down/up shortcuts for scrolling in alt-screen views +- Add --mouse/--no-mouse flag and mouse config to disable mouse mode in alt screen +- Home and End keys jump to the top and bottom of the alt-screen scroll buffer +- Add Ctrl+G keyboard shortcut for editing prompts in external editor and dismissing UI elements +- /mcp enable works for built-in servers that were auto-disabled before configuration +- CLI spinner stops and final agent response is visible after agent finishes work +- AUTO theme now uses the terminal's actual ANSI color palette for more accurate colors on any terminal theme +- MCP server env vars referenced in command, args, or cwd fields are automatically included in the server environment +- /diagnose shows a helpful message when no session has been started yet +- MCP server names now support dots, slashes, and @ characters, enabling npm-style names like @modelcontextprotocol/server and io.github/server + +## 0.0.418 - 2026-02-25 + +🎉 Copilot CLI is now [generally available](https://github.blog/changelog/2026-02-25-github-copilot-cli-is-now-generally-available) 🎉 + +- Agent protected from accidentally killing itself +- Remove --disable-parallel-tools-execution flag and parallel_tool_execution config option +- Plugin agents specified as file paths in plugin.json load correctly + +## 0.0.417 - 2026-02-25 + +- Add /research command for deep research with exportable reports +- MCP servers no longer intermittently fail to load when opening a new session +- Plugin agents and skills are available immediately after install without restarting +- Plugin skills and commands load from custom paths declared in plugin.json +- Alt+backspace correctly registers as backspace instead of delete + +## 0.0.416 - 2026-02-24 + +- Expand `--help` content with descriptions, examples, and sorted flags +- Block third-party MCP servers when the Copilot MCP policy does not allow them +- Streaming response size counter updates continuously during tool calls and reasoning, and resets between requests +- Status line automatically switches to a two-line layout on narrow terminals, keeping CWD, branch, and model info readable at any terminal width +- Undo operations now always require confirmation + +## 0.0.415 - 2026-02-23 + +- Skill files saved with a UTF-8 BOM (common on Windows editors) now load correctly instead of failing with a frontmatter parse error +- Custom agents support the `model` field to specify which model to use, and unknown fields now warn instead of blocking agent load +- Plan approval menu shows model-curated actions with a recommended option highlighted first, including autopilot+fleet for parallelizable work +- Env loading indicator no longer hangs indefinitely on MCP startup error or session resume +- Add show_file tool for presenting code and diffs to the user +- Add env loading indicator showing skills, MCPs, plugins, ... being loaded +- MCP tool results with giant single lines are truncated correctly +- /plugin marketplace add and /plugin install support local paths containing spaces +- `/mcp show` groups servers into User, Workspace, Plugins, and Built-in sections and makes all servers navigable +- Agent now knows which model is powering it when asked +- Ctrl+A/E cycle through visual lines in wrapped input; Home/End navigate within a visual line; Ctrl+Home/End jump to text boundaries + +## 0.0.414 - 2026-02-21 + +- Explore agent can now use GitHub MCP tools when available +- Show permission elevation dialog when accepting a plan with autopilot to prevent auto-denied tool errors + +## 0.0.413 - 2026-02-20 + +- Fix issue where Copilot API URL wasn't respected +- Display heading content from reasoning for gpt models +- Increase LSP request timeout from 30s to 90s to reduce timeout failures +- Fixed alt-screen timeline entries not updating when tool calls complete (particularly sub-agent calls) +- ctrl+insert can now be used to copy selected text in the alt-screen view +- Fix read_bash, write_bash, and stop_bash in-progress icon showing filled dot instead of empty circle +- Enable alt-screen mode by default when running with `--experimental` flag +- Improve code search speed in large repos +- Session info renders in the main view footer in alt-screen mode +- Skill files with YAML array syntax for allowed-tools now load correctly +- Support remote plugin sources (GitHub repos and git URLs) in marketplace.json plugin entries +- Automatically migrate users from claude-sonnet-4.5 to the current default model on startup +- Ctrl+A, Ctrl+E, and Ctrl+U navigate to logical line boundaries (newlines) instead of visual wrap boundaries +- Add configurable status line support to display dynamic session information via custom shell scripts + +## 0.0.412 - 2026-02-19 + +- Improve quick help accessibility: screen reader-friendly tab labels, reordered layout, and grouped `help commands` output +- Hide custom agents with `user-invocable: false` from the `/agents` picker +- Config file syntax errors now show a warning instead of silently crashing +- Sign Windows native prebuilds with Authenticode to prevent antivirus quarantine of native modules +- Allow `/reset-allowed-tools` to run during agent execution +- MCP servers with invalid tool schemas no longer lose all tools +- Alt-screen mode no longer consumes increasing memory over long sessions +- Add `/mcp reload` command to reload MCP configuration +- Skills support `disable-model-invocation` frontmatter field +- /fleet orchestrator validates subagent work +- Deprecate gpt-5 model +- Windows slash flags (e.g., `xcopy /E /I`) are no longer treated as file paths +- Show a warning in the timeline when skills fail to load at startup, with a prompt to run /skills for details +- Eliminate banner character flash on startup when banner is disabled +- Edit plan in terminal editor with ctrl+y +- Terminal editor is now supported on Windows +- Configure LSP server request timeouts in lsp.json +- Add `/update` command to view changelog and update instructions +- Add exit_plan_mode tool with plan approval dialog for reviewing and accepting plans +- Support ~/.copilot/instructions/\*.instructions.md files for user-level instructions across all repositories +- Add double-click word and triple-click line selection in alt-screen text selection +- Edit the prompt in your preferred terminal editor with ctrl+x ctrl+e +- Prevents spurious error messages from appearing in terminal on Windows +- Typing `?` in an AskUser prompt no longer triggers the quick help overlay +- Improve SQL tool timeline entries +- Reduce memory usage in alt-screen mode during long sessions +- /fleet mode dispatches more subagents in parallel for faster execution +- Instructions picker opens as a full-screen alt-screen view when alt-screen mode is enabled +- Skills picker opens as a full-screen alt-screen view when alt-screen mode is enabled +- Command files no longer require YAML frontmatter — plain markdown files work with name and description derived automatically +- Session picker opens instantly without a loading flash when multiple sessions exist +- Mouse event coordinate fragments no longer appear in input field +- Add cross-session memory: ask about past work, files, and PRs across sessions (experimental) +- Add `--bash-env` flag to source BASH_ENV in shell sessions +- Restore `ctrl+x /` as alternate shortcut to run commands while preserving input +- /clear preserves agent mode (autopilot, plan, or interactive) +- MCP error messages include the server name +- Text selection in timeline no longer spills into prompt area when dragging + +## 0.0.411 - 2026-02-17 + +- Improve error messaging and guidance when access denied by policy +- Custom agents use `disable-model-invocation` instead of `infer` (backward compatible) +- Add support for Claude Sonnet 4.6 model +- Memory storage shows subject, fact, and citations in timeline +- Tab completion respects the highlighted slash command selection +- Support MCP servers from Windows On-Device Registry +- Text selection now works in footer area in alt-screen mode +- Support `--alt-screen on` and `--alt-screen off` syntax +- Add `include_coauthor` config option to disable Co-authored-by trailer in git commits +- SDK APIs for plan mode, autopilot, fleet, and workspace files +- Autopilot mode and /fleet command now available to all users +- Alt-screen viewport auto-scrolls when dragging selection to edge +- Interactive shell commands complete on all versions of Windows +- Reduce memory usage in alt-screen mode during long sessions +- Session picker no longer flashes when using --resume in alt-screen mode +- Terminal bell rings once when agent finishes, not on every tool completion +- Custom instruction files are recognized regardless of casing +- PowerShell commands with syntax errors no longer hang +- Improve text selection responsiveness in --alt-screen mode +- Cursor shows when suspending and hides when resuming + +## 0.0.410 - 2026-02-14 + +- Fixed high memory usage caused by rapid logging +- Shell mode pastes raw text instead of paste tokens +- Reduce memory usage from encoding streaming chunks +- Fix alt-screen and timeline URL rendering to preserve long links without truncation +- Reduced memory growth in long sessions by evicting transient events after compaction +- Fixed high memory usage when loading large sessions +- Fixed high memory usage during shell commands with rapid output +- Add `/init suppress` to control init suggestions per repository +- Show IDE file selection indicator in the status bar when connected to an IDE +- Add repo-level settings to disable individual validation tools +- ACP server supports loading existing sessions +- Page Up/Page Down keyboard scrolling in alt-screen mode +- Add Ctrl+Z suspend/resume support on Unix platforms +- Support tilde (~) expansion in MCP server cwd configuration +- Support ctrl+n and ctrl+p as arrow key alternatives +- Exit CLI with ctrl+d on empty prompt +- Fix unknown option '--no-warnings' error +- Shift+Enter inserts newlines in terminals with kitty keyboard protocol +- MCP server list selection adjusts correctly after deletion +- Shell mode removed from Shift+Tab cycle, accessed only via `!` +- Improve /tasks dialog with consistent icons and typography +- Exit from alt-screen no longer replays full session history +- MCP server errors and loading issues surface in timeline +- Reduce input jitter with frame coalescing and smoother alt-screen animations +- Extend skill name validation to support underscores, dots, and spaces; make name and description optional in skill frontmatter with sensible fallbacks +- Add Copilot co-authored by trailer to git commits created + +## 0.0.409 - 2026-02-12 + +- /diff uses full screen in alt-screen mode +- Quick help overlay: press `?` to see grouped shortcuts and commands, navigate with arrow keys +- Theme preview appears above theme list in screen reader mode +- Add `list_copilot_spaces` tool to default GitHub MCP config +- Subagents return complete responses +- CLI now integrates with VS Code, use /ide for more information. +- Permission prompts with long diffs are scrollable in alt-screen mode +- Include default plugin marketplaces (copilot-plugins, awesome-copilot) for easier plugin discovery + +## 0.0.408 - 2026-02-12 + +- Add `/streamer-mode` to hide preview model names and quota details for streaming +- Makes shellId more flexible to not error when a number is passed +- Background tasks hint updates when detached shells are killed or removed +- Add mouse text selection in --alt-screen mode +- ! commands with large output no longer crash the CLI +- Fix duplicate/ghost lines appearing when resizing the terminal in alt-screen mode +- MCP servers respect the `cwd` working directory property +- Add substring matching to slash command autocomplete +- Change run command shortcut from ctrl+p to ctrl+s + +## 0.0.407 - 2026-02-11 + +- Improve authentication error messages in prompt mode +- Quota exceeded error links to Copilot settings with actionable guidance +- Theme picker shows live preview of diffs and markdown, adds colorblind and tritanopia theme variants +- Add `/on-air` mode to hide model names and quota details for streaming +- Show agent type and description in read_agent timeline entries +- `/tasks` shows Recent Activity for background agents +- Add experimental alternate screen buffer mode: --alt-screen +- Interactive programs that query terminal state work in shell +- Subagents fall back to session model when default model blocked by policy +- Expose session context in session.list SDK response +- Keyboard shortcut hints display consistently with bold styling throughout the CLI +- Add `tools.list` RPC to query available built-in tools +- Streaming responses automatically retry when interrupted by server errors +- Add option to approve tool permissions permanently for a location +- Add `/instructions` command to view and toggle custom instruction files +- Ctrl-b and ctrl-f cursor movement now available on all platforms +- Ctrl+d now favors deleting character after cursor, with queueing moved to ctrl+q (or ctrl+enter) +- Editing MCP servers shows existing configuration values +- `--resume` creates new sessions with provided UUID +- Add workspace-local MCP configuration via `.vscode/mcp.json` +- Skill changes from `/skills` commands take effect immediately +- /session usage string only shows available subcommands +- Slash commands which take prompts now work when immediately followed by a new-line +- Remove unintended characters from status bar +- Autopilot mode works with custom agents that specify explicit tools +- Updated node-pty to fix file descriptor leaks +- Windows slash flags (e.g., `dir /B`) are no longer treated as file paths +- Diff mode no longer flickers when navigating files +- /mcp disable and /mcp enable show clear error when server name doesn't exist +- MCP servers using Microsoft OAuth configure automatically without manual client ID setup +- Tab cycles modes forward, Shift+Tab backward; shell is now a mode +- Ctrl+P runs slash commands while preserving input (replaces Ctrl+X → /) +- Terminal title works on all TTY terminals, not just select few +- Help text notes auto-update is disabled in CI environments by default +- Terminal tab shows session title when idle +- ask_user tool asks one question at a time for clearer interaction + +## 0.0.406 - 2026-02-07 + +- Add support for Claude Opus 4.6 Fast (Preview) +- Markdown formatting displays in non-interactive mode output +- Display warning when user has no Copilot subscription +- Commands from plugins are now translated into skills +- Add `/changelog` command to view release notes +- plugin marketplace add accepts URLs as sources +- `--no-experimental` flag disables experimental features +- CLI interface renders without extra blank line +- `/mcp show` displays enabled/disabled status for MCP tools +- MCP tool responses now include structured content (images, resources) for richer UI display in VS Code + +## 0.0.405 - 2026-02-05 + +- Plugin and marketplace names support uppercase letters +- `/experimental` shows help screen listing experimental features +- Fix SQL tool disconnects +- Plugins can bundle LSP server configurations + +## 0.0.404 - 2026-02-05 + +- Add support for claude-opus-4.6 model +- `/allow-all` and `/yolo` execute immediately +- MCP servers shut down concurrently for improved performance +- Cancel --resume session picker to start a new session +- MCP server configurations default to all tools when tools parameter not specified +- Add `/tasks` command to view and manage background tasks +- Enable background agents for all users +- Simplify and clarify `/delegate` command messaging +- GITHUB_TOKEN environment variable now accessible in agent shell sessions + +## 0.0.403 - 2026-02-04 + +- Windows Task Manager displays correct application name +- Introduce security check preventing use of modules outside of application bundle +- ACP model info includes usage multiplier and enablement status +- Fix logic checking user organization membership +- Stop MCP servers before updating plugins +- Detached shell processes work on vanilla macOS installations +- Escape key consistently aborts permission dialogs regardless of selection +- Plugin skills work in prompt mode +- Config files preserve custom fields when CLI updates them +- Reasoning summaries enabled by default for supporting models +- Support comma-separated tools in custom agent frontmatter +- Skills with unknown frontmatter fields now load with warnings instead of being silently skipped + +## 0.0.402 - 2026-02-03 + +- ACP server supports agent and plan session modes +- MCP configuration applies to ACP mode +- Agent creation wizard styling improvements +- Custom agents with unknown fields load with warnings instead of errors +- Custom agents receive environment context when run as subagents +- Plugins can provide hooks for session lifecycle events +- Plugin update command works for direct plugins and handles Windows file locks +- Stop MCP servers when uninstalling plugins + +## 0.0.401 - 2026-02-03 + +- Support `.agents/skills` directory for auto-loading skills +- Improve handling of chat history when switching between model families +- MCP tools returning structuredContent now display correctly in CLI +- Support Claude-style .mcp.json format without mcpServers wrapper +- Inserting new line with shift+enter keybinding in VS Code integrated terminal +- Large multi-line pastes work correctly +- ACP terminal-auth passes correct arguments to login +- Arrow and special keys work reliably when held down +- Slash command ghost text appends correctly +- Add `copilot login` subcommand and support ACP terminal-auth +- Add agentStop and subagentStop hooks to control agent completion +- CLI handles unknown keypresses gracefully +- /diff displays accurate line numbers with dual column layout + +## 0.0.400 - 2026-01-30 + +- Add MCP server instructions support +- Timeline displays user responses to `ask_user` tool prompts with username +- Ordered lists display with numbers instead of dashes +- Add theme picker with `/theme` command and GitHub Dark/Light themes +- Fix support for pasting large content on Windows Terminal +- Better handle large results from grep and glob tools to avoid memory issues +- CLI now sends DELETE requests to remove MCP servers when shutting down +- Fix not being able to arrow key out of text inputs in select lists +- ACP server supports changing models during a session +- ACP server support permission flags: --yolo, --allow-all, etc. and permissions config +- Show progress indicator in terminal tab when thinking +- Remove bundled LSP servers (TypeScript, Python) +- Improve compatibility with remote MCP servers that use OAuth +- Markdown table headers display in bold +- Add autopilot mode for autonomous task completion (experimental) +- Add fuzzy search to model picker +- Freeform text input in list pickers works correctly +- Add `copilot plugin` subcommand for non-interactive plugin management +- CLI is more responsive in sessions with many messages +- Shell path detection more accurately handles spaces, quotes, and Windows switches +- Diff mode file list uses carousel navigation, showing up to 5 files at a time +- Holding backspace continues deleting text +- Better support for UNIX keyboard bindings (Ctrl+A/E/W/U/K, Alt+arrows) and multiline content in various text inputs +- Add `launch_messages` config for startup announcements +- The Code Review tool handles large changesets by ignoring build artifacts and limiting to 100 files + ## 0.0.399 - 2026-01-29 - Compaction messages show clearer command hints to view checkpoint summaries diff --git a/install.sh b/install.sh index fb3d3d49..61caf872 100755 --- a/install.sh +++ b/install.sh @@ -34,6 +34,16 @@ case "$(uname -m)" in *) echo "Error: Unsupported architecture $(uname -m)" >&2 ; exit 1 ;; esac +# Set up authentication for GitHub requests if GITHUB_TOKEN is available +CURL_AUTH=() +WGET_AUTH=() +GIT_REMOTE="https://github.com/github/copilot-cli" +if [ -n "$GITHUB_TOKEN" ]; then + CURL_AUTH=(-H "Authorization: token $GITHUB_TOKEN") + WGET_AUTH=(--header="Authorization: token $GITHUB_TOKEN") + GIT_REMOTE="https://x-access-token:${GITHUB_TOKEN}@github.com/github/copilot-cli" +fi + # Determine download URL based on VERSION if [ "${VERSION}" = "latest" ] || [ -z "$VERSION" ]; then DOWNLOAD_URL="https://github.com/github/copilot-cli/releases/latest/download/copilot-${PLATFORM}-${ARCH}.tar.gz" @@ -44,7 +54,7 @@ elif [ "${VERSION}" = "prerelease" ]; then echo "Error: git is required to install prerelease versions" >&2 exit 1 fi - VERSION="$(git ls-remote --tags https://github.com/github/copilot-cli | tail -1 | awk -F/ '{print $NF}')" + VERSION="$(git ls-remote --tags "$GIT_REMOTE" | tail -1 | awk -F/ '{print $NF}')" if [ -z "$VERSION" ]; then echo "Error: Could not determine prerelease version" >&2 exit 1 @@ -67,9 +77,9 @@ echo "Downloading from: $DOWNLOAD_URL" TMP_DIR="$(mktemp -d)" TMP_TARBALL="$TMP_DIR/copilot-${PLATFORM}-${ARCH}.tar.gz" if command -v curl >/dev/null 2>&1; then - curl -fsSL "$DOWNLOAD_URL" -o "$TMP_TARBALL" + curl -fsSL "${CURL_AUTH[@]}" "$DOWNLOAD_URL" -o "$TMP_TARBALL" elif command -v wget >/dev/null 2>&1; then - wget -qO "$TMP_TARBALL" "$DOWNLOAD_URL" + wget -qO "$TMP_TARBALL" "${WGET_AUTH[@]}" "$DOWNLOAD_URL" else echo "Error: Neither curl nor wget found. Please install one of them." rm -rf "$TMP_DIR" @@ -80,9 +90,9 @@ fi TMP_CHECKSUMS="$TMP_DIR/SHA256SUMS.txt" CHECKSUMS_AVAILABLE=false if command -v curl >/dev/null 2>&1; then - curl -fsSL "$CHECKSUMS_URL" -o "$TMP_CHECKSUMS" 2>/dev/null && CHECKSUMS_AVAILABLE=true + curl -fsSL "${CURL_AUTH[@]}" "$CHECKSUMS_URL" -o "$TMP_CHECKSUMS" 2>/dev/null && CHECKSUMS_AVAILABLE=true elif command -v wget >/dev/null 2>&1; then - wget -qO "$TMP_CHECKSUMS" "$CHECKSUMS_URL" 2>/dev/null && CHECKSUMS_AVAILABLE=true + wget -qO "$TMP_CHECKSUMS" "${WGET_AUTH[@]}" "$CHECKSUMS_URL" 2>/dev/null && CHECKSUMS_AVAILABLE=true fi if [ "$CHECKSUMS_AVAILABLE" = true ]; then @@ -141,11 +151,19 @@ if ! command -v copilot >/dev/null 2>&1; then echo "" echo "Notice: $INSTALL_DIR is not in your PATH" - # Detect shell rc file + # Detect shell profile file for PATH case "$(basename "${SHELL:-/bin/sh}")" in - zsh) RC_FILE="$HOME/.zshrc" ;; - bash) RC_FILE="$HOME/.bashrc" ;; - *) RC_FILE="$HOME/.profile" ;; + zsh) RC_FILE="${ZDOTDIR:-$HOME}/.zprofile" ;; + bash) + if [ -f "$HOME/.bash_profile" ]; then + RC_FILE="$HOME/.bash_profile" + elif [ -f "$HOME/.bash_login" ]; then + RC_FILE="$HOME/.bash_login" + else + RC_FILE="$HOME/.profile" + fi + ;; + *) RC_FILE="$HOME/.profile" ;; esac # Prompt user to add to shell rc file (only if interactive) @@ -156,6 +174,7 @@ if ! command -v copilot >/dev/null 2>&1; then if [ "$REPLY" = "y" ] || [ "$REPLY" = "Y" ]; then echo "export PATH=\"$INSTALL_DIR:\$PATH\"" >> "$RC_FILE" echo "✓ Added PATH export to $RC_FILE" + echo " Restart your shell or run: source $RC_FILE" fi fi else @@ -163,7 +182,11 @@ if ! command -v copilot >/dev/null 2>&1; then echo "To add $INSTALL_DIR to your PATH permanently, add this to $RC_FILE:" echo " export PATH=\"$INSTALL_DIR:\$PATH\"" fi -fi -echo "" -echo "Installation complete! Run 'copilot help' to get started." + echo "" + echo "Installation complete! To get started, run:" + echo " export PATH=\"$INSTALL_DIR:\$PATH\" && copilot help" +else + echo "" + echo "Installation complete! Run 'copilot help' to get started." +fi