Commit Graph

9034 Commits

Author SHA1 Message Date
Peter Steinberger
ac18768c19 test: tighten browser download path assertion 2026-05-09 03:31:54 +01:00
Peter Steinberger
e855091a58 test: tighten discord monitor object assertions 2026-05-09 03:23:12 +01:00
Peter Steinberger
a6dee24c3f test: tighten qa channel context assertion 2026-05-09 03:06:42 +01:00
Peter Steinberger
af5eca9371 test: tighten memory wiki schema assertion 2026-05-09 03:02:03 +01:00
Peter Steinberger
6f575481e7 test: tighten qmd models absence assertion 2026-05-09 02:59:24 +01:00
Shakker
02e60e293f test: tighten memory cleanup assertions 2026-05-09 02:58:05 +01:00
Peter Steinberger
4fe43b9eaf test: tighten memory wiki absence assertion 2026-05-09 02:57:13 +01:00
Shakker
20a2ac3e5d test: tighten extension cleanup assertions 2026-05-09 02:56:17 +01:00
Peter Steinberger
b9bd578d7c test: tighten msteams feedback absence assertion 2026-05-09 02:56:04 +01:00
Peter Steinberger
880c094407 fix: preserve copilot gpt-5.5 fallback metadata 2026-05-08 21:55:18 -04:00
Eduardo Piva
75405f64d0 github-copilot: live catalog discovery via /models + add gpt-5.5
The plugin's `catalog.run` hook already exchanged a GitHub OAuth token
for a short-lived Copilot API token and resolved the per-account baseUrl,
but it returned `models: []` and the bundled openclaw runtime relied
entirely on the static manifest catalog. That meant:

- Static `contextWindow` values were a conservative 128k for every
  model, far below reality (gpt-5.4/5.5 are 400k, claude-opus-4.6/4.7
  internal variants are 1M, claude-sonnet-4 is 200k, etc.).
- Newly published Copilot models (gpt-5.5, gpt-5.1*, gemini-3-pro-preview,
  the claude-opus-*-1m internal variants, etc.) didn't appear at all
  until the manifest was patched.
- Per-account entitlement was invisible — every user saw the same
  hardcoded 22-model list regardless of plan.

Wire it up:

- Add `fetchCopilotModelCatalog` in `extensions/github-copilot/models.ts`.
  Calls `${baseUrl}/models` with the resolved Copilot API token and the
  same Editor-Version / Copilot-Integration-Id headers used elsewhere in
  the plugin. Maps each entry to a `ModelDefinitionConfig`:
  - `contextWindow` ← `capabilities.limits.max_context_window_tokens`
  - `maxTokens`     ← `capabilities.limits.max_output_tokens`
  - `input`         ← `["text", "image"]` if `supports.vision`, else `["text"]`
  - `reasoning`     ← `Array.isArray(supports.reasoning_effort) && supports.reasoning_effort.length > 0`
  - `api`           ← `anthropic-messages` for Anthropic vendor or claude*
                      ids; otherwise `openai-responses`
  Filters out non-chat objects (embeddings) and internal routers
  (`accounts/...` ids). Dedupes by id. 10s default timeout.

- Update the `catalog.run` hook in `extensions/github-copilot/index.ts`
  to call the new function after token-exchange and return the live
  results. On any HTTP/parse failure it falls back to `models: []`,
  which preserves the static manifest catalog as the visible fallback —
  no behavior regression for users with `discovery.enabled: false` or
  in offline scenarios.

- Bump `modelCatalog.discovery."github-copilot"` from `"static"` to
  `"refreshable"` in `openclaw.plugin.json` so the catalog hook is
  actually invoked at runtime. Without this the discovery infrastructure
  treats the provider as static-only and never calls `catalog.run`.

- Add `gpt-5.5` to the static manifest catalog and `DEFAULT_MODEL_IDS`
  with the correct values from the API (`contextWindow: 400000`,
  `maxTokens: 128000`, `reasoning: true`, multimodal). This means users
  on `discovery.enabled: false` still get gpt-5.5 visible without
  needing to override `models.providers.github-copilot.models` in their
  config.

Tests added (5, all passing alongside the existing 24):

- `fetchCopilotModelCatalog` maps a representative `/models` response
  (chat models incl. an internal 1M-context Anthropic variant, a router,
  an embedding) to the right `ModelDefinitionConfig` shape with real
  context windows.
- baseUrl trailing slash is normalized.
- Duplicate ids in the API response are deduped (first wins).
- Non-2xx HTTP raises so the caller can fall back to the static catalog.
- Empty token / baseUrl reject synchronously without calling fetch.

Targeted run: `pnpm test extensions/github-copilot/models.test.ts` →
29/29 pass. `pnpm exec oxfmt --check extensions/github-copilot/` clean.
`pnpm tsgo:core` clean.

Real-world proof:

Built locally and dropped the resulting tarball into a downstream
container with `gh auth login --hostname github.com` (Copilot
subscription on the linked account). Before this change,
`openclaw models list --provider github-copilot` returned the 22-entry
static catalog with every entry showing 128k context. After this change,
the same command (with `--refresh`) returns 30 entries with API-accurate
context windows including the new gpt-5.1 family, the claude-opus-*-1m
variants, and the corrected `gemini-3*-preview` ids.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 21:55:18 -04:00
Peter Steinberger
8111ae40c0 test: tighten qqbot symlink assertion 2026-05-09 02:55:01 +01:00
Peter Steinberger
c958716d10 test: dedupe browser download absence assertions 2026-05-09 02:42:52 +01:00
Peter Steinberger
68d222456f test: dedupe memory reindex absence assertions 2026-05-09 02:41:51 +01:00
Peter Steinberger
37ffc96b60 test: dedupe qa lab file absence assertions 2026-05-09 02:40:49 +01:00
Peter Steinberger
72d811f39f test: dedupe mantis video absence assertions 2026-05-09 02:39:47 +01:00
Peter Steinberger
5e055e8887 test: dedupe signal download absence assertions 2026-05-09 02:38:50 +01:00
Peter Steinberger
737d5253e5 test: dedupe qa matrix absence assertions 2026-05-09 02:24:01 +01:00
Kevin Lin
d922edd861 Fix Codex plugin migration selection UX (#79160)
* fix: prompt for codex plugin migration selection

* test: use shared ANSI stripping in migrate output test

* fix(codex): guard migrated plugins with guardian mode

* fix(codex): keep plugin migration interactive after skill skip

* fix(codex): keep migration plugins on default app server

* fix(codex): exit cleanly when migration selection is empty

* fix(codex): remove migration test non-null assertions

* test(codex): drop auth profile migration fixture
2026-05-08 18:17:41 -07:00
Peter Steinberger
146ca9519e test: dedupe openshell mirror absence assertions 2026-05-09 02:07:21 +01:00
Omar Shahine
85ebb4c471 feat(imessage): per-group systemPrompt (parity with other channels) (#79383)
Merged via squash.

Prepared head SHA: 2eecd01ed8
Co-authored-by: omarshahine <10343873+omarshahine@users.noreply.github.com>
Co-authored-by: omarshahine <10343873+omarshahine@users.noreply.github.com>
Reviewed-by: @omarshahine
2026-05-08 21:02:39 -04:00
Peter Steinberger
30e870e424 test: tighten e2e absence assertions 2026-05-09 02:02:28 +01:00
Peter Steinberger
b28e29c4f3 test: tighten browser cdp transport failure assertions 2026-05-09 01:49:26 +01:00
Peter Steinberger
f5e053e485 test: tighten openshell boundary assertions 2026-05-09 01:46:12 +01:00
Peter Steinberger
387846f1c7 test: tighten browser proxy file absence assertion 2026-05-09 01:44:15 +01:00
Peter Steinberger
bf273c451a test: tighten inworld tts failure assertion 2026-05-09 01:42:51 +01:00
Peter Steinberger
612e72ebbd test: tighten mattermost retry failure assertions 2026-05-09 01:41:35 +01:00
Peter Steinberger
15d33cba9c test: tighten discord proxy abort assertions 2026-05-09 01:40:15 +01:00
Peter Steinberger
9cb204bdc2 test: tighten googlechat auth redaction assertion 2026-05-09 01:38:46 +01:00
Peter Steinberger
b584cadd9d test: tighten imessage coalesce guard assertion 2026-05-09 01:36:18 +01:00
Peter Steinberger
7674df0eb8 test: tighten nostr negative key assertions 2026-05-09 01:31:40 +01:00
Peter Steinberger
65b490c7cd test: tighten whatsapp channel guard assertion 2026-05-09 01:26:06 +01:00
Shakker
ed11b64cbf test: remove active memory hard deadline timer 2026-05-09 01:19:29 +01:00
Shakker
b945680f7e test: clear feishu drive cleanup timers 2026-05-09 01:12:43 +01:00
Shakker
d857b83d5a test: clear feishu outbound cleanup timer 2026-05-09 01:11:48 +01:00
Shakker
b2645c7354 test: clear feishu comment handler timer 2026-05-09 01:11:00 +01:00
Peter Steinberger
91eecba6e5 test: simplify openai live model parsing 2026-05-09 01:10:38 +01:00
Shakker
7e6771a6b0 test: clear feishu comment dispatcher timer 2026-05-09 01:09:54 +01:00
Peter Steinberger
7e733bedab test: simplify copilot live text extraction 2026-05-09 01:09:27 +01:00
Peter Steinberger
d47b64609c test: simplify xai live error messages 2026-05-09 01:08:12 +01:00
Vincent Koc
a834175e01 chore(imessage): remove bluebubbles code comments 2026-05-09 08:03:02 +08:00
Shakker
2157c2537f test: clear qa bus abort timeout guard 2026-05-09 01:02:10 +01:00
Shakker
c9e85fdbd6 test: clear ollama stream timeout guard 2026-05-09 01:01:04 +01:00
Shakker
105cc8d18a test: clear browser open tab timeout guard 2026-05-09 00:59:36 +01:00
Peter Steinberger
06f8093e68 test: simplify openshell failure message assembly 2026-05-09 00:58:46 +01:00
Vincent Koc
6aa7e371e4 test(memory): avoid control-regex lint 2026-05-09 07:52:36 +08:00
Peter Steinberger
265a47d21e test: dedupe codex transcript mirror parsing 2026-05-09 00:45:27 +01:00
Vincent Koc
ccfbd96082 test(memory): normalize styled CLI status assertions 2026-05-09 07:44:13 +08:00
Vincent Koc
c6d4f1fab8 fix(runtime): preserve reviewed routing and transcript behavior (#79076)
* fix(runtime): preserve reviewed routing and transcript behavior

* docs(changelog): note runtime review fixes
2026-05-09 07:40:43 +08:00
Shakker
b5eb9ea552 test: tighten qa lab server polling 2026-05-09 00:38:40 +01:00