Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
2849fc4
build(webui-v2): generate dist bundle at build time
hanakannzashi Jun 25, 2026
4a71a22
Merge branch 'main' into codex/webui-v2-build-dist-artifacts
hanakannzashi Jun 25, 2026
6254cd2
build(reborn): install node for docker webui builds
hanakannzashi Jun 25, 2026
35f6098
Merge remote-tracking branch 'origin/codex/webui-v2-build-dist-artifa…
hanakannzashi Jun 25, 2026
51e0b1a
Merge remote-tracking branch 'origin/main' into codex/webui-v2-build-…
hanakannzashi Jun 25, 2026
f7c3fd4
build(webui-v2): address review comments
hanakannzashi Jun 25, 2026
07445d5
build(webui-v2): harden dist generation
hanakannzashi Jun 25, 2026
7499f0e
Merge remote-tracking branch 'origin/main' into codex/webui-v2-build-…
hanakannzashi Jun 26, 2026
f2ad0c8
Merge remote-tracking branch 'origin/main' into codex/webui-v2-build-…
hanakannzashi Jun 26, 2026
7203924
Merge remote-tracking branch 'origin/main' into codex/webui-v2-build-…
hanakannzashi Jun 26, 2026
33ece8a
ci(webui-v2): cover all-features bundle builds
hanakannzashi Jun 26, 2026
a6b586f
ci(webui-v2): enforce Node 22 in strict gate
hanakannzashi Jun 26, 2026
6b730d1
Merge remote-tracking branch 'origin/main' into codex/webui-v2-build-…
hanakannzashi Jun 26, 2026
3fe5407
docs: note webui node npm requirement
think-in-universe Jun 26, 2026
d0773d8
docs: align webui node requirement
think-in-universe Jun 26, 2026
ef340ca
docs: match webui node prerequisite wording
think-in-universe Jun 26, 2026
d0dda45
Merge remote-tracking branch 'origin/main' into HEAD
think-in-universe Jun 26, 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
2 changes: 2 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@ target/
!crates/**/*.md
!CLAUDE.md
node_modules/
**/node_modules/
crates/ironclaw_webui_v2_static/static/dist/
14 changes: 14 additions & 0 deletions .github/workflows/code_style.yml
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,13 @@ jobs:
uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable
with:
components: clippy
- name: Install Node.js for WebUI bundle builds
if: contains(matrix.flags, '--all-features')
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4
with:
node-version: "22"
cache: "npm"
cache-dependency-path: crates/ironclaw_webui_v2_static/frontend/package-lock.json
- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
with:
shared-key: clippy
Expand Down Expand Up @@ -186,6 +193,13 @@ jobs:
uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable
with:
components: clippy
- name: Install Node.js for WebUI bundle builds
if: contains(matrix.flags, '--all-features')
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4
with:
node-version: "22"
cache: "npm"
cache-dependency-path: crates/ironclaw_webui_v2_static/frontend/package-lock.json
- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
with:
key: windows-${{ matrix.name }}
Expand Down
12 changes: 12 additions & 0 deletions .github/workflows/platform-and-compat.yml
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,12 @@ jobs:
uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable
with:
targets: wasm32-wasip2
- name: Install Node.js for WebUI bundle builds
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4
with:
node-version: "22"
cache: "npm"
cache-dependency-path: crates/ironclaw_webui_v2_static/frontend/package-lock.json
- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
with:
key: wasm-extensions
Expand Down Expand Up @@ -286,6 +292,12 @@ jobs:
persist-credentials: false
- name: Install Rust
uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable
- name: Install Node.js for WebUI bundle builds
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4
with:
node-version: "22"
cache: "npm"
cache-dependency-path: crates/ironclaw_webui_v2_static/frontend/package-lock.json
- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
with:
key: bench
Expand Down
7 changes: 7 additions & 0 deletions .github/workflows/reborn-e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,13 @@ jobs:
- name: Install Rust
uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable

- name: Install Node.js for WebUI bundle build
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4
with:
node-version: "22"
cache: "npm"
cache-dependency-path: crates/ironclaw_webui_v2_static/frontend/package-lock.json

- name: Restore Rust cache
uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
with:
Expand Down
23 changes: 22 additions & 1 deletion .github/workflows/reborn-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,27 @@ jobs:
- name: Install Rust
uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable

- name: Resolve crate feature flags
id: crate-feature-flags
env:
PACKAGE: ${{ matrix.package }}
run: |
feature_flags="$(scripts/ci/package-feature-flags.sh "$PACKAGE")"
echo "feature_flags=${feature_flags}" >> "$GITHUB_OUTPUT"
if [[ "${feature_flags}" == *"webui-v2-beta"* ]]; then
echo "needs_webui_node=true" >> "$GITHUB_OUTPUT"
else
echo "needs_webui_node=false" >> "$GITHUB_OUTPUT"
fi

- name: Install Node.js for WebUI bundle builds
if: ${{ steps.crate-feature-flags.outputs.needs_webui_node == 'true' }}
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4
with:
node-version: "22"
cache: "npm"
cache-dependency-path: crates/ironclaw_webui_v2_static/frontend/package-lock.json
Comment thread
hanakannzashi marked this conversation as resolved.

- name: Install mold and clang
run: |
scripts/ci/install-ci-apt-packages.sh clang mold
Expand All @@ -227,7 +248,7 @@ jobs:
env:
PACKAGE: ${{ matrix.package }}
run: |
feature_flags="$(scripts/ci/package-feature-flags.sh "$PACKAGE")"
feature_flags="${{ steps.crate-feature-flags.outputs.feature_flags }}"

if [ "$PACKAGE" = "ironclaw_reborn_composition" ]; then
echo "Disabling incremental compilation for ironclaw_reborn_composition to keep runner disk usage bounded."
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@ trace_*.json
# root they land in ./attachments/. These are user uploads, never source.
/attachments/

# Generated WebUI v2 bundle. Cargo builds and embeds this from OUT_DIR when
# `webui-v2-beta` is enabled; the reviewable source lives under static/js/.
/crates/ironclaw_webui_v2_static/static/dist/

# Python cache
__pycache__/
*.pyc
Expand Down
11 changes: 10 additions & 1 deletion Dockerfile.reborn
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,18 @@
# Postgres-backed hosted storage, or hosted-single-tenant-volume for a
# Railway volume-backed single-tenant preview.

FROM node:22.23.1-bookworm-slim@sha256:813a7480f28fdadac1f7f5c824bcdad435b5bc1322a5968bbbdef8d058f9dff4 AS node_toolchain

FROM rust:1.92-bookworm AS chef

RUN cargo install --locked cargo-chef@0.1.77
COPY --from=node_toolchain /usr/local/bin/node /usr/local/bin/node
COPY --from=node_toolchain /usr/local/lib/node_modules/ /usr/local/lib/node_modules/

RUN ln -sf ../lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \
&& ln -sf ../lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx \
&& node --version \
&& npm --version \
&& cargo install --locked cargo-chef@0.1.77

WORKDIR /app

Expand Down
7 changes: 5 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -229,8 +229,10 @@ cargo run -q -p ironclaw_reborn_cli --bin ironclaw-reborn -- repl --confirm-host

### WebUI service

The Reborn WebUI is compiled behind the `webui-v2-beta` Cargo feature. Build or
run the binary with that feature to enable the `serve` command:
The Reborn WebUI is compiled behind the `webui-v2-beta` Cargo feature. Builds
with this feature require Node.js/npm so Cargo can generate and embed the SPA
bundle. Build or run the binary with that feature to enable the `serve`
command:

```bash
cargo run -q -p ironclaw_reborn_cli --features webui-v2-beta --bin ironclaw-reborn -- serve --help
Expand Down Expand Up @@ -422,6 +424,7 @@ IronClaw is the AI assistant you can actually trust with your personal and profe

- Rust 1.92+
- PostgreSQL 15+ with [pgvector](https://github.com/pgvector/pgvector) extension
- Node.js 22+ (npm) for source builds that enable the `webui-v2-beta` feature
- NEAR AI account (authentication handled via setup wizard)
- `libclang` and a working C toolchain if you build the WeChat voice/SILK path from source

Expand Down
4 changes: 4 additions & 0 deletions crates/ironclaw_reborn_cli/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ cargo install --path crates/ironclaw_reborn_cli --features webui-v2-beta
cargo build -p ironclaw_reborn_cli --features webui-v2-beta --release
```

The beta WebUI static crate runs the frontend bundler from Cargo build scripts,
so any `webui-v2-beta` or `--all-features` build needs Node.js/npm available
even though the generated `static/dist/` bundle is not committed.

When the feature is off, `ironclaw-reborn --help` does not list `serve`
and `ironclaw-reborn serve …` returns `error: unrecognized subcommand`.
This is verified by `help_mentions_reborn_commands` in `tests/smoke.rs`,
Expand Down
Loading
Loading