Skip to content

feat(openclaw): add in-process managed LLM execution - #1005

Draft
willkill07 wants to merge 1 commit into
NVIDIA:mainfrom
willkill07:feat/openclaw-live-relay-provider
Draft

feat(openclaw): add in-process managed LLM execution#1005
willkill07 wants to merge 1 commit into
NVIDIA:mainfrom
willkill07:feat/openclaw-live-relay-provider

Conversation

@willkill07

Copy link
Copy Markdown
Member

Overview

  • Replace the OpenClaw observability replay plugin with an in-process nemo-relay provider that wraps OpenClaw's real stream execution and maintains deterministic live Relay lineage.

  • I confirm this contribution is my own work, or I have the right to submit it under this project's license.

  • I searched existing issues and open pull requests, and this does not duplicate existing work.

Details

  • Register dynamic nemo-relay/<upstream-provider>/<upstream-model-id> mappings through OpenClaw's resolveDynamicModel and wrapStreamFn provider APIs.
  • Execute managed LLM calls entirely in process through nemo-relay-node, while leaving authentication and network transport with the original OpenClaw stream function.
  • Replace transcript replay with live session, agent-run, LLM, provider-execution, tool-call, and subagent handles. Missing or ambiguous managed lineage fails closed instead of guessing a parent.
  • Apply LLM guardrails, request intercepts, execution intercepts, stream execution intercepts, adaptive behavior, and observability to the real provider call.
  • Apply tool conditional guardrails and request intercepts through public OpenClaw hooks. Tool execution intercepts remain unsupported because the public hooks do not expose the execution callback.
  • Remove plugin-level capture controls so Relay event sanitizers and observability configuration exclusively own payload filtering.
  • Add verified compatibility adapters for OpenAI, Anthropic, Google/Vertex, and OpenRouter routes. Unknown, recursive, and unsupported routes fail closed.
  • Add bounded Node stream backpressure and producer-error propagation needed to preserve managed stream behavior.
  • Target OpenClaw 2026.9.3, use an optional >=2026.9.3 <2027 peer dependency, and publish compiled JavaScript only.
  • Accept legacy backend and correlation fields for one release as deprecated no-ops. The removed replay and capture configuration are breaking changes.
  • This broader provider refresh subsumes the OpenClaw dependency, optional peer, lockfile, and attribution updates in chore: update OpenClaw dependency #1004.

Validation:

  • just test-openclaw — 14 source tests passed, 2 environment-gated tests skipped, 2 native live smoke tests passed, and the 20-file package payload check passed.
  • just test-node — 414 Node tests and 26 Node plugin-example tests passed.
  • just test-rust — 4,645 workspace tests, 10 native-plugin tests, 13 gRPC worker-plugin tests, and 20 language-binding plugin tests passed.
  • just docs
  • just docs-linkcheck
  • uv run pre-commit run --all-files

Credentialed external smoke calls for all four upstream provider families were not run because provider credentials were unavailable in the test environment.

Where should the reviewer start?

Start with integrations/openclaw/src/provider.ts for managed provider execution and integrations/openclaw/src/lineage.ts for the strict live-parenting model. Then review integrations/openclaw/src/runtime-state.ts for OpenClaw hook and plugin-host lifecycle integration.

Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to)

Signed-off-by: Will Killian <wkillian@nvidia.com>
@coderabbitai

coderabbitai Bot commented Sep 8, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added size:XXL PR is very large Feature a new feature lang:js PR changes/introduces Javascript/Typescript code lang:rust PR changes/introduces Rust code labels Sep 8, 2026
@willkill07 willkill07 changed the title feat: add in-process OpenClaw provider feat(openclaw): add in-process managed LLM execution Sep 8, 2026
@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown

License Diff

Compared against origin/main.

Lockfile license changes

Lockfile License Changes

Rust

Added

  • None

Removed

  • None

Updated/Changed

  • None

Node

Added

  • @koromix/koffi-darwin-arm64 3.1.6 (MIT)
  • @koromix/koffi-darwin-x64 3.1.6 (MIT)
  • @koromix/koffi-freebsd-arm64 3.1.6 (MIT)
  • @koromix/koffi-freebsd-ia32 3.1.6 (MIT)
  • @koromix/koffi-freebsd-x64 3.1.6 (MIT)
  • @koromix/koffi-linux-arm64 3.1.6 (MIT)
  • @koromix/koffi-linux-ia32 3.1.6 (MIT)
  • @koromix/koffi-linux-loong64 3.1.6 (MIT)
  • @koromix/koffi-linux-riscv64 3.1.6 (MIT)
  • @koromix/koffi-linux-x64 3.1.6 (MIT)
  • @koromix/koffi-openbsd-ia32 3.1.6 (MIT)
  • @koromix/koffi-openbsd-x64 3.1.6 (MIT)
  • @koromix/koffi-win32-arm64 3.1.6 (MIT)
  • @koromix/koffi-win32-ia32 3.1.6 (MIT)
  • @koromix/koffi-win32-x64 3.1.6 (MIT)
  • @openclaw/fs-safe-darwin-arm64 0.8.5 (MIT)
  • @openclaw/fs-safe-darwin-x64 0.8.5 (MIT)
  • @openclaw/fs-safe-linux-arm64-gnu 0.8.5 (MIT)
  • @openclaw/fs-safe-linux-arm64-musl 0.8.5 (MIT)
  • @openclaw/fs-safe-linux-x64-gnu 0.8.5 (MIT)
  • @openclaw/fs-safe-linux-x64-musl 0.8.5 (MIT)
  • @openclaw/fs-safe-win32-x64-msvc 0.8.5 (MIT)
  • @sec-ant/readable-stream 0.4.1 (MIT)
  • @sindresorhus/merge-streams 4.0.0 (MIT)
  • @trycua/cua-driver 0.22.2 (MIT)
  • @trycua/cua-driver-darwin-arm64 0.22.2 (MIT AND MPL-2.0)
  • @trycua/cua-driver-darwin-x64 0.22.2 (MIT AND MPL-2.0)
  • @trycua/cua-driver-linux-arm64-gnu 0.22.2 (MIT AND MPL-2.0)
  • @trycua/cua-driver-linux-x64-gnu 0.22.2 (MIT AND MPL-2.0)
  • @trycua/cua-driver-win32-arm64-msvc 0.22.2 (MIT AND MPL-2.0)
  • @trycua/cua-driver-win32-x64-msvc 0.22.2 (MIT AND MPL-2.0)
  • @ubjs/core 0.31.0-3 (MPL-2.0)
  • @ubjs/node 0.31.0-3 (MPL-2.0)
  • @ubjs/node-darwin-arm64 0.31.0-3 (MPL-2.0)
  • @ubjs/node-darwin-x64 0.31.0-3 (MPL-2.0)
  • @ubjs/node-linux-arm64-gnu 0.31.0-3 (MPL-2.0)
  • @ubjs/node-linux-arm64-musl 0.31.0-3 (MPL-2.0)
  • @ubjs/node-linux-x64-gnu 0.31.0-3 (MPL-2.0)
  • @ubjs/node-linux-x64-musl 0.31.0-3 (MPL-2.0)
  • @ubjs/node-win32-arm64-msvc 0.31.0-3 (MPL-2.0)
  • @ubjs/node-win32-x64-msvc 0.31.0-3 (MPL-2.0)
  • acorn 8.18.0 (MIT)
  • execa 10.0.1 (MIT)
  • figures 6.1.0 (MIT)
  • get-stream 9.0.1 (MIT)
  • human-signals 8.0.1 (Apache-2.0)
  • is-plain-obj 4.1.0 (MIT)
  • is-stream 4.0.1 (MIT)
  • is-unicode-supported 2.1.0 (MIT)
  • koffi 3.1.6 (MIT)
  • node-domexception 1.0.0 (MIT)
  • npm-run-path 6.0.0 (MIT)
  • p-map 7.0.7 (MIT)
  • parse-ms 4.0.0 (MIT)
  • pretty-ms 9.3.1 (MIT)
  • strip-final-newline 4.0.0 (MIT)
  • unicorn-magic 0.3.0 (MIT)
  • which-command 0.1.0 (MIT)
  • yoctocolors 2.2.0 (MIT)

Removed

  • @nolyfill/domexception 1.0.28 (MIT)
  • @protobufjs/inquire 1.1.2 (BSD-3-Clause)
  • graceful-fs 4.2.11 (ISC)
  • proper-lockfile 4.1.2 (MIT)

Updated/Changed

@agentclientprotocol/sdk

Before:

  • @agentclientprotocol/sdk 1.1.0 (Apache-2.0)

After:

  • @agentclientprotocol/sdk 1.4.0 (Apache-2.0)

@anthropic-ai/sdk

Before:

  • @anthropic-ai/sdk 0.109.1 (MIT)

After:

  • @anthropic-ai/sdk 0.120.0 (MIT)

@clack/core

Before:

  • @clack/core 1.4.2 (MIT)

After:

  • @clack/core 1.4.3 (MIT)

@clack/prompts

Before:

  • @clack/prompts 1.6.0 (MIT)

After:

  • @clack/prompts 1.7.0 (MIT)

@earendil-works/pi-tui

Before:

  • @earendil-works/pi-tui 0.80.3 (MIT)

After:

  • @earendil-works/pi-tui 0.84.4 (MIT)

@google/genai

Before:

  • @google/genai 2.10.0 (Apache-2.0)

After:

  • @google/genai 2.19.0 (Apache-2.0)

@grammyjs/types

Before:

  • @grammyjs/types 3.28.0 (MIT)

After:

  • @grammyjs/types 5.0.0 (MIT)

@homebridge/ciao

Before:

  • @homebridge/ciao 1.3.9 (MIT)

After:

  • @homebridge/ciao 1.3.12 (MIT)

@hono/node-server

Before:

  • @hono/node-server 1.19.14 (MIT)

After:

  • @hono/node-server 2.1.1 (MIT)

@lydell/node-pty

Before:

  • @lydell/node-pty 1.2.0-beta.12 (MIT)

After:

  • @lydell/node-pty 1.2.0-beta.15 (MIT)

@lydell/node-pty-darwin-arm64

Before:

  • @lydell/node-pty-darwin-arm64 1.2.0-beta.12 (MIT)

After:

  • @lydell/node-pty-darwin-arm64 1.2.0-beta.15 (MIT)

@lydell/node-pty-darwin-x64

Before:

  • @lydell/node-pty-darwin-x64 1.2.0-beta.12 (MIT)

After:

  • @lydell/node-pty-darwin-x64 1.2.0-beta.15 (MIT)

@lydell/node-pty-linux-arm64

Before:

  • @lydell/node-pty-linux-arm64 1.2.0-beta.12 (MIT)

After:

  • @lydell/node-pty-linux-arm64 1.2.0-beta.15 (MIT)

@lydell/node-pty-linux-x64

Before:

  • @lydell/node-pty-linux-x64 1.2.0-beta.12 (MIT)

After:

  • @lydell/node-pty-linux-x64 1.2.0-beta.15 (MIT)

@lydell/node-pty-win32-arm64

Before:

  • @lydell/node-pty-win32-arm64 1.2.0-beta.12 (MIT)

After:

  • @lydell/node-pty-win32-arm64 1.2.0-beta.15 (MIT)

@lydell/node-pty-win32-x64

Before:

  • @lydell/node-pty-win32-x64 1.2.0-beta.12 (MIT)

After:

  • @lydell/node-pty-win32-x64 1.2.0-beta.15 (MIT)

@mistralai/mistralai

Before:

  • @mistralai/mistralai 2.4.0 (Apache-2.0)

After:

  • @mistralai/mistralai 2.6.4 (Apache-2.0)

@modelcontextprotocol/sdk

Before:

  • @modelcontextprotocol/sdk 1.29.0 (MIT)

After:

  • @modelcontextprotocol/sdk 1.30.0 (MIT)

@openclaw/ai

Before:

  • @openclaw/ai 2026.7.1-2 (MIT)

After:

  • @openclaw/ai 2026.9.3 (MIT)

@openclaw/fs-safe

Before:

  • @openclaw/fs-safe 0.4.1 (MIT)

After:

  • @openclaw/fs-safe 0.8.5 (MIT)

@openclaw/proxyline

Before:

  • @openclaw/proxyline 0.3.3 (MIT)

After:

  • @openclaw/proxyline 0.3.11 (MIT)

@opentelemetry/semantic-conventions

Before:

  • @opentelemetry/semantic-conventions 1.41.1 (Apache-2.0)

After:

  • @opentelemetry/semantic-conventions 1.43.0 (Apache-2.0)

@protobufjs/utf8

Before:

  • @protobufjs/utf8 1.1.1 (BSD-3-Clause)

After:

  • @protobufjs/utf8 1.1.2 (BSD-3-Clause)

@types/node

Before:

  • @types/node 24.12.4 (MIT)
  • @types/node 26.1.0 (MIT)

After:

  • @types/node 24.12.4 (MIT)

@types/retry

Before:

  • @types/retry 0.12.5 (MIT)

After:

  • @types/retry 0.12.0 (MIT)

boolbase

Before:

  • boolbase 1.0.0 (ISC)

After:

  • boolbase 2.0.0 (ISC)

brace-expansion

Before:

  • brace-expansion 5.0.6 (MIT)
  • brace-expansion 5.0.7 (MIT)

After:

  • brace-expansion 5.0.9 (MIT)

chalk

Before:

  • chalk 5.6.2 (MIT)

After:

  • chalk 6.0.0 (MIT)

clawpdf

Before:

  • clawpdf 0.3.0 (MIT)

After:

  • clawpdf 0.3.1 (MIT)

content-type

Before:

  • content-type 1.0.5 (MIT)
  • content-type 2.0.0 (MIT)

After:

  • content-type 1.0.5 (MIT)
  • content-type 2.1.0 (MIT)

css-select

Before:

  • css-select 5.2.2 (BSD-2-Clause)

After:

  • css-select 7.0.0 (BSD-2-Clause)

css-what

Before:

  • css-what 6.2.2 (BSD-2-Clause)

After:

  • css-what 8.0.0 (BSD-2-Clause)

dom-serializer

Before:

  • dom-serializer 2.0.0 (MIT)

After:

  • dom-serializer 2.0.0 (MIT)
  • dom-serializer 3.1.1 (MIT)

domelementtype

Before:

  • domelementtype 2.3.0 (BSD-2-Clause)

After:

  • domelementtype 2.3.0 (BSD-2-Clause)
  • domelementtype 3.0.0 (BSD-2-Clause)

domhandler

Before:

  • domhandler 5.0.3 (BSD-2-Clause)

After:

  • domhandler 5.0.3 (BSD-2-Clause)
  • domhandler 6.0.1 (BSD-2-Clause)

domutils

Before:

  • domutils 3.2.2 (BSD-2-Clause)

After:

  • domutils 3.2.2 (BSD-2-Clause)
  • domutils 4.0.2 (BSD-2-Clause)

entities

Before:

  • entities 4.5.0 (BSD-2-Clause)
  • entities 7.0.1 (BSD-2-Clause)

After:

  • entities 4.5.0 (BSD-2-Clause)
  • entities 7.0.1 (BSD-2-Clause)
  • entities 8.0.0 (BSD-2-Clause)
  • entities 8.1.0 (BSD-2-Clause)

eventsource-parser

Before:

  • eventsource-parser 3.1.0 (MIT)

After:

  • eventsource-parser 3.1.1 (MIT)

express-rate-limit

Before:

  • express-rate-limit 8.5.2 (MIT)

After:

  • express-rate-limit 8.7.0 (MIT)

fast-uri

Before:

  • fast-uri 3.1.2 (BSD-3-Clause)

After:

  • fast-uri 3.1.7 (BSD-3-Clause)

file-type

Before:

  • file-type 22.0.1 (MIT)

After:

  • file-type 22.0.2 (MIT)

gaxios

Before:

  • gaxios 7.1.5 (Apache-2.0)

After:

  • gaxios 7.3.1 (Apache-2.0)

google-auth-library

Before:

  • google-auth-library 10.9.0 (Apache-2.0)

After:

  • google-auth-library 10.9.1 (Apache-2.0)

grammy

Before:

  • grammy 1.44.0 (MIT)

After:

  • grammy 1.46.0 (MIT)

highlight.js

Before:

  • highlight.js 11.11.1 (BSD-3-Clause)

After:

  • highlight.js 11.12.0 (BSD-3-Clause)

hono

Before:

  • hono 4.12.25 (MIT)

After:

  • hono 4.13.7 (MIT)

iconv-lite

Before:

  • iconv-lite 0.7.2 (MIT)

After:

  • iconv-lite 0.7.3 (MIT)

ignore

Before:

  • ignore 7.0.5 (MIT)

After:

  • ignore 7.0.7 (MIT)

ip-address

Before:

  • ip-address 10.2.0 (MIT)

After:

  • ip-address 10.7.0 (MIT)

jose

Before:

  • jose 6.2.3 (MIT)

After:

  • jose 6.2.12 (MIT)

kysely

Before:

  • kysely 0.29.2 (MIT)

After:

  • kysely 0.29.5 (MIT)

linkedom

Before:

  • linkedom 0.18.12 (ISC)

After:

  • linkedom 0.18.13 (ISC)

media-typer

Before:

  • media-typer 1.1.0 (MIT)

After:

  • media-typer 1.1.1 (MIT)

minimatch

Before:

  • minimatch 10.2.5 (BlueOak-1.0.0)

After:

  • minimatch 10.2.6 (BlueOak-1.0.0)

negotiator

Before:

  • negotiator 1.0.0 (MIT)

After:

  • negotiator 1.1.0 (MIT)

nth-check

Before:

  • nth-check 2.1.1 (BSD-2-Clause)

After:

  • nth-check 3.0.1 (BSD-2-Clause)

openai

Before:

  • openai 6.45.0 (Apache-2.0)

After:

  • openai 7.8.0 (Apache-2.0)

openclaw

Before:

  • openclaw 2026.7.1-2 (MIT)

After:

  • openclaw 2026.9.3 (MIT)

path-key

Before:

  • path-key 3.1.1 (MIT)

After:

  • path-key 3.1.1 (MIT)
  • path-key 4.0.0 (MIT)

path-to-regexp

Before:

  • path-to-regexp 8.4.0 (MIT)

After:

  • path-to-regexp 8.4.2 (MIT)

playwright-core

Before:

  • playwright-core 1.61.1 (Apache-2.0)

After:

  • playwright-core 1.62.1 (Apache-2.0)

protobufjs

Before:

  • protobufjs 7.6.3 (BSD-3-Clause)

After:

  • protobufjs 7.6.6 (BSD-3-Clause)

qs

Before:

  • qs 6.15.2 (BSD-3-Clause)

After:

  • qs 6.16.0 (BSD-3-Clause)

quickjs-wasi

Before:

  • quickjs-wasi 3.0.2 (MIT)

After:

  • quickjs-wasi 3.6.0 (MIT)

rastermill

Before:

  • rastermill 0.3.1 (MIT)

After:

  • rastermill 0.3.2 (MIT)

retry

Before:

  • retry 0.12.0 (MIT)
  • retry 0.13.1 (MIT)

After:

  • retry 0.13.1 (MIT)

semver

Before:

  • semver 7.7.4 (ISC)

After:

  • semver 7.8.5 (ISC)

signal-exit

Before:

  • signal-exit 3.0.7 (ISC)
  • signal-exit 4.1.0 (ISC)

After:

  • signal-exit 4.1.0 (ISC)

standardwebhooks

Before:

  • standardwebhooks 1.0.0 (MIT)

After:

  • standardwebhooks 1.1.1 (MIT)

tar

Before:

  • tar 7.5.19 (BlueOak-1.0.0)

After:

  • tar 7.5.22 (BlueOak-1.0.0)

tslog

Before:

  • tslog 4.10.2 (MIT)

After:

  • tslog 4.11.0 (MIT)

typebox

Before:

  • typebox 1.3.3 (MIT)

After:

  • typebox 1.3.18 (MIT)

undici

Before:

  • undici 8.5.0 (MIT)

After:

  • undici 8.10.2 (MIT)

undici-types

Before:

  • undici-types 7.16.0 (MIT)
  • undici-types 8.3.0 (MIT)

After:

  • undici-types 7.16.0 (MIT)

web-tree-sitter

Before:

  • web-tree-sitter 0.26.10 (MIT)

After:

  • web-tree-sitter 0.27.0 (MIT)

ws

Before:

  • ws 8.21.0 (MIT)

After:

  • ws 8.21.3 (MIT)

Python

Added

  • None

Removed

  • None

Updated/Changed

  • None
Status output
[license-diff] selected languages: rust, node, python
[license-diff] generating current inventory
[license-diff] current: generating Rust inventory
[license-diff] current: Rust inventory complete (457 packages)
[license-diff] current: generating Node inventory
[license-diff] current: Node inventory complete (424 packages)
[license-diff] current: generating Python inventory
[license-diff] current: Python inventory complete (105 packages)
[license-diff] current inventory complete
[license-diff] checking out base ref origin/main into a temporary worktree
[license-diff] base: generating Rust inventory
[license-diff] base: Rust inventory complete (457 packages)
[license-diff] base: generating Node inventory
[license-diff] base: Node inventory complete (367 packages)
[license-diff] base: generating Python inventory
[license-diff] base: Python inventory complete (105 packages)
[license-diff] base inventory complete
[license-diff] removing temporary base worktree
[license-diff] comparing inventories
[license-diff] rendering Markdown output
[license-diff] done

@willkill07 willkill07 self-assigned this Sep 8, 2026
@willkill07 willkill07 added this to the 0.9 milestone Sep 8, 2026
@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown

@willkill07 willkill07 modified the milestones: 0.9, 1.0 Sep 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Feature a new feature lang:js PR changes/introduces Javascript/Typescript code lang:rust PR changes/introduces Rust code size:XXL PR is very large

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant