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,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dog-import-query
|
|
3
|
+
description: Query a smart-import DoG graph after a novel has been split into chapters. Use to inspect import completeness, AI precheck errors, and pending outline/asset/canonical setup.
|
|
4
|
+
user-invocable: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 拆书导入 DoG 验收
|
|
8
|
+
|
|
9
|
+
`conductor/smart_import.py` 完成导入后会生成 `dog-graph.json`。这张图只验收导入
|
|
10
|
+
结果,不负责写入章节、资产或大纲。
|
|
11
|
+
|
|
12
|
+
## 工作流
|
|
13
|
+
|
|
14
|
+
1. 从导入输出中找到 `data/novels/{id}/data/dog/imports/{IMPORT_ID}/dog-graph.json`。
|
|
15
|
+
2. 依次调用 `dog_validate`、`dog_create`、`dog_run`、`dog_wait`,直到终态。
|
|
16
|
+
3. 用 `dog_status` 查看 `manifest` 和每个 `chapter-ch_*` 节点的 evidence。
|
|
17
|
+
4. 根节点通过后,读取 manifest 的 `construction.nextActions`,再调用规划和资产工具建立大纲、角色、世界观、进度和正典事件。
|
|
18
|
+
5. 资产/大纲建立完成后重新运行 `novel_review_chapter`,再用 `dog-review-query`
|
|
19
|
+
查询六域评审和 37 个 legacy leaf。
|
|
20
|
+
|
|
21
|
+
## 约束
|
|
22
|
+
|
|
23
|
+
- DoG 失败只说明导入文件缺失、为空或 manifest 不一致;不要直接修改正文。
|
|
24
|
+
- `status=partial|failed` 表示导入中途出错;先读取 manifest 的 `error` 和已完成的章节,再修复或重试导入。
|
|
25
|
+
- `aiCheck.status=failed` 要如实报告,不能当成“无问题”。
|
|
26
|
+
- `construction` 中的 `pending` 是后续建模待办,不是导入失败。
|
|
27
|
+
- 不要让 DoG verifier 再调用 Studio 导入接口或重新读取原始整本小说。
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dog-review-query
|
|
3
|
+
description: Query an existing hierarchical OpenWrite review-v2 artifact through dsh-dog. Use after novel_review_chapter or when inspecting six quality domains, evidence, coverage, blockers, delivery status, or the 37 legacy checks. Never rerun model review from DoG.
|
|
4
|
+
user-invocable: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 分层评审 DoG 查询
|
|
8
|
+
|
|
9
|
+
这个 Skill 只查询 OpenWrite 已物化的 review-v2 artifact。OpenWrite 的
|
|
10
|
+
`novel_review_chapter` / conductor 是评审真源;DoG 读取 47 节点分层图:上下文、
|
|
11
|
+
六个质量域、硬门禁、确定性聚合和 37 个兼容查询 leaf。DoG 不调用评审模型。
|
|
12
|
+
|
|
13
|
+
## 工作流
|
|
14
|
+
|
|
15
|
+
1. 如果本轮还没有评审结果,先按 OpenWrite 写作流程调用 `novel_review_chapter`。
|
|
16
|
+
2. 找到评审输出目录中的 `dog-graph.json`。graph 与 `review.json`、`context.json`、
|
|
17
|
+
`domain-*.json`、`gate.json`、`aggregate.json` 和 `dim_01.json` …
|
|
18
|
+
`dim_37.json` 在同一目录。
|
|
19
|
+
3. 读取 graph 后依次调用 `dog_validate`、`dog_create`、`dog_run`、`dog_wait`。
|
|
20
|
+
所有节点均使用 programmatic `review-record` verifier;`dog_run` 后必须等到终态。
|
|
21
|
+
4. 用 `dog_status` 分别汇报 `qualityScore`、`coverage`、`gateStatus` 和
|
|
22
|
+
`deliveryStatus`,再按需展开域、criterion、evidence、issue 和 legacy ID。
|
|
23
|
+
`inconclusive` 表示覆盖不足、未请求或 artifact 不可判定,不能描述为通过。
|
|
24
|
+
5. 只有 OpenWrite 的审查问题才能进入 `novel_revisions_*` 回炉闭环。应用修订后
|
|
25
|
+
必须复评,再用 `dog-delivery-query` 确认 `closure.closed`。DoG 的 `failure`
|
|
26
|
+
只负责定位问题,不直接改正文或资产。
|
|
27
|
+
|
|
28
|
+
## 状态约定
|
|
29
|
+
|
|
30
|
+
- `qualityScore` 是有可定位正文证据的正向累加分;issue 不直接扣分。
|
|
31
|
+
- `coverage` 单独表达实际完成的评审范围;`inconclusive` 会降低覆盖率。
|
|
32
|
+
- `gateStatus=blocked` 来自 hard-gate 或 critical finding,不改写质量分。
|
|
33
|
+
- `deliveryStatus` 综合质量、覆盖、门禁和正文 SHA 新鲜度;它不是 `passed` 的别名。
|
|
34
|
+
- 37 个 leaf 是 `legacy_check_ids` 查询入口,不是 37 个顶层计分维度。
|
|
35
|
+
|
|
36
|
+
## 边界
|
|
37
|
+
|
|
38
|
+
- 不要用 DoG verifier 直接调用 Studio 写入接口。
|
|
39
|
+
- 不要把 warning 自动升级成失败;先展示 evidence,由 `review_gate` 和作者决定。
|
|
40
|
+
- 不要用 `dog_run` 生成、补写或刷新评审;artifact 缺失或 stale 时回到 OpenWrite 流程。
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: export-book
|
|
3
|
+
description: 导出。Use when the author asks 导出, 备份, 出书, EPUB, or types /export-book. Preflight first; never use the host /export session-log command for the manuscript.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 导出
|
|
7
|
+
|
|
8
|
+
接到已有 `novel_*`。成稿导出与会话日志下载不是同一条命令。
|
|
9
|
+
|
|
10
|
+
1. `novel_export_preflight`:阅读顺序、结构缺陷、写作目标、评审新鲜度、正文接纳、阻断项与警告。
|
|
11
|
+
2. 向作者说明 `backup`(可带警告下载)与 `delivery`(门禁阻断则不可交付)。
|
|
12
|
+
3. 作者确认后 `novel_export`,原样传入同一 `format`、`purpose` 与 `preflight_revision`。
|
|
13
|
+
|
|
14
|
+
不要用宿主 `/export` 下载会话日志来代替成稿。完整项目档案走 `novel_project_archive_action`。
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: foreshadow
|
|
3
|
+
description: 查伏笔。Use when the author asks 查伏笔, 待回收, 超期伏笔, or types /foreshadow. Read chapter obligations and continuity; do not keep a second foreshadow store.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 查伏笔
|
|
7
|
+
|
|
8
|
+
接到已有 `novel_*`。伏笔真源是 OpenWrite DAG 与章节工作简报。
|
|
9
|
+
|
|
10
|
+
1. `novel_status` 看全书待办。
|
|
11
|
+
2. 当前章用 `novel_chapter_work`:到期 `must_resolve`、超期 `overdue`、待埋入 `to_plant`。
|
|
12
|
+
3. 全书未回收与漂移用 `novel_continuity`。
|
|
13
|
+
|
|
14
|
+
向作者报告分类清单,不要输出内部 JSON 当主界面。写入走 `novel_structured_change_plan(change_kind="foreshadowing")`;仅在作者本轮已授权精确变更时才用 `novel_foreshadowing`。
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: foreshadowing-system
|
|
3
|
+
description: Use when user wants to manage foreshadowing (伏笔), track story hooks, or check pending reveals. Triggers include "伏笔", "埋伏笔", "待回收", "伏笔状态".
|
|
4
|
+
user-invocable: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 伏笔管理系统
|
|
8
|
+
|
|
9
|
+
管理小说中的伏笔和悬念,确保故事线索连贯。
|
|
10
|
+
|
|
11
|
+
## 核心概念
|
|
12
|
+
|
|
13
|
+
伏笔(foreshadowing)是作者在前面章节埋下的线索,后面再回收。
|
|
14
|
+
|
|
15
|
+
**伏笔状态**:
|
|
16
|
+
- `埋伏` - 已埋下,等待回收
|
|
17
|
+
- `待收` - 即将回收
|
|
18
|
+
- `已收` - 已回收
|
|
19
|
+
- `废弃` - 放弃的伏笔
|
|
20
|
+
|
|
21
|
+
**伏笔层级**:
|
|
22
|
+
- `主线` - 核心剧情伏笔
|
|
23
|
+
- `支线` - 次要剧情伏笔
|
|
24
|
+
- `彩蛋` - 趣味小彩蛋
|
|
25
|
+
|
|
26
|
+
## 可用工具
|
|
27
|
+
|
|
28
|
+
| 工具 | 说明 |
|
|
29
|
+
|------|------|
|
|
30
|
+
| `create_foreshadowing` | 创建伏笔节点 |
|
|
31
|
+
| `list_foreshadowing` | 列出伏笔 |
|
|
32
|
+
| `update_foreshadowing` | 更新伏笔状态 |
|
|
33
|
+
| `validate_foreshadowing` | 验证伏笔DAG |
|
|
34
|
+
|
|
35
|
+
## 使用示例
|
|
36
|
+
|
|
37
|
+
### 创建伏笔
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
用户: 在第三章埋一个伏笔,关于主角的神秘身世
|
|
41
|
+
|
|
42
|
+
AI: 好的,我来创建一个主线伏笔。
|
|
43
|
+
[COMMAND] create_foreshadowing {
|
|
44
|
+
"node_id": "f001",
|
|
45
|
+
"content": "主角发现自己体内有一道封印的神秘力量",
|
|
46
|
+
"weight": 9,
|
|
47
|
+
"layer": "主线",
|
|
48
|
+
"created_at": "ch_003",
|
|
49
|
+
"target_chapter": "ch_015"
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
结果: ✅ 伏笔已创建
|
|
53
|
+
- ID: f001
|
|
54
|
+
- 内容: 主角发现自己体内有一道封印的神秘力量
|
|
55
|
+
- 权重: 9
|
|
56
|
+
- 层级: 主线
|
|
57
|
+
- 预期回收: 第15章
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 查看待回收伏笔
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
用户: 有哪些待回收的伏笔?
|
|
64
|
+
|
|
65
|
+
AI: 让我查询一下...
|
|
66
|
+
[COMMAND] list_foreshadowing {
|
|
67
|
+
"status": "待收",
|
|
68
|
+
"min_weight": 5
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
结果:
|
|
72
|
+
- f001: 主角身世之谜 (权重9, 主线)
|
|
73
|
+
- f003: 师父的秘密 (权重7, 主线)
|
|
74
|
+
- f005: 神秘玉佩 (权重6, 支线)
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 更新伏笔状态
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
用户: 第八章回收了 f003 的伏笔,更新状态
|
|
81
|
+
|
|
82
|
+
AI: 好的
|
|
83
|
+
[COMMAND] update_foreshadowing {
|
|
84
|
+
"node_id": "f003",
|
|
85
|
+
"status": "已收"
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
结果: ✅ f003 状态已更新为「已收」
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### 验证伏笔DAG
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
用户: 检查伏笔有没有问题
|
|
95
|
+
|
|
96
|
+
AI: 让我验证一下伏笔图...
|
|
97
|
+
[COMMAND] validate_foreshadowing {}
|
|
98
|
+
|
|
99
|
+
结果:
|
|
100
|
+
- ✅ DAG有效,无环
|
|
101
|
+
- ✅ 无孤立引用
|
|
102
|
+
- ⚠️ 提示: 有3个伏笔超期未收
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## 创建伏笔的时机
|
|
106
|
+
|
|
107
|
+
在写作时,AI 应该主动识别并建议创建伏笔:
|
|
108
|
+
|
|
109
|
+
1. **建立悬念时** - "主角做了一个奇怪的梦..."
|
|
110
|
+
2. **引入神秘元素时** - "某个配角的来历不明..."
|
|
111
|
+
3. **埋下线索时** - "桌上放着一封未拆的信..."
|
|
112
|
+
4. **暗示未来事件时** - "天气预报说三天后会下大雨..."
|
|
113
|
+
|
|
114
|
+
## 伏笔设计原则
|
|
115
|
+
|
|
116
|
+
1. **可识别性** - 伏笔要能被读者注意到
|
|
117
|
+
2. **合理性** - 回收时要有合理的解释
|
|
118
|
+
3. **权重分配** - 重要伏笔高权重,主线权重≥7
|
|
119
|
+
4. **时机控制** - 埋设和回收之间要有足够铺垫
|
|
120
|
+
|
|
121
|
+
## DAG验证规则
|
|
122
|
+
|
|
123
|
+
1. **无环** - 伏笔之间不能循环依赖
|
|
124
|
+
2. **有向** - 边必须从伏笔指向回收点
|
|
125
|
+
3. **可达** - 每个待收伏笔必须有明确的回收章节
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: learn
|
|
3
|
+
description: 写法记忆。Use when the author asks 记住写法, 成功钩子, 作者偏好, or types /learn. Store style, hooks, and preferences as Workspace-scoped OpenWrite assets; do not create a second memory store.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 写法记忆
|
|
7
|
+
|
|
8
|
+
接到已有 `novel_*`。风格、成功钩子和作者偏好是当前 Workspace 作品资产,不是会话本地文件,也不是第二套 RAG / lorebook。
|
|
9
|
+
|
|
10
|
+
## 读取
|
|
11
|
+
|
|
12
|
+
1. `novel_status` 确认当前作品。
|
|
13
|
+
2. 风格与提取源:`novel_source_action`(`status_v2` / `profile_v2`)。
|
|
14
|
+
3. 已登记钩子:`novel_assets_list`,必要时 `novel_asset_read`。
|
|
15
|
+
|
|
16
|
+
没有 Workspace(session cwd 缺失)时这些工具返回 `WORKSPACE_CONTEXT_MISSING`,不要改写全局或别的项目。
|
|
17
|
+
|
|
18
|
+
## 写入(预览/确认)
|
|
19
|
+
|
|
20
|
+
- 作者偏好、必须保留/避免:`novel_structured_change_plan(change_kind="focus")`。
|
|
21
|
+
- 成功钩子与可复用写法:`novel_source_action` extract/review,晋升用 `promote_v2` 且作者确认后 `confirm: true`;登记为资产时用 `novel_structured_change_plan(change_kind="asset")`。
|
|
22
|
+
- 普通讨论不得写入。
|
|
23
|
+
|
|
24
|
+
细则见 style-system。不要另建记忆文件。
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: novel-creator
|
|
3
|
+
description: Use when user wants to write chapters, generate drafts, or continue the story. Triggers include "写第", "生成章节", "续写", "草稿", "创作".
|
|
4
|
+
user-invocable: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 小说创作编排
|
|
8
|
+
|
|
9
|
+
通过 openwrite-bridge 的 `novel_*` 工具写章。不要调用 Python 模块、内置 Writer 类或已废弃的大纲命令。
|
|
10
|
+
所有正文写入走预览/确认门控;已有正文不得覆盖。
|
|
11
|
+
|
|
12
|
+
## 触发条件
|
|
13
|
+
|
|
14
|
+
- "写第X章" / "写章节"
|
|
15
|
+
- "生成章节" / "生成草稿"
|
|
16
|
+
- "续写" / "继续创作"
|
|
17
|
+
- "创作" + 章节相关
|
|
18
|
+
|
|
19
|
+
## 工作流程
|
|
20
|
+
|
|
21
|
+
1. `novel_status` 看项目阶段、资产缺口、待确认项。
|
|
22
|
+
2. `novel_outline_read` 定位章纲:未指定章节时取大纲顺序中最早尚无正文的章;指定章节时校验章纲存在。已有正文则打开或审查,不得直接覆盖。
|
|
23
|
+
3. `novel_context_preview` 预检写章上下文包(大纲窗口、出场角色、伏笔、风格、正典)。
|
|
24
|
+
4. `novel_chapter_work` 读取本章到期/超期/待埋入伏笔与字数目标。
|
|
25
|
+
5. `novel_write_chapter` 写下一章或指定章(可带 `outline_revision` 与 `guidance`)。
|
|
26
|
+
6. 草稿出来后暂停,请作者选择:通过进入评审、按意见重写、或到创作页手工编辑。
|
|
27
|
+
7. 作者通过后调用 `novel_review_chapter`;需要改稿时用 `novel_revision_create_from_review`,确认后再 `novel_revision_apply`。
|
|
28
|
+
|
|
29
|
+
## 工具
|
|
30
|
+
|
|
31
|
+
| 工具 | 用途 |
|
|
32
|
+
|------|------|
|
|
33
|
+
| `novel_status` | 项目快照、阶段、缺口 |
|
|
34
|
+
| `novel_outline_read` | 大纲树与建议下一章 |
|
|
35
|
+
| `novel_context_preview` | 写前上下文包 |
|
|
36
|
+
| `novel_chapter_work` | 本章目标、伏笔义务、最近修改 |
|
|
37
|
+
| `novel_write_chapter` | 写章(长耗时) |
|
|
38
|
+
| `novel_review_chapter` | 六域累加评审 |
|
|
39
|
+
| `novel_document_change_plan` | 已有正文的逐项预览/确认修改 |
|
|
40
|
+
| `novel_structured_change_plan` | 大纲/资产/伏笔的逐项预览/确认 |
|
|
41
|
+
|
|
42
|
+
`novel_doc_write` 与 `novel_outline_edit` 仅在作者本轮已明确授权精确变更时作为直接写入兼容入口。
|
|
43
|
+
|
|
44
|
+
## 节拍
|
|
45
|
+
|
|
46
|
+
从大纲读取本章 **dramatic_position**(起/承/转/合/过渡)和内容焦点。
|
|
47
|
+
节拍数量由目标字数决定(3000 以下 2–3 个;3000–5000 为 3–4 个;5000+ 为 4–6 个),写入 `novel_write_chapter` 的 `guidance`。
|
|
48
|
+
|
|
49
|
+
- **起** → 场景切入 + 悬念铺设 + 角色状态 + 衔接钩子
|
|
50
|
+
- **承** → 推进 + 碰撞 + (伏笔) + 递进
|
|
51
|
+
- **转** → 升级 + 核心决策 + 后果初现
|
|
52
|
+
- **合** → 余波 + 变化确认 + 遗留
|
|
53
|
+
|
|
54
|
+
## 用户审核(强制)
|
|
55
|
+
|
|
56
|
+
草稿生成后必须暂停:
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
章节: {chapter_id}
|
|
60
|
+
字数: {word_count}
|
|
61
|
+
请选择:1 通过并评审 2 按意见重写 3 保存后手工编辑
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## 前置条件
|
|
65
|
+
|
|
66
|
+
| 数据 | 必须? | 如何确认 |
|
|
67
|
+
|------|--------|----------|
|
|
68
|
+
| 大纲 | 必须 | `novel_outline_read` |
|
|
69
|
+
| 本章出场角色 | 必须 | `novel_context_preview` / `novel_assets_list` |
|
|
70
|
+
| 合成风格 | 建议 | 上下文包 |
|
|
71
|
+
| 伏笔 | 可选 | `novel_chapter_work` 的分类义务 |
|
|
72
|
+
|
|
73
|
+
资产不齐时先规划补齐,不切换会话。`novel_status` 若显示 `outline_scope` 待确认,先让作者确认大纲范围再写。
|
|
74
|
+
|
|
75
|
+
## 错误处理
|
|
76
|
+
|
|
77
|
+
| 情况 | 处理 |
|
|
78
|
+
|------|------|
|
|
79
|
+
| 上下文超限 | 报告 `novel_context_preview` 的压缩/保护原因,不静默丢掉正典 |
|
|
80
|
+
| 章纲缺失 | 回到规划,用 `novel_structured_change_plan(change_kind="outline")` |
|
|
81
|
+
| 已有正文 | 打开或审查;改稿走 `novel_document_change_plan` |
|
|
82
|
+
| 写章失败 | 用 `novel_tasks_list` / `novel_task_get` 查看后台任务,可 `novel_task_retry` |
|
|
83
|
+
|
|
84
|
+
## 与其他技能
|
|
85
|
+
|
|
86
|
+
- **novel-reviewer**:写完后评审
|
|
87
|
+
- **workflow-manager**:连写、后台任务、中断恢复
|
|
88
|
+
- **foreshadowing-system**:伏笔 DAG 维护仍走 `novel_structured_change_plan` / `novel_foreshadowing`
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# 节拍模板(章内微结构)
|
|
2
|
+
# 路径: skills/novel-creator/templates/beat_templates.yaml
|
|
3
|
+
#
|
|
4
|
+
# 设计理念:
|
|
5
|
+
# 起承转合在「节」或「篇」层面完成。
|
|
6
|
+
# 章节只是按字数切的最小写作单元,每章 3000-5000 字。
|
|
7
|
+
# 节拍描述的是「这几千字的内部微结构」,
|
|
8
|
+
# 而非独立的开场→高潮→收束(那是节的事)。
|
|
9
|
+
#
|
|
10
|
+
# 章节通过 dramatic_position 字段知道自己在节弧线中的角色:
|
|
11
|
+
# 起 / 承 / 转 / 合 / 过渡
|
|
12
|
+
# 节拍模板按 dramatic_position 选择。
|
|
13
|
+
|
|
14
|
+
# ── 按戏剧位置选择的节拍模板 ──────────────────────────
|
|
15
|
+
|
|
16
|
+
# 「起」— 节弧线的开端章节
|
|
17
|
+
position_起:
|
|
18
|
+
- beat: "场景切入"
|
|
19
|
+
template: "建立新场景/新时空,{protagonist}进入{setting}"
|
|
20
|
+
purpose: "让读者快速进入新阶段"
|
|
21
|
+
length: 400-600
|
|
22
|
+
|
|
23
|
+
- beat: "悬念铺设"
|
|
24
|
+
template: "引入本节核心问题/冲突的端倪"
|
|
25
|
+
purpose: "让读者产生好奇心"
|
|
26
|
+
length: 500-800
|
|
27
|
+
|
|
28
|
+
- beat: "角色状态"
|
|
29
|
+
template: "{protagonist}的当前状态与目标,承接前节余韵"
|
|
30
|
+
purpose: "建立情感基线"
|
|
31
|
+
length: 300-500
|
|
32
|
+
|
|
33
|
+
- beat: "衔接钩子"
|
|
34
|
+
template: "留下一个引向下一章的小钩子"
|
|
35
|
+
purpose: "保证读者继续读"
|
|
36
|
+
length: 200-300
|
|
37
|
+
|
|
38
|
+
# 「承」— 节弧线的发展章节
|
|
39
|
+
position_承:
|
|
40
|
+
- beat: "推进"
|
|
41
|
+
template: "{protagonist}围绕本节目标采取行动"
|
|
42
|
+
purpose: "推动剧情向前"
|
|
43
|
+
length: 600-900
|
|
44
|
+
|
|
45
|
+
- beat: "碰撞"
|
|
46
|
+
template: "角色互动/信息揭示/小型冲突"
|
|
47
|
+
purpose: "制造张力,丰富内容"
|
|
48
|
+
length: 500-800
|
|
49
|
+
|
|
50
|
+
- beat: "伏笔"
|
|
51
|
+
template: "自然融入伏笔元素{foreshadowing_element}"
|
|
52
|
+
purpose: "为后续节/篇埋下线索"
|
|
53
|
+
length: 200-400
|
|
54
|
+
optional: true
|
|
55
|
+
|
|
56
|
+
- beat: "递进"
|
|
57
|
+
template: "情势变化,比章首更紧张/更复杂/更深入"
|
|
58
|
+
purpose: "保证信息密度,避免平淡"
|
|
59
|
+
length: 400-600
|
|
60
|
+
|
|
61
|
+
# 「转」— 节弧线的转折章节
|
|
62
|
+
position_转:
|
|
63
|
+
- beat: "升级"
|
|
64
|
+
template: "局势急剧变化,超出{protagonist}的预期"
|
|
65
|
+
purpose: "打破读者预期"
|
|
66
|
+
length: 500-800
|
|
67
|
+
|
|
68
|
+
- beat: "核心决策"
|
|
69
|
+
template: "{protagonist}被迫做出关键选择,付出代价"
|
|
70
|
+
purpose: "展现角色弧线"
|
|
71
|
+
length: 600-1000
|
|
72
|
+
|
|
73
|
+
- beat: "后果初现"
|
|
74
|
+
template: "决策的直接后果立刻显现"
|
|
75
|
+
purpose: "给读者情绪冲击"
|
|
76
|
+
length: 400-600
|
|
77
|
+
|
|
78
|
+
# 「合」— 节弧线的收束章节
|
|
79
|
+
position_合:
|
|
80
|
+
- beat: "余波"
|
|
81
|
+
template: "核心事件的结果扩散,{protagonist}消化影响"
|
|
82
|
+
purpose: "让情绪落地"
|
|
83
|
+
length: 400-600
|
|
84
|
+
|
|
85
|
+
- beat: "变化确认"
|
|
86
|
+
template: "角色/关系/局势的变化被明确"
|
|
87
|
+
purpose: "让读者确认剧情推进"
|
|
88
|
+
length: 300-500
|
|
89
|
+
|
|
90
|
+
- beat: "遗留"
|
|
91
|
+
template: "留下未解决的问题或新悬念{cliffhanger}"
|
|
92
|
+
purpose: "衔接下一节"
|
|
93
|
+
length: 200-400
|
|
94
|
+
|
|
95
|
+
# 「过渡」— 节与节之间的过渡章节
|
|
96
|
+
position_过渡:
|
|
97
|
+
- beat: "收尾"
|
|
98
|
+
template: "上一节最后的松散线索收拢"
|
|
99
|
+
purpose: "给读者喘息"
|
|
100
|
+
length: 300-500
|
|
101
|
+
|
|
102
|
+
- beat: "转场"
|
|
103
|
+
template: "时间/空间/视角的切换"
|
|
104
|
+
purpose: "自然过渡到新阶段"
|
|
105
|
+
length: 400-600
|
|
106
|
+
|
|
107
|
+
- beat: "预示"
|
|
108
|
+
template: "暗示下一节的方向"
|
|
109
|
+
purpose: "保持好奇心"
|
|
110
|
+
length: 200-400
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
# ── 场景类型覆盖(可叠加在任何 position 上)───────────
|
|
114
|
+
|
|
115
|
+
scene_overlays:
|
|
116
|
+
combat:
|
|
117
|
+
- beat: "对峙"
|
|
118
|
+
template: "双方对峙,{antagonist}率先发难"
|
|
119
|
+
- beat: "交锋"
|
|
120
|
+
template: "激烈战斗,{protagonist}陷入困境"
|
|
121
|
+
- beat: "决胜"
|
|
122
|
+
template: "{protagonist}找到破绽或付出代价"
|
|
123
|
+
|
|
124
|
+
dialogue:
|
|
125
|
+
- beat: "交流"
|
|
126
|
+
template: "{character_a}与{character_b}信息交换"
|
|
127
|
+
- beat: "交锋"
|
|
128
|
+
template: "观点分歧,产生矛盾或暗流"
|
|
129
|
+
|
|
130
|
+
exploration:
|
|
131
|
+
- beat: "发现"
|
|
132
|
+
template: "发现{discovery},获得线索"
|
|
133
|
+
- beat: "危险"
|
|
134
|
+
template: "遭遇{danger},险象环生"
|
|
135
|
+
|
|
136
|
+
revelation:
|
|
137
|
+
- beat: "线索汇聚"
|
|
138
|
+
template: "之前的碎片信息拼合"
|
|
139
|
+
- beat: "真相揭示"
|
|
140
|
+
template: "核心秘密/真相浮出水面"
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
# ── 生成规则 ──────────────────────────────────────────
|
|
144
|
+
|
|
145
|
+
generation_rules:
|
|
146
|
+
# 节拍数量由章节字数决定,不由戏剧结构决定
|
|
147
|
+
beats_per_chapter:
|
|
148
|
+
"3000字以下": 2-3
|
|
149
|
+
"3000-5000字": 3-4
|
|
150
|
+
"5000字以上": 4-6
|
|
151
|
+
|
|
152
|
+
# 伏笔融入规则
|
|
153
|
+
foreshadowing_rules:
|
|
154
|
+
- 每章最多融入 1 个待回收伏笔(自然为主)
|
|
155
|
+
- 伏笔融入位置由 dramatic_position 影响:
|
|
156
|
+
起/承: 适合埋设伏笔
|
|
157
|
+
转/合: 适合回收伏笔
|
|
158
|
+
|
|
159
|
+
# 节奏控制(章内微观)
|
|
160
|
+
rhythm_control:
|
|
161
|
+
- 长短句交替
|
|
162
|
+
- 对话与叙述平衡
|
|
163
|
+
- 避免连续 3 个以上长段落
|
|
164
|
+
- 「转」位置的章节节奏应比「承」更快
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
# ── 变量说明 ──────────────────────────────────────────
|
|
168
|
+
|
|
169
|
+
variables:
|
|
170
|
+
protagonist: "主角名称"
|
|
171
|
+
antagonist: "反派名称"
|
|
172
|
+
setting: "场景环境"
|
|
173
|
+
obstacle: "障碍"
|
|
174
|
+
foreshadowing_element: "伏笔元素"
|
|
175
|
+
cliffhanger: "悬念/钩子"
|
|
176
|
+
character_a: "角色A"
|
|
177
|
+
character_b: "角色B"
|
|
178
|
+
discovery: "发现内容"
|
|
179
|
+
danger: "危险"
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# 节拍模板使用示例
|
|
2
|
+
# 文件路径: skills/novel-creator/templates/example_usage.yaml
|
|
3
|
+
#
|
|
4
|
+
# 演示如何根据 dramatic_position 选择并填充节拍模板。
|
|
5
|
+
# 实际使用时由 Agent 根据章节大纲的 dramatic_position 字段自动选取。
|
|
6
|
+
|
|
7
|
+
# ── 示例 1: 「转」位置的章节 ────────────────────────
|
|
8
|
+
|
|
9
|
+
chapter_example_turn:
|
|
10
|
+
chapter_id: ch_004
|
|
11
|
+
title: "第四章:真相大白"
|
|
12
|
+
dramatic_position: "转"
|
|
13
|
+
content_focus: "主角发现师门秘密,信念崩塌"
|
|
14
|
+
estimated_words: 5000
|
|
15
|
+
|
|
16
|
+
# 从 position_转 选择的节拍
|
|
17
|
+
selected_beats:
|
|
18
|
+
- beat: "升级"
|
|
19
|
+
filled_template: "陈明发现服务器异常超出预期,数据传输量是平时的百倍——有人在偷偷上传海量文件。"
|
|
20
|
+
target_length: 500-800
|
|
21
|
+
|
|
22
|
+
- beat: "核心决策"
|
|
23
|
+
filled_template: "陈明必须在举报和沉默之间做出选择。举报意味着得罪整个部门,沉默意味着成为共犯。他握紧了手中的U盘。"
|
|
24
|
+
target_length: 600-1000
|
|
25
|
+
|
|
26
|
+
- beat: "后果初现"
|
|
27
|
+
filled_template: "消息发出的瞬间,走廊尽头传来急促的脚步声。陈明知道,一切已经不可逆了。"
|
|
28
|
+
target_length: 400-600
|
|
29
|
+
|
|
30
|
+
# 可选:叠加场景类型覆盖
|
|
31
|
+
scene_overlay: revelation
|
|
32
|
+
overlay_beats:
|
|
33
|
+
- beat: "线索汇聚"
|
|
34
|
+
filled_template: "之前不经意间看到的几份报告,此刻在脑海中拼合成一幅完整的图画。"
|
|
35
|
+
- beat: "真相揭示"
|
|
36
|
+
filled_template: "所谓的'系统升级',不过是一场精心策划的数据窃取。而主导者,正是他最信任的导师。"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# ── 示例 2: 「起」位置的章节 ────────────────────────
|
|
40
|
+
|
|
41
|
+
chapter_example_start:
|
|
42
|
+
chapter_id: ch_001
|
|
43
|
+
title: "第一章:平凡的早晨"
|
|
44
|
+
dramatic_position: "起"
|
|
45
|
+
content_focus: "建立主角日常,暗示异常"
|
|
46
|
+
estimated_words: 4000
|
|
47
|
+
|
|
48
|
+
selected_beats:
|
|
49
|
+
- beat: "场景切入"
|
|
50
|
+
filled_template: "陈明推开宿舍门,走廊里弥漫着食堂的早餐味道。一切和往常没什么两样——至少现在看来是这样。"
|
|
51
|
+
target_length: 400-600
|
|
52
|
+
|
|
53
|
+
- beat: "悬念铺设"
|
|
54
|
+
filled_template: "手机上有三条未读消息,全来自一个没存过的号码。他随手删掉了前两条,却在第三条的内容前停住了。"
|
|
55
|
+
target_length: 500-800
|
|
56
|
+
|
|
57
|
+
- beat: "角色状态"
|
|
58
|
+
filled_template: "距离毕业还有三个月,论文进度拉下一大截。陈明边走边想着怎么跟导师解释,完全没注意到身后跟着的那个人影。"
|
|
59
|
+
target_length: 300-500
|
|
60
|
+
|
|
61
|
+
- beat: "衔接钩子"
|
|
62
|
+
filled_template: "实验楼的门禁记录显示,昨晚两点十七分有人刷了他的卡。但他昨晚十一点就睡了。"
|
|
63
|
+
target_length: 200-300
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
# ── 使用流程说明 ────────────────────────────────────
|
|
67
|
+
|
|
68
|
+
usage_guide:
|
|
69
|
+
step_1: "从章节大纲获取 dramatic_position(起/承/转/合/过渡)"
|
|
70
|
+
step_2: "查询 beat_templates.yaml 中对应的 position_{位置} 模板列表"
|
|
71
|
+
step_3: "根据章节目标和角色选取 3-5 个节拍"
|
|
72
|
+
step_4: "填充模板变量({protagonist}, {setting}, {foreshadowing_element} 等)"
|
|
73
|
+
step_5: "可选叠加 scene_overlays(combat/dialogue/exploration/revelation)"
|
|
74
|
+
step_6: "按节拍顺序写作,每个节拍的长度参考 length 字段"
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: novel-reviewer
|
|
3
|
+
description: Use when user wants to check logic consistency, polish style, find plot holes, or review existing chapters. Triggers include "检查", "润色", "逻辑", "伏笔漏洞", "审查".
|
|
4
|
+
user-invocable: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 小说审查润色
|
|
8
|
+
|
|
9
|
+
通过 openwrite-bridge 的 `novel_*` 工具评审与修订。不要调用 Python 审查类或本地 33 维脚本。
|
|
10
|
+
正式评审是六域累加:质量分、覆盖率、硬门禁、交付状态分开判断;37 项只作展开查询。
|
|
11
|
+
`novel_config.yaml` 的 `form: web_novel` 时,情节/节奏域额外检查钩子、黄金三章、追读力;这些准则 `max=0`,不另起一套评分。黄金三章只适用于第 1–3 章。
|
|
12
|
+
|
|
13
|
+
## 触发条件
|
|
14
|
+
|
|
15
|
+
- "检查逻辑" / "逻辑检查"
|
|
16
|
+
- "润色" / "润色风格"
|
|
17
|
+
- "找伏笔漏洞" / "伏笔检查"
|
|
18
|
+
- "审查章节" / "审查"
|
|
19
|
+
- "风格问题"
|
|
20
|
+
|
|
21
|
+
## 工作流程
|
|
22
|
+
|
|
23
|
+
1. `novel_outline_read` 与 `novel_status` 确认章节与项目阶段。
|
|
24
|
+
2. `novel_chapter_work` 读取正文 revision、已有评审新鲜度、本章伏笔义务。
|
|
25
|
+
3. `novel_review_framework` 需要时查看六域与 37 项映射。
|
|
26
|
+
4. `novel_review_chapter` 对已有正文跑六域评审(可传 `chapter_id` 或稿件路径)。
|
|
27
|
+
5. 向作者报告质量分、覆盖率、门禁、交付状态,以及带正文证据的问题。
|
|
28
|
+
6. 作者要改稿:`novel_revision_create_from_review`(或选区 `novel_revision_create_selection`)→ 展示 before/after → 确认后 `novel_revision_apply`。
|
|
29
|
+
7. 应用后必须 `novel_review_chapter` 复评;正文 SHA 变了旧评审即 stale。
|
|
30
|
+
8. 润色类局部修改走 `novel_document_change_plan` 预览/确认,不直接整章覆盖。
|
|
31
|
+
|
|
32
|
+
## 工具
|
|
33
|
+
|
|
34
|
+
| 工具 | 用途 |
|
|
35
|
+
|------|------|
|
|
36
|
+
| `novel_review_framework` | 六域 / 37 项框架 |
|
|
37
|
+
| `novel_review_chapter` | 正式评审(长耗时) |
|
|
38
|
+
| `novel_chapter_work` | 评审新鲜度、闭合结果、伏笔 |
|
|
39
|
+
| `novel_revision_create_from_review` | 从问题生成修订提案 |
|
|
40
|
+
| `novel_revision_create_selection` | 从选区生成修订 |
|
|
41
|
+
| `novel_revisions_list` / `novel_revision_get` | 查看提案 |
|
|
42
|
+
| `novel_revision_apply` / `novel_revision_reject` / `novel_revision_regenerate` | 应用、驳回、重生成 |
|
|
43
|
+
| `novel_document_change_plan` | 手工/润色类正文预览确认 |
|
|
44
|
+
| `novel_continuity` | 连续性、关系、未回收伏笔 |
|
|
45
|
+
|
|
46
|
+
## 六域(计分)与硬门禁
|
|
47
|
+
|
|
48
|
+
| 域 | 权重 | 关注 |
|
|
49
|
+
|---|---:|------|
|
|
50
|
+
| 连贯与逻辑 | 20 | 时间线、因果、信息传播 |
|
|
51
|
+
| 人物与关系 | 15 | 动机、声音、关系 |
|
|
52
|
+
| 情节与承诺 | 20 | 伏笔、支线、情感账单 |
|
|
53
|
+
| 节奏与场景 | 15 | 章内节奏、场景完成度 |
|
|
54
|
+
| 文笔与表达 | 15 | AI 痕迹、信息倾倒、句式 |
|
|
55
|
+
| 正典与引用 | 15 | 设定、专名、前文事实 |
|
|
56
|
+
| 硬门禁 | 不计分 | 严重 blocker;只改 `gate_status` |
|
|
57
|
+
|
|
58
|
+
问题不扣质量分。`inconclusive` 降低覆盖率。交付要求:质量与覆盖达阈值、门禁未阻断、评审源 SHA 等于当前正文 SHA。
|
|
59
|
+
|
|
60
|
+
## 报告给作者看的结构
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
章节 / 字数 / 评审 revision
|
|
64
|
+
质量分 · 覆盖率 · 门禁 · 交付
|
|
65
|
+
证据条目(原文定位 + 建议)
|
|
66
|
+
本章伏笔:到期 / 超期 / 待埋入(来自 novel_chapter_work)
|
|
67
|
+
下一步:生成修订 / 驳回 / 复评
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
定位不唯一时标记失效,不要把错误原文高亮成证据。过期评审必须先复评。
|
|
71
|
+
|
|
72
|
+
## 错误处理
|
|
73
|
+
|
|
74
|
+
| 情况 | 处理 |
|
|
75
|
+
|------|------|
|
|
76
|
+
| 尚无正文 | 提示先写章,不要空审 |
|
|
77
|
+
| 评审 stale | 先 `novel_review_chapter`,禁止对旧问题直接 apply |
|
|
78
|
+
| 提案源 revision 不匹配 | `novel_revision_regenerate` 或重新预览 |
|
|
79
|
+
| 后台任务进行中 | `novel_task_get` 轮询,不要重复提交 |
|
|
80
|
+
|
|
81
|
+
## 与其他技能
|
|
82
|
+
|
|
83
|
+
- **novel-creator**:写章后进入本技能
|
|
84
|
+
- **dog-review-query** / **dog-delivery-query**:查询已物化评审/交付图,不重新调用模型
|
|
85
|
+
- **truth-validation**:正典与事实核对
|