Running phase: unpackPhase unpacking source archive /nix/store/sx3nhjnzjxqlksj4g28j0q1bk9myylbs-source source root is source Running phase: patchPhase Running phase: updateAutotoolsGnuConfigScriptsPhase Running phase: configurePhase no configure script, doing nothing Running phase: buildPhase Picked up JAVA_TOOL_OPTIONS: -Duser.home=/build/tmp.YtOIwCrGcM Picked up JAVA_TOOL_OPTIONS: -Duser.home=/build/tmp.YtOIwCrGcM GUARDRAILS IS ENABLED. RUNTIME PERFORMANCE WILL BE AFFECTED. Mode: :runtime config: {:throw? true, :guardrails/use-stderr? true} Guardrails was enabled because the guardrails.enabled property is set to a (any) value. --- unit (clojure.test) --------------------------- ol.llx.agent-test create-agent-requires-env-contract-test custom-message-schema-may-reference-provided-schemas-test custom-message-schemas-validate-message-and-messages-test :ol.llx.agent/custom-message-schemas requires namespace-qualified dispatch keys :ol.llx.agent/message rejects custom roles when not registered :ol.llx.agent/message accepts registered custom role :ol.llx.agent/messages accepts canonical + registered custom messages :ol.llx.agent/messages rejects invalid registered custom message payloads canonical messages remain valid with custom registrations enabled create-agent-ignores-initial-state-option-test tool-schema-tightening-on-commands-and-state-test :ol.llx.agent/command-set-tools expects :ol.llx.agent/tool entries :ol.llx.agent/create-agent-opts expects :ol.llx.agent/tool entries in :tools :ol.llx.agent.loop/state expects :ol.llx.agent/tool entries in :tools tool-signal-and-event-schema-tightening-test rehydrate-agent-uses-snapshot-test set-schema-config-clears-user-additions-without-removing-canonical-schemas-test set-model-validates-model-shape-test create-agent-default-convert-to-llm-test custom-message-public-api-validation-test tool-and-pending-tool-call-schema-test prompt-validates-messages-test create-agent-initializes-state-test create-agent-rejects-missing-custom-schema-registration-test command-wrappers-dispatch-through-driver-run-test prompt dispatches vector messages continue dispatches the continue command abort dispatches the abort command state mutators dispatch commands tool-call-schema-contract-test effect-execute-tool-tool-call-schema-test set-schema-config-updates-custom-message-validation-on-live-agent-test rehydrate-agent-custom-message-validation-test set-schema-config-ignores-nil-fields-test nil schema-registry preserves the current user registry nil custom-message-schemas preserves the current dispatch map subscribe-unsubscribe-test ol.llx.ai.models-test model-registry-and-lookup model-utility-functions calculate-cost supports-xhigh? direct anthropic 4.6 models use the larger context window models-equal? ol.llx.ai.adapters.google-generative-ai-test finalize-calculates-usage-costs decode-event-stream-usage-calculates-costs adapter-registers-tool-call-id-normalizer-with-model-id-gate reasoning-config-gemini-25-pro-budget-differs-from-flash decode-event-stream-contract decode-event-tool-call-missing-args-defaults-to-empty-map thought-signature-alone-is-not-thinking build-request-converts-canonical-context-to-google-payload map-stop-reason-fail-fast-on-unknown unknown finish reason in stream decode fails fast reasoning-config-gemini-3-pro-uses-level reasoning-config-omitted-when-model-not-reasoning reasoning-config-disables-thinking-by-default-for-gemini-3-pro build-request-emits-provider-payload-trove-signal build-request-uses-custom-thinking-budgets reasoning-config-gemini-3-flash-uses-level build-request-sanitizes-unpaired-surrogates-in-user-and-system build-request-tool-result-image-forwarding-by-model-capability gemini-3 multimodal model forwards image in functionResponse parts text-only model drops images from functionResponse build-request-preserves-valid-emoji-surrogate-pairs reasoning-config-gemini-3-pro-clamps-low-effort finalize-throws-on-unknown-stop-reason google-normalizer-matches-upstream-issue-1022-test-id-under-gate reasoning-config-disables-thinking-by-default-for-gemini-25 reasoning-config-disables-thinking-by-default-for-gemini-3 build-request-gemini-3-preserves-unsigned-tool-calls-with-sentinel open-stream-non-2xx-throws-structured-error stream-error-normalization-contract ol.llx.ai.registry-test registry-operations unregister and clear adapters rejects invalid api value registry-patterns immutable registry returns new value mutable registry dynamic registry ol.llx.agent.fx-test fx-call-llm-uses-default-stream-fn-when-not-provided-test fx-call-llm-emits-llm-error-on-non-canonical-event-type-test fx-call-llm-emits-llm-error-on-hook-failure-test fx-execute-tool-uses-active-schema-registry-for-input-coercion-test fx-execute-tool-uses-updated-schema-config-from-live-agent-test execute-fx-validates-effect-shape-test fx-call-llm-runs-hooks-and-maps-events-test ol.llx.ai.oauth.cli-test login-command-writes-auth-json-in-current-working-directory persists oauth credentials to auth.json ol.llx.ai.errors-test http-status-429-with-quota-body-returns-quota-exceeded retry-delay-uses-server-retry-after-for-rate-limit http-status->error-maps-common-codes 400 -> invalid-request 401 -> authentication-error 403 -> authorization-error 404 -> model-not-found 408 -> timeout 500 -> server-error 502 -> server-error 503 -> server-error returns-nil-when-no-header predicates-match-error-categories llx-error? matches structured errors recoverable? matches recoverable errors rate-limit-error? quota-exceeded-error? rate-limited-error? timeout-error? client-error? transient-error? http-status-unknown-4xx-returns-non-recoverable-provider-error retry-delay-adds-jitter-for-server-errors model-not-found-is-not-recoverable content-filter-is-not-recoverable invalid-request-is-not-recoverable retry-loop-async-fails-when-server-retry-delay-exceeds-cap provider-error-with-custom-recoverability retry-delay-uses-exponential-backoff-for-rate-limit-without-header http-status-429-without-quota-returns-rate-limit should-retry-rejects-client-errors should-retry-allows-transient-errors retry-loop-async-emits-retry-scheduled-trove-signal caps-at-max-seconds retry-loop-async-retries-transient-and-succeeds timeout-error-is-recoverable rate-limit-error-has-correct-type-and-recoverable retry-after-ms-takes-priority extract-retry-after-from-message-returns-nil-when-missing quota-exceeded-is-not-recoverable authentication-error-is-not-recoverable server-error-is-recoverable should-retry-respects-max-retries http-status-unknown-5xx-returns-recoverable-provider-error retry-delay-exceeded-is-not-recoverable extracts-x-ratelimit-reset-after-header retry-loop-async-exhausts-retries-and-throws retry-delay-uses-linear-backoff-for-connection-errors extracts-retry-after-ms-header extract-retry-after-from-message-parses-seconds http-status-429-with-quota-and-retry-after-returns-rate-limit retry-loop-async-succeeds-on-first-attempt connection-error-is-recoverable retry-loop-async-does-not-retry-client-errors extracts-retry-after-seconds-header ol.llx.ai.transform-messages-test same-model-replay-preserves-thinking-and-signatures tool-call-id-normalization-avoids-collision-for-mistral tool-call-id-normalization-propagates-to-tool-result user-interruption-inserts-only-missing-tool-results missing-tool-results-get-synthetic-error-message does-not-duplicate-existing-synthetic-tool-result fixture-for-aborted-reasoning-skips-aborted-turn aborted assistant turn is removed from replay synthetic-tool-result-uses-real-time-when-clock-missing google-gated-normalization-rewrites-assistant-and-tool-result-ids cross-model-replay-converts-thinking-and-drops-signatures skipped-assistant-turns-with-error-or-aborted-stop-reasons ol.llx.ai.adapters.common-test parse-json-lenient-falls-back-to-decode uses decode-safe when it succeeds falls back to decode when decode-safe returns nil uses decode directly when decode-safe is absent trim-trailing-slash-removes-single-trailing-slash empty-usage-shape-is-canonical parse-json-safe-returns-decoded-or-empty-map ol.llx.ai.adapters.openai-completions-test decode-event-stream-usage-calculates-costs response->assistant-message-falls-back-to-choice-usage build-request-batches-tool-result-images-for-openai-completions build-request-sanitizes-unpaired-surrogates-in-tool-result-text build-request-includes-reasoning-effort-for-reasoning-model build-request-omits-reasoning-effort-when-model-lacks-reasoning decode-event-thinking-to-text-transition decode-event-maps-provider-finish-reason-errors build-request-missing-api-key-message-includes-env-var-name decode-event-extracts-reasoning-details-to-tool-call-signature normalize-tool-call-id-mistral-shape normalization is deterministic 9-char alphanumeric decode-event-emits-thinking-events-for-reasoning-content build-request-emits-provider-payload-trove-signal normalize-tool-call-id-mistral-avoids-collision-for-distinct-source-ids decode-event-stream-contract build-request-qwen-thinking-format-sends-enable-thinking normalize-tool-call-id-pipe-ids-use-call-segment-sanitize-and-truncate decode-event-tracks-thinking-signature build-request-forwards-tools-and-tool-choice-with-compat-token-field normalize-tool-call-id-openai-non-pipe-ids-are-truncated-only build-request-reads-provider-specific-env-api-key normalize-tool-call-id-matches-upstream-issue-1022-test-id build-request-preserves-valid-emoji-surrogate-pairs build-request-sanitizes-unpaired-surrogates-in-user-text convert-message-restores-thinking-field-from-signature build-request-openai-compatible-omits-auth-and-respects-compat-overrides normalize-tool-call-id-openai-compatible-non-pipe-ids-are-unchanged response->assistant-message-calculates-usage-costs response->assistant-message-maps-provider-finish-reason-errors build-request-zai-thinking-format-sends-thinking-object build-request-tool-choice-sentinel-strings-pass-through decode-event-stream-falls-back-to-choice-usage convert-message-reconstructs-reasoning-details-from-tool-signatures build-request-zai-disables-thinking-when-no-reasoning ol.llx.ai.utils.unicode-test sanitize-surrogates-handles-surrogate-edge-cases preserves valid emoji surrogate pairs removes unpaired high surrogate removes unpaired low surrogate removes high surrogate at end of string removes multiple unpaired surrogates in one string preserves mixed content: emoji, CJK, math symbols, special quotes handles nil and empty input passes through plain ASCII unchanged sanitize-payload-deep-walks-data-structures sanitizes strings nested in maps, vectors, and mixed structures real-world LinkedIn data with emoji preserved unpaired surrogates stripped from tool result content handles bare string input handles bare vector input passes through non-string leaves unchanged truncate-limits-string-length truncates only when input exceeds max-len coerces nil to empty string ol.llx.ai.adapters.anthropic-messages-test build-request-preserves-valid-emoji-surrogate-pairs build-request-uses-custom-thinking-budgets build-request-replays-redacted-thinking-as-anthropic-redacted-block decode-event-stream-usage-calculates-costs build-request-enables-budget-thinking-for-older-reasoning-model decode-event-stream-contract build-request-sanitizes-unpaired-surrogates-in-user-and-system build-request-disables-thinking-when-no-reasoning-opts build-request-enables-adaptive-thinking-for-opus-4-6 finalize-throws-on-unknown-stop-reason build-request-omits-thinking-when-model-not-reasoning build-request-emits-provider-payload-trove-signal decode-event-redacted-thinking-round-trips-to-canonical-content build-request-omits-temperature-when-thinking-is-enabled build-request-enables-adaptive-thinking-for-sonnet-4-6 finalize-maps-anthropic-stop-reasons finalize-calculates-usage-costs build-request-clamps-sonnet-4-6-xhigh-to-high build-request-converts-canonical-context-to-anthropic-payload image-only-content-does-not-inject-placeholder-text normalize-tool-call-id-sanitizes-and-truncates ol.llx.ai.client.jvm-test run-stream-wraps-untyped-stream-errors-as-streaming-error run-stream-emits-stream-event-error-trove-signal run-stream-cancel-fn-closes-upstream-body run-stream-emits-stream-lifecycle-trove-signals run-stream-validation rejects malformed decoded events rejects malformed finalize output malformed normalize-error still emits terminal error ol.llx.ai.utils.tool-validation-test validate-tool-call success case tool not found validation errors are structured missing required field human-readable error message includes tool name and arguments tool-not-found error message includes tool name coerces string values using the input schema applies schema defaults from the input schema resolves custom schema references from the active registry ol.llx.agent.loop-test handle-command-replace-messages-test streaming-transition-llm-done-prefers-steering-over-follow-up-test uses steering messages first and leaves follow-up queued continues immediately with call-llm handle-command-prompt-from-idle-test streaming-transition-abort-test transitions to idle and clears stream-message emits message-end and turn-end idle-transition-invalid-signal-test agent-end-not-emitted-when-staying-idle-test handle-command-continue-with-steering-all-mode-test handle-command-continue-with-follow-up-all-mode-test handle-command-set-steering-mode-test handle-command-clear-all-queues-test handle-command-steer-test tool-executing-transition-tool-result-last-tool-test clears pending-tool-calls appends result to messages and resumes llm tool-executing-transition-tool-result-with-steering-all-mode-dequeues-all-test dequeues all steering messages in :all mode route-from-streaming-test idle routes to idle tool-executing routes to tool-executing closed routes to closed streaming stays streaming step-tool-loop-test state progression through tool loop tool completion resumes llm final state has all messages agent-end emitted on final transition to idle handle-command-clear-steering-queue-test route-from-idle-test handle-command-set-model-test streaming-transition-llm-chunk-test step-signal-llm-done-with-tools-test tool-executing-transition-tool-update-test handle-command-abort-when-idle-test closed-transition-is-terminal-test any signal returns state unchanged with no effects step-full-happy-path-test state progression final state has both messages agent-end is emitted on final step agent-end is not emitted on intermediate steps tool-executing-transition-tool-error-with-remaining-test records error result and keeps remaining tools emits tool-execution-end, message events, and starts next tool handle-command-continue-with-steering-one-at-a-time-test initial-state-has-expected-shape-test step-abort-from-tool-executing-to-idle-test handle-command-follow-up-test tool-executing-transition-tool-error-with-steering-interrupts-remaining-tools-test does not execute the next real tool and resumes llm after synthetic skipped results keeps one steering message queued in one-at-a-time mode appends error result, skipped tool results, and dequeued steering message handle-command-clear-messages-test agent-end-emitted-on-error-to-idle-test route-from-tool-executing-test with pending tool calls stays tool-executing without pending tool calls routes to streaming closed routes to closed handle-command-set-thinking-level-test step-signal-llm-done-no-tools-to-idle-test handle-command-continue-when-not-idle-test step-prompt-from-idle-to-streaming-test handle-command-set-schema-config-test idle-transition-prompt-start-test appends messages and transitions to streaming emits agent-start, turn-start, message events, and call-llm call-llm receives the full message history including new messages step-abort-from-streaming-to-idle-test abort signal from streaming abort command from streaming streaming-transition-llm-done-with-follow-up-queue-starts-next-turn-test starts a new turn from follow-up messages when no steering exists continues the run with another llm call tool-executing-transition-abort-test transitions to idle and clears pending-tool-calls emits turn-end handle-command-append-message-test handle-command-set-tools-test handle-command-continue-steering-before-follow-up-test handle-command-clear-follow-up-queue-test idle-transition-continue-start-test appends messages and transitions to streaming emits turn-start (no agent-start), message events, and call-llm call-llm receives the full message history including new messages handle-command-reset-test command-predicate-test recognizes commands rejects signals rejects events handle-command-abort-when-streaming-test streaming-transition-llm-start-test tool-executing-transition-unknown-signal-test handle-command-prompt-when-not-idle-test streaming-transition-llm-done-no-tools-test transitions to idle and clears stream-message appends the final message emits message-end and turn-end streaming-transition-llm-done-with-tools-test transitions to tool-executing sets pending-tool-calls and clears stream-message appends the message emits message-end, tool-execution-start, and execute-tool step-prompt-when-streaming-is-rejected-test handle-command-set-follow-up-mode-test streaming-transition-llm-error-test transitions to idle and sets error emits message-end and turn-end agent-end-not-emitted-on-streaming-to-tool-executing-test handle-command-continue-with-follow-up-one-at-a-time-test streaming-transition-llm-done-with-steering-queue-starts-next-turn-test moves directly into the next streaming turn appends the finished assistant message and queued steering message continues the run by ending the turn and scheduling more llm work agent-end-emitted-on-streaming-to-idle-test tool-executing-transition-tool-result-with-steering-interrupts-remaining-tools-test clears pending tool calls and keeps remaining steering queued in one-at-a-time mode appends current tool result, synthetic skipped results, and dequeued steering message emits current result events, skipped tool lifecycle events, steering message events, and resumes llm streaming-transition-unknown-signal-test handle-command-set-system-prompt-test tool-executing-transition-tool-result-with-remaining-test processes result and keeps remaining tools appends result to messages emits tool-execution-end, message events, and starts next tool handle-command-continue-empty-queues-test tool-executing-transition-tool-error-last-tool-test clears pending-tool-calls records error result and resumes llm ol.llx.ai.guardrails-contract-test guardrails-enforces-boundary-shapes decode-event boundary is enforced for all adapters ol.llx.ai.client.stream-test run-stream-calls-cancel-when-output-channel-preclosed run-stream-emits-start-and-done-events runtime-run-stream-input-requires-runtime-hooks requires stream runtime hooks ol.llx.ai.oauth.openai-codex-test login-openai-codex-manual-fallback parse-authorization-input-cases accepts full redirect URL accepts code#state format accepts query-string format falls back to raw code login-openai-codex-state-mismatch-fails login-openai-codex-bind-failure-falls-back-to-manual-input account-id-extraction ol.llx.ai.oauth-test refresh-oauth-token-dispatch get-oauth-api-key-behavior returns nil for missing provider credentials returns existing api key when credential is not expired refreshes expired credential before returning api key oauth-provider-registry-operations ol.llx.ai.utils.rate-limit-test rate-limited-detection detects structured error types detects provider message patterns false for non-rate-limit errors ol.llx.ai.adapters.openai-codex-responses-test build-request-rejects-token-missing-account-id build-request-prefers-explicit-api-key-over-env build-request-disables-reasoning-when-no-reasoning-opts build-request-strips-codex-unsupported-payload-fields build-request-shapes-codex-url-and-headers ol.llx.ai.client-test complete-simple-wrapper-normalizes-options complete-emits-error-lifecycle-trove-signals stream-returns-csp-channel opts-registry-overrides-env-registry complete-surfaces-unknown-openai-completions-stop-reason-as-error-message unified-opts->request-opts-rejects-provider-shape-in-unified-opts complete-emits-lifecycle-trove-signals complete-rejects-malformed-adapter-finalize-result complete-returns-deferred stream-close-delegates-to-runtime-cancel-fn complete-does-not-retry-on-client-error complete-transforms-context-before-build-request complete-rejects-unsupported-xhigh-with-structured-error complete-openai-completions-non-2xx stream-simple-wrapper-normalizes-options unified-opts->request-opts-normalizes-unified-shape complete-retries-on-transient-error stream-rejects-unsupported-xhigh-with-structured-error complete-retries-without-thread-sleep-hook stream-retries-open-stream-on-transient-error complete-allows-xhigh-for-supported-model complete-simple-wrapper-normalizes-openai-responses-reasoning-to-effort ol.llx.ai.utils.overflow-test context-overflow-detection detects explicit provider messages detects 400/413 status codes detects silent overflow with context window false for non-overflow errors ol.llx.agent.driver-test abort-cancels-tool-execution-and-returns-to-idle-test prompt-continues-through-queued-steering-without-stalling-test abort-drops-stale-llm-events-and-allows-reuse-test ol.llx.ai.model-catalog.generate-test build-catalog-rejects-provider-change-for-existing-id generate-models-uses-checked-in-overrides-and-emits-openai-codex-models build-catalog-deep-merges-nested-override-fields build-catalog-rejects-invalid-override-shapes build-catalog-rejects-duplicate-normalized-source-keys generate-models-writes-artifact-using-injected-paths render-generated-source-is-stable build-catalog-supports-provider-qualified-override-keys build-catalog-is-deterministically-sorted build-catalog-normalizes-supported-providers-only ol.llx.ai.adapters.openai-responses-test build-request-sanitizes-unpaired-surrogates-in-user-text normalize-tool-call-id-gates-by-provider-allowlist build-request-emits-provider-payload-trove-signal stream-error-normalization-contract cache-retention-mapping cache-control none omits both prompt cache fields cache-control long sets 24h retention for direct api.openai.com cache-control long does not set retention for non-openai base url build-request-replays-versioned-text-signature-metadata build-request-disables-reasoning-when-no-reasoning-opts decode-event-message-output-item-done-encodes-versioned-text-signature normalize-tool-call-id-hashes-foreign-item-ids build-request-converts-context-to-openai-responses-input decode-event-response-failed-includes-provider-error-details normalize-tool-call-id-preserves-same-provider-item-ids finalize-throws-on-unknown-stop-reason decode-event-reasoning-summary-part-done-requires-summary-part normalize-tool-call-id-matches-upstream-issue-1022-test-id finalize-calculates-tier-adjusted-cost-when-usage-present normalize-tool-call-id-trims-trailing-underscores-and-enforces-fc-prefix finalize-maps-responses-status-to-canonical-stop-reason build-request-preserves-valid-emoji-surrogate-pairs decode-event-stream-contract normalize-tool-call-id-normalizes-pipe-ids-and-preserves-pairing ol.llx.ai.schema-test usage-schema accepts usage where total-tokens equals component sum accepts usage where provider total-tokens does not match component sum (Google!) options-schema accepts valid unified request options accepts unknown unified request option keys accepts valid provider request options including provider-specific keys tool input schema field descriptions survive json schema conversion oauth-schema-contracts accepts OpenAI Codex provider and API enum values accepts oauth credential and provider contracts rejects oauth credential map missing required keys rejects oauth provider missing required function slots model-schema accepts a valid model accepts supported openai-completions compat profile keys accepts unknown model keys runtime-boundary-schemas accepts runtime adapter boundary maps rejects malformed runtime boundary maps accepts run-stream argument map contract options-schema-allows-provider-specific-option-keys context-schema context is an ordered vector of canonical messages context-map enforces required :messages and optional envelope keys message-schemas accepts all three canonical message roles assistant message accepts unknown keys config-schema accepts known provider config accepts unknown provider keys event-schemas accepts stream terminal events rejects malformed events accepts delta events with required payload schema-registry-rebuilds-when-component-schemas-change adapter-and-env-schema accepts valid adapter and runtime env rejects adapter missing required function slots rejects env missing required function slots 333 tests, 1549 assertions, 0 failures. Picked up JAVA_TOOL_OPTIONS: -Duser.home=/build/tmp.YtOIwCrGcM Picked up JAVA_TOOL_OPTIONS: -Duser.home=/build/tmp.YtOIwCrGcM Running phase: installPhase Running phase: fixupPhase shrinking RPATHs of ELF executables and libraries in /nix/store/m1nxqg1ld3r4w9vaf3pkpk2hchdssbg2-llx-0.0.1 checking for references to /build/ in /nix/store/m1nxqg1ld3r4w9vaf3pkpk2hchdssbg2-llx-0.0.1... patching script interpreter paths in /nix/store/m1nxqg1ld3r4w9vaf3pkpk2hchdssbg2-llx-0.0.1