dsh-openwrite 0.2.28 → 0.2.33

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.
Files changed (125) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +49 -8
  3. package/THIRD_PARTY_NOTICES.md +4 -3
  4. package/companions.mjs +508 -0
  5. package/cordis.patch.yml +0 -2
  6. package/docs/CLOSED_ISSUE_FOLLOWUPS.md +1 -1
  7. package/docs/COMPANION_PLUGINS.md +142 -0
  8. package/docs/CONTEXT_SLOTS.md +1 -1
  9. package/docs/COST_MEASUREMENT.md +2 -2
  10. package/docs/DEVELOPMENT.md +6 -11
  11. package/docs/DSH_STORE.md +14 -2
  12. package/docs/EDITOR_SAFETY_REPAIRS.md +2 -2
  13. package/docs/INSTALL.md +112 -4
  14. package/docs/ISSUES_121_123.md +4 -4
  15. package/docs/ISSUES_140_142.md +58 -0
  16. package/docs/ISSUES_149_150_151.md +77 -0
  17. package/docs/ISSUE_123_FOLLOWUP.md +3 -2
  18. package/docs/ISSUE_146_REVIEW_EVIDENCE.md +53 -0
  19. package/docs/LEARNING.md +1 -1
  20. package/docs/MOBILE_READINESS.md +62 -0
  21. package/docs/PLUGIN_MAINTENANCE.md +1 -3
  22. package/docs/RELEASE_ACCEPTANCE.md +20 -3
  23. package/docs/REVIEW_ROUND_22.md +67 -0
  24. package/docs/REVIEW_ROUND_23.md +48 -0
  25. package/docs/REVIEW_ROUND_25.md +51 -0
  26. package/docs/SELECTION_UPGRADE_REPAIRS.md +2 -2
  27. package/docs/TOOLS.md +181 -604
  28. package/docs/WORKFLOWS.md +5 -5
  29. package/package.json +17 -21
  30. package/packages/openwrite-bridge/lib/client.d.ts +0 -1
  31. package/packages/openwrite-bridge/lib/client.js +90 -9
  32. package/packages/openwrite-bridge/lib/contracts-generated.js +2 -1
  33. package/packages/openwrite-bridge/lib/dog-delivery.d.ts +1 -0
  34. package/packages/openwrite-bridge/lib/dog-delivery.js +3 -1
  35. package/packages/openwrite-bridge/lib/dog-review.js +15 -3
  36. package/packages/openwrite-bridge/lib/domain.d.ts +27 -0
  37. package/packages/openwrite-bridge/lib/domain.js +250 -29
  38. package/packages/openwrite-bridge/lib/host-llm.d.ts +188 -0
  39. package/packages/openwrite-bridge/lib/host-llm.js +657 -0
  40. package/packages/openwrite-bridge/lib/host-web.d.ts +61 -0
  41. package/packages/openwrite-bridge/lib/host-web.js +166 -0
  42. package/packages/openwrite-bridge/lib/index.d.ts +4 -0
  43. package/packages/openwrite-bridge/lib/index.js +150 -6
  44. package/packages/openwrite-bridge/lib/managed-runtime.d.ts +47 -2
  45. package/packages/openwrite-bridge/lib/managed-runtime.js +176 -34
  46. package/packages/openwrite-bridge/lib/tool-policy.js +37 -12
  47. package/packages/openwrite-bridge/lib/tools.js +1223 -1227
  48. package/packages/openwrite-bridge/package.json +7 -5
  49. package/packages/studio-panel/lib/client.js +123207 -121534
  50. package/packages/studio-panel/lib/client.js.map +1 -1
  51. package/packages/studio-panel/lib/types/client/LaunchOpenWrite.d.ts +10 -0
  52. package/packages/studio-panel/lib/types/client/ModelView.d.ts +28 -4
  53. package/packages/studio-panel/lib/types/client/OpenWriteSettings.d.ts +64 -0
  54. package/packages/studio-panel/lib/types/client/SceneWorkbench.d.ts +2 -0
  55. package/packages/studio-panel/lib/types/client/SearchSettings.d.ts +2 -0
  56. package/packages/studio-panel/lib/types/client/SerialWritingView.d.ts +2 -1
  57. package/packages/studio-panel/lib/types/client/TurnMutationSummary.d.ts +2 -0
  58. package/packages/studio-panel/lib/types/client/VditorBody.d.ts +1 -1
  59. package/packages/studio-panel/lib/types/client/api.d.ts +41 -2
  60. package/packages/studio-panel/lib/types/client/browser-download.d.ts +4 -0
  61. package/packages/studio-panel/lib/types/client/companions.d.ts +46 -0
  62. package/packages/studio-panel/lib/types/client/dto.d.ts +22 -0
  63. package/packages/studio-panel/lib/types/client/locales.d.ts +1 -1
  64. package/packages/studio-panel/lib/types/client/workspace-chrome.d.ts +41 -0
  65. package/packages/studio-panel/package.json +5 -3
  66. package/plugin.mjs +159 -20
  67. package/preset-definition.mjs +144 -4
  68. package/presets/openwrite/agent.cordis.yml +7 -9
  69. package/presets/openwrite/ops-integration.mjs +28 -0
  70. package/presets/openwrite/preset.yml +2 -1
  71. package/presets/openwrite/skills/canon/SKILL.md +3 -3
  72. package/presets/openwrite/skills/delivery-artifact-query/SKILL.md +41 -0
  73. package/presets/openwrite/skills/dialoguequality/SKILL.md +16 -17
  74. package/presets/openwrite/skills/dog-delivery-verification/SKILL.md +113 -0
  75. package/presets/openwrite/skills/export-book/SKILL.md +3 -3
  76. package/presets/openwrite/skills/foreshadow/SKILL.md +1 -1
  77. package/presets/openwrite/skills/foreshadowing-system/SKILL.md +16 -25
  78. package/presets/openwrite/skills/import-artifact-query/SKILL.md +30 -0
  79. package/presets/openwrite/skills/learn/SKILL.md +3 -3
  80. package/presets/openwrite/skills/novel-creator/SKILL.md +10 -10
  81. package/presets/openwrite/skills/novel-reviewer/SKILL.md +11 -11
  82. package/presets/openwrite/skills/progress/SKILL.md +1 -1
  83. package/presets/openwrite/skills/review-artifact-query/SKILL.md +41 -0
  84. package/presets/openwrite/skills/review-chapter/SKILL.md +2 -2
  85. package/presets/openwrite/skills/revise-span/SKILL.md +5 -5
  86. package/presets/openwrite/skills/style-system/SKILL.md +13 -6
  87. package/presets/openwrite/skills/truth-validation/SKILL.md +9 -12
  88. package/presets/openwrite/skills/workflow-manager/SKILL.md +13 -13
  89. package/presets/openwrite/skills/world-query/SKILL.md +16 -11
  90. package/presets/openwrite/skills/write-next/SKILL.md +1 -1
  91. package/release/{openwrite-5.8.20-py3-none-any.whl → openwrite-5.8.30-py3-none-any.whl} +0 -0
  92. package/release/runtime-manifest.json +4 -13
  93. package/release/source.json +21 -21
  94. package/release/wheels/licenses/OPENSSL-3.6.3-LICENSE.txt +225 -0
  95. package/scripts/maintenance.mjs +67 -7
  96. package/scripts/plugin-doctor.mjs +179 -0
  97. package/scripts/prepare.mjs +11 -2
  98. package/scripts/safe-upgrade.mjs +38 -5
  99. package/dog-tools.mjs +0 -13
  100. package/presets/openwrite/skills/dog-delivery-query/SKILL.md +0 -42
  101. package/presets/openwrite/skills/dog-import-query/SKILL.md +0 -29
  102. package/presets/openwrite/skills/dog-review-query/SKILL.md +0 -42
  103. package/scripts/dog/delivery-stage.js +0 -32
  104. package/scripts/dog/import-chapter.js +0 -20
  105. package/scripts/dog/import-record.js +0 -35
  106. package/scripts/dog/review-dimension.js +0 -41
  107. package/scripts/dog/review-record.js +0 -42
  108. package/vendor/dsh-dog/LICENSE +0 -29
  109. package/vendor/dsh-dog/README.md +0 -114
  110. package/vendor/dsh-dog/UPSTREAM.md +0 -30
  111. package/vendor/dsh-dog/cordis.patch.yml +0 -14
  112. package/vendor/dsh-dog/lib/client.js +0 -2960
  113. package/vendor/dsh-dog/lib/client.js.map +0 -1
  114. package/vendor/dsh-dog/lib/core--byUPJL8.js +0 -2191
  115. package/vendor/dsh-dog/lib/core-BiEBMLz3.d.ts +0 -495
  116. package/vendor/dsh-dog/lib/core.d.ts +0 -2
  117. package/vendor/dsh-dog/lib/core.js +0 -2
  118. package/vendor/dsh-dog/lib/index.d.ts +0 -143
  119. package/vendor/dsh-dog/lib/index.js +0 -1230
  120. package/vendor/dsh-dog/package.json +0 -110
  121. package/vendor/dsh-dog/schemas/schema-0.2/graph.schema.json +0 -139
  122. package/vendor/dsh-dog/schemas/schema-0.2/report.schema.json +0 -87
  123. package/vendor/dsh-dog/schemas/schema-0.2/run.schema.json +0 -259
  124. package/vendor/dsh-dog/schemas/schema-0.2/runtime-event.schema.json +0 -105
  125. package/vendor/dsh-dog/schemas/schema-0.2/verification.schema.json +0 -40
@@ -6,6 +6,16 @@ interface Status {
6
6
  totalBytes?: number;
7
7
  }
8
8
  export declare function runtimeAction(action: string): Promise<Status>;
9
+ /**
10
+ * The sidebar entry: pick a work and start writing.
11
+ *
12
+ * This dialog is the way *into* a novel, so it stays a launcher: one status
13
+ * line for the writing environment, the directory field, and the way in.
14
+ * Everything that is a setting rather than an action — the environment's
15
+ * diagnostics, the model profile library, the companion plugins — lives in the
16
+ * host's settings dialog under 「设置 → OpenWrite」, the way
17
+ * `dsh-our-free-model` keeps its own configuration.
18
+ */
9
19
  export declare function LaunchOpenWrite({ wide, openWorkspace }: {
10
20
  wide: boolean;
11
21
  openWorkspace: (path?: string) => Promise<boolean>;
@@ -1,9 +1,33 @@
1
- import type { ConvViewProps } from "@deepseek-ai/dsh-client-ui-conversation/client";
2
- import type { InjectFace, PropsLocale } from "@deepseek-ai/dsh-client-ui-slots";
1
+ import type { PropsLocale } from "@deepseek-ai/dsh-client-ui-slots";
3
2
  import { type StudioApiInjected } from "./api.ts";
4
3
  export type ModelNavigationGuard = (navigate: () => void) => void;
5
- type Props = ConvViewProps & InjectFace<StudioApiInjected> & PropsLocale<"studio-panel"> & {
4
+ /**
5
+ * The model profile library is global: Studio keeps it outside every project
6
+ * and registers every model route with `requires_project=False`.
7
+ *
8
+ * Two hosts render this panel:
9
+ *
10
+ * - the workbench, which injects the project-scoped API;
11
+ * - the host's settings dialog, which is opened with no bound workspace and
12
+ * therefore reaches the same library through the context-free global API.
13
+ *
14
+ * When nothing is injected the panel falls back to the global calls — the
15
+ * library it edits is the same file either way.
16
+ */
17
+ export type ModelViewProps = {
18
+ fetchStudioApi?: StudioApiInjected["fetchStudioApi"];
19
+ postStudioApi?: StudioApiInjected["postStudioApi"];
20
+ } & PropsLocale<"studio-panel"> & {
6
21
  onNavigationGuardChange?: (guard: ModelNavigationGuard | null) => void;
7
22
  };
8
- export declare function ModelView({ fetchStudioApi, postStudioApi, t, onNavigationGuardChange }: Props): import("react").JSX.Element;
23
+ type Props = ModelViewProps;
24
+ /**
25
+ * Forget every cached model draft and pending save.
26
+ *
27
+ * The model library is global, so its draft slot is global too — which means
28
+ * a draft can outlive the panel that wrote it. The test layer calls this
29
+ * between cases so one case's draft never reaches the next.
30
+ */
31
+ export declare function resetModelViewMemory(): void;
32
+ export declare function ModelView({ fetchStudioApi: injectedFetch, postStudioApi: injectedPost, t, onNavigationGuardChange }: Props): import("react").JSX.Element;
9
33
  export {};
@@ -0,0 +1,64 @@
1
+ /**
2
+ * OpenWrite's page in the host's settings dialog.
3
+ *
4
+ * The host dialog is the one surface the author opens without a novel in
5
+ * front of them, so this page owns every setting that is not tied to one
6
+ * work: the writing environment, the model profile library (global by
7
+ * design), the host's current model, and the companion plugins.
8
+ *
9
+ * The groups are tabs, the way `dsh-our-free-model` groups its own page: one
10
+ * section, several groups, and the chosen group survives a dialog reopen.
11
+ *
12
+ * Every fact here comes from a host route that does not need a bound
13
+ * workspace. The model library is global too — Studio keeps it outside every
14
+ * project — so it is reached through the context-free global API.
15
+ */
16
+ import type { PropsLocale } from '@deepseek-ai/dsh-client-ui-slots';
17
+ import { type HostModelCatalogDto } from './dto.ts';
18
+ /** The host's default-model selection, as the host's own route reports it. */
19
+ export interface HostModelSelection {
20
+ available: boolean;
21
+ provider: string;
22
+ model: string;
23
+ reasoningEffort: string;
24
+ }
25
+ /** The writing environment's lifecycle, as the host's runtime route reports it. */
26
+ export interface RuntimeStatus {
27
+ phase: string;
28
+ message: string;
29
+ error?: string;
30
+ downloadedBytes?: number;
31
+ totalBytes?: number;
32
+ }
33
+ /** The Studio backend the bridge talks to. */
34
+ export interface StudioBackend {
35
+ studioUrl: string;
36
+ managed: boolean;
37
+ available?: boolean;
38
+ }
39
+ /** The groups of this page, in the order they are shown. */
40
+ export type OpenWriteSettingsTab = 'environment' | 'models' | 'search' | 'host';
41
+ /** The host's default model selection. Null when the route is unreachable. */
42
+ export declare function fetchHostModel(signal?: AbortSignal): Promise<HostModelSelection | null>;
43
+ /**
44
+ * The host's own model directory.
45
+ *
46
+ * The host owns the adapters — its own providers and the ones other plugins
47
+ * register into the same registry — so this is what dsh itself can call. The
48
+ * list is read through the backend's machine channel; the browser never sees
49
+ * the relay's token.
50
+ */
51
+ export declare function fetchHostModelCatalog(signal?: AbortSignal): Promise<HostModelCatalogDto | null>;
52
+ /** The writing environment's status. Null when the route is unreachable. */
53
+ export declare function fetchRuntimeStatus(signal?: AbortSignal): Promise<RuntimeStatus | null>;
54
+ /** The Studio backend address. Null when the route is unreachable. */
55
+ export declare function fetchStudioBackend(signal?: AbortSignal): Promise<StudioBackend | null>;
56
+ /**
57
+ * Ask the host to act on the writing environment.
58
+ *
59
+ * `prepare` and `retry` reach the same server-side action; the caller picks
60
+ * the word that matches the phase it is looking at. `cancel` stops a run that
61
+ * is already under way.
62
+ */
63
+ export declare function postRuntimeAction(action: 'prepare' | 'retry' | 'cancel'): Promise<RuntimeStatus | null>;
64
+ export declare function OpenWriteSettings({ t }: PropsLocale<'studio-panel'>): JSX.Element;
@@ -6,6 +6,8 @@ interface SceneIssue {
6
6
  code: string;
7
7
  sceneId: string;
8
8
  chapterId: string;
9
+ /** Core's severity; `info` means "not produced yet", not "broken". */
10
+ severity: string;
9
11
  }
10
12
  interface SceneRecord {
11
13
  id: string;
@@ -0,0 +1,2 @@
1
+ import type { PropsLocale } from '@deepseek-ai/dsh-client-ui-slots';
2
+ export declare function SearchSettings({ t }: PropsLocale<'studio-panel'>): JSX.Element;
@@ -1,6 +1,7 @@
1
1
  import type { ModelNavigationGuard } from './ModelView.tsx';
2
2
  import type { OperationsViewProps } from './OperationsView.tsx';
3
3
  /** Deterministic chapter diagnostics and author-owned serial-writing assets. */
4
- export declare function SerialWritingView({ fetchStudioApi, postStudioApi, t, onNavigationGuardChange }: Pick<OperationsViewProps, 'fetchStudioApi' | 'postStudioApi' | 't'> & {
4
+ export declare function SerialWritingView({ fetchStudioApi, postStudioApi, t, onNavigationGuardChange, refreshEpoch }: Pick<OperationsViewProps, 'fetchStudioApi' | 'postStudioApi' | 't'> & {
5
5
  onNavigationGuardChange?: (guard: ModelNavigationGuard | null) => void;
6
+ refreshEpoch?: number;
6
7
  }): import("react").JSX.Element;
@@ -4,6 +4,8 @@ import type { StudioApiInjected } from './api.ts';
4
4
  export interface NovelMutationItem {
5
5
  callId: string;
6
6
  tool: string;
7
+ /** For a merged tool: which operation the call asked for. */
8
+ planKind?: string;
7
9
  label: string;
8
10
  path: string;
9
11
  status: 'succeeded' | 'partial' | 'failed' | 'refresh_failed' | 'proposed' | 'rejected';
@@ -43,7 +43,7 @@ interface VditorBodyProps {
43
43
  onInputStateChange?: (pending: boolean) => void;
44
44
  onSelectionChange?: (selection: ManuscriptSelection | null) => void;
45
45
  onReady?: () => void;
46
- onFailed: () => void;
46
+ onFailed: (cause?: unknown) => void;
47
47
  disabled: boolean;
48
48
  /** The consumer can synchronously retain callbacks delivered during cleanup. */
49
49
  flushOnLeave?: boolean;
@@ -7,8 +7,13 @@
7
7
  * Workspace context (docs/WORKSPACE_CONTEXT_CONTRACT.md §2.2): the browser
8
8
  * only ever sends the dsh workspace id (plus an optional session id for
9
9
  * audit) — never a path. Every proxied request carries the context headers;
10
- * with no context bound the panel must not issue proxied requests at all, so
11
- * all three request helpers fail closed with WORKSPACE_CONTEXT_MISSING.
10
+ * with no context bound the panel must not issue *project-scoped* proxied
11
+ * requests at all, so the project-scoped request helpers fail closed with
12
+ * WORKSPACE_CONTEXT_MISSING.
13
+ *
14
+ * The global model library is the one exception: Studio keeps it outside
15
+ * every project, so `fetchGlobalStudioApi` / `postGlobalStudioApi` reach it
16
+ * without any workspace identity (see GLOBAL_STUDIO_PATHS).
12
17
  */
13
18
  /** Host-half proxy prefix (kept in sync with openwrite-bridge domain.ts). */
14
19
  export declare const API_PROXY_BASE = "/studio-panel/api";
@@ -41,6 +46,22 @@ export interface StudioApiInjected {
41
46
  postStudioApi: (path: string, body: unknown) => Promise<unknown>;
42
47
  putStudioApi: (path: string, body: unknown, context?: StudioContext) => Promise<unknown>;
43
48
  }
49
+ /**
50
+ * The global Studio paths: the model profile library and the model route map.
51
+ *
52
+ * Studio keeps them outside every project (the user's preferences directory,
53
+ * `model-profiles.json`) and registers every model route with
54
+ * `requires_project=False`. They are therefore reachable with no Workspace
55
+ * context at all — which is exactly what the host's settings dialog needs,
56
+ * since that surface is opened without a bound workspace. The host proxy
57
+ * mirrors this list in `GLOBAL_PATHS` (openwrite-bridge domain.ts); a request
58
+ * without a workspace id is forwarded unchanged for those paths only.
59
+ */
60
+ export declare const GLOBAL_STUDIO_PATHS: Set<string>;
61
+ /** Whether the stale-host fallback is currently in use. */
62
+ export declare function isGlobalFallbackActive(): boolean;
63
+ /** Forget the stale-host fallback state (test isolation). */
64
+ export declare function resetGlobalFallbackState(): void;
44
65
  /** A Studio API failure that keeps the HTTP status (409 = optimistic-lock conflict) and contract error code. */
45
66
  export declare class StudioApiError extends Error {
46
67
  readonly status: number;
@@ -58,6 +79,24 @@ export declare class StudioApiError extends Error {
58
79
  * @returns the parsed JSON payload.
59
80
  */
60
81
  export declare function fetchStudioApi(path: string, signal?: AbortSignal): Promise<unknown>;
82
+ /**
83
+ * GET one global Studio API path through the proxy **without** any Workspace
84
+ * context headers.
85
+ *
86
+ * The model library is global, so the host's settings dialog (opened with no
87
+ * bound workspace) can read and edit it. Project-scoped paths are rejected
88
+ * here — they still need `fetchStudioApi`.
89
+ *
90
+ * When the host is still running an older bridge, the proxy refuses the
91
+ * context-free call. The scoped route reaches the same library, so the call
92
+ * is retried with the bound workspace (see `staleHostFallbackHeaders`).
93
+ */
94
+ export declare function fetchGlobalStudioApi(path: string, signal?: AbortSignal): Promise<unknown>;
95
+ /**
96
+ * POST a JSON body to one allowlisted global Studio API path through the
97
+ * proxy, without any Workspace context headers.
98
+ */
99
+ export declare function postGlobalStudioApi(path: string, body: unknown): Promise<unknown>;
61
100
  /**
62
101
  * POST a JSON body to one allowlisted Studio API path through the proxy and
63
102
  * parse the JSON response. Throws StudioApiError with the upstream status and
@@ -0,0 +1,4 @@
1
+ /** Prefer RFC 5987 names, retaining literal percent signs in legacy filenames. */
2
+ export declare function downloadFilename(disposition: string, fallback: string): string;
3
+ /** Safari needs an attached link and time to consume the Blob URL. */
4
+ export declare function downloadBlob(blob: Blob, filename: string): void;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Companion-plugin status: whether the optional integrations (dsh-dog,
3
+ * dsh-ops, dsh-our-free-model) are installed and usable on this host. The
4
+ * section only explains what a companion does here; the one action it offers
5
+ * is writing an OpenWrite model profile that points at the free-model plugin's
6
+ * local gateway.
7
+ *
8
+ * The model profile library is global — Studio keeps it outside every
9
+ * project — so this section reaches it through the context-free global API.
10
+ * The wiring therefore works from the host's settings dialog, with no novel
11
+ * open.
12
+ */
13
+ export interface OpsPlan {
14
+ files: boolean;
15
+ discovery: boolean;
16
+ presentation: string;
17
+ shell: boolean;
18
+ replaceOfficial: boolean;
19
+ residentTools: boolean;
20
+ residentNames: number;
21
+ }
22
+ export interface CompanionEntry {
23
+ installed: boolean;
24
+ usable: boolean;
25
+ version: string | null;
26
+ reason: string | null;
27
+ /** The resolved dsh-ops integration plan, when the companion exposes one. */
28
+ plan?: OpsPlan | null;
29
+ }
30
+ export interface CompanionStatus {
31
+ host: string | null;
32
+ dog: CompanionEntry;
33
+ ops: CompanionEntry;
34
+ freeModel: CompanionEntry;
35
+ }
36
+ export declare function fetchCompanions(signal?: AbortSignal): Promise<CompanionStatus | null>;
37
+ /**
38
+ * The route entries that still point somewhere else. Sending only these keys
39
+ * leaves planning/search/research routes exactly as the author set them.
40
+ */
41
+ export declare function routeChanges(routes: Record<string, string>, profileId?: string): Record<string, string>;
42
+ /** Human-readable current routes, for the pre-write summary. */
43
+ export declare function routeSummary(routes: Record<string, string>): string;
44
+ export declare function CompanionSection({ status }: {
45
+ status: CompanionStatus | null;
46
+ }): JSX.Element | null;
@@ -40,6 +40,28 @@ export type ModelProfileDto = {
40
40
  };
41
41
  export declare function parseModelProfiles(value: unknown): ModelProfileDto[];
42
42
  export declare function parseRouteMap(value: unknown): Record<string, string>;
43
+ /**
44
+ * One model of the host's own directory.
45
+ *
46
+ * The host composes the adapters — its own providers and the ones other
47
+ * plugins register into the same directory — so this list is what dsh itself
48
+ * can call. `id` is the `provider/model` route the host's relay expects.
49
+ */
50
+ export type HostModelDto = {
51
+ id: string;
52
+ provider: string;
53
+ model: string;
54
+ label: string;
55
+ description: string;
56
+ context_tokens: number;
57
+ };
58
+ /** The host model directory, as Core reads it through the host relay. */
59
+ export type HostModelCatalogDto = {
60
+ available: boolean;
61
+ models: HostModelDto[];
62
+ error: string;
63
+ };
64
+ export declare function parseHostModelCatalog(value: unknown): HostModelCatalogDto;
43
65
  /** Success payload of POST /model/test and /model/embedding/test (enveloped). */
44
66
  export type ConnectionTestResultDto = {
45
67
  status: string;
@@ -2,7 +2,7 @@
2
2
  /** Dictionary namespace owned by this plugin. */
3
3
  export declare const NS = "studio-panel";
4
4
  /** The studio-panel dictionary key set (the source of truth for both locales). */
5
- export type StudioPanelKey = 'serial.used' | 'serial.recoverTransaction' | 'serial.title' | 'serial.hint' | 'serial.saved' | 'serial.audit' | 'serial.scope' | 'serial.all' | 'serial.words' | 'serial.payoffs' | 'serial.overdue' | 'serial.promiseHint' | 'serial.chapter' | 'serial.promise' | 'serial.budget' | 'serial.function' | 'serial.payoffIds' | 'serial.actual' | 'serial.saveOutline' | 'serial.streak' | 'serial.metrics' | 'serial.hanzi' | 'serial.paragraphs' | 'serial.sentences' | 'serial.paragraphLengths' | 'serial.nounDensity' | 'serial.dialogue' | 'serial.duplicate' | 'serial.assets' | 'serial.assetsHint' | 'serial.term' | 'serial.forbidden' | 'serial.minimum' | 'serial.example' | 'serial.replacement' | 'serial.remove' | 'serial.addTerm' | 'serial.reviewTerms' | 'serial.nouns' | 'serial.threshold' | 'serial.groups' | 'serial.groupsHint' | 'serial.character' | 'serial.detail' | 'serial.addGroup' | 'serial.saveAssets' | 'serial.anchors' | 'serial.anchorHint' | 'serial.drift' | 'serial.driftHint' | 'serial.frozen' | 'serial.unfrozen' | 'serial.kind' | 'serial.impact' | 'serial.note' | 'serial.addDrift' | 'serial.growth' | 'serial.escape' | 'serial.dilution' | 'serial.snowball' | 'serial.local' | 'serial.section' | 'serial.arc' | 'serial.decision' | 'serial.absorb' | 'serial.recover' | 'serial.freeze' | 'serial.target' | 'serial.reconcile' | 'serial.historical' | 'serial.discard' | 'serial.activity' | 'serial.heartbeat' | 'serial.modelElapsed' | 'tools.export.purpose.personal_archive' | 'view.overview' | 'view.writing' | 'view.studio' | 'view.reviewWs' | 'view.outline' | 'view.assets' | 'view.tasks' | 'view.benchmark' | 'view.models' | 'view.graph' | 'view.research' | 'view.search' | 'view.creation' | 'view.library' | 'view.operations' | 'creation.chapters' | 'creation.searchChapters' | 'creation.clearSearch' | 'creation.chaptersEmpty' | 'creation.previousChapter' | 'creation.nextChapter' | 'creation.jumpChapter' | 'creation.chapterDuplicate' | 'creation.order.loading' | 'creation.order.unavailable' | 'creation.order.refresh' | 'creation.order.invalid' | 'creation.order.missingCount' | 'creation.order.move' | 'creation.order.volume' | 'creation.order.position' | 'creation.order.positionHelp' | 'creation.order.applyMove' | 'creation.order.blocked' | 'creation.order.moveComplete' | 'creation.order.conflict' | 'creation.mode.edit' | 'creation.mode.reader' | 'creation.writing.bookProgress' | 'creation.writing.chapterTarget' | 'creation.writing.chapterProgress' | 'creation.reader.title' | 'creation.reader.readOnly' | 'creation.reader.loading' | 'creation.reader.refresh' | 'creation.reader.openEditor' | 'creation.reader.path' | 'creation.reader.documentId' | 'creation.reader.revision' | 'creation.reader.revisionUnavailable' | 'creation.showChapters' | 'creation.hideChapters' | 'creation.inspector' | 'creation.showInspector' | 'creation.hideInspector' | 'creation.editorLoading' | 'creation.documentLoading' | 'creation.inspectorLoading' | 'creation.inspectorLoadingSlow' | 'creation.empty' | 'creation.acceptance.title' | 'creation.acceptance.loading' | 'creation.acceptance.current' | 'creation.acceptance.pending' | 'creation.acceptance.drift' | 'creation.acceptance.baselinePending' | 'creation.acceptance.needsReview' | 'creation.acceptance.failed' | 'creation.acceptance.unknown' | 'creation.acceptance.unavailable' | 'creation.acceptance.currentRevision' | 'creation.acceptance.acceptedRevision' | 'creation.acceptance.operation' | 'creation.acceptance.stale' | 'creation.acceptance.refresh' | 'creation.acceptance.baseline' | 'creation.acceptance.external' | 'creation.acceptance.resume' | 'creation.acceptance.acknowledge' | 'creation.acceptance.confirmBaseline' | 'creation.acceptance.confirmExternal' | 'creation.acceptance.confirmAcknowledge' | 'creation.context' | 'creation.review' | 'creation.revisions' | 'creation.activity' | 'creation.activity.loading' | 'creation.activity.unavailable' | 'creation.activity.invalid' | 'creation.activity.target' | 'creation.activity.remaining' | 'creation.activity.sprint' | 'creation.activity.sprintAdded' | 'creation.activity.sprintDeleted' | 'creation.activity.sprintNet' | 'creation.activity.sprintRevision' | 'creation.activity.sprintSaved' | 'creation.activity.identity' | 'creation.activity.recent' | 'creation.activity.empty' | 'creation.foreshadow.title' | 'creation.foreshadow.empty' | 'creation.foreshadow.due' | 'creation.foreshadow.overdue' | 'creation.foreshadow.toPlant' | 'creation.foreshadow.open' | 'creation.foreshadow.close' | 'creation.foreshadow.plant' | 'creation.foreshadow.reveal' | 'creation.foreshadow.status' | 'creation.foreshadow.weight' | 'creation.foreshadow.layer' | 'creation.foreshadow.source' | 'creation.contextEmpty' | 'creation.context.packet' | 'creation.context.current' | 'creation.context.stale' | 'creation.context.previousStale' | 'creation.context.requestBudget' | 'creation.context.sessionBudget' | 'creation.context.outputReserve' | 'creation.context.actualUsage' | 'creation.context.reported' | 'creation.context.unavailable' | 'creation.context.sessionSeparate' | 'creation.context.retrieval' | 'creation.context.sources' | 'creation.context.protected' | 'creation.context.noSnippet' | 'creation.context.reason' | 'creation.context.missing' | 'creation.context.excluded' | 'creation.context.fullText' | 'creation.reviewEmpty' | 'creation.review.stale' | 'creation.review.casUnavailable' | 'creation.review.refreshRequired' | 'creation.review.closure' | 'creation.review.closureProposal' | 'creation.review.closureRevision' | 'creation.review.outcome.resolved' | 'creation.review.outcome.retained' | 'creation.review.outcome.regressed' | 'creation.review.selectionSummary' | 'creation.review.instruction' | 'creation.review.createRevision' | 'creation.review.rereview' | 'creation.review.revisionStarted' | 'creation.review.rereviewStarted' | 'creation.revisionsEmpty' | 'creation.history.title' | 'creation.history.snapshot' | 'creation.history.snapshotName' | 'creation.history.snapshotCreated' | 'creation.history.empty' | 'creation.history.units' | 'creation.history.loading' | 'creation.history.compare' | 'creation.history.restorePreview' | 'creation.history.closePreview' | 'creation.history.noChanges' | 'creation.history.restore' | 'creation.history.restoreConfirm' | 'creation.history.restored' | 'creation.history.previewFailed' | 'creation.history.reason.autosave' | 'creation.history.reason.manual' | 'creation.history.reason.aiRevision' | 'creation.history.reason.fullRewrite' | 'creation.history.reason.restore' | 'creation.proposals.title' | 'creation.proposals.noRationale' | 'creation.proposals.range' | 'creation.proposals.evidence' | 'creation.proposals.reviewRevision' | 'creation.proposals.sourceRevision' | 'creation.proposals.noHunks' | 'creation.proposals.originalCandidate' | 'creation.proposals.reject' | 'creation.proposals.regenerate' | 'creation.proposals.applySelected' | 'creation.proposals.appliedNeedsReview' | 'creation.proposals.sourceConflict' | 'creation.selection.title' | 'creation.selection.expand' | 'creation.selection.compress' | 'creation.selection.naturalize' | 'creation.selection.reviewFix' | 'creation.selection.working' | 'creation.selection.staged' | 'creation.selection.empty' | 'creation.selection.saveRequired' | 'creation.selection.reviewRequired' | 'creation.selection.noIssues' | 'creation.selection.annotate' | 'creation.notes.title' | 'creation.notes.note' | 'creation.notes.color' | 'creation.notes.submit' | 'creation.notes.cancel' | 'creation.notes.working' | 'creation.notes.saved' | 'creation.notes.empty' | 'creation.notes.rangeLost' | 'creation.notes.saveRequired' | 'creation.notes.locate' | 'creation.notes.resolve' | 'creation.notes.resolved' | 'creation.notes.attached' | 'creation.notes.relocated' | 'creation.notes.detached' | 'creation.notes.quote' | 'creation.notes.color.amber' | 'creation.notes.color.rose' | 'creation.notes.color.sky' | 'creation.notes.color.lime' | 'creation.notes.color.violet' | 'creation.marker.insert' | 'creation.marker.title' | 'creation.marker.purpose' | 'creation.marker.state' | 'creation.marker.relation' | 'creation.marker.field' | 'creation.marker.oldState' | 'creation.marker.newState' | 'creation.marker.source' | 'creation.marker.target' | 'creation.marker.description' | 'creation.marker.pickCharacter' | 'creation.marker.insertNow' | 'creation.marker.cancel' | 'creation.marker.empty' | 'creation.marker.newline' | 'creation.marker.reserved' | 'creation.marker.needId' | 'creation.mentions.title' | 'creation.mentions.mention' | 'creation.mentions.card' | 'creation.mentions.aliases' | 'creation.mentions.close' | 'creation.mentions.ambiguous' | 'creation.mentions.choose' | 'creation.mentions.conflict' | 'creation.mentions.noSummary' | 'creation.issues' | 'creation.changedElsewhere' | 'creation.conflict' | 'creation.reload' | 'creation.overwrite' | 'creation.discardConfirm' | 'creation.overwriteConfirm' | 'creation.closePanel' | 'creation.draft.available' | 'creation.draft.conflict' | 'creation.draft.updated' | 'creation.draft.preview' | 'creation.draft.restore' | 'creation.draft.dismiss' | 'creation.draft.unavailable' | 'creation.status.idle' | 'creation.status.loading' | 'creation.status.saved' | 'creation.status.dirty' | 'creation.status.saving' | 'creation.status.conflict' | 'creation.status.offline' | 'operations.transfer' | 'operations.transferHint' | 'operations.project' | 'operations.create.new' | 'operations.create.id' | 'operations.create.title' | 'operations.create.submit' | 'operations.create.done' | 'operations.create.failed' | 'operations.create.pickHint' | 'operations.init.hint' | 'operations.init.submit' | 'operations.cancel' | 'workspace.unbound' | 'workspace.notInitialized' | 'workspace.bind.hint' | 'workspace.bind.pick' | 'workspace.bind.failed' | 'operations.create.titleHint' | 'tool.family.status' | 'tool.family.context' | 'tool.family.manuscript' | 'tool.family.revision' | 'tool.family.task' | 'tool.family.search' | 'tool.family.asset' | 'tool.family.outline' | 'tool.running' | 'tool.failed' | 'tool.succeeded' | 'tool.openChapter' | 'turn.changed' | 'turn.partial' | 'turn.failed' | 'turn.refreshFailed' | 'turn.history' | 'turn.proposed' | 'turn.rejected' | 'turn.entityChanges' | 'turn.before' | 'turn.after' | 'turn.missing' | 'turn.truncated' | 'turn.sourceRevision' | 'turn.resultRevision' | 'turn.committed' | 'turn.trace' | 'turn.modelCalls' | 'turn.days' | 'turn.accept' | 'turn.reject' | 'turn.retry' | 'turn.undo' | 'turn.applied' | 'turn.retried' | 'turn.undone' | 'resolving' | 'loading' | 'unreachable' | 'retry' | 'refresh' | 'openExternal' | 'outline.empty' | 'outline.drafted' | 'outline.planned' | 'outline.draftedCount' | 'outline.addChild' | 'outline.addAfter' | 'outline.addVolume' | 'outline.expandAll' | 'outline.collapseAll' | 'outline.del' | 'outline.confirmDelete' | 'outline.newTitlePlaceholder' | 'outline.opConflict' | 'outline.opFailed' | 'outline.summaryEmpty' | 'tools.title' | 'tools.export' | 'tools.export.done' | 'tools.export.failed' | 'tools.export.purpose' | 'tools.export.purpose.backup' | 'tools.export.purpose.delivery' | 'tools.export.format' | 'tools.export.preflight' | 'tools.export.loading' | 'tools.export.unavailable' | 'tools.export.refresh' | 'tools.export.revision' | 'tools.export.ready' | 'tools.export.blocked' | 'tools.export.download' | 'tools.export.order' | 'tools.export.orderEmpty' | 'tools.export.units' | 'tools.export.structure' | 'tools.export.structure.duplicates' | 'tools.export.structure.missing' | 'tools.export.structure.empty' | 'tools.export.structure.unreadable' | 'tools.export.clear' | 'tools.export.writingUnits' | 'tools.export.total' | 'tools.export.bookTarget' | 'tools.export.chapterTarget' | 'tools.export.completion' | 'tools.metadata.edit' | 'tools.metadata.save' | 'tools.metadata.cancel' | 'tools.metadata.hint' | 'tools.export.metadata' | 'tools.export.metadata.title' | 'tools.export.metadata.author' | 'tools.export.metadata.language' | 'tools.export.reviews' | 'tools.export.reviews.missing' | 'tools.export.reviews.current' | 'tools.export.reviews.stale' | 'tools.export.reviews.approved' | 'tools.export.reviews.notApproved' | 'tools.export.acceptance' | 'tools.export.acceptance.blocking' | 'tools.export.acceptance.blockingState' | 'tools.export.acceptance.needsReview' | 'tools.export.status' | 'tools.export.blockers' | 'tools.export.warnings' | 'tools.export.none' | 'tools.export.stale' | 'tools.sync' | 'tools.sync.done' | 'tools.sync.failed' | 'tools.import' | 'tools.import.empty' | 'tools.import.failed' | 'tools.import.done' | 'tools.import.choose' | 'tools.import.noFile' | 'tools.import.start' | 'tools.import.startAuto' | 'tools.import.preview' | 'tools.import.plan' | 'tools.import.conflicts' | 'tools.import.force' | 'tools.import.confirm' | 'tools.import.workspace.title' | 'tools.import.workspace.ownHint' | 'tools.import.workspace.operations' | 'tools.import.workspace.empty' | 'tools.import.workspace.new' | 'tools.import.workspace.file' | 'tools.import.workspace.arc' | 'tools.import.workspace.prepare' | 'tools.import.workspace.prepared' | 'tools.import.workspace.select' | 'tools.import.workspace.chapters' | 'tools.import.workspace.structure' | 'tools.import.workspace.chapterId' | 'tools.import.workspace.chapterTitle' | 'tools.import.workspace.chapterContent' | 'tools.import.workspace.moveUp' | 'tools.import.workspace.moveDown' | 'tools.import.workspace.remove' | 'tools.import.workspace.addChapter' | 'tools.import.workspace.newChapter' | 'tools.import.workspace.saveStructure' | 'tools.import.workspace.structureSaved' | 'tools.import.workspace.confirmStructure' | 'tools.import.workspace.confirmPrompt' | 'tools.import.workspace.confirmed' | 'tools.import.workspace.run' | 'tools.import.workspace.resume' | 'tools.import.workspace.taskStarted' | 'tools.import.workspace.discard' | 'tools.import.workspace.discardPrompt' | 'tools.import.workspace.discarded' | 'tools.import.workspace.recoverable' | 'tools.import.workspace.notRecoverable' | 'tools.import.stage.snapshot' | 'tools.import.stage.split' | 'tools.import.stage.structure_confirmed' | 'tools.import.stage.published' | 'tools.import.stage.acceptance' | 'tools.import.stage.reconcile' | 'tools.import.stage.synthesis' | 'tools.import.stage.complete' | 'tools.archive.title' | 'tools.archive.hint' | 'tools.archive.failed' | 'tools.archive.preflight' | 'tools.archive.create' | 'tools.archive.created' | 'tools.archive.list' | 'tools.archive.empty' | 'tools.archive.download' | 'tools.archive.downloaded' | 'tools.archive.files' | 'tools.archive.size' | 'tools.archive.categories' | 'tools.archive.includes' | 'tools.archive.excludes' | 'tools.archive.missing' | 'tools.archive.references' | 'tools.archive.referencePlan' | 'tools.archive.restore' | 'tools.archive.targetRoot' | 'tools.archive.pickTarget' | 'tools.archive.targetNovelId' | 'tools.archive.referencePolicy' | 'tools.archive.preserveRelative' | 'tools.archive.rewriteNovelId' | 'tools.archive.previewRestore' | 'tools.archive.restoreReady' | 'tools.archive.restoreBlocked' | 'tools.archive.conflicts' | 'tools.archive.pathRewrites' | 'tools.archive.rewrittenFiles' | 'tools.archive.rewrittenReferences' | 'tools.archive.preservedReferences' | 'tools.archive.referenceWarnings' | 'tools.archive.referenceConflicts' | 'tools.archive.tasksArchived' | 'tools.archive.autoResume' | 'tools.archive.noAutoResume' | 'tools.archive.confirmRestore' | 'tools.archive.restoreConfirm' | 'tools.archive.restoreStarted' | 'tasks.cancel' | 'tasks.cancel.title' | 'tasks.cancel.confirm' | 'tasks.cancel.done' | 'tasks.cancel.failed' | 'tasks.retry' | 'tasks.retry.title' | 'tasks.retry.notRecoverable' | 'tasks.retry.done' | 'tasks.retry.failed' | 'tasks.summary.total' | 'tasks.summary.updated' | 'tasks.filter.type' | 'tasks.filter.typeAll' | 'tasks.filter.chapter' | 'tasks.filter.keyword' | 'tasks.sort.newest' | 'tasks.sort.oldest' | 'tasks.sort.toggle' | 'tasks.progress.unknown' | 'tasks.phase.unknown' | 'tasks.confirm' | 'tasks.confirm.title' | 'tasks.confirm.done' | 'tasks.confirm.failed' | 'tasks.cancel.armYes' | 'tasks.cancel.armNo' | 'tasks.list' | 'tasks.detail.open' | 'tasks.detail.close' | 'tasks.detail.copyId' | 'tasks.detail.copied' | 'tasks.detail.events' | 'tasks.detail.eventsLoading' | 'tasks.detail.eventsEmpty' | 'tasks.detail.eventsFailed' | 'tasks.field.id' | 'tasks.field.type' | 'tasks.field.status' | 'tasks.field.phase' | 'tasks.field.chapter' | 'tasks.field.progress' | 'tasks.field.attempt' | 'tasks.field.created' | 'tasks.field.started' | 'tasks.field.updated' | 'tasks.field.completed' | 'tasks.field.summary' | 'tasks.field.resultRef' | 'tasks.field.failedStage' | 'tasks.field.errorCode' | 'tasks.field.recoverable' | 'tasks.field.yes' | 'tasks.field.no' | 'tasks.failure.cancelled' | 'tasks.failure.recoverable' | 'tasks.failure.provider' | 'tasks.failure.input' | 'tasks.failure.system' | 'tasks.jump.benchmark' | 'tasks.jump.research' | 'tasks.jump.chapter' | 'tasks.jump.review' | 'tasks.jump.unavailable' | 'tasks.jump.chapterHint' | 'tasks.jump.reviewHint' | 'tasks.jump.chapterMissing' | 'research.launch' | 'research.launch.placeholder' | 'research.launch.submit' | 'research.launch.submitting' | 'research.launch.submitted' | 'research.launch.failed' | 'research.launch.hint' | 'tasks.result.toggle' | 'tasks.result.score' | 'tasks.result.issues' | 'search.preview.back' | 'search.preview.openCreation' | 'search.preview.jumpReady' | 'search.preview.identityMismatch' | 'search.preview.locatorCurrent' | 'search.preview.locatorStale' | 'search.preview.locatorUnverified' | 'search.preview.revisionUnavailable' | 'search.change.title' | 'search.change.serverOwned' | 'search.change.unavailable' | 'search.change.currentLine' | 'search.change.replacement' | 'search.change.preview' | 'search.change.previewing' | 'search.change.sourceRevision' | 'search.change.resultRevision' | 'search.change.reject' | 'search.change.confirmApply' | 'search.change.applying' | 'search.change.refreshRequired' | 'search.change.invalidApply' | 'search.change.invalidReject' | 'search.change.applied' | 'search.change.rejected' | 'search.change.refresh' | 'assets.empty' | 'assets.other' | 'assets.stages' | 'assets.aliases' | 'assets.segment.characters' | 'assets.segment.world' | 'assets.segment.progression' | 'assets.segment.references' | 'assets.segment.core' | 'assets.segment.empty' | 'assets.references.empty' | 'assets.core.empty' | 'assets.detail.loading' | 'assets.draft.restored' | 'assets.draft.unsaved' | 'assets.draft.conflict' | 'assets.detail.relations' | 'assets.detail.index' | 'assets.list.detail_refs' | 'assets.list.taboos' | 'assets.edit.linesHint' | 'assets.relation.confirmed' | 'assets.relation.registered' | 'assets.relation.incoming' | 'assets.searchPlaceholder' | 'assets.edit.open' | 'assets.edit.name' | 'assets.edit.summary' | 'assets.edit.tags' | 'assets.edit.listHint' | 'assets.edit.save' | 'assets.edit.saving' | 'assets.edit.cancel' | 'assets.edit.conflict' | 'assets.edit.conflictRefresh' | 'assets.edit.addRelation' | 'assets.edit.removeRelation' | 'assets.edit.relationTarget' | 'assets.edit.relationNote' | 'assets.edit.derivedRelations' | 'assets.edit.body' | 'assets.edit.liveLoading' | 'assets.edit.optional' | 'assets.field.tier' | 'assets.field.personality' | 'assets.field.goal' | 'assets.field.fear' | 'assets.field.appearance' | 'assets.field.voice' | 'assets.field.current_state' | 'assets.field.organization' | 'assets.field.progression_system' | 'assets.field.progression_stage' | 'assets.field.status' | 'assets.field.kind' | 'assets.field.type' | 'assets.field.subtype' | 'assets.field.state_updated_at' | 'assets.field.role' | 'assets.edit.liveFailed' | 'assets.selectHint' | 'assets.create.open' | 'assets.create.submit' | 'assets.create.idHint' | 'assets.create.tier' | 'assets.create.type' | 'assets.create.progressionKind' | 'assets.create.stages' | 'assets.create.stageId' | 'assets.create.stageName' | 'assets.create.addStage' | 'tasks.empty' | 'tasks.filter.all' | 'tasks.attempt' | 'tasks.status.pending' | 'tasks.status.running' | 'tasks.status.awaiting_confirmation' | 'tasks.status.completed' | 'tasks.status.failed' | 'tasks.status.cancelled' | 'tasks.status.interrupted' | 'tasks.phase.queued' | 'tasks.phase.reading' | 'tasks.phase.preparing' | 'tasks.phase.model' | 'tasks.phase.validating' | 'tasks.phase.committing' | 'tasks.phase.complete' | 'tasks.type.chapter_write' | 'tasks.type.chapter_review' | 'tasks.type.continuous_write' | 'tasks.type.revision' | 'tasks.type.source_operation' | 'tasks.type.reference_operation' | 'tasks.type.manuscript_import' | 'tasks.type.project_restore' | 'tasks.type.research' | 'tasks.type.model_benchmark' | 'graph.foreshadowing' | 'graph.relationships' | 'graph.nodes' | 'graph.connections' | 'graph.relayout' | 'graph.weight' | 'graph.target' | 'graph.truncated' | 'graph.validation.errors' | 'graph.empty.foreshadowing' | 'graph.empty.relationships' | 'graph.entityType' | 'graph.entityStatus' | 'graph.search' | 'graph.connectedOnly' | 'graph.neighbors' | 'graph.edgeType' | 'graph.origin' | 'graph.source' | 'graph.confirmed' | 'dag.quality' | 'dag.coverage' | 'dag.gate' | 'dag.delivery' | 'dag.current' | 'dag.stale' | 'dag.toRevision' | 'dag.toRevisionDone' | 'dag.toRevisionFailed' | 'graph.unresolved' | 'graph.kind.character' | 'graph.kind.faction' | 'graph.kind.place' | 'graph.kind.concept' | 'graph.kind.other' | 'graph.truth' | 'graph.truth.currentState' | 'graph.truth.ledger' | 'graph.truth.relationships' | 'graph.workflows' | 'graph.workflow.currentStage' | 'graph.workflow.executionHint' | 'graph.workflow.confirmHint' | 'graph.empty.truth' | 'graph.empty.truthDoc' | 'graph.empty.workflows' | 'graph.reviewDag' | 'graph.reviewFramework' | 'graph.reviewDomains' | 'graph.reviewChecks' | 'graph.reviewCriteria' | 'graph.deliveryDag' | 'graph.filter.all' | 'graph.filter.anomaly' | 'graph.filter.blocker' | 'graph.expandChecks' | 'graph.collapseChecks' | 'graph.empty.dag' | 'benchmark.title' | 'benchmark.taskType' | 'benchmark.executionEvidence' | 'benchmark.evidence' | 'benchmark.status.skipped' | 'benchmark.status.stale' | 'benchmark.task.chapter' | 'benchmark.task.outline' | 'benchmark.task.chapterHint' | 'benchmark.task.outlineHint' | 'benchmark.planner' | 'benchmark.nextChapter' | 'benchmark.chapterWritten' | 'benchmark.chapterPlanned' | 'benchmark.chapterUnavailable' | 'benchmark.customChapter' | 'benchmark.chapterId' | 'benchmark.outlineOrigin' | 'benchmark.continueOutline' | 'benchmark.customOutlineStart' | 'benchmark.outlineStart' | 'benchmark.outlineCount' | 'benchmark.rangeFrom' | 'benchmark.rangeTo' | 'benchmark.chapterUnit' | 'benchmark.invalidRange' | 'benchmark.outlineRangeHint' | 'benchmark.earliestOutlineStart' | 'benchmark.invalidChapter' | 'benchmark.historicalChapterHint' | 'benchmark.autoDag' | 'benchmark.executedDag' | 'benchmark.dagAutomatic' | 'benchmark.afterStage' | 'benchmark.reviewScope' | 'benchmark.isolatedHint' | 'benchmark.pipelineUnavailable' | 'benchmark.actualChapters' | 'benchmark.pipelineFinished' | 'benchmark.pipelineStatus' | 'benchmark.reviewIncomplete' | 'benchmark.partialScore' | 'benchmark.reviewIncompleteHint' | 'benchmark.completeReviews' | 'benchmark.reportedCoverage' | 'benchmark.coveragePending' | 'benchmark.factsPendingTitle' | 'benchmark.factsPendingHint' | 'benchmark.selectModels' | 'benchmark.description' | 'benchmark.configure' | 'benchmark.modelHint' | 'benchmark.advanced' | 'benchmark.history' | 'benchmark.results' | 'benchmark.noProfiles' | 'benchmark.chooseModels' | 'benchmark.workload' | 'benchmark.submitting' | 'benchmark.noCandidates' | 'benchmark.noEvaluations' | 'benchmark.plannedCandidates' | 'benchmark.plannedEvaluations' | 'benchmark.task' | 'benchmark.mode' | 'benchmark.mode.framework' | 'benchmark.mode.creative' | 'benchmark.mode.unknown' | 'benchmark.reviewer' | 'benchmark.chapter' | 'benchmark.repeats' | 'benchmark.words' | 'benchmark.concurrency' | 'benchmark.run' | 'benchmark.empty' | 'benchmark.select' | 'benchmark.averageScore' | 'benchmark.output' | 'benchmark.candidate' | 'benchmark.candidates' | 'benchmark.evaluations' | 'benchmark.writer' | 'benchmark.path' | 'benchmark.status' | 'benchmark.actualWords' | 'benchmark.finishReason' | 'benchmark.error' | 'benchmark.coverage' | 'benchmark.gate' | 'benchmark.delivery' | 'benchmark.productionGate' | 'benchmark.productionGateMissing' | 'benchmark.domains' | 'benchmark.latency' | 'benchmark.usage' | 'benchmark.cost' | 'benchmark.inputTokens' | 'benchmark.outputTokens' | 'benchmark.reasoningTokens' | 'benchmark.totalTokens' | 'benchmark.actualCost' | 'benchmark.costCoverage' | 'benchmark.effectiveRate' | 'benchmark.runs' | 'benchmark.sameInputGroup' | 'benchmark.comparisonIncomplete' | 'benchmark.inputProvenance' | 'benchmark.runPhases' | 'benchmark.phase.created' | 'benchmark.phase.started' | 'benchmark.phase.completed' | 'benchmark.contextHash' | 'benchmark.comparisonKey' | 'benchmark.promptVersion' | 'benchmark.rubricVersion' | 'benchmark.blindReview' | 'benchmark.contextStrategy' | 'benchmark.manifestVersion' | 'benchmark.tokenEstimator' | 'benchmark.packetRevision' | 'benchmark.sourceRevision' | 'benchmark.estimatedTokens' | 'benchmark.characters' | 'benchmark.contextSources' | 'benchmark.sourcePresent' | 'benchmark.sourceMissing' | 'benchmark.responseIdentity' | 'models.title' | 'models.list' | 'models.editor' | 'models.new' | 'models.empty' | 'models.id' | 'models.label' | 'models.provider' | 'models.protocol.openai' | 'models.protocol.anthropic' | 'models.modelId' | 'models.baseUrl' | 'models.apiFormat' | 'models.context' | 'models.output' | 'models.credential' | 'models.embeddingProvider' | 'models.embeddingProviderOpenai' | 'models.embeddingProviderLocal' | 'models.embeddingProviderUnknown' | 'models.embeddingProviderOpenaiHint' | 'models.embeddingProviderLocalHint' | 'models.embeddingLocalPreset' | 'models.vectorDimensionsLocalHint' | 'models.embeddingModel' | 'models.embeddingCredential' | 'models.credentialHint' | 'models.authSource' | 'models.authApiKey' | 'models.authConsole' | 'models.consoleHint' | 'models.goWorkspace' | 'models.goWorkspaceHint' | 'models.remember' | 'models.save' | 'models.chatTest' | 'models.embeddingTest' | 'models.vectorParameters' | 'models.vectorDimension' | 'models.vectorMaxTokens' | 'models.vectorCount' | 'models.vectorDimensionsHint' | 'models.test.invalidResponseHint' | 'models.test.unsupportedHint' | 'models.delete' | 'models.delete.confirm' | 'models.delete.blocked' | 'models.delete.wouldFail' | 'models.test.untested' | 'models.test.ok' | 'models.test.failed' | 'models.dependencies' | 'models.dependenciesHint' | 'models.fallback' | 'models.chooseFallback' | 'models.routes' | 'models.routesSave' | 'models.saved' | 'models.deleted' | 'models.chatOk' | 'models.embeddingOk' | 'models.configured' | 'models.missing' | 'models.routesSaved' | 'models.group.basic' | 'models.group.connection' | 'models.group.generation' | 'models.group.embedding' | 'models.group.credentials' | 'models.group.routeUsage' | 'models.temperature' | 'models.timeout' | 'models.embeddingBaseUrl' | 'models.validation.required' | 'models.validation.positive' | 'models.validation.temperature' | 'models.validation.embeddingProvider' | 'models.unsavedChanges' | 'models.unsavedDiscard' | 'models.unsavedKeep' | 'models.test.loading' | 'models.usedByRoutes' | 'models.noRoutes' | 'models.delete.resultingRoutes' | 'models.embeddingEmpty' | 'models.embeddingConfigured' | 'models.embeddingMissing' | 'models.active' | 'models.inactive' | 'models.route.goethe' | 'models.route.dante' | 'models.route.chapter_write' | 'models.route.review' | 'models.route.source_extract' | 'models.route.revision' | 'models.route.search' | 'models.route.research' | 'models.routesImpact' | 'models.routesUnchanged' | 'models.routesUnassigned' | 'models.embedConfigured' | 'models.embedMissing' | 'models.capability.chat' | 'models.capability.embedding' | 'research.reports' | 'research.unavailable' | 'research.empty' | 'research.selectHint' | 'research.report.loading' | 'research.quality' | 'research.language' | 'research.filter.keyword' | 'research.filter.status' | 'research.filter.sources' | 'research.filter.all' | 'research.status.succeeded' | 'research.status.failed' | 'research.status.needsReview' | 'research.status.unknown' | 'research.sourcesAvailable' | 'research.sourcesUnavailable' | 'research.sourcesEmpty' | 'research.sources' | 'research.sourceCheck' | 'research.source.cited' | 'research.source.uncited' | 'research.exportMarkdown' | 'research.referenceOnly' | 'research.prompt' | 'research.taskId' | 'research.episodeId' | 'research.model' | 'research.searchProvider' | 'research.createdAt' | 'research.completedAt' | 'research.latency' | 'research.wordCount' | 'research.tokens' | 'research.cost' | 'research.sourcesStatus' | 'research.metrics' | 'search.placeholder' | 'search.hint' | 'search.empty' | 'search.indexed' | 'search.timeout' | 'search.scope.all' | 'search.scope.outline' | 'search.scope.core' | 'search.scope.characters' | 'search.scope.settings' | 'search.scope.continuity' | 'search.scope.chapters' | 'search.scope.sources' | 'assets.references' | 'reference.intent.reference' | 'reference.intent.continuation' | 'reference.intent.canon' | 'reference.intent.migration' | 'reference.structure.awaiting_confirmation' | 'reference.structure.confirmed' | 'reference.analysis.complete' | 'reference.analysis.pending' | 'reference.chars' | 'reference.content.loading' | 'reference.content.full' | 'review.running' | 'review.passed' | 'review.failed' | 'review.score' | 'review.issues' | 'review.suggestion' | 'review.quote' | 'review.dimension' | 'review.coverage' | 'review.gate' | 'review.delivery' | 'review.execution' | 'review.priority' | 'review.severity.critical' | 'review.severity.warning' | 'review.severity.info' | 'review.severity.blocker' | 'review.severity.high' | 'review.severity.medium' | 'review.severity.low' | 'review.priority.blocker' | 'review.priority.high' | 'review.priority.medium' | 'review.priority.low' | 'review.status.pass' | 'review.status.blocked' | 'review.status.inconclusive' | 'review.status.revise' | 'review.status.completed' | 'review.status.partial' | 'review.status.failed' | 'review.status.stale' | 'review.status.unknown' | 'review.rawTitle';
5
+ export type StudioPanelKey = 'serial.used' | 'serial.recoverTransaction' | 'serial.title' | 'serial.hint' | 'serial.saved' | 'serial.conflictReload' | 'serial.audit' | 'serial.scope' | 'serial.all' | 'serial.words' | 'serial.payoffs' | 'serial.overdue' | 'serial.promiseHint' | 'serial.chapter' | 'serial.promise' | 'serial.budget' | 'serial.function' | 'serial.payoffIds' | 'serial.actual' | 'serial.saveOutline' | 'serial.streak' | 'serial.metrics' | 'serial.hanzi' | 'serial.paragraphs' | 'serial.sentences' | 'serial.paragraphLengths' | 'serial.nounDensity' | 'serial.dialogue' | 'serial.duplicate' | 'serial.assets' | 'serial.assetsHint' | 'serial.term' | 'serial.forbidden' | 'serial.minimum' | 'serial.example' | 'serial.replacement' | 'serial.remove' | 'serial.addTerm' | 'serial.reviewTerms' | 'serial.nouns' | 'serial.threshold' | 'serial.groups' | 'serial.groupsHint' | 'serial.character' | 'serial.detail' | 'serial.addGroup' | 'serial.saveAssets' | 'serial.anchors' | 'serial.anchorHint' | 'serial.drift' | 'serial.driftHint' | 'serial.frozen' | 'serial.unfrozen' | 'serial.kind' | 'serial.impact' | 'serial.note' | 'serial.addDrift' | 'serial.growth' | 'serial.escape' | 'serial.dilution' | 'serial.snowball' | 'serial.local' | 'serial.section' | 'serial.arc' | 'serial.decision' | 'serial.absorb' | 'serial.recover' | 'serial.freeze' | 'serial.target' | 'serial.reconcile' | 'serial.historical' | 'serial.discard' | 'serial.activity' | 'serial.heartbeat' | 'serial.modelElapsed' | 'tools.export.purpose.personal_archive' | 'view.overview' | 'view.writing' | 'view.studio' | 'view.reviewWs' | 'view.outline' | 'view.assets' | 'view.tasks' | 'view.benchmark' | 'view.graph' | 'view.research' | 'view.search' | 'view.creation' | 'view.library' | 'view.operations' | 'creation.chapters' | 'creation.searchChapters' | 'creation.clearSearch' | 'creation.chaptersEmpty' | 'creation.previousChapter' | 'creation.nextChapter' | 'creation.jumpChapter' | 'creation.chapterDuplicate' | 'creation.order.loading' | 'creation.order.unavailable' | 'creation.order.refresh' | 'creation.order.invalid' | 'creation.order.missingCount' | 'creation.order.move' | 'creation.order.volume' | 'creation.order.position' | 'creation.order.positionHelp' | 'creation.order.applyMove' | 'creation.order.blocked' | 'creation.order.moveComplete' | 'creation.order.conflict' | 'creation.mode.edit' | 'creation.mode.reader' | 'creation.writing.bookProgress' | 'creation.writing.chapterTarget' | 'creation.writing.chapterProgress' | 'creation.reader.title' | 'creation.reader.readOnly' | 'creation.reader.loading' | 'creation.reader.refresh' | 'creation.reader.openEditor' | 'creation.reader.path' | 'creation.reader.documentId' | 'creation.reader.revision' | 'creation.reader.revisionUnavailable' | 'creation.showChapters' | 'creation.hideChapters' | 'creation.inspector' | 'creation.showInspector' | 'creation.hideInspector' | 'creation.editorLoading' | 'creation.documentLoading' | 'creation.inspectorLoading' | 'creation.inspectorLoadingSlow' | 'creation.empty' | 'creation.acceptance.title' | 'creation.acceptance.loading' | 'creation.acceptance.current' | 'creation.acceptance.pending' | 'creation.acceptance.drift' | 'creation.acceptance.baselinePending' | 'creation.acceptance.needsReview' | 'creation.acceptance.failed' | 'creation.acceptance.unknown' | 'creation.acceptance.unavailable' | 'creation.acceptance.currentRevision' | 'creation.acceptance.acceptedRevision' | 'creation.acceptance.operation' | 'creation.acceptance.stale' | 'creation.acceptance.refresh' | 'creation.acceptance.baseline' | 'creation.acceptance.external' | 'creation.acceptance.resume' | 'creation.acceptance.acknowledge' | 'creation.acceptance.confirmBaseline' | 'creation.acceptance.confirmExternal' | 'creation.acceptance.confirmAcknowledge' | 'creation.context' | 'creation.review' | 'creation.revisions' | 'creation.activity' | 'creation.activity.loading' | 'creation.activity.unavailable' | 'creation.activity.invalid' | 'creation.activity.target' | 'creation.activity.remaining' | 'creation.activity.sprint' | 'creation.activity.sprintAdded' | 'creation.activity.sprintDeleted' | 'creation.activity.sprintNet' | 'creation.activity.sprintRevision' | 'creation.activity.sprintSaved' | 'creation.activity.identity' | 'creation.activity.recent' | 'creation.activity.empty' | 'creation.foreshadow.title' | 'creation.foreshadow.empty' | 'creation.foreshadow.due' | 'creation.foreshadow.overdue' | 'creation.foreshadow.toPlant' | 'creation.foreshadow.open' | 'creation.foreshadow.close' | 'creation.foreshadow.plant' | 'creation.foreshadow.reveal' | 'creation.foreshadow.status' | 'creation.foreshadow.weight' | 'creation.foreshadow.layer' | 'creation.foreshadow.source' | 'creation.contextEmpty' | 'creation.context.packet' | 'creation.context.current' | 'creation.context.stale' | 'creation.context.previousStale' | 'creation.context.requestBudget' | 'creation.context.sessionBudget' | 'creation.context.outputReserve' | 'creation.context.actualUsage' | 'creation.context.reported' | 'creation.context.unavailable' | 'creation.context.sessionSeparate' | 'creation.context.retrieval' | 'creation.context.sources' | 'creation.context.protected' | 'creation.context.noSnippet' | 'creation.context.reason' | 'creation.context.missing' | 'creation.context.excluded' | 'creation.context.fullText' | 'creation.reviewEmpty' | 'creation.review.stale' | 'creation.review.casUnavailable' | 'creation.review.refreshRequired' | 'creation.review.closure' | 'creation.review.closureProposal' | 'creation.review.closureRevision' | 'creation.review.outcome.resolved' | 'creation.review.outcome.retained' | 'creation.review.outcome.regressed' | 'creation.review.selectionSummary' | 'creation.review.instruction' | 'creation.review.createRevision' | 'creation.review.rereview' | 'creation.review.revisionStarted' | 'creation.review.rereviewStarted' | 'creation.revisionsEmpty' | 'creation.history.title' | 'creation.history.snapshot' | 'creation.history.snapshotName' | 'creation.history.snapshotCreated' | 'creation.history.empty' | 'creation.history.units' | 'creation.history.loading' | 'creation.history.compare' | 'creation.history.restorePreview' | 'creation.history.closePreview' | 'creation.history.noChanges' | 'creation.history.restore' | 'creation.history.restoreConfirm' | 'creation.history.restored' | 'creation.history.previewFailed' | 'creation.history.reason.autosave' | 'creation.history.reason.manual' | 'creation.history.reason.aiRevision' | 'creation.history.reason.fullRewrite' | 'creation.history.reason.restore' | 'creation.proposals.title' | 'creation.proposals.noRationale' | 'creation.proposals.range' | 'creation.proposals.evidence' | 'creation.proposals.reviewRevision' | 'creation.proposals.sourceRevision' | 'creation.proposals.noHunks' | 'creation.proposals.originalCandidate' | 'creation.proposals.reject' | 'creation.proposals.regenerate' | 'creation.proposals.applySelected' | 'creation.proposals.appliedNeedsReview' | 'creation.proposals.sourceConflict' | 'creation.selection.title' | 'creation.selection.expand' | 'creation.selection.compress' | 'creation.selection.naturalize' | 'creation.selection.reviewFix' | 'creation.selection.working' | 'creation.selection.staged' | 'creation.selection.empty' | 'creation.selection.saveRequired' | 'creation.selection.reviewRequired' | 'creation.selection.noIssues' | 'creation.selection.annotate' | 'creation.notes.title' | 'creation.notes.note' | 'creation.notes.color' | 'creation.notes.submit' | 'creation.notes.cancel' | 'creation.notes.working' | 'creation.notes.saved' | 'creation.notes.empty' | 'creation.notes.rangeLost' | 'creation.notes.saveRequired' | 'creation.notes.locate' | 'creation.notes.resolve' | 'creation.notes.resolved' | 'creation.notes.attached' | 'creation.notes.relocated' | 'creation.notes.detached' | 'creation.notes.quote' | 'creation.notes.color.amber' | 'creation.notes.color.rose' | 'creation.notes.color.sky' | 'creation.notes.color.lime' | 'creation.notes.color.violet' | 'creation.marker.insert' | 'creation.marker.title' | 'creation.marker.purpose' | 'creation.marker.state' | 'creation.marker.relation' | 'creation.marker.field' | 'creation.marker.oldState' | 'creation.marker.newState' | 'creation.marker.source' | 'creation.marker.target' | 'creation.marker.description' | 'creation.marker.pickCharacter' | 'creation.marker.insertNow' | 'creation.marker.cancel' | 'creation.marker.empty' | 'creation.marker.newline' | 'creation.marker.reserved' | 'creation.marker.needId' | 'creation.mentions.title' | 'creation.mentions.mention' | 'creation.mentions.card' | 'creation.mentions.aliases' | 'creation.mentions.close' | 'creation.mentions.ambiguous' | 'creation.mentions.choose' | 'creation.mentions.conflict' | 'creation.mentions.noSummary' | 'creation.issues' | 'creation.changedElsewhere' | 'creation.conflict' | 'creation.reload' | 'creation.overwrite' | 'creation.discardConfirm' | 'creation.overwriteConfirm' | 'creation.closePanel' | 'creation.draft.available' | 'creation.draft.conflict' | 'creation.draft.updated' | 'creation.draft.preview' | 'creation.draft.restore' | 'creation.draft.dismiss' | 'creation.draft.unavailable' | 'creation.status.idle' | 'creation.status.loading' | 'creation.status.saved' | 'creation.status.dirty' | 'creation.status.saving' | 'creation.status.conflict' | 'creation.status.offline' | 'operations.transfer' | 'operations.transferHint' | 'operations.project' | 'operations.create.new' | 'operations.create.id' | 'operations.create.title' | 'operations.create.submit' | 'operations.create.done' | 'operations.create.failed' | 'operations.create.pickHint' | 'operations.init.hint' | 'operations.init.submit' | 'operations.cancel' | 'workspace.unbound' | 'workspace.notInitialized' | 'workspace.bind.hint' | 'workspace.bind.pick' | 'workspace.bind.failed' | 'operations.create.titleHint' | 'tool.family.status' | 'tool.family.context' | 'tool.family.manuscript' | 'tool.family.revision' | 'tool.family.task' | 'tool.family.search' | 'tool.family.asset' | 'tool.family.outline' | 'tool.running' | 'tool.failed' | 'tool.succeeded' | 'tool.openChapter' | 'turn.changed' | 'turn.partial' | 'turn.failed' | 'turn.refreshFailed' | 'turn.history' | 'turn.proposed' | 'turn.rejected' | 'turn.entityChanges' | 'turn.before' | 'turn.after' | 'turn.missing' | 'turn.truncated' | 'turn.sourceRevision' | 'turn.resultRevision' | 'turn.committed' | 'turn.trace' | 'turn.modelCalls' | 'turn.days' | 'turn.accept' | 'turn.reject' | 'turn.retry' | 'turn.undo' | 'turn.applied' | 'turn.retried' | 'turn.undone' | 'turn.stalePreview' | 'resolving' | 'loading' | 'unreachable' | 'retry' | 'refresh' | 'outline.empty' | 'outline.drafted' | 'outline.planned' | 'outline.draftedCount' | 'outline.addChild' | 'outline.addAfter' | 'outline.addVolume' | 'outline.expandAll' | 'outline.collapseAll' | 'outline.del' | 'outline.confirmDelete' | 'outline.plan.conflict' | 'outline.plan.confirmDelete' | 'outline.plan.confirmApply' | 'outline.plan.saved' | 'outline.plan.deleted' | 'outline.plan.merged' | 'outline.plan.new' | 'outline.plan.edit' | 'outline.plan.apply' | 'outline.plan.delete' | 'outline.plan.editing' | 'outline.plan.attach' | 'outline.plan.attachNone' | 'outline.plan.rolling' | 'outline.plan.direction' | 'outline.plan.cancel' | 'outline.plan.placeholder' | 'outline.plan.stage' | 'outline.newTitlePlaceholder' | 'outline.opConflict' | 'outline.opFailed' | 'outline.summaryEmpty' | 'tools.title' | 'tools.export' | 'tools.export.done' | 'tools.export.failed' | 'tools.export.purpose' | 'tools.export.purpose.backup' | 'tools.export.purpose.delivery' | 'tools.export.format' | 'tools.export.preflight' | 'tools.export.loading' | 'tools.export.unavailable' | 'tools.export.refresh' | 'tools.export.revision' | 'tools.export.ready' | 'tools.export.blocked' | 'tools.export.download' | 'tools.export.order' | 'tools.export.orderEmpty' | 'tools.export.units' | 'tools.export.structure' | 'tools.export.structure.duplicates' | 'tools.export.structure.missing' | 'tools.export.structure.empty' | 'tools.export.structure.unreadable' | 'tools.export.clear' | 'tools.export.writingUnits' | 'tools.export.total' | 'tools.export.bookTarget' | 'tools.export.chapterTarget' | 'tools.export.completion' | 'tools.metadata.edit' | 'tools.metadata.save' | 'tools.metadata.cancel' | 'tools.metadata.hint' | 'tools.export.metadata' | 'tools.export.metadata.title' | 'tools.export.metadata.author' | 'tools.export.metadata.language' | 'tools.export.reviews' | 'tools.export.reviews.missing' | 'tools.export.reviews.current' | 'tools.export.reviews.stale' | 'tools.export.reviews.approved' | 'tools.export.reviews.notApproved' | 'tools.export.acceptance' | 'tools.export.acceptance.blocking' | 'tools.export.acceptance.blockingState' | 'tools.export.acceptance.needsReview' | 'tools.export.status' | 'tools.export.blockers' | 'tools.export.warnings' | 'tools.export.none' | 'tools.export.stale' | 'tools.sync' | 'tools.sync.done' | 'tools.sync.failed' | 'tools.import' | 'tools.import.empty' | 'tools.import.failed' | 'tools.import.done' | 'tools.import.choose' | 'tools.import.noFile' | 'tools.import.start' | 'tools.import.startAuto' | 'tools.import.preview' | 'tools.import.plan' | 'tools.import.conflicts' | 'tools.import.force' | 'tools.import.confirm' | 'tools.import.workspace.title' | 'tools.import.workspace.ownHint' | 'tools.import.workspace.operations' | 'tools.import.workspace.empty' | 'tools.import.workspace.new' | 'tools.import.workspace.file' | 'tools.import.workspace.arc' | 'tools.import.workspace.prepare' | 'tools.import.workspace.prepared' | 'tools.import.workspace.select' | 'tools.import.workspace.chapters' | 'tools.import.workspace.structure' | 'tools.import.workspace.chapterId' | 'tools.import.workspace.chapterTitle' | 'tools.import.workspace.chapterContent' | 'tools.import.workspace.moveUp' | 'tools.import.workspace.moveDown' | 'tools.import.workspace.remove' | 'tools.import.workspace.addChapter' | 'tools.import.workspace.newChapter' | 'tools.import.workspace.saveStructure' | 'tools.import.workspace.structureSaved' | 'tools.import.workspace.confirmStructure' | 'tools.import.workspace.confirmPrompt' | 'tools.import.workspace.confirmed' | 'tools.import.workspace.run' | 'tools.import.workspace.resume' | 'tools.import.workspace.taskStarted' | 'tools.import.workspace.discard' | 'tools.import.workspace.discardPrompt' | 'tools.import.workspace.discarded' | 'tools.import.workspace.recoverable' | 'tools.import.workspace.notRecoverable' | 'tools.import.stage.snapshot' | 'tools.import.stage.split' | 'tools.import.stage.structure_confirmed' | 'tools.import.stage.published' | 'tools.import.stage.acceptance' | 'tools.import.stage.reconcile' | 'tools.import.stage.synthesis' | 'tools.import.stage.complete' | 'tools.archive.title' | 'tools.archive.hint' | 'tools.archive.failed' | 'tools.archive.preflight' | 'tools.archive.create' | 'tools.archive.created' | 'tools.archive.list' | 'tools.archive.empty' | 'tools.archive.download' | 'tools.archive.downloaded' | 'tools.archive.files' | 'tools.archive.size' | 'tools.archive.categories' | 'tools.archive.includes' | 'tools.archive.excludes' | 'tools.archive.missing' | 'tools.archive.references' | 'tools.archive.referencePlan' | 'tools.archive.restore' | 'tools.archive.targetRoot' | 'tools.archive.pickTarget' | 'tools.archive.targetNovelId' | 'tools.archive.referencePolicy' | 'tools.archive.preserveRelative' | 'tools.archive.rewriteNovelId' | 'tools.archive.previewRestore' | 'tools.archive.restoreReady' | 'tools.archive.restoreBlocked' | 'tools.archive.conflicts' | 'tools.archive.pathRewrites' | 'tools.archive.rewrittenFiles' | 'tools.archive.rewrittenReferences' | 'tools.archive.preservedReferences' | 'tools.archive.referenceWarnings' | 'tools.archive.referenceConflicts' | 'tools.archive.tasksArchived' | 'tools.archive.autoResume' | 'tools.archive.noAutoResume' | 'tools.archive.confirmRestore' | 'tools.archive.restoreConfirm' | 'tools.archive.restoreStarted' | 'tasks.cancel' | 'tasks.cancel.title' | 'tasks.cancel.confirm' | 'tasks.cancel.done' | 'tasks.cancel.failed' | 'tasks.retry' | 'tasks.retry.title' | 'tasks.retry.notRecoverable' | 'tasks.retry.done' | 'tasks.retry.failed' | 'tasks.summary.total' | 'tasks.summary.updated' | 'tasks.filter.type' | 'tasks.filter.typeAll' | 'tasks.filter.chapter' | 'tasks.filter.keyword' | 'tasks.sort.newest' | 'tasks.sort.oldest' | 'tasks.sort.toggle' | 'tasks.progress.unknown' | 'tasks.phase.unknown' | 'tasks.confirm' | 'tasks.confirm.title' | 'tasks.confirm.done' | 'tasks.confirm.failed' | 'tasks.cancel.armYes' | 'tasks.cancel.armNo' | 'tasks.list' | 'tasks.detail.open' | 'tasks.detail.close' | 'tasks.detail.copyId' | 'tasks.detail.copied' | 'tasks.detail.events' | 'tasks.detail.eventsLoading' | 'tasks.detail.eventsEmpty' | 'tasks.detail.eventsFailed' | 'tasks.field.id' | 'tasks.field.type' | 'tasks.field.status' | 'tasks.field.phase' | 'tasks.field.chapter' | 'tasks.field.progress' | 'tasks.field.attempt' | 'tasks.field.created' | 'tasks.field.started' | 'tasks.field.updated' | 'tasks.field.completed' | 'tasks.field.summary' | 'tasks.field.resultRef' | 'tasks.field.failedStage' | 'tasks.field.errorCode' | 'tasks.field.recoverable' | 'tasks.field.yes' | 'tasks.field.no' | 'tasks.failure.cancelled' | 'tasks.failure.recoverable' | 'tasks.failure.provider' | 'tasks.failure.input' | 'tasks.failure.system' | 'tasks.jump.benchmark' | 'tasks.jump.research' | 'tasks.jump.chapter' | 'tasks.jump.review' | 'tasks.jump.unavailable' | 'tasks.jump.chapterHint' | 'tasks.jump.reviewHint' | 'tasks.jump.chapterMissing' | 'research.launch' | 'research.launch.placeholder' | 'research.launch.submit' | 'research.launch.submitting' | 'research.launch.submitted' | 'research.launch.failed' | 'research.launch.hint' | 'research.settings' | 'research.settings.provider' | 'research.settings.apiKey' | 'research.settings.remember' | 'research.settings.save' | 'research.settings.saving' | 'research.settings.saved' | 'research.settings.failed' | 'research.settings.dshHint' | 'research.settings.unavailable' | 'research.settings.notConfigured' | 'research.settings.ready' | 'research.settings.noKeyRequired' | 'research.settings.apiKeyRequired' | 'research.settings.globalHint' | 'research.settings.dshUnavailable' | 'tasks.result.toggle' | 'tasks.result.score' | 'tasks.result.issues' | 'search.preview.back' | 'search.preview.openCreation' | 'search.preview.jumpReady' | 'search.preview.identityMismatch' | 'search.preview.locatorCurrent' | 'search.preview.locatorStale' | 'search.preview.locatorUnverified' | 'search.preview.revisionUnavailable' | 'search.change.title' | 'search.change.serverOwned' | 'search.change.unavailable' | 'search.change.currentLine' | 'search.change.replacement' | 'search.change.preview' | 'search.change.previewing' | 'search.change.sourceRevision' | 'search.change.resultRevision' | 'search.change.reject' | 'search.change.confirmApply' | 'search.change.applying' | 'search.change.refreshRequired' | 'search.change.invalidApply' | 'search.change.invalidReject' | 'search.change.applied' | 'search.change.rejected' | 'search.change.refresh' | 'assets.empty' | 'assets.other' | 'assets.stages' | 'assets.aliases' | 'assets.segment.characters' | 'assets.segment.world' | 'assets.segment.progression' | 'assets.segment.references' | 'assets.segment.core' | 'assets.segment.empty' | 'assets.references.empty' | 'assets.core.empty' | 'assets.detail.loading' | 'assets.draft.restored' | 'assets.draft.unsaved' | 'assets.draft.conflict' | 'assets.detail.relations' | 'assets.detail.index' | 'assets.list.detail_refs' | 'assets.list.taboos' | 'assets.edit.linesHint' | 'assets.relation.confirmed' | 'assets.relation.registered' | 'assets.relation.incoming' | 'assets.searchPlaceholder' | 'assets.edit.open' | 'assets.edit.name' | 'assets.edit.summary' | 'assets.edit.tags' | 'assets.edit.listHint' | 'assets.edit.save' | 'assets.edit.saving' | 'assets.edit.cancel' | 'assets.edit.conflict' | 'assets.edit.conflictRefresh' | 'assets.edit.addRelation' | 'assets.edit.removeRelation' | 'assets.edit.relationTarget' | 'assets.edit.relationNote' | 'assets.edit.derivedRelations' | 'assets.edit.body' | 'assets.edit.liveLoading' | 'assets.edit.optional' | 'assets.field.tier' | 'assets.field.personality' | 'assets.field.goal' | 'assets.field.fear' | 'assets.field.appearance' | 'assets.field.voice' | 'assets.field.current_state' | 'assets.field.organization' | 'assets.field.progression_system' | 'assets.field.progression_stage' | 'assets.field.status' | 'assets.field.kind' | 'assets.field.type' | 'assets.field.subtype' | 'assets.field.state_updated_at' | 'assets.field.role' | 'assets.edit.liveFailed' | 'assets.selectHint' | 'assets.emptyTitle' | 'assets.emptyHint' | 'assets.emptyAgent' | 'assets.create.open' | 'assets.create.submit' | 'assets.create.idHint' | 'assets.create.tier' | 'assets.create.type' | 'assets.create.progressionKind' | 'assets.create.stages' | 'assets.create.stageId' | 'assets.create.stageName' | 'assets.create.addStage' | 'tasks.empty' | 'tasks.filter.all' | 'tasks.attempt' | 'tasks.status.pending' | 'tasks.status.running' | 'tasks.status.awaiting_confirmation' | 'tasks.status.completed' | 'tasks.status.failed' | 'tasks.status.cancelled' | 'tasks.status.interrupted' | 'tasks.phase.queued' | 'tasks.phase.reading' | 'tasks.phase.preparing' | 'tasks.phase.model' | 'tasks.phase.validating' | 'tasks.phase.committing' | 'tasks.phase.complete' | 'tasks.type.chapter_write' | 'tasks.type.chapter_review' | 'tasks.type.continuous_write' | 'tasks.type.revision' | 'tasks.type.source_operation' | 'tasks.type.reference_operation' | 'tasks.type.manuscript_import' | 'tasks.type.project_restore' | 'tasks.type.research' | 'tasks.type.model_benchmark' | 'graph.foreshadowing' | 'graph.relationships' | 'graph.nodes' | 'graph.connections' | 'models.embeddingNew' | 'models.embeddingDeleteConfirm' | 'models.chatTab' | 'models.embeddingTab' | 'creation.marker.defaultState' | 'graph.relayout' | 'graph.weight' | 'graph.target' | 'graph.truncated' | 'graph.validation.errors' | 'graph.empty.foreshadowing' | 'graph.empty.relationships' | 'graph.entityType' | 'graph.entityStatus' | 'graph.search' | 'graph.connectedOnly' | 'graph.neighbors' | 'graph.edgeType' | 'graph.origin' | 'graph.source' | 'graph.confirmed' | 'dag.quality' | 'dag.coverage' | 'dag.gate' | 'dag.delivery' | 'dag.current' | 'dag.stale' | 'dag.toRevision' | 'dag.toRevisionDone' | 'dag.toRevisionFailed' | 'graph.unresolved' | 'graph.kind.character' | 'graph.kind.faction' | 'graph.kind.place' | 'graph.kind.concept' | 'graph.kind.other' | 'graph.truth' | 'graph.truth.currentState' | 'graph.truth.ledger' | 'graph.truth.relationships' | 'graph.workflows' | 'graph.workflow.currentStage' | 'graph.workflow.executionHint' | 'graph.workflow.confirmHint' | 'graph.empty.truth' | 'graph.empty.truthDoc' | 'graph.empty.workflows' | 'graph.reviewDag' | 'graph.reviewFramework' | 'graph.reviewDomains' | 'graph.reviewChecks' | 'graph.reviewCriteria' | 'graph.deliveryDag' | 'graph.filter.all' | 'graph.filter.anomaly' | 'graph.filter.blocker' | 'graph.expandChecks' | 'graph.collapseChecks' | 'graph.empty.dag' | 'benchmark.title' | 'benchmark.taskType' | 'benchmark.executionEvidence' | 'benchmark.evidence' | 'benchmark.status.skipped' | 'benchmark.status.stale' | 'benchmark.task.chapter' | 'benchmark.task.outline' | 'benchmark.task.chapterHint' | 'benchmark.task.outlineHint' | 'benchmark.planner' | 'benchmark.nextChapter' | 'benchmark.chapterWritten' | 'benchmark.chapterPlanned' | 'benchmark.chapterUnavailable' | 'benchmark.customChapter' | 'benchmark.chapterId' | 'benchmark.outlineOrigin' | 'benchmark.continueOutline' | 'benchmark.customOutlineStart' | 'benchmark.outlineStart' | 'benchmark.outlineCount' | 'benchmark.rangeFrom' | 'benchmark.rangeTo' | 'benchmark.chapterUnit' | 'benchmark.invalidRange' | 'benchmark.outlineRangeHint' | 'benchmark.earliestOutlineStart' | 'benchmark.invalidChapter' | 'benchmark.historicalChapterHint' | 'benchmark.autoDag' | 'benchmark.executedDag' | 'benchmark.dagAutomatic' | 'benchmark.afterStage' | 'benchmark.reviewScope' | 'benchmark.isolatedHint' | 'benchmark.pipelineUnavailable' | 'benchmark.actualChapters' | 'benchmark.pipelineFinished' | 'benchmark.pipelineStatus' | 'benchmark.reviewIncomplete' | 'benchmark.partialScore' | 'benchmark.reviewIncompleteHint' | 'benchmark.completeReviews' | 'benchmark.reportedCoverage' | 'benchmark.coveragePending' | 'benchmark.factsPendingTitle' | 'benchmark.factsPendingHint' | 'benchmark.selectModels' | 'benchmark.description' | 'benchmark.configure' | 'benchmark.modelHint' | 'benchmark.advanced' | 'benchmark.history' | 'benchmark.results' | 'benchmark.noProfiles' | 'benchmark.chooseModels' | 'benchmark.workload' | 'benchmark.submitting' | 'benchmark.noCandidates' | 'benchmark.noEvaluations' | 'benchmark.plannedCandidates' | 'benchmark.plannedEvaluations' | 'benchmark.task' | 'benchmark.mode' | 'benchmark.mode.framework' | 'benchmark.mode.creative' | 'benchmark.mode.unknown' | 'benchmark.reviewer' | 'benchmark.chapter' | 'benchmark.repeats' | 'benchmark.words' | 'benchmark.concurrency' | 'benchmark.run' | 'benchmark.empty' | 'benchmark.select' | 'benchmark.averageScore' | 'benchmark.output' | 'benchmark.candidate' | 'benchmark.candidates' | 'benchmark.evaluations' | 'benchmark.writer' | 'benchmark.path' | 'benchmark.status' | 'benchmark.actualWords' | 'benchmark.finishReason' | 'benchmark.error' | 'benchmark.coverage' | 'benchmark.gate' | 'benchmark.delivery' | 'benchmark.productionGate' | 'benchmark.productionGateMissing' | 'benchmark.domains' | 'benchmark.latency' | 'benchmark.usage' | 'benchmark.cost' | 'benchmark.inputTokens' | 'benchmark.outputTokens' | 'benchmark.reasoningTokens' | 'benchmark.totalTokens' | 'benchmark.actualCost' | 'benchmark.costCoverage' | 'benchmark.effectiveRate' | 'benchmark.runs' | 'benchmark.sameInputGroup' | 'benchmark.comparisonIncomplete' | 'benchmark.inputProvenance' | 'benchmark.runPhases' | 'benchmark.phase.created' | 'benchmark.phase.started' | 'benchmark.phase.completed' | 'benchmark.contextHash' | 'benchmark.comparisonKey' | 'benchmark.promptVersion' | 'benchmark.rubricVersion' | 'benchmark.blindReview' | 'benchmark.contextStrategy' | 'benchmark.manifestVersion' | 'benchmark.tokenEstimator' | 'benchmark.packetRevision' | 'benchmark.sourceRevision' | 'benchmark.estimatedTokens' | 'benchmark.characters' | 'benchmark.contextSources' | 'benchmark.sourcePresent' | 'benchmark.sourceMissing' | 'benchmark.responseIdentity' | 'benchmark.callBudget' | 'benchmark.cancelNote' | 'benchmark.cancelRun' | 'benchmark.cancelling' | 'benchmark.cancellingEllipsis' | 'benchmark.cancellingInflight' | 'benchmark.outputCap' | 'benchmark.selectModelFirst' | 'benchmark.unconfigured' | 'models.title' | 'models.list' | 'models.editor' | 'models.new' | 'models.empty' | 'models.id' | 'models.label' | 'models.provider' | 'models.protocol.openai' | 'models.protocol.anthropic' | 'models.modelId' | 'models.baseUrl' | 'models.apiFormat' | 'models.context' | 'models.output' | 'models.credential' | 'models.embeddingProvider' | 'models.embeddingProviderOpenai' | 'models.embeddingProviderLocal' | 'models.embeddingProviderUnknown' | 'models.embeddingProviderOpenaiHint' | 'models.embeddingProviderLocalHint' | 'models.embeddingLocalPreset' | 'models.vectorDimensionsLocalHint' | 'models.embeddingModel' | 'models.embeddingCredential' | 'models.credentialHint' | 'models.authSource' | 'models.authApiKey' | 'models.authConsole' | 'models.consoleHint' | 'models.goWorkspace' | 'models.goWorkspaceHint' | 'models.remember' | 'models.save' | 'models.chatTest' | 'models.embeddingTest' | 'models.vectorParameters' | 'models.vectorDimension' | 'models.vectorMaxTokens' | 'models.vectorCount' | 'models.vectorDimensionsHint' | 'models.test.invalidResponseHint' | 'models.test.unsupportedHint' | 'models.delete' | 'models.delete.confirm' | 'models.delete.blocked' | 'models.delete.wouldFail' | 'models.test.untested' | 'models.test.ok' | 'models.test.failed' | 'models.dependencies' | 'models.dependenciesHint' | 'models.fallback' | 'models.chooseFallback' | 'models.routes' | 'models.routesSave' | 'models.routeChatSplit' | 'models.hostModels' | 'models.hostModelsUnavailable' | 'models.hostModelsEmpty' | 'models.hostUse' | 'models.hostProfileCreated' | 'models.hostProfileHint' | 'models.saved' | 'models.savePending' | 'models.deleted' | 'models.chatOk' | 'models.embeddingOk' | 'models.configured' | 'models.missing' | 'models.routesSaved' | 'models.staleHostHint' | 'models.group.basic' | 'models.group.connection' | 'models.group.generation' | 'models.group.embedding' | 'models.group.credentials' | 'models.group.routeUsage' | 'models.temperature' | 'models.timeout' | 'models.embeddingBaseUrl' | 'models.validation.required' | 'models.validation.positive' | 'models.validation.temperature' | 'models.validation.embeddingProvider' | 'models.unsavedChanges' | 'models.unsavedDiscard' | 'models.unsavedKeep' | 'models.test.loading' | 'models.usedByRoutes' | 'models.noRoutes' | 'models.delete.resultingRoutes' | 'models.embeddingEmpty' | 'models.embeddingConfigured' | 'models.embeddingMissing' | 'models.active' | 'models.inactive' | 'models.route.chat' | 'models.route.chapter_write' | 'models.route.review' | 'models.route.source_extract' | 'models.route.revision' | 'models.route.search' | 'models.route.research' | 'models.routesImpact' | 'models.routesUnchanged' | 'models.routesUnassigned' | 'models.embedConfigured' | 'models.embedMissing' | 'models.capability.chat' | 'models.capability.embedding' | 'research.reports' | 'research.unavailable' | 'research.empty' | 'research.selectHint' | 'research.report.loading' | 'research.quality' | 'research.language' | 'research.filter.keyword' | 'research.filter.status' | 'research.filter.sources' | 'research.filter.all' | 'research.status.succeeded' | 'research.status.failed' | 'research.status.needsReview' | 'research.status.unknown' | 'research.sourcesAvailable' | 'research.sourcesUnavailable' | 'research.sourcesEmpty' | 'research.sources' | 'research.sourceCheck' | 'research.source.cited' | 'research.source.uncited' | 'research.exportMarkdown' | 'research.referenceOnly' | 'research.prompt' | 'research.taskId' | 'research.episodeId' | 'research.model' | 'research.searchProvider' | 'research.createdAt' | 'research.completedAt' | 'research.latency' | 'research.wordCount' | 'research.tokens' | 'research.cost' | 'research.sourcesStatus' | 'research.metrics' | 'search.placeholder' | 'search.hint' | 'search.empty' | 'search.indexed' | 'search.timeout' | 'search.scope.all' | 'search.scope.outline' | 'search.scope.core' | 'search.scope.characters' | 'search.scope.settings' | 'search.scope.continuity' | 'search.scope.chapters' | 'search.scope.sources' | 'assets.references' | 'reference.intent.reference' | 'reference.intent.continuation' | 'reference.intent.canon' | 'reference.intent.migration' | 'reference.structure.awaiting_confirmation' | 'reference.structure.confirmed' | 'reference.analysis.complete' | 'reference.analysis.pending' | 'reference.chars' | 'reference.content.loading' | 'reference.content.full' | 'review.running' | 'review.passed' | 'review.failed' | 'review.score' | 'review.issues' | 'review.suggestion' | 'review.quote' | 'review.dimension' | 'review.coverage' | 'review.gate' | 'review.delivery' | 'review.execution' | 'review.priority' | 'review.severity.critical' | 'review.severity.warning' | 'review.severity.info' | 'review.severity.blocker' | 'review.severity.high' | 'review.severity.medium' | 'review.severity.low' | 'review.priority.blocker' | 'review.priority.high' | 'review.priority.medium' | 'review.priority.low' | 'review.status.pass' | 'review.status.blocked' | 'review.status.inconclusive' | 'review.status.revise' | 'review.status.completed' | 'review.status.partial' | 'review.status.failed' | 'review.status.stale' | 'review.status.unknown' | 'review.rawTitle' | 'settings.section.label' | 'settings.section.intro' | 'settings.section.runtime' | 'settings.section.backend' | 'settings.section.hostModel' | 'settings.section.unavailable' | 'settings.section.prepare' | 'settings.section.retry' | 'settings.section.working' | 'settings.section.cancel' | 'settings.section.backendManaged' | 'settings.section.backendExternal' | 'settings.section.backendDown' | 'settings.section.hostModelNone' | 'settings.section.hostModelHint' | 'settings.section.hostModels' | 'settings.section.hostModelsUnavailable' | 'settings.section.hostModelsEmpty' | 'settings.section.hostModelsHint' | 'settings.section.diagnostics' | 'settings.section.diagnosticsHint' | 'settings.section.phaseLabel' | 'settings.tab.environment' | 'settings.tab.models' | 'settings.tab.search' | 'settings.tab.host' | 'settings.tab.modelsHint' | 'settings.phase.idle' | 'settings.phase.busy' | 'settings.phase.ready' | 'settings.phase.error' | 'settings.phase.cancelled' | 'settings.phase.stopped' | 'settings.phase.uninstalled';
6
6
  declare module '@deepseek-ai/dsh-client-ui-slots' {
7
7
  interface LocaleNamespaceMap {
8
8
  /** The 稿件/大纲/资产 view tab labels and panel state strings. */
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Browser chrome the OpenWrite workbench owns inside the host conversation shell.
3
+ *
4
+ * The host parks its composer in a seat element (`[data-composer-seat]`) inside
5
+ * the conversation scroller (`[data-conversation-scroll]`). The seat is what
6
+ * pushed the workbench's bottom edge up: the host reserved the seat's band out
7
+ * of the content area, so our panel stopped short of the viewport bottom and
8
+ * left a bare white slab under the composer — a flat white strip, not a
9
+ * composer floating over the workbench.
10
+ *
11
+ * The OpenWrite workbench is a full-screen surface, not a chat transcript: it
12
+ * has its own navigation, its own panes and its own scrolling. A centered
13
+ * composer card floating over that layout covers real content (the outline
14
+ * card was cut in half by it). So the seat is hidden while one of our views is
15
+ * mounted and the workbench takes the whole content area.
16
+ *
17
+ * The host exposes no slot for "hide the composer". `conversation.composer` is
18
+ * a chain, but a chain selector can only read session state, not the active
19
+ * view, and it runs before the view mounts — so it cannot answer "is this our
20
+ * view?" at the moment it is asked. A `:has()` rule over the host's own stable
21
+ * data attributes is the one hook that reacts to the mounted view, and it is
22
+ * scoped to our pages: the host's Chat and Trajectory views keep their
23
+ * composer because they never carry the marker.
24
+ */
25
+ /** Marker attribute carried by the root element of every OpenWrite workbench view. */
26
+ export declare const WORKSPACE_MARKER_ATTRIBUTE = "data-openwrite-workspace";
27
+ /**
28
+ * The rule that hides the host composer seat while an OpenWrite view is mounted.
29
+ *
30
+ * `:has()` matches the scroller that *contains* a workbench marker, and the
31
+ * direct-child combinator pins the rule to that scroller's own seat, so a seat
32
+ * belonging to some other scroller is never touched.
33
+ */
34
+ export declare const WORKSPACE_CHROME_CSS = "[data-conversation-scroll]:has([data-openwrite-workspace]) > [data-composer-seat] { display: none; }";
35
+ /**
36
+ * Install the workbench chrome stylesheet once per document.
37
+ *
38
+ * Safe to call from every client activation: the second call finds the
39
+ * existing element and returns.
40
+ */
41
+ export declare function installWorkspaceChromeStyles(): void;
@@ -35,13 +35,15 @@
35
35
  "platform": "web"
36
36
  },
37
37
  "compatibility": {
38
- "dsh": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.2.0-rc.2 || 0.2.1-rc.2 || 0.2.1-rc.3",
38
+ "dsh": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.2.0-rc.2 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5",
39
39
  "dshReleases": {
40
40
  "0.1.2-rc.1": "compatible",
41
41
  "0.1.5-alpha.1": "compatible",
42
42
  "0.2.0-rc.2": "compatible",
43
43
  "0.2.1-rc.2": "compatible",
44
- "0.2.1-rc.3": "compatible"
44
+ "0.2.1-rc.3": "compatible",
45
+ "0.2.1-rc.4": "compatible",
46
+ "0.2.1-rc.5": "compatible"
45
47
  }
46
48
  }
47
49
  },
@@ -71,7 +73,7 @@
71
73
  },
72
74
  "peerDependencies": {
73
75
  "@deepseek-ai/cordis": "4.0.2 || ~4.0.4",
74
- "@deepseek-ai/dsh-host-webserver": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.2.0-rc.2 || 0.2.1-rc.2 || 0.2.1-rc.3",
76
+ "@deepseek-ai/dsh-host-webserver": "0.1.2-rc.1 || 0.1.5-alpha.1 || 0.2.0-rc.2 || 0.2.1-rc.2 || 0.2.1-rc.3 || 0.2.1-rc.4 || 0.2.1-rc.5",
75
77
  "react": "^18.2.0",
76
78
  "react-dom": "^18.2.0"
77
79
  },