* fix: copy missing files in Dockerfile to fix build
The Docker build failed because Cargo.toml references files that were
not copied into the builder stage:
1. tests/html_to_markdown.rs — declared as [[test]] in Cargo.toml,
Cargo validates the path exists even when only building a binary.
2. build.rs — auto-discovered build script that embeds registry
manifests at compile time via include_str!(env!("OUT_DIR")).
3. registry/ — contains extension manifests read by build.rs to
generate the embedded catalog.
Added COPY directives for build.rs, tests/, and registry/.
Fixesnearai/ironclaw#320
Co-Authored-By: Claude Opus 4.6 <[email protected]>
* Address serrrfirat review feedback on WASM channel omission
- Add Dockerfile comment documenting that channels-src/ is intentionally
omitted since WASM compilation requires wasm32-wasip2 and wasm-tools
which are not installed in the builder stage
Co-Authored-By: Claude Opus 4.6 <[email protected]>
* Add WASM channel compilation support to Docker build
- Copy channels-src/ into builder stage for Telegram/Slack/Discord/WhatsApp
- Install wasm32-wasip2 target and wasm-tools so build.rs can compile
WASM channel components instead of silently skipping them
Co-Authored-By: Claude Opus 4.6 <[email protected]>
---------
Co-authored-by: Claude Opus 4.6 <[email protected]>
* fix: fall back to build-from-source when extension download fails
Extension manifests hardcode GitHub release URLs for WASM artifacts,
but these artifacts are not yet published to any release. This causes
all WASM extension installs to fail with HTTP 404.
Add a fallback_source field to RegistryEntry so that when the primary
WasmDownload source fails (e.g., 404), the installer automatically
falls back to WasmBuildable (build from source). The manifest
conversion now populates this fallback whenever a download URL is set.
Fixesnearai/ironclaw#298
Co-Authored-By: Claude Opus 4.6 <[email protected]>
* Address Copilot/Gemini review feedback
- Skip fallback for AlreadyInstalled errors (Gemini)
- Include both primary and fallback errors in combined message (Copilot)
- Fix comment to match broader behavior (any error, not just download) (Copilot)
Co-Authored-By: Claude Opus 4.6 <[email protected]>
* Address serrrfirat review feedback
- Forward AlreadyInstalled from fallback directly instead of wrapping
in ExtensionError::Other (defensive, prevents misleading error message)
Co-Authored-By: Claude Opus 4.6 <[email protected]>
* Add unit tests for fallback install logic
Extract fallback_decision() and combine_install_errors() from
install_from_entry() to enable direct unit testing without requiring
a full ExtensionManager setup.
Tests cover:
- Primary success returns directly (no fallback attempted)
- AlreadyInstalled short-circuits (no fallback attempted)
- Download failure with fallback available triggers fallback
- Error without fallback source returns primary error
- Both-fail produces combined error with both messages
- AlreadyInstalled from fallback is forwarded directly
Co-Authored-By: Claude Opus 4.6 <[email protected]>
---------
Co-authored-by: Claude Opus 4.6 <[email protected]>
Co-authored-by: firat.sertgoz <[email protected]>
* fix: auto-compact and retry on ContextLengthExceeded in agentic loop
When the LLM returns a context-length-exceeded error mid-turn, the
dispatcher now automatically compacts the conversation history and
retries once instead of propagating the raw error to the user.
The compaction keeps all system messages (system prompt, skill context),
the last user message, and all subsequent messages (current turn's tool
calls and results), dropping older conversation history. A note is
inserted to inform the LLM that earlier context was dropped.
If the retry also fails, the original error is returned.
Fixesnearai/ironclaw#260
Co-Authored-By: Claude Opus 4.6 <[email protected]>
* Address Gemini/Copilot review feedback
- Fix system message duplication: only collect system messages before the
last User message to avoid duplicating nudges in the tail slice (Gemini + Copilot)
- Only add compaction note when earlier history is actually dropped (Copilot)
- Propagate actual retry error instead of masking with original (Copilot)
- Fix else branch to preserve system messages when no User messages exist
- Add test for nudge-after-user deduplication
Co-Authored-By: Claude Opus 4.6 <[email protected]>
---------
Co-authored-by: Claude Opus 4.6 <[email protected]>