mirror of
https://github.com/deepseek-ai/deepseek-harness
synced 2026-08-15 21:04:50 +00:00
`assistantActionsSeqs` picked the last content-text assistant of each turn from the finalized transcript alone. That quantity is stable only once the turn closes: while a turn is still producing steps, the narration written before a tool call is the last content assistant so far, so copy, branch, and the clock appeared under an intermediate sentence for as long as the tool ran and then moved down to the next step's text. Pass `ConversationSnapshot.turnEnds` into the derivation and grant the row only inside a turn that has a durable `turn/end`. This is the same completion fact the branch control and the `Ran for` label already read, so the three parts of one row now agree; mid-turn narration owns nothing, and the seat appears once under the settled answer. `hasContentText` moves to chat-flow.ts so the ownership gate and AssistantMarkdown's mount gate cannot drift apart. apps/web/tests/turn-tail-actions.e2e.ts pins both states through the assembled application: a hang sidecar on the second model call parks a turn whose first step narrated before calling bash, and the two goldens hold the parked flow and the flow after stopping.
248 lines
11 KiB
JSON
248 lines
11 KiB
JSON
{
|
|
// Host aggregate (one of the two check units; see tsconfig.json). packages/client
|
|
// type-checks in tsconfig.client.json: the two sides merge cordis Context under
|
|
// the same keys, one program cannot see both.
|
|
"extends": "./tsconfig.base.json",
|
|
"compilerOptions": {
|
|
"noEmit": true,
|
|
"rewriteRelativeImportExtensions": false
|
|
},
|
|
"include": [
|
|
"apps/web/tests/scaffold.ts",
|
|
"apps/web/tests/support.ts",
|
|
"apps/web/tests/scaffold-hermetic.e2e.ts",
|
|
"apps/web/tests/core-web-profile.snapshot.ts",
|
|
"apps/web/tests/live-interactions.e2e.ts",
|
|
"apps/web/tests/question-composer.e2e.ts",
|
|
"apps/web/tests/approval-composer.e2e.ts",
|
|
"apps/web/tests/plan-review.e2e.ts",
|
|
"apps/web/tests/steering.e2e.ts",
|
|
"apps/web/tests/navigation-panes.e2e.ts",
|
|
"apps/web/tests/chat-scroll-fixture.ts",
|
|
"apps/web/tests/trajectory-virtualization.e2e.ts",
|
|
"apps/web/tests/lifecycle-chrome.e2e.ts",
|
|
"apps/web/tests/details-session-lifecycle.e2e.ts",
|
|
"apps/web/tests/settings-chrome.e2e.ts",
|
|
"apps/web/tests/models-settings.e2e.ts",
|
|
"apps/web/tests/onboarding-deepseek-config.e2e.ts",
|
|
"apps/web/tests/remote-welcome.e2e.ts",
|
|
"apps/web/tests/workspace-management.e2e.ts",
|
|
"apps/web/tests/replay-round-trip.e2e.ts",
|
|
"apps/web/tests/hmr-live.e2e.ts",
|
|
"apps/web/tests/seeded-history.e2e.ts",
|
|
"apps/web/tests/sidebar-scrollbar.e2e.ts",
|
|
"apps/web/tests/code-mode-round.e2e.ts",
|
|
"apps/web/tests/composer-draft-scroll.e2e.ts",
|
|
"apps/web/tests/cordis-tool-round.e2e.ts",
|
|
"apps/web/tests/web-search-round.e2e.ts",
|
|
"apps/web/tests/message-actions.e2e.ts",
|
|
"apps/web/tests/markdown-images.e2e.ts",
|
|
"apps/web/tests/math-rendering.e2e.ts",
|
|
"apps/web/tests/markdown-cjk-strong.e2e.ts",
|
|
"apps/web/tests/markdown-inline-code-links.e2e.ts",
|
|
"apps/web/tests/queue-actions.e2e.ts",
|
|
"apps/web/tests/skill-invocation-policy.e2e.ts",
|
|
"apps/web/tests/permission-policy-context.e2e.ts",
|
|
"apps/web/tests/access-confirmation.e2e.ts",
|
|
"apps/web/tests/shipped-composition.e2e.ts",
|
|
"apps/web/tests/goal-bar.e2e.ts",
|
|
"apps/web/tests/startup-auto-selection.e2e.ts",
|
|
"apps/web/tests/subagent-conversation.e2e.ts",
|
|
"apps/web/tests/bash-abort-row.e2e.ts",
|
|
"apps/web/tests/turn-tail-actions.e2e.ts",
|
|
"apps/web/tests/chat-scroll-fixture.ts",
|
|
"apps/web/tests/chat-scroll-contract.e2e.ts",
|
|
"apps/web/tests/chat-long-interactions.e2e.ts",
|
|
"apps/web/tests/chat-continuous-conversation.e2e.ts",
|
|
"apps/web/tests/composer-tab-geometry.e2e.ts",
|
|
"apps/web/tests/complex-history.perf.ts",
|
|
"apps/web/tests/pwsh-terminal.e2e.ts",
|
|
"apps/web/stress-tests/reasoning-chunks.stress.ts",
|
|
"apps/cli/tests/**/*.ts",
|
|
"examples/*/src/**/*.ts",
|
|
"examples/*/start.ts",
|
|
"examples/*/tests/**/*.ts",
|
|
"packages/*/*/tests/**/*.ts",
|
|
"scripts/**/*.ts",
|
|
"website/**/*.ts",
|
|
"website/.vitepress/**/*.ts"
|
|
],
|
|
"exclude": [
|
|
"packages/client/**",
|
|
"packages/host/directory-picker-browse/**",
|
|
"packages/host/directory-picker-native/**",
|
|
"scripts/client-bundle-css.spec.ts",
|
|
"packages/typert/generator/tests/fixtures/**",
|
|
"scripts/client-bundle-purity.spec.ts"
|
|
],
|
|
"references": [
|
|
{ "path": "./vendor/cosmokit" },
|
|
{ "path": "./vendor/schemastery" },
|
|
{ "path": "./vendor/cordis" },
|
|
{ "path": "./vendor/loader" },
|
|
{ "path": "./vendor/include" },
|
|
{ "path": "./vendor/group" },
|
|
{ "path": "./vendor/timer" },
|
|
{ "path": "./vendor/hmr" },
|
|
{ "path": "./vendor/logger-console" },
|
|
{ "path": "./packages/util/brand" },
|
|
{ "path": "./packages/util/native-command" },
|
|
{ "path": "./packages/util/paths" },
|
|
{ "path": "./packages/util/timeout" },
|
|
{ "path": "./packages/util/retention" },
|
|
{ "path": "./packages/util/atomic-write" },
|
|
{ "path": "./packages/llm/llm" },
|
|
{ "path": "./packages/llm/token-meter" },
|
|
{ "path": "./packages/core/session" },
|
|
{ "path": "./packages/core/scope" },
|
|
{ "path": "./packages/typert/registry" },
|
|
{ "path": "./packages/typert/loader" },
|
|
{ "path": "./packages/session-persistence/session-persistence" },
|
|
{ "path": "./packages/session-persistence/session-checkpoint-policy" },
|
|
{ "path": "./packages/session-persistence/session-persistence-jsonl" },
|
|
{ "path": "./packages/session-persistence/session-persistence-sqlite" },
|
|
{ "path": "./packages/session-projection/session-projection" },
|
|
{ "path": "./packages/session-projection/session-projection-cache" },
|
|
{ "path": "./packages/session-query/session-query" },
|
|
{ "path": "./packages/session-query/session-query-sqlite" },
|
|
{ "path": "./packages/settings/settings" },
|
|
{ "path": "./packages/settings/settings-local" },
|
|
{ "path": "./packages/credentials/credentials" },
|
|
{ "path": "./packages/credentials/credentials-local" },
|
|
{ "path": "./packages/session-query/tool-session-query" },
|
|
{ "path": "./packages/storage/storage" },
|
|
{ "path": "./packages/storage/storage-json" },
|
|
{ "path": "./packages/storage/storage-sqlite" },
|
|
{ "path": "./packages/storage/storage-domain" },
|
|
{ "path": "./packages/workspace/workspace" },
|
|
{ "path": "./packages/session-title/session-title" },
|
|
{ "path": "./packages/session-title/session-title-llm" },
|
|
{ "path": "./packages/session-title/session-title-first-message-llm" },
|
|
{ "path": "./packages/session-title/session-title-all-messages-llm" },
|
|
{ "path": "./packages/telemetry/session-telemetry" },
|
|
{ "path": "./packages/telemetry/session-telemetry-otel" },
|
|
{ "path": "./packages/core/system-prompt" },
|
|
{ "path": "./packages/core/agent" },
|
|
{ "path": "./packages/ui/commands" },
|
|
{ "path": "./packages/goal/goal" },
|
|
{ "path": "./packages/goal/tool-goal" },
|
|
{ "path": "./packages/goal/goal-session" },
|
|
{ "path": "./packages/goal/command-goal" },
|
|
{ "path": "./packages/context/time-context" },
|
|
{ "path": "./packages/context/tmux-context" },
|
|
{ "path": "./packages/context/session-reference" },
|
|
{ "path": "./packages/ui/user-interaction" },
|
|
{ "path": "./packages/ui/user-approval" },
|
|
{ "path": "./packages/ui/permission" },
|
|
{ "path": "./packages/core/tools" },
|
|
{ "path": "./packages/skill/skill" },
|
|
{ "path": "./packages/skill/skill-local" },
|
|
{ "path": "./packages/skill/tool-skill" },
|
|
{ "path": "./packages/ui/tool-ask-user" },
|
|
{ "path": "./packages/context/workspace-context" },
|
|
{ "path": "./packages/core/agent-loop" },
|
|
{ "path": "./packages/llm/llm-retry" },
|
|
{ "path": "./packages/examples/agent-spine-demo" },
|
|
{ "path": "./packages/examples/cli-demo" },
|
|
{ "path": "./packages/subprocess/subprocess" },
|
|
{ "path": "./packages/subprocess/subprocess-local" },
|
|
{ "path": "./packages/bash/bash" },
|
|
{ "path": "./packages/pty/pty" },
|
|
{ "path": "./packages/pty/pty-local" },
|
|
{ "path": "./packages/pty/tool-bash-persistent" },
|
|
{ "path": "./packages/pty/tool-pty" },
|
|
{ "path": "./packages/code-runtime/code-runtime" },
|
|
{ "path": "./packages/code-runtime/code-runtime-worker" },
|
|
{ "path": "./packages/llm/llm-deepseek" },
|
|
{ "path": "./packages/llm/llm-pi-ai" },
|
|
{ "path": "./packages/bash/bash-local" },
|
|
{ "path": "./packages/bash/bash-env" },
|
|
{ "path": "./packages/bash/pwsh-local" },
|
|
{ "path": "./packages/bash/tool-pwsh" },
|
|
{ "path": "./packages/sandbox/sandbox" },
|
|
{ "path": "./packages/sandbox/sandbox-local" },
|
|
{ "path": "./packages/sandbox/sandbox-policy" },
|
|
{ "path": "./packages/bash/bash-sandbox" },
|
|
{ "path": "./packages/bash/tool-bash" },
|
|
{ "path": "./packages/fs/fs" },
|
|
{ "path": "./packages/fs/fs-local" },
|
|
{ "path": "./packages/fs/fs-policy" },
|
|
{ "path": "./packages/fs/fs-sandbox" },
|
|
{ "path": "./packages/fs/tool-fs" },
|
|
{ "path": "./packages/fs/tool-fs-search" },
|
|
{ "path": "./packages/fs/tool-str-replace-editor" },
|
|
{ "path": "./packages/compact/compact" },
|
|
{ "path": "./packages/compact/compact-basic" },
|
|
{ "path": "./packages/compact/command-compact" },
|
|
{ "path": "./packages/compact/compact-tool-result-prune" },
|
|
{ "path": "./packages/web/web" },
|
|
{ "path": "./packages/web/web-search-exa" },
|
|
{ "path": "./packages/web/web-search-perplexity" },
|
|
{ "path": "./packages/web/web-search-deepseek" },
|
|
{ "path": "./packages/web/web-fetch-local" },
|
|
{ "path": "./packages/web/tool-web" },
|
|
{ "path": "./packages/spill/spill" },
|
|
{ "path": "./packages/spill/spill-local" },
|
|
{ "path": "./packages/spill/spill-policy" },
|
|
{ "path": "./packages/timeout/timeout-policy" },
|
|
{ "path": "./packages/support/invariants" },
|
|
{ "path": "./packages/support/agent-loop-testkit" },
|
|
{ "path": "./packages/acp/acp" },
|
|
{ "path": "./packages/examples/acp-demo" },
|
|
{ "path": "./packages/ui/app-boot" },
|
|
{ "path": "./packages/ui/jsonrpc" },
|
|
{ "path": "./packages/examples/jsonrpc-demo" },
|
|
{ "path": "./packages/support/llm-replay" },
|
|
{ "path": "./packages/typert/generator" },
|
|
{ "path": "./packages/support/acp-snapshot" },
|
|
{ "path": "./packages/support/loader-smoke" },
|
|
{ "path": "./packages/support/llm-mock-server" },
|
|
{ "path": "./packages/subagent/subagent" },
|
|
{ "path": "./packages/subagent/tool-subagent" },
|
|
{ "path": "./packages/subagent/tool-subagent-control" },
|
|
{ "path": "./packages/subagent/tool-subagent-report" },
|
|
{ "path": "./packages/subagent/subagent-inprocess" },
|
|
{ "path": "./packages/subagent/subagent-spawn" },
|
|
{ "path": "./packages/subagent/subagent-fork" },
|
|
{ "path": "./packages/subagent/subagent-acp" },
|
|
{ "path": "./packages/subagent/subagent-dsh-sdk" },
|
|
{ "path": "./packages/tasks/tasks" },
|
|
{ "path": "./packages/tasks/tasks-local" },
|
|
{ "path": "./packages/tasks/tool-tasks" },
|
|
{ "path": "./packages/workflow/workflow" },
|
|
{ "path": "./packages/workflow/workflow-workerthread" },
|
|
{ "path": "./packages/workflow/tool-workflow" },
|
|
{ "path": "./packages/workflow/tool-ralph" },
|
|
{ "path": "./packages/todo/tool-todo" },
|
|
{ "path": "./packages/plan/plan-mode" },
|
|
{ "path": "./packages/guard/repeat-tool-guard" },
|
|
{ "path": "./packages/cordis/tool-cordis" },
|
|
{ "path": "./packages/cordis/repository-plugin" },
|
|
{ "path": "./packages/hooks/hook-protocol" },
|
|
{ "path": "./packages/hooks/hooks-claude" },
|
|
{ "path": "./packages/hooks/hooks-codex" },
|
|
{ "path": "./packages/mcp/mcp-client" },
|
|
{ "path": "./packages/host/apiproxy" },
|
|
{ "path": "./packages/host/directory-picker" },
|
|
{ "path": "./packages/host/directory-picker-auto" },
|
|
// Dual-face backend leaves stay client-registered (their tests and client
|
|
// halves are excluded above); these references only let the adaptive
|
|
// chooser's composition test import each backend's NODE entry, whose
|
|
// declarations carry no client-side Context merge — the mirror of the
|
|
// client aggregate's webserver reference.
|
|
{ "path": "./packages/host/directory-picker-browse" },
|
|
{ "path": "./packages/host/directory-picker-native" },
|
|
{ "path": "./packages/host/webserver" },
|
|
{ "path": "./packages/sdk/sdk-client" },
|
|
{ "path": "./packages/sdk/helper" },
|
|
{ "path": "./packages/sdk/sdk-protocol" },
|
|
{ "path": "./packages/sdk/scripts" },
|
|
{ "path": "./packages/sdk/create-sdk" },
|
|
{ "path": "./packages/sdk/telemetry" },
|
|
{ "path": "./packages/lsp/lsp" },
|
|
{ "path": "./packages/lsp/lsp-local" },
|
|
{ "path": "./packages/lsp/tool-lsp" },
|
|
{ "path": "./apps/cli" }
|
|
]
|
|
}
|