fix(copilot): Free plan usage, tall answers in agent read, page-key fallback, review nits

Review of 8659ba25..be987fbb:

- Usage: a Free account answers premium_interactions {entitlement: 0, remaining: 0,
  percent_remaining: 0, unlimited: false, has_quota: false}, which read as 100% used. The parser now
  returns null when has_quota is false or the entitlement is not positive, with that payload as a
  fixture. Free meters chat (200) and completions (2000) too, so the comment no longer says they
  are unlimited on every plan.
- agent read: rows were skipped until a `❯ <prompt>` row, so an answer taller than the pane
  (prompt scrolled off the top) read as "". With no prompt row AND no banner / trust dialog on
  screen, the rows above the composer are now the tail of the last answer. Text typed in the
  composer (a prompt-shaped row between the two rules) is not a prompt row.
- Page keys: measured on 1.0.95 in tmux that Copilot pages on PageUp/PageDown (three PageUp moved
  lines 109-140 to 010-042, PageDown returned) as well as on SGR wheel reports, so copilot joins
  claude and opencode in _localScrollbackIsHollow(); the stale-tracking-flag fallback the comment
  and docs describe is now true, for the main pane and a TerminalTile (same function), with tests.
- X-GitHub-Api-Version is 2022-11-28, a version GitHub supports (verified against the live
  endpoint); readPlanUsageTelemetryEnabled() is checked before isCopilotAvailable() so a switched-off
  chip skips the resolver probe too.
- Palette label for Copilot in panels-ui.js; stale comments in types/session.ts and stock.ts.
- Docs: Past Sessions continues with --continue (resumeSessionId is for API callers), nothing sets
  continueSession on a respawn, and only a tab name the user set is passed as --name; the usage
  wording for Free; the wheel and mouse-strip paragraphs in CLAUDE.md and
  architecture-invariants; the changeset describes the whole feature.
This commit is contained in:
Devvyn committed 2026-10-18 00:47:54 +08:00
1 parent 5b77c271b0
commit 740474ebca
13 files changed
+156 -31

No files matched your search

+6 -6
View File
@@ -283,10 +283,10 @@ Copilot's own Manual Approval mode. Model, permission mode and the rest are also
inside its TUI.
**Options and resume.** The model picked in the Run menu goes as `--model`. A session from
Past Sessions resumes with `--resume <id>`, and a respawn continues with `--continue`. The
tab's name is passed as `--name`, so Copilot's own session list reads like your tabs;
Copilot refuses `--name` together with `--resume`/`--continue`, so a resumed session simply
keeps the name it had.
Past Sessions continues with `--continue`, which resumes the most recent Copilot conversation
in that directory. A tab name you set yourself is passed as `--name`, so Copilot's own session
list reads like that tab (an automatic `w1-myapp` name is not pinned); Copilot refuses `--name`
together with `--resume`/`--continue`, so a continued session keeps the name it had.
**Your own endpoint.** With [custom model endpoints](Custom-Model-Endpoints) on, a saved
endpoint appears in the Run menu for Copilot. It is launched with Copilot's BYOK variables
@@ -306,8 +306,8 @@ swipe on a phone, scroll Copilot's own transcript; Shift+wheel scrolls Codeman's
premium requests used. The tooltip shows the counts (for example `1215 of 5000 requests`) and
the reset date. It is read from GitHub's `copilot_internal/user` endpoint with Copilot's own
token, every 10 minutes, only while Copilot is installed and signed in and the chip is on. That
endpoint is not part of GitHub's documented API: if it fails or your plan is unlimited, the row
is simply absent.
endpoint is not part of GitHub's documented API: if it fails, or your plan has no premium
quota (Free) or an unlimited one, the row is simply absent.
**MCP servers.** [MCP server sync](Settings-Reference) includes Copilot's
`~/.copilot/mcp-config.json` (relocated by `COPILOT_HOME`), as a target and a source.