Skip to content

Commit b3c31df

Browse files
authored
Merge pull request #16 from daydreamsai/sync/upstream-release-v2026.2.19
chore: sync upstream v2026.2.19
2 parents cd93cd3 + 17efe84 commit b3c31df

File tree

1,135 files changed

+46028
-24590
lines changed

Some content is hidden

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

1,135 files changed

+46028
-24590
lines changed

.agents/skills/PR_WORKFLOW.md

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,6 @@
33
Please read this in full and do not skip sections.
44
This is the single source of truth for the maintainer PR workflow.
55

6-
## Triage order
7-
8-
Process PRs **oldest to newest**. Older PRs are more likely to have merge conflicts and stale dependencies; resolving them first keeps the queue healthy and avoids snowballing rebase pain.
9-
106
## Working rule
117

128
Skills execute workflow. Maintainers provide judgment.
@@ -110,7 +106,7 @@ Before any substantive review or prep work, **always rebase the PR branch onto c
110106
- During `prepare-pr`, use concise, action-oriented subjects **without** PR numbers or thanks; reserve `(#<PR>) thanks @<pr-author>` for the final merge/squash commit.
111107
- Group related changes; avoid bundling unrelated refactors.
112108
- Changelog workflow: keep the latest released version at the top (no `Unreleased`); after publishing, bump the version and start a new top section.
113-
- When working on a PR: add a changelog entry with the PR number and thank the contributor (mandatory in this workflow).
109+
- When working on a PR: add a changelog entry line with the PR number `(#<PR>)` and `thanks @<pr-author>` when author metadata is available (mandatory in this workflow).
114110
- When working on an issue: reference the issue in the changelog entry.
115111
- In this workflow, changelog is always required even for internal/test-only changes.
116112

.agents/skills/merge-pr/SKILL.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,12 @@ scripts/pr-merge <PR>
4141
scripts/pr-merge run <PR>
4242
```
4343

44-
3. Ensure output reports:
44+
3. Capture and report these values in a human-readable summary (not raw `key=value` lines):
4545

46-
- `merge_sha=<sha>`
47-
- `merge_author_email=<email>`
48-
- `comment_url=<url>`
46+
- Merge commit SHA
47+
- Merge author email
48+
- Merge completion comment URL
49+
- PR URL
4950

5051
## Steps
5152

@@ -97,3 +98,4 @@ Cleanup is handled by `run` after merge success.
9798

9899
- End in `MERGED`, never `CLOSED`.
99100
- Cleanup only after confirmed merge.
101+
- In final chat output, use labeled lines or bullets; do not paste raw wrapper diagnostics unless debugging.

.agents/skills/prepare-pr/SKILL.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,11 @@ jq -r '.changelog' .local/review.json
7474
jq -r '.docs' .local/review.json
7575
```
7676

77+
Changelog gate requirement:
78+
79+
- `CHANGELOG.md` must include a newly added changelog entry line.
80+
- When PR author metadata is available, that same changelog entry line must include `(#<PR>) thanks @<pr-author>`.
81+
7782
4. Commit scoped changes
7883

7984
Use concise, action-oriented subject lines without PR numbers/thanks. The final merge/squash commit is the only place we include PR numbers and contributor thanks.

.github/actionlint.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
self-hosted-runner:
55
labels:
66
# Blacksmith CI runners
7-
- blacksmith-4vcpu-ubuntu-2404
8-
- blacksmith-4vcpu-windows-2025
7+
- blacksmith-8vcpu-ubuntu-2404
8+
- blacksmith-8vcpu-windows-2025
99

1010
# Ignore patterns for known issues
1111
paths:

.github/actions/setup-node-env/action.yml

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ runs:
3737
exit 1
3838
3939
- name: Setup Node.js
40-
uses: actions/setup-node@v4
40+
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
4141
with:
4242
node-version: ${{ inputs.node-version }}
4343
check-latest: true
@@ -52,7 +52,7 @@ runs:
5252
if: inputs.install-bun == 'true'
5353
uses: oven-sh/setup-bun@v2
5454
with:
55-
bun-version: latest
55+
bun-version: "1.3.9+cf6cdbbba"
5656

5757
- name: Runtime versions
5858
shell: bash
@@ -70,14 +70,29 @@ runs:
7070
shell: bash
7171
env:
7272
CI: "true"
73+
FROZEN_LOCKFILE: ${{ inputs.frozen-lockfile }}
7374
run: |
75+
set -euo pipefail
7476
export PATH="$NODE_BIN:$PATH"
7577
which node
7678
node -v
7779
pnpm -v
78-
LOCKFILE_FLAG=""
79-
if [ "${{ inputs.frozen-lockfile }}" = "true" ]; then
80-
LOCKFILE_FLAG="--frozen-lockfile"
80+
case "$FROZEN_LOCKFILE" in
81+
true) LOCKFILE_FLAG="--frozen-lockfile" ;;
82+
false) LOCKFILE_FLAG="" ;;
83+
*)
84+
echo "::error::Invalid frozen-lockfile input: '$FROZEN_LOCKFILE' (expected true or false)"
85+
exit 2
86+
;;
87+
esac
88+
89+
install_args=(
90+
install
91+
--ignore-scripts=false
92+
--config.engine-strict=false
93+
--config.enable-pre-post-scripts=true
94+
)
95+
if [ -n "$LOCKFILE_FLAG" ]; then
96+
install_args+=("$LOCKFILE_FLAG")
8197
fi
82-
pnpm install $LOCKFILE_FLAG --ignore-scripts=false --config.engine-strict=false --config.enable-pre-post-scripts=true || \
83-
pnpm install $LOCKFILE_FLAG --ignore-scripts=false --config.engine-strict=false --config.enable-pre-post-scripts=true
98+
pnpm "${install_args[@]}" || pnpm "${install_args[@]}"

.github/actions/setup-pnpm-store-cache/action.yml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,17 @@ runs:
1414
steps:
1515
- name: Setup pnpm (corepack retry)
1616
shell: bash
17+
env:
18+
PNPM_VERSION: ${{ inputs.pnpm-version }}
1719
run: |
1820
set -euo pipefail
21+
if [[ ! "$PNPM_VERSION" =~ ^[0-9]+(\.[0-9]+){1,2}([.-][0-9A-Za-z.-]+)?$ ]]; then
22+
echo "::error::Invalid pnpm-version input: '$PNPM_VERSION'"
23+
exit 2
24+
fi
1925
corepack enable
2026
for attempt in 1 2 3; do
21-
if corepack prepare "pnpm@${{ inputs.pnpm-version }}" --activate; then
27+
if corepack prepare "pnpm@$PNPM_VERSION" --activate; then
2228
pnpm -v
2329
exit 0
2430
fi

.github/workflows/ci.yml

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
# Detect docs-only changes to skip heavy jobs (test, build, Windows, macOS, Android).
1414
# Lint and format always run. Fail-safe: if detection fails, run everything.
1515
docs-scope:
16-
runs-on: blacksmith-4vcpu-ubuntu-2404
16+
runs-on: blacksmith-8vcpu-ubuntu-2404
1717
outputs:
1818
docs_only: ${{ steps.check.outputs.docs_only }}
1919
docs_changed: ${{ steps.check.outputs.docs_changed }}
@@ -33,7 +33,7 @@ jobs:
3333
changed-scope:
3434
needs: [docs-scope]
3535
if: needs.docs-scope.outputs.docs_only != 'true'
36-
runs-on: blacksmith-4vcpu-ubuntu-2404
36+
runs-on: blacksmith-8vcpu-ubuntu-2404
3737
outputs:
3838
run_node: ${{ steps.scope.outputs.run_node }}
3939
run_macos: ${{ steps.scope.outputs.run_macos }}
@@ -127,7 +127,7 @@ jobs:
127127
build-artifacts:
128128
needs: [docs-scope, changed-scope, check]
129129
if: needs.docs-scope.outputs.docs_only != 'true' && (github.event_name == 'push' || needs.changed-scope.outputs.run_node == 'true')
130-
runs-on: blacksmith-4vcpu-ubuntu-2404
130+
runs-on: blacksmith-8vcpu-ubuntu-2404
131131
steps:
132132
- name: Checkout
133133
uses: actions/checkout@v4
@@ -153,7 +153,7 @@ jobs:
153153
release-check:
154154
needs: [docs-scope, build-artifacts]
155155
if: github.event_name == 'push' && needs.docs-scope.outputs.docs_only != 'true'
156-
runs-on: blacksmith-4vcpu-ubuntu-2404
156+
runs-on: blacksmith-8vcpu-ubuntu-2404
157157
steps:
158158
- name: Checkout
159159
uses: actions/checkout@v4
@@ -177,7 +177,7 @@ jobs:
177177
checks:
178178
needs: [docs-scope, changed-scope, check]
179179
if: needs.docs-scope.outputs.docs_only != 'true' && (github.event_name == 'push' || needs.changed-scope.outputs.run_node == 'true')
180-
runs-on: blacksmith-4vcpu-ubuntu-2404
180+
runs-on: blacksmith-8vcpu-ubuntu-2404
181181
strategy:
182182
fail-fast: false
183183
matrix:
@@ -192,37 +192,46 @@ jobs:
192192
task: test
193193
command: pnpm canvas:a2ui:bundle && bunx vitest run --config vitest.unit.config.ts
194194
steps:
195+
- name: Skip bun lane on push
196+
if: github.event_name == 'push' && matrix.runtime == 'bun'
197+
run: echo "Skipping bun test lane on push events."
198+
195199
- name: Checkout
200+
if: github.event_name != 'push' || matrix.runtime != 'bun'
196201
uses: actions/checkout@v4
197202
with:
198203
submodules: false
199204

200205
- name: Setup Node environment
206+
if: matrix.runtime != 'bun' || github.event_name != 'push'
201207
uses: ./.github/actions/setup-node-env
208+
with:
209+
install-bun: "${{ matrix.runtime == 'bun' }}"
202210

203211
- name: Configure vitest JSON reports
204-
if: matrix.task == 'test' && matrix.runtime == 'node'
212+
if: (github.event_name != 'push' || matrix.runtime != 'bun') && matrix.task == 'test' && matrix.runtime == 'node'
205213
run: echo "OPENCLAW_VITEST_REPORT_DIR=$RUNNER_TEMP/vitest-reports" >> "$GITHUB_ENV"
206214

207215
- name: Configure Node test resources
208-
if: matrix.task == 'test' && matrix.runtime == 'node'
216+
if: (github.event_name != 'push' || matrix.runtime != 'bun') && matrix.task == 'test' && matrix.runtime == 'node'
209217
run: |
210218
# `pnpm test` runs `scripts/test-parallel.mjs`, which spawns multiple Node processes.
211219
# Default heap limits have been too low on Linux CI (V8 OOM near 4GB).
212220
echo "OPENCLAW_TEST_WORKERS=2" >> "$GITHUB_ENV"
213221
echo "OPENCLAW_TEST_MAX_OLD_SPACE_SIZE_MB=6144" >> "$GITHUB_ENV"
214222
215223
- name: Run ${{ matrix.task }} (${{ matrix.runtime }})
224+
if: matrix.runtime != 'bun' || github.event_name != 'push'
216225
run: ${{ matrix.command }}
217226

218227
- name: Summarize slowest tests
219-
if: matrix.task == 'test' && matrix.runtime == 'node'
228+
if: (github.event_name != 'push' || matrix.runtime != 'bun') && matrix.task == 'test' && matrix.runtime == 'node'
220229
run: |
221230
node scripts/vitest-slowest.mjs --dir "$OPENCLAW_VITEST_REPORT_DIR" --top 50 --out "$RUNNER_TEMP/vitest-slowest.md" > /dev/null
222231
echo "Slowest test summary written to $RUNNER_TEMP/vitest-slowest.md"
223232
224233
- name: Upload vitest reports
225-
if: matrix.task == 'test' && matrix.runtime == 'node'
234+
if: (github.event_name != 'push' || matrix.runtime != 'bun') && matrix.task == 'test' && matrix.runtime == 'node'
226235
uses: actions/upload-artifact@v4
227236
with:
228237
name: vitest-reports-${{ runner.os }}-${{ matrix.runtime }}
@@ -235,7 +244,7 @@ jobs:
235244
name: "check"
236245
needs: [docs-scope]
237246
if: needs.docs-scope.outputs.docs_only != 'true'
238-
runs-on: blacksmith-4vcpu-ubuntu-2404
247+
runs-on: blacksmith-8vcpu-ubuntu-2404
239248
steps:
240249
- name: Checkout
241250
uses: actions/checkout@v4
@@ -244,6 +253,8 @@ jobs:
244253

245254
- name: Setup Node environment
246255
uses: ./.github/actions/setup-node-env
256+
with:
257+
install-bun: "false"
247258

248259
- name: Check types and lint and oxfmt
249260
run: pnpm check
@@ -252,7 +263,7 @@ jobs:
252263
check-docs:
253264
needs: [docs-scope]
254265
if: needs.docs-scope.outputs.docs_changed == 'true'
255-
runs-on: blacksmith-4vcpu-ubuntu-2404
266+
runs-on: blacksmith-8vcpu-ubuntu-2404
256267
steps:
257268
- name: Checkout
258269
uses: actions/checkout@v4
@@ -261,12 +272,14 @@ jobs:
261272

262273
- name: Setup Node environment
263274
uses: ./.github/actions/setup-node-env
275+
with:
276+
install-bun: "false"
264277

265278
- name: Check docs
266279
run: pnpm check:docs
267280

268281
secrets:
269-
runs-on: blacksmith-4vcpu-ubuntu-2404
282+
runs-on: blacksmith-8vcpu-ubuntu-2404
270283
steps:
271284
- name: Checkout
272285
uses: actions/checkout@v4
@@ -293,10 +306,10 @@ jobs:
293306
checks-windows:
294307
needs: [docs-scope, changed-scope, build-artifacts, check]
295308
if: needs.docs-scope.outputs.docs_only != 'true' && (github.event_name == 'push' || needs.changed-scope.outputs.run_node == 'true')
296-
runs-on: blacksmith-4vcpu-windows-2025
309+
runs-on: blacksmith-8vcpu-windows-2025
297310
env:
298311
NODE_OPTIONS: --max-old-space-size=4096
299-
# Keep total concurrency predictable on the 4 vCPU runner:
312+
# Keep total concurrency predictable on the 8 vCPU runner:
300313
# `scripts/test-parallel.mjs` runs some vitest suites in parallel processes.
301314
OPENCLAW_TEST_WORKERS: 2
302315
defaults:
@@ -355,7 +368,7 @@ jobs:
355368
test -s dist/plugin-sdk/index.js
356369
357370
- name: Setup Node.js
358-
uses: actions/setup-node@v4
371+
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
359372
with:
360373
node-version: 22.x
361374
check-latest: true
@@ -366,16 +379,10 @@ jobs:
366379
pnpm-version: "10.23.0"
367380
cache-key-suffix: "node22"
368381

369-
- name: Setup Bun
370-
uses: oven-sh/setup-bun@v2
371-
with:
372-
bun-version: latest
373-
374382
- name: Runtime versions
375383
run: |
376384
node -v
377385
npm -v
378-
bun -v
379386
pnpm -v
380387
381388
- name: Capture node path
@@ -653,7 +660,7 @@ jobs:
653660
android:
654661
needs: [docs-scope, changed-scope, check]
655662
if: needs.docs-scope.outputs.docs_only != 'true' && (github.event_name == 'push' || needs.changed-scope.outputs.run_android == 'true')
656-
runs-on: blacksmith-4vcpu-ubuntu-2404
663+
runs-on: blacksmith-8vcpu-ubuntu-2404
657664
strategy:
658665
fail-fast: false
659666
matrix:

0 commit comments

Comments
 (0)