diff --git a/.github/workflows/runner.yml b/.github/workflows/runner.yml new file mode 100644 index 00000000..887256e1 --- /dev/null +++ b/.github/workflows/runner.yml @@ -0,0 +1,138 @@ + - name: Deploy GitHub Runner to AWS (EC2) + # You may pin to the exact commit or the version. + # uses: bitovi/github-actions-deploy-github-runner-to-ec2@6e35bdc2c305bec7608655b84227b88ac75c5961 + uses: bitovi/github-actions-deploy-github-runner-to-ec2@v0 + with: + # Specifies if this action should checkout the code + checkout: # optional, default is true + # Will run only the generation phase of BitOps, where the Terraform and Ansible code is built. + bitops_code_only: # optional + # Store BitOps code as a GitHub artifact + bitops_code_store: # optional + # Repo URL for the runner to listen to + repo_url: + # Repo access token + repo_access_token: + # AWS access key ID + aws_access_key_id: # optional + # AWS secret access key + aws_secret_access_key: # optional + # AWS session token + aws_session_token: # optional + # AWS default region + aws_default_region: # optional, default is us-east-1 + # Set to override the AWS resource identifier for the deployment. Defaults to `${org}-{repo}-{branch}`. Use with destroy to destroy specific resources. + aws_resource_identifier: # optional + # A JSON object of additional tags that will be included on created resources. Example: `{"key1": "value1", "key2": "value2"}` + aws_additional_tags: # optional + # Set to "true" to Destroy the stack through Terraform. + tf_stack_destroy: # optional + # Change this to be anything you want to. Carefull to be consistent here. A missing file could trigger recreation, or stepping over destruction of non-defined objects. + tf_state_file_name: # optional + # Append a string to the tf-state-file. Setting this to `unique` will generate `tf-state-aws-unique`. Can co-exist with the tf_state_file_name variable. + tf_state_file_name_append: # optional + # AWS S3 bucket to use for Terraform state. Defaults to `${org}-${repo}-{branch}-tf-state` + tf_state_bucket: # optional + # Force purge and deletion of S3 bucket defined. Any file contained there will be destroyed. `tf_stack_destroy` must also be `true` + tf_state_bucket_destroy: # optional + # Secret name to pull env variables from AWS Secret Manager, could be a comma separated list, read in order. Expected JSON content. + env_aws_secret: # optional + # File containing environment variables to be used with the app + env_repo: # optional + # `.env` file to be used with the app from Github secrets + env_ghs: # optional + # `.env` file to be used with the app from Github variables + env_ghv: # optional + # Define if an EC2 instance should be created + aws_ec2_instance_create: # optional + # AWS AMI Filter string. Will be used to lookup for lates image based on the string. Defaults to `ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-*`. + aws_ec2_ami_filter: # optional + # Owner of AWS AMI image. This ensures the provider is the one we are looking for. Defaults to `099720109477`, Canonical (Ubuntu). + aws_ec2_ami_owner: # optional + # AWS AMI ID. Will default to lookup for latest image of the `aws_ec2_ami_filter` string. This will override `aws_ec2_ami_filter` lookup. + aws_ec2_ami_id: # optional + # Set this to true if you want to recreate the EC2 instance if there is a newer version of the AMI. + aws_ec2_ami_update: # optional + # The AWS IAM instance profile to use for the EC2 instance + aws_ec2_iam_instance_profile: # optional + # The AWS Instance type + aws_ec2_instance_type: # optional + # Define the volume size (in GiB) for the root volume on the AWS Instance. + aws_ec2_instance_root_vol_size: # optional + # Set this to true to avoid deletion of root volume on termination. Defaults to false. + aws_ec2_instance_root_vol_preserve: # optional + # The name of the EC2 security group + aws_ec2_security_group_name: # optional + # Generates and manages a secret manager entry that contains the public and private keys created for the ec2 instance. + aws_ec2_create_keypair_sm: # optional + # Add a public IP to the instance or not. (Not an Elastic IP) + aws_ec2_instance_public_ip: # optional + # List of ports to be enabled as an ingress rule in the EC2 SG, in a [xx,yy] format - Not the ELB + aws_ec2_port_list: # optional + # Relative path in the repo for a user provided script to be executed with Terraform EC2 Instance creation. + aws_ec2_user_data_file: # optional, default is no-file-provided + # If user_data file changes, instance will stop and start. Hence public IP will change. Defaults to true. + aws_ec2_user_data_replace_on_change: # optional + # A JSON object of additional tags that will be included on created resources. Example: `{"key1": "value1", "key2": "value2"}` + aws_ec2_additional_tags: # optional + # Define if a VPC should be created + aws_vpc_create: # optional + # Set a specific name for the VPC + aws_vpc_name: # optional + # Define Base CIDR block which is divided into subnet CIDR blocks. Defaults to 10.0.0.0/16. + aws_vpc_cidr_block: # optional + # Comma separated list of public subnets. Defaults to 10.10.110.0/24 + aws_vpc_public_subnets: # optional + # Comma separated list of private subnets. If none, none will be created. + aws_vpc_private_subnets: # optional + # Comma separated list of availability zones. Defaults to `aws_default_region. + aws_vpc_availability_zones: # optional + # AWS VPC ID. Accepts `vpc-###` values. + aws_vpc_id: # optional + # Specify a Subnet to be used with the instance. If none provided, will pick one. + aws_vpc_subnet_id: # optional + # Enables NAT gateway + aws_vpc_enable_nat_gateway: # optional + # Creates only one NAT gateway + aws_vpc_single_nat_gateway: # optional + # Comma separated list of IP IDS to reuse in the NAT gateways + aws_vpc_external_nat_ip_ids: # optional + # A JSON object of additional tags that will be included on created resources. Example: `{"key1": "value1", "key2": "value2"}` + aws_vpc_additional_tags: # optional + # + aws_secret_env: # optional + # + repo_env: # optional + # + dot_env: # optional + # + ghv_env: # optional + # + stack_destroy: # optional + # + additional_tags: # optional + # + ec2_instance_profile: # optional + # + ec2_instance_type: # optional + # + ec2_ami_id: # optional + # + ec2_ami_update: # optional + # + ec2_volume_size: # optional + # + ec2_root_preserve: # optional + # + ec2_security_group_name: # optional + # + ec2_create_keypair_sm: # optional + # + ec2_instance_public_ip: # optional + # + ec2_user_data_file: # optional, default is no-file-provided + # + ec2_user_data_replace_on_change: # optional + # + ec2_additional_tags: # optional + diff --git a/.github/workflows/src.json b/.github/workflows/src.json new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/.github/workflows/src.json @@ -0,0 +1 @@ + diff --git a/Funding.yml b/Funding.yml new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/Funding.yml @@ -0,0 +1 @@ + diff --git a/Revise.prompt.yml b/Revise.prompt.yml index e1b3c636..4fb149a8 100644 --- a/Revise.prompt.yml +++ b/Revise.prompt.yml @@ -1,2 +1,8 @@ -messages: [] -model: microsoft/phi-4-multimodal-instruct +messages: + - role: system + content: >- + This hero come from nowhere he fired at the aliens and closed the + wormhole. + - role: user + content: My hero my star +model: openai/gpt-4.1 diff --git a/changelog.md b/changelog.md index e79d35f7..c1a06a00 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,724 @@ +## 1.0.44 - 2026-05-08 + +- Path completion in /add-dir no longer flickers or gets intercepted by @ and # pickers +- Slash commands can now appear mid-input, and multiple skills can be invoked in a single message +- userPromptSubmitted hooks can now handle requests directly, bypassing the LLM and returning a response without making a model call +- Faster /user list and /user switch for multi-account users +- Add optional `prerelease` argument to `copilot update` and `/update` to fetch the latest prerelease build +- Shell commands via ! prefix work correctly with all shell configurations +- Shell aliases and rc file settings now work in ! commands +- Quota display correctly shows remaining usage for Free users instead of always showing 100% used +- Tool permissions granted in autopilot mode are preserved after /clear +- Effort level applies correctly when switching models via the /model picker +- Pressing Ctrl+C while a permission prompt is pending no longer causes the CLI to hang +- Project info remains visible in slash command picker when no results match +- Invalid URL entries in settings.json no longer crash CLI startup and are skipped with a warning +- Timeline shows the resolved model for rubber-duck sub-agents (e.g. Rubber-duck(claude-opus-4.7)) + +## 1.0.43 - 2026-05-06 + +- Add username toggle to /statusline picker to display the active account in the footer +- Auto mode uses server-side model routing for improved real-time model selection +- Resume prompt shows correct session name when multiple sessions are active +- Protect against RCE from malicious bare repositories nested inside a project +- MCP server child processes (e.g. started via npx or uvx) are now fully terminated when a session ends +- Show download progress when running the update command + +## 1.0.42 - 2026-05-06 + +- MCP server failure warning now suggests a directly runnable `/mcp show` command when the server name contains whitespace +- MCP server failure warnings include stderr output to help diagnose connection errors +- Add -C flag to change working directory before starting, similar to git -C +- Exit message resume command shows session ID instead of auto-generated name when session has not been renamed +- Remote session export now supports non-GitHub repositories and repo-less directories +- Resuming a session no longer shows a false "session in use" warning after choosing "Go back" +- Enter key no longer gets permanently stuck after cancelling a request +- Suppress the exit summary when the session has no user messages and no saved session to resume +- CLI updates on Windows no longer fail with ENOENT when a transient EPERM occurs during package extraction +- Add rubber-duck agent for GPT sessions, powered by Claude (available in /experimental) + +## 1.0.41 - 2026-05-05 + +- CLI starts faster by rendering the UI immediately while authentication resolves in the background +- Shell completions (bash, zsh, fish) are automatically installed on first run and updated after `copilot update` +- Tab-completing slash commands that accept arguments now adds a trailing space automatically +- Package extraction no longer crashes on Windows when antivirus or filesystem locks cause transient EPERM errors +- Remote session connection errors show your logged-in account and tailored remediation steps +- Markdown formatting renders in ask user prompt questions +- Add experimental MCP Tasks support: MCP tools with `taskSupport: "required"` run as non-blocking background agents trackable via `list_agents` and `read_agent` (available when experimental mode is enabled, e.g. via `/experimental on` or the `--experimental` flag) +- Extensions now load in prompt mode (-p). User extensions load by default; project extensions alnd management tools require GITHUB_COPILOT_PROMPT_MODE_EXTENSIONS=true. +- Assistant responses no longer contain spurious system notification XML tags +- Large output guidance correctly references the configured grep tool name +- Adding a plugin marketplace using a git SSH URL (e.g. git@github.com:owner/repo) now works correctly +- Slash command picker searches command descriptions and underlines matched characters +- Memory tool confirmation prompt now shows the scope (repository or user) when requesting permission to store a memory +- SQL todo timeline entries display more accurately for INSERT OR IGNORE/REPLACE and blocked status updates +- Streaming text and shimmer animations stay smooth on slow or busy hosts +- Add --attachment flag in non-interactive (-p/--prompt) mode to attach files (images or native documents) to the initial prompt +- @-mention completion works for ./ paths, no longer adds trailing space on directories, and shows project files before workspace roots +- Improve stability on Windows by working around a V8 crash in Node 24.x +- Session files containing Unicode line separator characters load correctly +- Reasoning effort picker hint text displays "Esc to cancel" with correct spacing +- Improve reliability of file edits by better recovering from fuzzy or misaligned edit blocks + +## 1.0.40 - 2026-05-01 + +- PR branch decoration displays correctly in the footer regardless of model name length +- /clear and /new reset the active custom agent selection +- Assistant responses stream with smoother text output +- `copilot plugin list` shows the correct version after running `copilot plugin update` +- Add support for `client_credentials` OAuth grant type for MCP servers, enabling fully headless authentication without a browser +- Subagents correctly evaluate tool search support for their own model instead of inheriting the parent session's settings +- Switching sessions with /new or /resume no longer carries over pending messages to the new session +- CLI no longer hangs at 100% CPU when sending a large file attachment +- Resume session picker no longer shows duplicate entries for the same Mission Control-backed session +- Session resume selector displays summaries on a single line, truncated to fit the column width +- Print "Exiting…" to stderr immediately on Ctrl+C during prompt mode so shutdown progress is visible +- /research uses an orchestrator/subagent model for more thorough and reliable deep research results +- Autopilot mode now limits continuation messages to 5 by default (configurable with --max-autopilot-continues) +- Automatically clean up old CLI package versions from disk during auto-update +- Remote session statusline shows the remote working directory and branch instead of local context +- /update no longer re-submits the original -i prompt after restarting +- Detect Azure DevOps repositories and auto-disable the GitHub MCP server +- Session history, file tracking, and the /chronicle command are now available to all users +- Skills are available as slash commands in ACP clients, matching the CLI experience +- Resuming a session no longer falsely reports it as in use after a previous CLI process exited unexpectedly +- --config-dir now propagates correctly to plugin subcommands; --config-dir is deprecated in favor of COPILOT_HOME +- Mouse selection works while the /ask response dialog is open, so its content can be highlighted and copied +- Improve CLI startup speed by loading custom CA certificates asynchronously +- Remote control link shows the full URL in the timeline instead of 'Open in browser' +- ACP clients (e.g. Zed) now display the agent's live plan as it works through multi-step tasks +- Add toggle for custom statusLine.command visibility in the statusline picker +- ACP clients can now list and switch custom agents via the agent config option +- MCP OAuth tokens cache correctly when multiple servers share the same URL but use different static OAuth client IDs +- MCP tool names with dots or other invalid characters are now sanitized correctly +- Ctrl+C and double-Esc remove pending queued messages one at a time instead of all at once +- Slash command suggestions rank prefix matches above fuzzy matches +- Prompt mode (-p) now gates repo hooks and workspace MCP behind opt-in env vars (GITHUB_COPILOT_PROMPT_MODE_REPO_HOOKS and GITHUB_COPILOT_PROMPT_MODE_WORKSPACE_MCP) for secure-by-default behavior + +## 1.0.39 - 2026-04-28 + +- Allow ACP clients to toggle allow-all permission mode via session configuration +- Add /compact, /context, /usage, and /env slash commands for ACP sessions +- Press ctrl+x → b to move the current running task or shell command to the background +- Transient pipe errors on child process stdio streams no longer cause crashes or trigger false crash reports +- `/remote` status output now shows actionable hints for each connection state +- Improve --resume session picker with better tab layout, status display, and progressive loading +- Slash command argument picker opens immediately at exact command boundaries without requiring a trailing space + +## 1.0.37 - 2026-04-27 + +- Location-based permission persistence is now enabled by default, so approvals carry over across sessions for the same directory +- Add `copilot completion ` subcommand to generate static shell completion scripts for subcommands, flags, and known choice values +- Press `s` in the session picker to cycle sort order: relevance, last used, created, or name +- ACP model config options now include description and metadata for clients using the configOptions API +- Model and effort change notification no longer appears when re-selecting the same model or effort level +- Clipboard write no longer leaks X11 handles on Linux +- Pending message indicator displays correctly alongside prompt frames +- Fix detached HEAD detection always returning false after switch to git branch --show-current +- Skill picker list stays fully visible when skills have errors or warnings +- /ask responses now render markdown, including tables and formatted links + +## 1.0.36 - 2026-04-24 + +- Subcommand picker shows a selection indicator (❯) next to the highlighted item +- Clearer error message with a direct link when multiple Copilot licenses are detected +- Fixed an issue where preToolUse.matcher was ignored. After upgrade, hooks with matcher run only for tool names that fully match the regex. +- `/keep-alive` is available without experimental mode to prevent system sleep while Copilot CLI is active +- /remote command shows current status and supports /remote on and /remote off to toggle remote control +- Disabled skills no longer appear in the slash command list +- Add a 'changes' statusline toggle to show added/removed line counts for the session +- Custom instruction files in .gitignored directories (e.g., .github/instructions/) now load correctly +- Require double Esc to cancel in-flight work, preventing accidental interruptions +- Saving debug logs or feedback bundles no longer overwrites existing archive files +- Custom agents, skills, and commands from ~/.claude/ are no longer loaded by the Copilot CLI +- Claude Opus 4.6 now uses medium reasoning effort by default + +## 1.0.35 - 2026-04-23 + +- Slash commands support tab-completion for arguments and subcommands +- Shell escape commands (!) now use your $SHELL when set, instead of always invoking /bin/sh +- Permission prompts appear correctly in remote sessions for the CLI TUI +- Session selector shows branch names, idle/in-use status, and has improved search with cursor support +- Model change notification shows both the previous and new model name +- /update and /version commands now honor your configured update channel +- Session sync prompt uses clearer labels and explains GitHub.com cross-device sync +- Support COPILOT_GH_HOST environment variable for GitHub hostname, taking precedence over GH_HOST +- Press Ctrl+Y (in addition to Tab) to accept the highlighted option in completion popups (@-mentions, path completions, slash commands) +- Add /session delete, delete , and delete-all subcommands, and x-to-delete in the session picker +- MCP server names with spaces and special characters are now supported +- Skill slash commands (e.g. /skill-name) passed as the initial prompt via -i are recognized correctly on startup +- Shell completion notifications are not duplicated when read_bash already returned the result +- --continue prefers resuming sessions from the current working directory instead of the most recently touched session +- Status line script now includes context window fields that match the model badge and /context output +- User settings are now stored in ~/.copilot/settings.json, separate from internal state in config.json +- Name sessions with --name and resume them by name with --resume= +- Configure Copilot agent now has shell access on Windows +- Show a helpful error message with install instructions when clipboard utilities (wl-clipboard or xclip) are missing on Linux +- LSP server entries in lsp.json support configurable spawn, initialization, and warmup timeouts +- Context window indicator in the statusline is now hidden by default +- Move MCP OAuth into the shared runtime flow and clear associated OAuth state when removing an MCP server. +- Added a GitHub-style contribution graph to /usage that adapts to terminal color mode and falls back to distinct glyphs in no-color terminals +- Self-correcting custom tool calls in agentic loop +- Cursor movement, deletion, and rendering work correctly for emoji and multi-codepoint characters in the text input +- Tool availability detection works correctly on Windows +- Session token expiry during a turn is handled automatically without requiring you to resend your message +- Initial tab and arrow key navigation in /cwd and /add-dir path picker selects the correct item +- Transient I/O errors no longer appear as red error entries in the timeline when an IDE or extension disconnects +- Custom agents and skills in ~/.claude/ are no longer incorrectly loaded as Copilot project config +- Login command restores interactive input correctly after authentication +- Improve rendering performance when displaying large amounts of text in the timeline +- Sync task calls block until completion under MULTI_TURN_AGENTS instead of auto-promoting to background after 60s; sync no longer returns a reusable agent_id, use mode: "background" for follow-ups +- Tab navigation supports Home/End keys to jump to first and last tab +- Plugins take effect immediately after install without requiring a restart +- Add continueOnAutoMode config option to automatically switch to auto model on rate limit instead of pausing +- Auto mode no longer fails with an error when switching to a model that doesn't support the configured reasoning effort +- Pattern-specific instruction files (.github/instructions/\*.instructions.md) no longer include their full body in the system prompt on every session +- Extension shutdown errors no longer appear as error-level log noise on every session exit +- LSP refactoring tools now register correctly on the first turn when LSP configs are present +- Add HTTP hook support, allowing hooks to POST JSON payloads to a configured URL instead of running a local command +- Hide subagent thinking from the timeline +- Custom agent name is now visible in the statusline footer and can be toggled via /statusline +- Pressing Escape on startup dialogs no longer causes race conditions +- grep and glob tools now accept multiple search paths + +## 1.0.34 - 2026-04-20 + +- Rate limit error message now says "session rate limit" instead of "global rate limit" + +## 1.0.33 - 2026-04-20 + +- Resuming a remote session with --resume or --continue automatically inherits the --remote flag without needing to re-specify it +- Add /bug, /continue, /release-notes, /export, and /reset as command aliases +- Slash command picker suggests similar commands when you type an unrecognized or misspelled slash command +- Add /upgrade as an alias for the /update command +- Grep no longer times out on large repositories when content exclusion policies are enabled +- Non-interactive mode waits for all background agents to finish before exiting +- Skill picker correctly truncates CJK/Japanese descriptions and long skill names without wrapping +- Slash command picker selects the highlighted command when pressing Enter +- ctrl+t to toggle reasoning display is now listed in the /help and ? overlay +- Sub-agents in auto mode now inherit the session model +- Show usage limit warnings at 50% and 95% capacity, giving earlier notice before hitting rate limits +- Use j/k for vim-style navigation and x to kill tasks in the tasks dialog + +## 1.0.32 - 2026-04-17 + +- Allow short session ID prefixes (7+ hex chars) with --resume and /resume instead of the full ID +- /feedback saves the bundle to TEMP when the working directory is not writable +- Select `auto` as your model to let Copilot automatically pick the best available model for each session +- Add --print-debug-info flag to display version, terminal capabilities, and environment variables +- Show warnings when approaching 75% and 90% of your weekly usage limit +- Attach supported document files to prompts for the agent to read and reason about +- Add --connect flag to directly connect to a remote session by ID +- copilot login --host now correctly authenticates with GitHub Enterprise Cloud (GHE) instances +- Current date and time in agent context now includes local timezone offset +- Terminal progress indicator stays visible while the agent is thinking +- Status line no longer shows stray Unicode glyphs in terminals like Neovim after /clear +- Rewind works correctly after using /cd to change directories +- Multiline input is preserved when using /plan and plan mode +- Backspace correctly exits shell mode only when the input is empty +- Mouse wheel scrolling works correctly in the /ask dialog +- Rate-limited sessions now pause queued messages and automatically retry instead of dropping them +- Tables render with correct column widths, emoji support, and stable borders during terminal resize +- Rate limit error messages now show specific context based on the type of limit reached +- Session idle timeout is now configurable via --session-idle-timeout; disabled by default +- Skills that exceed the token limit are still discoverable and invocable by name + +## 1.0.31 - 2026-04-16 + +- Prompt frame no longer causes rendering issues on Windows and Ubuntu terminals + +## 1.0.30 - 2026-04-16 + +- Feedback form links to the correct GitHub repository +- /undo shows an explanatory message when rewind is unavailable (e.g., not in a git repository or no commits yet) +- Plugin skills and commands are correctly discovered when using skills.discover +- Add /statusline command (with /footer alias) to customize which items appear in the status bar (directory, branch, effort, context window, quota) +- Remove --list-env flag that logged loaded plugins, agents, skills, and MCP servers in prompt mode +- Image paste from clipboard works again after regression in bracketed paste handling +- Both Ctrl+V and Meta+V trigger image paste on all platforms + +## 1.0.29 - 2026-04-16 + +- Remote MCP server config now allows omitting the type field, defaulting to http +- Blinking cursor maintains stable width so text does not shift during blink +- Add --list-env flag to log loaded plugins, agents, skills, and MCP servers when running in prompt mode, helping verify environment configuration in CI pipelines +- Add support for Claude Opus 4.7 +- Shell commands and MCP servers now receive COPILOT_AGENT_SESSION_ID as an environment variable +- Agent correctly identifies repository owner from git remote URL rather than local username +- Terminal state correctly restored after a crash exit on Windows + +## 1.0.28 - 2026-04-16 + +- Permission prompts show correct repository path when working inside git submodules +- Background agent completion notifications are not sent redundantly when read_agent is already waiting for the result +- MCP migration hint now links to documentation with platform-specific instructions instead of embedding shell commands inline +- Azure resource IDs no longer trigger false path security warnings when running az CLI commands +- Rewind picker navigation simplified to arrow keys and Enter, removing the confusing 1-9 quick-select shortcut +- A clear error message is displayed when the configured editor cannot be launched +- Mascot plays a short blink sequence on startup instead of blinking continuously +- Connect to CLI remote control sessions from the —resume picker +- Support COPILOT_DISABLE_TERMINAL_TITLE environment variable to opt out of terminal title updates + +## 1.0.27 - 2026-04-15 + +- Show a clear message when Copilot Pro trial is paused instead of a generic policy error +- Status bar shows @files and #issues hints while typing, and /help hint when the slash command picker is open +- Clipboard copy on WSL no longer leaks an invisible BOM character into pasted text +- Add /ask command to ask a quick question without affecting conversation history +- Add `copilot plugin marketplace update` command to refresh plugin catalogs + +## 1.0.26 - 2026-04-14 + +- Escape key reliably dismisses ask_user and elicitation prompts without getting stuck +- Spurious directory access prompts no longer appear for arguments inside find -exec blocks +- Agent sessions no longer fail with unrecoverable errors when context compaction splits a tool call across a checkpoint boundary +- Single-segment slash-prefixed tokens (e.g. /help, /start) no longer treated as file paths in bash commands +- Anthropic BYOM correctly includes image data when viewing image files +- Permission prompt notification hook only fires when a prompt is actually shown to the user +- ctrl+o now expands all timeline entries, same as ctrl+e +- Remote tab correctly shows Copilot coding agent tasks and supports steering without requiring a pull request +- Rename "steering" to "remote control" in --remote flag and /remote command help text +- Avoid sending duplicate custom instruction files (e.g. copilot-instructions.md and CLAUDE.md with identical content) to reduce wasted tokens per turn +- Plugin hooks receive PLUGIN_ROOT, COPILOT_PLUGIN_ROOT, and CLAUDE_PLUGIN_ROOT env vars with the plugin's installation directory +- ACP server binds to localhost only, preventing unintended network exposure +- Installing a plugin named 'git' from a marketplace no longer fails due to incorrect URL parsing +- Enterprise login accepts hostnames without a URL scheme (e.g. 'github.example.com') +- LSP language servers correctly initialize on Windows using proper file URI paths +- Relative paths in file edit operations resolve against the session working directory +- Session scope selector in sync prompt is now more prominent and keyboard-navigable with left/right arrow keys +- Instruction files with specific applyTo patterns are consolidated into a table instead of inlining full content, reducing context window usage + +## 1.0.25 - 2026-04-13 + +- Install MCP servers from the registry with guided configuration directly in the CLI +- Esc key works correctly after a failed /resume session lookup +- Persist resolved model in session history and defer model changes during active turns +- ACP clients can now provide MCP servers (stdio, HTTP, SSE) when starting or loading sessions +- The --config-dir flag is now respected when selecting the active model +- Add /env command to show loaded environment details (instructions, MCP servers, skills, agents, plugins) +- /share appends the correct file extension (.md or .html) when a custom output path is given without one +- /add-dir accepts relative paths (e.g. ./src, ../sibling) and resolves them to absolute paths +- Custom instruction files preserve special characters like & and +- Skill picker list scrolls correctly when the list exceeds the terminal height +- MCP client reports the correct CLI version during server handshake +- /logout shows a warning when signed in via gh CLI, PAT, API key, or environment variable, since /logout only manages OAuth sessions +- Alt+D now deletes the word in front of the cursor in text input +- /share html shows a file:// URL and supports Ctrl+X O to open the file directly +- Skill instructions persist correctly across conversation turns +- You can now remote control your CLI sessions using --remote or /remote +- MCP remote server connections automatically retry on transient network failures +- Share Research TOC sidebar anchor links navigate correctly within the page + +## 1.0.24 - 2026-04-10 + +- preToolUse hooks now respect modifiedArgs/updatedInput, and additionalContext fields +- Custom agent model field now accepts display names and vendor suffixes from VS Code (e.g., "Claude Sonnet 4.5", "GPT-5.4 (copilot)") +- Terminal state (alt screen, cursor, raw mode) is restored correctly after CLI crashes like OOM or segfaults +- The --remote flag is respected when the session sync prompt appears on first run in a GitHub repo +- Redesign exit screen with Copilot mascot and cleaner usage summary layout + +## 1.0.23 - 2026-04-10 + +- Add --mode, --autopilot, and --plan flags to start the CLI directly in a specific agent mode +- Agent no longer hangs on the first turn when the memory backend is unavailable +- Bazel/Buck build target labels (e.g. //package:target) no longer misidentified as file paths +- Ctrl+L clears the terminal screen without clearing the conversation session +- Slash command picker shows full skill descriptions and a refined scrollbar +- /diff, /agent, /feedback, /ide, and /tuikit work while the agent is running +- Display reasoning token usage in the per-model token breakdown when nonzero +- Remote tab correctly shows Copilot coding agent tasks and supports steering via the Tasks API +- Shell output with BEL characters no longer causes repeated terminal beeping +- Migration notice for .vscode/mcp.json now includes a jq command to migrate your config to .mcp.json + +## 1.0.22 - 2026-04-09 + +- MCP tools with non-standard JSON schemas are now sanitized for compatibility with all model providers +- Better handling of large images from MCP and extension tools +- Improved rendering performance with a new simplified inline renderer +- Show a clear message to contact your organization administrator when remote sessions are blocked by policy +- Sub-agent activity no longer shows duplicated tool names (e.g. "view view the file...") +- Permission checks and other hooks now work correctly when using Anthropic models via BYOM/BYOK configuration +- Slash command picker appears above the text input for a more stable layout +- Custom agents can now declare a `skills` field to eagerly load skill content into agent context at startup +- Plugins can now display a post-install message with setup instructions after installation +- Remove .vscode/mcp.json and .devcontainer/devcontainer.json as MCP server config sources; CLI now only reads .mcp.json. A migration hint appears when .vscode/mcp.json is detected without .mcp.json. +- Plugins remain enabled across sessions and auto-install on startup based on user config +- Add sub-agent depth and concurrency limits to prevent runaway agent spawning +- Warn when resuming a session that is already in use by another CLI or application +- CLI no longer crashes on systems affected by a V8 engine bug in grapheme segmentation +- sessionStart and sessionEnd hooks fire once per session in interactive mode instead of once per prompt +- Plugin agents respect the model specified in their frontmatter + +## 1.0.21 - 2026-04-07 + +- Add `copilot mcp` command for managing MCP servers +- Spinner no longer appears stuck when a long-running async shell command is active +- Enterprise GitHub URL input in the login flow now accepts keyboard input and submits on Enter +- Slash command picker no longer flickers or shifts the input while filtering +- Timeline no longer goes blank when content shrinks (e.g., after cancelling or tool completion) +- Plan mode timeline display shows user text without a redundant "Plan" prefix +- Reduce memory usage by automatically shutting down shell sessions that are no longer needed +- Hooks configured with PascalCase event names now receive VS Code-compatible snake_case payloads with hook_event_name, session_id, and ISO 8601 timestamps + +## 1.0.20 - 2026-04-07 + +- Add `copilot help monitoring` topic with OpenTelemetry configuration details and examples +- Spinner stays active until background agents and shell commands finish, and user input remains available throughout +- Azure OpenAI BYOK defaults to the GA versionless v1 route when no API version is configured +- Reduce UI sluggishness during live response streaming +- /yolo and --yolo now behave identically and /yolo state persists across /restart + +## 1.0.19 - 2026-04-06 + +- /mcp enable and /mcp disable now persist across sessions +- OpenTelemetry monitoring: subagent spans now use INTERNAL span kind, and chat spans include a `github.copilot.time_to_first_chunk` attribute (streaming only) +- Plugin hook scripts with missing execute permissions now run correctly on macOS +- Custom agent is properly restored when resuming a session where the agent display name differs from its filename +- Skip IDE auto-connect when session is already in use by another client +- Slash command timeline entries now include the command name (e.g., "Review", "Plan") for better context + +## 1.0.18 - 2026-04-04 + +- New Critic agent automatically reviews plans and complex implementations using a complementary model to catch errors early (available in experimental mode for Claude models) +- Session resume picker correctly groups sessions by branch and repository on first use +- preToolUse hook permissionDecision 'allow' now suppresses the tool approval prompt +- Add notification hook event that fires asynchronously on shell completion, permission prompts, elicitation dialogs, and agent completion + +## 1.0.17 - 2026-04-03 + +- Built-in skills are now included with the CLI, starting with a guide for customizing Copilot cloud agent's environment +- MCP OAuth flows now support HTTPS redirect URIs via a self-signed certificate fallback, improving compatibility with OAuth providers that require HTTPS (e.g., Slack) +- /resume session picker loads significantly faster, especially with large session histories + +## 1.0.16 - 2026-04-02 + +- SQL prompt tags no longer appear when sql tool is excluded via excludedTools or availableTools +- MCP tool calls display tool name and parameter summary in the timeline +- MCP server reconnects correctly with valid authentication when the working directory changes +- Add PermissionRequest hook to allow scripts to programmatically approve or deny tool permission requests +- Remove deprecated `marketplaces` repository setting (use `extraKnownMarketplaces` instead) +- MCP servers load correctly after login, user switch, and /mcp reload +- BYOK Anthropic provider now respects the configured maxOutputTokens limit +- Remove deprecated `marketplaces` repository setting (use `extraKnownMarketplaces` instead) + +## 1.0.15 - 2026-04-01 + +- Remove support for gpt-5.1-codex, gpt-5.1-codex-mini, and gpt-5.1-codex-max models +- Copilot mascot now blinks with subtle eye animations in interactive mode +- User switcher and `/user list` display accounts in alphabetical order +- Add mcp.config.list, mcp.config.add, mcp.config.update, and mcp.config.remove server RPCs for managing persistent MCP server configuration +- Add device code flow (RFC 8628) as a fallback for MCP OAuth in headless and CI environments +- Add `/mcp auth` command and re-authentication UI for MCP OAuth servers with account switching support +- Add postToolUseFailure hooks for tool errors and make postToolUse run only after successful tool calls +- Add /share html command to export sessions and research reports as self-contained interactive HTML files +- Autopilot no longer continues after pressing Escape or Ctrl+C to cancel +- Keystrokes typed while the CLI is loading are no longer lost +- Large tool output preview shows correct character count and up to 500 characters +- Add Home/End and Page Up/Page Down navigation to the diff viewer +- CLI exits immediately after a session ends instead of waiting up to 10 seconds +- Config settings askUser, autoUpdate, storeTokenPlaintext, logLevel, skillDirectories, and disabledSkills now use camelCase names (snake_case still accepted) +- Many settings keys now prefer camelCase names (snake_case names still work) +- Ctrl+D no longer queues a message; use Ctrl+Q or Ctrl+Enter to queue +- MCP servers that are slow to connect no longer block the agent from starting +- Pasting images from the Windows clipboard now works in WSL environments + +## 1.0.14 - 2026-03-31 + +- Images are correctly sent to Anthropic models when using BYOM +- Model picker selection correctly overrides the --model flag for the current session +- Terminal output no longer clears or jumps on error exit +- Shift+Enter inserts a newline in terminals with Kitty keyboard protocol support +- Show underlying error details when a Git marketplace URL fails to clone +- Temp file operations no longer trigger unnecessary permission prompts on macOS +- Allow SDK session participants to respond to elicitation requests via handlePendingElicitation API +- Shell processes are cleaned up properly when a session ends +- SDK exit_plan_mode.requested event is now always emitted, regardless of whether a direct callback is configured +- MCP servers using Microsoft Entra ID authentication no longer show the consent screen on every login +- Grep and glob search results return promptly when a timeout is reached +- Keystrokes are no longer dropped when typing quickly in elicitation dialogs +- Clipboard copy on native Windows no longer includes a stray U+FEFF character at the start of pasted text +- Fixed --config-dir being ignored when resuming a session, causing paths to silently fall back to ~/.copilot +- MCP servers blocked by allowlist policy are now hidden from /mcp show +- Reasoning effort setting now applies correctly when using Bring Your Own Model (BYOM) providers +- Ensure clear error messaging when using classic PATs +- grep tool handles large files and long lines without running out of memory +- MCP server OAuth authentication works when the CLI runs in ACP mode +- Split $BROWSER on spaces +- Pasted text is no longer corrupted when mouse support is active +- Uninstalling a marketplace plugin removes its cached data from disk +- Reduce CPU usage during streaming by optimizing spinner rendering and task polling +- Reduce CLI startup time by running terminal detection, auth, and git operations in parallel +- MCP registry lookups are more reliable with automatic retries and request timeouts +- CLI starts faster due to V8 compile cache reducing parse and compile time on repeated invocations +- Remove support for gemini-3-pro-preview model + +## 1.0.13 - 2026-03-30 + +- Shell processes are cleaned up properly when a session ends +- Reduce CPU usage during streaming by optimizing spinner rendering and task polling +- SDK exit_plan_mode.requested event is now always emitted, regardless of whether a direct callback is configured +- MCP servers using Microsoft Entra ID authentication no longer show the consent screen on every login +- Grep and glob search results return promptly when a timeout is reached +- Keystrokes are no longer dropped when typing quickly in elicitation dialogs +- Clipboard copy on native Windows no longer includes a stray U+FEFF character at the start of pasted text +- Fixed --config-dir being ignored when resuming a session, causing paths to silently fall back to ~/.copilot +- Reduce CLI startup time by running terminal detection, auth, and git operations in parallel +- /rewind and double-Esc now open a timeline picker that can roll back to any point in conversation history, not just the previous snapshot +- MCP registry lookups are more reliable with automatic retries and request timeouts +- CLI starts faster due to V8 compile cache reducing parse and compile time on repeated invocations +- MCP servers can request LLM inference (sampling) with user approval via a new review prompt +- MCP servers blocked by allowlist policy are now hidden from /mcp show +- Reasoning effort setting now applies correctly when using Bring Your Own Model (BYOM) providers +- Ensure clear error messaging when using classic PATs +- grep tool handles large files and long lines without running out of memory +- MCP server OAuth authentication works when the CLI runs in ACP mode +- Split $BROWSER on spaces +- Pasted text is no longer corrupted when mouse support is active +- Uninstalling a marketplace plugin removes its cached data from disk +- Remove support for gemini-3-pro-preview model + +## 1.0.12 - 2026-03-26 + +- MCP servers defined in .mcp.json start correctly when the working directory is the git root +- Clipboard copy works correctly on Windows when non-system clip.exe shadows the system one in PATH +- /diff view correctly renders all lines when intra-line highlighting is present +- Plugin hooks now receive CLAUDE_PROJECT_DIR and CLAUDE_PLUGIN_DATA environment variables, and support {{project_dir}} and {{plugin_data_dir}} template variables in hook configurations +- Workspace MCP servers are now correctly loaded and visible to the agent +- /clear preserves MCP servers in the new session +- Model display header shows the active reasoning effort level (e.g. "(high)") next to the model name +- /session rename auto-generates a session name from conversation history when called without a name argument +- Remove --alt-screen flag and alt_screen setting; alt screen is now always enabled +- OSC 8 hyperlinks are now clickable in VS Code terminals +- PowerShell /flag arguments (e.g., /all, /enum-devices) are no longer mistakenly treated as file paths +- Trusted folder access prompts no longer appear incorrectly on Windows OneDrive paths and case-insensitive filesystems +- Status line payload includes session_name field alongside session_id +- @ file picker no longer shows .git directory contents +- Scroll position stays in place when the terminal is resized +- /yolo path permissions persist after using /clear to start a new session +- Emoji characters are selected and highlighted correctly in terminal text selection +- Sessions with active work are no longer cleaned up by the stale session reaper +- Resume session restores the previously selected custom agent +- CLI no longer crashes with out-of-memory errors when running shell commands that produce high-volume output +- Pressing Escape multiple times during autopilot cancellation no longer leaves the session stuck +- Read .claude/settings.json and .claude/settings.local.json as additional repo config sources +- Model picker opens in full-screen view with inline reasoning effort adjustment using ← / → arrow keys +- OTEL hook executions are now recorded as span events instead of child spans, reducing trace clutter +- User prompt appears in the conversation immediately after pressing Enter +- /allow-all (/yolo) now supports on, off, and show subcommands to enable, disable, or check allow-all mode +- Ctrl+Y in plan mode opens the most recent research report when no plan exists yet + +## 1.0.11 - 2026-03-23 + +- Ensure models appear in picker correctly, display model names where possible +- Show a warning when MCP servers are blocked by policy (e.g. allowlist enforcement) +- Organization policy for third-party MCP servers is now enforced for all users +- Add ~/.agents/skills/ as a personal skill discovery directory, aligning with VS Code's GHCP4A extension default +- Extension hooks from multiple extensions now merge instead of overwriting each other or hooks from hooks.json +- sessionStart hook additionalContext is now injected into the conversation +- /clear now abandons the current session entirely, while /new starts a fresh conversation (keeping the old session backgrounded) +- GitHub MCP server user configuration is respected when connecting to remote hosts +- Terminal screen redraws correctly after process suspend and resume (Ctrl+Z / fg) +- MCP OAuth authentication works with MCP servers like the Atlassian Rovo MCP Server which support Dynamic Client Registration but host authorization metadata at a non-standard URL +- /cd keeps a separate working directory per session, restored when switching sessions +- Custom instructions, MCP servers, skills, and agents are now discovered at every directory level from the working directory up to the git root, enabling full monorepo support +- Startup 'Environment loaded' message now shows the number of loaded hooks +- Background agent progress (current intent and tool calls completed) now surfaces in read_agent and task timeout responses +- statusLine.command path now supports ~ and environment variables (e.g. $HOME, ${VAR:-default}) +- /new and /clear commands accept an optional prompt to start the new session with a first message + +## 1.0.10 - 2026-03-20 + +- Reduced memory usage when viewing large files in their entirety +- /login device flow works correctly in Codespaces and remote terminal environments +- Working directory is correctly detected when using --server mode with remote sessions +- Arrow keys work correctly in terminals using application keypad mode +- Repo hooks (.github/hooks/) now fire correctly when using prompt mode (-p flag) +- /copy writes formatted HTML to clipboard on Windows for pasting into Word, Outlook, and Teams +- SDK clients can register custom slash commands when starting or joining a session +- SDK clients can show elicitation dialogs to the user via session.ui.elicitation +- Add experimental support for multiple concurrent sessions +- Add --effort as a shorthand alias for --reasoning-effort +- Add /undo command to undo the last turn and revert file changes +- Markdown bullet lists render correctly in alt-screen mode when content contains hard line breaks +- Elicitation form shows Shift+Tab hint for navigating between fields in reverse +- Remote session URL displays as a compact clickable 'Open in browser' link instead of a duplicated raw URL +- Session history is no longer lost when exiting via /quit, Ctrl+C, or restart +- Hook matcher filters defined in nested hook structures are now correctly applied to inner hook items +- Plugins using .claude-plugin/ or .plugin/ manifest directories now load their MCP and LSP servers correctly +- /terminal-setup no longer shows a misleading error for WSL users +- Model picker reorganizes models into Available, Blocked/Disabled, and Upgrade tabs based on user plan and policy +- Workspace MCP servers from .mcp.json, .vscode/mcp.json, and devcontainer.json are now loaded only after folder trust is confirmed +- Config settings renamed to camelCase: `includeCoAuthoredBy`, `effortLevel`, `autoUpdatesChannel`, `statusLine` (old names still work) +- When copying assistant responses, the leading 2-space UI indent is stripped from selections where all selected lines share that indent +- Plugins loaded via --plugin-dir now appear in /plugin list under a separate 'External Plugins' section + +## 1.0.9 - 2026-03-19 + +- Spurious I/O error messages (ENOTCONN, EIO) no longer appear in the timeline during SSH disconnects or terminal closes +- Add include_gitignored config option to include gitignored files in @ file search +- Copying text on WSL correctly preserves CJK and other non-ASCII characters +- Marketplace and plugin installs from shortened URLs (e.g., aka.ms links) now work correctly + +## 1.0.8 - 2026-03-18 + +- Agent mode labels and borders display correct colors on non-truecolor terminals (tmux, SSH, screen) +- Alternate screen buffer is now enabled by default for a cleaner terminal experience +- Exit plan mode tool remains available when an extension subprocess joins an active session +- Repo-level hooks are loaded only after folder trust is confirmed, not before the trust dialog is shown +- Idle subagents no longer clutter the /tasks view — they are hidden after 2 minutes of inactivity +- Add extension mode setting to control extensibility +- MCP servers can be validated against configured registries using the experimental MCP_ALLOWLIST feature flag +- Allow --resume to accept a task ID in addition to a session ID +- Support defining hooks in settings.json, settings.local.json, and config.json +- Scroll works correctly in macOS Terminal.app and other terminals that don't support SGR mouse encoding +- Mouse scroll works correctly in tmux after returning from an external editor +- Ctrl-C in prompt mode now exits immediately instead of waiting for the request to complete +- Spinner animation no longer delays visible output from appearing in the timeline +- Dialog titles display consistently inside all dialog boxes + +## 1.0.7 - 2026-03-17 + +- Improve color contrast across CLI themes for better readability and accessibility +- User messages display with a subtle background color for visual differentiation from assistant messages +- Add support for gpt-5.4-mini model +- Tab bar selected tab uses compact [label] style with cleaner spacing +- Add "customize" mode to system message config for section-level system prompt overrides +- Double-Esc clears input when text is present, or triggers undo when the prompt is empty, with a hint shown after the first Esc +- Session resume no longer fails with 'Session file is corrupted' for sessions created before 1.0.6 +- Branch indicator distinguishes unstaged changes (\*), staged changes (+), and untracked files (%) in the header +- Add experimental SDK session APIs to list and manage skills, MCP servers, and plugins, with optional config auto-discovery from the working directory +- Add subagentStart hook that fires when a subagent is spawned, with support for injecting additional context into the subagent's prompt +- Pro and trial users now see all models they are entitled to in the model picker +- CLI restart no longer re-sends the -i/--interactive prompt to the new session +- Resolve an edge case where auto-update could leave an incomplete package on Windows + +## 1.0.6 - 2026-03-16 + +- Autopilot continuation no longer gets permanently blocked after an error in a previous turn +- In autopilot, task_complete summary is now required and renders as markdown +- Input placeholder text is no longer read aloud by screen readers on every prompt submission +- Free tree-sitter WASM objects after shell command parsing to prevent memory leak +- /help dialog starts scrolled to the top in alt-screen mode +- Auto-update correctly recovers from race conditions on Windows +- CLI no longer fails to load on Windows after updating while another instance is running +- Reduce memory usage by eliminating redundant environment variable copies per child process spawn +- Remaining requests widget no longer shows inaccurate quota data for Copilot Free users +- Resolve session crashes caused by HTTP/2 connection pool race conditions when sub-agents are active +- CLI loads the latest version of itself after an auto-update +- Kill command validation no longer incorrectly blocks some legitimate commands. e.g. p.kill() in a python script +- Instruction file frontmatter applyTo field accepts both string and array values +- Improve streaming and tool-output memory usage +- Model can discover and use tools dynamically with tool search for Claude models +- Hooks fire correctly when resuming a previous session +- Prompt input in alt screen mode renders all lines without truncation +- Links and right-click paste no longer trigger twice when running in VS Code's integrated terminal +- Hook configuration files now work across VS Code, Claude Code, and the CLI without modification by accepting PascalCase event names alongside camelCase +- Native module prebuilds (e.g., conpty.node on Windows ARM64) load reliably on first launch +- Subagent elapsed time in /tasks view freezes when idle and resumes when active again +- Flags --enable-all-github-mcp-tools, --add-github-mcp-toolset, and --add-github-mcp-tool now take effect when using the SDK (ACP mode) +- Custom instruction file paths load correctly when using COPILOT_CUSTOM_INSTRUCTIONS_DIRS +- Command output is no longer lost when a command causes the shell to exit +- Plugins using .claude-plugin/plugin.json are discovered when loaded via --plugin-dir +- Fix handling of shift+enter on VS Code with old /terminal-setup config. +- Agent creation wizard shows the correct user agents directory path +- Support Open Plugin spec file locations for loading plugin and marketplace manifests +- Show friendlier error messages and provide keyboard shortcut to open event links in browsers +- Extension tools now work with the permissions system, use `skipPermission` per-tool to bypass permission prompts +- Hook config files now support Claude Code's nested matcher/hooks structure and optional type field +- Sub-agents launched by the task tool are assigned human-readable IDs based on their name (e.g., `math-helper-0`) instead of generic `agent-0` identifiers +- The create_pull_request tool now includes the PR URL in its output so the agent can share the direct link +- read_agent output includes inbound messages that triggered each turn in multi-turn agents +- Improve compatibility with the Open Plugins spec: support `.lsp.json`, PascalCase hook event names, `exclusive` path mode, and `:` namespace separator + +## 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! @@ -1035,7 +1756,7 @@ To commemorate GitHub Copilot CLI reaching general availability last week, we're ## 0.0.332 - 2025-10-01 -- Switched to using per-subscription Copilot API endpoints in accordance with [GitHub's docs](https://docs.github.com/en/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-access/manage-network-access) (fixes https://github.com/github/copilot-cli/issues/76) +- Switched to using per-subscription Copilot API endpoints in accordance with [GitHub's docs](https://docs.github.com/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-access/manage-network-access) (fixes https://github.com/github/copilot-cli/issues/76) - Fixed a bug where `/user [list | show | switch]` did not include users signed in from all authentication modes (fixes https://github.com/github/copilot-cli/issues/58) - Fixed a bug where switching to another user with `/user switch` did not take effect in the GitHub MCP server - Improved the screenreader experience by disabling the scrollbar in the `@` file picker, the `--resume` session picker, and the `/` command picker diff --git a/install.sh b/install.sh index 0d7d77fe..b63486dd 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 --sort "version:refname" "$GIT_REMOTE" | tail -1 | awk -F/ '{print $NF}')" if [ -z "$VERSION" ]; then echo "Error: Could not determine prerelease version" >&2 exit 1 @@ -65,14 +75,14 @@ echo "Downloading from: $DOWNLOAD_URL" # Download and extract with error handling TMP_DIR="$(mktemp -d)" +trap 'rm -rf -- "$TMP_DIR"' EXIT 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" exit 1 fi @@ -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 @@ -91,7 +101,6 @@ if [ "$CHECKSUMS_AVAILABLE" = true ]; then echo "✓ Checksum validated" else echo "Error: Checksum validation failed." >&2 - rm -rf "$TMP_DIR" exit 1 fi elif command -v shasum >/dev/null 2>&1; then @@ -99,7 +108,6 @@ if [ "$CHECKSUMS_AVAILABLE" = true ]; then echo "✓ Checksum validated" else echo "Error: Checksum validation failed." >&2 - rm -rf "$TMP_DIR" exit 1 fi else @@ -110,7 +118,6 @@ fi # Check that the file is a valid tarball if ! tar -tzf "$TMP_TARBALL" >/dev/null 2>&1; then echo "Error: Downloaded file is not a valid tarball or is corrupted." >&2 - rm -rf "$TMP_DIR" exit 1 fi @@ -134,40 +141,55 @@ fi tar -xz -C "$INSTALL_DIR" -f "$TMP_TARBALL" chmod +x "$INSTALL_DIR/copilot" echo "✓ GitHub Copilot CLI installed to $INSTALL_DIR/copilot" -rm -rf "$TMP_DIR" # Check if installed binary is accessible if ! command -v copilot >/dev/null 2>&1; then echo "" echo "Notice: $INSTALL_DIR is not in your PATH" - # Detect shell rc file - case "$(basename "${SHELL:-/bin/sh}")" in - zsh) RC_FILE="$HOME/.zshrc" ;; - bash) RC_FILE="$HOME/.bashrc" ;; - *) RC_FILE="$HOME/.profile" ;; + # Detect shell profile file for PATH + CURRENT_SHELL="$(basename "${SHELL:-/bin/sh}")" + case "$CURRENT_SHELL" in + 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 + ;; + fish) RC_FILE="${XDG_CONFIG_HOME:-$HOME/.config}/fish/conf.d/copilot.fish" ;; + *) RC_FILE="$HOME/.profile" ;; esac + PATH_LINE="export PATH=\"$INSTALL_DIR:\$PATH\"" + if [ "$CURRENT_SHELL" = "fish" ]; then + PATH_LINE="fish_add_path \"$INSTALL_DIR\"" + fi + # Prompt user to add to shell rc file (only if interactive) if [ -t 0 ] || [ -e /dev/tty ]; then echo "" printf "Would you like to add it to %s? [y/N] " "$RC_FILE" if read -r REPLY /dev/null; then if [ "$REPLY" = "y" ] || [ "$REPLY" = "Y" ]; then - echo "export PATH=\"$INSTALL_DIR:\$PATH\"" >> "$RC_FILE" - echo "✓ Added PATH export to $RC_FILE" + mkdir -p "$(dirname "$RC_FILE")" + echo "$PATH_LINE" >> "$RC_FILE" + echo "✓ Added PATH configuration to $RC_FILE" echo " Restart your shell or run: source $RC_FILE" fi fi else echo "" echo "To add $INSTALL_DIR to your PATH permanently, add this to $RC_FILE:" - echo " export PATH=\"$INSTALL_DIR:\$PATH\"" + echo " $PATH_LINE" fi echo "" echo "Installation complete! To get started, run:" - echo " export PATH=\"$INSTALL_DIR:\$PATH\" && copilot help" + echo " $PATH_LINE && copilot help" else echo "" echo "Installation complete! Run 'copilot help' to get started."