@actalk/inkos-core 1.4.1 → 1.5.0-canary.47.1
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/dist/agent/agent-session.d.ts +15 -0
- package/dist/agent/agent-session.d.ts.map +1 -1
- package/dist/agent/agent-session.js +256 -26
- package/dist/agent/agent-session.js.map +1 -1
- package/dist/agent/agent-system-prompt.d.ts +8 -1
- package/dist/agent/agent-system-prompt.d.ts.map +1 -1
- package/dist/agent/agent-system-prompt.js +382 -176
- package/dist/agent/agent-system-prompt.js.map +1 -1
- package/dist/agent/agent-tools.d.ts +156 -19
- package/dist/agent/agent-tools.d.ts.map +1 -1
- package/dist/agent/agent-tools.js +980 -46
- package/dist/agent/agent-tools.js.map +1 -1
- package/dist/agent/context-transform.d.ts +4 -1
- package/dist/agent/context-transform.d.ts.map +1 -1
- package/dist/agent/context-transform.js +104 -9
- package/dist/agent/context-transform.js.map +1 -1
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +1 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/agents/architect.d.ts +11 -1
- package/dist/agents/architect.d.ts.map +1 -1
- package/dist/agents/architect.js +242 -114
- package/dist/agents/architect.js.map +1 -1
- package/dist/agents/chapter-analyzer.js +1 -1
- package/dist/agents/chapter-analyzer.js.map +1 -1
- package/dist/agents/composer.d.ts +36 -0
- package/dist/agents/composer.d.ts.map +1 -1
- package/dist/agents/composer.js +503 -20
- package/dist/agents/composer.js.map +1 -1
- package/dist/agents/continuity.d.ts +3 -0
- package/dist/agents/continuity.d.ts.map +1 -1
- package/dist/agents/continuity.js +28 -14
- package/dist/agents/continuity.js.map +1 -1
- package/dist/agents/en-prompt-sections.d.ts.map +1 -1
- package/dist/agents/en-prompt-sections.js +15 -1
- package/dist/agents/en-prompt-sections.js.map +1 -1
- package/dist/agents/fanfic-canon-importer.d.ts +1 -0
- package/dist/agents/fanfic-canon-importer.d.ts.map +1 -1
- package/dist/agents/fanfic-canon-importer.js +53 -6
- package/dist/agents/fanfic-canon-importer.js.map +1 -1
- package/dist/agents/foundation-reviewer.d.ts +1 -0
- package/dist/agents/foundation-reviewer.d.ts.map +1 -1
- package/dist/agents/foundation-reviewer.js +17 -12
- package/dist/agents/foundation-reviewer.js.map +1 -1
- package/dist/agents/length-normalizer.d.ts +1 -0
- package/dist/agents/length-normalizer.d.ts.map +1 -1
- package/dist/agents/length-normalizer.js +16 -3
- package/dist/agents/length-normalizer.js.map +1 -1
- package/dist/agents/planner-prompts.d.ts +7 -7
- package/dist/agents/planner-prompts.d.ts.map +1 -1
- package/dist/agents/planner-prompts.js +29 -29
- package/dist/agents/planner-prompts.js.map +1 -1
- package/dist/agents/planner.d.ts +6 -5
- package/dist/agents/planner.d.ts.map +1 -1
- package/dist/agents/planner.js +90 -6
- package/dist/agents/planner.js.map +1 -1
- package/dist/agents/post-write-validator.d.ts.map +1 -1
- package/dist/agents/post-write-validator.js +49 -0
- package/dist/agents/post-write-validator.js.map +1 -1
- package/dist/agents/reviser.js +10 -0
- package/dist/agents/reviser.js.map +1 -1
- package/dist/agents/rules-reader.d.ts +6 -14
- package/dist/agents/rules-reader.d.ts.map +1 -1
- package/dist/agents/rules-reader.js +15 -28
- package/dist/agents/rules-reader.js.map +1 -1
- package/dist/agents/short-fiction.d.ts +4 -0
- package/dist/agents/short-fiction.d.ts.map +1 -1
- package/dist/agents/short-fiction.js +51 -8
- package/dist/agents/short-fiction.js.map +1 -1
- package/dist/agents/state-validator.d.ts +0 -2
- package/dist/agents/state-validator.d.ts.map +1 -1
- package/dist/agents/state-validator.js +4 -16
- package/dist/agents/state-validator.js.map +1 -1
- package/dist/agents/style-analyzer.d.ts +1 -1
- package/dist/agents/style-analyzer.d.ts.map +1 -1
- package/dist/agents/style-analyzer.js +34 -17
- package/dist/agents/style-analyzer.js.map +1 -1
- package/dist/agents/writer-prompts.d.ts.map +1 -1
- package/dist/agents/writer-prompts.js +160 -12
- package/dist/agents/writer-prompts.js.map +1 -1
- package/dist/agents/writer.d.ts.map +1 -1
- package/dist/agents/writer.js +31 -9
- package/dist/agents/writer.js.map +1 -1
- package/dist/index.d.ts +18 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -7
- package/dist/index.js.map +1 -1
- package/dist/interaction/action-envelope.d.ts +261 -0
- package/dist/interaction/action-envelope.d.ts.map +1 -0
- package/dist/interaction/action-envelope.js +102 -0
- package/dist/interaction/action-envelope.js.map +1 -0
- package/dist/interaction/book-session-store.d.ts +6 -2
- package/dist/interaction/book-session-store.d.ts.map +1 -1
- package/dist/interaction/book-session-store.js +21 -3
- package/dist/interaction/book-session-store.js.map +1 -1
- package/dist/interaction/edit-controller.d.ts +5 -0
- package/dist/interaction/edit-controller.d.ts.map +1 -1
- package/dist/interaction/edit-controller.js +123 -26
- package/dist/interaction/edit-controller.js.map +1 -1
- package/dist/interaction/events.d.ts +4 -4
- package/dist/interaction/intents.d.ts +9 -6
- package/dist/interaction/intents.d.ts.map +1 -1
- package/dist/interaction/intents.js +2 -1
- package/dist/interaction/intents.js.map +1 -1
- package/dist/interaction/project-control.d.ts +3 -43
- package/dist/interaction/project-control.d.ts.map +1 -1
- package/dist/interaction/project-control.js +1 -53
- package/dist/interaction/project-control.js.map +1 -1
- package/dist/interaction/project-tools.d.ts +1 -1
- package/dist/interaction/project-tools.d.ts.map +1 -1
- package/dist/interaction/project-tools.js +41 -185
- package/dist/interaction/project-tools.js.map +1 -1
- package/dist/interaction/runtime.d.ts +1 -1
- package/dist/interaction/runtime.d.ts.map +1 -1
- package/dist/interaction/runtime.js +49 -75
- package/dist/interaction/runtime.js.map +1 -1
- package/dist/interaction/session-transcript-legacy.d.ts.map +1 -1
- package/dist/interaction/session-transcript-legacy.js +2 -0
- package/dist/interaction/session-transcript-legacy.js.map +1 -1
- package/dist/interaction/session-transcript-restore.d.ts +4 -3
- package/dist/interaction/session-transcript-restore.d.ts.map +1 -1
- package/dist/interaction/session-transcript-restore.js +234 -34
- package/dist/interaction/session-transcript-restore.js.map +1 -1
- package/dist/interaction/session-transcript-schema.d.ts +45 -12
- package/dist/interaction/session-transcript-schema.d.ts.map +1 -1
- package/dist/interaction/session-transcript-schema.js +6 -0
- package/dist/interaction/session-transcript-schema.js.map +1 -1
- package/dist/interaction/session-transcript.d.ts +8 -1
- package/dist/interaction/session-transcript.d.ts.map +1 -1
- package/dist/interaction/session-transcript.js +13 -1
- package/dist/interaction/session-transcript.js.map +1 -1
- package/dist/interaction/session.d.ts +78 -66
- package/dist/interaction/session.d.ts.map +1 -1
- package/dist/interaction/session.js +10 -2
- package/dist/interaction/session.js.map +1 -1
- package/dist/llm/provider.d.ts +32 -34
- package/dist/llm/provider.d.ts.map +1 -1
- package/dist/llm/provider.js +144 -127
- package/dist/llm/provider.js.map +1 -1
- package/dist/models/book-rules.d.ts +6 -4
- package/dist/models/book-rules.d.ts.map +1 -1
- package/dist/models/book-rules.js +187 -8
- package/dist/models/book-rules.js.map +1 -1
- package/dist/models/context-compression.d.ts +13 -0
- package/dist/models/context-compression.d.ts.map +1 -0
- package/dist/models/context-compression.js +2 -0
- package/dist/models/context-compression.js.map +1 -0
- package/dist/models/input-governance.d.ts +53 -12
- package/dist/models/input-governance.d.ts.map +1 -1
- package/dist/models/input-governance.js +16 -0
- package/dist/models/input-governance.js.map +1 -1
- package/dist/models/play.d.ts +530 -0
- package/dist/models/play.d.ts.map +1 -0
- package/dist/models/play.js +318 -0
- package/dist/models/play.js.map +1 -0
- package/dist/models/project.d.ts +8 -0
- package/dist/models/project.d.ts.map +1 -1
- package/dist/models/project.js +1 -0
- package/dist/models/project.js.map +1 -1
- package/dist/pipeline/chapter-review-cycle.d.ts.map +1 -1
- package/dist/pipeline/chapter-review-cycle.js +29 -3
- package/dist/pipeline/chapter-review-cycle.js.map +1 -1
- package/dist/pipeline/persisted-governed-plan.d.ts.map +1 -1
- package/dist/pipeline/persisted-governed-plan.js +98 -49
- package/dist/pipeline/persisted-governed-plan.js.map +1 -1
- package/dist/pipeline/runner.d.ts +31 -0
- package/dist/pipeline/runner.d.ts.map +1 -1
- package/dist/pipeline/runner.js +212 -68
- package/dist/pipeline/runner.js.map +1 -1
- package/dist/pipeline/short-fiction-runner.d.ts +14 -0
- package/dist/pipeline/short-fiction-runner.d.ts.map +1 -1
- package/dist/pipeline/short-fiction-runner.js +242 -94
- package/dist/pipeline/short-fiction-runner.js.map +1 -1
- package/dist/play/play-agents.d.ts +71 -0
- package/dist/play/play-agents.d.ts.map +1 -0
- package/dist/play/play-agents.js +511 -0
- package/dist/play/play-agents.js.map +1 -0
- package/dist/play/play-db-factory.d.ts +9 -0
- package/dist/play/play-db-factory.d.ts.map +1 -0
- package/dist/play/play-db-factory.js +18 -0
- package/dist/play/play-db-factory.js.map +1 -0
- package/dist/play/play-db.d.ts +22 -0
- package/dist/play/play-db.d.ts.map +1 -0
- package/dist/play/play-db.js +248 -0
- package/dist/play/play-db.js.map +1 -0
- package/dist/play/play-file-db.d.ts +32 -0
- package/dist/play/play-file-db.d.ts.map +1 -0
- package/dist/play/play-file-db.js +156 -0
- package/dist/play/play-file-db.js.map +1 -0
- package/dist/play/play-image.d.ts +58 -0
- package/dist/play/play-image.d.ts.map +1 -0
- package/dist/play/play-image.js +142 -0
- package/dist/play/play-image.js.map +1 -0
- package/dist/play/play-reducer.d.ts +31 -0
- package/dist/play/play-reducer.d.ts.map +1 -0
- package/dist/play/play-reducer.js +261 -0
- package/dist/play/play-reducer.js.map +1 -0
- package/dist/play/play-runner.d.ts +102 -0
- package/dist/play/play-runner.d.ts.map +1 -0
- package/dist/play/play-runner.js +465 -0
- package/dist/play/play-runner.js.map +1 -0
- package/dist/play/play-store.d.ts +112 -0
- package/dist/play/play-store.d.ts.map +1 -0
- package/dist/play/play-store.js +311 -0
- package/dist/play/play-store.js.map +1 -0
- package/dist/prompts/short-fiction.d.ts +5 -0
- package/dist/prompts/short-fiction.d.ts.map +1 -1
- package/dist/prompts/short-fiction.js +46 -22
- package/dist/prompts/short-fiction.js.map +1 -1
- package/dist/state/state-bootstrap.d.ts.map +1 -1
- package/dist/state/state-bootstrap.js +12 -25
- package/dist/state/state-bootstrap.js.map +1 -1
- package/dist/state/state-reducer.js +31 -22
- package/dist/state/state-reducer.js.map +1 -1
- package/dist/utils/book-eval.d.ts +35 -0
- package/dist/utils/book-eval.d.ts.map +1 -0
- package/dist/utils/book-eval.js +116 -0
- package/dist/utils/book-eval.js.map +1 -0
- package/dist/utils/chapter-memo-parser.d.ts +10 -7
- package/dist/utils/chapter-memo-parser.d.ts.map +1 -1
- package/dist/utils/chapter-memo-parser.js +86 -43
- package/dist/utils/chapter-memo-parser.js.map +1 -1
- package/dist/utils/context-assembly.d.ts +2 -0
- package/dist/utils/context-assembly.d.ts.map +1 -1
- package/dist/utils/context-assembly.js +38 -1
- package/dist/utils/context-assembly.js.map +1 -1
- package/dist/utils/hook-health.d.ts.map +1 -1
- package/dist/utils/hook-health.js +5 -2
- package/dist/utils/hook-health.js.map +1 -1
- package/dist/utils/hook-ledger-validator.d.ts +1 -1
- package/dist/utils/hook-ledger-validator.d.ts.map +1 -1
- package/dist/utils/hook-ledger-validator.js +5 -5
- package/dist/utils/hook-ledger-validator.js.map +1 -1
- package/dist/utils/hook-lifecycle.d.ts +1 -0
- package/dist/utils/hook-lifecycle.d.ts.map +1 -1
- package/dist/utils/hook-lifecycle.js +10 -3
- package/dist/utils/hook-lifecycle.js.map +1 -1
- package/dist/utils/language.d.ts +10 -0
- package/dist/utils/language.d.ts.map +1 -0
- package/dist/utils/language.js +18 -0
- package/dist/utils/language.js.map +1 -0
- package/dist/utils/length-metrics.d.ts +3 -0
- package/dist/utils/length-metrics.d.ts.map +1 -1
- package/dist/utils/length-metrics.js +8 -0
- package/dist/utils/length-metrics.js.map +1 -1
- package/dist/utils/memory-retrieval.d.ts.map +1 -1
- package/dist/utils/memory-retrieval.js +19 -15
- package/dist/utils/memory-retrieval.js.map +1 -1
- package/dist/utils/outline-paths.d.ts +12 -0
- package/dist/utils/outline-paths.d.ts.map +1 -1
- package/dist/utils/outline-paths.js +68 -0
- package/dist/utils/outline-paths.js.map +1 -1
- package/package.json +1 -1
- package/dist/interaction/nl-router.d.ts +0 -8
- package/dist/interaction/nl-router.d.ts.map +0 -1
- package/dist/interaction/nl-router.js +0 -218
- package/dist/interaction/nl-router.js.map +0 -1
- package/dist/pipeline/agent.d.ts +0 -15
- package/dist/pipeline/agent.d.ts.map +0 -1
- package/dist/pipeline/agent.js +0 -597
- package/dist/pipeline/agent.js.map +0 -1
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import { appendFile, mkdir, readFile, readdir, stat, writeFile } from "node:fs/promises";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { join, normalize, sep } from "node:path";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { PlayEventSchema } from "../models/play.js";
|
|
6
|
+
const WORLDS_DIR = "worlds";
|
|
7
|
+
const PlayTranscriptTurnSchema = z.object({
|
|
8
|
+
role: z.enum(["user", "assistant", "system", "tool"]),
|
|
9
|
+
content: z.string(),
|
|
10
|
+
timestamp: z.number().int().nonnegative(),
|
|
11
|
+
});
|
|
12
|
+
const PlayWorldSchema = z.object({
|
|
13
|
+
id: z.string().min(1),
|
|
14
|
+
title: z.string().min(1),
|
|
15
|
+
premise: z.string().default(""),
|
|
16
|
+
worldContract: z.string().default(""),
|
|
17
|
+
visualContract: z.string().default(""),
|
|
18
|
+
mode: z.enum(["open", "guided"]).default("open"),
|
|
19
|
+
language: z.enum(["zh", "en"]).default("zh"),
|
|
20
|
+
createdAt: z.string().min(1),
|
|
21
|
+
updatedAt: z.string().min(1),
|
|
22
|
+
});
|
|
23
|
+
export class PlayStore {
|
|
24
|
+
projectRoot;
|
|
25
|
+
constructor(projectRoot) {
|
|
26
|
+
this.projectRoot = projectRoot;
|
|
27
|
+
}
|
|
28
|
+
worldDir(worldId) {
|
|
29
|
+
return join(this.projectRoot, WORLDS_DIR, assertSafeSegment(worldId));
|
|
30
|
+
}
|
|
31
|
+
runDir(worldId, runId) {
|
|
32
|
+
return join(this.worldDir(worldId), "runs", assertSafeSegment(runId));
|
|
33
|
+
}
|
|
34
|
+
async ensureWorld(worldId) {
|
|
35
|
+
await mkdir(this.worldDir(worldId), { recursive: true });
|
|
36
|
+
}
|
|
37
|
+
async createWorld(input) {
|
|
38
|
+
const now = new Date().toISOString();
|
|
39
|
+
const world = PlayWorldSchema.parse({
|
|
40
|
+
...input,
|
|
41
|
+
id: assertSafeSegment(input.id),
|
|
42
|
+
createdAt: input.createdAt ?? now,
|
|
43
|
+
updatedAt: input.updatedAt ?? now,
|
|
44
|
+
});
|
|
45
|
+
await this.ensureWorld(world.id);
|
|
46
|
+
await writeFile(join(this.worldDir(world.id), "world.json"), `${JSON.stringify(world, null, 2)}\n`, "utf-8");
|
|
47
|
+
return world;
|
|
48
|
+
}
|
|
49
|
+
async updateWorld(worldId, patch) {
|
|
50
|
+
const current = await this.loadWorld(worldId);
|
|
51
|
+
if (!current) {
|
|
52
|
+
throw new Error(`Play world not found: ${worldId}`);
|
|
53
|
+
}
|
|
54
|
+
const world = PlayWorldSchema.parse({
|
|
55
|
+
...current,
|
|
56
|
+
...patch,
|
|
57
|
+
id: current.id,
|
|
58
|
+
title: current.title,
|
|
59
|
+
language: current.language,
|
|
60
|
+
createdAt: current.createdAt,
|
|
61
|
+
updatedAt: new Date().toISOString(),
|
|
62
|
+
});
|
|
63
|
+
await this.ensureWorld(world.id);
|
|
64
|
+
await writeFile(join(this.worldDir(world.id), "world.json"), `${JSON.stringify(world, null, 2)}\n`, "utf-8");
|
|
65
|
+
return world;
|
|
66
|
+
}
|
|
67
|
+
async loadWorld(worldId) {
|
|
68
|
+
try {
|
|
69
|
+
const raw = await readFile(join(this.worldDir(worldId), "world.json"), "utf-8");
|
|
70
|
+
const parsed = PlayWorldSchema.safeParse(JSON.parse(raw));
|
|
71
|
+
return parsed.success ? parsed.data : null;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async listWorlds() {
|
|
78
|
+
const worldsRoot = join(this.projectRoot, WORLDS_DIR);
|
|
79
|
+
let entries;
|
|
80
|
+
try {
|
|
81
|
+
entries = await readdir(worldsRoot);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
const worlds = [];
|
|
87
|
+
for (const entry of entries.sort()) {
|
|
88
|
+
if (!isSafeSegment(entry))
|
|
89
|
+
continue;
|
|
90
|
+
const entryStat = await stat(join(worldsRoot, entry)).catch(() => null);
|
|
91
|
+
if (!entryStat?.isDirectory())
|
|
92
|
+
continue;
|
|
93
|
+
const world = await this.loadWorld(entry);
|
|
94
|
+
worlds.push(world ?? PlayWorldSchema.parse({
|
|
95
|
+
id: entry,
|
|
96
|
+
title: entry,
|
|
97
|
+
premise: "",
|
|
98
|
+
mode: "open",
|
|
99
|
+
createdAt: entryStat.birthtime.toISOString(),
|
|
100
|
+
updatedAt: entryStat.mtime.toISOString(),
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
return worlds.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt) || a.id.localeCompare(b.id));
|
|
104
|
+
}
|
|
105
|
+
async ensureRun(worldId, runId) {
|
|
106
|
+
const dir = this.runDir(worldId, runId);
|
|
107
|
+
await Promise.all([
|
|
108
|
+
mkdir(dir, { recursive: true }),
|
|
109
|
+
mkdir(join(dir, "state"), { recursive: true }),
|
|
110
|
+
mkdir(join(dir, "projections"), { recursive: true }),
|
|
111
|
+
mkdir(join(dir, "summaries"), { recursive: true }),
|
|
112
|
+
mkdir(join(dir, "checkpoints"), { recursive: true }),
|
|
113
|
+
]);
|
|
114
|
+
}
|
|
115
|
+
async listRuns(worldId) {
|
|
116
|
+
const runsRoot = join(this.worldDir(worldId), "runs");
|
|
117
|
+
let entries;
|
|
118
|
+
try {
|
|
119
|
+
entries = await readdir(runsRoot);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
const runs = [];
|
|
125
|
+
for (const entry of entries.sort()) {
|
|
126
|
+
if (!isSafeSegment(entry))
|
|
127
|
+
continue;
|
|
128
|
+
const runDir = join(runsRoot, entry);
|
|
129
|
+
const entryStat = await stat(runDir).catch(() => null);
|
|
130
|
+
if (!entryStat?.isDirectory())
|
|
131
|
+
continue;
|
|
132
|
+
const [events, transcript] = await Promise.all([
|
|
133
|
+
this.readEvents(worldId, entry),
|
|
134
|
+
this.readTranscript(worldId, entry),
|
|
135
|
+
]);
|
|
136
|
+
runs.push({
|
|
137
|
+
id: entry,
|
|
138
|
+
updatedAt: entryStat.mtime.toISOString(),
|
|
139
|
+
eventCount: events.length,
|
|
140
|
+
transcriptCount: transcript.length,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
return runs.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt) || a.id.localeCompare(b.id));
|
|
144
|
+
}
|
|
145
|
+
async appendEvent(worldId, runId, event) {
|
|
146
|
+
await this.ensureRun(worldId, runId);
|
|
147
|
+
await this.appendJsonLine(this.eventsPath(worldId, runId), PlayEventSchema.parse(event));
|
|
148
|
+
}
|
|
149
|
+
async appendRawEventLine(worldId, runId, line) {
|
|
150
|
+
await this.ensureRun(worldId, runId);
|
|
151
|
+
await appendFile(this.eventsPath(worldId, runId), `${line}\n`, "utf-8");
|
|
152
|
+
}
|
|
153
|
+
async readEvents(worldId, runId) {
|
|
154
|
+
return this.readJsonLines(this.eventsPath(worldId, runId), PlayEventSchema);
|
|
155
|
+
}
|
|
156
|
+
async appendTranscriptTurn(worldId, runId, turn) {
|
|
157
|
+
await this.ensureRun(worldId, runId);
|
|
158
|
+
await this.appendJsonLine(this.transcriptPath(worldId, runId), PlayTranscriptTurnSchema.parse(turn));
|
|
159
|
+
}
|
|
160
|
+
async readTranscript(worldId, runId) {
|
|
161
|
+
return this.readJsonLines(this.transcriptPath(worldId, runId), PlayTranscriptTurnSchema);
|
|
162
|
+
}
|
|
163
|
+
async saveCurrentState(worldId, runId, state) {
|
|
164
|
+
await this.ensureRun(worldId, runId);
|
|
165
|
+
await writeFile(join(this.runDir(worldId, runId), "state", "current.json"), `${JSON.stringify(state, null, 2)}\n`, "utf-8");
|
|
166
|
+
}
|
|
167
|
+
async loadCurrentState(worldId, runId) {
|
|
168
|
+
const raw = await readFile(join(this.runDir(worldId, runId), "state", "current.json"), "utf-8");
|
|
169
|
+
return JSON.parse(raw);
|
|
170
|
+
}
|
|
171
|
+
async writeProjection(worldId, runId, relativePath, content) {
|
|
172
|
+
await this.ensureRun(worldId, runId);
|
|
173
|
+
const target = this.safeRunChildPath(worldId, runId, relativePath);
|
|
174
|
+
await mkdir(join(target, ".."), { recursive: true });
|
|
175
|
+
await writeFile(target, content, "utf-8");
|
|
176
|
+
}
|
|
177
|
+
async readProjection(worldId, runId, relativePath) {
|
|
178
|
+
return readFile(this.safeRunChildPath(worldId, runId, relativePath), "utf-8");
|
|
179
|
+
}
|
|
180
|
+
async captureRunSnapshot(worldId, runId, input) {
|
|
181
|
+
await this.ensureRun(worldId, runId);
|
|
182
|
+
return {
|
|
183
|
+
id: input.id,
|
|
184
|
+
turn: input.turn,
|
|
185
|
+
createdAt: new Date().toISOString(),
|
|
186
|
+
eventsRaw: await this.readOptionalRunFile(worldId, runId, "events.jsonl"),
|
|
187
|
+
transcriptRaw: await this.readOptionalRunFile(worldId, runId, "transcript.jsonl"),
|
|
188
|
+
currentStateRaw: await this.readOptionalRunFile(worldId, runId, join("state", "current.json")),
|
|
189
|
+
sceneProjection: await this.readOptionalRunFile(worldId, runId, join("projections", "scene.md")),
|
|
190
|
+
stateProjection: await this.readOptionalRunFile(worldId, runId, join("projections", "state.md")),
|
|
191
|
+
graph: input.graph,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
async saveCheckpoint(worldId, runId, snapshot) {
|
|
195
|
+
await this.ensureRun(worldId, runId);
|
|
196
|
+
await writeFile(this.safeRunChildPath(worldId, runId, join("checkpoints", `${assertSafeSegment(snapshot.id)}.json`)), `${JSON.stringify(snapshot, null, 2)}\n`, "utf-8");
|
|
197
|
+
}
|
|
198
|
+
async loadCheckpoint(worldId, runId, checkpointId) {
|
|
199
|
+
return this.loadSnapshotFile(worldId, runId, join("checkpoints", `${assertSafeSegment(checkpointId)}.json`));
|
|
200
|
+
}
|
|
201
|
+
async saveVariant(worldId, runId, turn, snapshot) {
|
|
202
|
+
const variantId = `v-${randomUUID()}`;
|
|
203
|
+
await this.ensureRun(worldId, runId);
|
|
204
|
+
const relativePath = join("variants", `turn-${turn}`, `${variantId}.json`);
|
|
205
|
+
await mkdir(join(this.runDir(worldId, runId), "variants", `turn-${turn}`), { recursive: true });
|
|
206
|
+
await writeFile(this.safeRunChildPath(worldId, runId, relativePath), `${JSON.stringify({ ...snapshot, id: variantId }, null, 2)}\n`, "utf-8");
|
|
207
|
+
return variantId;
|
|
208
|
+
}
|
|
209
|
+
async loadVariant(worldId, runId, turn, variantId) {
|
|
210
|
+
return this.loadSnapshotFile(worldId, runId, join("variants", `turn-${turn}`, `${assertSafeSegment(variantId)}.json`));
|
|
211
|
+
}
|
|
212
|
+
async restoreRunSnapshot(worldId, runId, snapshot, db) {
|
|
213
|
+
await this.ensureRun(worldId, runId);
|
|
214
|
+
db.replaceWithSnapshot(snapshot.graph);
|
|
215
|
+
await writeFile(this.eventsPath(worldId, runId), snapshot.eventsRaw, "utf-8");
|
|
216
|
+
await writeFile(this.transcriptPath(worldId, runId), snapshot.transcriptRaw, "utf-8");
|
|
217
|
+
await writeFile(this.safeRunChildPath(worldId, runId, join("state", "current.json")), snapshot.currentStateRaw, "utf-8");
|
|
218
|
+
await this.writeProjection(worldId, runId, "projections/scene.md", snapshot.sceneProjection);
|
|
219
|
+
await this.writeProjection(worldId, runId, "projections/state.md", snapshot.stateProjection);
|
|
220
|
+
}
|
|
221
|
+
eventsPath(worldId, runId) {
|
|
222
|
+
return join(this.runDir(worldId, runId), "events.jsonl");
|
|
223
|
+
}
|
|
224
|
+
transcriptPath(worldId, runId) {
|
|
225
|
+
return join(this.runDir(worldId, runId), "transcript.jsonl");
|
|
226
|
+
}
|
|
227
|
+
async appendJsonLine(path, value) {
|
|
228
|
+
await appendFile(path, `${JSON.stringify(value)}\n`, "utf-8");
|
|
229
|
+
}
|
|
230
|
+
async readJsonLines(path, schema) {
|
|
231
|
+
let raw;
|
|
232
|
+
try {
|
|
233
|
+
raw = await readFile(path, "utf-8");
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
return [];
|
|
237
|
+
}
|
|
238
|
+
const rows = [];
|
|
239
|
+
for (const line of raw.split(/\r?\n/)) {
|
|
240
|
+
if (!line.trim())
|
|
241
|
+
continue;
|
|
242
|
+
try {
|
|
243
|
+
const parsed = schema.safeParse(JSON.parse(line));
|
|
244
|
+
if (parsed.success)
|
|
245
|
+
rows.push(parsed.data);
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
// Ignore malformed rows so one interrupted write does not break a run.
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return rows;
|
|
252
|
+
}
|
|
253
|
+
async readOptionalRunFile(worldId, runId, relativePath) {
|
|
254
|
+
try {
|
|
255
|
+
return await readFile(this.safeRunChildPath(worldId, runId, relativePath), "utf-8");
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
return "";
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
async loadSnapshotFile(worldId, runId, relativePath) {
|
|
262
|
+
try {
|
|
263
|
+
const raw = await readFile(this.safeRunChildPath(worldId, runId, relativePath), "utf-8");
|
|
264
|
+
return PlayRunSnapshotSchema.parse(JSON.parse(raw));
|
|
265
|
+
}
|
|
266
|
+
catch {
|
|
267
|
+
return null;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
safeRunChildPath(worldId, runId, relativePath) {
|
|
271
|
+
if (!relativePath || relativePath.startsWith("/") || relativePath.includes("\0")) {
|
|
272
|
+
throw new Error(`Unsafe play path: ${relativePath}`);
|
|
273
|
+
}
|
|
274
|
+
const normalized = normalize(relativePath);
|
|
275
|
+
if (normalized === ".." || normalized.startsWith(`..${sep}`)) {
|
|
276
|
+
throw new Error(`Unsafe play path: ${relativePath}`);
|
|
277
|
+
}
|
|
278
|
+
return join(this.runDir(worldId, runId), normalized);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
const PlayRunSnapshotSchema = z.object({
|
|
282
|
+
id: z.string().min(1),
|
|
283
|
+
turn: z.number().int().min(0),
|
|
284
|
+
createdAt: z.string().min(1),
|
|
285
|
+
eventsRaw: z.string(),
|
|
286
|
+
transcriptRaw: z.string(),
|
|
287
|
+
currentStateRaw: z.string(),
|
|
288
|
+
sceneProjection: z.string(),
|
|
289
|
+
stateProjection: z.string(),
|
|
290
|
+
graph: z.object({
|
|
291
|
+
entities: z.array(z.unknown()),
|
|
292
|
+
edges: z.array(z.unknown()),
|
|
293
|
+
stateSlots: z.array(z.unknown()),
|
|
294
|
+
events: z.array(z.unknown()),
|
|
295
|
+
}),
|
|
296
|
+
});
|
|
297
|
+
function assertSafeSegment(value) {
|
|
298
|
+
if (!isSafeSegment(value)) {
|
|
299
|
+
throw new Error(`Unsafe play path segment: ${value}`);
|
|
300
|
+
}
|
|
301
|
+
return value;
|
|
302
|
+
}
|
|
303
|
+
function isSafeSegment(value) {
|
|
304
|
+
return Boolean(value) &&
|
|
305
|
+
!value.includes("/") &&
|
|
306
|
+
!value.includes("\\") &&
|
|
307
|
+
!value.includes("\0") &&
|
|
308
|
+
value !== "." &&
|
|
309
|
+
value !== "..";
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=play-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"play-store.js","sourceRoot":"","sources":["../../src/play/play-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,10 @@ export interface ShortFictionDraftPromptInput {
|
|
|
25
25
|
readonly chapterCount: number;
|
|
26
26
|
readonly charsPerChapter: number;
|
|
27
27
|
}
|
|
28
|
+
export interface ShortFictionDraftContinuationPromptInput extends ShortFictionDraftPromptInput {
|
|
29
|
+
readonly existingDraftMarkdown: string;
|
|
30
|
+
readonly missingChapters: readonly number[];
|
|
31
|
+
}
|
|
28
32
|
export interface ShortFictionDraftReviewPromptInput extends ShortFictionDraftPromptInput {
|
|
29
33
|
readonly draftMarkdown: string;
|
|
30
34
|
}
|
|
@@ -44,6 +48,7 @@ export declare function buildShortFictionOutlineReviewUserPrompt(input: ShortFic
|
|
|
44
48
|
export declare function buildShortFictionOutlineRevisionFollowup(input: ShortFictionOutlineRevisionPromptInput): string;
|
|
45
49
|
export declare function buildShortFictionWriterSystemPrompt(): string;
|
|
46
50
|
export declare function buildShortFictionWriterUserPrompt(input: ShortFictionDraftPromptInput): string;
|
|
51
|
+
export declare function buildShortFictionDraftContinuationUserPrompt(input: ShortFictionDraftContinuationPromptInput): string;
|
|
47
52
|
export declare function buildShortFictionDraftReviewSystemPrompt(): string;
|
|
48
53
|
export declare function buildShortFictionDraftReviewUserPrompt(input: ShortFictionDraftReviewPromptInput): string;
|
|
49
54
|
export declare function buildShortFictionDraftRevisionFollowup(input: ShortFictionDraftRevisionPromptInput): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"short-fiction.d.ts","sourceRoot":"","sources":["../../src/prompts/short-fiction.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,gCAAgC,CAAC;CACvD;AAED,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,QAAQ,CAAC,SAAS,CAAC,EAAE,gCAAgC,CAAC;CACvD;AAED,MAAM,WAAW,sCAAuC,SAAQ,oCAAoC;IAClG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,kCAAmC,SAAQ,4BAA4B;IACtF,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,oCAAqC,SAAQ,4BAA4B;IACxF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,oCAAoC,IAAI,MAAM,CAQ7D;AAED,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,8BAA8B,GAAG,MAAM,CAoBhG;AAED,wBAAgB,0CAA0C,IAAI,MAAM,CAOnE;AAED,wBAAgB,wCAAwC,CAAC,KAAK,EAAE,oCAAoC,GAAG,MAAM,CAgB5G;AAED,wBAAgB,wCAAwC,CAAC,KAAK,EAAE,sCAAsC,GAAG,MAAM,CAgB9G;AAED,wBAAgB,mCAAmC,IAAI,MAAM,CAS5D;AAED,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,4BAA4B,GAAG,MAAM,CA6B7F;AAED,wBAAgB,wCAAwC,IAAI,MAAM,CAOjE;AAED,wBAAgB,sCAAsC,CAAC,KAAK,EAAE,kCAAkC,GAAG,MAAM,CAexG;AAED,wBAAgB,sCAAsC,CAAC,KAAK,EAAE,oCAAoC,GAAG,MAAM,CA8B1G;AAED,wBAAgB,oCAAoC,IAAI,MAAM,CAM7D;AAED,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,8BAA8B,GAAG,MAAM,CAqBhG"}
|
|
1
|
+
{"version":3,"file":"short-fiction.d.ts","sourceRoot":"","sources":["../../src/prompts/short-fiction.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,gCAAgC,CAAC;CACvD;AAED,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,QAAQ,CAAC,SAAS,CAAC,EAAE,gCAAgC,CAAC;CACvD;AAED,MAAM,WAAW,sCAAuC,SAAQ,oCAAoC;IAClG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,wCAAyC,SAAQ,4BAA4B;IAC5F,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,kCAAmC,SAAQ,4BAA4B;IACtF,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,oCAAqC,SAAQ,4BAA4B;IACxF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,oCAAoC,IAAI,MAAM,CAQ7D;AAED,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,8BAA8B,GAAG,MAAM,CAoBhG;AAED,wBAAgB,0CAA0C,IAAI,MAAM,CAOnE;AAED,wBAAgB,wCAAwC,CAAC,KAAK,EAAE,oCAAoC,GAAG,MAAM,CAgB5G;AAED,wBAAgB,wCAAwC,CAAC,KAAK,EAAE,sCAAsC,GAAG,MAAM,CAgB9G;AAED,wBAAgB,mCAAmC,IAAI,MAAM,CAS5D;AAED,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,4BAA4B,GAAG,MAAM,CA6B7F;AAED,wBAAgB,4CAA4C,CAAC,KAAK,EAAE,wCAAwC,GAAG,MAAM,CA2BpH;AAED,wBAAgB,wCAAwC,IAAI,MAAM,CAOjE;AAED,wBAAgB,sCAAsC,CAAC,KAAK,EAAE,kCAAkC,GAAG,MAAM,CAexG;AAED,wBAAgB,sCAAsC,CAAC,KAAK,EAAE,oCAAoC,GAAG,MAAM,CA8B1G;AAED,wBAAgB,oCAAoC,IAAI,MAAM,CAM7D;AAED,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,8BAA8B,GAAG,MAAM,CAqBhG"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export function buildShortFictionOutlineSystemPrompt() {
|
|
2
2
|
return [
|
|
3
|
-
"
|
|
4
|
-
"
|
|
3
|
+
"你是短篇小说总编,负责把一个创作方向做成完整短篇故事方案。",
|
|
4
|
+
"只基于本次创作方向和用户提供的参考文本创作;没有提供的资料,不要声称读过、引用过或继承过。",
|
|
5
5
|
"目标是内容优先:标题、开篇、人物压力、证据/关系/身份杠杆、升级链、反转链和回报落点必须能支撑一次写完整篇。",
|
|
6
6
|
"不要过度结构化,不要输出 JSON/YAML。用人能读的 Markdown,但章节方案必须足够密,写手拿到后能直接一次写完。",
|
|
7
7
|
"短篇默认 12-18 章,每章约 900-1200 字。故事要完整,不是长篇前 5 章启动包。",
|
|
@@ -9,13 +9,13 @@ export function buildShortFictionOutlineSystemPrompt() {
|
|
|
9
9
|
}
|
|
10
10
|
export function buildShortFictionOutlineUserPrompt(input) {
|
|
11
11
|
return [
|
|
12
|
-
"##
|
|
12
|
+
"## 创作方向",
|
|
13
13
|
input.direction,
|
|
14
14
|
"",
|
|
15
15
|
"## 目标规格",
|
|
16
16
|
`完整短篇 ${input.chapterCount} 章,每章约 ${input.charsPerChapter} 字。`,
|
|
17
17
|
"",
|
|
18
|
-
input.reference?.text ? "## 可选参考文本\n" +
|
|
18
|
+
input.reference?.text ? "## 可选参考文本\n" + input.reference.text.trim() + "\n" : "",
|
|
19
19
|
"## 产出要求",
|
|
20
20
|
"先给一个平台感标题,再给完整故事方案。大纲要讲清楚主角为什么被压住、读者想看什么回报、主角靠什么翻盘、证据/关系/身份/规则如何递进、反派为什么会反扑、结尾如何落地。",
|
|
21
21
|
"章节方案必须逐章写清:章节标题方向、当章发生的关键场面、角色动作、压力升级或回报、章尾继续读的理由。",
|
|
@@ -25,12 +25,12 @@ export function buildShortFictionOutlineUserPrompt(input) {
|
|
|
25
25
|
"=== SHORT_FICTION_PLAN_TITLE ===",
|
|
26
26
|
"只写一行平台感标题",
|
|
27
27
|
"=== SHORT_FICTION_PLAN ===",
|
|
28
|
-
"用 Markdown
|
|
28
|
+
"用 Markdown 写完整故事方案,包含:题材/受众、标题方向、开篇小钩子、人物与关系、核心压力、主角赢法、升级链、反转链、结尾回报、逐章方案。",
|
|
29
29
|
].filter(Boolean).join("\n");
|
|
30
30
|
}
|
|
31
31
|
export function buildShortFictionOutlineReviewSystemPrompt() {
|
|
32
32
|
return [
|
|
33
|
-
"
|
|
33
|
+
"你是短篇审纲编辑。你不负责打分,也不负责判抄。",
|
|
34
34
|
"你的任务是判断这个故事方案能不能支撑一次写完整篇:题材发动机是否清楚、人物动机是否成立、压力链是否递进、反派反扑是否可信、结尾回报是否够。",
|
|
35
35
|
"审稿要像真实读者和编辑,不要只列工程检查项。",
|
|
36
36
|
"输出 Markdown,直接指出会导致成稿不好看的硬伤和可保留优点。",
|
|
@@ -38,10 +38,10 @@ export function buildShortFictionOutlineReviewSystemPrompt() {
|
|
|
38
38
|
}
|
|
39
39
|
export function buildShortFictionOutlineReviewUserPrompt(input) {
|
|
40
40
|
return [
|
|
41
|
-
"##
|
|
41
|
+
"## 创作方向",
|
|
42
42
|
input.direction,
|
|
43
43
|
"",
|
|
44
|
-
input.reference?.text ? "## 可选参考文本\n" +
|
|
44
|
+
input.reference?.text ? "## 可选参考文本\n" + input.reference.text.trim() + "\n" : "",
|
|
45
45
|
"## 待审故事方案",
|
|
46
46
|
input.outline.rawContent,
|
|
47
47
|
"",
|
|
@@ -72,7 +72,7 @@ export function buildShortFictionOutlineRevisionFollowup(input) {
|
|
|
72
72
|
}
|
|
73
73
|
export function buildShortFictionWriterSystemPrompt() {
|
|
74
74
|
return [
|
|
75
|
-
"
|
|
75
|
+
"你是中文短篇 BatchWriter。你要根据故事方案一次 API 写完整短篇正文。",
|
|
76
76
|
"这不是长篇连载续写,也不是章节梗概。每章都要有当场发生的戏:人物行动、对话或反应、局面变化、章尾继续读的理由。",
|
|
77
77
|
"网文戏剧性要足:现实压力可以放大到读者愿意信的程度,但不能荒诞到失去代入。",
|
|
78
78
|
"标题和章节标题要像平台内容,不要文艺化总结。正文保持移动端节奏,段落短但不要写成电报体。",
|
|
@@ -88,7 +88,7 @@ export function buildShortFictionWriterUserPrompt(input) {
|
|
|
88
88
|
"",
|
|
89
89
|
buildShortFictionCraftPrompt(),
|
|
90
90
|
"",
|
|
91
|
-
"##
|
|
91
|
+
"## 创作方向",
|
|
92
92
|
input.direction,
|
|
93
93
|
"",
|
|
94
94
|
"## 故事方案",
|
|
@@ -110,9 +110,37 @@ export function buildShortFictionWriterUserPrompt(input) {
|
|
|
110
110
|
}),
|
|
111
111
|
].join("\n");
|
|
112
112
|
}
|
|
113
|
+
export function buildShortFictionDraftContinuationUserPrompt(input) {
|
|
114
|
+
const missing = input.missingChapters.join(", ");
|
|
115
|
+
return [
|
|
116
|
+
"## 任务",
|
|
117
|
+
`上一次正文被截断或漏章。现在只补写缺失章节:${missing}。`,
|
|
118
|
+
`仍然按完整短篇 ${input.chapterCount} 章、每章约 ${input.charsPerChapter} 字校准。`,
|
|
119
|
+
"不要重写已完成章节,不要写总结说明,不要道歉,不要输出审稿意见。",
|
|
120
|
+
"",
|
|
121
|
+
buildShortFictionCraftPrompt(),
|
|
122
|
+
"",
|
|
123
|
+
"## 创作方向",
|
|
124
|
+
input.direction,
|
|
125
|
+
"",
|
|
126
|
+
"## 故事方案",
|
|
127
|
+
input.outlineMarkdown,
|
|
128
|
+
"",
|
|
129
|
+
"## 已有正文(只用于承接,不要重写)",
|
|
130
|
+
input.existingDraftMarkdown,
|
|
131
|
+
"",
|
|
132
|
+
"## 输出格式",
|
|
133
|
+
...input.missingChapters.map((chapter) => [
|
|
134
|
+
`=== CHAPTER ${chapter} TITLE ===`,
|
|
135
|
+
"章节标题,只写纯文本,不要 #,不要第几章前缀",
|
|
136
|
+
`=== CHAPTER ${chapter} CONTENT ===`,
|
|
137
|
+
`第${chapter}章正文,写完整场面,不要梗概,不要作者备注`,
|
|
138
|
+
].join("\n")),
|
|
139
|
+
].join("\n");
|
|
140
|
+
}
|
|
113
141
|
export function buildShortFictionDraftReviewSystemPrompt() {
|
|
114
142
|
return [
|
|
115
|
-
"
|
|
143
|
+
"你是短篇成稿审稿编辑。",
|
|
116
144
|
"你只看内容是否能卖、是否顺、是否有继续读的欲望;不要把审稿变成确定性打分。",
|
|
117
145
|
"重点看标题、章节标题、开篇、人物动机、时间线、人物关系、证据/权限、压力递进、反派反扑、后半段是否泄气、结尾回报是否落地。",
|
|
118
146
|
"输出 Markdown,写清哪些问题会明显影响读者读下去,哪些只是可接受的小瑕疵。",
|
|
@@ -120,7 +148,7 @@ export function buildShortFictionDraftReviewSystemPrompt() {
|
|
|
120
148
|
}
|
|
121
149
|
export function buildShortFictionDraftReviewUserPrompt(input) {
|
|
122
150
|
return [
|
|
123
|
-
"##
|
|
151
|
+
"## 创作方向",
|
|
124
152
|
input.direction,
|
|
125
153
|
"",
|
|
126
154
|
"## 原故事方案",
|
|
@@ -169,19 +197,19 @@ export function buildShortFictionPackageSystemPrompt() {
|
|
|
169
197
|
return [
|
|
170
198
|
"你是短篇小说包装编辑,负责根据最终正文生成简介、卖点和封面提示词。",
|
|
171
199
|
"不要另起一个和正文不同的主标题。包装必须围绕正文实际标题和剧情。",
|
|
172
|
-
"
|
|
200
|
+
"封面提示词按手机端竖版书封思考:3:4 竖图、大标题区、强人物情绪、少量一眼可识别道具、高对比色彩,不要影视海报感。",
|
|
173
201
|
].join("\n");
|
|
174
202
|
}
|
|
175
203
|
export function buildShortFictionPackageUserPrompt(input) {
|
|
176
204
|
return [
|
|
177
|
-
"##
|
|
205
|
+
"## 创作方向",
|
|
178
206
|
input.direction,
|
|
179
207
|
"",
|
|
180
208
|
"## 故事方案",
|
|
181
|
-
|
|
209
|
+
input.outlineMarkdown.trim(),
|
|
182
210
|
"",
|
|
183
211
|
"## 最终正文",
|
|
184
|
-
|
|
212
|
+
input.draftMarkdown.trim(),
|
|
185
213
|
"",
|
|
186
214
|
"## 输出格式",
|
|
187
215
|
"=== SHORT_FICTION_PACKAGE_TITLE ===",
|
|
@@ -199,17 +227,13 @@ function buildShortFictionCraftPrompt() {
|
|
|
199
227
|
"## 写法提醒",
|
|
200
228
|
"- 盐溶于汤:人物价值观和野心靠行动表现,不靠口号。",
|
|
201
229
|
"- Show don't tell:用行为、证据、细节和场景让读者自己感到人物状态。",
|
|
230
|
+
"- 明喻节制:别把「像/仿佛/如同」当默认修辞反复用,每个场景最多 1 处;优先用准确的动词和具体动作,而不是比喻。",
|
|
202
231
|
"- 反注水:每个场景都推动冲突、因果、情绪、证据、压迫、回报或关系。",
|
|
232
|
+
"- 高潮即场景,不是概述:冲突爆发、反转、生死、揭露这些关键拍必须当场一拍一拍演出(动作、对话、五感)。本章信息量越大越要把最关键那拍写成完整场面,绝不能用「然后他救了人、对手落网」这种一句话带过。",
|
|
203
233
|
"- 回报要有铺垫:反转、打脸、和解、复仇、身份揭露都要有证据链和因果链。",
|
|
204
234
|
"- 配角要有动机:压迫者也有利益、误判或恐惧,不要写成无脑工具人。",
|
|
205
235
|
"- 日常细节要变成饵:细节承担证据、情绪、人物差异或后续反转功能。",
|
|
206
236
|
"- 移动端优先:段落短,信息密,少写空泛抒情和装饰性废话。",
|
|
207
237
|
].join("\n");
|
|
208
238
|
}
|
|
209
|
-
function trimForPrompt(text, maxChars) {
|
|
210
|
-
const trimmed = text.trim();
|
|
211
|
-
if (trimmed.length <= maxChars)
|
|
212
|
-
return trimmed;
|
|
213
|
-
return `${trimmed.slice(0, maxChars)}\n\n……(已截断)`;
|
|
214
|
-
}
|
|
215
239
|
//# sourceMappingURL=short-fiction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"short-fiction.js","sourceRoot":"","sources":["../../src/prompts/short-fiction.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"short-fiction.js","sourceRoot":"","sources":["../../src/prompts/short-fiction.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-bootstrap.d.ts","sourceRoot":"","sources":["../../src/state/state-bootstrap.ts"],"names":[],"mappings":"AAEA,OAAO,EASL,KAAK,aAAa,EACnB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"state-bootstrap.d.ts","sourceRoot":"","sources":["../../src/state/state-bootstrap.ts"],"names":[],"mappings":"AAEA,OAAO,EASL,KAAK,aAAa,EACnB,MAAM,4BAA4B,CAAC;AAcpC,OAAO,EACL,eAAe,EACf,6BAA6B,EAC7B,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC;AASD,wBAAsB,oCAAoC,CAAC,MAAM,EAAE;IACjE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC,GAAG,OAAO,CAAC,8BAA8B,CAAC,CA2E1C;AAED,wBAAsB,kCAAkC,CAAC,MAAM,EAAE;IAC/D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC,GAAG,OAAO,CAAC,8BAA8B,CAAC,CA8C1C;AAgND,wBAAsB,2BAA2B,CAAC,MAAM,EAAE;IACxD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC,GAAG,OAAO,CAAC,MAAM,CAAC,CAIlB;AA+KD,wBAAgB,8BAA8B,CAAC,cAAc,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,CAS5F"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { mkdir, readFile, readdir, stat, writeFile } from "node:fs/promises";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { ChapterSummariesStateSchema, CurrentStateStateSchema, HooksStateSchema, StateManifestSchema, } from "../models/runtime-state.js";
|
|
4
|
-
import {
|
|
5
|
-
import { inferFactSubject, isCurrentChapterLabel, isStateTableHeaderRow, normalizeHookId, parseChapterSummariesMarkdown, parseMarkdownTableRows, } from "../utils/story-markdown.js";
|
|
4
|
+
import { inferFactSubject, isCurrentChapterLabel, isStateTableHeaderRow, normalizeHookId, parseChapterSummariesMarkdown, parseMarkdownTableRows, parsePendingHooksMarkdown, } from "../utils/story-markdown.js";
|
|
6
5
|
export { normalizeHookId, parseChapterSummariesMarkdown, parseCurrentStateFacts, parsePendingHooksMarkdown, } from "../utils/story-markdown.js";
|
|
7
6
|
export async function bootstrapStructuredStateFromMarkdown(params) {
|
|
8
7
|
const storyDir = join(params.bookDir, "story");
|
|
@@ -176,26 +175,14 @@ async function loadOrBootstrapSummaries(params) {
|
|
|
176
175
|
return summariesState;
|
|
177
176
|
}
|
|
178
177
|
function parsePendingHooksStateMarkdown(markdown, warnings) {
|
|
179
|
-
const
|
|
180
|
-
|
|
181
|
-
if (tableRows.length > 0) {
|
|
178
|
+
const parsedHooks = parsePendingHooksMarkdown(markdown);
|
|
179
|
+
if (parsedHooks.length > 0) {
|
|
182
180
|
return HooksStateSchema.parse({
|
|
183
|
-
hooks:
|
|
184
|
-
|
|
185
|
-
.
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
return {
|
|
189
|
-
hookId,
|
|
190
|
-
startChapter: parseStrictIntegerWithWarning(row[1], warnings, `${hookId}:startChapter`),
|
|
191
|
-
type: normalizeHookType(row[2], warnings, hookId),
|
|
192
|
-
status: normalizeHookStatus(row[3], warnings, hookId),
|
|
193
|
-
lastAdvancedChapter: parseStrictIntegerWithWarning(row[4], warnings, `${hookId}:lastAdvancedChapter`),
|
|
194
|
-
expectedPayoff: row[5] ?? "",
|
|
195
|
-
payoffTiming: legacyShape ? undefined : normalizeHookPayoffTiming(row[6]),
|
|
196
|
-
notes: legacyShape ? (row[6] ?? "") : (row[7] ?? ""),
|
|
197
|
-
};
|
|
198
|
-
}),
|
|
181
|
+
hooks: parsedHooks.map((hook) => ({
|
|
182
|
+
...hook,
|
|
183
|
+
type: normalizeHookType(hook.type, warnings, hook.hookId),
|
|
184
|
+
status: normalizeHookStatus(hook.status, warnings, hook.hookId),
|
|
185
|
+
})),
|
|
199
186
|
});
|
|
200
187
|
}
|
|
201
188
|
return HooksStateSchema.parse({
|
|
@@ -430,13 +417,13 @@ function normalizeHookStatus(value, warnings, hookId) {
|
|
|
430
417
|
const normalized = (value ?? "").trim().toLowerCase();
|
|
431
418
|
if (!normalized)
|
|
432
419
|
return "open";
|
|
433
|
-
if (/(resolved|closed|done
|
|
420
|
+
if (/(resolved|closed|done|paid[_ -]?off|已回收|回收|完成|已解决|已兑现|兑现)/i.test(normalized))
|
|
434
421
|
return "resolved";
|
|
435
|
-
if (/(deferred|paused|hold
|
|
422
|
+
if (/(deferred|paused|hold|dormant|inactive|unplanted|unseeded|not[_ -]?started|not[_ -]?active|搁置|延后|延期|暂缓|休眠|未激活|未启动|待启动|未推进|尚未推进)/i.test(normalized))
|
|
436
423
|
return "deferred";
|
|
437
|
-
if (/(progress|active
|
|
424
|
+
if (/(confirmed[_ -]?hit|confirmed|advanced|progressing|progress|active|pressured|命中|已确认命中|已推进|推进|进行中|持续推进|重大推进)/i.test(normalized))
|
|
438
425
|
return "progressing";
|
|
439
|
-
if (/(open|pending
|
|
426
|
+
if (/(open|pending|seeded|planted|待定|未回收|已埋|已种下|已铺垫)/i.test(normalized))
|
|
440
427
|
return "open";
|
|
441
428
|
appendWarning(warnings, `${hookId}:status normalized from "${value ?? ""}" to "open"`);
|
|
442
429
|
return "open";
|