mixdog 0.9.63 → 0.9.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/package.json +9 -2
- package/scripts/code-graph-description-contract.mjs +3 -3
- package/scripts/verify-release-assets.mjs +2 -2
- package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch.mjs +11 -14
- package/src/runtime/agent/orchestrator/agent-runtime/agent-progress-watchdog.mjs +6 -6
- package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +2 -2
- package/src/runtime/agent/orchestrator/agent-trace-format.mjs +1 -0
- package/src/runtime/agent/orchestrator/config.mjs +19 -124
- package/src/runtime/agent/orchestrator/context/collect.mjs +6 -6
- package/src/runtime/agent/orchestrator/dispatch-persist.mjs +2 -2
- package/src/runtime/agent/orchestrator/internal-agents.mjs +2 -2
- package/src/runtime/agent/orchestrator/mcp/child-tree.mjs +1 -1
- package/src/runtime/agent/orchestrator/mcp/client.mjs +4 -4
- package/src/runtime/agent/orchestrator/providers/admission-scheduler.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-betas.mjs +4 -4
- package/src/runtime/agent/orchestrator/providers/anthropic-effort.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-max-tokens.mjs +4 -4
- package/src/runtime/agent/orchestrator/providers/anthropic-messages.mjs +333 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-model-resolve.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +4 -4
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +3 -277
- package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/custom-tool-wire.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/gemini-cache.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +6 -6
- package/src/runtime/agent/orchestrator/providers/grok-oauth-login.mjs +196 -0
- package/src/runtime/agent/orchestrator/providers/grok-oauth-tokens.mjs +460 -0
- package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +14 -593
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai.mjs +4 -4
- package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +5 -280
- package/src/runtime/agent/orchestrator/providers/openai-responses-payload.mjs +357 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-headers.mjs +216 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-pool.mjs +2 -188
- package/src/runtime/agent/orchestrator/providers/openai-ws-stream.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/provider-catalog-cache.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/registry.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/retry-classifier.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/statusline-route-meta.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/cache/prefetch-cache.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/cache/scoped-cache.mjs +3 -3
- package/src/runtime/agent/orchestrator/session/compact/budget.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/compact/file-reattach.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/compact/summary-schema.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/compact/summary.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/compact/text-utils.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/context-utils.mjs +4 -4
- package/src/runtime/agent/orchestrator/session/loop/deferred-call-through.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +17 -0
- package/src/runtime/agent/orchestrator/session/loop/steering.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/stored-tool-args.mjs +18 -26
- package/src/runtime/agent/orchestrator/session/loop/termination.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/tool-classify.mjs +3 -3
- package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +1 -0
- package/src/runtime/agent/orchestrator/session/manager/context-meta.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/delivered-completions.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/status-telemetry.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/live-state.mjs +49 -0
- package/src/runtime/agent/orchestrator/session/store/load-cache.mjs +49 -0
- package/src/runtime/agent/orchestrator/session/store/save-worker.mjs +260 -0
- package/src/runtime/agent/orchestrator/session/store/serialize.mjs +72 -0
- package/src/runtime/agent/orchestrator/session/store/summary-cache.mjs +163 -0
- package/src/runtime/agent/orchestrator/session/store/write-guards.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +4 -1
- package/src/runtime/agent/orchestrator/session/store.mjs +9 -561
- package/src/runtime/agent/orchestrator/session/tool-envelope.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +2 -2
- package/src/runtime/agent/orchestrator/stall-policy.mjs +11 -11
- package/src/runtime/agent/orchestrator/tools/bash-policy-scan.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/bash-session.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/advisory-lock.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/atomic-write.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +2 -154
- package/src/runtime/agent/orchestrator/tools/builtin/cache-layers.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/cwd-utils.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/fs-reachability.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/fuzzy-match.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/glob-walk.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/path-locks.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/path-utils.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/read-args.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +2 -3
- package/src/runtime/agent/orchestrator/tools/builtin/read-image-resize.mjs +4 -4
- package/src/runtime/agent/orchestrator/tools/builtin/read-open.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/read-streaming.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/rg-runner.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/search-path-diagnostics.mjs +5 -5
- package/src/runtime/agent/orchestrator/tools/builtin/shell-analysis.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/shell-job-paths.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/shell-job-process.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/shell-job-spawn.mjs +519 -0
- package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +5 -449
- package/src/runtime/agent/orchestrator/tools/builtin/snapshot-helpers.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/task-tool.mjs +212 -0
- package/src/runtime/agent/orchestrator/tools/builtin.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/code-graph/build.mjs +1 -7
- package/src/runtime/agent/orchestrator/tools/code-graph/disk-cache.mjs +9 -36
- package/src/runtime/agent/orchestrator/tools/code-graph/dispatch.mjs +15 -3
- package/src/runtime/agent/orchestrator/tools/code-graph/search-references.mjs +429 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/search.mjs +2 -395
- package/src/runtime/agent/orchestrator/tools/code-graph/symbol-index.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/code-graph/text-mask.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/code-graph/trusted-roots.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/code-graph-prewarm-worker.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/code-graph-state.mjs +3 -3
- package/src/runtime/agent/orchestrator/tools/mutation-planner.mjs +5 -5
- package/src/runtime/agent/orchestrator/tools/next-call-utils.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/patch/dispatch.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/patch/matcher.mjs +7 -7
- package/src/runtime/agent/orchestrator/tools/patch/orchestrator.mjs +72 -9
- package/src/runtime/agent/orchestrator/tools/patch/parsing.mjs +4 -4
- package/src/runtime/agent/orchestrator/tools/patch/paths.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/patch/v4a-convert.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/patch-tool-defs.mjs +4 -4
- package/src/runtime/agent/orchestrator/tools/patch.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/result-compression.mjs +3 -3
- package/src/runtime/agent/orchestrator/tools/shell-command.mjs +2 -444
- package/src/runtime/agent/orchestrator/tools/shell-exec-output.mjs +505 -0
- package/src/runtime/agent/orchestrator/tools/shell-exec-policy.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/shell-snapshot.mjs +1 -1
- package/src/runtime/channels/lib/backend-dispatch.mjs +20 -5
- package/src/runtime/channels/lib/scheduler.mjs +1 -1
- package/src/runtime/channels/lib/telegram-format.mjs +1 -1
- package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +4 -4
- package/src/runtime/channels/tool-defs.mjs +2 -3
- package/src/runtime/memory/index.mjs +1 -5
- package/src/runtime/memory/lib/core-memory-candidates.mjs +357 -0
- package/src/runtime/memory/lib/core-memory-store.mjs +7 -357
- package/src/runtime/memory/lib/cycle-signatures.mjs +1 -1
- package/src/runtime/memory/lib/embedding-model-config.mjs +1 -1
- package/src/runtime/memory/lib/embedding-provider.mjs +1 -5
- package/src/runtime/memory/lib/embedding-worker.mjs +1 -5
- package/src/runtime/memory/lib/ko-morph.mjs +2 -2
- package/src/runtime/memory/lib/memory-config-flags.mjs +2 -5
- package/src/runtime/memory/lib/memory-cycle-requests.mjs +3 -7
- package/src/runtime/memory/lib/memory-cycle1.mjs +4 -8
- package/src/runtime/memory/lib/memory-cycle2-gate.mjs +1 -1
- package/src/runtime/memory/lib/memory-cycle2-mutations.mjs +1 -1
- package/src/runtime/memory/lib/memory-cycle2-shared.mjs +2 -5
- package/src/runtime/memory/lib/memory-cycle3.mjs +1 -5
- package/src/runtime/memory/lib/memory-embed.mjs +2 -6
- package/src/runtime/memory/lib/memory-log.mjs +8 -0
- package/src/runtime/memory/lib/memory-ops-policy.mjs +4 -8
- package/src/runtime/memory/lib/memory-recall-scope-filter.mjs +1 -1
- package/src/runtime/memory/lib/memory-recall-store.mjs +2 -193
- package/src/runtime/memory/lib/memory-score.mjs +1 -1
- package/src/runtime/memory/lib/memory-text-utils.mjs +2 -2
- package/src/runtime/memory/lib/memory.mjs +2 -6
- package/src/runtime/memory/lib/pg/adapter.mjs +2 -6
- package/src/runtime/memory/lib/pg/process.mjs +1 -5
- package/src/runtime/memory/lib/pg/supervisor.mjs +1 -5
- package/src/runtime/memory/lib/recall-format.mjs +2 -2
- package/src/runtime/memory/lib/recall-scoring.mjs +195 -0
- package/src/runtime/memory/lib/runtime-fetcher.mjs +1 -5
- package/src/runtime/memory/lib/trace-store.mjs +2 -6
- package/src/runtime/search/lib/http-fetch.mjs +6 -6
- package/src/runtime/search/lib/web-tools.mjs +2 -2
- package/src/runtime/shared/buffered-appender.mjs +1 -1
- package/src/runtime/shared/child-guardian.mjs +1 -1
- package/src/runtime/shared/child-spawn-gate.mjs +1 -1
- package/src/runtime/shared/config.mjs +4 -4
- package/src/runtime/shared/launcher-control.mjs +9 -10
- package/src/runtime/shared/llm/index.mjs +5 -20
- package/src/runtime/shared/markdown-frontmatter.mjs +1 -1
- package/src/runtime/shared/memory-snapshot.mjs +4 -4
- package/src/runtime/shared/pristine-execution.mjs +1 -1
- package/src/runtime/shared/process-lifecycle.mjs +0 -1
- package/src/runtime/shared/process-shutdown.mjs +1 -1
- package/src/runtime/shared/resource-admission.mjs +2 -2
- package/src/runtime/shared/schedule-session-run.mjs +1 -1
- package/src/runtime/shared/schedules-db.mjs +1 -1
- package/src/runtime/shared/service-discovery.mjs +2 -2
- package/src/runtime/shared/staged-update.mjs +6 -6
- package/src/runtime/shared/tool-execution-contract.mjs +1 -1
- package/src/runtime/shared/tool-primitives.mjs +1 -1
- package/src/runtime/shared/tool-surface.mjs +2 -2
- package/src/runtime/shared/update-checker.mjs +1 -1
- package/src/runtime/shared/user-cwd.mjs +3 -3
- package/src/runtime/shared/user-data-guard.mjs +4 -4
- package/src/runtime/shared/workspace-router.mjs +5 -5
- package/src/session-runtime/config-helpers.mjs +2 -3
- package/src/session-runtime/config-lifecycle.mjs +1 -1
- package/src/session-runtime/hitch-profile.mjs +1 -1
- package/src/session-runtime/lifecycle-api.mjs +6 -4
- package/src/session-runtime/model-recency.mjs +5 -5
- package/src/session-runtime/plugin-mcp.mjs +1 -1
- package/src/session-runtime/provider-request-snapshot.mjs +338 -0
- package/src/session-runtime/session-text.mjs +4 -4
- package/src/session-runtime/tool-catalog-schema.mjs +197 -0
- package/src/session-runtime/tool-catalog.mjs +6 -483
- package/src/session-runtime/tool-defs.mjs +1 -1
- package/src/standalone/agent-task-status.mjs +1 -1
- package/src/standalone/agent-tool/helpers.mjs +2 -2
- package/src/standalone/channel-admin.mjs +4 -4
- package/src/standalone/explore-tool.mjs +3 -3
- package/src/standalone/hook-bus/config.mjs +1 -1
- package/src/standalone/hook-bus/constants.mjs +1 -1
- package/src/standalone/hook-bus/rules.mjs +1 -1
- package/src/standalone/projects.mjs +1 -1
- package/src/standalone/provider-admin.mjs +2 -2
- package/src/tui/app/app-format.mjs +2 -2
- package/src/tui/app/clipboard.mjs +3 -3
- package/src/tui/app/input-parsers.mjs +1 -1
- package/src/tui/app/text-layout.mjs +1 -1
- package/src/tui/app/transcript-row-estimate.mjs +360 -0
- package/src/tui/app/transcript-window.mjs +5 -347
- package/src/tui/app/use-mouse-input.mjs +1 -1
- package/src/tui/app/use-prompt-handlers.mjs +1 -1
- package/src/tui/components/tool-execution/surface-detail.mjs +9 -9
- package/src/tui/components/tool-execution/text-format.mjs +2 -2
- package/src/tui/components/tool-output-format.mjs +7 -7
- package/src/tui/display-width.mjs +4 -4
- package/src/tui/dist/index.mjs +63 -97
- package/src/tui/engine/agent-envelope.mjs +5 -5
- package/src/tui/engine/notification-plan.mjs +1 -1
- package/src/tui/engine/queue-helpers.mjs +3 -3
- package/src/tui/engine/render-timing.mjs +4 -5
- package/src/tui/engine/session-api-ext.mjs +3 -3
- package/src/tui/engine/tool-result-status.mjs +5 -5
- package/src/tui/engine/tool-result-text.mjs +1 -1
- package/src/tui/engine/transcript-spill.mjs +585 -0
- package/src/tui/engine/tui-steering-persist.mjs +1 -1
- package/src/tui/engine.mjs +2 -474
- package/src/tui/lib/voice-setup.mjs +1 -1
- package/src/tui/markdown/format-token.mjs +1 -1
- package/src/tui/markdown/render-ansi.mjs +1 -1
- package/src/tui/markdown/table-layout.mjs +4 -4
- package/src/tui/paste-attachments.mjs +1 -1
- package/src/tui/prompt-history-store.mjs +3 -3
- package/src/tui/statusline-ansi-bridge.mjs +2 -2
- package/src/tui/theme.mjs +1 -1
- package/src/tui/transcript-tool-failures.mjs +2 -2
- package/src/ui/ansi.mjs +0 -9
- package/src/ui/statusline-format.mjs +2 -4
- package/scripts/_bench-cwc.json +0 -20
- package/scripts/_jitter-fuzz.jsx +0 -42
- package/scripts/_jitter-fuzz2.jsx +0 -30
- package/scripts/_jitter-probe.jsx +0 -35
- package/scripts/_jp2.jsx +0 -16
- package/scripts/_smoke_wd.mjs +0 -7
- package/scripts/abort-recovery-test.mjs +0 -175
- package/scripts/agent-dispatch-abort-compose-test.mjs +0 -31
- package/scripts/agent-live-arg-guard-smoke.mjs +0 -20
- package/scripts/agent-live-path-suffix-smoke.mjs +0 -34
- package/scripts/agent-live-toolcall-args-smoke.mjs +0 -45
- package/scripts/agent-loop-policy-test.mjs +0 -37
- package/scripts/agent-model-liveness-test.mjs +0 -763
- package/scripts/agent-parallel-smoke.mjs +0 -435
- package/scripts/agent-route-batch-test.mjs +0 -40
- package/scripts/agent-tag-reuse-smoke.mjs +0 -441
- package/scripts/agent-terminal-reap-test.mjs +0 -252
- package/scripts/agent-trace-io-test.mjs +0 -133
- package/scripts/ansi-color-capability-test.mjs +0 -90
- package/scripts/anthropic-admission-retry-integration-test.mjs +0 -119
- package/scripts/anthropic-maxtokens-test.mjs +0 -119
- package/scripts/anthropic-oauth-refresh-race-test.mjs +0 -397
- package/scripts/anthropic-transport-policy-test.mjs +0 -726
- package/scripts/apply-patch-edit-smoke.mjs +0 -71
- package/scripts/arg-guard-test.mjs +0 -93
- package/scripts/async-notify-settlement-test.mjs +0 -99
- package/scripts/atomic-lock-tryonce-test.mjs +0 -125
- package/scripts/background-task-meta-smoke.mjs +0 -38
- package/scripts/bench-run.mjs +0 -508
- package/scripts/boot-smoke.mjs +0 -137
- package/scripts/build-runtime-windows.ps1 +0 -242
- package/scripts/channel-daemon-smoke.mjs +0 -1103
- package/scripts/code-graph-aggregate-cwd-test.mjs +0 -158
- package/scripts/code-graph-disk-hit-test.mjs +0 -290
- package/scripts/code-graph-dispatch-test.mjs +0 -96
- package/scripts/code-graph-root-federation-test.mjs +0 -273
- package/scripts/compact-active-turn-test.mjs +0 -68
- package/scripts/compact-file-reattach-test.mjs +0 -88
- package/scripts/compact-pressure-test.mjs +0 -788
- package/scripts/compact-prior-context-flatten-test.mjs +0 -252
- package/scripts/compact-recall-digest-test.mjs +0 -57
- package/scripts/compact-smoke.mjs +0 -1017
- package/scripts/compact-trigger-migration-smoke.mjs +0 -261
- package/scripts/compacted-placeholder-scrub-test.mjs +0 -63
- package/scripts/context-mcp-metering-test.mjs +0 -1406
- package/scripts/debounced-skills-async-save-test.mjs +0 -57
- package/scripts/deferred-tool-loading-test.mjs +0 -250
- package/scripts/desktop-session-bridge-test.mjs +0 -1013
- package/scripts/dispatch-persist-recovery-test.mjs +0 -141
- package/scripts/embedding-worker-exit-test.mjs +0 -76
- package/scripts/execution-completion-dedup-test.mjs +0 -205
- package/scripts/execution-pending-resume-kick-test.mjs +0 -151
- package/scripts/execution-resume-esc-integration-test.mjs +0 -176
- package/scripts/explore-bench-tmp.mjs +0 -36
- package/scripts/explore-bench.mjs +0 -248
- package/scripts/explore-prompt-policy-test.mjs +0 -256
- package/scripts/explore-timeout-cancel-test.mjs +0 -345
- package/scripts/find-fuzzy-hidden-test.mjs +0 -267
- package/scripts/forwarder-rebind-tail-test.mjs +0 -67
- package/scripts/freevar-smoke.mjs +0 -98
- package/scripts/gemini-provider-test.mjs +0 -1448
- package/scripts/generate-oc-icons.mjs +0 -11
- package/scripts/grok-oauth-refresh-race-test.mjs +0 -273
- package/scripts/headless-pristine-execution-test.mjs +0 -614
- package/scripts/hook-bus-test.mjs +0 -552
- package/scripts/ingest-pure-conversation-smoke.mjs +0 -175
- package/scripts/internal-comms-bench-test.mjs +0 -226
- package/scripts/internal-comms-bench.mjs +0 -853
- package/scripts/internal-comms-smoke.mjs +0 -277
- package/scripts/internal-tools-normalization-test.mjs +0 -62
- package/scripts/interrupted-turn-history-test.mjs +0 -399
- package/scripts/lead-workflow-smoke.mjs +0 -592
- package/scripts/lifecycle-api-test.mjs +0 -137
- package/scripts/live-share-test.mjs +0 -148
- package/scripts/live-worker-smoke.mjs +0 -333
- package/scripts/log-writer-guard-smoke.mjs +0 -131
- package/scripts/maintenance-default-routes-test.mjs +0 -164
- package/scripts/max-output-recovery-persist-test.mjs +0 -81
- package/scripts/max-output-recovery-test.mjs +0 -368
- package/scripts/mcp-client-normalization-test.mjs +0 -45
- package/scripts/mcp-grace-deferred-test.mjs +0 -225
- package/scripts/memory-core-input-test.mjs +0 -167
- package/scripts/memory-cycle-routing-test.mjs +0 -111
- package/scripts/memory-meta-concurrency-test.mjs +0 -20
- package/scripts/memory-pg-recovery-test.mjs +0 -59
- package/scripts/memory-rule-contract-test.mjs +0 -93
- package/scripts/model-list-sanitize-test.mjs +0 -37
- package/scripts/mouse-tracking-restore-smoke.mjs +0 -107
- package/scripts/native-edit-wire-test.mjs +0 -152
- package/scripts/notify-completion-mirror-test.mjs +0 -73
- package/scripts/openai-oauth-refresh-race-test.mjs +0 -120
- package/scripts/openai-oauth-ws-1006-retry-test.mjs +0 -954
- package/scripts/openai-ws-early-settle-test.mjs +0 -216
- package/scripts/output-style-bench.mjs +0 -292
- package/scripts/output-style-smoke.mjs +0 -145
- package/scripts/parent-abort-link-test.mjs +0 -90
- package/scripts/patch-binary-cache-test.mjs +0 -181
- package/scripts/path-suffix-test.mjs +0 -57
- package/scripts/pending-completion-drop-test.mjs +0 -239
- package/scripts/pending-messages-lock-nonblocking-test.mjs +0 -62
- package/scripts/pretool-ask-runtime-test.mjs +0 -54
- package/scripts/process-lifecycle-test.mjs +0 -461
- package/scripts/prompt-immediate-render-test.mjs +0 -89
- package/scripts/prompt-input-parity-test.mjs +0 -145
- package/scripts/provider-admission-scheduler-test.mjs +0 -681
- package/scripts/provider-contract-test.mjs +0 -632
- package/scripts/provider-stream-stall-test.mjs +0 -276
- package/scripts/provider-toolcall-test.mjs +0 -3063
- package/scripts/reactive-compact-persist-smoke.mjs +0 -203
- package/scripts/recall-bench.mjs +0 -359
- package/scripts/resource-admission-test.mjs +0 -792
- package/scripts/result-classification-test.mjs +0 -75
- package/scripts/rg-runner-test.mjs +0 -240
- package/scripts/routing-corpus-test.mjs +0 -349
- package/scripts/sanitize-tool-pairs-test.mjs +0 -260
- package/scripts/session-bench-cache-break-test.mjs +0 -102
- package/scripts/session-bench.mjs +0 -1708
- package/scripts/session-context-bench.mjs +0 -344
- package/scripts/session-heartbeat-lifecycle-test.mjs +0 -68
- package/scripts/session-ingest-compaction-smoke.mjs +0 -279
- package/scripts/session-ingest-smoke.mjs +0 -177
- package/scripts/session-orphan-sweep-test.mjs +0 -109
- package/scripts/set-effort-config-test.mjs +0 -41
- package/scripts/shell-failure-diagnostics-test.mjs +0 -280
- package/scripts/shell-hardening-test.mjs +0 -209
- package/scripts/shell-jobs-windows-hide-test.mjs +0 -164
- package/scripts/ship-mode-test.mjs +0 -98
- package/scripts/smoke-loop-failure-summary-test.mjs +0 -38
- package/scripts/smoke-loop-failure-summary.mjs +0 -16
- package/scripts/smoke-loop-report.mjs +0 -221
- package/scripts/smoke-loop.mjs +0 -202
- package/scripts/smoke-runtime-negative.ps1 +0 -106
- package/scripts/statusline-quota-hysteresis-test.mjs +0 -62
- package/scripts/steering-drain-buckets-test.mjs +0 -467
- package/scripts/steering-fold-provenance-test.mjs +0 -71
- package/scripts/streaming-tail-window-test.mjs +0 -175
- package/scripts/submit-commandbusy-race-test.mjs +0 -257
- package/scripts/task-bench.mjs +0 -205
- package/scripts/terminal-bench-isolation-guards-test.mjs +0 -102
- package/scripts/termio-input-smoke.mjs +0 -199
- package/scripts/tool-result-hook-test.mjs +0 -48
- package/scripts/tool-smoke.mjs +0 -2453
- package/scripts/tool-tui-presentation-test.mjs +0 -286
- package/scripts/toolcall-args-test.mjs +0 -239
- package/scripts/tui-ambiguous-width-test.mjs +0 -113
- package/scripts/tui-background-failure-smoke.mjs +0 -73
- package/scripts/tui-perf-run.ps1 +0 -26
- package/scripts/tui-render-smoke.mjs +0 -90
- package/scripts/tui-runtime-load-bench-entry.jsx +0 -608
- package/scripts/tui-runtime-load-bench.mjs +0 -50
- package/scripts/tui-store-frame-batch-test.mjs +0 -99
- package/scripts/tui-transcript-jitter-harness-entry.jsx +0 -383
- package/scripts/tui-transcript-perf-test.mjs +0 -934
- package/scripts/usage-metrics-epoch-smoke.mjs +0 -114
- package/scripts/verify-release-assets-test.mjs +0 -281
- package/scripts/web-fetch-routing-test.mjs +0 -158
- package/scripts/webhook-smoke.mjs +0 -201
- package/scripts/windows-hide-spawn-options-test.mjs +0 -19
- package/scripts/worker-notify-rejection-test.mjs +0 -51
- package/scripts/write-backpressure-test.mjs +0 -147
|
@@ -17,7 +17,7 @@ import { shouldFallbackTransport } from './retry-classifier.mjs';
|
|
|
17
17
|
import { traceHash, stableTraceStringify, summarizeTraceTools, traceTextShape } from './trace-utils.mjs';
|
|
18
18
|
import { summarizeTraceMessages, extractCompatCachedTokens } from './openai-compat-trace.mjs';
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
function xaiPrefixSeed({ opts, params, rawTools, model }) {
|
|
21
21
|
const providerKey = resolveProviderCacheKey(opts, 'xai');
|
|
22
22
|
const systemMessages = (params?.messages || [])
|
|
23
23
|
.filter(m => m?.role === 'system')
|
|
@@ -112,7 +112,7 @@ export function normalizeXaiReasoningEffort(value) {
|
|
|
112
112
|
return ['low', 'medium', 'high'].includes(effort) ? effort : null;
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
function opencodeGoReasoningEffortValues(modelInfo) {
|
|
116
116
|
const effort = (modelInfo?.reasoningOptions || []).find((option) => option?.type === 'effort');
|
|
117
117
|
return Array.isArray(effort?.values)
|
|
118
118
|
? effort.values.map((item) => String(item || '').trim().toLowerCase()).filter(Boolean)
|
|
@@ -433,7 +433,7 @@ export async function withXaiResponsesCacheLane({ opts, config, cacheRouting, mo
|
|
|
433
433
|
return { value: await fn(laneMeta), laneMeta };
|
|
434
434
|
}
|
|
435
435
|
|
|
436
|
-
|
|
436
|
+
function deterministicUuidFromKey(key) {
|
|
437
437
|
const hex = createHash('sha256').update(String(key ?? '')).digest('hex');
|
|
438
438
|
const variant = ((Number.parseInt(hex[16], 16) & 0x3) | 0x8).toString(16);
|
|
439
439
|
return [
|
|
@@ -445,7 +445,7 @@ export function deterministicUuidFromKey(key) {
|
|
|
445
445
|
].join('-');
|
|
446
446
|
}
|
|
447
447
|
|
|
448
|
-
|
|
448
|
+
function compatCacheTraceEnabled(provider) {
|
|
449
449
|
return process.env.MIXDOG_COMPAT_CACHE_TRACE === '1'
|
|
450
450
|
|| process.env.MIXDOG_PROVIDER_CACHE_TRACE === '1'
|
|
451
451
|
|| (provider === 'xai' && process.env.MIXDOG_XAI_CACHE_TRACE === '1');
|
|
@@ -103,7 +103,7 @@ const HANDSHAKE_MAX_ATTEMPTS = MIDSTREAM_WS_TRANSIENT_RETRY_LIMIT + 1;
|
|
|
103
103
|
const HANDSHAKE_BACKOFF_BASE_MS = 200;
|
|
104
104
|
const HANDSHAKE_BACKOFF_CAP_MS = 3200;
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
function _classifyHandshakeError(err, { retry429 = true } = {}) {
|
|
107
107
|
return classifyHandshakeError(err, { retry429 });
|
|
108
108
|
}
|
|
109
109
|
|
|
@@ -475,7 +475,7 @@ function _cacheContinuityResetReason({ mode, deltaReason, entry, body, traceProv
|
|
|
475
475
|
// asserted via metrics instead of behavior: does the warmup's response_id
|
|
476
476
|
// become the anchor the FIRST real request chains from, and what is the
|
|
477
477
|
// hit/miss outcome of the first up-to-3 real requests on the socket.
|
|
478
|
-
|
|
478
|
+
function _warmupContinuityTrace({
|
|
479
479
|
warmupUsed,
|
|
480
480
|
warmupResponseId,
|
|
481
481
|
priorEntryResponseId,
|
|
@@ -76,6 +76,8 @@ export { _displayCodexModel };
|
|
|
76
76
|
// Public test/integration entry retained alongside the transport module export.
|
|
77
77
|
export { sendViaHttpSse };
|
|
78
78
|
// --- Constants ---
|
|
79
|
+
import { buildRequestBody } from './openai-responses-payload.mjs';
|
|
80
|
+
export { buildRequestBody, convertMessagesToResponsesInput, toOpenAIResponsesTool, _convertMessagesToResponsesInputForTest } from './openai-responses-payload.mjs';
|
|
79
81
|
const CLIENT_ID = 'app_EMoamEEZ73f0CkXaXp7hrann';
|
|
80
82
|
// Exported for openai-oauth-http-sse.mjs (fallback transport headers/URL).
|
|
81
83
|
export const CODEX_OAUTH_ORIGINATOR = 'codex_cli_rs';
|
|
@@ -123,7 +125,7 @@ function _codexCatalogHas(id) {
|
|
|
123
125
|
return _inMemoryCodexCatalog.some(m => m.id === id);
|
|
124
126
|
}
|
|
125
127
|
|
|
126
|
-
function _findCachedCodexModel(id) {
|
|
128
|
+
export function _findCachedCodexModel(id) {
|
|
127
129
|
if (!id) return null;
|
|
128
130
|
if (!Array.isArray(_inMemoryCodexCatalog)) {
|
|
129
131
|
_inMemoryCodexCatalog = _loadCodexModelCacheSync();
|
|
@@ -154,7 +156,7 @@ export function codexModelSupportsServiceTier(id, serviceTier) {
|
|
|
154
156
|
// Newest MAIN gpt-5 chat model by version, read from the SYNC in-memory
|
|
155
157
|
// catalog mirror. Returns null until populated; callers warm via
|
|
156
158
|
// ensureLatestCodexModel when null.
|
|
157
|
-
|
|
159
|
+
function resolveLatestCodexModel() {
|
|
158
160
|
if (!Array.isArray(_inMemoryCodexCatalog)) return null;
|
|
159
161
|
let best = null;
|
|
160
162
|
for (const m of _inMemoryCodexCatalog) {
|
|
@@ -164,7 +166,7 @@ export function resolveLatestCodexModel() {
|
|
|
164
166
|
return best?.id || null;
|
|
165
167
|
}
|
|
166
168
|
|
|
167
|
-
|
|
169
|
+
async function ensureLatestCodexModel(provider) {
|
|
168
170
|
let m = resolveLatestCodexModel();
|
|
169
171
|
if (m) return m;
|
|
170
172
|
await provider._refreshModelCache();
|
|
@@ -352,283 +354,6 @@ async function refreshTokens(refreshToken) {
|
|
|
352
354
|
}
|
|
353
355
|
}
|
|
354
356
|
// --- Build Responses API request ---
|
|
355
|
-
function _contentTextParts(content, type = 'input_text') {
|
|
356
|
-
if (typeof content === 'string') return content ? [{ type, text: content }] : [];
|
|
357
|
-
if (!Array.isArray(content)) {
|
|
358
|
-
const text = content == null ? '' : JSON.stringify(content);
|
|
359
|
-
return text ? [{ type, text }] : [];
|
|
360
|
-
}
|
|
361
|
-
const out = [];
|
|
362
|
-
for (const item of content) {
|
|
363
|
-
if (!item || typeof item !== 'object') continue;
|
|
364
|
-
if (typeof item.text === 'string') {
|
|
365
|
-
out.push({ type: item.type === 'output_text' ? 'output_text' : type, text: item.text });
|
|
366
|
-
} else if (typeof item.content === 'string') {
|
|
367
|
-
out.push({ type, text: item.content });
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
return out;
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
/**
|
|
374
|
-
* Convert a message slice to Responses API input items.
|
|
375
|
-
*/
|
|
376
|
-
function convertMessagesToResponsesInput(messages, opts = {}) {
|
|
377
|
-
const out = [];
|
|
378
|
-
const pendingToolMedia = [];
|
|
379
|
-
const customToolCallNameById = new Map();
|
|
380
|
-
const wireParity = process.env.MIXDOG_OAI_CODEX_WIRE_PARITY === '1';
|
|
381
|
-
const wireMessage = (role, content) => (wireParity
|
|
382
|
-
? { type: 'message', role, content, internal_chat_message_metadata_passthrough: {} }
|
|
383
|
-
: { role, content });
|
|
384
|
-
const flushToolMedia = () => {
|
|
385
|
-
if (!pendingToolMedia.length) return;
|
|
386
|
-
out.push(wireMessage('user', pendingToolMedia.splice(0)));
|
|
387
|
-
};
|
|
388
|
-
for (const m of messages) {
|
|
389
|
-
if (!m || m.role === 'system') continue;
|
|
390
|
-
if (m.role === 'tool') {
|
|
391
|
-
const { output, mediaContent } = splitToolContentForOpenAIResponses(m.content);
|
|
392
|
-
if (customToolCallNameById.has(m.toolCallId || '')) {
|
|
393
|
-
out.push({
|
|
394
|
-
type: 'custom_tool_call_output',
|
|
395
|
-
call_id: m.toolCallId || '',
|
|
396
|
-
name: customToolCallNameById.get(m.toolCallId || '') || undefined,
|
|
397
|
-
output,
|
|
398
|
-
});
|
|
399
|
-
if (mediaContent) pendingToolMedia.push(...mediaContent);
|
|
400
|
-
continue;
|
|
401
|
-
}
|
|
402
|
-
const nativeSearchOutput = nativeToolSearchOutputInput(
|
|
403
|
-
m,
|
|
404
|
-
opts.nativeToolSearchProvider || 'openai-oauth',
|
|
405
|
-
);
|
|
406
|
-
if (nativeSearchOutput) {
|
|
407
|
-
out.push(nativeSearchOutput);
|
|
408
|
-
if (mediaContent) pendingToolMedia.push(...mediaContent);
|
|
409
|
-
continue;
|
|
410
|
-
}
|
|
411
|
-
out.push({
|
|
412
|
-
type: 'function_call_output',
|
|
413
|
-
call_id: m.toolCallId || '',
|
|
414
|
-
output,
|
|
415
|
-
});
|
|
416
|
-
if (mediaContent) pendingToolMedia.push(...mediaContent);
|
|
417
|
-
continue;
|
|
418
|
-
}
|
|
419
|
-
flushToolMedia();
|
|
420
|
-
if (m.role === 'assistant' && Array.isArray(m.toolCalls) && m.toolCalls.length) {
|
|
421
|
-
// Reasoning replay deliberately omitted: openai-oauth rejects an
|
|
422
|
-
// `rs_*` reasoning item with the same id across the same
|
|
423
|
-
// handshake session_id (in-memory conversation state lives
|
|
424
|
-
// for the WS_IDLE_MS window even after a socket close).
|
|
425
|
-
// Server-side state already preserves the prefix; sending
|
|
426
|
-
// reasoning in `input` triggers "Duplicate item".
|
|
427
|
-
if (m.content) out.push(wireMessage('assistant', normalizeContentForOpenAIResponses(m.content, { role: 'assistant' })));
|
|
428
|
-
for (const tc of m.toolCalls) {
|
|
429
|
-
const nativeSearchCall = nativeToolSearchCallInput(tc);
|
|
430
|
-
if (nativeSearchCall) {
|
|
431
|
-
out.push(nativeSearchCall);
|
|
432
|
-
} else if (isCustomToolCallRecord(tc)) {
|
|
433
|
-
if (tc.id) customToolCallNameById.set(tc.id, tc.name || '');
|
|
434
|
-
out.push({
|
|
435
|
-
type: 'custom_tool_call',
|
|
436
|
-
call_id: tc.id,
|
|
437
|
-
name: tc.name,
|
|
438
|
-
input: customToolInputFromArguments(tc.name, tc.arguments),
|
|
439
|
-
});
|
|
440
|
-
} else {
|
|
441
|
-
out.push({
|
|
442
|
-
type: 'function_call',
|
|
443
|
-
call_id: tc.id,
|
|
444
|
-
name: tc.name === 'tool_search' ? 'load_tool' : tc.name,
|
|
445
|
-
arguments: JSON.stringify(tc.arguments),
|
|
446
|
-
});
|
|
447
|
-
}
|
|
448
|
-
}
|
|
449
|
-
continue;
|
|
450
|
-
}
|
|
451
|
-
out.push(wireMessage(
|
|
452
|
-
m.role === 'assistant' ? 'assistant' : 'user',
|
|
453
|
-
normalizeContentForOpenAIResponses(m.content, { role: m.role }),
|
|
454
|
-
));
|
|
455
|
-
}
|
|
456
|
-
flushToolMedia();
|
|
457
|
-
return out;
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
function toOpenAIResponsesTool(t) {
|
|
461
|
-
if (t?.name === 'load_tool' || t?.name === 'tool_search') {
|
|
462
|
-
return {
|
|
463
|
-
type: 'tool_search',
|
|
464
|
-
execution: 'client',
|
|
465
|
-
description: t.description,
|
|
466
|
-
parameters: t.inputSchema,
|
|
467
|
-
};
|
|
468
|
-
}
|
|
469
|
-
if (isResponsesFreeformTool(t)) return toResponsesCustomTool(t);
|
|
470
|
-
return {
|
|
471
|
-
type: 'function',
|
|
472
|
-
name: t.name,
|
|
473
|
-
description: t.description,
|
|
474
|
-
parameters: t.inputSchema,
|
|
475
|
-
};
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
export const _convertMessagesToResponsesInputForTest = convertMessagesToResponsesInput;
|
|
479
|
-
|
|
480
|
-
// codex build_reasoning() (core/src/client.rs:785-805) only attaches the
|
|
481
|
-
// reasoning object when model_info.supports_reasoning_summaries; models
|
|
482
|
-
// without summary support get NO reasoning field at all. Mirror that via the
|
|
483
|
-
// cached codex catalog; unknown models default to true (gpt-5 family all
|
|
484
|
-
// support summaries) so a cold catalog cannot strip reasoning from the wire.
|
|
485
|
-
function _codexModelSupportsReasoningSummaries(id) {
|
|
486
|
-
const info = _findCachedCodexModel(id);
|
|
487
|
-
if (!info) return true;
|
|
488
|
-
const flags = [info.supportsReasoningSummaries, info.supports_reasoning_summaries, info.supportsReasoning, info.supports_reasoning];
|
|
489
|
-
for (const flag of flags) {
|
|
490
|
-
if (typeof flag === 'boolean') return flag;
|
|
491
|
-
}
|
|
492
|
-
return true;
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
// codex reasoning_effort_for_request (core/src/client.rs): `ultra` collapses to
|
|
496
|
-
// `max` on the wire — the openai-oauth backend does not accept `ultra`. Every
|
|
497
|
-
// other effort passes through unchanged; empty/unknown falls back to medium.
|
|
498
|
-
function _normalizeReasoningEffort(effort) {
|
|
499
|
-
const e = String(effort || '').trim().toLowerCase();
|
|
500
|
-
if (!e) return 'medium';
|
|
501
|
-
if (e === 'ultra') return 'max';
|
|
502
|
-
return e;
|
|
503
|
-
}
|
|
504
|
-
|
|
505
|
-
export function buildRequestBody(messages, model, tools, sendOpts) {
|
|
506
|
-
// codex reasoning_effort_for_request: `ultra` collapses to `max` on the
|
|
507
|
-
// wire (the only remap; every other effort passes through). Default medium.
|
|
508
|
-
// Kept inline (not a module const) so buildRequestBody stays self-contained.
|
|
509
|
-
// Extract system/instructions
|
|
510
|
-
const systemMsgs = messages.filter(m => m.role === 'system');
|
|
511
|
-
const instructions = systemMsgs.map(m => m.content).join('\n\n') || 'You are a helpful assistant.';
|
|
512
|
-
const opts = sendOpts || {};
|
|
513
|
-
const input = convertMessagesToResponsesInput(messages, {
|
|
514
|
-
providerState: opts.providerState,
|
|
515
|
-
model,
|
|
516
|
-
nativeToolSearchProvider: opts.promptCacheProvider || 'openai-oauth',
|
|
517
|
-
});
|
|
518
|
-
// Match the request body shape the OAuth backend expects so the
|
|
519
|
-
// server-side auto-cache routes correctly. text.verbosity / include /
|
|
520
|
-
// tool_choice / parallel_tool_calls are all inert without side effects
|
|
521
|
-
// for most callers but their presence affects how the OAuth backend classifies the
|
|
522
|
-
// request (and therefore whether the prompt cache is consulted).
|
|
523
|
-
const include = ['reasoning.encrypted_content'];
|
|
524
|
-
for (const item of Array.isArray(opts.nativeInclude) ? opts.nativeInclude : []) {
|
|
525
|
-
const value = String(item || '').trim();
|
|
526
|
-
if (value && !include.includes(value)) include.push(value);
|
|
527
|
-
}
|
|
528
|
-
// Field order MIRRORS codex-rs ResponsesApiRequest (common.rs struct order):
|
|
529
|
-
// model, instructions, input, tools, tool_choice, parallel_tool_calls,
|
|
530
|
-
// reasoning, store, stream, include, service_tier, prompt_cache_key, text.
|
|
531
|
-
// JSON serialization order is load-bearing for the server prompt cache
|
|
532
|
-
// (exact-prefix match): matching codex's byte layout keeps our requests on
|
|
533
|
-
// the same cache-routing shape codex warms. tools/service_tier/
|
|
534
|
-
// prompt_cache_key are appended below in the same relative order.
|
|
535
|
-
const body = {
|
|
536
|
-
model,
|
|
537
|
-
instructions,
|
|
538
|
-
input,
|
|
539
|
-
tool_choice: opts.toolChoice || 'auto',
|
|
540
|
-
parallel_tool_calls: true,
|
|
541
|
-
// codex build_reasoning() sends { effort, summary } — summary defaults to
|
|
542
|
-
// ReasoningSummary::Auto (protocol config_types.rs), serialized lowercase
|
|
543
|
-
// as "auto". Matching this keeps our reasoning object byte-identical to
|
|
544
|
-
// codex so the server prompt-cache prefix hash lines up. codex also
|
|
545
|
-
// normalizes `ultra` -> `max` on the wire (reasoning_effort_for_request
|
|
546
|
-
// in core/src/client.rs); the openai-oauth backend does not accept
|
|
547
|
-
// `ultra` as a wire value, so mirror that mapping here.
|
|
548
|
-
// WIRE-VERIFIED (codex desktop logs_2.sqlite, 40 response.create
|
|
549
|
-
// captures, 2026-07-03): codex sends reasoning as {"effort":"..."}
|
|
550
|
-
// with NO summary field on gpt-5.5, regardless of what the repo's
|
|
551
|
-
// build_reasoning() suggests. Match the observed bytes.
|
|
552
|
-
reasoning: { effort: _normalizeReasoningEffort(opts.effort) },
|
|
553
|
-
store: process.env.MIXDOG_OAI_STORE === 'true' ? true : false,
|
|
554
|
-
stream: true,
|
|
555
|
-
include,
|
|
556
|
-
};
|
|
557
|
-
const maxOutputTokens = Number(opts.maxOutputTokens ?? opts.outputTokens ?? opts.max_output_tokens);
|
|
558
|
-
if (_envFlag('MIXDOG_OPENAI_OAUTH_SEND_MAX_OUTPUT_TOKENS', false)
|
|
559
|
-
&& Number.isFinite(maxOutputTokens)
|
|
560
|
-
&& maxOutputTokens > 0) {
|
|
561
|
-
body.max_output_tokens = Math.floor(maxOutputTokens);
|
|
562
|
-
}
|
|
563
|
-
if (opts.fast === true) {
|
|
564
|
-
// 'priority' is the only fast-class value the OpenAI OAuth backend
|
|
565
|
-
// accepts on the wire: 'fast' is hard-rejected ("Unsupported
|
|
566
|
-
// service_tier: fast", probed 2026-06-11). Only send the request value
|
|
567
|
-
// when the model catalog advertises it.
|
|
568
|
-
if (codexModelSupportsServiceTier(model, 'priority')) {
|
|
569
|
-
body.service_tier = 'priority';
|
|
570
|
-
}
|
|
571
|
-
}
|
|
572
|
-
// Add tools. `nativeTools` are server-hosted Responses tools (for
|
|
573
|
-
// example web_search) and must be passed through without wrapping them as
|
|
574
|
-
// function tools. codex places `tools` right after `input` (before
|
|
575
|
-
// tool_choice); we insert it there via a rebuilt object so serialization
|
|
576
|
-
// order matches, rather than appending it last.
|
|
577
|
-
const functionTools = tools?.length ? tools.map(toOpenAIResponsesTool) : [];
|
|
578
|
-
const nativeTools = Array.isArray(opts.nativeTools)
|
|
579
|
-
? opts.nativeTools.filter(t => t && typeof t === 'object')
|
|
580
|
-
: [];
|
|
581
|
-
const toolsList = (functionTools.length || nativeTools.length)
|
|
582
|
-
? [...nativeTools, ...functionTools]
|
|
583
|
-
: null;
|
|
584
|
-
const promptCacheProvider = opts.promptCacheProvider || 'openai-oauth';
|
|
585
|
-
const promptCacheLane = opts.promptCacheLane || resolveProviderPromptCacheLane(promptCacheProvider, opts);
|
|
586
|
-
const promptCacheKey = buildStableProviderPromptCacheKey(promptCacheProvider, opts, {
|
|
587
|
-
model,
|
|
588
|
-
instructions,
|
|
589
|
-
tools: toolsList || [],
|
|
590
|
-
effort: body.reasoning?.effort,
|
|
591
|
-
fast: opts.fast === true,
|
|
592
|
-
serviceTier: body.service_tier || '',
|
|
593
|
-
toolChoice: body.tool_choice,
|
|
594
|
-
parallelToolCalls: body.parallel_tool_calls,
|
|
595
|
-
cacheLaneSlot: promptCacheLane.slot,
|
|
596
|
-
cacheLaneShards: promptCacheLane.shards,
|
|
597
|
-
});
|
|
598
|
-
// WIRE-VERIFIED (codex desktop logs, 2026-07-03): every live gpt-5.5
|
|
599
|
-
// response.create carries text:{"verbosity":"low"} (or a schema variant);
|
|
600
|
-
// none omit the field. Default to codex's observed "low", allow override.
|
|
601
|
-
const verbosity = (typeof opts.verbosity === 'string' && opts.verbosity.trim()
|
|
602
|
-
? opts.verbosity.trim().toLowerCase()
|
|
603
|
-
: null) || 'low';
|
|
604
|
-
// Rebuild the body in codex struct order so JSON serialization is
|
|
605
|
-
// byte-compatible with codex: ... input, tools, tool_choice,
|
|
606
|
-
// parallel_tool_calls, reasoning, store, stream, include, service_tier,
|
|
607
|
-
// prompt_cache_key, text. service_tier is only present when fast set it.
|
|
608
|
-
const ordered = {
|
|
609
|
-
model: body.model,
|
|
610
|
-
instructions: body.instructions,
|
|
611
|
-
input: body.input,
|
|
612
|
-
...(toolsList ? { tools: toolsList } : {}),
|
|
613
|
-
tool_choice: body.tool_choice,
|
|
614
|
-
parallel_tool_calls: body.parallel_tool_calls,
|
|
615
|
-
reasoning: body.reasoning,
|
|
616
|
-
store: body.store,
|
|
617
|
-
stream: body.stream,
|
|
618
|
-
include: body.include,
|
|
619
|
-
...(body.service_tier ? { service_tier: body.service_tier } : {}),
|
|
620
|
-
prompt_cache_key: promptCacheKey,
|
|
621
|
-
text: { verbosity },
|
|
622
|
-
...(body.max_output_tokens ? { max_output_tokens: body.max_output_tokens } : {}),
|
|
623
|
-
};
|
|
624
|
-
// NOTE: prompt_cache_retention is a public OpenAI Responses API parameter,
|
|
625
|
-
// but the openai-oauth endpoint still rejects it ("Unsupported parameter:
|
|
626
|
-
// prompt_cache_retention", re-probed 2026-06-22). Leave retention on the
|
|
627
|
-
// openai-oauth server default; public OpenAI direct injects 24h separately.
|
|
628
|
-
return ordered;
|
|
629
|
-
}
|
|
630
|
-
|
|
631
|
-
// --- Provider ---
|
|
632
357
|
export class OpenAIOAuthProvider {
|
|
633
358
|
// OpenAI input_tokens already INCLUDES cached_tokens (cached is a subset),
|
|
634
359
|
// so input alone is the context footprint. See registry.mjs.
|