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