Commit Graph

293 Commits

Author SHA1 Message Date
Rain 110eb787a1 fix(github-copilot): preserve catalog thinking efforts in requests (#107834)
* fix(github-copilot): preserve catalog thinking efforts in requests

Unify discovered and bundled capability mapping with the provider thinking policy. Preserve supported xhigh/max Responses efforts and map minimal to the supported low minimum, while respecting explicit account opt-outs and transport limits.

Fixes #107792

Co-authored-by: Pluviobyte <Pluviobyte@users.noreply.github.com>

* fix(github-copilot): resolve nullable thinking policy transport

Accept the public policy API context and resolve missing transports before enforcing Claude and Gemini effort restrictions. Cover undefined and null API values without changing explicit Responses routes.

* refactor(github-copilot): normalize manifest models as one catalog

Use the canonical batch model provider builder after the single-row helper was removed on main. Preserve model transport and compatibility decoration without a legacy API shim.

* refactor(github-copilot): decorate owned catalog rows in place

Keep the normalized manifest batch as the sole owner of runtime rows and apply transport metadata directly, avoiding redundant row copies.

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Pluviobyte <Pluviobyte@users.noreply.github.com>
2026-08-26 21:09:21 -07:00
Peter Steinberger 4b287caac3 fix(memory): stop false Copilot index mismatch warnings (#130603)
Share provider-owned canonical model projection across cold identity and creation, keep undiscovered models unknown, and preserve strict initialized identity checks. Consolidate obsolete lookup and table-existence paths.

Co-authored-by: 1052326311 <65798732+1052326311@users.noreply.github.com>
2026-08-26 19:50:15 -07:00
Peter Steinberger 67d22a58ac refactor(embeddings): unify provider contract (#130506)
* refactor(embeddings): unify provider contract

* test(plugins): declare embedding type bridge

* test(memory): migrate embedding fixtures
2026-08-26 18:20:48 -07:00
chengzhichao-xydt ff158567f4 fix(github-copilot): add timeout to embedding model discovery (#102886)
* fix(github-copilot): add timeout to embedding model discovery

* fix(github-copilot): include timeoutMs in discovery request test type

---------

Co-authored-by: chengzhichao-xydt <chengzhichao-xydt@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-26 13:46:40 -07:00
Mitch Devenport a27f7fe56c fix(github-copilot): allow xhigh and max thinking levels on claude-opus-5 (#129690)
* fix(github-copilot): allow xhigh and max thinking levels on claude-opus-5

Copilot users could not select thinking levels above `high` on
`claude-opus-5`. Both `/think xhigh` and `/think max` were rejected and the
picker offered only up to `high`, even with `thinkingDefault: "max"` set.

The bundled manifest entry declared no `supportedReasoningEfforts`, so
`resolveCopilotThinkingLevelMap()` in extensions/github-copilot/models.ts
returned undefined and `clampThinkingLevel()` filtered both tiers out.

A user-side `models.providers` overlay cannot fix this: models.ts
short-circuits `resolveCopilotForwardCompatModel()` when the model is
already in the bundled registry, so the only path that applies a
`thinkingLevelMap` is never reached. The native Claude fallback does not
apply either, since model-utils.ts only consults it for
`api === "anthropic-messages"` routes and Copilot resolves through its
OpenAI-compatible transport.

Declares the effort list the same way extensions/opencode already does for
the same model id. Verified on a live account: after this change `xhigh`
and `max` are selectable and accepted at runtime.

* test(github-copilot): cover Opus 5 manifest reasoning levels

---------

Co-authored-by: mitch <mitch@mitchs-MacBook-Pro.local>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-26 13:20:21 -07:00
Peter Steinberger b5dde35887 fix(github-copilot): configured account order is ignored (#129978)
* fix(github-copilot): honor configured account order

Fixes #46031

* test(plugin-sdk): preserve provider discovery runtime exports

Follow-up to #46031

* fix(github-copilot): honor ordered OAuth accounts and tenants

* fix(github-copilot): bind OAuth credentials to their account domain
2026-08-26 06:32:24 -07:00
New Future 8ed79aab02 fix(github-copilot): preserve reasoning during tool calls (#112659)
* fix(github-copilot): preserve active encrypted reasoning

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(github-copilot): normalize null reasoning status

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* test(github-copilot): cover adjacent reasoning cleanup

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-26 01:13:37 -07:00
Xiaoyu b4de5fdd3a fix(copilot): apply Anthropic replay policy to Copilot Claude (#125015)
Copilot routes Claude over api.*.githubcopilot.com/v1/messages, a real
Anthropic Messages endpoint, but its replay policy returned only
`{ dropThinkingBlocks: true }`. resolveTranscriptPolicy skips the core
transport-family fallback entirely once a provider registers
buildReplayPolicy, so validateAnthropicTurns stayed false and core never
stripped a trailing assistant prefill turn. The next request after
auto-compaction was rejected with 400 "This model does not support
assistant message prefill".

Dispatch on ctx.modelApi and reuse buildStrictAnthropicReplayPolicy for
the Anthropic transport. dropThinkingBlocks stays unconditional so the
#81520 fix holds, and tool-call ids stay owned by wrapCopilotAnthropicStream
so the persisted transcript is not rewritten.
2026-08-25 22:59:39 -07:00
Peter Steinberger 992948356f fix(secrets): fail closed for configured references (#127669)
* fix(secrets): fail closed for configured references

Keep explicit SecretRefs authoritative across Gateway auth, onboarding, probes, channel credentials, outbound sends, and GitHub Copilot discovery/embeddings. Ambient credentials remain available only when no reference owns the surface.

* test(secrets): align gateway fallback expectations

* test(providers): remove load-sensitive stream timing

* test(xai): normalize stream capture failures

* fix(copilot): preserve direct auth precedence

* test(ollama): keep progressing streams alive

* test(models): mark resolved config fixtures

* fix(models): drop stale probe import
2026-08-21 18:00:28 -07:00
Peter Steinberger 715c379fd9 refactor(config): consolidate context budget to one per-model knob (#124665)
* refactor(config): consolidate context budget settings

* test(config): type legacy context fixtures

* test(config): align context budget fixtures

* fix(status): honor runtime context discovery

* docs(config): clarify context budget fallbacks

* fix(ci): resolve context budget lint failures

* test(ci): align context budget shard fixtures

* fix(models): preserve catalog context metadata

* fix(config): surface context migration diagnostics

* test(plugin-sdk): keep live catalog coverage focused
2026-08-16 10:05:01 -07:00
Peter Steinberger 6aa27d6ecd refactor: retire August compat windows (embedding API, pi aliases, target parser, spawning hook, setup exports, WhatsApp inbound aliases) (#124416)
* refactor(plugin-sdk): retire embedded Pi aliases

* refactor(channels): retire explicit target compatibility

* refactor(plugins): retire subagent spawning hook

* refactor(plugin-sdk): retire shipped channel setup exports

* refactor(whatsapp): retire inbound callback aliases

Proof: focused build and WhatsApp E2E green; broad WhatsApp suite 188/189 files green. extensions/whatsapp/src/monitor-inbox.policy.test.ts flakes only in the parallel batch and passes isolated (10/10).

* refactor(plugin-sdk): retire memory embedding registrar

Migrate every bundled provider and manifest to registerEmbeddingProvider and contracts.embeddingProviders. Preserve memory-specific batching, local-service acquisition, index identity, and auto-selection through the canonical generic registry adapter, then remove the parallel registrar, registry, diagnostics, contracts, tests, and docs.

* chore(plugin-sdk): tighten retired surface budgets

Pin the post-retirement public SDK surface to 144 entrypoints, 4,312 exports, 2,564 callable exports, and 1,133 deprecated exports; agent-harness-runtime now permits exactly nine deprecated exports.
2026-08-15 22:43:47 -07:00
Peter Steinberger cd0fb355c7 refactor(plugin-sdk): remove retired Copilot login chain (#122988)
* refactor(plugin-sdk): remove retired Copilot login chain

* chore(plugin-sdk): refresh generated API baselines

* build(github-copilot): remove unused prompt dependency

* chore(plugin-sdk): reconcile API baselines after rebase
2026-08-12 22:07:33 -07:00
Peter Steinberger b080dd1e76 refactor: consolidate coercion contracts (#122458)
* refactor: consolidate coercion contracts

Centralize exact string, record, numeric, date, Boolean, argument, and structured-error coercions while preserving call-site semantics.

Migrate canonical-name collisions and deprecated internal SDK bypasses, deleting 55 net production/tooling lines. Expand declaration ownership enforcement to 101 allowed helpers and add a narrow export-completeness audit.

* fix: preserve standalone script coercions

Keep copied Control UI tooling self-contained and retain the trusted release harness module-relative source seam when the harness runs against an old target cwd.
2026-08-11 23:26:37 -07:00
Peter Steinberger 1afb5e64a5 improve: reduce provider auth parity test time (#122445)
* test: trim provider auth parity runtime probes

* test: keep parity shards in tooling owner

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-08-11 22:37:06 -07:00
Peter Steinberger 2a57e1a1af fix(github-copilot): preserve cumulative poll backoff (#103434) 2026-08-09 04:50:18 -07:00
Peter Steinberger e1ec95dcbf refactor(auth): dedupe profile upserts and approval resolvers (#120831)
* refactor(auth): dedupe profile upserts and approval resolvers

* test(auth): mock canonical locked upsert

* test(auth): mock locked upsert during onboarding
2026-08-08 21:14:16 -07:00
Peter Steinberger 10c7f005be refactor(github-copilot): narrow runtime facade (#120544)
* refactor(github-copilot): narrow runtime facade

* style(github-copilot): format runtime exports
2026-08-08 02:56:12 -07:00
Peter Steinberger 48639663b0 chore(release): prepare 2026.8.1 (#120375) 2026-08-07 18:44:12 -07:00
Peter Steinberger bc0c3fcd63 refactor(providers): shared generated-media download guard and binary-response adoption (#120351)
* fix(agents): cancel rejected provider binary bodies

* refactor(providers): share generated media downloads

* refactor(providers): adopt payload patch stream wrapper

* fix(providers): preserve generated media helper contracts
2026-08-07 15:45:53 -07:00
Peter Steinberger c28b524f38 refactor(auth): move Copilot OAuth ownership to plugin (#118063)
* refactor(auth): move Copilot OAuth ownership to plugin

* test(auth): cover plugin-owned Copilot OAuth

* test(auth): align OAuth runtime mocks

* refactor(auth): extract session OAuth adapter

* refactor(auth): centralize session OAuth dispatch

* test(auth): type OAuth refresh mock

* chore(plugin-sdk): regenerate API baseline for provider oauth dispatch
2026-08-02 10:59:28 -07:00
juyaohuidt 096cd231ea fix(github-copilot): cancel unread device-flow error bodies before throwing (#112268)
* fix(github-copilot): cancel unread device-flow error bodies before throwing

postGitHubDeviceFlowForm now drops the unread response stream before it
raises on a non-OK HTTP status. GitHub OAuth error responses ship a JSON
body (`{error, error_description}`) that this helper never consumes, so
the underlying fetch connection previously stayed open holding the
payload until the caller's release() ran, keeping the device-flow socket
half-drained on every 4xx/5xx.

Mirrors the recently-merged qqbot/kilocode/tlon fixes for the same
'cancel body before throwing' pattern (#110008, #109950, #112059).

* style(github-copilot): clarify response release ordering

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-02 04:46:50 -07:00
Peter Steinberger de6bd7d1bc fix(copilot): prevent invalid Claude tool IDs from causing retries (#117789)
* fix(copilot): normalize Claude tool IDs before requests

* fix(copilot): preserve typed payload and stream contracts

* fix(copilot): preserve unique paired Anthropic tool IDs
2026-08-01 22:59:12 -07:00
Peter Steinberger 568ea29d2e refactor(plugins): inherit shared package boundary settings (#117474) 2026-08-01 09:11:09 -07:00
joshavant 23dbee9e38 fix(github-copilot): honor live model selection in guided setup 2026-07-30 21:15:10 -05:00
joshavant 94542eb872 fix(github-copilot): select available onboarding model 2026-07-30 21:15:10 -05:00
Peter Steinberger 99ec30b44b feat(plugins): catch code-mode drift between catalogs shipping the same model (#115183)
* feat(plugins): catch code-mode drift between catalogs sharing one model

Adds a contract test that groups bundled catalog rows by shared upstream
model and requires every row in a group to declare compat.codeMode once any
sibling does. Rows sharing a model id group automatically; rows under
different ids opt in with the new manifest-only `upstreamModel` marker.

Moves the kimi catalog into its manifest so the scan can see it, and records
the tier reseller catalogs were silently missing as explicit "capable".

* docs: regenerate docs map for the shared-model code-mode section
2026-07-28 08:52:21 -04:00
joshavant a706d49cdb refactor(github-copilot): own runtime request identity 2026-07-27 22:40:32 -05:00
joshavant 3da4ef3a6c fix(github-copilot): format legacy oauth credentials 2026-07-27 22:40:32 -05:00
joshavant fbd6b842f9 fix(github-copilot): authenticate fine-grained tokens 2026-07-27 22:40:32 -05:00
Leon-SK668 a90bef3970 fix(usage): guard malformed Copilot payloads (#110795)
Co-authored-by: Leon-SK668 <17695126+Leon-SK668@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-27 21:55:15 -04:00
Peter Steinberger caa01f4f5b refactor(providers): table-driven forward compat and manifest-derived contract tests (#113940)
* refactor(providers): share family forward compat resolution

* test(providers): derive runtime contracts from manifests

* test(providers): validate manifest fixture inputs

* refactor(zai): narrow forward compat inputs
2026-07-25 18:09:37 -07:00
Peter Steinberger f703d803cc chore(models): curate all provider model catalogs to current-generation lineups (#113681)
* chore(models): fleet-wide provider catalog curation

* fix(models): sync provider runtime catalogs and tests with curated manifests

* test(models): align venice lifecycle assertions and copilot auth default with curated catalogs

* test(models): align catalog lifecycle contract checks
2026-07-25 07:21:17 -07:00
Peter Steinberger acd92f6a3d chore(deps): refresh repository dependencies (#112453)
* build(deps): update QA broker dependency

* build(deps): refresh repository dependencies

* build(deps): reconcile rebased shrinkwraps

* test(plugins): remove stale loader test state

* test(deps): stabilize updated dependency coverage

* fix(swift): use caller-isolated TaskLocal overload

* build(deps): regenerate rebased shrinkwraps

* test(msteams): preserve DNS validation in fetch helper

* fix(deps): avoid vulnerable optional image stack

* test(deps): validate generated LRU override

* refactor(ui): extract chat resizable divider

* test(ui): update divider ownership path

* fix(matrix): retain restart-compatible SDK

* style(cron): format update test
2026-07-23 16:17:13 +00:00
Peter Steinberger edecdbd05e refactor(config): config-surface reduction tranche 3 — product consolidations (review request) (#111527)
* refactor(config): consolidate media model lists

* refactor(config): unify memory configuration

* refactor(config): consolidate TTS ownership

* refactor(config): move typing policy to agents

* refactor(config): retire product-level config surfaces

* refactor(config): share scoped tool policy type

* chore(config): refresh generated baselines

* fix(config): honor agent typing overrides

* fix(config): migrate sibling config consumers

* refactor(infra): keep base64url decoder private

* fix(config): strip invalid legacy TTS values

* chore(config): refresh rebased baseline hash

* fix(doctor): route legacy messages.tts.realtime voice to talk during tts move

* refactor(config): polish final layout names

* refactor(config): freeze retired tuning defaults

* feat(config): add fast mode default symmetry

* refactor(config): key agent entries by id

* docs(config): update final layout reference

* test(config): cover final layout migrations

* chore(config): refresh final layout baselines

* fix(config): align final layout runtime readers

* fix(config): align remaining readers

* fix(config): stabilize final layout migrations

* fix(config): finalize config projection proof

* fix(config): address final layout review

* docs(release): preserve historical config names

* fix(config): complete keyed agent migration

* fix(config): close final migration gaps

* fix(config): finish full-branch review

* fix(config): complete runtime secret detection

* fix(config): close final review findings

* fix(config): finish canonical docs and heartbeat migration

* fix(config): integrate latest main after rebase

* refactor(env): isolate test-only controls

* refactor(env): isolate build and development controls

* refactor(env): collapse process identity indirection

* refactor(env): remove duplicate config and temp aliases

* docs(env): define the operator-facing allowlist

* ci(env): ratchet production variable count

* fix(env): remove stale provider helper import

* fix(env): make ratchet sorting explicit

* test(env): keep test seam in dead-code audit

* test(env): cover ratchet growth and boundary; document surface budgets

* docs(config): document tier-eval consolidations

* docs(config): clarify speech preference ownership

* test(memory): align retired tuning fixtures

* refactor(memory): freeze engine heuristics

* refactor(config): apply tier-eval tranche

* refactor(tts): move persona shaping to providers

* refactor(compaction): move prompt policy to providers

* test(config): align hookified prompt fixtures

* chore(deadcode): classify test-only exports

* chore(github): remove unused spawn helper

* chore(deadcode): classify queue diagnostics

* chore(deadcode): remove unused lane snapshot export

* chore(plugin-sdk): ratchet consolidated surface

* fix(config): integrate latest main after rebase
2026-07-21 20:28:43 -07:00
ZOOWH b16c6c75ce fix(github-copilot): redact embedding API errors (#109177)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-21 08:16:02 -07:00
Dallin Romney c3c665f7f6 fix: make Copilot token exchange 403 errors actionable (#112025)
* fix: explain GitHub Copilot 403 recovery

* fix: keep control UI log hint internal

* fix: clarify log viewing hint
2026-07-21 17:11:25 +09:00
Chunyue Wang 752f059753 fix(github-copilot): strip encrypted_content from reasoning replay items (#95493)
* fix(github-copilot): strip encrypted_content from reasoning replay items

* refactor(github-copilot): name replay sanitizer accurately

Use one provider-boundary sanitizer name for both connection-bound IDs and session-bound encrypted reasoning, and assert the final stream payload drops ciphertext.\n\nCo-authored-by: openperf <16864032@qq.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 22:31:39 -07:00
Peter Steinberger 4ef4323db9 fix: keep memory SecretRef failures agent-scoped (#109977)
* test: normalize Copilot token fixture

* test: normalize Copilot auth fixtures

* test: use explicit Copilot placeholders

* test: use neutral Copilot fixture host

* refactor: clarify Copilot embedding auth values

* refactor: keep Copilot profile result intact

* test: normalize embedding credential fixtures

* fix: isolate memory SecretRef owners

* refactor: isolate memory secret collection
2026-07-17 14:44:03 +01:00
Peter Steinberger 662e79d574 test(release): harden extension prerelease contracts 2026-07-17 13:43:12 +01:00
Peter Steinberger e693d279b3 fix: Bedrock ARN region routing, Copilot device-flow pacing, TUI input fixes (#109740)
* build(deps): bump terminal UI library to 0.80.9

* fix(plugins): Bedrock ARN region routing, stop-reason detail, and Copilot device-flow pacing
2026-07-17 01:09:29 -07:00
Wynne668 f63ea72f28 fix(github-copilot): prevent failed usage checks from holding connections (#109540)
* fix(github-copilot): release failed usage responses

* test(github-copilot): preserve usage HTTP errors

Co-authored-by: ZengWen-DT <ceng.wen@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 22:09:53 -07:00
xingzhou 2b4b688581 fix(github-copilot): release failed catalog responses (#109071) 2026-07-16 17:07:24 -07:00
Peter Steinberger 349f78776d fix(models): refresh bundled provider catalogs (#109410)
* fix(models): refresh bundled provider catalogs

* docs(models): refresh generated docs map

* fix(xiaomi): keep provider helper private

* chore(release): defer catalog release note
2026-07-16 16:47:25 -07:00
xingzhou 5a494acd64 fix(agents): tool calls lose arguments when Responses item IDs rotate (#108630)
* fix(agents): tool calls lose arguments when Responses item IDs rotate

* test(github-copilot): prove rotating tool item IDs

Co-authored-by: zhang-guiping <zhang.guiping@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 23:58:34 -07:00
Peter Steinberger e7cba0e4d5 fix: provider dead exports no longer block changed checks (#108592)
* fix(ci): clean provider dead exports

* test(extensions): satisfy provider contract types

* refactor(openai): tighten provider runtime factory
2026-07-15 22:33:54 -07:00
Peter Steinberger 46fad5296a refactor(github-copilot): own runtime auth in provider (#108096) 2026-07-15 00:19:44 -07:00
Peter Steinberger c51bb5ed20 test(github-copilot): align token endpoint fixtures (#108047)
* test(github-copilot): align token endpoint fixtures

* docs: refresh generated docs map
2026-07-14 23:25:49 -07:00
Peter Steinberger f81f9d8570 chore: enforce max-lines suppression ratchet (#107315)
* ci: enforce max-lines suppression ratchet

* chore: prune stale max-lines suppression

* fix: close max-lines ratchet enforcement gaps

* fix: harden max-lines ratchet checks

* fix(ci): satisfy max-lines ratchet checks

* style: format max-lines declarations

* fix(ci): match oxlint suppression grammar

* test: isolate max-lines git fixtures

* chore: prune resolved max-lines debt

* test: skip newline path fixture on Windows

* fix: harden max-lines suppression ratchet

* chore: refresh max-lines baseline

* fix: close max-lines ratchet bypasses

* fix: derive ratchet base from PR merge tree

* fix: support older Git in staged ratchet

* fix: align max-lines declarations and baseline

* chore: refresh max-lines baseline for current main

* fix: exclude generated wizard locales from max-lines

* chore: prune resolved max-lines debt
2026-07-14 09:27:02 -07:00
Galin Iliev 93bad8de2a fix: restore GitHub Copilot turns and account context limits (#106198)
* fix: restore GitHub Copilot runtime routing

Refs #106170

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 6053811e-f081-436b-8741-54c5cab6c016

* fix: bind Copilot metadata to resolved credentials

Refs #106170

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 6053811e-f081-436b-8741-54c5cab6c016

* refactor: split Copilot runtime helpers

* fix: satisfy Copilot runtime static gates

* fix: satisfy Copilot runtime lint

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Galin Iliev <galin.iliev@microsoft.com>
2026-07-13 16:04:34 -07:00
NIO 92db88e36b fix(github-copilot): bound Copilot token exchange fetch timeout (#104488)
* fix(github-copilot): bound Copilot token exchange fetch timeout

* fix(github-copilot): harden token exchange deadline

Co-authored-by: hugenshen <hu.genshen@xydigit.com>

* chore: remove release-owned changelog entry

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-12 15:24:39 +01:00