Skip to content

Commit e18a66e

Browse files
authored
Merge branch 'main' into fix/suppress-post-tool-send-meta-commentary
2 parents afc1509 + 57db713 commit e18a66e

1,219 files changed

Lines changed: 30240 additions & 6648 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.

.github/workflows/ci.yml

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,9 @@ jobs:
344344
requires_dist: shard.requiresDist,
345345
runner: shard.runner,
346346
timeout_minutes: shard.timeoutMinutes,
347+
requires_go:
348+
shard.shardName === "core-tooling" ||
349+
shard.groups?.some((group) => group.shard_name === "core-tooling"),
347350
}))
348351
: [];
349352
const nodeTestNonDistShards = nodeTestShards.filter((shard) => !shard.requires_dist);
@@ -922,7 +925,7 @@ jobs:
922925
contents: read
923926
name: QA Smoke CI (${{ matrix.name }})
924927
needs: [preflight]
925-
if: needs.preflight.outputs.run_checks_fast == 'true'
928+
if: ${{ false }} # Temporarily disabled while QA smoke sharding is repaired.
926929
runs-on: ${{ github.event_name == 'workflow_dispatch' && 'ubuntu-24.04' || (github.repository == 'openclaw/openclaw' && 'blacksmith-16vcpu-ubuntu-2404' || 'ubuntu-24.04') }}
927930
timeout-minutes: 60
928931
strategy:
@@ -1009,7 +1012,7 @@ jobs:
10091012
contents: read
10101013
name: QA Smoke CI
10111014
needs: [preflight, qa-smoke-ci-shard]
1012-
if: always() && needs.preflight.outputs.run_checks_fast == 'true'
1015+
if: ${{ false }} # Temporarily disabled while QA smoke sharding is repaired.
10131016
runs-on: ubuntu-24.04
10141017
timeout-minutes: 5
10151018
steps:
@@ -1149,6 +1152,13 @@ jobs:
11491152
node-version: "${{ matrix.node_version || '24.x' }}"
11501153
install-bun: "false"
11511154

1155+
- name: Setup Go for docs i18n
1156+
if: matrix.requires_go == true
1157+
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6
1158+
with:
1159+
go-version-file: scripts/docs-i18n/go.mod
1160+
cache-dependency-path: scripts/docs-i18n/go.sum
1161+
11521162
- name: Configure Node test resources
11531163
run: echo "OPENCLAW_VITEST_MAX_WORKERS=2" >> "$GITHUB_ENV"
11541164

.github/workflows/openclaw-npm-release.yml

Lines changed: 57 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ on:
44
workflow_dispatch:
55
inputs:
66
tag:
7-
description: Release tag to publish, or a full 40-character workflow-branch commit SHA for validation-only preflight (for example v2026.3.22 or 0123456789abcdef0123456789abcdef01234567)
7+
description: Release tag to publish, or any full 40-character commit SHA for validation-only preflight (for example v2026.3.22 or 0123456789abcdef0123456789abcdef01234567)
88
required: true
99
type: string
1010
preflight_only:
@@ -133,6 +133,7 @@ jobs:
133133
- name: Validate npm release request
134134
env:
135135
BYPASS_EXTENDED_STABLE_GUARD: ${{ inputs.bypass_extended_stable_guard }}
136+
PREFLIGHT_ONLY: ${{ inputs.preflight_only }}
136137
RELEASE_NPM_DIST_TAG: ${{ inputs.npm_dist_tag }}
137138
RELEASE_TAG: ${{ inputs.tag }}
138139
NPM_WORKFLOW_REF: ${{ github.ref }}
@@ -207,19 +208,16 @@ jobs:
207208
RELEASE_SHA=$(git rev-parse HEAD)
208209
RELEASE_BRANCH_REF="refs/remotes/origin/${WORKFLOW_REF_NAME}"
209210
export RELEASE_SHA RELEASE_BRANCH_REF
210-
# Fetch the workflow branch so merge-base ancestry checks keep working
211-
# for older tagged commits contained in a release branch.
212-
git fetch --no-tags origin "+refs/heads/${WORKFLOW_REF_NAME}:refs/remotes/origin/${WORKFLOW_REF_NAME}"
213211
if [[ "${RELEASE_REF}" =~ ^[0-9a-fA-F]{40}$ ]]; then
214-
BRANCH_SHA="$(git rev-parse "${RELEASE_BRANCH_REF}")"
215-
if [[ "${RELEASE_SHA}" != "${BRANCH_SHA}" ]]; then
216-
echo "Validation-only SHA mode only supports the current ${WORKFLOW_REF_NAME} HEAD." >&2
217-
exit 1
218-
fi
219212
RELEASE_TAG="v$(node -p "require('./package.json').version")"
220213
export RELEASE_TAG
214+
RELEASE_BRANCH_REF="${RELEASE_SHA}"
215+
export RELEASE_BRANCH_REF
221216
echo "Validation-only SHA mode: using synthetic release tag ${RELEASE_TAG} for package metadata checks."
222217
else
218+
# Tagged release validation still proves the commit is contained in
219+
# the workflow branch selected by the operator.
220+
git fetch --no-tags origin "+refs/heads/${WORKFLOW_REF_NAME}:refs/remotes/origin/${WORKFLOW_REF_NAME}"
223221
RELEASE_TAG="${RELEASE_REF}"
224222
export RELEASE_TAG
225223
fi
@@ -231,8 +229,58 @@ jobs:
231229
# IF A CHECK CAN TAKE A LONG TIME, NEEDS LIVE CREDENTIALS, OR IS KNOWN TO BE FLAKY,
232230
# IT BELONGS IN openclaw-release-checks.yml INSTEAD OF BLOCKING npm PUBLISH.
233231
- name: Verify release contents
232+
env:
233+
OPENCLAW_RELEASE_CHECK_LOCAL_PACKAGE_TARBALL_DIR: ${{ steps.ai_runtime_tarballs.outputs.dir }}
234234
run: pnpm release:check
235235

236+
- name: Exercise all extended-stable plugin npm packages
237+
id: plugin_npm_preflight
238+
if: ${{ inputs.npm_dist_tag == 'extended-stable' }}
239+
env:
240+
OPENCLAW_PLUGIN_NPM_PUBLISH_TAG: extended-stable
241+
run: |
242+
set -euo pipefail
243+
plan="$RUNNER_TEMP/plugin-npm-extended-stable-preflight.json"
244+
artifact_dir="$RUNNER_TEMP/openclaw-plugin-npm-preflight"
245+
rm -rf "$artifact_dir"
246+
mkdir -p "$artifact_dir"
247+
node --import tsx scripts/plugin-npm-release-plan.ts \
248+
--selection-mode all-publishable \
249+
--npm-dist-tag extended-stable > "$plan"
250+
cp "$plan" "$artifact_dir/plugin-npm-release-plan.json"
251+
252+
mapfile -t package_dirs < <(jq -r '.all[].packageDir' "$plan")
253+
if [[ "${#package_dirs[@]}" == "0" ]]; then
254+
echo "Extended-stable plugin preflight resolved no publishable packages." >&2
255+
exit 1
256+
fi
257+
258+
runtime_args=()
259+
for package_dir in "${package_dirs[@]}"; do
260+
runtime_args+=(--package "$package_dir")
261+
done
262+
node scripts/check-plugin-npm-runtime-builds.mjs "${runtime_args[@]}"
263+
264+
for package_dir in "${package_dirs[@]}"; do
265+
OPENCLAW_PLUGIN_NPM_RUNTIME_BUILD=0 \
266+
OPENCLAW_PLUGIN_NPM_PACK_OUTPUT_DIR="$artifact_dir" \
267+
bash scripts/plugin-npm-publish.sh --pack "$package_dir" >/dev/null
268+
done
269+
270+
(cd "$artifact_dir" && sha256sum ./*.tgz > SHA256SUMS)
271+
package_count="$(jq -r '.all | length' "$plan")"
272+
echo "dir=$artifact_dir" >> "$GITHUB_OUTPUT"
273+
echo "Extended-stable plugin preflight exercised ${package_count} publishable packages."
274+
echo "- Extended-stable plugin packages exercised: ${package_count}" >> "$GITHUB_STEP_SUMMARY"
275+
276+
- name: Upload extended-stable plugin npm packages
277+
if: ${{ inputs.npm_dist_tag == 'extended-stable' }}
278+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
279+
with:
280+
name: openclaw-plugin-npm-preflight-${{ inputs.tag }}
281+
path: ${{ steps.plugin_npm_preflight.outputs.dir }}
282+
if-no-files-found: error
283+
236284
- name: Generate dependency release evidence
237285
id: dependency_evidence
238286
env:

.github/workflows/openclaw-performance.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,23 @@ jobs:
246246
chmod 0755 "$HOME/.local/bin/kova"
247247
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
248248
249+
- name: Configure OCM local workspace dependencies
250+
if: steps.lane.outputs.run == 'true'
251+
shell: bash
252+
run: |
253+
set -euo pipefail
254+
npm_wrapper="$PERFORMANCE_HELPER_DIR/scripts/ocm-npm-workspace-deps.mjs"
255+
workspace_dependency_dirs=""
256+
if [[ -f "${GITHUB_WORKSPACE}/packages/ai/package.json" ]]; then
257+
workspace_dependency_dirs="${GITHUB_WORKSPACE}/packages/ai"
258+
fi
259+
chmod 0755 "$npm_wrapper"
260+
{
261+
echo "OCM_INTERNAL_NPM_BIN=$npm_wrapper"
262+
echo "OPENCLAW_OCM_REAL_NPM_BIN=$(command -v npm)"
263+
echo "OPENCLAW_OCM_WORKSPACE_DEPENDENCY_DIRS=$workspace_dependency_dirs"
264+
} >> "$GITHUB_ENV"
265+
249266
- name: Pin Kova OpenAI model to GPT 5.5
250267
if: steps.lane.outputs.run == 'true'
251268
shell: bash

CHANGELOG.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ Docs: https://docs.openclaw.ai
2323

2424
### Fixes
2525

26+
- **Browser actions on Node 24:** keep browser request cancellation bound to the client and response lifetime instead of Node 24.16+'s prematurely aborted body-stream signal, preventing valid POST actions from failing after JSON parsing. Thanks @obviyus and @vincentkoc.
27+
- **SecretRef model credentials:** keep resolved provider secrets behind process-local sentinels through auth storage, stream setup, SDK configuration, and managed local-provider probing, then inject plaintext only at the final network or provider-plugin boundary while retaining exact-value log redaction. (#102008, #102009)
2628
- **Lean local model shell access:** keep `exec` directly visible beside the default structured Tool Search controls so coding-tuned local models can use their shell fallback instead of searching for missing domain tools. (#87587) Thanks @vincentkoc.
2729
- **OAuth refresh contention diagnostics:** keep local lock paths out of user-facing refresh failures and avoid duplicate failure prefixes while preserving structured provider and profile classification. (#83383) Thanks @vincentkoc.
2830
- **Exec approval prompts:** keep background-disabled fallback warnings out of pending gateway/node approvals and show them only after a command actually runs in the foreground. (#78184) Thanks @vincentkoc.
@@ -45,12 +47,13 @@ Docs: https://docs.openclaw.ai
4547
- **Microsoft Teams attachment metadata:** bound Bot Framework `attachmentInfo` JSON reads and cancel oversized streams before they can exhaust Gateway memory. (#99125) Thanks @ly85206559.
4648
- **Agent auth copy order:** preserve the source agent's portable auth-profile precedence when copying credentials to a new agent while excluding skipped profiles and transient auth state. (#100833) Thanks @machine3at.
4749
- **Memory session repair:** keep daily dreaming ingestion bookkeeping outside session-corpus audit and repair so `memory status --fix` preserves healthy daily state. (#93389) Thanks @Alix-007 and @vincentkoc.
48-
- **Remote browser CDP policy:** allow the configured CDP control host through an existing hostname allowlist without widening page navigation policy. (#100986, #100819) Thanks @NianJiuZst.
50+
- **Remote browser CDP policy:** allow the configured CDP control host through an existing hostname allowlist without widening page navigation policy, while keeping strict-policy discovery bound to the configured control authority. (#100986, #100819) Thanks @NianJiuZst.
4951
- **Config unset diagnostics:** explain when an inherited or default configuration value cannot be unset instead of reporting a misleading successful deletion. (#96557) Thanks @moeghashim.
5052
- **Crestodian command probes:** contain stdout and stderr stream failures while keeping child-process close and spawn errors authoritative, preventing unhandled probe crashes. (#100741) Thanks @lsr911.
5153
- **Feishu mention forwarding:** fail closed when the bot Open ID is unavailable so group messages cannot be misclassified as explicit bot mentions. (#100891) Thanks @zhangguiping-xydt.
5254
- **Cron edit delivery:** preserve each job's implicit delivery mode when applying partial delivery updates, so disabling best-effort delivery no longer turns detached job announcements off. (#100846) Thanks @machine3at.
5355
- **Control UI session creation:** keep newly created sessions at the front of the stable sidebar order after selecting another session. Thanks @shakkernerd.
56+
- **Control UI file previews:** keep large Skill Workshop files responsive with cached, offscreen-contained text chunks while preserving wrapped content, stable file switching, full-file copy, and clean focus behavior. (#101319) Thanks @xianshishan and @shakkernerd.
5457
- **FTS-only memory startup:** skip plugin capability discovery when `memorySearch.provider` is explicitly `none`, avoiding an unnecessary cold-start scan.
5558
- **Control UI agent model labels:** show each selected agent's effective model in the Default picker option instead of the global model. (#100719, #77690, #77440) Thanks @hyspacex.
5659
- **Control UI inbound image previews:** render canonical inbound media references through the authenticated ticket route after chat-history reloads. (#100725, #90172, #89591) Thanks @sweetcornna.

0 commit comments

Comments
 (0)