@waterwx/dsh-novel-forge 1.2.0 → 1.2.1-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/README.md +237 -349
  2. package/lib/client.js +54447 -10560
  3. package/lib/index.js +12008 -5071
  4. package/lib/types/action-guard.d.ts +61 -0
  5. package/lib/types/ai-scan.d.ts +36 -0
  6. package/lib/types/assets.d.ts +18 -3
  7. package/lib/types/assistant.d.ts +29 -0
  8. package/lib/types/author-assets.d.ts +25 -0
  9. package/lib/types/bookshelf.d.ts +11 -1
  10. package/lib/types/client/api.d.ts +147 -9
  11. package/lib/types/client/docx.d.ts +2 -0
  12. package/lib/types/client/index.d.ts +1 -1
  13. package/lib/types/client/llmLive.d.ts +33 -0
  14. package/lib/types/client/locales.d.ts +28 -11
  15. package/lib/types/client/panel/AdaptModeView.d.ts +5 -0
  16. package/lib/types/client/panel/AiTag.d.ts +1 -0
  17. package/lib/types/client/panel/AssistantTab.d.ts +4 -1
  18. package/lib/types/client/panel/AuthorAssetsView.d.ts +4 -0
  19. package/lib/types/client/panel/AuthorHome.d.ts +34 -0
  20. package/lib/types/client/panel/BookAnalysisView.d.ts +4 -0
  21. package/lib/types/client/panel/CmdPalette.d.ts +12 -0
  22. package/lib/types/client/panel/CreateBookView.d.ts +5 -1
  23. package/lib/types/client/panel/DirectorView.d.ts +7 -0
  24. package/lib/types/client/panel/GlobalAssetLibraryView.d.ts +4 -0
  25. package/lib/types/client/panel/IdeaInspirationView.d.ts +6 -0
  26. package/lib/types/client/panel/ImportModal.d.ts +7 -0
  27. package/lib/types/client/panel/KnowledgeBaseView.d.ts +4 -0
  28. package/lib/types/client/panel/LiveFeedLog.d.ts +8 -0
  29. package/lib/types/client/panel/MarketRadarView.d.ts +5 -0
  30. package/lib/types/client/panel/ModelManager.d.ts +14 -0
  31. package/lib/types/client/panel/NovelPanel.d.ts +6 -1
  32. package/lib/types/client/panel/PageHeader.d.ts +18 -0
  33. package/lib/types/client/panel/ProgressConsole.d.ts +17 -0
  34. package/lib/types/client/panel/ProgressHomeView.d.ts +5 -0
  35. package/lib/types/client/panel/ReasoningSection.d.ts +10 -0
  36. package/lib/types/client/panel/SettingsView.d.ts +19 -0
  37. package/lib/types/client/panel/ShelfView.d.ts +12 -1
  38. package/lib/types/client/panel/SubPage.d.ts +27 -0
  39. package/lib/types/client/panel/toast.d.ts +2 -0
  40. package/lib/types/client/panel/views.d.ts +25 -7
  41. package/lib/types/client/run-status.d.ts +19 -0
  42. package/lib/types/client/text.d.ts +9 -0
  43. package/lib/types/docx-core.d.ts +16 -0
  44. package/lib/types/docx.d.ts +2 -3
  45. package/lib/types/engine.d.ts +146 -40
  46. package/lib/types/global-assets.d.ts +6 -0
  47. package/lib/types/index.d.ts +18 -2
  48. package/lib/types/llm-live.d.ts +44 -0
  49. package/lib/types/market-radar-scan.d.ts +19 -0
  50. package/lib/types/market-radar-sources.d.ts +31 -0
  51. package/lib/types/migrate-output.d.ts +25 -0
  52. package/lib/types/novel-context.d.ts +80 -0
  53. package/lib/types/prompt-utils.d.ts +35 -0
  54. package/lib/types/prompting.d.ts +10 -0
  55. package/lib/types/protocol.d.ts +1029 -123
  56. package/lib/types/review-policy.d.ts +97 -0
  57. package/lib/types/routes.d.ts +4 -0
  58. package/lib/types/run.d.ts +3 -1
  59. package/lib/types/stage-contract.d.ts +60 -0
  60. package/package.json +51 -27
  61. package/scripts/patch-schemastery.mjs +47 -0
  62. package/src/action-guard.ts +127 -0
  63. package/src/ai-scan.ts +179 -0
  64. package/src/assets.ts +1774 -520
  65. package/src/assistant.ts +1082 -770
  66. package/src/author-assets.ts +149 -0
  67. package/src/bookshelf.ts +187 -151
  68. package/src/client/api.ts +684 -410
  69. package/src/client/docx.ts +37 -69
  70. package/src/client/index.ts +3 -1
  71. package/src/client/llmLive.ts +101 -0
  72. package/src/client/locales.ts +418 -383
  73. package/src/client/mount.tsx +1 -1
  74. package/src/client/panel/AdaptModeView.tsx +535 -0
  75. package/src/client/panel/AiTag.tsx +7 -0
  76. package/src/client/panel/AssetsTab.tsx +448 -458
  77. package/src/client/panel/AssistantTab.tsx +355 -301
  78. package/src/client/panel/AuthorAssetsView.tsx +206 -0
  79. package/src/client/panel/AuthorHome.tsx +309 -0
  80. package/src/client/panel/BookAnalysisView.tsx +63 -0
  81. package/src/client/panel/CmdPalette.tsx +102 -0
  82. package/src/client/panel/CreateBookView.tsx +366 -348
  83. package/src/client/panel/DirectorView.tsx +200 -0
  84. package/src/client/panel/GlobalAssetLibraryView.tsx +168 -0
  85. package/src/client/panel/IdeaInspirationView.tsx +76 -0
  86. package/src/client/panel/ImportModal.tsx +303 -0
  87. package/src/client/panel/KnowledgeBaseView.tsx +125 -0
  88. package/src/client/panel/LiveFeedLog.tsx +67 -0
  89. package/src/client/panel/MarketRadarView.tsx +377 -0
  90. package/src/client/panel/ModelManager.tsx +205 -0
  91. package/src/client/panel/NovelPanel.tsx +5403 -4597
  92. package/src/client/panel/PageHeader.tsx +37 -0
  93. package/src/client/panel/ProgressConsole.tsx +63 -0
  94. package/src/client/panel/ReaderView.tsx +306 -306
  95. package/src/client/panel/ReasoningSection.tsx +31 -0
  96. package/src/client/panel/RunPanel.tsx +223 -204
  97. package/src/client/panel/SettingsView.tsx +305 -0
  98. package/src/client/panel/ShelfView.tsx +266 -236
  99. package/src/client/panel/SubPage.tsx +42 -0
  100. package/src/client/panel/WorldTab.tsx +202 -202
  101. package/src/client/panel/panel.module.css +5764 -2941
  102. package/src/client/panel/toast.ts +51 -0
  103. package/src/client/panel/views.tsx +401 -314
  104. package/src/client/run-status.ts +143 -0
  105. package/src/client/sidebar-entry.ts +1 -1
  106. package/src/client/text.ts +28 -0
  107. package/src/docx-core.ts +53 -0
  108. package/src/docx.ts +44 -83
  109. package/src/engine.ts +4231 -2787
  110. package/src/global-assets.ts +59 -0
  111. package/src/index.ts +311 -252
  112. package/src/llm-live.ts +68 -0
  113. package/src/market-radar-scan.ts +41 -0
  114. package/src/market-radar-sources.ts +173 -0
  115. package/src/migrate-output.ts +76 -0
  116. package/src/novel-context.ts +286 -0
  117. package/src/prompting.ts +26 -0
  118. package/src/protocol.ts +2072 -1182
  119. package/src/review-policy.ts +161 -0
  120. package/src/routes.ts +3405 -2151
  121. package/src/run.ts +342 -330
  122. package/src/stage-contract.ts +189 -0
  123. package/lib/client.js.map +0 -1
  124. package/lib/index.js.map +0 -1
  125. package/src/client/panel/BookshelfBar.tsx +0 -170
@@ -0,0 +1,102 @@
1
+ /**
2
+ * CmdPalette — 全局命令面板(⌘K / Ctrl+K,R3 微交互)。
3
+ *
4
+ * 纯受控组件:open/onClose 由 NovelPanel 管理,actions 由 NovelPanel 组装
5
+ * (Tab 跳转 / 浮窗开关 / 设置直达)。键盘:↑↓ 选择、Enter 执行、Esc 关闭。
6
+ * 样式走 panel.module.css 的 .cmd* 家族,完全跟随当前主题令牌。
7
+ */
8
+ import { useEffect, useMemo, useRef, useState } from 'react'
9
+ import type { ReactElement } from 'react'
10
+ import css from './panel.module.css'
11
+
12
+ export interface CmdAction {
13
+ icon: string
14
+ label: string
15
+ hint?: string
16
+ run: () => void
17
+ }
18
+
19
+ export function CmdPalette({ open, onClose, actions }: {
20
+ open: boolean
21
+ onClose: () => void
22
+ actions: CmdAction[]
23
+ }): ReactElement | null {
24
+ const [query, setQuery] = useState('')
25
+ const [active, setActive] = useState(0)
26
+ const inputRef = useRef<HTMLInputElement | null>(null)
27
+ const listRef = useRef<HTMLUListElement | null>(null)
28
+
29
+ const filtered = useMemo(() => {
30
+ const q = query.trim().toLowerCase()
31
+ if (q === '') return actions
32
+ return actions.filter(a => a.label.toLowerCase().includes(q) || (a.hint ?? '').toLowerCase().includes(q))
33
+ }, [actions, query])
34
+
35
+ // 打开时重置并聚焦;query/结果变化时钳制选中项
36
+ useEffect(() => {
37
+ if (open) {
38
+ setQuery('')
39
+ setActive(0)
40
+ window.setTimeout(() => inputRef.current?.focus(), 30)
41
+ }
42
+ }, [open])
43
+ useEffect(() => { setActive(0) }, [query])
44
+ useEffect(() => {
45
+ if (active >= filtered.length) setActive(Math.max(0, filtered.length - 1))
46
+ }, [filtered, active])
47
+
48
+ if (!open) return null
49
+
50
+ const execute = (a: CmdAction | undefined): void => {
51
+ if (a === undefined) return
52
+ onClose()
53
+ a.run()
54
+ }
55
+
56
+ const onKeyDown = (e: React.KeyboardEvent): void => {
57
+ if (e.key === 'Escape') { e.preventDefault(); onClose(); return }
58
+ if (e.key === 'ArrowDown') { e.preventDefault(); setActive(i => Math.min(i + 1, filtered.length - 1)); return }
59
+ if (e.key === 'ArrowUp') { e.preventDefault(); setActive(i => Math.max(i - 1, 0)); return }
60
+ if (e.key === 'Enter') { e.preventDefault(); execute(filtered[active]); return }
61
+ }
62
+
63
+ return (
64
+ <div
65
+ className={css.cmdMask}
66
+ onMouseDown={e => { if (e.target === e.currentTarget) onClose() }}
67
+ onKeyDown={onKeyDown}
68
+ >
69
+ <div className={css.cmdBox} role="dialog" aria-modal="true" aria-label="命令面板">
70
+ <input
71
+ ref={inputRef}
72
+ className={css.cmdInput}
73
+ value={query}
74
+ placeholder="搜索命令:跳转、生成、审稿、设置……"
75
+ onChange={e => setQuery(e.target.value)}
76
+ spellCheck={false}
77
+ />
78
+ {filtered.length === 0 ? (
79
+ <div className={css.cmdEmpty}>没有匹配的命令</div>
80
+ ) : (
81
+ <ul className={css.cmdList} ref={listRef} role="listbox">
82
+ {filtered.map((a, i) => (
83
+ <li
84
+ key={a.label}
85
+ className={css.cmdItem}
86
+ data-active={i === active ? '' : undefined}
87
+ role="option"
88
+ aria-selected={i === active}
89
+ onMouseMove={() => setActive(i)}
90
+ onClick={() => execute(a)}
91
+ >
92
+ <span className={css.cmdIcon}>{a.icon}</span>
93
+ <b>{a.label}</b>
94
+ {a.hint !== undefined && <span className={css.cmdHint}>{a.hint}</span>}
95
+ </li>
96
+ ))}
97
+ </ul>
98
+ )}
99
+ </div>
100
+ </div>
101
+ )
102
+ }