dsh-openwrite 0.2.8
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 +201 -0
- package/README.md +107 -0
- package/THIRD_PARTY_NOTICES.md +33 -0
- package/assets/logo-dark.svg +31 -0
- package/assets/logo-light.svg +31 -0
- package/cordis.patch.yml +11 -0
- package/docs/BENCHMARK_TASKS.md +54 -0
- package/docs/COST_MEASUREMENT.md +39 -0
- package/docs/DEVELOPMENT.md +65 -0
- package/docs/DSH_STORE.md +58 -0
- package/docs/FRAMEWORK_ADVANTAGES.md +288 -0
- package/docs/IMPROVEMENT_PLAN.md +252 -0
- package/docs/INSTALL.md +99 -0
- package/docs/LEARNING.md +68 -0
- package/docs/OPEN_SOURCE_NOVEL_AUDIT.md +191 -0
- package/docs/PLUGIN_MAINTENANCE.md +54 -0
- package/docs/PLUGIN_MAINTENANCE_RC7.md +157 -0
- package/docs/QA_20260908.md +103 -0
- package/docs/QA_20260909_BENCHMARK.md +24 -0
- package/docs/RELEASE_ACCEPTANCE.md +116 -0
- package/docs/REVIEW_DAG_FRAMEWORK.md +82 -0
- package/docs/TARGETED_NOVEL_PROJECT_REVIEW.md +167 -0
- package/docs/WORKFLOWS.md +74 -0
- package/docs/WORKSPACE_CONTEXT_CONTRACT.md +125 -0
- package/docs/WORKSPACE_INTEGRATION_GOAL.md +278 -0
- package/docs/research/autosave-race-repro.mjs +133 -0
- package/docs/research/framework-stats-2026-09-05.json +116 -0
- package/dog-tools.mjs +11 -0
- package/package.json +132 -0
- package/packages/openwrite-bridge/LICENSE +201 -0
- package/packages/openwrite-bridge/cordis.patch.yml +10 -0
- package/packages/openwrite-bridge/lib/client.d.ts +95 -0
- package/packages/openwrite-bridge/lib/client.js +193 -0
- package/packages/openwrite-bridge/lib/contracts-generated.d.ts +367 -0
- package/packages/openwrite-bridge/lib/contracts-generated.js +1764 -0
- package/packages/openwrite-bridge/lib/dog-delivery.d.ts +12 -0
- package/packages/openwrite-bridge/lib/dog-delivery.js +362 -0
- package/packages/openwrite-bridge/lib/dog-review.d.ts +50 -0
- package/packages/openwrite-bridge/lib/dog-review.js +470 -0
- package/packages/openwrite-bridge/lib/domain.d.ts +70 -0
- package/packages/openwrite-bridge/lib/domain.js +496 -0
- package/packages/openwrite-bridge/lib/index.d.ts +17 -0
- package/packages/openwrite-bridge/lib/index.js +89 -0
- package/packages/openwrite-bridge/lib/managed-runtime.d.ts +95 -0
- package/packages/openwrite-bridge/lib/managed-runtime.js +510 -0
- package/packages/openwrite-bridge/lib/preset-tools.d.ts +13 -0
- package/packages/openwrite-bridge/lib/preset-tools.js +18 -0
- package/packages/openwrite-bridge/lib/tool-policy.d.ts +6 -0
- package/packages/openwrite-bridge/lib/tool-policy.js +56 -0
- package/packages/openwrite-bridge/lib/tools.d.ts +24 -0
- package/packages/openwrite-bridge/lib/tools.js +2404 -0
- package/packages/openwrite-bridge/package.json +67 -0
- package/packages/studio-panel/LICENSE +21 -0
- package/packages/studio-panel/README.md +51 -0
- package/packages/studio-panel/cordis.patch.yml +5 -0
- package/packages/studio-panel/lib/client.js +158087 -0
- package/packages/studio-panel/lib/client.js.map +1 -0
- package/packages/studio-panel/lib/index.js +50 -0
- package/packages/studio-panel/lib/types/client/AssetEditor.d.ts +122 -0
- package/packages/studio-panel/lib/types/client/AssetsView.d.ts +43 -0
- package/packages/studio-panel/lib/types/client/BenchmarkView.d.ts +9 -0
- package/packages/studio-panel/lib/types/client/ContinuousReader.d.ts +13 -0
- package/packages/studio-panel/lib/types/client/CreationView.d.ts +6 -0
- package/packages/studio-panel/lib/types/client/DagCanvas.d.ts +11 -0
- package/packages/studio-panel/lib/types/client/DiscardDraftDialog.d.ts +8 -0
- package/packages/studio-panel/lib/types/client/DomainToolCard.d.ts +9 -0
- package/packages/studio-panel/lib/types/client/GraphView.d.ts +46 -0
- package/packages/studio-panel/lib/types/client/HeaderChrome.d.ts +18 -0
- package/packages/studio-panel/lib/types/client/LaunchOpenWrite.d.ts +13 -0
- package/packages/studio-panel/lib/types/client/LibraryView.d.ts +6 -0
- package/packages/studio-panel/lib/types/client/MarkdownText.d.ts +3 -0
- package/packages/studio-panel/lib/types/client/ModelView.d.ts +9 -0
- package/packages/studio-panel/lib/types/client/OperationsView.d.ts +6 -0
- package/packages/studio-panel/lib/types/client/OutlinePlans.d.ts +37 -0
- package/packages/studio-panel/lib/types/client/OutlineView.d.ts +29 -0
- package/packages/studio-panel/lib/types/client/ResearchView.d.ts +7 -0
- package/packages/studio-panel/lib/types/client/ReviewCard.d.ts +28 -0
- package/packages/studio-panel/lib/types/client/SceneWorkbench.d.ts +55 -0
- package/packages/studio-panel/lib/types/client/SearchView.d.ts +33 -0
- package/packages/studio-panel/lib/types/client/TasksView.d.ts +11 -0
- package/packages/studio-panel/lib/types/client/TransferWorkspaces.d.ts +19 -0
- package/packages/studio-panel/lib/types/client/TurnMutationSummary.d.ts +62 -0
- package/packages/studio-panel/lib/types/client/VditorBody.d.ts +55 -0
- package/packages/studio-panel/lib/types/client/WorkbenchStore.d.ts +121 -0
- package/packages/studio-panel/lib/types/client/api.d.ts +72 -0
- package/packages/studio-panel/lib/types/client/asset-drafts.d.ts +20 -0
- package/packages/studio-panel/lib/types/client/benchmark-options.d.ts +43 -0
- package/packages/studio-panel/lib/types/client/draft-store.d.ts +26 -0
- package/packages/studio-panel/lib/types/client/dto.d.ts +517 -0
- package/packages/studio-panel/lib/types/client/index.d.ts +4 -0
- package/packages/studio-panel/lib/types/client/locales.d.ts +15 -0
- package/packages/studio-panel/lib/types/client/manuscript-annotations.d.ts +59 -0
- package/packages/studio-panel/lib/types/client/manuscript-markers.d.ts +61 -0
- package/packages/studio-panel/lib/types/client/manuscript-mentions.d.ts +30 -0
- package/packages/studio-panel/lib/types/client/manuscript-overlay-dom.d.ts +7 -0
- package/packages/studio-panel/lib/types/client/manuscript-overlay.d.ts +42 -0
- package/packages/studio-panel/lib/types/client/manuscript-selection.d.ts +59 -0
- package/packages/studio-panel/lib/types/client/model-view-memory.d.ts +17 -0
- package/packages/studio-panel/lib/types/client/storage.d.ts +8 -0
- package/packages/studio-panel/lib/types/client/workbench-epochs.d.ts +16 -0
- package/packages/studio-panel/lib/types/client/workspace-context.d.ts +52 -0
- package/packages/studio-panel/lib/types/client/writing-scope.d.ts +7 -0
- package/packages/studio-panel/lib/types/index.d.ts +5 -0
- package/packages/studio-panel/package.json +105 -0
- package/packages/studio-panel/vendor/vditor/LICENSE +21 -0
- package/packages/studio-panel/vendor/vditor/dist/css/content-theme/dark.css +123 -0
- package/packages/studio-panel/vendor/vditor/dist/css/content-theme/light.css +101 -0
- package/packages/studio-panel/vendor/vditor/dist/index.css +1823 -0
- package/packages/studio-panel/vendor/vditor/dist/index.min.js +1 -0
- package/packages/studio-panel/vendor/vditor/dist/js/i18n/zh_CN.js +86 -0
- package/packages/studio-panel/vendor/vditor/dist/js/icons/ant.js +174 -0
- package/packages/studio-panel/vendor/vditor/dist/js/lute/lute.min.js +72 -0
- package/plugin.d.ts +3 -0
- package/plugin.mjs +80 -0
- package/presets/README.md +32 -0
- package/presets/openwrite/agent.cordis.yml +317 -0
- package/presets/openwrite/preset.yml +3 -0
- package/presets/openwrite/skills/canon/SKILL.md +15 -0
- package/presets/openwrite/skills/dialoguequality/SKILL.md +166 -0
- package/presets/openwrite/skills/dog-delivery-query/SKILL.md +40 -0
- package/presets/openwrite/skills/dog-import-query/SKILL.md +27 -0
- package/presets/openwrite/skills/dog-review-query/SKILL.md +40 -0
- package/presets/openwrite/skills/export-book/SKILL.md +14 -0
- package/presets/openwrite/skills/foreshadow/SKILL.md +14 -0
- package/presets/openwrite/skills/foreshadowing-system/SKILL.md +125 -0
- package/presets/openwrite/skills/learn/SKILL.md +24 -0
- package/presets/openwrite/skills/novel-creator/SKILL.md +88 -0
- package/presets/openwrite/skills/novel-creator/templates/beat_templates.yaml +179 -0
- package/presets/openwrite/skills/novel-creator/templates/example_usage.yaml +74 -0
- package/presets/openwrite/skills/novel-reviewer/SKILL.md +85 -0
- package/presets/openwrite/skills/oh-story-deslop/LICENSE +21 -0
- package/presets/openwrite/skills/oh-story-deslop/SKILL.md +36 -0
- package/presets/openwrite/skills/oh-story-deslop/agents/openai.yaml +4 -0
- package/presets/openwrite/skills/oh-story-deslop/references/method.md +22 -0
- package/presets/openwrite/skills/oh-story-long-analyze/LICENSE +21 -0
- package/presets/openwrite/skills/oh-story-long-analyze/SKILL.md +37 -0
- package/presets/openwrite/skills/oh-story-long-analyze/agents/openai.yaml +4 -0
- package/presets/openwrite/skills/oh-story-long-analyze/references/method.md +22 -0
- package/presets/openwrite/skills/oh-story-long-scan/LICENSE +21 -0
- package/presets/openwrite/skills/oh-story-long-scan/SKILL.md +36 -0
- package/presets/openwrite/skills/oh-story-long-scan/agents/openai.yaml +4 -0
- package/presets/openwrite/skills/oh-story-long-scan/references/method.md +21 -0
- package/presets/openwrite/skills/oh-story-long-write/LICENSE +21 -0
- package/presets/openwrite/skills/oh-story-long-write/SKILL.md +37 -0
- package/presets/openwrite/skills/oh-story-long-write/agents/openai.yaml +4 -0
- package/presets/openwrite/skills/oh-story-long-write/references/method.md +33 -0
- package/presets/openwrite/skills/oh-story-review/LICENSE +21 -0
- package/presets/openwrite/skills/oh-story-review/SKILL.md +36 -0
- package/presets/openwrite/skills/oh-story-review/agents/openai.yaml +4 -0
- package/presets/openwrite/skills/oh-story-review/references/method.md +25 -0
- package/presets/openwrite/skills/progress/SKILL.md +16 -0
- package/presets/openwrite/skills/review-chapter/SKILL.md +17 -0
- package/presets/openwrite/skills/revise-span/SKILL.md +16 -0
- package/presets/openwrite/skills/style-system/SKILL.md +135 -0
- package/presets/openwrite/skills/style-system/prompts/analyze_style.md +214 -0
- package/presets/openwrite/skills/style-system/prompts/batch_extract_style.md +66 -0
- package/presets/openwrite/skills/style-system/prompts/compose_style.md +83 -0
- package/presets/openwrite/skills/style-system/prompts/extract_style.md +84 -0
- package/presets/openwrite/skills/style-system/prompts/initialize_style.md +52 -0
- package/presets/openwrite/skills/style-system/templates/analysis_report.yaml +78 -0
- package/presets/openwrite/skills/style-system/templates/composed_style.md +96 -0
- package/presets/openwrite/skills/style-system/templates/extraction_report.yaml +80 -0
- package/presets/openwrite/skills/style-system/templates/fingerprint.yaml +61 -0
- package/presets/openwrite/skills/style-system/tools/README.md +33 -0
- package/presets/openwrite/skills/truth-validation/SKILL.md +119 -0
- package/presets/openwrite/skills/workflow-manager/SKILL.md +81 -0
- package/presets/openwrite/skills/world-query/SKILL.md +45 -0
- package/presets/openwrite/skills/write-next/SKILL.md +17 -0
- package/release/core-requirements.in +12 -0
- package/release/licenses/@deepseek-ai__cosmokit@1.8.3/LICENSE +21 -0
- package/release/licenses/@deepseek-ai__schemastery@3.18.2/LICENSE +21 -0
- package/release/licenses/@isaacs__fs-minipass@4.0.1/LICENSE +15 -0
- package/release/licenses/@standard-schema__spec@1.1.0/LICENSE +21 -0
- package/release/licenses/@types__d3-color@3.1.3/LICENSE +21 -0
- package/release/licenses/@types__d3-drag@3.0.7/LICENSE +21 -0
- package/release/licenses/@types__d3-interpolate@3.0.4/LICENSE +21 -0
- package/release/licenses/@types__d3-selection@3.0.11/LICENSE +21 -0
- package/release/licenses/@types__d3-transition@3.0.9/LICENSE +21 -0
- package/release/licenses/@types__d3-zoom@3.0.8/LICENSE +21 -0
- package/release/licenses/@xyflow__react@12.11.6/LICENSE +21 -0
- package/release/licenses/@xyflow__system@0.0.82/LICENSE +21 -0
- package/release/licenses/ajv-formats@3.0.1/LICENSE +21 -0
- package/release/licenses/ajv@8.20.0/LICENSE +22 -0
- package/release/licenses/chownr@3.0.0/LICENSE.md +63 -0
- package/release/licenses/classcat@5.0.5/LICENSE.md +7 -0
- package/release/licenses/commander@7.2.0/LICENSE +22 -0
- package/release/licenses/d3-array@3.2.4/LICENSE +13 -0
- package/release/licenses/d3-axis@3.0.0/LICENSE +13 -0
- package/release/licenses/d3-brush@3.0.0/LICENSE +13 -0
- package/release/licenses/d3-chord@3.0.1/LICENSE +13 -0
- package/release/licenses/d3-color@3.1.0/LICENSE +13 -0
- package/release/licenses/d3-contour@4.0.2/LICENSE +13 -0
- package/release/licenses/d3-delaunay@6.0.4/LICENSE +14 -0
- package/release/licenses/d3-dispatch@3.0.1/LICENSE +13 -0
- package/release/licenses/d3-drag@3.0.0/LICENSE +13 -0
- package/release/licenses/d3-dsv@3.0.1/LICENSE +13 -0
- package/release/licenses/d3-ease@3.0.1/LICENSE +28 -0
- package/release/licenses/d3-fetch@3.0.1/LICENSE +13 -0
- package/release/licenses/d3-force@3.0.0/LICENSE +13 -0
- package/release/licenses/d3-format@3.1.2/LICENSE +13 -0
- package/release/licenses/d3-geo@3.1.1/LICENSE +34 -0
- package/release/licenses/d3-hierarchy@3.1.2/LICENSE +13 -0
- package/release/licenses/d3-interpolate@3.0.1/LICENSE +13 -0
- package/release/licenses/d3-path@3.1.0/LICENSE +13 -0
- package/release/licenses/d3-polygon@3.0.1/LICENSE +13 -0
- package/release/licenses/d3-quadtree@3.0.1/LICENSE +13 -0
- package/release/licenses/d3-random@3.0.1/LICENSE +13 -0
- package/release/licenses/d3-scale-chromatic@3.1.0/LICENSE +28 -0
- package/release/licenses/d3-scale@4.0.2/LICENSE +13 -0
- package/release/licenses/d3-selection@3.0.0/LICENSE +13 -0
- package/release/licenses/d3-shape@3.2.0/LICENSE +13 -0
- package/release/licenses/d3-time-format@4.1.0/LICENSE +13 -0
- package/release/licenses/d3-time@3.1.0/LICENSE +13 -0
- package/release/licenses/d3-timer@3.0.1/LICENSE +13 -0
- package/release/licenses/d3-transition@3.0.1/LICENSE +13 -0
- package/release/licenses/d3-zoom@3.0.0/LICENSE +13 -0
- package/release/licenses/d3@7.9.0/LICENSE +13 -0
- package/release/licenses/delaunator@5.1.0/LICENSE +15 -0
- package/release/licenses/elkjs@0.12.0/LICENSE.md +263 -0
- package/release/licenses/fast-deep-equal@3.1.3/LICENSE +21 -0
- package/release/licenses/fast-uri@3.1.7/LICENSE +30 -0
- package/release/licenses/fflate@0.8.2/LICENSE +21 -0
- package/release/licenses/graceful-fs@4.2.11/LICENSE +15 -0
- package/release/licenses/iconv-lite@0.6.3/LICENSE +21 -0
- package/release/licenses/internmap@2.0.3/LICENSE +13 -0
- package/release/licenses/json-schema-traverse@1.0.0/LICENSE +21 -0
- package/release/licenses/lucide-react@0.468.0/LICENSE +15 -0
- package/release/licenses/minipass@7.1.3/LICENSE.md +55 -0
- package/release/licenses/minizlib@3.1.0/LICENSE +26 -0
- package/release/licenses/proper-lockfile@4.1.2/LICENSE +21 -0
- package/release/licenses/require-from-string@2.0.2/license +21 -0
- package/release/licenses/retry@0.12.0/License +21 -0
- package/release/licenses/robust-predicates@3.0.3/LICENSE +24 -0
- package/release/licenses/rw@1.3.3/LICENSE +26 -0
- package/release/licenses/safer-buffer@2.1.2/LICENSE +21 -0
- package/release/licenses/signal-exit@3.0.7/LICENSE.txt +16 -0
- package/release/licenses/tar@7.5.7/LICENSE.md +55 -0
- package/release/licenses/use-sync-external-store@1.6.0/LICENSE +21 -0
- package/release/licenses/yallist@5.0.0/LICENSE.md +63 -0
- package/release/licenses/zustand@4.5.7/LICENSE +21 -0
- package/release/openwrite-5.8.1-py3-none-any.whl +0 -0
- package/release/platform-overrides.in +5 -0
- package/release/python-constraints.in +96 -0
- package/release/requirements.lock +2927 -0
- package/release/runtime-manifest.json +98 -0
- package/release/sdk-compatibility.json +240 -0
- package/release/source.json +859 -0
- package/release/wheels/cryptography-50.0.1-cp312-abi3-macosx_13_0_x86_64.whl +0 -0
- package/release/wheels/licenses/LICENSE.txt +177 -0
- package/release/wheels/provenance.json +15 -0
- package/scripts/dog/delivery-stage.js +32 -0
- package/scripts/dog/import-chapter.js +20 -0
- package/scripts/dog/import-record.js +35 -0
- package/scripts/dog/review-dimension.js +41 -0
- package/scripts/dog/review-record.js +42 -0
- package/scripts/maintenance.mjs +179 -0
- package/scripts/prepare.mjs +21 -0
- package/vendor/dsh-dog/LICENSE +29 -0
- package/vendor/dsh-dog/README.md +114 -0
- package/vendor/dsh-dog/UPSTREAM.md +22 -0
- package/vendor/dsh-dog/cordis.patch.yml +14 -0
- package/vendor/dsh-dog/lib/client.js +2898 -0
- package/vendor/dsh-dog/lib/client.js.map +1 -0
- package/vendor/dsh-dog/lib/core-BiEBMLz3.d.ts +495 -0
- package/vendor/dsh-dog/lib/core-DdfMcrB4.js +2074 -0
- package/vendor/dsh-dog/lib/core.d.ts +2 -0
- package/vendor/dsh-dog/lib/core.js +2 -0
- package/vendor/dsh-dog/lib/index.d.ts +133 -0
- package/vendor/dsh-dog/lib/index.js +967 -0
- package/vendor/dsh-dog/package.json +97 -0
- package/vendor/dsh-dog/schemas/schema-0.2/graph.schema.json +139 -0
- package/vendor/dsh-dog/schemas/schema-0.2/report.schema.json +87 -0
- package/vendor/dsh-dog/schemas/schema-0.2/run.schema.json +259 -0
- package/vendor/dsh-dog/schemas/schema-0.2/runtime-event.schema.json +105 -0
- package/vendor/dsh-dog/schemas/schema-0.2/verification.schema.json +40 -0
|
@@ -0,0 +1,517 @@
|
|
|
1
|
+
/** Runtime-checked DTO boundary for the OpenWrite Studio API. */
|
|
2
|
+
export type JsonRecord = Record<string, unknown>;
|
|
3
|
+
export declare function asRecord(value: unknown): JsonRecord;
|
|
4
|
+
export declare function unwrapData(value: unknown): JsonRecord;
|
|
5
|
+
export declare function asText(value: unknown): string;
|
|
6
|
+
export declare function asFiniteNumber(value: unknown): number | null;
|
|
7
|
+
export declare function asInteger(value: unknown, fallback?: number): number;
|
|
8
|
+
/** Server-recorded connection-test outcome on a profile (null = untested). */
|
|
9
|
+
export type ModelTestRecordDto = {
|
|
10
|
+
status: 'ok' | 'failed';
|
|
11
|
+
tested_at: string;
|
|
12
|
+
latency_ms: number | null;
|
|
13
|
+
provider: string;
|
|
14
|
+
resolved_model: string;
|
|
15
|
+
error_code: string | null;
|
|
16
|
+
failed_stage: string | null;
|
|
17
|
+
};
|
|
18
|
+
/** Narrow one last_test record; null when absent or malformed. */
|
|
19
|
+
export declare function parseTestRecord(value: unknown): ModelTestRecordDto | null;
|
|
20
|
+
export type ModelProfileDto = {
|
|
21
|
+
id: string;
|
|
22
|
+
label: string;
|
|
23
|
+
provider: string;
|
|
24
|
+
model: string;
|
|
25
|
+
base_url: string;
|
|
26
|
+
api_format: string;
|
|
27
|
+
context_tokens: number;
|
|
28
|
+
max_output_tokens: number;
|
|
29
|
+
temperature: number;
|
|
30
|
+
timeout_seconds: number;
|
|
31
|
+
configured: boolean;
|
|
32
|
+
schema_version: string;
|
|
33
|
+
capabilities: {
|
|
34
|
+
chat: boolean;
|
|
35
|
+
};
|
|
36
|
+
used_by_routes: string[];
|
|
37
|
+
last_test: ModelTestRecordDto | null;
|
|
38
|
+
};
|
|
39
|
+
export declare function parseModelProfiles(value: unknown): ModelProfileDto[];
|
|
40
|
+
export declare function parseRouteMap(value: unknown): Record<string, string>;
|
|
41
|
+
/** Success payload of POST /model/test and /model/embedding/test (enveloped). */
|
|
42
|
+
export type ConnectionTestResultDto = {
|
|
43
|
+
status: string;
|
|
44
|
+
provider: string;
|
|
45
|
+
model: string;
|
|
46
|
+
latency_ms: number | null;
|
|
47
|
+
tested_at: string;
|
|
48
|
+
reply: string;
|
|
49
|
+
};
|
|
50
|
+
export declare function parseConnectionTestResult(value: unknown): ConnectionTestResultDto;
|
|
51
|
+
/** Read-only payload of POST /model/profiles/delete-preview (enveloped). */
|
|
52
|
+
export type DeletePreviewDto = {
|
|
53
|
+
profile_id: string;
|
|
54
|
+
used_by_routes: string[];
|
|
55
|
+
routes_that_would_fail: string[];
|
|
56
|
+
fallback_candidates: {
|
|
57
|
+
id: string;
|
|
58
|
+
label: string;
|
|
59
|
+
configured: boolean;
|
|
60
|
+
}[];
|
|
61
|
+
resulting_routes: Record<string, string> | null;
|
|
62
|
+
deletable: boolean;
|
|
63
|
+
blocking_reasons: string[];
|
|
64
|
+
};
|
|
65
|
+
export declare function parseDeletePreview(value: unknown): DeletePreviewDto;
|
|
66
|
+
/** Response data of POST /model/routes: the swapped map plus the change impact. */
|
|
67
|
+
export type RouteImpactDto = {
|
|
68
|
+
routes: Record<string, string>;
|
|
69
|
+
changed_routes: {
|
|
70
|
+
route: string;
|
|
71
|
+
from: string;
|
|
72
|
+
to: string;
|
|
73
|
+
}[];
|
|
74
|
+
profiles_affected: string[];
|
|
75
|
+
};
|
|
76
|
+
export declare function parseRouteImpact(value: unknown): RouteImpactDto;
|
|
77
|
+
/** Real progress units on a task (benchmark tasks report candidate/evaluation units). */
|
|
78
|
+
export type TaskProgressDto = {
|
|
79
|
+
completed_units: number;
|
|
80
|
+
total_units: number;
|
|
81
|
+
ratio: number | null;
|
|
82
|
+
unit_kind: string;
|
|
83
|
+
};
|
|
84
|
+
export declare function parseTaskProgress(value: unknown): TaskProgressDto | null;
|
|
85
|
+
/** Pointer from a finished task to its artifact (e.g. a benchmark run). */
|
|
86
|
+
export type ResultRefDto = {
|
|
87
|
+
type: string;
|
|
88
|
+
id: string;
|
|
89
|
+
};
|
|
90
|
+
export declare function parseResultRef(value: unknown): ResultRefDto | null;
|
|
91
|
+
export type ExportFormatDto = 'md' | 'txt' | 'epub';
|
|
92
|
+
export type ExportPurposeDto = 'backup' | 'delivery';
|
|
93
|
+
export type ExportChapterDto = {
|
|
94
|
+
chapter_id: string;
|
|
95
|
+
number: number;
|
|
96
|
+
path: string;
|
|
97
|
+
title: string;
|
|
98
|
+
writing_units: number;
|
|
99
|
+
empty: boolean;
|
|
100
|
+
revision: string;
|
|
101
|
+
};
|
|
102
|
+
export type ExportIssueDto = {
|
|
103
|
+
code: string;
|
|
104
|
+
message: string;
|
|
105
|
+
details: JsonRecord;
|
|
106
|
+
};
|
|
107
|
+
export type ExportPreflightDto = {
|
|
108
|
+
schema_version: string;
|
|
109
|
+
novel_id: string;
|
|
110
|
+
format: ExportFormatDto;
|
|
111
|
+
purpose: ExportPurposeDto;
|
|
112
|
+
can_export: boolean;
|
|
113
|
+
actual_order: string[];
|
|
114
|
+
chapters: ExportChapterDto[];
|
|
115
|
+
structure: {
|
|
116
|
+
duplicates: Record<string, string[]>;
|
|
117
|
+
missing: string[];
|
|
118
|
+
empty: string[];
|
|
119
|
+
unreadable: string[];
|
|
120
|
+
};
|
|
121
|
+
writing_units: {
|
|
122
|
+
total: number;
|
|
123
|
+
book_target: number;
|
|
124
|
+
chapter_target: number;
|
|
125
|
+
completion_ratio: number | null;
|
|
126
|
+
};
|
|
127
|
+
metadata: {
|
|
128
|
+
title: string;
|
|
129
|
+
author: string;
|
|
130
|
+
language: string;
|
|
131
|
+
};
|
|
132
|
+
reviews: {
|
|
133
|
+
missing: string[];
|
|
134
|
+
current: string[];
|
|
135
|
+
stale: string[];
|
|
136
|
+
approved: string[];
|
|
137
|
+
not_approved: string[];
|
|
138
|
+
};
|
|
139
|
+
manuscript_acceptance: {
|
|
140
|
+
status: string;
|
|
141
|
+
blocking: boolean;
|
|
142
|
+
blocking_chapters: string[];
|
|
143
|
+
needs_review: string[];
|
|
144
|
+
};
|
|
145
|
+
blockers: ExportIssueDto[];
|
|
146
|
+
warnings: ExportIssueDto[];
|
|
147
|
+
preflight_revision: string;
|
|
148
|
+
};
|
|
149
|
+
/** Runtime-check the stable `openwrite.export-preflight.v1` success envelope. */
|
|
150
|
+
export declare function parseExportPreflight(value: unknown): ExportPreflightDto;
|
|
151
|
+
export declare const IMPORT_STAGE_NAMES: readonly ["snapshot", "split", "structure_confirmed", "published", "acceptance", "reconcile", "synthesis", "complete"];
|
|
152
|
+
export type ImportStageNameDto = typeof IMPORT_STAGE_NAMES[number];
|
|
153
|
+
export type ImportStageDto = {
|
|
154
|
+
status: string;
|
|
155
|
+
attempts: number;
|
|
156
|
+
input_sha256: string;
|
|
157
|
+
output_sha256: string;
|
|
158
|
+
started_at: string;
|
|
159
|
+
completed_at: string;
|
|
160
|
+
error_code: string;
|
|
161
|
+
};
|
|
162
|
+
export type ManuscriptImportOperationDto = {
|
|
163
|
+
schema_version: string;
|
|
164
|
+
import_id: string;
|
|
165
|
+
novel_id: string;
|
|
166
|
+
status: string;
|
|
167
|
+
arc_id: string;
|
|
168
|
+
source: {
|
|
169
|
+
filename: string;
|
|
170
|
+
suffix: string;
|
|
171
|
+
bytes: number;
|
|
172
|
+
sha256: string;
|
|
173
|
+
};
|
|
174
|
+
preview_revision: string;
|
|
175
|
+
confirmed_preview_revision: string;
|
|
176
|
+
chapter_count: number;
|
|
177
|
+
writing_units: number;
|
|
178
|
+
progress: {
|
|
179
|
+
current_stage: string;
|
|
180
|
+
completed_stages: number;
|
|
181
|
+
total_stages: number;
|
|
182
|
+
published_chapters: number;
|
|
183
|
+
total_chapters: number;
|
|
184
|
+
};
|
|
185
|
+
stages: Record<ImportStageNameDto, ImportStageDto>;
|
|
186
|
+
publication: {
|
|
187
|
+
sha256: string;
|
|
188
|
+
swap_status: string;
|
|
189
|
+
committed: boolean;
|
|
190
|
+
};
|
|
191
|
+
acceptance: {
|
|
192
|
+
operation_id: string;
|
|
193
|
+
status: string;
|
|
194
|
+
};
|
|
195
|
+
synthesis_sha256: string;
|
|
196
|
+
failure: {
|
|
197
|
+
code: string;
|
|
198
|
+
stage: string;
|
|
199
|
+
recoverable: boolean;
|
|
200
|
+
} | null;
|
|
201
|
+
created_at: string;
|
|
202
|
+
updated_at: string;
|
|
203
|
+
completed_at: string;
|
|
204
|
+
discarded_at: string;
|
|
205
|
+
};
|
|
206
|
+
export type ManuscriptImportChapterDto = {
|
|
207
|
+
order: number;
|
|
208
|
+
chapter_id: string;
|
|
209
|
+
title: string;
|
|
210
|
+
content: string;
|
|
211
|
+
writing_units: number;
|
|
212
|
+
sha256: string;
|
|
213
|
+
};
|
|
214
|
+
export type ManuscriptImportPreviewDto = {
|
|
215
|
+
schema_version: string;
|
|
216
|
+
import_id: string;
|
|
217
|
+
arc_id: string;
|
|
218
|
+
source_sha256: string;
|
|
219
|
+
revision: string;
|
|
220
|
+
chapter_count: number;
|
|
221
|
+
writing_units: number;
|
|
222
|
+
chapters: ManuscriptImportChapterDto[];
|
|
223
|
+
updated_at: string;
|
|
224
|
+
};
|
|
225
|
+
export declare function parseManuscriptImportList(value: unknown): {
|
|
226
|
+
schema_version: string;
|
|
227
|
+
novel_id: string;
|
|
228
|
+
operations: ManuscriptImportOperationDto[];
|
|
229
|
+
counts: Record<string, number>;
|
|
230
|
+
};
|
|
231
|
+
export declare function parseManuscriptImportDetail(value: unknown): {
|
|
232
|
+
operation: ManuscriptImportOperationDto;
|
|
233
|
+
preview: ManuscriptImportPreviewDto | null;
|
|
234
|
+
};
|
|
235
|
+
export type ArchiveFileDto = {
|
|
236
|
+
path: string;
|
|
237
|
+
archive_path: string;
|
|
238
|
+
category: string;
|
|
239
|
+
sha256: string;
|
|
240
|
+
size: number;
|
|
241
|
+
};
|
|
242
|
+
export type ArchiveNoticeDto = {
|
|
243
|
+
path: string;
|
|
244
|
+
location: string;
|
|
245
|
+
kind: string;
|
|
246
|
+
source: string;
|
|
247
|
+
target: string;
|
|
248
|
+
source_path: string;
|
|
249
|
+
target_path: string;
|
|
250
|
+
source_paths: string[];
|
|
251
|
+
format: string;
|
|
252
|
+
value: string;
|
|
253
|
+
before: string;
|
|
254
|
+
after: string;
|
|
255
|
+
message: string;
|
|
256
|
+
reason: string;
|
|
257
|
+
state: string;
|
|
258
|
+
sha256_before: string;
|
|
259
|
+
sha256_after: string;
|
|
260
|
+
reference_count: number;
|
|
261
|
+
replacement_count: number;
|
|
262
|
+
};
|
|
263
|
+
export type ProjectArchivePlanDto = {
|
|
264
|
+
schema_version: string;
|
|
265
|
+
novel_id: string;
|
|
266
|
+
archive_id: string;
|
|
267
|
+
preflight_revision: string;
|
|
268
|
+
includes: {
|
|
269
|
+
roots: string[];
|
|
270
|
+
file_count: number;
|
|
271
|
+
total_size: number;
|
|
272
|
+
category_counts: Record<string, number>;
|
|
273
|
+
directories: string[];
|
|
274
|
+
files: ArchiveFileDto[];
|
|
275
|
+
};
|
|
276
|
+
excludes: {
|
|
277
|
+
rules: string[];
|
|
278
|
+
entries: ArchiveNoticeDto[];
|
|
279
|
+
};
|
|
280
|
+
missing: {
|
|
281
|
+
required: string[];
|
|
282
|
+
optional: ArchiveNoticeDto[];
|
|
283
|
+
};
|
|
284
|
+
reference_inventory: {
|
|
285
|
+
known: ArchiveNoticeDto[];
|
|
286
|
+
preserved: ArchiveNoticeDto[];
|
|
287
|
+
warnings: ArchiveNoticeDto[];
|
|
288
|
+
};
|
|
289
|
+
policies: {
|
|
290
|
+
tasks: string;
|
|
291
|
+
target: string;
|
|
292
|
+
reference_default: string;
|
|
293
|
+
reference_supported: string[];
|
|
294
|
+
};
|
|
295
|
+
};
|
|
296
|
+
export declare function parseProjectArchivePreflight(value: unknown): ProjectArchivePlanDto;
|
|
297
|
+
export type ProjectArchiveSummaryDto = {
|
|
298
|
+
archive_id: string;
|
|
299
|
+
archive_sha256: string;
|
|
300
|
+
created_at: string;
|
|
301
|
+
file_count: number;
|
|
302
|
+
total_size: number;
|
|
303
|
+
missing_required: string[];
|
|
304
|
+
missing_optional: ArchiveNoticeDto[];
|
|
305
|
+
};
|
|
306
|
+
export declare function parseProjectArchiveList(value: unknown): {
|
|
307
|
+
schema_version: string;
|
|
308
|
+
novel_id: string;
|
|
309
|
+
archives: ProjectArchiveSummaryDto[];
|
|
310
|
+
};
|
|
311
|
+
export declare function parseProjectArchiveDetail(value: unknown): {
|
|
312
|
+
archive_sha256: string;
|
|
313
|
+
file_count: number;
|
|
314
|
+
total_size: number;
|
|
315
|
+
plan: ProjectArchivePlanDto;
|
|
316
|
+
};
|
|
317
|
+
export type ProjectRestorePreviewDto = {
|
|
318
|
+
archive_id: string;
|
|
319
|
+
archive_sha256: string;
|
|
320
|
+
source_novel_id: string;
|
|
321
|
+
target_novel_id: string;
|
|
322
|
+
target_root: string;
|
|
323
|
+
reference_policy: 'preserve_relative' | 'rewrite_novel_id';
|
|
324
|
+
can_restore: boolean;
|
|
325
|
+
conflicts: string[];
|
|
326
|
+
file_count: number;
|
|
327
|
+
total_size: number;
|
|
328
|
+
missing: {
|
|
329
|
+
required: string[];
|
|
330
|
+
optional: ArchiveNoticeDto[];
|
|
331
|
+
};
|
|
332
|
+
task_file_count: number;
|
|
333
|
+
task_archive_path: string;
|
|
334
|
+
auto_resume_tasks: boolean;
|
|
335
|
+
path_rewrites: ArchiveNoticeDto[];
|
|
336
|
+
rewritten_files: ArchiveNoticeDto[];
|
|
337
|
+
rewritten_references: ArchiveNoticeDto[];
|
|
338
|
+
preserved_references: ArchiveNoticeDto[];
|
|
339
|
+
reference_warnings: ArchiveNoticeDto[];
|
|
340
|
+
reference_conflicts: ArchiveNoticeDto[];
|
|
341
|
+
};
|
|
342
|
+
export declare function parseProjectRestorePreview(value: unknown): ProjectRestorePreviewDto;
|
|
343
|
+
export type ChapterWorkEventDto = {
|
|
344
|
+
kind: string;
|
|
345
|
+
id: string;
|
|
346
|
+
status: string;
|
|
347
|
+
document_id: string;
|
|
348
|
+
path: string;
|
|
349
|
+
chapter_id: string;
|
|
350
|
+
revision: string;
|
|
351
|
+
updated_at: string;
|
|
352
|
+
writing_units_delta: number | null;
|
|
353
|
+
reason: string;
|
|
354
|
+
};
|
|
355
|
+
export type ReadingOrderDocumentDto = {
|
|
356
|
+
document_id: string;
|
|
357
|
+
occurrence_id: string;
|
|
358
|
+
chapter_id: string;
|
|
359
|
+
title: string;
|
|
360
|
+
path: string;
|
|
361
|
+
status: string;
|
|
362
|
+
volume_id: string;
|
|
363
|
+
writing_units: number;
|
|
364
|
+
revision: string;
|
|
365
|
+
updated_at: string;
|
|
366
|
+
reading_index: number;
|
|
367
|
+
previous_occurrence_id: string;
|
|
368
|
+
next_occurrence_id: string;
|
|
369
|
+
content: string;
|
|
370
|
+
};
|
|
371
|
+
export type ReadingOrderDto = {
|
|
372
|
+
schema_version: string;
|
|
373
|
+
novel_id: string;
|
|
374
|
+
revision: string;
|
|
375
|
+
mode: string;
|
|
376
|
+
mutation_allowed: boolean;
|
|
377
|
+
actual_order: string[];
|
|
378
|
+
volumes: {
|
|
379
|
+
volume_id: string;
|
|
380
|
+
title: string;
|
|
381
|
+
order: number;
|
|
382
|
+
occurrence_ids: string[];
|
|
383
|
+
}[];
|
|
384
|
+
documents: ReadingOrderDocumentDto[];
|
|
385
|
+
issues: unknown[];
|
|
386
|
+
};
|
|
387
|
+
export type ReadingPacketDto = {
|
|
388
|
+
schema_version: string;
|
|
389
|
+
novel_id: string;
|
|
390
|
+
revision: string;
|
|
391
|
+
anchor_document_id: string;
|
|
392
|
+
anchor_occurrence_id: string;
|
|
393
|
+
start_index: number;
|
|
394
|
+
end_index: number;
|
|
395
|
+
has_previous: boolean;
|
|
396
|
+
has_next: boolean;
|
|
397
|
+
complete: boolean;
|
|
398
|
+
documents: ReadingOrderDocumentDto[];
|
|
399
|
+
issues: unknown[];
|
|
400
|
+
};
|
|
401
|
+
/** Canonical reading order. Every occurrence is retained, including repeated documents. */
|
|
402
|
+
export declare function parseReadingOrder(value: unknown): ReadingOrderDto;
|
|
403
|
+
/** Bounded continuous-reading packet with immutable occurrence identities. */
|
|
404
|
+
export declare function parseReadingPacket(value: unknown): ReadingPacketDto;
|
|
405
|
+
export type DocumentChangePlanDto = {
|
|
406
|
+
applied: boolean;
|
|
407
|
+
changed: boolean;
|
|
408
|
+
status: string;
|
|
409
|
+
path: string;
|
|
410
|
+
revision: string;
|
|
411
|
+
diff: string;
|
|
412
|
+
preview_token: string;
|
|
413
|
+
undo_preview_token: string;
|
|
414
|
+
mutation_summary: {
|
|
415
|
+
execution_status: string;
|
|
416
|
+
source_revision: string;
|
|
417
|
+
result_revision: string;
|
|
418
|
+
};
|
|
419
|
+
};
|
|
420
|
+
/** Server-owned immutable document change preview/apply projection. */
|
|
421
|
+
export declare function parseDocumentChangePlan(value: unknown): DocumentChangePlanDto;
|
|
422
|
+
export type ChapterForeshadowItemDto = {
|
|
423
|
+
id: string;
|
|
424
|
+
content: string;
|
|
425
|
+
status: string;
|
|
426
|
+
weight: number;
|
|
427
|
+
layer: string;
|
|
428
|
+
planned: boolean;
|
|
429
|
+
plant_chapter_id: string;
|
|
430
|
+
reveal_chapter_id: string;
|
|
431
|
+
earliest_reveal: string;
|
|
432
|
+
source_revision: string;
|
|
433
|
+
tags: string[];
|
|
434
|
+
};
|
|
435
|
+
export type ChapterForeshadowBucket = 'due' | 'overdue' | 'to_plant';
|
|
436
|
+
export type ChapterForeshadowingDto = {
|
|
437
|
+
due: ChapterForeshadowItemDto[];
|
|
438
|
+
overdue: ChapterForeshadowItemDto[];
|
|
439
|
+
to_plant: ChapterForeshadowItemDto[];
|
|
440
|
+
source_revision: string;
|
|
441
|
+
counts: Record<ChapterForeshadowBucket, number>;
|
|
442
|
+
};
|
|
443
|
+
export type ChapterWorkBriefDto = {
|
|
444
|
+
schema_version: string;
|
|
445
|
+
novel_id: string;
|
|
446
|
+
chapter_id: string;
|
|
447
|
+
document_id: string;
|
|
448
|
+
manuscript: {
|
|
449
|
+
path: string;
|
|
450
|
+
title: string;
|
|
451
|
+
save_status: string;
|
|
452
|
+
current_revision: string;
|
|
453
|
+
writing_units: number;
|
|
454
|
+
modified_at: string;
|
|
455
|
+
};
|
|
456
|
+
review: {
|
|
457
|
+
exists: boolean;
|
|
458
|
+
review_revision: string;
|
|
459
|
+
freshness_status: string;
|
|
460
|
+
stale: boolean;
|
|
461
|
+
stale_reason: string;
|
|
462
|
+
source_revision: string;
|
|
463
|
+
current_source_revision: string;
|
|
464
|
+
reviewed_at: string;
|
|
465
|
+
issue_count: number;
|
|
466
|
+
latest_closure: null | {
|
|
467
|
+
closure_id: string;
|
|
468
|
+
proposal_id: string;
|
|
469
|
+
source_review_revision: string;
|
|
470
|
+
rereview_review_revision: string;
|
|
471
|
+
applied_revision: string;
|
|
472
|
+
rereview_source_revision: string;
|
|
473
|
+
closed_at: string;
|
|
474
|
+
issue_outcomes: {
|
|
475
|
+
issue_id: string;
|
|
476
|
+
outcome: 'resolved' | 'retained';
|
|
477
|
+
}[];
|
|
478
|
+
regressions: {
|
|
479
|
+
issue_id: string;
|
|
480
|
+
outcome: 'regressed';
|
|
481
|
+
issue: unknown;
|
|
482
|
+
}[];
|
|
483
|
+
};
|
|
484
|
+
};
|
|
485
|
+
target: {
|
|
486
|
+
writing_units: number;
|
|
487
|
+
source: string;
|
|
488
|
+
actual_units: number;
|
|
489
|
+
remaining_units: number;
|
|
490
|
+
progress: number;
|
|
491
|
+
};
|
|
492
|
+
recent_edits: ChapterWorkEventDto[];
|
|
493
|
+
foreshadowing: ChapterForeshadowingDto;
|
|
494
|
+
};
|
|
495
|
+
/** Map OpenWrite work-brief categories onto author actions; keep no second store. */
|
|
496
|
+
export declare function parseChapterForeshadowing(value: unknown): ChapterForeshadowingDto;
|
|
497
|
+
export type ChapterSprintStats = {
|
|
498
|
+
targetUnits: number;
|
|
499
|
+
actualUnits: number;
|
|
500
|
+
remainingUnits: number;
|
|
501
|
+
progress: number;
|
|
502
|
+
added: number;
|
|
503
|
+
deleted: number;
|
|
504
|
+
net: number;
|
|
505
|
+
knownDeltaEvents: number;
|
|
506
|
+
unknownDeltaEvents: number;
|
|
507
|
+
aiNet: number | null;
|
|
508
|
+
humanNet: number | null;
|
|
509
|
+
};
|
|
510
|
+
/** Derive sprint UX from the work-brief target (source of truth) and known edit deltas. */
|
|
511
|
+
export declare function chapterSprintStats(brief: ChapterWorkBriefDto): ChapterSprintStats;
|
|
512
|
+
export declare function chapterForeshadowActions(brief: ChapterWorkBriefDto): {
|
|
513
|
+
bucket: ChapterForeshadowBucket;
|
|
514
|
+
item: ChapterForeshadowItemDto;
|
|
515
|
+
}[];
|
|
516
|
+
/** Narrow the chapter work projection used by editor CAS and activity UI. */
|
|
517
|
+
export declare function parseChapterWorkBrief(value: unknown): ChapterWorkBriefDto;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** `studio-panel` namespace dictionaries (view tab labels + panel states). */
|
|
2
|
+
/** Dictionary namespace owned by this plugin. */
|
|
3
|
+
export declare const NS = "studio-panel";
|
|
4
|
+
/** The studio-panel dictionary key set (the source of truth for both locales). */
|
|
5
|
+
export type StudioPanelKey = '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.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.embeddingModel' | 'models.embeddingCredential' | 'models.credentialHint' | 'models.remember' | 'models.save' | 'models.chatTest' | 'models.embeddingTest' | '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.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';
|
|
6
|
+
declare module '@deepseek-ai/dsh-client-ui-slots' {
|
|
7
|
+
interface LocaleNamespaceMap {
|
|
8
|
+
/** The 稿件/大纲/资产 view tab labels and panel state strings. */
|
|
9
|
+
'studio-panel': StudioPanelKey;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
/** Simplified Chinese dictionary (the key-set source of truth). */
|
|
13
|
+
export declare const zh: Record<StudioPanelKey, string>;
|
|
14
|
+
/** English dictionary. */
|
|
15
|
+
export declare const en: Record<StudioPanelKey, string>;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { type QuoteAnchor } from './manuscript-selection.ts';
|
|
2
|
+
export declare const ANNOTATION_COLORS: readonly ["amber", "rose", "sky", "lime", "violet"];
|
|
3
|
+
export type AnnotationColor = (typeof ANNOTATION_COLORS)[number];
|
|
4
|
+
export declare const DEFAULT_ANNOTATION_COLOR: AnnotationColor;
|
|
5
|
+
export declare const ANNOTATION_COLOR_LABEL: Record<AnnotationColor, `creation.notes.color.${AnnotationColor}`>;
|
|
6
|
+
export type AnnotationStatus = 'open' | 'resolved';
|
|
7
|
+
export type AnnotationAnchorState = 'attached' | 'relocated' | 'detached';
|
|
8
|
+
export type ManuscriptAnnotation = {
|
|
9
|
+
annotationId: string;
|
|
10
|
+
chapterId: string;
|
|
11
|
+
sourceRevision: string;
|
|
12
|
+
quote: string;
|
|
13
|
+
startHint: number;
|
|
14
|
+
endHint: number;
|
|
15
|
+
note: string;
|
|
16
|
+
status: AnnotationStatus;
|
|
17
|
+
anchorState: AnnotationAnchorState;
|
|
18
|
+
currentStart: number | null;
|
|
19
|
+
currentEnd: number | null;
|
|
20
|
+
color: AnnotationColor;
|
|
21
|
+
createdAt: string;
|
|
22
|
+
updatedAt: string;
|
|
23
|
+
};
|
|
24
|
+
export declare function isAnnotationColor(value: string): value is AnnotationColor;
|
|
25
|
+
/** Old records without color keep amber; unknown values also default. */
|
|
26
|
+
export declare function annotationColor(value: unknown): AnnotationColor;
|
|
27
|
+
export declare function parseAnnotation(value: unknown): ManuscriptAnnotation | null;
|
|
28
|
+
export declare function parseAnnotationList(value: unknown): ManuscriptAnnotation[];
|
|
29
|
+
export declare function unsavedAnnotationGuard(dirty: boolean): 'ok' | 'save-first';
|
|
30
|
+
export declare function annotationLocateLabel(anchor: QuoteAnchor | {
|
|
31
|
+
state: AnnotationAnchorState;
|
|
32
|
+
}): string;
|
|
33
|
+
export declare function liveAnnotationAnchor(content: string, item: ManuscriptAnnotation): QuoteAnchor;
|
|
34
|
+
export declare function revalidateAnnotationRange(content: string, selection: {
|
|
35
|
+
start: number;
|
|
36
|
+
end: number;
|
|
37
|
+
text: string;
|
|
38
|
+
}): {
|
|
39
|
+
start: number;
|
|
40
|
+
end: number;
|
|
41
|
+
text: string;
|
|
42
|
+
} | null;
|
|
43
|
+
export declare function annotateRequest(input: {
|
|
44
|
+
chapterId: string;
|
|
45
|
+
revision: string;
|
|
46
|
+
selection: {
|
|
47
|
+
start: number;
|
|
48
|
+
end: number;
|
|
49
|
+
text: string;
|
|
50
|
+
};
|
|
51
|
+
note: string;
|
|
52
|
+
color: AnnotationColor;
|
|
53
|
+
}): {
|
|
54
|
+
ok: true;
|
|
55
|
+
body: Record<string, unknown>;
|
|
56
|
+
} | {
|
|
57
|
+
ok: false;
|
|
58
|
+
reason: 'empty' | 'save-first';
|
|
59
|
+
};
|