Skip to content

Commit adb2758

Browse files
authored
Merge branch 'main' into fix/prototype-pollution-in-frontmatter
2 parents 09508c5 + 63aa909 commit adb2758

1,406 files changed

Lines changed: 312080 additions & 16746 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.agents/skills/channel-message-flows/SKILL.md

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,38 @@ description: "Use when running QA Lab channel message flow evidence."
66
# Channel Message Flows
77

88
Use this from the OpenClaw repo root to run the QA Lab evidence for Telegram
9-
draft/final delivery sequencing. This skill no longer launches a standalone
10-
script; the behavior is owned by the QA scenario and its Vitest-backed e2e test.
9+
draft/final delivery sequencing. The behavior is owned by one transport-native
10+
QA flow that can run through QA Channel or Crabline Telegram.
1111

1212
## QA Scenario
1313

1414
Run the scenario through QA Lab:
1515

1616
```bash
17-
pnpm openclaw qa suite --scenario channel-message-flows
17+
OPENCLAW_BUILD_PRIVATE_QA=1 node scripts/run-node.mjs qa suite \
18+
--provider-mode mock-openai \
19+
--scenario channel-message-flows \
20+
--channel-driver qa-channel
1821
```
1922

20-
Run the focused e2e test directly in a Codex worktree:
23+
Run the same YAML through the real Telegram plugin against Crabline's local
24+
provider server:
2125

2226
```bash
23-
node scripts/run-vitest.mjs extensions/telegram/src/channel-message-flows.qa.e2e.test.ts
27+
OPENCLAW_BUILD_PRIVATE_QA=1 node scripts/run-node.mjs qa suite \
28+
--provider-mode mock-openai \
29+
--scenario channel-message-flows \
30+
--channel-driver crabline \
31+
--channel telegram
2432
```
2533

2634
## References
2735

2836
- `qa/scenarios/channels/channel-message-flows.yaml`
29-
- `extensions/telegram/src/channel-message-flows.qa.e2e.test.ts`
30-
- `extensions/telegram/src/test-support/channel-message-flows.ts`
37+
- `extensions/qa-channel/src/inbound.ts`
38+
- `extensions/qa-lab/src/qa-transport.ts`
39+
- `extensions/qa-lab/src/crabline-transport.ts`
40+
- `extensions/telegram/src/draft-stream.ts`
3141

32-
The scenario covers `channels.streaming` as primary evidence and records
33-
secondary coverage for thread preservation, delivery ordering, and reasoning
34-
preview visibility.
42+
The scenario covers `channels.streaming` as primary evidence and
43+
`runtime.delivery` as secondary evidence.

.github/labeler.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,11 @@
359359
- any-glob-to-any-file:
360360
- "extensions/cerebras/**"
361361
- "docs/providers/cerebras.md"
362+
"extensions: clawrouter":
363+
- changed-files:
364+
- any-glob-to-any-file:
365+
- "extensions/clawrouter/**"
366+
- "docs/providers/clawrouter.md"
362367
"extensions: deepseek":
363368
- changed-files:
364369
- any-glob-to-any-file:

.github/workflows/ci-build-artifacts-testbox.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
permissions:
2828
contents: read
2929
name: "build-artifacts"
30-
runs-on: blacksmith-8vcpu-ubuntu-2404
30+
runs-on: blacksmith-16vcpu-ubuntu-2404
3131
timeout-minutes: 35
3232
steps:
3333
- name: Begin Testbox
@@ -156,7 +156,7 @@ jobs:
156156
- name: Build dist on cache miss
157157
if: steps.dist-cache.outputs.cache-hit != 'true'
158158
env:
159-
NODE_OPTIONS: --max-old-space-size=8192
159+
NODE_OPTIONS: --max-old-space-size=16384
160160
run: pnpm build:ci-artifacts
161161

162162
- name: Build Control UI on cache miss

.github/workflows/ci.yml

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,12 @@ jobs:
288288
if (runNodeFull) {
289289
checksFastCoreTasks.push(
290290
{ check_name: "checks-fast-bundled-protocol", runtime: "node", task: "bundled-protocol" },
291-
{ check_name: "QA Smoke CI", runtime: "node", task: "qa-smoke-ci" },
291+
{
292+
check_name: "QA Smoke CI",
293+
runtime: "node",
294+
task: "qa-smoke-ci",
295+
runner: "blacksmith-16vcpu-ubuntu-2404",
296+
},
292297
{ check_name: "checks-fast-bun-launcher", runtime: "bun", task: "bun-launcher" },
293298
);
294299
} else {
@@ -845,7 +850,7 @@ jobs:
845850
name: ${{ matrix.check_name }}
846851
needs: [preflight]
847852
if: needs.preflight.outputs.run_checks_fast_core == 'true'
848-
runs-on: ${{ github.event_name == 'workflow_dispatch' && 'ubuntu-24.04' || (github.repository == 'openclaw/openclaw' && 'blacksmith-4vcpu-ubuntu-2404' || 'ubuntu-24.04') }}
853+
runs-on: ${{ github.event_name == 'workflow_dispatch' && 'ubuntu-24.04' || (github.repository == 'openclaw/openclaw' && (matrix.runner || 'blacksmith-4vcpu-ubuntu-2404') || 'ubuntu-24.04') }}
849854
timeout-minutes: 60
850855
strategy:
851856
fail-fast: false
@@ -872,12 +877,17 @@ jobs:
872877
;;
873878
qa-smoke-ci)
874879
output_dir=".artifacts/qa-e2e/smoke-ci-profile"
880+
package_dir=".artifacts/qa-e2e/smoke-ci-package"
875881
export OPENCLAW_BUILD_PRIVATE_QA=1
876882
export OPENCLAW_ENABLE_PRIVATE_QA_CLI=1
877883
export OPENCLAW_DISABLE_BUNDLED_PLUGINS=0
878884
export OPENCLAW_QA_REDACT_PUBLIC_METADATA=1
879885
export OPENCLAW_QA_TRANSPORT_READY_TIMEOUT_MS=180000
880-
NODE_OPTIONS=--max-old-space-size=8192 node scripts/build-all.mjs qaRuntime
886+
export NODE_OPTIONS=--max-old-space-size=16384
887+
node scripts/package-openclaw-for-docker.mjs \
888+
--output-dir "$package_dir" \
889+
--output-name openclaw-current.tgz
890+
export OPENCLAW_CURRENT_PACKAGE_TGZ="$PWD/$package_dir/openclaw-current.tgz"
881891
qa_exit_code=0
882892
pnpm openclaw qa run \
883893
--repo-root . \

.github/workflows/codeql-critical-quality.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,7 @@ jobs:
446446
gh api --paginate "repos/${REPOSITORY}/pulls/${PR_NUMBER}/files" --jq '
447447
.[]
448448
| select(.filename | test("^(src/cli/gateway-cli/run-loop\\.ts|src/infra/(gateway-lock|jsonl-socket|push-apns-http2|ssh-tunnel)\\.ts|src/infra/net/|src/proxy-capture/|extensions/codex-supervisor/src/json-rpc-client\\.ts|extensions/irc/src/|extensions/qa-lab/src/|packages/net-policy/src/)"))
449+
| select(.filename | test("(^|/)[^/]+\\.(?:e2e\\.)?test\\.tsx?$") | not)
449450
| .filename as $file
450451
| (.patch // "")
451452
| split("\n")[]

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ Docs: https://docs.openclaw.ai
1616

1717
### Changes
1818

19+
- **ClawRouter routing and quotas:** add the bundled ClawRouter provider plugin with credential-scoped dynamic model discovery, OpenAI-compatible and native Anthropic/Gemini transports, and managed budget reporting across OpenClaw usage surfaces. (#99658)
1920
- **Model and provider coverage:** add GPT-5.6 support, use Nemotron Super's 1M context window, and preserve explicit OpenRouter authentication headers. (#98333, #98726, #98187) Thanks @steipete-oai, @eleqtrizit, @sunlit-deng, and @laurencebrown.
2021
- **CLI and node workflows:** add `openclaw attach`, node context-path support, actionable device-approval recovery guidance, and clearer plugin install exit diagnostics. (#96454, #97679, #98115, #98146, #98497) Thanks @anagnorisis2peripeteia, @obviyus, @wm0018, @welfo-beo, @RomneyDa, @Sanjays2402, and @vincentkoc.
2122
- **Cron and usage:** add exit-triggered schedules, detached session-targeted runs, an in-flight job doctor warning, and a built-in full usage footer. (#92037, #98755, #98620, #92657, #92877) Thanks @anagnorisis2peripeteia, @obviyus, @EthanSK, @masatohoshino, and @Marvinthebored.
@@ -26,6 +27,7 @@ Docs: https://docs.openclaw.ai
2627

2728
### Fixes
2829

30+
- **ClawRouter auth profiles:** resolve credential-scoped catalog models during agent runs when the proxy key is stored in an auth profile, and document plugin and model allowlists.
2931
- **Telegram durability:** recover stalled ingress claims, retry restart-dropped media, survive transient polling errors, dead-letter poison updates, preserve forwarded rich text, route plugin callbacks correctly, and fall back safely when rich final replies are rejected. (#97118, #98102, #98735, #98775, #98776, #97174, #98786) Thanks @vincentkoc, @luoyanglang, @DaveArcher18, @obviyus, and @goldmar.
3032
- **Agent and context reliability:** preserve runtime overrides and steered subagent tasks, improve harness-aware context estimation and compaction prechecks, time out silent local streams, recover mid-stream failures, and cap Gateway run-cache growth. (#92237, #77539, #97928, #97861, #98525, #95430, #77973) Thanks @sercada, @amittell, @liuhao1024, @yetval, @osolmaz, @lzyyzznl, @vincentkoc, @alexelgier, and @fede-kamel.
3133
- **Provider and network safety:** bound oversized or malformed responses across Moonshot, MiniMax, Anthropic OAuth, Discord, Matrix, SMS, browser, update, embeddings, Tlön, and Inworld paths. (#96502, #96322, #96644, #97693, #97662, #97999, #98455, #98508, #98554, #98496, #98660) Thanks @hugenshen, @cursoragent, @lsr911, @solodmd, @Alix-007, @wings1029, @lzyyzznl, @sunlit-deng, @vincentkoc, and @Pandah97.
@@ -36,13 +38,15 @@ Docs: https://docs.openclaw.ai
3638
- **Mobile and UI stability:** preserve iOS chat line breaks and final replies, improve Android pairing and TLS recovery, hide expired pairing cards, and keep workspace file rails scrollable. (#98304, #98117, #98366, #98439, #98483, #98049, #98646, #98611) Thanks @joshavant, @Jabato01, @ooiuuii, @wuqxuan, @645648406-max, and @zw-xysk.
3739
- **Codex and approval flows:** report ChatGPT authentication correctly, rename destructive approval mode to `ask`, classify dynamic goal and session tool results accurately, and derive terminal-idle timeouts from the explicit run deadline. (#91240, #98501, #98659, #96856, #85296) Thanks @849261680, @ukstem, @kevinslin, @yetval, @nxmxbbd, @alkor2000, and @vincentkoc.
3840
- **Configuration and plugin health:** surface unloadable channel plugins, preserve defaulted provider base URLs during patches, validate bundled plugin updates by manifest contract, and retain legacy ClawHub families where required. (#96397, #98396, #98010, #98249) Thanks @849261680, @momothemage, @weltmaister, @LiLan0125, @herove, and @Patrick-Erichsen.
41+
- **QQBot media delivery:** scope sandbox-generated media sends to the active session's workspace so `/workspace/...` and relative generated-file paths resolve safely across QQBot media tags, structured payloads, and streaming delivery. (#92872) Thanks @zhangguiping-xydt.
3942

4043
### Complete contribution record
4144

42-
This audited record covers the complete 66e676d29b92d040716376a75aca32bad655cfac..3e50f41dd6ea3446b5c98a2f19ec70982ac908e6 history: 211 merged PRs. The generation manifest also supplies direct commits as editorial input; the grouped notes above prioritize user impact.
45+
This audited record covers the complete 66e676d29b92d040716376a75aca32bad655cfac..3e50f41dd6ea3446b5c98a2f19ec70982ac908e6 history: 212 merged PRs. The generation manifest also supplies direct commits as editorial input; the grouped notes above prioritize user impact.
4346

4447
#### Pull requests
4548

49+
- **PR #92872** fix(qqbot): allow scoped sandbox media sends. Thanks @zhangguiping-xydt.
4650
- **PR #96502** fix(moonshot): bound video description JSON response reads. Thanks @hugenshen and @cursoragent.
4751
- **PR #98249** Preserve legacy ClawHub family for selected plugins. Thanks @Patrick-Erichsen.
4852
- **PR #93767** fix(reasoning-tags): strip MiniMax `mm:` namespaced reasoning tags. Thanks @DrHack1.

0 commit comments

Comments
 (0)