dsh-openwrite 0.2.27 → 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.
- package/LICENSE +1 -1
- package/README.md +55 -6
- package/THIRD_PARTY_NOTICES.md +4 -3
- package/companions.mjs +508 -0
- package/cordis.patch.yml +0 -2
- package/docs/CLOSED_ISSUE_FOLLOWUPS.md +5 -3
- package/docs/COMPANION_PLUGINS.md +142 -0
- package/docs/CONTEXT_SLOTS.md +60 -0
- package/docs/COST_MEASUREMENT.md +2 -2
- package/docs/DEVELOPMENT.md +6 -11
- package/docs/DSH_STORE.md +14 -2
- package/docs/EDITOR_SAFETY_REPAIRS.md +17 -0
- package/docs/INSTALL.md +112 -4
- package/docs/ISSUES_121_123.md +97 -0
- package/docs/ISSUES_140_142.md +58 -0
- package/docs/ISSUES_149_150_151.md +77 -0
- package/docs/ISSUES_98_100.md +2 -0
- package/docs/ISSUE_123_FOLLOWUP.md +55 -0
- package/docs/ISSUE_146_REVIEW_EVIDENCE.md +53 -0
- package/docs/LEARNING.md +1 -1
- package/docs/MOBILE_READINESS.md +62 -0
- package/docs/PLUGIN_MAINTENANCE.md +1 -3
- package/docs/RELEASE_ACCEPTANCE.md +90 -3
- package/docs/REVIEW_ROUND_22.md +67 -0
- package/docs/REVIEW_ROUND_23.md +48 -0
- package/docs/REVIEW_ROUND_25.md +51 -0
- package/docs/SELECTION_UPGRADE_REPAIRS.md +16 -0
- package/docs/TOOLS.md +933 -0
- package/docs/WORKFLOWS.md +5 -5
- package/package.json +18 -21
- package/packages/openwrite-bridge/lib/client.d.ts +0 -1
- package/packages/openwrite-bridge/lib/client.js +90 -9
- package/packages/openwrite-bridge/lib/contracts-generated.js +2 -1
- package/packages/openwrite-bridge/lib/dog-delivery.d.ts +1 -0
- package/packages/openwrite-bridge/lib/dog-delivery.js +10 -4
- package/packages/openwrite-bridge/lib/dog-review.js +15 -3
- package/packages/openwrite-bridge/lib/domain.d.ts +27 -0
- package/packages/openwrite-bridge/lib/domain.js +250 -29
- package/packages/openwrite-bridge/lib/host-llm.d.ts +188 -0
- package/packages/openwrite-bridge/lib/host-llm.js +657 -0
- package/packages/openwrite-bridge/lib/host-web.d.ts +61 -0
- package/packages/openwrite-bridge/lib/host-web.js +166 -0
- package/packages/openwrite-bridge/lib/index.d.ts +4 -0
- package/packages/openwrite-bridge/lib/index.js +150 -6
- package/packages/openwrite-bridge/lib/managed-runtime.d.ts +47 -2
- package/packages/openwrite-bridge/lib/managed-runtime.js +179 -35
- package/packages/openwrite-bridge/lib/tool-policy.js +39 -12
- package/packages/openwrite-bridge/lib/tools.js +1238 -1219
- package/packages/openwrite-bridge/package.json +7 -5
- package/packages/studio-panel/lib/client.js +116667 -114773
- package/packages/studio-panel/lib/client.js.map +1 -1
- package/packages/studio-panel/lib/types/client/LaunchOpenWrite.d.ts +10 -0
- package/packages/studio-panel/lib/types/client/ModelView.d.ts +28 -4
- package/packages/studio-panel/lib/types/client/OpenWriteSettings.d.ts +64 -0
- package/packages/studio-panel/lib/types/client/SceneWorkbench.d.ts +2 -0
- package/packages/studio-panel/lib/types/client/SearchSettings.d.ts +2 -0
- package/packages/studio-panel/lib/types/client/SerialWritingView.d.ts +2 -1
- package/packages/studio-panel/lib/types/client/TurnMutationSummary.d.ts +2 -0
- package/packages/studio-panel/lib/types/client/VditorBody.d.ts +8 -2
- package/packages/studio-panel/lib/types/client/api.d.ts +41 -2
- package/packages/studio-panel/lib/types/client/browser-download.d.ts +4 -0
- package/packages/studio-panel/lib/types/client/companions.d.ts +46 -0
- package/packages/studio-panel/lib/types/client/dto.d.ts +22 -0
- package/packages/studio-panel/lib/types/client/locales.d.ts +1 -1
- package/packages/studio-panel/lib/types/client/manuscript-annotations.d.ts +2 -1
- package/packages/studio-panel/lib/types/client/manuscript-overlay.d.ts +2 -1
- package/packages/studio-panel/lib/types/client/manuscript-selection.d.ts +18 -5
- package/packages/studio-panel/lib/types/client/selection-coordinates.d.ts +15 -0
- package/packages/studio-panel/lib/types/client/workspace-chrome.d.ts +41 -0
- package/packages/studio-panel/package.json +5 -3
- package/plugin.mjs +159 -20
- package/preset-definition.mjs +144 -4
- package/presets/openwrite/agent.cordis.yml +7 -9
- package/presets/openwrite/ops-integration.mjs +28 -0
- package/presets/openwrite/preset.yml +2 -1
- package/presets/openwrite/skills/canon/SKILL.md +3 -3
- package/presets/openwrite/skills/delivery-artifact-query/SKILL.md +41 -0
- package/presets/openwrite/skills/dialoguequality/SKILL.md +16 -17
- package/presets/openwrite/skills/dog-delivery-verification/SKILL.md +113 -0
- package/presets/openwrite/skills/export-book/SKILL.md +3 -3
- package/presets/openwrite/skills/foreshadow/SKILL.md +1 -1
- package/presets/openwrite/skills/foreshadowing-system/SKILL.md +16 -25
- package/presets/openwrite/skills/import-artifact-query/SKILL.md +30 -0
- package/presets/openwrite/skills/learn/SKILL.md +3 -3
- package/presets/openwrite/skills/novel-creator/SKILL.md +10 -10
- package/presets/openwrite/skills/novel-reviewer/SKILL.md +11 -11
- package/presets/openwrite/skills/progress/SKILL.md +1 -1
- package/presets/openwrite/skills/review-artifact-query/SKILL.md +41 -0
- package/presets/openwrite/skills/review-chapter/SKILL.md +2 -2
- package/presets/openwrite/skills/revise-span/SKILL.md +5 -5
- package/presets/openwrite/skills/style-system/SKILL.md +13 -6
- package/presets/openwrite/skills/truth-validation/SKILL.md +9 -12
- package/presets/openwrite/skills/workflow-manager/SKILL.md +13 -13
- package/presets/openwrite/skills/world-query/SKILL.md +16 -11
- package/presets/openwrite/skills/write-next/SKILL.md +1 -1
- package/release/{openwrite-5.8.16-py3-none-any.whl → openwrite-5.8.30-py3-none-any.whl} +0 -0
- package/release/runtime-manifest.json +4 -12
- package/release/source.json +21 -21
- package/release/wheels/licenses/OPENSSL-3.6.3-LICENSE.txt +225 -0
- package/scripts/maintenance.mjs +67 -7
- package/scripts/plugin-doctor.mjs +179 -0
- package/scripts/prepare.mjs +11 -2
- package/scripts/safe-upgrade.mjs +141 -13
- package/dog-tools.mjs +0 -11
- package/presets/openwrite/skills/dog-delivery-query/SKILL.md +0 -42
- package/presets/openwrite/skills/dog-import-query/SKILL.md +0 -29
- package/presets/openwrite/skills/dog-review-query/SKILL.md +0 -42
- package/scripts/dog/delivery-stage.js +0 -32
- package/scripts/dog/import-chapter.js +0 -20
- package/scripts/dog/import-record.js +0 -35
- package/scripts/dog/review-dimension.js +0 -41
- package/scripts/dog/review-record.js +0 -42
- package/vendor/dsh-dog/LICENSE +0 -29
- package/vendor/dsh-dog/README.md +0 -114
- package/vendor/dsh-dog/UPSTREAM.md +0 -30
- package/vendor/dsh-dog/cordis.patch.yml +0 -14
- package/vendor/dsh-dog/lib/client.js +0 -2960
- package/vendor/dsh-dog/lib/client.js.map +0 -1
- package/vendor/dsh-dog/lib/core-BAlgZpLq.js +0 -2074
- package/vendor/dsh-dog/lib/core-BiEBMLz3.d.ts +0 -495
- package/vendor/dsh-dog/lib/core.d.ts +0 -2
- package/vendor/dsh-dog/lib/core.js +0 -2
- package/vendor/dsh-dog/lib/index.d.ts +0 -143
- package/vendor/dsh-dog/lib/index.js +0 -1279
- package/vendor/dsh-dog/package.json +0 -110
- package/vendor/dsh-dog/schemas/schema-0.2/graph.schema.json +0 -139
- package/vendor/dsh-dog/schemas/schema-0.2/report.schema.json +0 -87
- package/vendor/dsh-dog/schemas/schema-0.2/run.schema.json +0 -259
- package/vendor/dsh-dog/schemas/schema-0.2/runtime-event.schema.json +0 -105
- 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 {
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
@@ -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';
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* compact subset plus headings/code/table (card-body scope).
|
|
11
11
|
*/
|
|
12
12
|
import type { PropsLocale } from '@deepseek-ai/dsh-client-ui-slots';
|
|
13
|
+
import type { EditorSerialization } from './selection-coordinates.ts';
|
|
13
14
|
import { type ManuscriptSelection } from './manuscript-selection.ts';
|
|
14
15
|
import type { ManuscriptAnnotation } from './manuscript-annotations.ts';
|
|
15
16
|
/** The slice of the bundled Vditor API this editor uses. */
|
|
@@ -29,6 +30,9 @@ type TFunc = PropsLocale<'studio-panel'>['t'];
|
|
|
29
30
|
*/
|
|
30
31
|
export declare function loadVditor(): Promise<VditorCtor>;
|
|
31
32
|
export type ManuscriptEditorApi = {
|
|
33
|
+
getValue: () => string;
|
|
34
|
+
getSerialization: () => EditorSerialization | undefined;
|
|
35
|
+
flush: () => void;
|
|
32
36
|
insertAtCaret: (markdown: string) => void;
|
|
33
37
|
revealQuote: (quote: string, start: number) => boolean;
|
|
34
38
|
};
|
|
@@ -36,18 +40,20 @@ interface VditorBodyProps {
|
|
|
36
40
|
/** Initial markdown (the editor is the source of truth afterwards). */
|
|
37
41
|
initial: string;
|
|
38
42
|
onChange: (value: string) => void;
|
|
43
|
+
onInputStateChange?: (pending: boolean) => void;
|
|
39
44
|
onSelectionChange?: (selection: ManuscriptSelection | null) => void;
|
|
40
45
|
onReady?: () => void;
|
|
41
|
-
onFailed: () => void;
|
|
46
|
+
onFailed: (cause?: unknown) => void;
|
|
42
47
|
disabled: boolean;
|
|
43
48
|
/** The consumer can synchronously retain callbacks delivered during cleanup. */
|
|
44
49
|
flushOnLeave?: boolean;
|
|
45
50
|
annotations?: readonly ManuscriptAnnotation[];
|
|
51
|
+
annotationSource?: string;
|
|
46
52
|
onInsertMarker?: () => void;
|
|
47
53
|
onEditorApi?: (api: ManuscriptEditorApi | null) => void;
|
|
48
54
|
}
|
|
49
55
|
/** One Vditor IR instance bound to the shell theme; destroyed on unmount. */
|
|
50
|
-
export declare function VditorBody({ initial, onChange, onSelectionChange, onReady, onFailed, disabled, flushOnLeave, annotations, onInsertMarker, onEditorApi, }: VditorBodyProps): import("react").JSX.Element;
|
|
56
|
+
export declare function VditorBody({ initial, onChange, onInputStateChange, onSelectionChange, onReady, onFailed, disabled, flushOnLeave, annotations, annotationSource, onInsertMarker, onEditorApi, }: VditorBodyProps): import("react").JSX.Element;
|
|
51
57
|
/** Loading line shown while the Vditor script is in flight. */
|
|
52
58
|
export declare function VditorLoading({ t }: {
|
|
53
59
|
t: TFunc;
|
|
@@ -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
|
|
11
|
-
* all
|
|
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.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. */
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type QuoteAnchor } from './manuscript-selection.ts';
|
|
2
|
+
import { type EditorSerialization } from './selection-coordinates.ts';
|
|
2
3
|
export declare const ANNOTATION_COLORS: readonly ["amber", "rose", "sky", "lime", "violet"];
|
|
3
4
|
export type AnnotationColor = (typeof ANNOTATION_COLORS)[number];
|
|
4
5
|
export declare const DEFAULT_ANNOTATION_COLOR: AnnotationColor;
|
|
@@ -30,7 +31,7 @@ export declare function unsavedAnnotationGuard(dirty: boolean): 'ok' | 'save-fir
|
|
|
30
31
|
export declare function annotationLocateLabel(anchor: QuoteAnchor | {
|
|
31
32
|
state: AnnotationAnchorState;
|
|
32
33
|
}): string;
|
|
33
|
-
export declare function liveAnnotationAnchor(content: string, item: ManuscriptAnnotation): QuoteAnchor;
|
|
34
|
+
export declare function liveAnnotationAnchor(content: string, item: ManuscriptAnnotation, source?: string, serialization?: EditorSerialization): QuoteAnchor;
|
|
34
35
|
export declare function revalidateAnnotationRange(content: string, selection: {
|
|
35
36
|
start: number;
|
|
36
37
|
end: number;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AnnotationColor, ManuscriptAnnotation } from './manuscript-annotations.ts';
|
|
2
2
|
import type { MarkerSpan } from './manuscript-markers.ts';
|
|
3
|
+
import type { EditorSerialization } from './selection-coordinates.ts';
|
|
3
4
|
export type OverlayKind = 'note' | 'state' | 'relation' | 'invalid';
|
|
4
5
|
export type OverlayBand = {
|
|
5
6
|
kind: OverlayKind;
|
|
@@ -11,7 +12,7 @@ export type OverlayBand = {
|
|
|
11
12
|
title: string;
|
|
12
13
|
};
|
|
13
14
|
/** Display-only bands. Never written back into markdown. */
|
|
14
|
-
export declare function overlayBands(content: string, notes: readonly ManuscriptAnnotation[], markers: readonly MarkerSpan[]): OverlayBand[];
|
|
15
|
+
export declare function overlayBands(content: string, notes: readonly ManuscriptAnnotation[], markers: readonly MarkerSpan[], source?: string, serialization?: EditorSerialization): OverlayBand[];
|
|
15
16
|
export declare const OVERLAY_THEME: {
|
|
16
17
|
readonly light: {
|
|
17
18
|
readonly note: {
|