diff --git a/.github/workflows/publish_release_binaries.yml b/.github/workflows/publish_release_binaries.yml index 841cf0eee..a168ac524 100644 --- a/.github/workflows/publish_release_binaries.yml +++ b/.github/workflows/publish_release_binaries.yml @@ -78,12 +78,14 @@ jobs: - os: arc-netclaw rid: linux-x64 archive_ext: tar.gz - - os: ubuntu-24.04-arm - rid: linux-arm64 - archive_ext: tar.gz - - os: windows-latest - rid: win-x64 - archive_ext: zip + # Disabled: no self-hosted ARM runner available yet + # - os: ubuntu-24.04-arm + # rid: linux-arm64 + # archive_ext: tar.gz + # Disabled: no self-hosted Windows runner available yet + # - os: windows-latest + # rid: win-x64 + # archive_ext: zip steps: - name: Checkout uses: actions/checkout@v6 @@ -134,21 +136,18 @@ jobs: tar czf "./archives/netclawd-${VERSION}-${RID}.tar.gz" \ -C ./publish/daemon netclawd - - name: Package archives (Windows) - if: runner.os == 'Windows' - shell: pwsh - run: | - $VERSION = "${{ github.ref_name }}" - $RID = "${{ matrix.rid }}" - New-Item -ItemType Directory -Path ./archives -Force - - # CLI archive - Compress-Archive -Path ./publish/cli/netclaw.exe ` - -DestinationPath "./archives/netclaw-${VERSION}-${RID}.zip" - - # Daemon archive - Compress-Archive -Path ./publish/daemon/netclawd.exe ` - -DestinationPath "./archives/netclawd-${VERSION}-${RID}.zip" + # Disabled: no self-hosted Windows runner available yet + # - name: Package archives (Windows) + # if: runner.os == 'Windows' + # shell: pwsh + # run: | + # $VERSION = "${{ github.ref_name }}" + # $RID = "${{ matrix.rid }}" + # New-Item -ItemType Directory -Path ./archives -Force + # Compress-Archive -Path ./publish/cli/netclaw.exe ` + # -DestinationPath "./archives/netclaw-${VERSION}-${RID}.zip" + # Compress-Archive -Path ./publish/daemon/netclawd.exe ` + # -DestinationPath "./archives/netclawd-${VERSION}-${RID}.zip" - name: Compute checksums shell: bash diff --git a/Directory.Build.props b/Directory.Build.props index 95482a5e4..1690fb0e0 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -7,14 +7,34 @@ latest enable true - 0.4.0 - Netclaw v0.4.0 — SQLite memory redesign and deterministic memory evals + 0.5.0 + Netclaw v0.5.0 — Observer-driven memory recall, local model reliability, and skills platform overhaul -**Memory Platform Upgrade** +**Memory Recall Planning** -* Replaced file-backed memorizer surfaces with SQLite-backed memory tools and added a policy-first background curation pipeline for checkpoint formation, hygiene, and recall quality. ([#186](https://github.com/Aaronontheweb/netclaw/pull/186)) -* Added deterministic memory eval tooling and suite profiles (`smoke` and `realistic`) with query-trace output to make recall regressions diagnosable without LLM variance. ([#186](https://github.com/Aaronontheweb/netclaw/pull/186)) -* Added memory health diagnostics and runtime status exposure for checkpoint curation, plus a config-backed switch for disabling system skill sync during local validation. ([#186](https://github.com/Aaronontheweb/netclaw/pull/186)) +* Added sidecar-driven memory observation and recall planning with deterministic policy gates, expiry handling, and SQLite-backed retrieval — the agent now plans what to recall before acting, rather than issuing ad-hoc memory queries. ([#198](https://github.com/Aaronontheweb/netclaw/pull/198)) +* Fixed memory curation worker shutdown: `TaskCanceledException` from in-flight store awaitables during daemon stop is now caught and discarded cleanly instead of surfacing as a crash log. ([#190](https://github.com/Aaronontheweb/netclaw/pull/190)) + +**Local Model Reliability** + +* Fixed multi-turn tool calling for OpenAI-compatible providers: assistant messages with tool calls and tool result messages now serialize `tool_calls` and `tool_call_id` correctly — previously the second LLM request in a tool loop contained malformed history causing models to fall back to emitting tool calls as raw text. ([#210](https://github.com/Aaronontheweb/netclaw/pull/210)) +* Added text-based tool call extraction for models that emit tool calls as XML-like prose instead of structured fields (observed with Qwen3.5) — the parser activates as a fallback when no structured tool calls are present, making these models usable for multi-step tool workflows. ([#213](https://github.com/Aaronontheweb/netclaw/pull/213)) +* Added OpenAI-compatible local endpoint support — operators can now configure endpoints like Ollama or LM Studio as a first-class provider type. ([#208](https://github.com/Aaronontheweb/netclaw/pull/208)) +* Fixed capability detection for GGUF and quantized model IDs: the normalizer now strips `.gguf` extensions, GGML quantization suffixes (`-Q5_K_M`, `-IQ2_XXS`, `-Q4_K_XL`), and build-variant segments (`-UD`, `-BPW4`) before capability resolution — models now correctly report multimodal context windows and input types instead of falling back to text-only defaults. ([#215](https://github.com/Aaronontheweb/netclaw/pull/215)) + +**Skills Platform** + +* Adopted the AgentSkills.io SKILL.md standard: skills now use YAML frontmatter (name, description, triggers, license, compatibility, allowed-tools) and a directory-based layout (`skill-name/SKILL.md`) with progressive disclosure via `references/`, `scripts/`, and `assets/` subdirectories. Feed manifest supports per-file SHA-256 verification for multi-file skills. ([#216](https://github.com/Aaronontheweb/netclaw/pull/216)) +* Added `capability-reference` system skill — the agent's single authoritative reference for all 16 built-in tools across 5 grant categories, CLI commands, scheduling syntax, MCP discovery patterns, and session context. Also updates `self-diagnostics` to v1.2.0 with a cross-reference. ([#217](https://github.com/Aaronontheweb/netclaw/pull/217)) +* Added `search-citation` system skill — guides the agent on when to use `web_search` versus training data, requires source URLs for all specific factual claims, and covers local search, travel, and product search verticals with progressive disclosure reference files. ([#219](https://github.com/Aaronontheweb/netclaw/pull/219)) + +**Session Self-Awareness** + +* The agent's session ID (`{channelId}/{threadTs}`) is now injected into the per-turn dynamic context layers, allowing the agent to be self-referential about its own session in tool calls and memory operations. ([#218](https://github.com/Aaronontheweb/netclaw/pull/218)) + +**Stability** + +* Fixed a stream materializer actor leak in the SignalR session binding: stream stage actors were previously created under the global `StreamSupervisor-0` and accumulated over the daemon's lifetime. A new per-session `SignalRSessionActor` scopes the materializer to the session lifecycle, so all stream children are torn down automatically when the session ends. ([#192](https://github.com/Aaronontheweb/netclaw/pull/192)) net10.0 diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index ced783452..ef47d7d85 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,3 +1,33 @@ +#### 0.5.0 2026-03-13 #### + +Netclaw v0.5.0 — Observer-driven memory recall, local model reliability, and skills platform overhaul + +**Memory Recall Planning** + +* Added sidecar-driven memory observation and recall planning with deterministic policy gates, expiry handling, and SQLite-backed retrieval — the agent now plans what to recall before acting, rather than issuing ad-hoc memory queries. ([#198](https://github.com/Aaronontheweb/netclaw/pull/198)) +* Fixed memory curation worker shutdown: `TaskCanceledException` from in-flight store awaitables during daemon stop is now caught and discarded cleanly instead of surfacing as a crash log. ([#190](https://github.com/Aaronontheweb/netclaw/pull/190)) + +**Local Model Reliability** + +* Fixed multi-turn tool calling for OpenAI-compatible providers: assistant messages with tool calls and tool result messages now serialize `tool_calls` and `tool_call_id` correctly — previously the second LLM request in a tool loop contained malformed history causing models to fall back to emitting tool calls as raw text. ([#210](https://github.com/Aaronontheweb/netclaw/pull/210)) +* Added text-based tool call extraction for models that emit tool calls as XML-like prose instead of structured fields (observed with Qwen3.5) — the parser activates as a fallback when no structured tool calls are present, making these models usable for multi-step tool workflows. ([#213](https://github.com/Aaronontheweb/netclaw/pull/213)) +* Added OpenAI-compatible local endpoint support — operators can now configure endpoints like Ollama or LM Studio as a first-class provider type. ([#208](https://github.com/Aaronontheweb/netclaw/pull/208)) +* Fixed capability detection for GGUF and quantized model IDs: the normalizer now strips `.gguf` extensions, GGML quantization suffixes (`-Q5_K_M`, `-IQ2_XXS`, `-Q4_K_XL`), and build-variant segments (`-UD`, `-BPW4`) before capability resolution — models now correctly report multimodal context windows and input types instead of falling back to text-only defaults. ([#215](https://github.com/Aaronontheweb/netclaw/pull/215)) + +**Skills Platform** + +* Adopted the AgentSkills.io SKILL.md standard: skills now use YAML frontmatter (name, description, triggers, license, compatibility, allowed-tools) and a directory-based layout (`skill-name/SKILL.md`) with progressive disclosure via `references/`, `scripts/`, and `assets/` subdirectories. Feed manifest supports per-file SHA-256 verification for multi-file skills. ([#216](https://github.com/Aaronontheweb/netclaw/pull/216)) +* Added `capability-reference` system skill — the agent's single authoritative reference for all 16 built-in tools across 5 grant categories, CLI commands, scheduling syntax, MCP discovery patterns, and session context. Also updates `self-diagnostics` to v1.2.0 with a cross-reference. ([#217](https://github.com/Aaronontheweb/netclaw/pull/217)) +* Added `search-citation` system skill — guides the agent on when to use `web_search` versus training data, requires source URLs for all specific factual claims, and covers local search, travel, and product search verticals with progressive disclosure reference files. ([#219](https://github.com/Aaronontheweb/netclaw/pull/219)) + +**Session Self-Awareness** + +* The agent's session ID (`{channelId}/{threadTs}`) is now injected into the per-turn dynamic context layers, allowing the agent to be self-referential about its own session in tool calls and memory operations. ([#218](https://github.com/Aaronontheweb/netclaw/pull/218)) + +**Stability** + +* Fixed a stream materializer actor leak in the SignalR session binding: stream stage actors were previously created under the global `StreamSupervisor-0` and accumulated over the daemon's lifetime. A new per-session `SignalRSessionActor` scopes the materializer to the session lifecycle, so all stream children are torn down automatically when the session ends. ([#192](https://github.com/Aaronontheweb/netclaw/pull/192)) + #### 0.4.0 2026-03-08 #### Netclaw v0.4.0 — SQLite memory redesign and deterministic memory evals