Running phase: unpackPhase unpacking source archive /nix/store/rwi2j3mqf2j0inwbrd2252jz2dzzkfyg-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.cEh34kumCR Picked up JAVA_TOOL_OPTIONS: -Duser.home=/build/tmp.cEh34kumCR 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.ai.adapters.common-test trim-trailing-slash-removes-single-trailing-slash empty-usage-shape-is-canonical 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 parse-json-safe-returns-decoded-or-empty-map ol.llx.ai.guardrails-contract-test guardrails-enforces-boundary-shapes decode-event boundary is enforced for all adapters ol.llx.ai.oauth.openai-codex-test login-openai-codex-bind-failure-falls-back-to-manual-input parse-authorization-input-cases accepts full redirect URL accepts code#state format accepts query-string format falls back to raw code account-id-extraction login-openai-codex-state-mismatch-fails login-openai-codex-manual-fallback ol.llx.ai.adapters.openai-completions-test decode-event-stream-usage-calculates-costs decode-event-maps-provider-finish-reason-errors convert-message-reconstructs-reasoning-details-from-tool-signatures convert-message-restores-thinking-field-from-signature decode-event-extracts-reasoning-details-to-tool-call-signature build-request-includes-reasoning-effort-for-reasoning-model build-request-forwards-tools-and-tool-choice-with-compat-token-field normalize-tool-call-id-mistral-shape normalization is deterministic 9-char alphanumeric normalize-tool-call-id-matches-upstream-issue-1022-test-id decode-event-emits-thinking-events-for-reasoning-content decode-event-stream-falls-back-to-choice-usage build-request-sanitizes-unpaired-surrogates-in-user-text response->assistant-message-calculates-usage-costs normalize-tool-call-id-openai-compatible-non-pipe-ids-are-unchanged normalize-tool-call-id-pipe-ids-use-call-segment-sanitize-and-truncate normalize-tool-call-id-mistral-avoids-collision-for-distinct-source-ids build-request-batches-tool-result-images-for-openai-completions build-request-omits-reasoning-effort-when-model-lacks-reasoning response->assistant-message-falls-back-to-choice-usage build-request-zai-thinking-format-sends-thinking-object build-request-missing-api-key-message-includes-env-var-name build-request-qwen-thinking-format-sends-enable-thinking build-request-reads-provider-specific-env-api-key decode-event-stream-contract build-request-zai-disables-thinking-when-no-reasoning normalize-tool-call-id-openai-non-pipe-ids-are-truncated-only decode-event-thinking-to-text-transition response->assistant-message-maps-provider-finish-reason-errors build-request-openai-compatible-omits-auth-and-respects-compat-overrides build-request-preserves-valid-emoji-surrogate-pairs build-request-sanitizes-unpaired-surrogates-in-tool-result-text build-request-tool-choice-sentinel-strings-pass-through build-request-emits-provider-payload-trove-signal decode-event-tracks-thinking-signature ol.llx.ai.errors-test retry-loop-async-succeeds-on-first-attempt retry-delay-uses-exponential-backoff-for-rate-limit-without-header retry-loop-async-exhausts-retries-and-throws http-status-429-with-quota-and-retry-after-returns-rate-limit connection-error-is-recoverable provider-error-with-custom-recoverability model-not-found-is-not-recoverable retry-after-ms-takes-priority extracts-retry-after-seconds-header should-retry-rejects-client-errors retry-loop-async-fails-when-server-retry-delay-exceeds-cap retry-loop-async-does-not-retry-client-errors should-retry-respects-max-retries content-filter-is-not-recoverable rate-limit-error-has-correct-type-and-recoverable should-retry-allows-transient-errors http-status-429-with-quota-body-returns-quota-exceeded returns-nil-when-no-header quota-exceeded-is-not-recoverable extracts-retry-after-ms-header retry-delay-adds-jitter-for-server-errors authentication-error-is-not-recoverable caps-at-max-seconds server-error-is-recoverable timeout-error-is-recoverable http-status-429-without-quota-returns-rate-limit retry-delay-uses-server-retry-after-for-rate-limit http-status-unknown-5xx-returns-recoverable-provider-error retry-delay-uses-linear-backoff-for-connection-errors invalid-request-is-not-recoverable retry-loop-async-retries-transient-and-succeeds extract-retry-after-from-message-parses-seconds extracts-x-ratelimit-reset-after-header retry-delay-exceeded-is-not-recoverable 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 extract-retry-after-from-message-returns-nil-when-missing 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? retry-loop-async-emits-retry-scheduled-trove-signal http-status-unknown-4xx-returns-non-recoverable-provider-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.ai.client.stream-test runtime-run-stream-input-requires-runtime-hooks requires stream runtime hooks run-stream-emits-start-and-done-events run-stream-calls-cancel-when-output-channel-preclosed ol.llx.ai.registry-test registry-patterns immutable registry returns new value mutable registry dynamic registry registry-operations unregister and clear adapters rejects invalid api value ol.llx.ai.transform-messages-test tool-call-id-normalization-propagates-to-tool-result fixture-for-aborted-reasoning-skips-aborted-turn aborted assistant turn is removed from replay same-model-replay-preserves-thinking-and-signatures missing-tool-results-get-synthetic-error-message tool-call-id-normalization-avoids-collision-for-mistral does-not-duplicate-existing-synthetic-tool-result skipped-assistant-turns-with-error-or-aborted-stop-reasons cross-model-replay-converts-thinking-and-drops-signatures user-interruption-inserts-only-missing-tool-results google-gated-normalization-rewrites-assistant-and-tool-result-ids synthetic-tool-result-uses-real-time-when-clock-missing 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.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.client-test complete-retries-on-transient-error opts-registry-overrides-env-registry stream-returns-csp-channel complete-returns-deferred stream-close-delegates-to-runtime-cancel-fn stream-retries-open-stream-on-transient-error complete-retries-without-thread-sleep-hook complete-rejects-unsupported-xhigh-with-structured-error complete-emits-error-lifecycle-trove-signals complete-emits-lifecycle-trove-signals unified-opts->request-opts-normalizes-unified-shape unified-opts->request-opts-rejects-provider-shape-in-unified-opts complete-simple-wrapper-normalizes-openai-responses-reasoning-to-effort complete-allows-xhigh-for-supported-model complete-rejects-malformed-adapter-finalize-result complete-does-not-retry-on-client-error complete-simple-wrapper-normalizes-options stream-simple-wrapper-normalizes-options complete-openai-completions-non-2xx complete-transforms-context-before-build-request stream-rejects-unsupported-xhigh-with-structured-error complete-surfaces-unknown-openai-completions-stop-reason-as-error-message ol.llx.ai.adapters.openai-responses-test build-request-sanitizes-unpaired-surrogates-in-user-text build-request-replays-versioned-text-signature-metadata stream-error-normalization-contract finalize-calculates-tier-adjusted-cost-when-usage-present build-request-converts-context-to-openai-responses-input decode-event-reasoning-summary-part-done-requires-summary-part normalize-tool-call-id-preserves-same-provider-item-ids normalize-tool-call-id-trims-trailing-underscores-and-enforces-fc-prefix normalize-tool-call-id-matches-upstream-issue-1022-test-id decode-event-message-output-item-done-encodes-versioned-text-signature decode-event-response-failed-includes-provider-error-details finalize-maps-responses-status-to-canonical-stop-reason normalize-tool-call-id-gates-by-provider-allowlist 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-preserves-valid-emoji-surrogate-pairs build-request-emits-provider-payload-trove-signal normalize-tool-call-id-normalizes-pipe-ids-and-preserves-pairing build-request-disables-reasoning-when-no-reasoning-opts decode-event-stream-contract normalize-tool-call-id-hashes-foreign-item-ids finalize-throws-on-unknown-stop-reason ol.llx.ai.client.jvm-test run-stream-cancel-fn-closes-upstream-body run-stream-wraps-untyped-stream-errors-as-streaming-error run-stream-validation rejects malformed decoded events rejects malformed finalize output malformed normalize-error still emits terminal error run-stream-emits-stream-event-error-trove-signal run-stream-emits-stream-lifecycle-trove-signals ol.llx.ai.adapters.anthropic-messages-test build-request-disables-thinking-when-no-reasoning-opts build-request-omits-thinking-when-model-not-reasoning decode-event-stream-usage-calculates-costs build-request-omits-temperature-when-thinking-is-enabled build-request-sanitizes-unpaired-surrogates-in-user-and-system build-request-converts-canonical-context-to-anthropic-payload build-request-clamps-sonnet-4-6-xhigh-to-high normalize-tool-call-id-sanitizes-and-truncates build-request-uses-custom-thinking-budgets build-request-enables-adaptive-thinking-for-opus-4-6 build-request-emits-provider-payload-trove-signal build-request-preserves-valid-emoji-surrogate-pairs decode-event-redacted-thinking-round-trips-to-canonical-content build-request-replays-redacted-thinking-as-anthropic-redacted-block finalize-throws-on-unknown-stop-reason finalize-maps-anthropic-stop-reasons build-request-enables-adaptive-thinking-for-sonnet-4-6 decode-event-stream-contract finalize-calculates-usage-costs image-only-content-does-not-inject-placeholder-text build-request-enables-budget-thinking-for-older-reasoning-model ol.llx.ai.utils.unicode-test truncate-limits-string-length truncates only when input exceeds max-len coerces nil to empty string 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 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 ol.llx.ai.schema-test options-schema-allows-provider-specific-option-keys config-schema accepts known provider config accepts unknown provider keys context-schema context is an ordered vector of canonical messages context-map enforces required :messages and optional envelope keys 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 schema-registry-rebuilds-when-component-schemas-change usage-schema accepts usage where total-tokens equals component sum accepts usage where provider total-tokens does not match component sum (Google!) runtime-boundary-schemas accepts runtime adapter boundary maps rejects malformed runtime boundary maps accepts run-stream argument map contract message-schemas accepts all three canonical message roles assistant message accepts unknown keys 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 event-schemas accepts stream terminal events rejects malformed events accepts delta events with required payload adapter-and-env-schema accepts valid adapter and runtime env rejects adapter missing required function slots rejects env missing required function slots model-schema accepts a valid model accepts supported openai-completions compat profile keys accepts unknown model keys 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.ai.adapters.openai-codex-responses-test build-request-strips-codex-unsupported-payload-fields build-request-shapes-codex-url-and-headers build-request-rejects-token-missing-account-id build-request-disables-reasoning-when-no-reasoning-opts build-request-prefers-explicit-api-key-over-env ol.llx.agent.loop-test handle-command-set-follow-up-mode-test step-abort-from-streaming-to-idle-test abort signal from streaming abort command from streaming handle-command-continue-with-follow-up-all-mode-test handle-command-prompt-when-not-idle-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 handle-command-clear-follow-up-queue-test handle-command-continue-steering-before-follow-up-test handle-command-follow-up-test step-prompt-when-streaming-is-rejected-test handle-command-continue-with-steering-one-at-a-time-test step-signal-llm-done-with-tools-test agent-end-emitted-on-error-to-idle-test tool-executing-transition-unknown-signal-test step-prompt-from-idle-to-streaming-test handle-command-continue-with-steering-all-mode-test streaming-transition-llm-start-test handle-command-continue-when-not-idle-test initial-state-has-expected-shape-test tool-executing-transition-tool-error-last-tool-test clears pending-tool-calls records error result and resumes llm 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-tools-test idle-transition-invalid-signal-test handle-command-continue-with-follow-up-one-at-a-time-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-steering-queue-test handle-command-set-system-prompt-test closed-transition-is-terminal-test any signal returns state unchanged with no effects route-from-streaming-test idle routes to idle tool-executing routes to tool-executing closed routes to closed streaming stays streaming handle-command-clear-messages-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-prompt-from-idle-test tool-executing-transition-abort-test transitions to idle and clears pending-tool-calls emits turn-end handle-command-set-thinking-level-test 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 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 streaming-transition-llm-done-no-tools-test transitions to idle and clears stream-message appends the final message emits message-end and turn-end agent-end-emitted-on-streaming-to-idle-test tool-executing-transition-tool-result-last-tool-test clears pending-tool-calls appends result to messages and resumes llm streaming-transition-llm-done-prefers-steering-over-follow-up-test uses steering messages first and leaves follow-up queued continues immediately with call-llm agent-end-not-emitted-when-staying-idle-test 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 handle-command-reset-test tool-executing-transition-tool-update-test handle-command-set-model-test handle-command-steer-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 command-predicate-test recognizes commands rejects signals rejects events handle-command-clear-all-queues-test 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-result-with-steering-all-mode-dequeues-all-test dequeues all steering messages in :all mode streaming-transition-llm-chunk-test handle-command-continue-empty-queues-test handle-command-set-steering-mode-test agent-end-not-emitted-on-streaming-to-tool-executing-test 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 step-abort-from-tool-executing-to-idle-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 handle-command-abort-when-idle-test streaming-transition-abort-test transitions to idle and clears stream-message emits message-end and turn-end step-signal-llm-done-no-tools-to-idle-test streaming-transition-unknown-signal-test route-from-idle-test handle-command-replace-messages-test handle-command-abort-when-streaming-test handle-command-set-schema-config-test streaming-transition-llm-error-test transitions to idle and sets error emits message-end and turn-end handle-command-append-message-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 ol.llx.ai.model-catalog.generate-test build-catalog-rejects-provider-change-for-existing-id generate-models-writes-artifact-using-injected-paths build-catalog-rejects-duplicate-normalized-source-keys build-catalog-is-deterministically-sorted build-catalog-rejects-invalid-override-shapes build-catalog-supports-provider-qualified-override-keys render-generated-source-is-stable generate-models-uses-checked-in-overrides-and-emits-openai-codex-models build-catalog-deep-merges-nested-override-fields build-catalog-normalizes-supported-providers-only ol.llx.ai.oauth-test 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 refresh-oauth-token-dispatch oauth-provider-registry-operations ol.llx.ai.adapters.google-generative-ai-test decode-event-stream-contract decode-event-tool-call-missing-args-defaults-to-empty-map reasoning-config-disables-thinking-by-default-for-gemini-3 open-stream-non-2xx-throws-structured-error google-normalizer-matches-upstream-issue-1022-test-id-under-gate thought-signature-alone-is-not-thinking build-request-emits-provider-payload-trove-signal stream-error-normalization-contract 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-converts-canonical-context-to-google-payload build-request-gemini-3-preserves-unsigned-tool-calls-with-sentinel reasoning-config-disables-thinking-by-default-for-gemini-25 decode-event-stream-usage-calculates-costs reasoning-config-gemini-3-pro-clamps-low-effort build-request-preserves-valid-emoji-surrogate-pairs reasoning-config-omitted-when-model-not-reasoning reasoning-config-gemini-25-pro-budget-differs-from-flash reasoning-config-gemini-3-flash-uses-level map-stop-reason-fail-fast-on-unknown unknown finish reason in stream decode fails fast reasoning-config-gemini-3-pro-uses-level build-request-sanitizes-unpaired-surrogates-in-user-and-system reasoning-config-disables-thinking-by-default-for-gemini-3-pro build-request-uses-custom-thinking-budgets adapter-registers-tool-call-id-normalizer-with-model-id-gate finalize-calculates-usage-costs finalize-throws-on-unknown-stop-reason ol.llx.agent.fx-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 fx-execute-tool-uses-active-schema-registry-for-input-coercion-test fx-call-llm-emits-llm-error-on-hook-failure-test fx-call-llm-emits-llm-error-on-non-canonical-event-type-test fx-call-llm-uses-default-stream-fn-when-not-provided-test ol.llx.agent-test rehydrate-agent-uses-snapshot-test create-agent-requires-env-contract-test set-schema-config-updates-custom-message-validation-on-live-agent-test create-agent-default-convert-to-llm-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 rehydrate-agent-custom-message-validation-test custom-message-public-api-validation-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-initializes-state-test tool-and-pending-tool-call-schema-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 effect-execute-tool-tool-call-schema-test tool-signal-and-event-schema-tightening-test prompt-validates-messages-test custom-message-schema-may-reference-provided-schemas-test tool-call-schema-contract-test subscribe-unsubscribe-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 create-agent-ignores-initial-state-option-test set-schema-config-clears-user-additions-without-removing-canonical-schemas-test set-model-validates-model-shape-test create-agent-rejects-missing-custom-schema-registration-test ol.llx.ai.oauth.cli-test login-command-writes-auth-json-in-current-working-directory persists oauth credentials to auth.json ol.llx.agent.driver-test prompt-continues-through-queued-steering-without-stalling-test abort-cancels-tool-execution-and-returns-to-idle-test abort-drops-stale-llm-events-and-allows-reuse-test 333 tests, 1549 assertions, 0 failures. Picked up JAVA_TOOL_OPTIONS: -Duser.home=/build/tmp.cEh34kumCR Picked up JAVA_TOOL_OPTIONS: -Duser.home=/build/tmp.cEh34kumCR Running phase: installPhase Running phase: fixupPhase shrinking RPATHs of ELF executables and libraries in /nix/store/000kw7n7w8xar74xi0nc0627ak605mhz-llx-0.0.1 checking for references to /build/ in /nix/store/000kw7n7w8xar74xi0nc0627ak605mhz-llx-0.0.1... patching script interpreter paths in /nix/store/000kw7n7w8xar74xi0nc0627ak605mhz-llx-0.0.1