Files
deepseek-harness/tsconfig.client.json
T
5ff29190ed feat(ui): add navigation entry customization (#6247)
* fix(ui): avoid tooltip trigger overlap when a side fits

* feat(ui): add navigation entry customization

* fix(test): keep tooltip geometry independent of JSX types

* fix(ui): align customization catalogs and integration fixtures

* test(ui): complete customization lifecycle and release integration coverage

* fix(ui): return entry discovery to the installed plugin list

* docs: refresh module graph for entry customization

* build: refresh workspace links for the moved entry customization package

* docs: regenerate catalogs and pairing hashes for the moved entry customization package

* test(web): cover default-loaded entry customization in the Web e2e

* test(ui): describe entry customization as a browser plugin in the host entry spec

* build: order entry customization publication files as workspace constraints require

* test(release): drop the moved entry customization package from the experimental family list

* style(ui): use the shared focus ring color on entry customization triggers

* test(web): re-record goldens for the default-loaded More navigation menus

* test(web): add the More conversation views trigger to the remaining CI-reported goldens

* docs: record region-owned pins for plugin entry customization

* refactor(ui): rebuild entry customization on region-owned pins and More menus

- Each navigation region (left sidebar, Conversation header, right sidebar
  guide) persists its own unpinned list under
  dsh.slot.manual-order.<list slot key>.v1, filters its own launchers, and
  draws its own More button and Menu around its actions slot.
- ui-entry-customization only registers the shared menu rows (entries with
  pin buttons, Browse other plugins, Create your plugin) into the three
  actions slots and keeps no state.
- Remove ctx.layout.entryVisibility, the plugin store, left-sidebar drag
  reordering, and agentPresetNavigation; ui-layout and ui-agent-preset match
  release/dsh-0.2.1 again.
- Keep the release <nav> and Conversation tab-bar visibility conditions.
- Move the More glyph into ui-primitives as IconAppsAddOutline{Regular,Medium}.

* docs: compile the entry customization owner props example

* docs(ui): describe the wrapping Conversation tab row in the header comment

* fix(ui): return New Session to the Workspace blank and its unsent draft

- New Session (startSession without options) takes the blank-reuse path
  again instead of creating a fresh Session on every call, which hid the
  previous blank and its unsent draft since a5c9c2aaeef (#5775).
- A request that names an Agent preset skips blanks listing a different
  preset, so Creator entries no longer take over an ordinary draft.
- Record the change in a v0.2.1-rc.2 upgrade guide; the Host refresh of a
  stale loaded blank stays deferred (see the Agent Note).

* docs: regenerate the Cordis inspect catalog for New Session blank reuse

* fix(ui): keep the selected entry visible while unpinned

- Left-sidebar rows and View tabs keep the selected entry, with aria-current or aria-selected, until another entry is selected.
- Entry menu Creator action takes no region argument; the registration's region selects the prompt.
- Document the 2px panel-row and 32px View-tab gaps; drop commit hashes from the New Session Agent Note.

* fix(ui): leave a blank of another preset unstaged when starting Creator

startCreatorDraft stages cordis only when the main blank lists no preset or already lists cordis; navigation opens a separate Creator blank otherwise, so a Standard draft blank keeps its preset.

* feat(ui): choose whether a draft prompt replaces, appends to, or keeps an existing draft

- DraftInitializationOptions gains whenDraftExists ('replace' | 'append' | 'keep', default 'keep'); clearPreviousDraft stays and maps to 'replace' only when whenDraftExists is omitted.
- Append adds the prompt as new paragraphs after the existing text and references; attachments stay in every mode.
- The three Create your plugin entries append their regional prompt.

* test(web): align e2e with New Session blank reuse and the visible selected entry

* refactor(ui): share the draft paragraph writer between setDraft and appendDraft

---------

Co-authored-by: Yif <877193178@qq.com>
Co-authored-by: imccyu <276526105+imccyu@users.noreply.github.com>
2026-10-20 15:17:13 +08:00

159 lines
8.3 KiB
JSON

{
// Client-side typecheck aggregate: packages/client tests and top-level Client benchmarks.
// Split from the host aggregate because both sides merge cordis Context
// under the same keys (sessions, loader) with different services; shared
// leaves (session/llm/tools/...) build once and are referenced by
// both programs through each client package's own references.
"extends": "./tsconfig.base.client.json",
"compilerOptions": {
"noEmit": true,
"rewriteRelativeImportExtensions": false,
// Tests execute under vitest on node (e2e files spawn processes); browser
// purity of package src is each package's own tsconfig plus
// scripts/client-bundle-purity.spec.ts.
"types": ["node"]
},
"include": [
// The native/renderer keyboard fixture imports only these Cordis-free Desktop modules.
"apps/desktop/tests/keyboard.spec.ts",
"apps/desktop/src/keyboard.ts",
"apps/desktop/src/keybindings.ts",
"apps/desktop/src/browser-guests.ts",
"apps/desktop/src/ipc.ts",
"apps/desktop/src/update-overlay.ts",
"apps/desktop/tests/**/*.client.spec.tsx",
// Source-subpath test imports can arrive through workspace links whose
// realpath semantics vary by host. Load package CSS declarations directly.
"packages/client/*/src/css-modules.d.ts",
"packages/client/*/tests/**/*.ts",
"packages/client/*/tests/**/*.tsx",
"benchmarks/**/*.client.ts",
"benchmarks/**/*.client.tsx",
"benchmarks/support/**/*.ts",
"packages/*/*/tests/**/*.client.spec.ts",
"packages/*/*/tests/**/*.client.spec.tsx",
"packages/*/*/tests/**/*.client.tsx",
"packages/*/*/tests/**/*.client.ts",
// Client package outside packages/client with a local CSS module face.
"packages/extensions/ui-cordis/src/css-modules.d.ts",
"packages/client/tsdown.client.ts",
"scripts/client-build-environment.ts",
"scripts/bundle-input-isolation.ts",
"scripts/experimental-package-policy.ts",
"scripts/*.client.spec.ts",
"scripts/client-bundle-css.spec.ts",
"scripts/client-bundle-purity.spec.ts"
],
// Host unit tests (`*.host.spec.ts`), e2e tests (`*.host.e2e.ts`), and fixtures
// (`*.host.ts`) belong to the host aggregate, which excludes `*.client.*`
// in turn. `exclude` wins over `include`, so the test glob above stays broad.
"exclude": [
"packages/client/*/tests/**/*.host.spec.ts",
"packages/client/*/tests/**/*.host.e2e.ts",
"packages/client/*/tests/**/*.host.ts"
],
"references": [
{ "path": "./packages/experimental/client-ui-cot-translation/tsconfig.client.json" },
{ "path": "./packages/client/product-analytics/tsconfig.client.json" },
{ "path": "./apps/desktop/tsconfig.client.json" },
{ "path": "./packages/util/atomic-write" },
{ "path": "./packages/experimental/client-ui-voice-input" },
{ "path": "./packages/experimental/client-ui-claude-code-mods" },
{ "path": "./packages/client/ui-sidebar-terminal" },
{ "path": "./packages/api/terminal-controller/tsconfig.client.json" },
// Producer-to-UI spill tests use the ptc-runtime contract with the real tool registry.
{ "path": "./packages/ptc-runtime/ptc-runtime" },
{ "path": "./packages/client/ui-settings-account" },
// Shared leaf: web e2e boots the real host webserver (fixture + real-host
// smoke policy). webserver has zero workspace deps and no cordis merge,
// so it cannot drag host-side Context augmentation into this program.
{ "path": "./packages/host/webserver" },
// Compaction seam: ui-chat type-imports the canonical checkpoint contract
// from the cordis-free dsh-compaction/checkpoint leaf. Composite rootDir
// rules make that path depend on this project reference.
{ "path": "./packages/compaction/compaction" },
{ "path": "./packages/client/store" },
{ "path": "./packages/client/ui-slots" },
{ "path": "./packages/client/ui-attachment" },
{ "path": "./packages/client/ui-primitives" },
{ "path": "./packages/client/modules" },
{ "path": "./packages/experimental/inspector/tsconfig.client.json" },
{ "path": "./packages/experimental/session-inspector" },
{ "path": "./packages/client/hmr" },
{ "path": "./packages/client/connection/tsconfig.client.json" },
{ "path": "./packages/client/file-upload/tsconfig.client.json" },
{ "path": "./packages/typert/registry" },
{ "path": "./packages/api/gateway/tsconfig.client.json" },
{ "path": "./packages/api/session-controller/tsconfig.client.json" },
{ "path": "./packages/api/remote-access/tsconfig.client.json" },
{ "path": "./packages/api/workspace-controller/tsconfig.client.json" },
{ "path": "./packages/api/remotes/tsconfig.client.json" },
{ "path": "./packages/extensions/cordis-client-runner" },
{ "path": "./packages/extensions/ui-cordis" },
{ "path": "./packages/test-support/client-runtime" },
{ "path": "./packages/test-support/remote-mock" },
{ "path": "./packages/client/shortcuts/tsconfig.client.json" },
{ "path": "./packages/client/ui-shortcuts" },
{ "path": "./packages/client/ui-layout" },
{ "path": "./packages/client/ui-sidebar" },
{ "path": "./packages/client/ui-brand-official" },
{ "path": "./packages/client/ui-approval" },
{ "path": "./packages/client/ui-chat/tsconfig.client.json" },
{ "path": "./packages/client/ui-conversation/tsconfig.client.json" },
{ "path": "./packages/client/ui-tool" },
{ "path": "./packages/client/ui-deliverables/tsconfig.client.json" },
{ "path": "./packages/client/ui-workflow-run" },
{ "path": "./packages/client/ui-workspace" },
{ "path": "./packages/client/ui-input-trigger" },
{ "path": "./packages/client/ui-commands" },
{ "path": "./packages/client/ui-skill" },
{ "path": "./packages/client/ui-reference" },
{ "path": "./packages/client/ui-secret-mask" },
{ "path": "./packages/client/ui-subagent" },
{ "path": "./packages/experimental/client-ui-agent-team" },
{ "path": "./packages/client/ui-dockkit" },
{ "path": "./packages/client/ui-sidebar-right" },
{ "path": "./packages/client/ui-entry-customization" },
{ "path": "./packages/client/ui-sidebar-documentpreview/tsconfig.client.json" },
{ "path": "./packages/client/ui-sidebar-browser/tsconfig.client.json" },
{ "path": "./packages/client/ui-sidebar-files" },
{ "path": "./packages/client/ui-jobs" },
{ "path": "./packages/client/ui-schedule" },
{ "path": "./packages/client/ui-directory-picker-browse" },
{ "path": "./packages/client/ui-directory-picker-native" },
{ "path": "./packages/client/ui-goal" },
{ "path": "./packages/client/ui-message-feedback" },
{ "path": "./packages/client/ui-model-selection" },
{ "path": "./packages/client/ui-deepseek-model-label-1017" },
{ "path": "./packages/client/ui-agent-preset" },
{ "path": "./packages/client/ui-permission-presets" },
{ "path": "./packages/client/ui-plan" },
{ "path": "./packages/client/ui-settings-plugins" },
{ "path": "./packages/client/ui-settings-shell" },
{ "path": "./packages/client/ui-settings-agent-loop" },
{ "path": "./packages/client/ui-settings-session-log" },
{ "path": "./packages/client/ui-settings-subagent" },
{ "path": "./packages/client/ui-settings-web-search" },
{ "path": "./packages/client/ui-user-questions" },
{ "path": "./packages/client/ui-trajectory" },
{ "path": "./packages/session-query/session-log-export/tsconfig.client.json" },
{ "path": "./packages/client/ui-open-in-app" },
{ "path": "./packages/client/ui-theme/tsconfig.client.json" },
{ "path": "./packages/client/ui-settings/tsconfig.client.json" },
{ "path": "./packages/client/ui-settings-general/tsconfig.client.json" },
{ "path": "./packages/client/ui-settings-models" },
{ "path": "./packages/client/ui-plugin-manager/tsconfig.client.json" },
{ "path": "./packages/client/ui-plugin-market" },
{ "path": "./packages/client/ui-settings-plugin-inventory" },
{ "path": "./packages/client/locale/tsconfig.client.json" },
{ "path": "./packages/client/ui-renderer" },
{ "path": "./packages/client/ui-session" },
{ "path": "./packages/client/resources" },
{ "path": "./packages/api/workspace-files/tsconfig.client.json" },
{ "path": "./packages/client/web" },
{ "path": "./packages/context/file-reference" },
{ "path": "./apps/web" }
]
}