mixdog 0.9.63 → 0.9.65
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/turn-snapshot.mjs +184 -0
- 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/runtime-core.mjs +4 -0
- package/src/session-runtime/session-text.mjs +4 -4
- package/src/session-runtime/session-turn-api.mjs +7 -0
- 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.jsx +1 -1
- 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 +187 -99
- package/src/tui/engine/agent-envelope.mjs +5 -5
- package/src/tui/engine/live-share.mjs +100 -0
- 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 +6 -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 +29 -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
|
@@ -62,6 +62,7 @@ export function createLiveShare({
|
|
|
62
62
|
getPublishedState,
|
|
63
63
|
listeners,
|
|
64
64
|
onRemoteSubmit,
|
|
65
|
+
onRemoteAbort,
|
|
65
66
|
onOwnerClosed,
|
|
66
67
|
viewerApply,
|
|
67
68
|
}) {
|
|
@@ -73,6 +74,7 @@ export function createLiveShare({
|
|
|
73
74
|
let lastItems = null;
|
|
74
75
|
let lastTail = null;
|
|
75
76
|
let lastSpinner = null;
|
|
77
|
+
let lastLiveSig = '';
|
|
76
78
|
|
|
77
79
|
const broadcast = (frame) => {
|
|
78
80
|
if (sockets.size === 0) return;
|
|
@@ -82,12 +84,49 @@ export function createLiveShare({
|
|
|
82
84
|
}
|
|
83
85
|
};
|
|
84
86
|
|
|
87
|
+
// Live-state mirror (attach parity): the transcript alone left an attached
|
|
88
|
+
// viewer blind to the owner's activity — busy/stop state, the queued
|
|
89
|
+
// follow-up list, the Explore/Search summary, agent workers/jobs, and the
|
|
90
|
+
// context gauge stats all live in owner process state. Mirror a compact
|
|
91
|
+
// subset so viewer surfaces render them natively. queued entries are
|
|
92
|
+
// projected to display fields only (content parts may carry images).
|
|
93
|
+
const LIVE_STATS_KEYS = [
|
|
94
|
+
'currentContextSource', 'currentContextTokens', 'currentEstimatedContextTokens',
|
|
95
|
+
'currentContextUpdatedAt', 'costUsd', 'turns', 'inputTokens', 'outputTokens',
|
|
96
|
+
'latestInputTokens', 'latestPromptTokens', 'contextTokens',
|
|
97
|
+
];
|
|
98
|
+
const liveStateOf = (st) => {
|
|
99
|
+
const stats = st.stats && typeof st.stats === 'object' ? st.stats : {};
|
|
100
|
+
const statsSubset = {};
|
|
101
|
+
for (const key of LIVE_STATS_KEYS) {
|
|
102
|
+
if (stats[key] !== undefined) statsSubset[key] = stats[key];
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
busy: st.busy === true,
|
|
106
|
+
commandBusy: st.commandBusy === true,
|
|
107
|
+
queued: (Array.isArray(st.queued) ? st.queued : []).map((entry) => ({
|
|
108
|
+
id: entry?.id,
|
|
109
|
+
text: String(entry?.displayText ?? entry?.text ?? entry?.message ?? '').slice(0, 2000),
|
|
110
|
+
...(entry?.enqueuedAt ? { enqueuedAt: entry.enqueuedAt } : {}),
|
|
111
|
+
})),
|
|
112
|
+
activeToolSummary: st.activeToolSummary || null,
|
|
113
|
+
agentWorkers: Array.isArray(st.agentWorkers) ? st.agentWorkers : [],
|
|
114
|
+
agentJobs: Array.isArray(st.agentJobs) ? st.agentJobs : [],
|
|
115
|
+
ownerClientHostPid: Number(st.clientHostPid) || process.pid,
|
|
116
|
+
displayContextWindow: Number(st.displayContextWindow) || 0,
|
|
117
|
+
compactBoundaryTokens: Number(st.compactBoundaryTokens) || 0,
|
|
118
|
+
autoCompactTokenLimit: Number(st.autoCompactTokenLimit) || 0,
|
|
119
|
+
stats: statsSubset,
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
|
|
85
123
|
const fullFrame = (st) => ({
|
|
86
124
|
t: 'full',
|
|
87
125
|
sessionId: serverId,
|
|
88
126
|
items: Array.isArray(st.items) ? st.items : [],
|
|
89
127
|
tail: st.streamingTail || null,
|
|
90
128
|
spinner: st.spinner || null,
|
|
129
|
+
live: liveStateOf(st),
|
|
91
130
|
});
|
|
92
131
|
|
|
93
132
|
// Runs on every frame-batched publish. With no viewers it only re-baselines
|
|
@@ -98,6 +137,7 @@ export function createLiveShare({
|
|
|
98
137
|
lastItems = st.items;
|
|
99
138
|
lastTail = st.streamingTail;
|
|
100
139
|
lastSpinner = st.spinner;
|
|
140
|
+
lastLiveSig = '';
|
|
101
141
|
return;
|
|
102
142
|
}
|
|
103
143
|
const frame = { t: 'delta' };
|
|
@@ -155,6 +195,13 @@ export function createLiveShare({
|
|
|
155
195
|
lastSpinner = st.spinner;
|
|
156
196
|
dirty = true;
|
|
157
197
|
}
|
|
198
|
+
const live = liveStateOf(st);
|
|
199
|
+
const liveSig = JSON.stringify(live);
|
|
200
|
+
if (liveSig !== lastLiveSig) {
|
|
201
|
+
frame.live = live;
|
|
202
|
+
lastLiveSig = liveSig;
|
|
203
|
+
dirty = true;
|
|
204
|
+
}
|
|
158
205
|
if (dirty) broadcast(frame);
|
|
159
206
|
};
|
|
160
207
|
listeners.add(onPublish);
|
|
@@ -190,6 +237,10 @@ export function createLiveShare({
|
|
|
190
237
|
attachLineReader(socket, (frame) => {
|
|
191
238
|
if (frame.t === 'submit' && typeof frame.text === 'string' && frame.text.trim()) {
|
|
192
239
|
onRemoteSubmit(frame.text);
|
|
240
|
+
} else if (frame.t === 'abort') {
|
|
241
|
+
// Viewer stop button: interrupt the owner's active turn here — the
|
|
242
|
+
// viewer process has no turn of its own to cancel.
|
|
243
|
+
onRemoteAbort?.();
|
|
193
244
|
} else if (frame.t === 'sync') {
|
|
194
245
|
try { socket.write(frameLine(fullFrame(getPublishedState()))); } catch { /* close handles */ }
|
|
195
246
|
}
|
|
@@ -199,6 +250,7 @@ export function createLiveShare({
|
|
|
199
250
|
lastItems = st.items;
|
|
200
251
|
lastTail = st.streamingTail;
|
|
201
252
|
lastSpinner = st.spinner;
|
|
253
|
+
lastLiveSig = JSON.stringify(liveStateOf(st));
|
|
202
254
|
socket.write(frameLine(fullFrame(st)));
|
|
203
255
|
} catch {
|
|
204
256
|
try { socket.destroy(); } catch { /* already gone */ }
|
|
@@ -275,11 +327,48 @@ export function createLiveShare({
|
|
|
275
327
|
else viewerApply.appendItems([item]);
|
|
276
328
|
};
|
|
277
329
|
|
|
330
|
+
// Mirror the owner's live-state subset into the viewer store. Context stats
|
|
331
|
+
// merge over the local stats object so unmirrored accumulator fields keep
|
|
332
|
+
// their last local values instead of vanishing.
|
|
333
|
+
const applyLiveState = (live) => {
|
|
334
|
+
if (!live || typeof live !== 'object') return;
|
|
335
|
+
const patch = {
|
|
336
|
+
busy: live.busy === true,
|
|
337
|
+
commandBusy: live.commandBusy === true,
|
|
338
|
+
queued: Array.isArray(live.queued) ? live.queued : [],
|
|
339
|
+
activeToolSummary: live.activeToolSummary || null,
|
|
340
|
+
agentWorkers: Array.isArray(live.agentWorkers) ? live.agentWorkers : [],
|
|
341
|
+
agentJobs: Array.isArray(live.agentJobs) ? live.agentJobs : [],
|
|
342
|
+
ownerClientHostPid: Number(live.ownerClientHostPid) || 0,
|
|
343
|
+
};
|
|
344
|
+
for (const key of ['displayContextWindow', 'compactBoundaryTokens', 'autoCompactTokenLimit']) {
|
|
345
|
+
if (Number(live[key]) > 0) patch[key] = Number(live[key]);
|
|
346
|
+
}
|
|
347
|
+
if (live.stats && typeof live.stats === 'object' && Object.keys(live.stats).length > 0) {
|
|
348
|
+
const current = viewerApply.getState().stats;
|
|
349
|
+
patch.stats = { ...(current && typeof current === 'object' ? current : {}), ...live.stats };
|
|
350
|
+
}
|
|
351
|
+
viewerApply.set(patch);
|
|
352
|
+
};
|
|
353
|
+
|
|
354
|
+
// Owner gone (clean close, crash, or pipe drop): the mirrored activity is
|
|
355
|
+
// no longer authoritative — clear it so the viewer never shows a frozen
|
|
356
|
+
// spinner/queue while the promotion path takes over.
|
|
357
|
+
const clearMirroredLiveState = () => {
|
|
358
|
+
try {
|
|
359
|
+
viewerApply?.set?.({
|
|
360
|
+
busy: false, commandBusy: false, spinner: null, queued: [],
|
|
361
|
+
activeToolSummary: null, agentWorkers: [], agentJobs: [], ownerClientHostPid: 0,
|
|
362
|
+
});
|
|
363
|
+
} catch { /* viewer store already disposed */ }
|
|
364
|
+
};
|
|
365
|
+
|
|
278
366
|
const applyViewerFrame = (frame, socket) => {
|
|
279
367
|
if (frame.t === 'full') {
|
|
280
368
|
viewerApply.replaceItems(Array.isArray(frame.items) ? frame.items : []);
|
|
281
369
|
if (frame.tail) viewerApply.updateStreamingTail(frame.tail.id, frame.tail);
|
|
282
370
|
viewerApply.set({ spinner: frame.spinner || null });
|
|
371
|
+
applyLiveState(frame.live);
|
|
283
372
|
return;
|
|
284
373
|
}
|
|
285
374
|
if (frame.t !== 'delta') return;
|
|
@@ -307,6 +396,7 @@ export function createLiveShare({
|
|
|
307
396
|
else viewerApply.clearStreamingTail();
|
|
308
397
|
}
|
|
309
398
|
if ('spinner' in frame) viewerApply.set({ spinner: frame.spinner || null });
|
|
399
|
+
if ('live' in frame) applyLiveState(frame.live);
|
|
310
400
|
};
|
|
311
401
|
|
|
312
402
|
const stopClient = () => {
|
|
@@ -335,6 +425,7 @@ export function createLiveShare({
|
|
|
335
425
|
const wasUp = clientUp && client === socket;
|
|
336
426
|
if (client === socket) { client = null; clientId = ''; clientUp = false; }
|
|
337
427
|
try { socket.destroy(); } catch { /* already gone */ }
|
|
428
|
+
if (wasUp) clearMirroredLiveState();
|
|
338
429
|
// A live link that dropped means the owner ended or crashed: nudge the
|
|
339
430
|
// promotion path instead of waiting for the next store-mtime change.
|
|
340
431
|
if (wasUp) onOwnerClosed?.(id, ownerClosed);
|
|
@@ -381,6 +472,15 @@ export function createLiveShare({
|
|
|
381
472
|
return false;
|
|
382
473
|
}
|
|
383
474
|
},
|
|
475
|
+
sendAbort() {
|
|
476
|
+
if (!clientUp || !client) return false;
|
|
477
|
+
try {
|
|
478
|
+
client.write(frameLine({ t: 'abort' }));
|
|
479
|
+
return true;
|
|
480
|
+
} catch {
|
|
481
|
+
return false;
|
|
482
|
+
}
|
|
483
|
+
},
|
|
384
484
|
dispose() {
|
|
385
485
|
listeners.delete(onPublish);
|
|
386
486
|
stopServer();
|
|
@@ -63,7 +63,7 @@ export function executionCardKey(event, text, parsed) {
|
|
|
63
63
|
return `card:${executionId}:${hasBody}`;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
function isExecutionNotification(event, text, parsed) {
|
|
67
67
|
const meta = event?.meta && typeof event.meta === 'object' ? event.meta : {};
|
|
68
68
|
if (meta.execution_id || meta.execution_surface) return true;
|
|
69
69
|
if (parseAgentResultEnvelope(text)) return true;
|
|
@@ -53,7 +53,7 @@ export function isSlashQueuedEntry(entry) {
|
|
|
53
53
|
return text.trim().startsWith('/');
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
function firstQueueLine(text) {
|
|
57
57
|
return String(text || '').split('\n').map((line) => line.trim()).find(Boolean) || '';
|
|
58
58
|
}
|
|
59
59
|
|
|
@@ -88,7 +88,7 @@ export function promptContentText(content) {
|
|
|
88
88
|
return String(content ?? '');
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
|
|
91
|
+
function timestampMs(value) {
|
|
92
92
|
if (value == null || value === '') return 0;
|
|
93
93
|
const n = Number(value);
|
|
94
94
|
if (Number.isFinite(n) && n > 0) return n;
|
|
@@ -96,7 +96,7 @@ export function timestampMs(value) {
|
|
|
96
96
|
return Number.isFinite(parsed) && parsed > 0 ? parsed : 0;
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
-
|
|
99
|
+
function hasModelVisibleConversation(session) {
|
|
100
100
|
const messages = Array.isArray(session?.messages) ? session.messages : [];
|
|
101
101
|
return messages.some((message) => {
|
|
102
102
|
const role = message?.role;
|
|
@@ -17,12 +17,11 @@
|
|
|
17
17
|
* The fixed timeout below is only a fallback ceiling for when no renderer ack is
|
|
18
18
|
* wired (or the renderer is idle) so a yield can never hang the turn.
|
|
19
19
|
*/
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
const RENDER_ACK_FALLBACK_MS = 32;
|
|
21
|
+
const RENDER_ACK_HANG_GUARD_MS = 250;
|
|
22
|
+
const RENDER_SETTLE_IDLE_MS = 64;
|
|
23
23
|
|
|
24
24
|
// Back-compat alias: previously the fixed wait duration, now the fallback only.
|
|
25
|
-
export const RENDER_THROTTLE_FLUSH_MS = RENDER_ACK_FALLBACK_MS;
|
|
26
25
|
|
|
27
26
|
let pendingRenderAcks = [];
|
|
28
27
|
let renderAckSeq = 0;
|
|
@@ -38,7 +37,7 @@ export const scheduleRenderFrameAck = () => {
|
|
|
38
37
|
setImmediate(() => notifyRenderFrame(seq));
|
|
39
38
|
};
|
|
40
39
|
|
|
41
|
-
|
|
40
|
+
const notifyRenderFrame = (seq = ++renderAckSeq) => {
|
|
42
41
|
if (pendingRenderAcks.length === 0) return;
|
|
43
42
|
const acks = pendingRenderAcks;
|
|
44
43
|
pendingRenderAcks = [];
|
|
@@ -58,7 +58,7 @@ export function restoredAssistantTranscriptItems(message, nextId) {
|
|
|
58
58
|
// tool_calls and the follow-up role:'tool' results, but resume used to drop
|
|
59
59
|
// both — a reopened session lost every tool marker (user bug). Rebuild one
|
|
60
60
|
// transcript tool item per call and attach its result by tool_call_id.
|
|
61
|
-
|
|
61
|
+
function restoredToolCallItems(message, nextId, pendingByCallId) {
|
|
62
62
|
const calls = Array.isArray(message?.tool_calls) ? message.tool_calls
|
|
63
63
|
: Array.isArray(message?.toolCalls) ? message.toolCalls : [];
|
|
64
64
|
const at = Number(message?.meta?.transcript?.at);
|
|
@@ -86,7 +86,7 @@ export function restoredToolCallItems(message, nextId, pendingByCallId) {
|
|
|
86
86
|
return items;
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
|
|
89
|
+
function attachRestoredToolResult(message, pendingByCallId) {
|
|
90
90
|
const callId = typeof message?.tool_call_id === 'string' && message.tool_call_id
|
|
91
91
|
? message.tool_call_id
|
|
92
92
|
: typeof message?.toolCallId === 'string' ? message.toolCallId : '';
|
|
@@ -177,7 +177,7 @@ function buildRestoredAggregateItem(members) {
|
|
|
177
177
|
// Runs of 1 keep the plain per-call card (its argument summary stays visible).
|
|
178
178
|
// Agent cards never merge on restore: the live rule scopes Agent grouping to
|
|
179
179
|
// a single provider batch, a boundary the stored history no longer carries.
|
|
180
|
-
|
|
180
|
+
function mergeRestoredToolItems(items) {
|
|
181
181
|
const merged = [];
|
|
182
182
|
let run = null; // { bucket, members: [{ item, category }] }
|
|
183
183
|
const flushRun = () => {
|
|
@@ -515,6 +515,9 @@ export function createEngineApiB(bag) {
|
|
|
515
515
|
getUsageDashboard: async (options = {}) => {
|
|
516
516
|
return await runtime.getUsageDashboard?.(options);
|
|
517
517
|
},
|
|
518
|
+
getTurnReviewDiff: async () => {
|
|
519
|
+
return (await runtime.getTurnReviewDiff?.()) ?? { supported: false, files: [], patch: '' };
|
|
520
|
+
},
|
|
518
521
|
getOnboardingStatus: () => {
|
|
519
522
|
return runtime.getOnboardingStatus?.() || { completed: true, workflowRoutes: {} };
|
|
520
523
|
},
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
toolResultTerminalStatus,
|
|
14
14
|
} from '../../runtime/shared/tool-status.mjs';
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
const CANCELLED_RESULT_STATUS_LINE = '[status: cancelled]';
|
|
17
17
|
|
|
18
18
|
// Detect a shell command that RAN but exited non-zero (a process exit code)
|
|
19
19
|
// as opposed to a real tool-call failure (`[shell-tool-failed]`) or a
|
|
@@ -71,15 +71,15 @@ export function failureDetailText({ succeeded = 0, realErrors = 0, exitErrors =
|
|
|
71
71
|
return parts.join(' · ');
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
|
|
74
|
+
function normalizedResultStatusToken(value) {
|
|
75
75
|
return normalizeToolTerminalStatus(value);
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
function resultTextTerminalStatus(text) {
|
|
79
79
|
return toolResultTerminalStatus(text);
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
|
|
82
|
+
function itemHasKnownTerminalStatus(item, texts = []) {
|
|
83
83
|
const settled = (token) => token === 'completed' || token === 'failed' || token === 'cancelled';
|
|
84
84
|
if (settled(normalizedResultStatusToken(item?.args?.status))) return true;
|
|
85
85
|
for (const text of texts) {
|
|
@@ -129,7 +129,7 @@ export function groupedToolResultText(group) {
|
|
|
129
129
|
return '';
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
-
|
|
132
|
+
function firstErrorLine(text) {
|
|
133
133
|
const clean = toolErrorDisplay(text, 'tool');
|
|
134
134
|
if (clean) return clean;
|
|
135
135
|
for (const line of String(text || '').split('\n')) {
|
|
@@ -52,7 +52,7 @@ function compactToolResultObjectFallback(obj) {
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
function toolResultPartText(part, depth = 0) {
|
|
56
56
|
if (part == null) return '';
|
|
57
57
|
if (depth > TOOL_RESULT_PART_MAX_DEPTH) return '';
|
|
58
58
|
if (typeof part === 'string') return part;
|