Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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 .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,10 @@ Use `scripts/test.sh` (or `scripts\test.bat` on Windows) for unit tests and `scr

## Coding Guidelines

### Markdown

- Do not hard-wrap Markdown prose to a fixed line width. Keep each paragraph on one source line and let the editor or renderer wrap it naturally. Preserve structural line breaks in lists, tables, code blocks, and intentional Markdown hard breaks.

### Indentation

We use tabs, not spaces.
Expand Down
5 changes: 5 additions & 0 deletions .github/skills/agent-host-logs/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ python3 .github/skills/agent-host-logs/scripts/extract.py "<archive>.zip"

The final line gives the temporary extraction path. Work from that folder and delete only that exact folder when finished.

Desktop ZIP exports keep host-owned logs compressed inside `host-logs.zip`, alongside the client-owned logs and sidecars. If that entry is present, run the same extractor on `<extracted-folder>/host-logs.zip` and inspect both extraction folders. The host archive contains `events.jsonl`, provider logs, Agent Host process logs, and Mission Control transport logs. Folder exports place these files directly in the export folder.

Exports remain cancellable while collecting and saving logs. The final destination swap disables Cancel until it finishes or restores the previous export. If restoration fails, the error identifies the backup holding the previous export. Partial host-log collection or copying produces a warning alongside the saved client logs.

Files are collected best-effort, so a valid bundle may contain only some of these:

```text
Expand Down Expand Up @@ -47,6 +51,7 @@ Window/client <-> AHP <-> Agent Host process <-> Copilot SDK

| Path | What it shows |
|---|---|
| `host-logs.zip` | Compressed host-owned portion of a desktop export. Extract it separately to access the host files described below. |
| `events.jsonl` | Persisted Copilot SDK events for the selected session: turns, messages, tools, permissions, hooks, skills, and subagents. It can cover a much longer period than the other logs. |
| `usage.jsonl` | Client-captured token/credit usage, one record per model call (`turnId`, model, input/output/cache tokens, cumulative `totalNanoAiu`). The SDK's `assistant.usage` event is ephemeral and never reaches `events.jsonl`, so this is the only per-call usage record. Present only when agent-host debug logging was on. |
| `customizations.json` | Snapshot of the skills/hooks/agents/MCP servers loaded for the session. The SDK's `session.*_loaded` events are ephemeral, so this is the only record of what was actually active. Present only when agent-host debug logging was on. |
Expand Down
18 changes: 6 additions & 12 deletions .github/skills/design-philosophy/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,7 @@ The UI should read like a person talking. Prefer a word to a mystery glyph; writ
> **Worked example - a boxed-in toolbar**
> - **See:** a toolbar sits on a solid filled bar, separator lines between every button, the buttons pushed up against each other.
> - **Feeling:** not *Calm* - busy and boxed-in.
> - **Principle:** breaks *Quiet at rest* (the fill and separators are permanent
> chrome that hasn't earned its place) and *Room to breathe* (buttons jammed together).
> - **Principle:** breaks *Quiet at rest* (the fill and separators are permanent chrome that hasn't earned its place) and *Room to breathe* (buttons jammed together).
> - **Move:** let the bar read transparent at rest, drop the separators (one stroke - and here the answer is *no*), and space the buttons out on the ramp.
### Focused
Expand Down Expand Up @@ -143,13 +142,10 @@ Equivalent elements must look equivalent, because they pull from the same named
*Carried out by:* every move below - they *are* the shared scales. See especially [design tokens](#design-tokens), [the spacing ramp](#spacing-ramp), [the type ramp](#type-ramp), [icon sizes](#icon-sizes), [one stroke](#one-stroke).

> **Worked example - two mismatched dialogs**
> - **See:** two dialogs open side by side; one has 8px corners, the other 6px -
> both are floating overlays.
> - **See:** two dialogs open side by side; one has 8px corners, the other 6px - both are floating overlays.
> - **Feeling:** not *Consistent* - the UI feels like it's drifting.
> - **Principle:** breaks *Sameness signals sameness* (two equivalent surfaces look
> different for no reason) and *Elevation is encoded* (an overlay belongs on the Outer tier).
> - **Move:** point both at the Outer radius token; the 6px was a literal someone
> typed instead of naming the tier.
> - **Principle:** breaks *Sameness signals sameness* (two equivalent surfaces look different for no reason) and *Elevation is encoded* (an overlay belongs on the Outer tier).
> - **Move:** point both at the Outer radius token; the 6px was a literal someone typed instead of naming the tier.
### Delightful

Expand All @@ -166,10 +162,8 @@ A delight bug sounds like *"this transition is doing nothing for me"* (cut it) o
> **Worked example - a bouncing panel**
> - **See:** a side panel slides in with a 600ms bounce every time you toggle it.
> - **Feeling:** not *Delightful* (gimmicky) and not *Calm* (slow and shouty).
> - **Principle:** breaks *Delight earns its keep* - the bounce isn't doing a job,
> and the toggle is already obvious.
> - **Move:** if nothing needs orienting, cut the animation; if the panel's arrival
> genuinely needs explaining, replace it with a short, subtle, interruptible fade that honors `prefers-reduced-motion`.
> - **Principle:** breaks *Delight earns its keep* - the bounce isn't doing a job, and the toggle is already obvious.
> - **Move:** if nothing needs orienting, cut the animation; if the panel's arrival genuinely needs explaining, replace it with a short, subtle, interruptible fade that honors `prefers-reduced-motion`.
---

Expand Down
4 changes: 1 addition & 3 deletions .github/skills/doc-comments/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,4 @@ Review user's request and update code documentation comments in appropriate loca

## Cleanup Mode

If the user instructed you to "clean up" doc comments (e.g. by passing in "cleanup" as their prompt),
it is **very important** that you limit your changes to only fixing grammar, punctuation, formatting, and spelling mistakes.
**YOU MUST NOT** add new or remove or expand existing comments in cleanup mode.
If the user instructed you to "clean up" doc comments (e.g. by passing in "cleanup" as their prompt), it is **very important** that you limit your changes to only fixing grammar, punctuation, formatting, and spelling mistakes. **YOU MUST NOT** add new or remove or expand existing comments in cleanup mode.
15 changes: 5 additions & 10 deletions .github/skills/feedback-learning/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,7 @@ Preserve reusable knowledge in the smallest authoritative artifact. A correction
- Which paths or subsystem does it affect?

2. **Search before writing**
- Check applicable instructions, skills, design documents, tests, and scoped
learning files.
- Check applicable instructions, skills, design documents, tests, and scoped learning files.
- Update an existing rule instead of adding a duplicate.

3. **Classify the feedback**
Expand All @@ -39,18 +38,14 @@ Preserve reusable knowledge in the smallest authoritative artifact. A correction

4. **Generalize carefully**
- Preserve the principle, not the incident chronology.
- Do not include temporary symbol names, line numbers, or implementation
details unless they define the durable contract.
- Do not turn a single rejected implementation into a universal prohibition
without broader evidence.
- Do not include temporary symbol names, line numbers, or implementation details unless they define the durable contract.
- Do not turn a single rejected implementation into a universal prohibition without broader evidence.

5. **Record once**
- Design documents and tests are authoritative.
- A learning inbox entry is temporary. When promoted, remove the inbox entry
in the same change.
- A learning inbox entry is temporary. When promoted, remove the inbox entry in the same change.
- Never copy the same rule into a skill, instruction, and design document.
- Before adding an inbox entry, compact the target file using the maintenance
rules below.
- Before adding an inbox entry, compact the target file using the maintenance rules below.

6. **Validate**
- Confirm the destination applies to the affected path.
Expand Down
4 changes: 1 addition & 3 deletions .github/skills/policy-and-managed-settings/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,7 @@ Follow the matching guide:
- [Pre-1.133 permission-policy migration](./legacy-permission-policy.md)
- [Agent Host policy support and migration readiness](./policy-support-maintenance.md)

Use the support-maintenance guide when changing policy classifications,
applied-requirement predicates, or admin migration-readiness diagnostics. It
applies when reviewing an existing control as well as when adding a new one.
Use the support-maintenance guide when changing policy classifications, applied-requirement predicates, or admin migration-readiness diagnostics. It applies when reviewing an existing control as well as when adding a new one.

General rules:

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,7 @@ The schema is **nested**, whereas the VS Code bag is **flattened** to dot-paths
| `strictKnownMarketplaces` | array of source descriptors | most-restrictive-wins (empty array = lockdown) |

> **Current schema ↔ runtime divergence** (treat `managed-settings-schema.json` as the API source of truth, and keep the VS Code `managedSettings` declarations aligned with what the server actually projects into the bag):
> - `extraKnownMarketplaces`: the schema permits source kinds `github` / `git` /
> `directory`, but the VS Code normalizer only accepts `github` and `git` — `directory` (and any other kind) is dropped with a warning (`managedSettings.ts` `normalizeExtraKnownMarketplaces`; `IExtraKnownMarketplaceEntry` in `base/common/managedSettings.ts` only types `github`/`git`).
> - `extraKnownMarketplaces`: the schema permits source kinds `github` / `git` / `directory`, but the VS Code normalizer only accepts `github` and `git` — `directory` (and any other kind) is dropped with a warning (`managedSettings.ts` `normalizeExtraKnownMarketplaces`; `IExtraKnownMarketplaceEntry` in `base/common/managedSettings.ts` only types `github`/`git`).
>
> Note every **structured** key — `enabledPlugins`, `extraKnownMarketplaces`, `strictKnownMarketplaces` — is declared on its policy as **`{ type: 'string' }`**: the object/array value is carried as a JSON string in the bag and parsed back on read (see [Structured settings](#structured-objectarray-settings)). The *setting's* own `type` is the real shape — e.g. `chat.plugins.strictMarketplaces` is `['array', 'null']`, modeling the schema's array allowlist; only the bag-carrying type is `'string'`. That `'string'` is **required, not cosmetic**: `type` is a required field whose only allowed values are `'string' | 'number' | 'boolean'`, so omitting it or declaring `'object'` / `'array'` is a *compile* error; declaring `'number'` / `'boolean'` compiles but then fails projection validation at *runtime* (the JSON-string bag value flunks `typeof value === type`), so the key is dropped and silently never applies.

Expand Down
Loading