Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
54d84ff
feat: add browser environment builtin
wen2go Sep 7, 2026
97a1304
ci: test browser environment branch
wen2go Sep 7, 2026
db87e69
ci: publish native platform releases
wen2go Sep 7, 2026
b06f238
ci: trigger native release publishing
wen2go Sep 7, 2026
d12b63d
ci: fix native release checkout pin
wen2go Sep 7, 2026
364037b
build: restore x32 release targets
wen2go Sep 7, 2026
4e756d8
build: select Win32 solution for x32
wen2go Sep 7, 2026
1805c48
ci: reduce x32 build log volume
wen2go Sep 7, 2026
5c25cbc
ci: silence x32 generated make output
wen2go Sep 7, 2026
1fcf24f
ci: build Linux x32 in native container
wen2go Sep 7, 2026
60cff08
ci: install nasm for Linux x32
wen2go Sep 7, 2026
9bb4ea1
ci: disable OpenSSL asm for Linux x32
wen2go Sep 7, 2026
9018ae7
ci: use shared zlib for Linux x32
wen2go Sep 7, 2026
3a37ace
build: complete Windows x32 toolchain support
wen2go Sep 7, 2026
f9214f6
ci: publish only supported 64-bit targets
wen2go Sep 7, 2026
fb81e2c
fix: validate browser environment options before install
wen2go Sep 8, 2026
e1c6b62
ci: allow full native builds to complete
wen2go Sep 8, 2026
483c4ed
docs: document Mode browser environment
wen2go Sep 10, 2026
a206fee
fix: publish unified Mode browser environment release
wen2go Sep 10, 2026
73cc96d
fix: create releases from existing Mode tags
wen2go Sep 10, 2026
b94e981
fix: configure unified release repository
wen2go Sep 10, 2026
658ccab
fix: checkout tag before unified release publishing
wen2go Sep 10, 2026
15f2bfd
feat: expand browser environment compatibility
wen2go Sep 11, 2026
922d457
feat: 补全浏览器环境并隔离 Node 特征
wen2go Sep 11, 2026
90db1db
fix: 保留挑战脚本所需的 Buffer
wen2go Sep 12, 2026
1a27296
test: 添加浏览器环境源码诊断器
wen2go Sep 12, 2026
78a69aa
ci: 补充浏览器环境诊断发布说明
wen2go Sep 13, 2026
630229c
feat: 补齐挑战使用的 DOM 与 BOM 接口
wen2go Sep 14, 2026
843a760
test: 修正原生函数形态断言转义
wen2go Sep 14, 2026
ee08495
docs: 总结 Mode 浏览器环境改动
wen2go Sep 14, 2026
bb00fd2
docs: 精简 Mode 项目说明
wen2go Sep 14, 2026
43c47ef
update
wen2go Sep 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions .github/workflows/browser-env.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: Browser environment

on:
push:
branches:
- codex/browser-env
workflow_dispatch:

permissions:
contents: read

jobs:
test-browser-environment:
runs-on: ubuntu-24.04
timeout-minutes: 45
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Configure Debug build
run: ./configure --debug

- name: Build Node
run: make -j4 node

- name: Run browser environment regression test
run: out/Debug/node test/parallel/test-browser-env.js
171 changes: 171 additions & 0 deletions .github/workflows/publish-native-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
name: Publish native release

on:
push:
tags:
- 'mode_20*_v*'
workflow_dispatch:
inputs:
release_tag:
description: 'Release tag, for example mode_20260910_v22.0.2'
required: true
type: string

permissions:
contents: write

jobs:
validate-release-tag:
runs-on: ubuntu-24.04
outputs:
release_tag: ${{ steps.release.outputs.tag }}
release_suffix: ${{ steps.release.outputs.suffix }}
steps:
- id: release
env:
RELEASE_TAG: ${{ inputs.release_tag || github.ref_name }}
run: |
if [[ ! "$RELEASE_TAG" =~ ^mode_[0-9]{8}_v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Release tag must use mode_YYYYmmdd_vX.Y.Z: $RELEASE_TAG" >&2
exit 1
fi
echo "tag=$RELEASE_TAG" >> "$GITHUB_OUTPUT"
echo "suffix=${RELEASE_TAG#mode_}" >> "$GITHUB_OUTPUT"

mac-arm64:
needs: validate-release-tag
runs-on: macos-15
timeout-minutes: 120
env:
RELEASE_SUFFIX: ${{ needs.validate-release-tag.outputs.release_suffix }}
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Verify Apple Silicon runner
run: test "$(uname -m)" = arm64
- name: Configure and build
run: |
./configure
make -j3 node
- name: Run Mode regressions
run: |
out/Release/node test/parallel/test-browser-env.js
out/Release/node --test rs_mode_server/test/server.test.js
- name: Package
run: |
package="mode_mac_arm_${RELEASE_SUFFIX}"
mkdir -p "dist/$package"
cp out/Release/node "dist/$package/mode"
tar -czf "dist/$package.tar.gz" -C dist "$package"
- name: Stage release asset
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: mode-mac-arm
path: dist/*.tar.gz
if-no-files-found: error

windows-x64:
needs: validate-release-tag
runs-on: windows-2022
timeout-minutes: 60
env:
RELEASE_SUFFIX: ${{ needs.validate-release-tag.outputs.release_suffix }}
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Build x64 binary
shell: cmd
run: vcbuild.bat x64
- name: Run Mode regressions
shell: pwsh
run: |
.\out\Release\node.exe test\parallel\test-browser-env.js
.\out\Release\node.exe --test rs_mode_server/test/server.test.js
- name: Package
shell: pwsh
run: |
$package = "mode_win_x64_$env:RELEASE_SUFFIX"
New-Item -ItemType Directory -Path "dist\$package" -Force | Out-Null
Copy-Item "out\Release\node.exe" "dist\$package\mode.exe"
Compress-Archive -Path "dist\$package" -DestinationPath "dist\$package.zip"
- name: Stage release asset
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: mode-windows-x64
path: dist/*.zip
if-no-files-found: error

linux-x64:
needs: validate-release-tag
runs-on: ubuntu-24.04
timeout-minutes: 120
env:
RELEASE_SUFFIX: ${{ needs.validate-release-tag.outputs.release_suffix }}
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Configure and build
run: |
./configure
make -j4 node
- name: Run Mode regressions
run: |
out/Release/node test/parallel/test-browser-env.js
out/Release/node --test rs_mode_server/test/server.test.js
- name: Package
run: |
package="mode_linux_x64_${RELEASE_SUFFIX}"
mkdir -p "dist/$package"
cp out/Release/node "dist/$package/mode"
tar -czf "dist/$package.tar.gz" -C dist "$package"
- name: Stage release asset
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: mode-linux-x64
path: dist/*.tar.gz
if-no-files-found: error

publish-release:
needs: [validate-release-tag, mac-arm64, windows-x64, linux-x64]
runs-on: ubuntu-24.04
env:
RELEASE_TAG: ${{ needs.validate-release-tag.outputs.release_tag }}
GH_REPO: ${{ github.repository }}
GH_TOKEN: ${{ github.token }}
steps:
# --notes-from-tag reads the annotated tag through the local Git checkout.
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 0
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
path: dist
merge-multiple: true
- name: 编写中文发布说明
run: |
printf '%s\n' \
'## 本次更新' \
'' \
'- 补齐 `HTMLDivElement`、`HTMLIFrameElement`、空锚点 URL、`NetworkInformation` 与 `BatteryManager`,修正挑战实际创建的 DOM/BOM 对象原型和标签。' \
'- 浏览器环境方法现在为常见 `fn.toString()` 检测提供原生函数形态,并保留真实调用行为。' \
'- 新增源码诊断器:可不重新编译而直接以当前工作区的浏览器环境源码执行缓存挑战,用于发布前定位环境差异。' \
'- `rs_mode_server` 的挑战 Worker 现在隔离 `global`、`process`、`module`、`require`、`setImmediate` 等 Node 全局别名,并取消向挑战脚本注入 CommonJS `require`;保留 `Buffer` 兼容既有挑战脚本。' \
'- 保持 `document.all`、原始 HTML、动态 UA、Cookie、Storage、location/history 与每请求独立 Worker 的兼容行为。' \
'' \
'## 构建与验证' \
'' \
'- 已在 macOS ARM64、Windows x64、Linux x64 统一构建,并执行浏览器环境和 rs_mode_server 本地回归测试。' \
> release-notes.md
- name: Create or update the unified release
run: |
shopt -s nullglob
assets=(dist/*.tar.gz dist/*.zip)
if (( ${#assets[@]} != 3 )); then
echo "Expected exactly three release assets:" >&2
find dist -maxdepth 2 -type f -print >&2
exit 1
fi
if gh release view "$RELEASE_TAG" >/dev/null 2>&1; then
gh release edit "$RELEASE_TAG" --title "$RELEASE_TAG" --notes-file release-notes.md
gh release upload "$RELEASE_TAG" "${assets[@]}" --clobber
else
gh release create "$RELEASE_TAG" "${assets[@]}" \
--verify-tag --title "$RELEASE_TAG" --notes-file release-notes.md
fi
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ install_manifest.txt
# === Rules for AI assistants ===
CLAUDE.md
AGENTS.md
js_reverse_cache/

# === Global Rules ===
# Keep last to avoid being excluded
Expand All @@ -181,3 +182,4 @@ compile_commands.json
.devcontainer/**
!.devcontainer/base/
!.devcontainer/base/devcontainer.json
/rs_mode_server.zip
Loading
Loading