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