Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
58cf8d8
bg todo: scope policy to current-turn activity and guard final review…
vritant24 May 12, 2026
f2d89d6
bg todo: add cross-turn awareness to background todo prompts
vritant24 May 12, 2026
422f532
bg todo: add tests for cross-turn policy scoping and turn-aware history
vritant24 May 12, 2026
04480a9
Merge branch 'main' into vritant/bg-todo-cross-turn-fix
vritant24 May 12, 2026
d33e8c2
bg todo: address PR review comments
vritant24 May 12, 2026
c34016f
fix type
vritant24 May 12, 2026
9e7a624
Enhance session customization handling and simplify sync logic (#317700)
DonJayamanne May 21, 2026
bed9e75
Show a warning when showing the rendered markdown diff
mjbvz May 21, 2026
b541e17
Add Model, ConversationId, and RequestId to the gent.tool.responsele…
tbogoodnews May 21, 2026
615de17
Merge pull request #307886 from yogeshwaran-c/feat/watch-copy-all-306116
yogeshwaran-c May 21, 2026
b0bad8c
Add turn to the GHCP telmetry event response.success
tbogoodnews May 21, 2026
f4c17b3
Potential fix for pull request finding
mjbvz May 21, 2026
e7137a3
Integrating MXC for windows sandboxing (#317669)
dileepyavan May 21, 2026
db05611
Report existing turn in response success telemetry
tbogoodnews May 21, 2026
05d3f35
[cherry-pick] Reverting fetch web tool changes for sandboxing (#317199)
vs-code-engineering[bot] May 21, 2026
507d09d
Merge pull request #317829 from microsoft/dev/mjbvz/main-llama
mjbvz May 21, 2026
3b3dd1b
Hide anonymous access setting from settings ui
cwebster-99 May 21, 2026
84f19d4
Merge branch 'main' into vritant/bg-todo-cross-turn-fix
vritant24 May 21, 2026
bc13ab1
Chronicle: Add cost-tips command (#317809)
vijayupadya May 21, 2026
8725a47
Fix tool telemetry test spy setup
tbogoodnews May 21, 2026
1cdf8fa
Merge branch 'main' into tbogoodnews/add-turns-conversationid-to-tool…
tbogoodnews May 21, 2026
7680cf4
Browser: support element selection in subframes (#317405)
kycutler May 21, 2026
907ffc4
Fix entitlements rendering incorrectly (#317857)
lramos15 May 21, 2026
46050be
Add browser emulation toolbar (#317831)
kycutler May 21, 2026
a2d2b10
Long context pricing (#317820)
lramos15 May 21, 2026
127d936
Fix duplicate terminal tool render from pastTenseMessage in agent hos…
roblourens May 21, 2026
c883dd5
refactor and add tests for agentCustomizationContentExpander (#317773)
aeschli May 21, 2026
65c56ba
copilot: truncate long lines in read_file results (#317862)
connor4312 May 21, 2026
8bda8dc
Merge pull request #317855 from tbogoodnews/tbogoodnews/add-turns-con…
connor4312 May 21, 2026
650352e
agent-host: stop config pickers flashing during resolveSessionConfig …
connor4312 May 21, 2026
d958242
address comments
vritant24 May 21, 2026
7271ade
Merge branch 'main' into vritant/bg-todo-cross-turn-fix
vritant24 May 21, 2026
05e9cfa
fix(chat): enhance language model reset logic for CopilotCLI session …
DonJayamanne May 21, 2026
5b8308a
build/darwin: skip @microsoft/mxc-sdk bin/ in Mach-O arch check (#317…
bryanchen-d May 21, 2026
31759ff
build(deps): bump @nevware21/ts-utils from 0.11.6 to 0.14.0 in /exten…
dependabot[bot] May 21, 2026
c57c832
Merge pull request #317854 from microsoft/hilarious-aardwolf
cwebster-99 May 21, 2026
e94cdc1
build(deps): bump @nevware21/ts-utils from 0.12.5 to 0.14.0 in /exten…
dependabot[bot] May 21, 2026
3827a8b
Smoke test for Copilot CLI via chat extension in editor window (#317140)
anthonykim1 May 21, 2026
21478da
fix(chat): add JSON schema type and validation for chatLanguageModels…
vritant24 May 21, 2026
ffe91b2
Merge branch 'main' into dev/vritant24/chatLanguageModels-intellisense
vritant24 May 21, 2026
3400e0f
agentHost: adopt OTEL log channel, support logs from remote agent hos…
connor4312 May 21, 2026
2acbbb8
cli: do not block control server startup on agent host supervisor (#3…
connor4312 May 21, 2026
31eac20
Merge pull request #316052 from microsoft/vritant/bg-todo-cross-turn-fix
vritant24 May 21, 2026
de1cfec
sessions: clean up ISessionsProvider chat API (#317875)
sandy081 May 21, 2026
a74acf0
Open agent browser pages in the background in some conditions (#317873)
kycutler May 21, 2026
3a54038
Merge pull request #317881 from microsoft/dev/vritant24/chatLanguageM…
vritant24 May 21, 2026
79ff5c4
Bump Agent host Copilot CLI to 1.0.49 (#317241)
anthonykim1 May 21, 2026
cc5fe93
refactor: move SessionPluginBundler to shared directory and update im…
DonJayamanne May 21, 2026
336d4b2
Phase 10.5: unify ClaudeAgentSession lifecycle, retire ClaudeMaterial…
TylerLeonhardt May 21, 2026
59e50e4
Fix overflowing actions in right-aligned hover widget (#317880)
kycutler May 21, 2026
55445c5
build(deps): bump @nevware21/ts-utils from 0.11.6 to 0.14.0 in /exten…
dependabot[bot] May 21, 2026
727ebe0
build(deps): bump @nevware21/ts-utils from 0.11.6 to 0.14.0 in /exten…
dependabot[bot] May 21, 2026
d2fc69a
debug: prevent run and debug action item from overflowing (#317887)
connor4312 May 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions build/.moduleignore
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,10 @@ zone.js/dist/**
@github/copilot/prebuilds/**
@github/copilot/clipboard/**
@github/copilot/ripgrep/**
@github/copilot/pvrecorder/**
@github/copilot/foundry-local-sdk/**
@github/copilot/mxc-bin/**
@github/copilot/sharp/**
@github/copilot/**/keytar.node

# @github/copilot platform binaries - not needed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ steps:
- ${{ if eq(parameters.VSCODE_RUN_ELECTRON_TESTS, true) }}:
- script: |
set -e
export COPILOT_CLI_UI_SMOKE=1
APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)
APP_NAME="`ls $APP_ROOT | head -n 1`"
npm run smoketest-no-compile -- --tracing --build "$APP_ROOT/$APP_NAME"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,10 @@ steps:
condition: succeededOrFailed()
- ${{ if eq(parameters.VSCODE_RUN_ELECTRON_TESTS, true) }}:
- script: npm run smoketest-no-compile -- --tracing --build "$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)"
- script: |
set -e
export COPILOT_CLI_UI_SMOKE=1
npm run smoketest-no-compile -- --tracing --build "$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)"
timeoutInMinutes: 20
displayName: 🧪 Run smoke tests (Electron)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,9 @@ steps:
condition: succeededOrFailed()

- ${{ if eq(parameters.VSCODE_RUN_ELECTRON_TESTS, true) }}:
- powershell: npm run smoketest-no-compile -- --tracing --build "$(agent.builddirectory)\test\VSCode-win32-$(VSCODE_ARCH)"
- powershell: |
$env:COPILOT_CLI_UI_SMOKE = '1'
npm run smoketest-no-compile -- --tracing --build "$(agent.builddirectory)\test\VSCode-win32-$(VSCODE_ARCH)"
displayName: 🧪 Run smoke tests (Electron)
timeoutInMinutes: 20

Expand Down
4 changes: 4 additions & 0 deletions build/darwin/verify-macho.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ const FILES_TO_SKIP = [
// ripgrep-universal: single-arch binaries in per-platform directories
'**/node_modules/@vscode/ripgrep-universal/bin/darwin-*/**',
'**/node_modules.asar.unpacked/@vscode/ripgrep-universal/bin/darwin-*/**',
// MXC SDK ships per-arch native binaries under bin/<arch>; the package
// includes both arm64 and x64 trees regardless of host arch.
'**/node_modules/@microsoft/mxc-sdk/bin/**',
'**/node_modules.asar.unpacked/@microsoft/mxc-sdk/bin/**',
];

function isFileSkipped(file: string): boolean {
Expand Down
8 changes: 5 additions & 3 deletions build/gulpfile.reh.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import * as cp from 'child_process';
import log from 'fancy-log';
import buildfile from './buildfile.ts';
import { fetchUrls, fetchGithub } from './lib/fetch.ts';
import { getCopilotExcludeFilter, getRipgrepExcludeFilter, prepareBuiltInCopilotRipgrepShim } from './lib/copilot.ts';
import { getCopilotExcludeFilter, getCopilotRuntimePrebuildFiles, getRipgrepExcludeFilter, prepareBuiltInCopilotRipgrepShim } from './lib/copilot.ts';


const rcedit = promisify(rceditCallback);
Expand Down Expand Up @@ -333,11 +333,13 @@ function packageTask(type: string, platform: string, arch: string, sourceFolderN

const productionDependencies = getProductionDependencies(REMOTE_FOLDER);
const dependenciesSrc = productionDependencies.map(d => path.relative(REPO_ROOT, d)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`, `!${d}/.bin/**`]).flat();
const deps = gulp.src(dependenciesSrc, { base: 'remote', dot: true })
const cleanedDeps = gulp.src(dependenciesSrc, { base: 'remote', dot: true })
// filter out unnecessary files, no source maps in server build
.pipe(filter(['**', '!**/package-lock.json', '!**/*.{js,css}.map']))
.pipe(util.cleanNodeModules(path.join(import.meta.dirname, '.moduleignore')))
.pipe(util.cleanNodeModules(path.join(import.meta.dirname, `.moduleignore.${process.platform}`)))
.pipe(util.cleanNodeModules(path.join(import.meta.dirname, `.moduleignore.${process.platform}`)));
const copilotRuntimePrebuilds = gulp.src(getCopilotRuntimePrebuildFiles(platform, arch, 'remote/node_modules'), { base: 'remote', dot: true, allowEmpty: true });
const deps = es.merge(cleanedDeps, copilotRuntimePrebuilds)
.pipe(filter(getCopilotExcludeFilter(platform, arch)))
.pipe(filter(getRipgrepExcludeFilter(platform, arch)))
.pipe(jsFilter)
Expand Down
8 changes: 5 additions & 3 deletions build/gulpfile.vscode.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import minimist from 'minimist';
import { compileBuildWithoutManglingTask, compileBuildWithManglingTask } from './gulpfile.compile.ts';
import { compileNonNativeExtensionsBuildTask, compileNativeExtensionsBuildTask, compileAllExtensionsBuildTask, compileExtensionMediaBuildTask, cleanExtensionsBuildTask, compileCopilotExtensionBuildTask } from './gulpfile.extensions.ts';
import { copyCodiconsTask } from './lib/compilation.ts';
import { getCopilotExcludeFilter, getRipgrepExcludeFilter, prepareBuiltInCopilotRipgrepShim } from './lib/copilot.ts';
import { getCopilotExcludeFilter, getCopilotRuntimePrebuildFiles, getRipgrepExcludeFilter, prepareBuiltInCopilotRipgrepShim } from './lib/copilot.ts';
import { useEsbuildTranspile } from './buildConfig.ts';
import { promisify } from 'util';
import globCallback from 'glob';
Expand Down Expand Up @@ -328,10 +328,12 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d
depFilterPattern.push('!**/*.{js,css}.map');
}

const deps = gulp.src(dependenciesSrc, { base: '.', dot: true })
const cleanedDeps = gulp.src(dependenciesSrc, { base: '.', dot: true })
.pipe(filter(depFilterPattern))
.pipe(util.cleanNodeModules(path.join(import.meta.dirname, '.moduleignore')))
.pipe(util.cleanNodeModules(path.join(import.meta.dirname, `.moduleignore.${process.platform}`)))
.pipe(util.cleanNodeModules(path.join(import.meta.dirname, `.moduleignore.${process.platform}`)));
const copilotRuntimePrebuilds = gulp.src(getCopilotRuntimePrebuildFiles(platform, arch), { base: '.', dot: true, allowEmpty: true });
const deps = es.merge(cleanedDeps, copilotRuntimePrebuilds)
.pipe(filter(getCopilotExcludeFilter(platform, arch)))
.pipe(filter(getRipgrepExcludeFilter(platform, arch)))
.pipe(jsFilter)
Expand Down
21 changes: 19 additions & 2 deletions build/lib/copilot.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,13 +83,30 @@ export function getCopilotExcludeFilter(platform: string, arch: string): string[
const nonTargetPlatforms = copilotPlatforms.filter(p => p !== targetPlatformArch);

// Strip wrong-architecture @github/copilot-{platform} packages.
// All copilot prebuilds are stripped by .moduleignore; the copilot CLI SDK
// resolves `node-pty` from VS Code's own node_modules via `hostRequire`.
const excludes = nonTargetPlatforms.map(p => `!**/node_modules/@github/copilot-${p}/**`);

return ['**', ...excludes];
}

/**
* Returns the public @github/copilot-sdk runtime native addon files that must
* survive app/remote packaging for the target platform.
*
* .moduleignore strips @github/copilot/prebuilds/** globally because the
* internal extension SDK uses a copied sdk/prebuilds layout. Agent Host uses
* the public SDK, whose runtime addon loader expects runtime.node in the root
* prebuilds layout.
*/
export function getCopilotRuntimePrebuildFiles(platform: string, arch: string, nodeModulesRoot = 'node_modules'): string[] {
const { nodePlatform, nodeArch } = toNodePlatformArch(platform, arch);
const targetPlatformArch = `${nodePlatform}-${nodeArch}`;
const prebuildDir = path.posix.join(nodeModulesRoot, '@github', 'copilot', 'prebuilds', targetPlatformArch);

return [
path.posix.join(prebuildDir, 'runtime.node'),
];
}

/**
* Materializes the copilot CLI ripgrep shim directly inside the built-in copilot extension.
*
Expand Down
44 changes: 23 additions & 21 deletions cli/src/commands/tunnels.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@
*--------------------------------------------------------------------------------------------*/

use base64::{engine::general_purpose as b64, Engine as _};
use futures::{stream::FuturesUnordered, StreamExt};
use futures::{stream::FuturesUnordered, FutureExt, StreamExt};
use serde::Serialize;
use sha2::{Digest, Sha256};
use std::{
net::{IpAddr, Ipv4Addr, SocketAddr},
str::FromStr,
sync::Arc,
time::Duration,
};
use sysinfo::Pid;
Expand Down Expand Up @@ -49,6 +50,7 @@ use crate::{
make_singleton_server, start_singleton_server, BroadcastLogSink, SingletonServerArgs,
},
AuthRequired, Next, ServeStreamParams, ServiceContainer, ServiceManager,
SharedActiveAgentHost,
},
util::{
app_lock::AppMutex,
Expand Down Expand Up @@ -148,24 +150,27 @@ pub async fn command_shell(ctx: CommandContext, args: CommandShellArgs) -> Resul
shutdown_reqs.push(ShutdownRequest::ParentProcessKilled(p));
}

// Ensure a per-machine agent host supervisor is running on the remote
// (the SSH/`command-shell` entry point) so the renderer that connects
// to the spawned VS Code server can reach the agent host via the
// `agentHostProxy` IPC channel. Best-effort: if the supervisor can't
// be started we still serve the stream so editing / extension host
// keep working — the renderer will just see "Unknown channel:
// agentHostProxy".
let agent_host_bridge = match ensure_supervisor_running(&ctx.paths, &ctx.log).await {
Ok(a) => Some(a),
Err(e) => {
warning!(
ctx.log,
"Could not start agent host supervisor; the renderer will not be able to reach it: {}",
e
);
None
// Kick off the agent host supervisor in the background. The supervisor
// is what lets the renderer reach the agent host via the
// `agentHostProxy` IPC channel on the spawned VS Code server. We do
// NOT await it here — `command-shell` needs to start listening
// immediately. `handle_serve` awaits the shared future on demand and
// mixes the bridge endpoint into the per-request `code_server_args`.
// On failure the renderer just won't see `agentHostProxy`; editing
// and the extension host still work.
let active_agent_host: SharedActiveAgentHost = {
let paths = ctx.paths.clone();
let log = ctx.log.clone();
async move {
ensure_supervisor_running(&paths, &log)
.await
.map(Arc::new)
.map_err(Arc::new)
}
.boxed()
.shared()
};
tokio::spawn(active_agent_host.clone());

let mut params = ServeStreamParams {
log: ctx.log,
Expand All @@ -177,14 +182,11 @@ pub async fn command_shell(ctx: CommandContext, args: CommandShellArgs) -> Resul
.unwrap_or(AuthRequired::VSDA),
exit_barrier: ShutdownRequest::create_rx(shutdown_reqs),
code_server_args: (&ctx.args).into(),
active_agent_host: Some(active_agent_host),
};

args.server_args.apply_to(&mut params.code_server_args);

if let Some(a) = &agent_host_bridge {
a.apply_to_bridge(&mut params.code_server_args);
}

let mut listener: Box<dyn AsyncRWAccepter> =
match (args.on_port.first(), &args.on_host, args.on_socket) {
(_, _, true) => {
Expand Down
4 changes: 3 additions & 1 deletion cli/src/tunnels.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ mod service_windows;
mod socket_signal;
mod wsl_detect;

pub use control_server::{serve, serve_stream, AuthRequired, Next, ServeStreamParams};
pub use control_server::{
serve, serve_stream, AuthRequired, Next, ServeStreamParams, SharedActiveAgentHost,
};
pub use nosleep::SleepInhibitor;
pub use service::{
create_service_manager, ServiceContainer, ServiceManager, SERVICE_LOG_FILE_NAME,
Expand Down
Loading
Loading