Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
2bdd783
agentHost: data passing for edits
connor4312 Mar 22, 2026
c72e8d2
Prioritize active sessions in sorting for improved user experience
osortega Mar 19, 2026
ebe83b2
Add "Show More" functionality for capped repository groups in agent s…
osortega Mar 23, 2026
bb2dcc7
Implement repository group capping with "Show More" functionality in …
osortega Mar 23, 2026
424f656
Update agent session item styling for improved alignment and color
osortega Mar 23, 2026
7038907
Enhance "Show More" label styling with hover effect for better visibi…
osortega Mar 23, 2026
59c4a85
Add repository group capping functionality with toggle actions in ses…
osortega Mar 23, 2026
1765f3a
Refactor repository group capping methods for clarity and consistency…
osortega Mar 23, 2026
28f5880
Enhance "Show More" label styling with !important rule for consistent…
osortega Mar 23, 2026
02633fa
Remove redundant text decoration rules for "Show More" label in agent…
osortega Mar 23, 2026
85e9d41
agentHost: ui side of edits
connor4312 Mar 23, 2026
9cc4cb2
Merge remote-tracking branch 'origin/main' into connor4312/agent-edits
connor4312 Mar 23, 2026
dc49368
tests
connor4312 Mar 23, 2026
5785d32
add debounce for working shimmer (#304285)
justschen Mar 23, 2026
c3231e5
chat customizations: fix clipping (#304281)
joshspicer Mar 23, 2026
5a791c6
Use bracketed paste mode for `run_in_terminal` tool (#304268)
meganrogge Mar 23, 2026
3d843ae
Flatten sandbox network settings (#304287)
alexdima Mar 23, 2026
184c7f1
fix: destroy read streams to prevent file descriptor leaks (#303395)
buley Mar 23, 2026
d5aa1c4
fix merge
connor4312 Mar 23, 2026
60f0814
update distro to 6c98cfe8 (#304298)
joshspicer Mar 23, 2026
69fd6c6
Show unsandboxed execution reason in terminal tool confirmation (#304…
alexdima Mar 23, 2026
a0edb50
comments and build
connor4312 Mar 23, 2026
762894c
Rename "Show Top 5 Sessions" to "Show Recent Sessions" in filter menu
osortega Mar 24, 2026
e288f0d
Address PR review feedback: scope cap actions, fix expanded state, ma…
osortega Mar 24, 2026
ee0d019
padding
osortega Mar 24, 2026
970e788
color change
osortega Mar 24, 2026
e0ebee2
Merge branch 'main' into copilot/moral-shrimp
osortega Mar 24, 2026
c19696b
Fix loading copilot-sdk 0.2 (#304310)
roblourens Mar 24, 2026
a2d7169
Keep agent host alive while there are active websocket connections (#…
roblourens Mar 24, 2026
b0f5ea8
Merge pull request #304284 from microsoft/copilot/moral-shrimp
osortega Mar 24, 2026
161bd36
Merge remote-tracking branch 'origin/main' into connor4312/agent-edits
connor4312 Mar 24, 2026
f2597ce
fix test
connor4312 Mar 24, 2026
f655846
Revert "Accessible View: include file paths for inline references in …
alexdima Mar 24, 2026
007f51c
Merge remote-tracking branch 'origin/main' into connor4312/agent-edits
connor4312 Mar 24, 2026
b9ef737
Merge pull request #304303 from microsoft/connor4312/agent-edits
connor4312 Mar 24, 2026
c82bc51
More specific log string for cli agent host proxy (#304339)
roblourens Mar 24, 2026
efb9c8b
Remove outdated docs/instructions for remote agent host (#304341)
roblourens Mar 24, 2026
3535854
IPC logging for agent hosts (#304338)
roblourens Mar 24, 2026
cdf4f2f
feat: updates for Copilot CLI to include mode instructions (#303962)
DonJayamanne Mar 24, 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
35 changes: 0 additions & 35 deletions .github/instructions/remoteAgentHost.instructions.md

This file was deleted.

47 changes: 47 additions & 0 deletions .github/skills/chat-customizations-editor/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,53 @@ Principle: the UI widgets read everything from the descriptor — no harness-spe

Component explorer fixtures (see `component-fixtures` skill): `aiCustomizationListWidget.fixture.ts`, `aiCustomizationManagementEditor.fixture.ts` under `src/vs/workbench/test/browser/componentFixtures/`.

### Screenshotting specific tabs

The management editor fixture supports a `selectedSection` option to render any tab. Each tab has Dark/Light variants auto-generated by `defineThemedFixtureGroup`.

**Available fixture IDs** (use with `mcp_component-exp_screenshot`):

| Fixture ID pattern | Tab shown |
|---|---|
| `chat/aiCustomizations/aiCustomizationManagementEditor/AgentsTab/{Dark,Light}` | Agents |
| `chat/aiCustomizations/aiCustomizationManagementEditor/SkillsTab/{Dark,Light}` | Skills |
| `chat/aiCustomizations/aiCustomizationManagementEditor/InstructionsTab/{Dark,Light}` | Instructions |
| `chat/aiCustomizations/aiCustomizationManagementEditor/HooksTab/{Dark,Light}` | Hooks |
| `chat/aiCustomizations/aiCustomizationManagementEditor/PromptsTab/{Dark,Light}` | Prompts |
| `chat/aiCustomizations/aiCustomizationManagementEditor/McpServersTab/{Dark,Light}` | MCP Servers |
| `chat/aiCustomizations/aiCustomizationManagementEditor/PluginsTab/{Dark,Light}` | Plugins |
| `chat/aiCustomizations/aiCustomizationManagementEditor/LocalHarness/{Dark,Light}` | Default (Agents, Local harness) |
| `chat/aiCustomizations/aiCustomizationManagementEditor/CliHarness/{Dark,Light}` | Default (Agents, CLI harness) |
| `chat/aiCustomizations/aiCustomizationManagementEditor/ClaudeHarness/{Dark,Light}` | Default (Agents, Claude harness) |
| `chat/aiCustomizations/aiCustomizationManagementEditor/Sessions/{Dark,Light}` | Sessions window variant |

**Adding a new tab fixture:** Add a variant to the `defineThemedFixtureGroup` in `aiCustomizationManagementEditor.fixture.ts`:
```typescript
MyNewTab: defineComponentFixture({
labels: { kind: 'screenshot' },
render: ctx => renderEditor(ctx, {
harness: CustomizationHarness.VSCode,
selectedSection: AICustomizationManagementSection.MySection,
}),
}),
```

The `selectedSection` calls `editor.selectSectionById()` after `setInput`, which navigates to the specified tab and re-layouts.

### Populating test data

Each customization type requires its own mock path in `createMockPromptsService`:
- **Agents** — `getCustomAgents()` returns agent objects
- **Skills** — `findAgentSkills()` returns `IAgentSkill[]`
- **Prompts** — `getPromptSlashCommands()` returns `IChatPromptSlashCommand[]`
- **Instructions/Hooks** — `listPromptFiles()` filtered by `PromptsType`
- **MCP Servers** — `mcpWorkspaceServers`/`mcpUserServers` arrays passed to `IMcpWorkbenchService` mock
- **Plugins** — `IPluginMarketplaceService.installedPlugins` and `IAgentPluginService.plugins` observables

All test data lives in `allFiles` (prompt-based items) and the `mcpWorkspace/UserServers` arrays. Add enough items per category (8+) to invoke scrolling.

### Running unit tests

```bash
./scripts/test.sh --grep "applyStorageSourceFilter|customizationCounts"
npm run compile-check-ts-native && npm run valid-layers-check
Expand Down
3 changes: 2 additions & 1 deletion cli/src/commands/agent_host.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,8 @@ pub async fn agent_host(ctx: CommandContext, mut args: AgentHostArgs) -> Result<
if let Some(ct) = &args.connection_token {
url.push_str(&format!("?tkn={ct}"));
}
ctx.log.result(format!("Listening on {url}"));
ctx.log
.result(format!("Agent host proxy listening on {url}"));

let manager_for_svc = manager.clone();
let make_svc = move || {
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "code-oss-dev",
"version": "1.114.0",
"distro": "a981e7362565b4058f3bfd7604f8ab8c4f85101b",
"distro": "6c98cfe8dd3b4c159d8c9c331006a2d7c41872f0",
"author": {
"name": "Microsoft Corporation"
},
Expand Down
19 changes: 17 additions & 2 deletions src/bootstrap-import.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,29 @@ export async function initialize(injectPath: string): Promise<void> {
const path = join(injectPackageJSONPath, `../node_modules/${name}/package.json`);
const pkgJson = JSON.parse(String(await promises.readFile(path)));

// Determine the entry point: prefer exports["."].import for ESM, then main
// Determine the entry point: prefer exports["."].import for ESM, then main.
// Handle conditional export targets where exports["."].import/default
// can be a string or an object with a string `default` field.
// (Added for copilot-sdk)
let main: string | undefined;
if (pkgJson.exports?.['.']) {
const dotExport = pkgJson.exports['.'];
if (typeof dotExport === 'string') {
main = dotExport;
} else if (typeof dotExport === 'object' && dotExport !== null) {
main = dotExport.import ?? dotExport.default;
const resolveCondition = (v: unknown): string | undefined => {
if (typeof v === 'string') {
return v;
}
if (typeof v === 'object' && v !== null) {
const d = (v as { default?: unknown }).default;
if (typeof d === 'string') {
return d;
}
}
return undefined;
};
main = resolveCondition(dotExport.import) ?? resolveCondition(dotExport.default);
}
}
if (typeof main !== 'string') {
Expand Down
1 change: 1 addition & 0 deletions src/vs/base/node/crypto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ export async function checksum(path: string, sha256hash: string | undefined): Pr
const done = createSingleCallFunction((err?: Error, result?: string) => {
input.removeAllListeners();
hash.removeAllListeners();
input.destroy();

if (err) {
reject(err);
Expand Down
11 changes: 11 additions & 0 deletions src/vs/base/test/node/crypto.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

import * as assert from 'assert';
import * as fs from 'fs';
import { tmpdir } from 'os';
import { join } from '../../common/path.js';
Expand Down Expand Up @@ -33,4 +34,14 @@ flakySuite('Crypto', () => {

await checksum(testFile, 'a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e');
});

test('checksum mismatch rejects', async () => {
const testFile = join(testDir, 'checksum-mismatch.txt');
await Promises.writeFile(testFile, 'Hello World');

await assert.rejects(
() => checksum(testFile, 'wrong-hash'),
/Hash mismatch/
);
});
});
Loading
Loading