Files
Mike 8c1a55d446 fix(openai-responses): reconcile terminal tool calls (#108461)
* fix(ai): reconcile terminal Responses tool calls

Recover validated terminal tool calls through one completion owner when item-done events are missing. Reuse positional completion state, preserve exact arguments, and reject ambiguous or conflicting batches before tool execution. Also remove the shared empty identity alias for anonymous calls.

Fixes #108460. Builds on #122560 and preserves the original contribution from #108461.

Co-authored-by: snotty <snotty@users.noreply.github.com>

* refactor(ai): type terminal tool scratch state directly

* fix(ai): retain anonymous tool completion ownership

* chore(ai): prune resolved assertion baseline

* test(ai): deduplicate generated tool identity coverage

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: snotty <snotty@users.noreply.github.com>
2026-08-26 20:39:37 -07:00
..

@openclaw/ai

Reusable model API contracts, provider adapters, and streaming primitives from OpenClaw. The package supports isolated runtime instances; importing it does not register providers globally.

import { createLlmRuntime } from "@openclaw/ai";
import { registerBuiltInApiProviders } from "@openclaw/ai/providers";

const runtime = createLlmRuntime();
registerBuiltInApiProviders(runtime.registry);

Provider-neutral contracts, validation, diagnostics, and event streams are available from the package root and focused subpaths such as @openclaw/ai/event-stream, @openclaw/ai/transports, and @openclaw/ai/validation. No second OpenClaw runtime package is required.

Provider ids, credentials, model catalogs, retries, and failover remain application concerns. OpenClaw supplies those policies around this package. Host policy (request fetch guarding, secret redaction, strict-tool defaults, provider plugin hooks, and diagnostics logging) can be injected with configureAiTransportHost; the defaults are inert.

The explicit @openclaw/ai/internal/anthropic, openai, retry-after, runtime, and shared subpaths exist for the OpenClaw application itself. They carry no semver guarantee and can change or disappear in any release; do not depend on them outside OpenClaw.