Commit Graph

9058 Commits

Author SHA1 Message Date
Shakker
3cc2c28f0e test: tighten app session empty assertions 2026-05-09 04:32:14 +01:00
Peter Steinberger
97b32e8271 test: tighten google meet cli gateway assertion 2026-05-09 04:31:15 +01:00
Shakker
67e1f1a6b2 test: tighten plugin config empty assertions 2026-05-09 04:30:16 +01:00
Peter Steinberger
535d70c202 test: tighten twitch setup validation assertions 2026-05-09 04:29:14 +01:00
Shakker
c6faba0713 test: tighten browser empty payload assertions 2026-05-09 04:28:18 +01:00
Peter Steinberger
d8daa71666 test: tighten brave response duration assertion 2026-05-09 04:28:07 +01:00
Peter Steinberger
9ae2abf100 test: tighten google meet oauth expiry assertion 2026-05-09 04:27:06 +01:00
Peter Steinberger
d0a41b1041 test: tighten tlon upload body assertions 2026-05-09 04:25:54 +01:00
Shakker
7d4f76fa5e test: tighten matrix empty state assertions 2026-05-09 04:25:34 +01:00
Peter Steinberger
7b6307ef7f test: tighten xai transcription error assertion 2026-05-09 04:24:51 +01:00
Shakker
880a542944 test: tighten channel plugin empty assertions 2026-05-09 04:24:16 +01:00
Peter Steinberger
1dd05923d6 test: tighten nextcloud talk status timestamp assertion 2026-05-09 04:23:54 +01:00
Peter Steinberger
2bdb774726 test: tighten tokenjuice middleware assertion 2026-05-09 04:22:45 +01:00
Shakker
9757a62397 test: tighten provider empty payload assertions 2026-05-09 04:22:31 +01:00
Peter Steinberger
5720aa08d2 test: tighten minimax image endpoint assertion 2026-05-09 04:10:28 +01:00
Peter Steinberger
441e1b2930 test: tighten minimax music header assertion 2026-05-09 04:09:30 +01:00
Peter Steinberger
dc36430df3 test: tighten mattermost retry delay assertion 2026-05-09 04:08:32 +01:00
Ayaan Zaidi
b66cc66440 fix(telegram): share bot api throttler 2026-05-09 08:27:39 +05:30
Omar Shahine
81e0a1a99b feat(imessage): inbound catchup (cursor + replay loop + monitor wiring) (#79387)
Closes #78649. Adds opt-in inbound iMessage catchup that recovers messages landing in chat.db while the gateway is offline (crash, restart, mac sleep). Mirrors the design of the retired BlueBubbles catchup, adapted for the imsg JSON-RPC chats.list + messages.history fetch path.

- Schema: new channels.imessage.catchup block with enabled / maxAgeMinutes (1..720) / perRunLimit (1..500) / firstRunLookbackMinutes (1..720) / maxFailureRetries (1..1000). Disabled by default — opt-in.
- Cursor + replay loop (extensions/imessage/src/monitor/catchup.ts): per-account state under <openclawStateDir>/imessage/catchup/. Walks rows oldest-first, advances on success/give-up, holds at failed.rowid - 1 when a failure is below maxFailureRetries (cannot leapfrog held failures even when later rows in the same batch succeed). Watermark floor for parse-rejected rows.
- Bridge (extensions/imessage/src/monitor/catchup-bridge.ts): live chats.list + per-chat messages.history fetch adapter; dispatch adapter routes through the live handleMessageNow path so allowlists / group policy / dedupe / echo cache behave identically on replayed and live messages. Watermark clamped to last dispatched rowid when the cap truncates.
- Monitor wiring (extensions/imessage/src/monitor/monitor-provider.ts): catchup runs once between watch.subscribe and the live dispatch loop when enabled. Bypasses the inbound debouncer for serial per-row dispatch.
- Echo-cache TTL bumped 2 min → 12 h so own outbound rows from before a gap are not re-fed as inbound on replay.
- Generated bundled-channel-config-metadata.generated.ts so the runtime AJV schema accepts the new catchup block.
- Docs: new "Catching up after gateway downtime" section + BlueBubbles migration parity update.

Tests: 322/322 in extensions/imessage/, including 5 regression tests covering the cursor-leapfrog, parse-rejected stall, watermark vs held failure, and cap-truncation-cursor-floor edge cases that codex (gpt-5.4) and clawsweeper (gpt-5.5) found during review. Live-tested end-to-end against the running gateway: replayed=1 fetchedCount=1, agent reply observed, cursor persisted at the test row's exact rowid.

Co-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 22:55:59 -04:00
Peter Steinberger
0048f95667 test: tighten skill workshop hook assertions 2026-05-09 03:48:08 +01:00
Peter Steinberger
ddde7900d8 test: tighten opencode media assertions 2026-05-09 03:45:24 +01:00
Peter Steinberger
35fc60e097 test: tighten opencode go media assertions 2026-05-09 03:44:09 +01:00
Peter Steinberger
f824271e77 test: tighten minimax video fetch assertions 2026-05-09 03:41:21 +01:00
Peter Steinberger
4cdb9dfe8b test: tighten openrouter video fetch assertions 2026-05-09 03:38:14 +01:00
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