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.
Files changed (275) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +107 -0
  3. package/THIRD_PARTY_NOTICES.md +33 -0
  4. package/assets/logo-dark.svg +31 -0
  5. package/assets/logo-light.svg +31 -0
  6. package/cordis.patch.yml +11 -0
  7. package/docs/BENCHMARK_TASKS.md +54 -0
  8. package/docs/COST_MEASUREMENT.md +39 -0
  9. package/docs/DEVELOPMENT.md +65 -0
  10. package/docs/DSH_STORE.md +58 -0
  11. package/docs/FRAMEWORK_ADVANTAGES.md +288 -0
  12. package/docs/IMPROVEMENT_PLAN.md +252 -0
  13. package/docs/INSTALL.md +99 -0
  14. package/docs/LEARNING.md +68 -0
  15. package/docs/OPEN_SOURCE_NOVEL_AUDIT.md +191 -0
  16. package/docs/PLUGIN_MAINTENANCE.md +54 -0
  17. package/docs/PLUGIN_MAINTENANCE_RC7.md +157 -0
  18. package/docs/QA_20260908.md +103 -0
  19. package/docs/QA_20260909_BENCHMARK.md +24 -0
  20. package/docs/RELEASE_ACCEPTANCE.md +116 -0
  21. package/docs/REVIEW_DAG_FRAMEWORK.md +82 -0
  22. package/docs/TARGETED_NOVEL_PROJECT_REVIEW.md +167 -0
  23. package/docs/WORKFLOWS.md +74 -0
  24. package/docs/WORKSPACE_CONTEXT_CONTRACT.md +125 -0
  25. package/docs/WORKSPACE_INTEGRATION_GOAL.md +278 -0
  26. package/docs/research/autosave-race-repro.mjs +133 -0
  27. package/docs/research/framework-stats-2026-09-05.json +116 -0
  28. package/dog-tools.mjs +11 -0
  29. package/package.json +132 -0
  30. package/packages/openwrite-bridge/LICENSE +201 -0
  31. package/packages/openwrite-bridge/cordis.patch.yml +10 -0
  32. package/packages/openwrite-bridge/lib/client.d.ts +95 -0
  33. package/packages/openwrite-bridge/lib/client.js +193 -0
  34. package/packages/openwrite-bridge/lib/contracts-generated.d.ts +367 -0
  35. package/packages/openwrite-bridge/lib/contracts-generated.js +1764 -0
  36. package/packages/openwrite-bridge/lib/dog-delivery.d.ts +12 -0
  37. package/packages/openwrite-bridge/lib/dog-delivery.js +362 -0
  38. package/packages/openwrite-bridge/lib/dog-review.d.ts +50 -0
  39. package/packages/openwrite-bridge/lib/dog-review.js +470 -0
  40. package/packages/openwrite-bridge/lib/domain.d.ts +70 -0
  41. package/packages/openwrite-bridge/lib/domain.js +496 -0
  42. package/packages/openwrite-bridge/lib/index.d.ts +17 -0
  43. package/packages/openwrite-bridge/lib/index.js +89 -0
  44. package/packages/openwrite-bridge/lib/managed-runtime.d.ts +95 -0
  45. package/packages/openwrite-bridge/lib/managed-runtime.js +510 -0
  46. package/packages/openwrite-bridge/lib/preset-tools.d.ts +13 -0
  47. package/packages/openwrite-bridge/lib/preset-tools.js +18 -0
  48. package/packages/openwrite-bridge/lib/tool-policy.d.ts +6 -0
  49. package/packages/openwrite-bridge/lib/tool-policy.js +56 -0
  50. package/packages/openwrite-bridge/lib/tools.d.ts +24 -0
  51. package/packages/openwrite-bridge/lib/tools.js +2404 -0
  52. package/packages/openwrite-bridge/package.json +67 -0
  53. package/packages/studio-panel/LICENSE +21 -0
  54. package/packages/studio-panel/README.md +51 -0
  55. package/packages/studio-panel/cordis.patch.yml +5 -0
  56. package/packages/studio-panel/lib/client.js +158087 -0
  57. package/packages/studio-panel/lib/client.js.map +1 -0
  58. package/packages/studio-panel/lib/index.js +50 -0
  59. package/packages/studio-panel/lib/types/client/AssetEditor.d.ts +122 -0
  60. package/packages/studio-panel/lib/types/client/AssetsView.d.ts +43 -0
  61. package/packages/studio-panel/lib/types/client/BenchmarkView.d.ts +9 -0
  62. package/packages/studio-panel/lib/types/client/ContinuousReader.d.ts +13 -0
  63. package/packages/studio-panel/lib/types/client/CreationView.d.ts +6 -0
  64. package/packages/studio-panel/lib/types/client/DagCanvas.d.ts +11 -0
  65. package/packages/studio-panel/lib/types/client/DiscardDraftDialog.d.ts +8 -0
  66. package/packages/studio-panel/lib/types/client/DomainToolCard.d.ts +9 -0
  67. package/packages/studio-panel/lib/types/client/GraphView.d.ts +46 -0
  68. package/packages/studio-panel/lib/types/client/HeaderChrome.d.ts +18 -0
  69. package/packages/studio-panel/lib/types/client/LaunchOpenWrite.d.ts +13 -0
  70. package/packages/studio-panel/lib/types/client/LibraryView.d.ts +6 -0
  71. package/packages/studio-panel/lib/types/client/MarkdownText.d.ts +3 -0
  72. package/packages/studio-panel/lib/types/client/ModelView.d.ts +9 -0
  73. package/packages/studio-panel/lib/types/client/OperationsView.d.ts +6 -0
  74. package/packages/studio-panel/lib/types/client/OutlinePlans.d.ts +37 -0
  75. package/packages/studio-panel/lib/types/client/OutlineView.d.ts +29 -0
  76. package/packages/studio-panel/lib/types/client/ResearchView.d.ts +7 -0
  77. package/packages/studio-panel/lib/types/client/ReviewCard.d.ts +28 -0
  78. package/packages/studio-panel/lib/types/client/SceneWorkbench.d.ts +55 -0
  79. package/packages/studio-panel/lib/types/client/SearchView.d.ts +33 -0
  80. package/packages/studio-panel/lib/types/client/TasksView.d.ts +11 -0
  81. package/packages/studio-panel/lib/types/client/TransferWorkspaces.d.ts +19 -0
  82. package/packages/studio-panel/lib/types/client/TurnMutationSummary.d.ts +62 -0
  83. package/packages/studio-panel/lib/types/client/VditorBody.d.ts +55 -0
  84. package/packages/studio-panel/lib/types/client/WorkbenchStore.d.ts +121 -0
  85. package/packages/studio-panel/lib/types/client/api.d.ts +72 -0
  86. package/packages/studio-panel/lib/types/client/asset-drafts.d.ts +20 -0
  87. package/packages/studio-panel/lib/types/client/benchmark-options.d.ts +43 -0
  88. package/packages/studio-panel/lib/types/client/draft-store.d.ts +26 -0
  89. package/packages/studio-panel/lib/types/client/dto.d.ts +517 -0
  90. package/packages/studio-panel/lib/types/client/index.d.ts +4 -0
  91. package/packages/studio-panel/lib/types/client/locales.d.ts +15 -0
  92. package/packages/studio-panel/lib/types/client/manuscript-annotations.d.ts +59 -0
  93. package/packages/studio-panel/lib/types/client/manuscript-markers.d.ts +61 -0
  94. package/packages/studio-panel/lib/types/client/manuscript-mentions.d.ts +30 -0
  95. package/packages/studio-panel/lib/types/client/manuscript-overlay-dom.d.ts +7 -0
  96. package/packages/studio-panel/lib/types/client/manuscript-overlay.d.ts +42 -0
  97. package/packages/studio-panel/lib/types/client/manuscript-selection.d.ts +59 -0
  98. package/packages/studio-panel/lib/types/client/model-view-memory.d.ts +17 -0
  99. package/packages/studio-panel/lib/types/client/storage.d.ts +8 -0
  100. package/packages/studio-panel/lib/types/client/workbench-epochs.d.ts +16 -0
  101. package/packages/studio-panel/lib/types/client/workspace-context.d.ts +52 -0
  102. package/packages/studio-panel/lib/types/client/writing-scope.d.ts +7 -0
  103. package/packages/studio-panel/lib/types/index.d.ts +5 -0
  104. package/packages/studio-panel/package.json +105 -0
  105. package/packages/studio-panel/vendor/vditor/LICENSE +21 -0
  106. package/packages/studio-panel/vendor/vditor/dist/css/content-theme/dark.css +123 -0
  107. package/packages/studio-panel/vendor/vditor/dist/css/content-theme/light.css +101 -0
  108. package/packages/studio-panel/vendor/vditor/dist/index.css +1823 -0
  109. package/packages/studio-panel/vendor/vditor/dist/index.min.js +1 -0
  110. package/packages/studio-panel/vendor/vditor/dist/js/i18n/zh_CN.js +86 -0
  111. package/packages/studio-panel/vendor/vditor/dist/js/icons/ant.js +174 -0
  112. package/packages/studio-panel/vendor/vditor/dist/js/lute/lute.min.js +72 -0
  113. package/plugin.d.ts +3 -0
  114. package/plugin.mjs +80 -0
  115. package/presets/README.md +32 -0
  116. package/presets/openwrite/agent.cordis.yml +317 -0
  117. package/presets/openwrite/preset.yml +3 -0
  118. package/presets/openwrite/skills/canon/SKILL.md +15 -0
  119. package/presets/openwrite/skills/dialoguequality/SKILL.md +166 -0
  120. package/presets/openwrite/skills/dog-delivery-query/SKILL.md +40 -0
  121. package/presets/openwrite/skills/dog-import-query/SKILL.md +27 -0
  122. package/presets/openwrite/skills/dog-review-query/SKILL.md +40 -0
  123. package/presets/openwrite/skills/export-book/SKILL.md +14 -0
  124. package/presets/openwrite/skills/foreshadow/SKILL.md +14 -0
  125. package/presets/openwrite/skills/foreshadowing-system/SKILL.md +125 -0
  126. package/presets/openwrite/skills/learn/SKILL.md +24 -0
  127. package/presets/openwrite/skills/novel-creator/SKILL.md +88 -0
  128. package/presets/openwrite/skills/novel-creator/templates/beat_templates.yaml +179 -0
  129. package/presets/openwrite/skills/novel-creator/templates/example_usage.yaml +74 -0
  130. package/presets/openwrite/skills/novel-reviewer/SKILL.md +85 -0
  131. package/presets/openwrite/skills/oh-story-deslop/LICENSE +21 -0
  132. package/presets/openwrite/skills/oh-story-deslop/SKILL.md +36 -0
  133. package/presets/openwrite/skills/oh-story-deslop/agents/openai.yaml +4 -0
  134. package/presets/openwrite/skills/oh-story-deslop/references/method.md +22 -0
  135. package/presets/openwrite/skills/oh-story-long-analyze/LICENSE +21 -0
  136. package/presets/openwrite/skills/oh-story-long-analyze/SKILL.md +37 -0
  137. package/presets/openwrite/skills/oh-story-long-analyze/agents/openai.yaml +4 -0
  138. package/presets/openwrite/skills/oh-story-long-analyze/references/method.md +22 -0
  139. package/presets/openwrite/skills/oh-story-long-scan/LICENSE +21 -0
  140. package/presets/openwrite/skills/oh-story-long-scan/SKILL.md +36 -0
  141. package/presets/openwrite/skills/oh-story-long-scan/agents/openai.yaml +4 -0
  142. package/presets/openwrite/skills/oh-story-long-scan/references/method.md +21 -0
  143. package/presets/openwrite/skills/oh-story-long-write/LICENSE +21 -0
  144. package/presets/openwrite/skills/oh-story-long-write/SKILL.md +37 -0
  145. package/presets/openwrite/skills/oh-story-long-write/agents/openai.yaml +4 -0
  146. package/presets/openwrite/skills/oh-story-long-write/references/method.md +33 -0
  147. package/presets/openwrite/skills/oh-story-review/LICENSE +21 -0
  148. package/presets/openwrite/skills/oh-story-review/SKILL.md +36 -0
  149. package/presets/openwrite/skills/oh-story-review/agents/openai.yaml +4 -0
  150. package/presets/openwrite/skills/oh-story-review/references/method.md +25 -0
  151. package/presets/openwrite/skills/progress/SKILL.md +16 -0
  152. package/presets/openwrite/skills/review-chapter/SKILL.md +17 -0
  153. package/presets/openwrite/skills/revise-span/SKILL.md +16 -0
  154. package/presets/openwrite/skills/style-system/SKILL.md +135 -0
  155. package/presets/openwrite/skills/style-system/prompts/analyze_style.md +214 -0
  156. package/presets/openwrite/skills/style-system/prompts/batch_extract_style.md +66 -0
  157. package/presets/openwrite/skills/style-system/prompts/compose_style.md +83 -0
  158. package/presets/openwrite/skills/style-system/prompts/extract_style.md +84 -0
  159. package/presets/openwrite/skills/style-system/prompts/initialize_style.md +52 -0
  160. package/presets/openwrite/skills/style-system/templates/analysis_report.yaml +78 -0
  161. package/presets/openwrite/skills/style-system/templates/composed_style.md +96 -0
  162. package/presets/openwrite/skills/style-system/templates/extraction_report.yaml +80 -0
  163. package/presets/openwrite/skills/style-system/templates/fingerprint.yaml +61 -0
  164. package/presets/openwrite/skills/style-system/tools/README.md +33 -0
  165. package/presets/openwrite/skills/truth-validation/SKILL.md +119 -0
  166. package/presets/openwrite/skills/workflow-manager/SKILL.md +81 -0
  167. package/presets/openwrite/skills/world-query/SKILL.md +45 -0
  168. package/presets/openwrite/skills/write-next/SKILL.md +17 -0
  169. package/release/core-requirements.in +12 -0
  170. package/release/licenses/@deepseek-ai__cosmokit@1.8.3/LICENSE +21 -0
  171. package/release/licenses/@deepseek-ai__schemastery@3.18.2/LICENSE +21 -0
  172. package/release/licenses/@isaacs__fs-minipass@4.0.1/LICENSE +15 -0
  173. package/release/licenses/@standard-schema__spec@1.1.0/LICENSE +21 -0
  174. package/release/licenses/@types__d3-color@3.1.3/LICENSE +21 -0
  175. package/release/licenses/@types__d3-drag@3.0.7/LICENSE +21 -0
  176. package/release/licenses/@types__d3-interpolate@3.0.4/LICENSE +21 -0
  177. package/release/licenses/@types__d3-selection@3.0.11/LICENSE +21 -0
  178. package/release/licenses/@types__d3-transition@3.0.9/LICENSE +21 -0
  179. package/release/licenses/@types__d3-zoom@3.0.8/LICENSE +21 -0
  180. package/release/licenses/@xyflow__react@12.11.6/LICENSE +21 -0
  181. package/release/licenses/@xyflow__system@0.0.82/LICENSE +21 -0
  182. package/release/licenses/ajv-formats@3.0.1/LICENSE +21 -0
  183. package/release/licenses/ajv@8.20.0/LICENSE +22 -0
  184. package/release/licenses/chownr@3.0.0/LICENSE.md +63 -0
  185. package/release/licenses/classcat@5.0.5/LICENSE.md +7 -0
  186. package/release/licenses/commander@7.2.0/LICENSE +22 -0
  187. package/release/licenses/d3-array@3.2.4/LICENSE +13 -0
  188. package/release/licenses/d3-axis@3.0.0/LICENSE +13 -0
  189. package/release/licenses/d3-brush@3.0.0/LICENSE +13 -0
  190. package/release/licenses/d3-chord@3.0.1/LICENSE +13 -0
  191. package/release/licenses/d3-color@3.1.0/LICENSE +13 -0
  192. package/release/licenses/d3-contour@4.0.2/LICENSE +13 -0
  193. package/release/licenses/d3-delaunay@6.0.4/LICENSE +14 -0
  194. package/release/licenses/d3-dispatch@3.0.1/LICENSE +13 -0
  195. package/release/licenses/d3-drag@3.0.0/LICENSE +13 -0
  196. package/release/licenses/d3-dsv@3.0.1/LICENSE +13 -0
  197. package/release/licenses/d3-ease@3.0.1/LICENSE +28 -0
  198. package/release/licenses/d3-fetch@3.0.1/LICENSE +13 -0
  199. package/release/licenses/d3-force@3.0.0/LICENSE +13 -0
  200. package/release/licenses/d3-format@3.1.2/LICENSE +13 -0
  201. package/release/licenses/d3-geo@3.1.1/LICENSE +34 -0
  202. package/release/licenses/d3-hierarchy@3.1.2/LICENSE +13 -0
  203. package/release/licenses/d3-interpolate@3.0.1/LICENSE +13 -0
  204. package/release/licenses/d3-path@3.1.0/LICENSE +13 -0
  205. package/release/licenses/d3-polygon@3.0.1/LICENSE +13 -0
  206. package/release/licenses/d3-quadtree@3.0.1/LICENSE +13 -0
  207. package/release/licenses/d3-random@3.0.1/LICENSE +13 -0
  208. package/release/licenses/d3-scale-chromatic@3.1.0/LICENSE +28 -0
  209. package/release/licenses/d3-scale@4.0.2/LICENSE +13 -0
  210. package/release/licenses/d3-selection@3.0.0/LICENSE +13 -0
  211. package/release/licenses/d3-shape@3.2.0/LICENSE +13 -0
  212. package/release/licenses/d3-time-format@4.1.0/LICENSE +13 -0
  213. package/release/licenses/d3-time@3.1.0/LICENSE +13 -0
  214. package/release/licenses/d3-timer@3.0.1/LICENSE +13 -0
  215. package/release/licenses/d3-transition@3.0.1/LICENSE +13 -0
  216. package/release/licenses/d3-zoom@3.0.0/LICENSE +13 -0
  217. package/release/licenses/d3@7.9.0/LICENSE +13 -0
  218. package/release/licenses/delaunator@5.1.0/LICENSE +15 -0
  219. package/release/licenses/elkjs@0.12.0/LICENSE.md +263 -0
  220. package/release/licenses/fast-deep-equal@3.1.3/LICENSE +21 -0
  221. package/release/licenses/fast-uri@3.1.7/LICENSE +30 -0
  222. package/release/licenses/fflate@0.8.2/LICENSE +21 -0
  223. package/release/licenses/graceful-fs@4.2.11/LICENSE +15 -0
  224. package/release/licenses/iconv-lite@0.6.3/LICENSE +21 -0
  225. package/release/licenses/internmap@2.0.3/LICENSE +13 -0
  226. package/release/licenses/json-schema-traverse@1.0.0/LICENSE +21 -0
  227. package/release/licenses/lucide-react@0.468.0/LICENSE +15 -0
  228. package/release/licenses/minipass@7.1.3/LICENSE.md +55 -0
  229. package/release/licenses/minizlib@3.1.0/LICENSE +26 -0
  230. package/release/licenses/proper-lockfile@4.1.2/LICENSE +21 -0
  231. package/release/licenses/require-from-string@2.0.2/license +21 -0
  232. package/release/licenses/retry@0.12.0/License +21 -0
  233. package/release/licenses/robust-predicates@3.0.3/LICENSE +24 -0
  234. package/release/licenses/rw@1.3.3/LICENSE +26 -0
  235. package/release/licenses/safer-buffer@2.1.2/LICENSE +21 -0
  236. package/release/licenses/signal-exit@3.0.7/LICENSE.txt +16 -0
  237. package/release/licenses/tar@7.5.7/LICENSE.md +55 -0
  238. package/release/licenses/use-sync-external-store@1.6.0/LICENSE +21 -0
  239. package/release/licenses/yallist@5.0.0/LICENSE.md +63 -0
  240. package/release/licenses/zustand@4.5.7/LICENSE +21 -0
  241. package/release/openwrite-5.8.1-py3-none-any.whl +0 -0
  242. package/release/platform-overrides.in +5 -0
  243. package/release/python-constraints.in +96 -0
  244. package/release/requirements.lock +2927 -0
  245. package/release/runtime-manifest.json +98 -0
  246. package/release/sdk-compatibility.json +240 -0
  247. package/release/source.json +859 -0
  248. package/release/wheels/cryptography-50.0.1-cp312-abi3-macosx_13_0_x86_64.whl +0 -0
  249. package/release/wheels/licenses/LICENSE.txt +177 -0
  250. package/release/wheels/provenance.json +15 -0
  251. package/scripts/dog/delivery-stage.js +32 -0
  252. package/scripts/dog/import-chapter.js +20 -0
  253. package/scripts/dog/import-record.js +35 -0
  254. package/scripts/dog/review-dimension.js +41 -0
  255. package/scripts/dog/review-record.js +42 -0
  256. package/scripts/maintenance.mjs +179 -0
  257. package/scripts/prepare.mjs +21 -0
  258. package/vendor/dsh-dog/LICENSE +29 -0
  259. package/vendor/dsh-dog/README.md +114 -0
  260. package/vendor/dsh-dog/UPSTREAM.md +22 -0
  261. package/vendor/dsh-dog/cordis.patch.yml +14 -0
  262. package/vendor/dsh-dog/lib/client.js +2898 -0
  263. package/vendor/dsh-dog/lib/client.js.map +1 -0
  264. package/vendor/dsh-dog/lib/core-BiEBMLz3.d.ts +495 -0
  265. package/vendor/dsh-dog/lib/core-DdfMcrB4.js +2074 -0
  266. package/vendor/dsh-dog/lib/core.d.ts +2 -0
  267. package/vendor/dsh-dog/lib/core.js +2 -0
  268. package/vendor/dsh-dog/lib/index.d.ts +133 -0
  269. package/vendor/dsh-dog/lib/index.js +967 -0
  270. package/vendor/dsh-dog/package.json +97 -0
  271. package/vendor/dsh-dog/schemas/schema-0.2/graph.schema.json +139 -0
  272. package/vendor/dsh-dog/schemas/schema-0.2/report.schema.json +87 -0
  273. package/vendor/dsh-dog/schemas/schema-0.2/run.schema.json +259 -0
  274. package/vendor/dsh-dog/schemas/schema-0.2/runtime-event.schema.json +105 -0
  275. package/vendor/dsh-dog/schemas/schema-0.2/verification.schema.json +40 -0
@@ -0,0 +1,61 @@
1
+ /** Core inline metadata: character state and directed relations. Display-only coloring. */
2
+ export declare const STATE_MARKER_RE: RegExp;
3
+ export declare const RELATION_MARKER_RE: RegExp;
4
+ export type MarkerKind = 'state' | 'relation';
5
+ export type ParsedMarker = {
6
+ kind: 'state';
7
+ name: string;
8
+ field: string;
9
+ oldState: string;
10
+ newState: string;
11
+ } | {
12
+ kind: 'relation';
13
+ source: string;
14
+ target: string;
15
+ description: string;
16
+ };
17
+ export type MarkerSpan = {
18
+ kind: MarkerKind | 'invalid';
19
+ start: number;
20
+ end: number;
21
+ line: number;
22
+ text: string;
23
+ parsed: ParsedMarker | null;
24
+ hint: string;
25
+ };
26
+ export type MarkerDraftError = 'empty' | 'newline' | 'reserved';
27
+ export declare function parseMarkerLine(line: string): {
28
+ parsed: ParsedMarker | null;
29
+ invalid: boolean;
30
+ hint: string;
31
+ };
32
+ /** Parse markers outside fenced code. Invalid/unclosed fences keep source text. */
33
+ export declare function parseMarkers(text: string): MarkerSpan[];
34
+ export declare function formatStateMarker(input: {
35
+ name: string;
36
+ field?: string;
37
+ oldState: string;
38
+ newState: string;
39
+ }): {
40
+ ok: true;
41
+ markdown: string;
42
+ } | {
43
+ ok: false;
44
+ error: MarkerDraftError;
45
+ field: string;
46
+ };
47
+ export declare function formatRelationMarker(input: {
48
+ source: string;
49
+ target: string;
50
+ description: string;
51
+ }): {
52
+ ok: true;
53
+ markdown: string;
54
+ } | {
55
+ ok: false;
56
+ error: MarkerDraftError;
57
+ field: string;
58
+ };
59
+ /** Readable prose with valid metadata lines removed; invalid markers stay. */
60
+ export declare function stripValidMarkers(text: string): string;
61
+ export declare function readableWritingUnits(text: string): number;
@@ -0,0 +1,30 @@
1
+ /** Registered people/places that can become 提及 in the open chapter. */
2
+ export type MentionAsset = {
3
+ kind: string;
4
+ id: string;
5
+ name: string;
6
+ summary: string;
7
+ aliases: string[];
8
+ };
9
+ export type MentionSpan = {
10
+ start: number;
11
+ end: number;
12
+ text: string;
13
+ candidates: MentionAsset[];
14
+ };
15
+ export declare function isPersonOrPlaceKind(kind: string): boolean;
16
+ export declare function isCharacterKind(kind: string): boolean;
17
+ /** Characters for marker insert. Homonyms stay distinct by id. */
18
+ export declare function characterChoices(assets: readonly MentionAsset[]): MentionAsset[];
19
+ export declare function characterMatches(assets: readonly MentionAsset[], label: string): MentionAsset[];
20
+ /** Homonyms require an explicit id; a unique match may be used without one. */
21
+ export declare function resolveCharacterChoice(assets: readonly MentionAsset[], selectedId: string, label?: string): MentionAsset | null;
22
+ /** Unwrap Studio GET /assets into character and location summaries. */
23
+ export declare function parseMentionAssets(value: unknown): MentionAsset[];
24
+ /** One chip per unambiguous asset, or per conflicting label/candidate set. */
25
+ export declare function uniqueMentionAssets(spans: readonly MentionSpan[]): MentionSpan[];
26
+ /**
27
+ * Non-overlapping name/alias hits in manuscript order.
28
+ * Longer labels win; identical labels retain every candidate without guessing identity.
29
+ */
30
+ export declare function findManuscriptMentions(text: string, assets: readonly MentionAsset[]): MentionSpan[];
@@ -0,0 +1,7 @@
1
+ /** Map overlay needles onto live IR text nodes. Display-only; never writes into markdown. */
2
+ /** nth occurrence of needle across adjacent text nodes, including Vditor IR splits. */
3
+ export declare function rangeForNeedle(root: ParentNode, needle: string, occurrence: number): Range | null;
4
+ /** Repaint when the IR scroller moves or the frame size changes. */
5
+ export declare function bindOverlayResync(host: HTMLElement, refresh: () => void): () => void;
6
+ /** Select the quoted span in the live IR and bring it into view. */
7
+ export declare function revealNeedle(root: ParentNode, needle: string, occurrence: number): Range | null;
@@ -0,0 +1,42 @@
1
+ import type { AnnotationColor, ManuscriptAnnotation } from './manuscript-annotations.ts';
2
+ import type { MarkerSpan } from './manuscript-markers.ts';
3
+ export type OverlayKind = 'note' | 'state' | 'relation' | 'invalid';
4
+ export type OverlayBand = {
5
+ kind: OverlayKind;
6
+ start: number;
7
+ end: number;
8
+ needle: string;
9
+ occurrence: number;
10
+ color?: AnnotationColor;
11
+ title: string;
12
+ };
13
+ /** 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 const OVERLAY_THEME: {
16
+ readonly light: {
17
+ readonly note: {
18
+ readonly amber: "color-mix(in srgb, var(--dsw-alias-state-warn-primary) 48%, transparent)";
19
+ readonly rose: "color-mix(in srgb, var(--dsw-alias-state-error-primary) 42%, transparent)";
20
+ readonly sky: "color-mix(in srgb, var(--dsw-alias-state-business-primary) 42%, transparent)";
21
+ readonly lime: "color-mix(in srgb, var(--dsw-alias-state-success-primary) 42%, transparent)";
22
+ readonly violet: "color-mix(in srgb, var(--dsw-alias-label-primary) 28%, transparent)";
23
+ };
24
+ readonly state: "color-mix(in srgb, var(--dsw-alias-state-business-primary) 26%, transparent)";
25
+ readonly relation: "color-mix(in srgb, var(--dsw-alias-state-warn-primary) 26%, transparent)";
26
+ readonly invalid: "color-mix(in srgb, var(--dsw-alias-state-error-primary) 18%, transparent)";
27
+ };
28
+ readonly dark: {
29
+ readonly note: {
30
+ readonly amber: "color-mix(in srgb, var(--dsw-alias-state-warn-primary) 55%, transparent)";
31
+ readonly rose: "color-mix(in srgb, var(--dsw-alias-state-error-primary) 50%, transparent)";
32
+ readonly sky: "color-mix(in srgb, var(--dsw-alias-state-business-primary) 50%, transparent)";
33
+ readonly lime: "color-mix(in srgb, var(--dsw-alias-state-success-primary) 50%, transparent)";
34
+ readonly violet: "color-mix(in srgb, var(--dsw-alias-label-primary) 34%, transparent)";
35
+ };
36
+ readonly state: "color-mix(in srgb, var(--dsw-alias-state-business-primary) 32%, transparent)";
37
+ readonly relation: "color-mix(in srgb, var(--dsw-alias-state-warn-primary) 32%, transparent)";
38
+ readonly invalid: "color-mix(in srgb, var(--dsw-alias-state-error-primary) 22%, transparent)";
39
+ };
40
+ };
41
+ export declare function overlayFill(kind: OverlayKind, theme: 'light' | 'dark', color?: AnnotationColor): string;
42
+ export declare function overlayUnderline(theme: 'light' | 'dark', color?: AnnotationColor): string;
@@ -0,0 +1,59 @@
1
+ /** Author-visible manuscript range used by selection polish and the editor. */
2
+ export type ManuscriptSelection = {
3
+ start: number;
4
+ end: number;
5
+ text: string;
6
+ };
7
+ export type SelectionPolishKind = 'expand' | 'compress' | 'naturalize' | 'reviewFix';
8
+ export declare const SELECTION_POLISH_ACTIONS: readonly {
9
+ kind: SelectionPolishKind;
10
+ label: 'creation.selection.expand' | 'creation.selection.compress' | 'creation.selection.naturalize' | 'creation.selection.reviewFix';
11
+ }[];
12
+ /** Mark chrome that must not steal the editor selection on pointer down. */
13
+ export declare const MANUSCRIPT_SELECTION_PRESERVE_ATTR = "data-preserve-manuscript-selection";
14
+ export declare function nodePreservesManuscriptSelection(node: EventTarget | Node | null): boolean;
15
+ /** False when a toolbar click collapsed the native range; keep the last editor span. */
16
+ export declare function shouldClearManuscriptSelection(options: {
17
+ selectionInsideEditor: boolean;
18
+ preserveNode: EventTarget | Node | null;
19
+ }): boolean;
20
+ export declare function manuscriptSelectionFromRange(value: string, start: number, end: number): ManuscriptSelection | null;
21
+ /** Count non-overlapping occurrences of needle in haystack. */
22
+ export declare function countOccurrences(haystack: string, needle: string): number;
23
+ /** Zero-based nth occurrence start, or -1. */
24
+ export declare function nthIndexOf(haystack: string, needle: string, occurrence: number): number;
25
+ /**
26
+ * Map a live editor selection onto markdown offsets.
27
+ * Duplicate quotes without an occurrence index do not bind the first hit.
28
+ */
29
+ export declare function locateSelectedMarkdown(value: string, selected: string, occurrence?: number): ManuscriptSelection | null;
30
+ export type QuoteAnchor = {
31
+ state: 'attached' | 'relocated';
32
+ start: number;
33
+ end: number;
34
+ } | {
35
+ state: 'detached';
36
+ reason: 'missing' | 'ambiguous' | 'mismatch';
37
+ };
38
+ /** Bind a stored quote to current markdown using hints, then unique relocate. */
39
+ export declare function locateQuote(content: string, quote: string, startHint: number, endHint: number): QuoteAnchor;
40
+ /** Review issues whose evidence sits inside the current manuscript selection. */
41
+ export declare function reviewIssuesForSelection(issues: readonly unknown[], selection: ManuscriptSelection): string[];
42
+ export type SelectionPolishRequest = {
43
+ ok: true;
44
+ path: '/revisions/selection' | '/revisions/from-review';
45
+ body: Record<string, unknown>;
46
+ } | {
47
+ ok: false;
48
+ reason: 'empty' | 'no-review' | 'no-issues';
49
+ };
50
+ /** Map one author action onto the existing Studio revision-create routes. */
51
+ export declare function selectionPolishRequest(input: {
52
+ kind: SelectionPolishKind;
53
+ chapterId: string;
54
+ selection: ManuscriptSelection;
55
+ documentRevision: string;
56
+ reviewRevision: string;
57
+ reviewFresh: boolean;
58
+ issueIds: string[];
59
+ }): SelectionPolishRequest;
@@ -0,0 +1,17 @@
1
+ import type { WorkbenchContext } from './WorkbenchStore.ts';
2
+ /** A workspace's canonical root is part of its identity; unbound views never cache. */
3
+ export declare function modelMemoryContextKey(context: WorkbenchContext | null | undefined): string | null;
4
+ /**
5
+ * Short-lived view memory only. It never calls localStorage or serializes to disk.
6
+ * Inactive entries expire, and an entry limit also bounds a long-lived app session.
7
+ */
8
+ export declare class WorkspaceViewMemory<T> {
9
+ private readonly limit;
10
+ private readonly retentionMs;
11
+ private readonly entries;
12
+ constructor(limit?: number, retentionMs?: number);
13
+ read(key: string | null): T | undefined;
14
+ take(key: string | null): T | undefined;
15
+ write(key: string | null, value: T): void;
16
+ delete(key: string | null): void;
17
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Workspace-scoped localStorage keys (docs/WORKSPACE_CONTEXT_CONTRACT.md §9):
3
+ * every persisted panel key carries the bound workspace id as suffix so
4
+ * per-workspace UI state never leaks across contexts. The 'default' segment
5
+ * covers the no-context window (before a session's workspace resolves).
6
+ */
7
+ /** Namespace one base key with the workspace id ('default' when unbound). */
8
+ export declare function storageKey(base: string, workspaceId: string | null | undefined): string;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Pure epoch-invalidation logic shared by the WorkbenchStore. Extracted so it
3
+ * can be unit-tested with Node's type-stripping runner without React/DOM.
4
+ */
5
+ export type ResourceKey = 'workspace' | 'manuscript' | 'outline' | 'assets' | 'tasks' | 'benchmark' | 'models' | 'dag' | 'graph' | 'research' | 'revisions';
6
+ export type Epochs = Readonly<Record<ResourceKey, number>>;
7
+ export declare function nextEpochs(resource: ResourceKey, epochs: Epochs): Epochs;
8
+ export declare function triggersRefresh(resource: ResourceKey): boolean;
9
+ /**
10
+ * Typed terminal diff between two task-list payloads: the resources whose
11
+ * views must remount because a task they display NEWLY reached a terminal
12
+ * status. A task absent from the previous payload is not a transition (we
13
+ * never observed it running — initial loads and window re-entries stay
14
+ * quiet). Malformed payloads yield [], never throw.
15
+ */
16
+ export declare function terminalTransitionResources(previousTasksJson: unknown, nextTasksJson: unknown): ResourceKey[];
@@ -0,0 +1,52 @@
1
+ import type { ISessions } from '@deepseek-ai/dsh-api-session-controller/client';
2
+ import type { SessionId } from '@deepseek-ai/dsh-session';
3
+ import type { IWorkspaces, WorkspaceSnapshot, WorkspaceView } from '@deepseek-ai/dsh-api-workspace-controller/client';
4
+ import type { SnapshotSelectorHook } from '@deepseek-ai/dsh-client-ui-slots';
5
+ import type { UiWorkspace } from '@deepseek-ai/dsh-client-ui-workspace/client';
6
+ import type { StudioApiInjected } from './api.ts';
7
+ /** The framework standard-kit members the Workspace helpers consume. */
8
+ export interface WorkspaceStandardKit {
9
+ sessionId: SessionId | undefined;
10
+ useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>;
11
+ }
12
+ /**
13
+ * The full inject face for the conversation views: the Studio API trio plus
14
+ * the dsh domain services the new-work flow drives (directory pick →
15
+ * workspace create → session connect).
16
+ */
17
+ export interface StudioPanelInjected extends StudioApiInjected {
18
+ workspaces: IWorkspaces & Pick<UiWorkspace, 'pickDirectory' | 'connectWorkspace'>;
19
+ sessions: ISessions;
20
+ }
21
+ /** The Workspace the current session is accounted under, if any. */
22
+ export declare function useCurrentWorkspace(kit: WorkspaceStandardKit): WorkspaceView | undefined;
23
+ /**
24
+ * Reflect the session's Workspace binding into the WorkbenchStore context
25
+ * barrier. Idempotent (setContext no-ops on an identical context), so every
26
+ * always-mounted session-scope component may call it. Returns the current
27
+ * Workspace for display.
28
+ */
29
+ export declare function useBindStudioContext(kit: WorkspaceStandardKit): WorkspaceView | undefined;
30
+ export type CreateNovelResult = 'created' | 'cancelled';
31
+ /**
32
+ * Initialize the OpenWrite project at a bound Workspace's canonical absolute
33
+ * path (contract §5: init pins the context root) and refresh the store.
34
+ * Throws on failure — callers surface the message.
35
+ */
36
+ export declare function initWorkspaceProject(postStudioApi: StudioApiInjected['postStudioApi'], workspacePath: string, input: {
37
+ novelId: string;
38
+ title: string;
39
+ }): Promise<void>;
40
+ /**
41
+ * The new-work flow (contract §9): pick a directory through the host's native
42
+ * picker → register it as a dsh Workspace → bind the panel context (the proxy
43
+ * resolves the id from this point) → context-mode `/project/init` with the
44
+ * Workspace's canonical absolute path → connect a session and open it.
45
+ *
46
+ * Every failure throws to the caller for surfacing — no silent fallback. A
47
+ * cancelled picker aborts the flow quietly ('cancelled').
48
+ */
49
+ export declare function createNovelWorkspace(services: Pick<StudioPanelInjected, 'workspaces' | 'sessions'>, postStudioApi: StudioApiInjected['postStudioApi'], input: {
50
+ novelId: string;
51
+ title: string;
52
+ }): Promise<CreateNovelResult>;
@@ -0,0 +1,7 @@
1
+ import type { SessionListState } from '@deepseek-ai/dsh-api-session-controller/client';
2
+ /** Presentation follows the current session; the host tool catalog never follows UI navigation. */
3
+ export declare function isWritingSession(state: SessionListState): boolean;
4
+ export declare function watchWritingScope(source: {
5
+ getSnapshot(): SessionListState;
6
+ subscribe(listener: () => void): () => void;
7
+ }, mount: () => (() => void)): () => void;
@@ -0,0 +1,5 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ export declare const name = "@dsh-novel/studio-panel";
3
+ export declare const VENDOR_ROUTE = "/studio-panel/vendor/vditor";
4
+ /** Browser UI loader plus same-origin static assets for the packaged editor engine. */
5
+ export declare function apply(ctx: Context): void;
@@ -0,0 +1,105 @@
1
+ {
2
+ "name": "@dsh-novel/studio-panel",
3
+ "description": "Native dsh writing workbenches backed by the headless OpenWrite domain service",
4
+ "version": "0.1.0",
5
+ "private": true,
6
+ "type": "module",
7
+ "main": "lib/index.js",
8
+ "types": "lib/types/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./lib/types/index.d.ts",
12
+ "default": "./lib/index.js"
13
+ },
14
+ "./client": {
15
+ "types": "./lib/types/client/index.d.ts",
16
+ "default": "./lib/client.js"
17
+ },
18
+ "./cordis.patch.yml": "./cordis.patch.yml",
19
+ "./package.json": "./package.json"
20
+ },
21
+ "dsh": {
22
+ "bundle": {
23
+ "patch": "./cordis.patch.yml"
24
+ },
25
+ "client": {
26
+ "inject": [
27
+ "@deepseek-ai/dsh-client-locale",
28
+ "@deepseek-ai/dsh-client-ui-conversation",
29
+ "@deepseek-ai/dsh-client-ui-tool",
30
+ "@deepseek-ai/dsh-api-session-controller",
31
+ "@deepseek-ai/dsh-api-workspace-controller",
32
+ "@deepseek-ai/dsh-client-ui-workspace",
33
+ "@deepseek-ai/dsh-client-ui-chat"
34
+ ],
35
+ "platform": "web"
36
+ }
37
+ },
38
+ "files": [
39
+ "lib/index.js",
40
+ "lib/client.js",
41
+ "lib/client.js.map",
42
+ "lib/types/**/*.d.ts",
43
+ "vendor/vditor/**/*",
44
+ "cordis.patch.yml"
45
+ ],
46
+ "scripts": {
47
+ "build": "node -e \"require('node:fs').rmSync('lib', { recursive: true, force: true })\" && tsc -p tsconfig.json && tsc -p tsconfig.client.json && tsdown",
48
+ "smoke": "node scripts/smoke.mjs",
49
+ "test:components": "vitest run",
50
+ "test:e2e": "PLAYWRIGHT_BROWSERS_PATH=.pw-browsers playwright test",
51
+ "test:epochs": "node --experimental-strip-types scripts/epochs.test.mjs",
52
+ "watch": "tsdown --watch"
53
+ },
54
+ "license": "MIT",
55
+ "dependencies": {
56
+ "@deepseek-ai/schemastery": "3.18.2",
57
+ "@xyflow/react": "^12.11.3",
58
+ "d3": "^7.9.0",
59
+ "elkjs": "^0.12.0",
60
+ "lucide-react": "^0.468.0"
61
+ },
62
+ "peerDependencies": {
63
+ "@deepseek-ai/cordis": "4.0.2",
64
+ "@deepseek-ai/dsh-host-webserver": "0.1.2-rc.1",
65
+ "react": "^18.2.0",
66
+ "react-dom": "^18.2.0"
67
+ },
68
+ "devDependencies": {
69
+ "@deepseek-ai/cordis": "4.0.2",
70
+ "@deepseek-ai/dsh-client-locale": "0.1.2-rc.1",
71
+ "@deepseek-ai/dsh-client-ui-conversation": "0.1.2-rc.1",
72
+ "@deepseek-ai/dsh-client-ui-primitives": "0.1.2-rc.1",
73
+ "@deepseek-ai/dsh-client-ui-slots": "0.1.2-rc.1",
74
+ "@deepseek-ai/dsh-client-ui-tool": "0.1.2-rc.1",
75
+ "@deepseek-ai/dsh-host-webserver": "0.1.2-rc.1",
76
+ "@playwright/test": "^1.62.1",
77
+ "@testing-library/dom": "^10.4.1",
78
+ "@testing-library/react": "^16.3.3",
79
+ "@tsdown/css": "^0.22.14",
80
+ "@types/d3": "^7.4.3",
81
+ "@types/node": "^24.0.0",
82
+ "@types/react": "~18.3.1",
83
+ "@types/react-dom": "~18.3.0",
84
+ "jsdom": "^30.0.1",
85
+ "lightningcss": "^1.32.0",
86
+ "react": "^18.3.1",
87
+ "react-dom": "^18.3.1",
88
+ "tsdown": "^0.22.2",
89
+ "typescript": "^5.9.0",
90
+ "vitest": "^4.1.11",
91
+ "@deepseek-ai/dsh-api-session-controller": "0.1.2-rc.1",
92
+ "@deepseek-ai/dsh-api-workspace-controller": "0.1.2-rc.1",
93
+ "@deepseek-ai/dsh-client-ui-session": "0.1.2-rc.1",
94
+ "@deepseek-ai/dsh-client-ui-workspace": "0.1.2-rc.1",
95
+ "@deepseek-ai/dsh-client-ui-chat": "0.1.2-rc.1",
96
+ "@deepseek-ai/dsh-client-ui-renderer": "0.1.2-rc.1",
97
+ "@deepseek-ai/dsh-client-store": "0.1.2-rc.1",
98
+ "@deepseek-ai/dsh-client-ui-sidebar": "0.1.2-rc.1",
99
+ "@deepseek-ai/dsh-api-remotes": "0.1.2-rc.1",
100
+ "@deepseek-ai/dsh-agent-presets": "0.1.2-rc.1"
101
+ },
102
+ "engines": {
103
+ "node": ">=22.19.0"
104
+ }
105
+ }
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2019-present B3log 开源, b3log.org
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,123 @@
1
+ /*!
2
+ * Vditor - A markdown editor written in TypeScript.
3
+ *
4
+ * MIT License
5
+ *
6
+ * Copyright (c) 2018-present B3log 开源, b3log.org
7
+ *
8
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
9
+ * of this software and associated documentation files (the "Software"), to deal
10
+ * in the Software without restriction, including without limitation the rights
11
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
+ * copies of the Software, and to permit persons to whom the Software is
13
+ * furnished to do so, subject to the following conditions:
14
+ *
15
+ * The above copyright notice and this permission notice shall be included in all
16
+ * copies or substantial portions of the Software.
17
+ *
18
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24
+ * SOFTWARE.
25
+ *
26
+ */
27
+ .vditor-reset {
28
+ color: #d1d5da;
29
+ }
30
+
31
+ .vditor-reset a, .vditor-ir__link {
32
+ color: #4285f4;
33
+ }
34
+
35
+ .vditor-reset h1, .vditor-reset h2 {
36
+ padding-bottom: 0.3em;
37
+ border-bottom: 1px solid #d1d5da
38
+ }
39
+
40
+ .vditor-reset hr {
41
+ background-color: #d1d5da
42
+ }
43
+
44
+ .vditor-reset blockquote {
45
+ padding: 0 1em;
46
+ color: #b9b9b9;
47
+ border-left: .25em solid #d1d5da
48
+ }
49
+
50
+ .vditor-reset iframe {
51
+ border: 1px solid #141414
52
+ }
53
+
54
+ .vditor-reset table tr {
55
+ background-color: #2f363d
56
+ }
57
+
58
+ .vditor-reset table td, .vditor-reset table th {
59
+ border: 1px solid #dfe2e5
60
+ }
61
+
62
+ .vditor-reset table tbody tr:nth-child(2n) {
63
+ background-color: #24292e
64
+ }
65
+
66
+ .vditor-reset code:not(.hljs):not(.highlight-chroma) {
67
+ background-color: rgba(66, 133, 244, .36);
68
+ }
69
+
70
+ .vditor-reset .language-abc svg,
71
+ .vditor-reset .language-abc path {
72
+ fill: currentColor;
73
+ color: #d1d5da;
74
+ }
75
+
76
+ .language-graphviz polygon {
77
+ fill: rgba(66, 133, 244, .36);
78
+ }
79
+
80
+ .vditor-reset kbd {
81
+ color: #d1d5da;
82
+ background-color: #2f363d;
83
+ border: 1px solid #141414;
84
+ box-shadow: inset 0 -1px 0 #141414
85
+ }
86
+
87
+ .vditor-copy svg {
88
+ color: #b9b9b9
89
+ }
90
+
91
+ .vditor-speech {
92
+ background-color: #1d2125;
93
+ border: 1px solid #141414;
94
+ color: #b9b9b9
95
+ }
96
+
97
+ .vditor-speech--current, .vditor-speech:hover {
98
+ color: #fff
99
+ }
100
+
101
+ .vditor-linkcard a {
102
+ background-color: #1d2125;
103
+ }
104
+
105
+ .vditor-linkcard a:visited .vditor-linkcard__abstract {
106
+ color: hsla(0, 0%, 72.5%, .36)
107
+ }
108
+
109
+ .vditor-linkcard__title {
110
+ color: #d1d5da
111
+ }
112
+
113
+ .vditor-linkcard__abstract {
114
+ color: #b9b9b9
115
+ }
116
+
117
+ .vditor-linkcard__site {
118
+ color: #fff
119
+ }
120
+
121
+ .vditor-linkcard__image {
122
+ background-color: hsla(0, 0%, 72.5%, .36)
123
+ }
@@ -0,0 +1,101 @@
1
+ /*!
2
+ * Vditor - A markdown editor written in TypeScript.
3
+ *
4
+ * MIT License
5
+ *
6
+ * Copyright (c) 2018-present B3log 开源, b3log.org
7
+ *
8
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
9
+ * of this software and associated documentation files (the "Software"), to deal
10
+ * in the Software without restriction, including without limitation the rights
11
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
+ * copies of the Software, and to permit persons to whom the Software is
13
+ * furnished to do so, subject to the following conditions:
14
+ *
15
+ * The above copyright notice and this permission notice shall be included in all
16
+ * copies or substantial portions of the Software.
17
+ *
18
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24
+ * SOFTWARE.
25
+ *
26
+ */
27
+ .vditor-reset h1, .vditor-reset h2 {
28
+ padding-bottom: 0.3em;
29
+ border-bottom: 1px solid #eaecef;
30
+ }
31
+
32
+ .vditor-reset hr {
33
+ background-color: #eaecef;
34
+ }
35
+
36
+ .vditor-reset blockquote {
37
+ color: #6a737d;
38
+ border-left: .25em solid #eaecef
39
+ }
40
+
41
+ .vditor-reset iframe {
42
+ border: 1px solid #d1d5da
43
+ }
44
+
45
+ .vditor-reset table tr {
46
+ border-top: 1px solid #c6cbd1;
47
+ background-color: #fafbfc
48
+ }
49
+
50
+ .vditor-reset table td, .vditor-reset table th {
51
+ border: 1px solid #dfe2e5
52
+ }
53
+
54
+ .vditor-reset table tbody tr:nth-child(2n) {
55
+ background-color: #fff
56
+ }
57
+
58
+ .vditor-reset code:not(.hljs):not(.highlight-chroma) {
59
+ background-color: rgba(27, 31, 35, .05);
60
+ }
61
+
62
+ .vditor-reset kbd {
63
+ color: #24292e;
64
+ background-color: #fafbfc;
65
+ border: solid 1px #d1d5da;
66
+ box-shadow: inset 0 -1px 0 #d1d5da;
67
+ }
68
+
69
+ .vditor-speech {
70
+ background-color: #f6f8fa;
71
+ border: 1px solid #d1d5da;
72
+ color: #586069;
73
+ }
74
+
75
+ .vditor-speech--current, .vditor-speech:hover {
76
+ color: #4285f4;
77
+ }
78
+
79
+ .vditor-linkcard a {
80
+ background-color: #f6f8fa;
81
+ }
82
+
83
+ .vditor-linkcard a:visited .vditor-linkcard__abstract {
84
+ color: rgba(88, 96, 105, 0.36);
85
+ }
86
+
87
+ .vditor-linkcard__title {
88
+ color: #24292e;
89
+ }
90
+
91
+ .vditor-linkcard__abstract {
92
+ color: #586069;
93
+ }
94
+
95
+ .vditor-linkcard__site {
96
+ color: #4285f4;
97
+ }
98
+
99
+ .vditor-linkcard__image {
100
+ background-color: rgba(88, 96, 105, 0.36);
101
+ }