@actalk/inkos-core 0.3.4 → 0.3.6
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 +21 -0
- package/dist/__tests__/ai-tells.test.d.ts +2 -0
- package/dist/__tests__/ai-tells.test.d.ts.map +1 -0
- package/dist/__tests__/ai-tells.test.js +78 -0
- package/dist/__tests__/ai-tells.test.js.map +1 -0
- package/dist/__tests__/detection-insights.test.d.ts +2 -0
- package/dist/__tests__/detection-insights.test.d.ts.map +1 -0
- package/dist/__tests__/detection-insights.test.js +50 -0
- package/dist/__tests__/detection-insights.test.js.map +1 -0
- package/dist/__tests__/detector.test.d.ts +2 -0
- package/dist/__tests__/detector.test.d.ts.map +1 -0
- package/dist/__tests__/detector.test.js +71 -0
- package/dist/__tests__/detector.test.js.map +1 -0
- package/dist/__tests__/style-analyzer.test.d.ts +2 -0
- package/dist/__tests__/style-analyzer.test.d.ts.map +1 -0
- package/dist/__tests__/style-analyzer.test.js +53 -0
- package/dist/__tests__/style-analyzer.test.js.map +1 -0
- package/dist/__tests__/webhook.test.d.ts +2 -0
- package/dist/__tests__/webhook.test.d.ts.map +1 -0
- package/dist/__tests__/webhook.test.js +62 -0
- package/dist/__tests__/webhook.test.js.map +1 -0
- package/dist/agents/ai-tells.d.ts +24 -0
- package/dist/agents/ai-tells.d.ts.map +1 -0
- package/dist/agents/ai-tells.js +114 -0
- package/dist/agents/ai-tells.js.map +1 -0
- package/dist/agents/architect.d.ts.map +1 -1
- package/dist/agents/architect.js +2 -0
- package/dist/agents/architect.js.map +1 -1
- package/dist/agents/continuity.d.ts.map +1 -1
- package/dist/agents/continuity.js +34 -2
- package/dist/agents/continuity.js.map +1 -1
- package/dist/agents/detection-insights.d.ts +9 -0
- package/dist/agents/detection-insights.d.ts.map +1 -0
- package/dist/agents/detection-insights.js +54 -0
- package/dist/agents/detection-insights.js.map +1 -0
- package/dist/agents/detector.d.ts +17 -0
- package/dist/agents/detector.d.ts.map +1 -0
- package/dist/agents/detector.js +77 -0
- package/dist/agents/detector.js.map +1 -0
- package/dist/agents/reviser.d.ts +1 -1
- package/dist/agents/reviser.d.ts.map +1 -1
- package/dist/agents/reviser.js +1 -0
- package/dist/agents/reviser.js.map +1 -1
- package/dist/agents/style-analyzer.d.ts +11 -0
- package/dist/agents/style-analyzer.d.ts.map +1 -0
- package/dist/agents/style-analyzer.js +81 -0
- package/dist/agents/style-analyzer.js.map +1 -0
- package/dist/agents/writer-prompts.d.ts +1 -1
- package/dist/agents/writer-prompts.d.ts.map +1 -1
- package/dist/agents/writer-prompts.js +42 -2
- package/dist/agents/writer-prompts.js.map +1 -1
- package/dist/agents/writer.d.ts +9 -0
- package/dist/agents/writer.d.ts.map +1 -1
- package/dist/agents/writer.js +98 -5
- package/dist/agents/writer.js.map +1 -1
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/models/chapter.d.ts +9 -0
- package/dist/models/chapter.d.ts.map +1 -1
- package/dist/models/chapter.js +3 -0
- package/dist/models/chapter.js.map +1 -1
- package/dist/models/detection.d.ts +25 -0
- package/dist/models/detection.d.ts.map +1 -0
- package/dist/models/detection.js +2 -0
- package/dist/models/detection.js.map +1 -0
- package/dist/models/project.d.ts +156 -0
- package/dist/models/project.d.ts.map +1 -1
- package/dist/models/project.js +31 -0
- package/dist/models/project.js.map +1 -1
- package/dist/models/style-profile.d.ts +16 -0
- package/dist/models/style-profile.d.ts.map +1 -0
- package/dist/models/style-profile.js +2 -0
- package/dist/models/style-profile.js.map +1 -0
- package/dist/notify/dispatcher.d.ts +3 -0
- package/dist/notify/dispatcher.d.ts.map +1 -1
- package/dist/notify/dispatcher.js +28 -0
- package/dist/notify/dispatcher.js.map +1 -1
- package/dist/notify/webhook.d.ts +15 -0
- package/dist/notify/webhook.d.ts.map +1 -0
- package/dist/notify/webhook.js +28 -0
- package/dist/notify/webhook.js.map +1 -0
- package/dist/pipeline/detection-runner.d.ts +31 -0
- package/dist/pipeline/detection-runner.d.ts.map +1 -0
- package/dist/pipeline/detection-runner.js +109 -0
- package/dist/pipeline/detection-runner.js.map +1 -0
- package/dist/pipeline/runner.d.ts +3 -2
- package/dist/pipeline/runner.d.ts.map +1 -1
- package/dist/pipeline/runner.js +63 -8
- package/dist/pipeline/runner.js.map +1 -1
- package/dist/pipeline/scheduler.d.ts +11 -0
- package/dist/pipeline/scheduler.d.ts.map +1 -1
- package/dist/pipeline/scheduler.js +60 -0
- package/dist/pipeline/scheduler.js.map +1 -1
- package/dist/state/manager.d.ts.map +1 -1
- package/dist/state/manager.js +21 -3
- package/dist/state/manager.js.map +1 -1
- package/package.json +8 -8
|
@@ -23,6 +23,13 @@ const DIMENSION_MAP = {
|
|
|
23
23
|
17: "流水账",
|
|
24
24
|
18: "知识库污染",
|
|
25
25
|
19: "视角一致性",
|
|
26
|
+
20: "段落等长",
|
|
27
|
+
21: "套话密度",
|
|
28
|
+
22: "公式化转折",
|
|
29
|
+
23: "列表式结构",
|
|
30
|
+
24: "支线停滞",
|
|
31
|
+
25: "弧线平坦",
|
|
32
|
+
26: "节奏单调",
|
|
26
33
|
};
|
|
27
34
|
function buildDimensionList(gp, bookRules) {
|
|
28
35
|
const activeIds = new Set(gp.auditDimensions);
|
|
@@ -61,6 +68,15 @@ function buildDimensionList(gp, bookRules) {
|
|
|
61
68
|
if (id === 19) {
|
|
62
69
|
note = "检查视角切换是否有过渡、是否与设定视角一致";
|
|
63
70
|
}
|
|
71
|
+
if (id === 24) {
|
|
72
|
+
note = "检查支线剧情是否停滞超过5章未推进";
|
|
73
|
+
}
|
|
74
|
+
if (id === 25) {
|
|
75
|
+
note = "检查主要角色情感弧线是否平坦(连续3章无情绪变化)";
|
|
76
|
+
}
|
|
77
|
+
if (id === 26) {
|
|
78
|
+
note = "检查章节类型节奏:连续≥3同类型章→warning,≥5章无高潮/回收→warning";
|
|
79
|
+
}
|
|
64
80
|
dims.push({ id, name, note });
|
|
65
81
|
}
|
|
66
82
|
return dims;
|
|
@@ -70,11 +86,15 @@ export class ContinuityAuditor extends BaseAgent {
|
|
|
70
86
|
return "continuity-auditor";
|
|
71
87
|
}
|
|
72
88
|
async auditChapter(bookDir, chapterContent, chapterNumber, genre) {
|
|
73
|
-
const [currentState, ledger, hooks, styleGuideRaw] = await Promise.all([
|
|
89
|
+
const [currentState, ledger, hooks, styleGuideRaw, subplotBoard, emotionalArcs, characterMatrix, chapterSummaries] = await Promise.all([
|
|
74
90
|
this.readFileSafe(join(bookDir, "story/current_state.md")),
|
|
75
91
|
this.readFileSafe(join(bookDir, "story/particle_ledger.md")),
|
|
76
92
|
this.readFileSafe(join(bookDir, "story/pending_hooks.md")),
|
|
77
93
|
this.readFileSafe(join(bookDir, "story/style_guide.md")),
|
|
94
|
+
this.readFileSafe(join(bookDir, "story/subplot_board.md")),
|
|
95
|
+
this.readFileSafe(join(bookDir, "story/emotional_arcs.md")),
|
|
96
|
+
this.readFileSafe(join(bookDir, "story/character_matrix.md")),
|
|
97
|
+
this.readFileSafe(join(bookDir, "story/chapter_summaries.md")),
|
|
78
98
|
]);
|
|
79
99
|
// Load genre profile and book rules
|
|
80
100
|
const genreId = genre ?? "other";
|
|
@@ -115,6 +135,18 @@ ${dimList}
|
|
|
115
135
|
const ledgerBlock = gp.numericalSystem
|
|
116
136
|
? `\n## 资源账本\n${ledger}`
|
|
117
137
|
: "";
|
|
138
|
+
const subplotBlock = subplotBoard !== "(文件不存在)"
|
|
139
|
+
? `\n## 支线进度板\n${subplotBoard}\n`
|
|
140
|
+
: "";
|
|
141
|
+
const emotionalBlock = emotionalArcs !== "(文件不存在)"
|
|
142
|
+
? `\n## 情感弧线\n${emotionalArcs}\n`
|
|
143
|
+
: "";
|
|
144
|
+
const matrixBlock = characterMatrix !== "(文件不存在)"
|
|
145
|
+
? `\n## 角色交互矩阵\n${characterMatrix}\n`
|
|
146
|
+
: "";
|
|
147
|
+
const summariesBlock = chapterSummaries !== "(文件不存在)"
|
|
148
|
+
? `\n## 章节摘要(用于节奏检查)\n${chapterSummaries}\n`
|
|
149
|
+
: "";
|
|
118
150
|
const userPrompt = `请审查第${chapterNumber}章。
|
|
119
151
|
|
|
120
152
|
## 当前状态卡
|
|
@@ -122,7 +154,7 @@ ${currentState}
|
|
|
122
154
|
${ledgerBlock}
|
|
123
155
|
## 伏笔池
|
|
124
156
|
${hooks}
|
|
125
|
-
|
|
157
|
+
${subplotBlock}${emotionalBlock}${matrixBlock}${summariesBlock}
|
|
126
158
|
## 文风指南
|
|
127
159
|
${styleGuide}
|
|
128
160
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"continuity.js","sourceRoot":"","sources":["../../src/agents/continuity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAejC,8BAA8B;AAC9B,MAAM,aAAa,GAA2B;IAC5C,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,OAAO;IACX,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,OAAO;IACX,EAAE,EAAE,OAAO;
|
|
1
|
+
{"version":3,"file":"continuity.js","sourceRoot":"","sources":["../../src/agents/continuity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detection feedback loop — analyze detection_history.json to extract insights.
|
|
3
|
+
*/
|
|
4
|
+
import type { DetectionHistoryEntry, DetectionStats } from "../models/detection.js";
|
|
5
|
+
/**
|
|
6
|
+
* Analyze detection history and produce aggregated statistics.
|
|
7
|
+
*/
|
|
8
|
+
export declare function analyzeDetectionInsights(history: ReadonlyArray<DetectionHistoryEntry>): DetectionStats;
|
|
9
|
+
//# sourceMappingURL=detection-insights.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detection-insights.d.ts","sourceRoot":"","sources":["../../src/agents/detection-insights.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAEpF;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,aAAa,CAAC,qBAAqB,CAAC,GAC5C,cAAc,CA4DhB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detection feedback loop — analyze detection_history.json to extract insights.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Analyze detection history and produce aggregated statistics.
|
|
6
|
+
*/
|
|
7
|
+
export function analyzeDetectionInsights(history) {
|
|
8
|
+
if (history.length === 0) {
|
|
9
|
+
return {
|
|
10
|
+
totalDetections: 0,
|
|
11
|
+
totalRewrites: 0,
|
|
12
|
+
avgOriginalScore: 0,
|
|
13
|
+
avgFinalScore: 0,
|
|
14
|
+
avgScoreReduction: 0,
|
|
15
|
+
passRate: 0,
|
|
16
|
+
chapterBreakdown: [],
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const detections = history.filter((h) => h.action === "detect");
|
|
20
|
+
const rewrites = history.filter((h) => h.action === "rewrite");
|
|
21
|
+
// Group by chapter
|
|
22
|
+
const chapterMap = new Map();
|
|
23
|
+
for (const entry of history) {
|
|
24
|
+
const existing = chapterMap.get(entry.chapterNumber) ?? [];
|
|
25
|
+
chapterMap.set(entry.chapterNumber, [...existing, entry]);
|
|
26
|
+
}
|
|
27
|
+
const chapterBreakdown = [];
|
|
28
|
+
let totalOriginal = 0;
|
|
29
|
+
let totalFinal = 0;
|
|
30
|
+
for (const [chapterNumber, entries] of chapterMap) {
|
|
31
|
+
const sorted = [...entries].sort((a, b) => a.attempt - b.attempt);
|
|
32
|
+
const originalScore = sorted[0]?.score ?? 0;
|
|
33
|
+
const finalScore = sorted[sorted.length - 1]?.score ?? originalScore;
|
|
34
|
+
const rewriteAttempts = sorted.filter((e) => e.action === "rewrite").length;
|
|
35
|
+
chapterBreakdown.push({ chapterNumber, originalScore, finalScore, rewriteAttempts });
|
|
36
|
+
totalOriginal += originalScore;
|
|
37
|
+
totalFinal += finalScore;
|
|
38
|
+
}
|
|
39
|
+
const chapterCount = chapterBreakdown.length;
|
|
40
|
+
const avgOriginalScore = chapterCount > 0 ? totalOriginal / chapterCount : 0;
|
|
41
|
+
const avgFinalScore = chapterCount > 0 ? totalFinal / chapterCount : 0;
|
|
42
|
+
// Pass rate = chapters where final score decreased (or no rewrite needed)
|
|
43
|
+
const passedChapters = chapterBreakdown.filter((c) => c.finalScore <= c.originalScore).length;
|
|
44
|
+
return {
|
|
45
|
+
totalDetections: detections.length,
|
|
46
|
+
totalRewrites: rewrites.length,
|
|
47
|
+
avgOriginalScore: Math.round(avgOriginalScore * 1000) / 1000,
|
|
48
|
+
avgFinalScore: Math.round(avgFinalScore * 1000) / 1000,
|
|
49
|
+
avgScoreReduction: Math.round((avgOriginalScore - avgFinalScore) * 1000) / 1000,
|
|
50
|
+
passRate: chapterCount > 0 ? Math.round((passedChapters / chapterCount) * 100) / 100 : 0,
|
|
51
|
+
chapterBreakdown,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=detection-insights.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detection-insights.js","sourceRoot":"","sources":["../../src/agents/detection-insights.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AIGC detection — calls external API (GPTZero, Originality, or custom endpoint).
|
|
3
|
+
* Not a BaseAgent subclass since it doesn't use the LLM provider.
|
|
4
|
+
*/
|
|
5
|
+
import type { DetectionConfig } from "../models/project.js";
|
|
6
|
+
export interface DetectionResult {
|
|
7
|
+
readonly score: number;
|
|
8
|
+
readonly provider: string;
|
|
9
|
+
readonly detectedAt: string;
|
|
10
|
+
readonly raw?: Record<string, unknown>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Detect AI-generated content by calling an external detection API.
|
|
14
|
+
* Returns a normalized score between 0 (human) and 1 (AI).
|
|
15
|
+
*/
|
|
16
|
+
export declare function detectAIContent(config: DetectionConfig, content: string): Promise<DetectionResult>;
|
|
17
|
+
//# sourceMappingURL=detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/agents/detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,CAAC,CAkB1B"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AIGC detection — calls external API (GPTZero, Originality, or custom endpoint).
|
|
3
|
+
* Not a BaseAgent subclass since it doesn't use the LLM provider.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Detect AI-generated content by calling an external detection API.
|
|
7
|
+
* Returns a normalized score between 0 (human) and 1 (AI).
|
|
8
|
+
*/
|
|
9
|
+
export async function detectAIContent(config, content) {
|
|
10
|
+
const apiKey = process.env[config.apiKeyEnv];
|
|
11
|
+
if (!apiKey) {
|
|
12
|
+
throw new Error(`Detection API key not found. Set ${config.apiKeyEnv} in your environment.`);
|
|
13
|
+
}
|
|
14
|
+
const detectedAt = new Date().toISOString();
|
|
15
|
+
switch (config.provider) {
|
|
16
|
+
case "gptzero":
|
|
17
|
+
return detectGPTZero(config.apiUrl, apiKey, content, detectedAt);
|
|
18
|
+
case "originality":
|
|
19
|
+
return detectOriginality(config.apiUrl, apiKey, content, detectedAt);
|
|
20
|
+
case "custom":
|
|
21
|
+
return detectCustom(config.apiUrl, apiKey, content, detectedAt);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
async function detectGPTZero(apiUrl, apiKey, content, detectedAt) {
|
|
25
|
+
const response = await fetch(apiUrl, {
|
|
26
|
+
method: "POST",
|
|
27
|
+
headers: {
|
|
28
|
+
"Content-Type": "application/json",
|
|
29
|
+
"X-Api-Key": apiKey,
|
|
30
|
+
},
|
|
31
|
+
body: JSON.stringify({ document: content }),
|
|
32
|
+
});
|
|
33
|
+
if (!response.ok) {
|
|
34
|
+
const body = await response.text();
|
|
35
|
+
throw new Error(`GPTZero API failed: ${response.status} ${body}`);
|
|
36
|
+
}
|
|
37
|
+
const data = await response.json();
|
|
38
|
+
const documents = data.documents;
|
|
39
|
+
const score = documents?.[0]?.completely_generated_prob ?? 0;
|
|
40
|
+
return { score, provider: "gptzero", detectedAt, raw: data };
|
|
41
|
+
}
|
|
42
|
+
async function detectOriginality(apiUrl, apiKey, content, detectedAt) {
|
|
43
|
+
const response = await fetch(apiUrl, {
|
|
44
|
+
method: "POST",
|
|
45
|
+
headers: {
|
|
46
|
+
"Content-Type": "application/json",
|
|
47
|
+
Authorization: `Bearer ${apiKey}`,
|
|
48
|
+
},
|
|
49
|
+
body: JSON.stringify({ content }),
|
|
50
|
+
});
|
|
51
|
+
if (!response.ok) {
|
|
52
|
+
const body = await response.text();
|
|
53
|
+
throw new Error(`Originality API failed: ${response.status} ${body}`);
|
|
54
|
+
}
|
|
55
|
+
const data = await response.json();
|
|
56
|
+
const score = data.score?.ai ?? 0;
|
|
57
|
+
return { score, provider: "originality", detectedAt, raw: data };
|
|
58
|
+
}
|
|
59
|
+
async function detectCustom(apiUrl, apiKey, content, detectedAt) {
|
|
60
|
+
const response = await fetch(apiUrl, {
|
|
61
|
+
method: "POST",
|
|
62
|
+
headers: {
|
|
63
|
+
"Content-Type": "application/json",
|
|
64
|
+
Authorization: `Bearer ${apiKey}`,
|
|
65
|
+
},
|
|
66
|
+
body: JSON.stringify({ content }),
|
|
67
|
+
});
|
|
68
|
+
if (!response.ok) {
|
|
69
|
+
const body = await response.text();
|
|
70
|
+
throw new Error(`Detection API failed: ${response.status} ${body}`);
|
|
71
|
+
}
|
|
72
|
+
const data = await response.json();
|
|
73
|
+
// Custom endpoint must return { score: number } at minimum
|
|
74
|
+
const score = typeof data.score === "number" ? data.score : 0;
|
|
75
|
+
return { score, provider: "custom", detectedAt, raw: data };
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/agents/detector.ts"],"names":[],"mappings":"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"}
|
package/dist/agents/reviser.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BaseAgent } from "./base.js";
|
|
2
2
|
import type { AuditIssue } from "./continuity.js";
|
|
3
|
-
export type ReviseMode = "polish" | "rewrite" | "rework";
|
|
3
|
+
export type ReviseMode = "polish" | "rewrite" | "rework" | "anti-detect";
|
|
4
4
|
export interface ReviseOutput {
|
|
5
5
|
readonly revisedContent: string;
|
|
6
6
|
readonly wordCount: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviser.d.ts","sourceRoot":"","sources":["../../src/agents/reviser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAKlD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"reviser.d.ts","sourceRoot":"","sources":["../../src/agents/reviser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAKlD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEzE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AASD,qBAAa,YAAa,SAAQ,SAAS;IACzC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAEK,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,EACjC,IAAI,GAAE,UAAsB,EAC5B,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,CAAC;IAyFxB,OAAO,CAAC,WAAW;YA2BL,YAAY;CAO3B"}
|
package/dist/agents/reviser.js
CHANGED
|
@@ -6,6 +6,7 @@ const MODE_DESCRIPTIONS = {
|
|
|
6
6
|
polish: "润色:只改表达、节奏、段落呼吸,不改事实与剧情结论",
|
|
7
7
|
rewrite: "改写:可改叙述顺序、画面、力度,但保留核心事实与人物动机",
|
|
8
8
|
rework: "重写:可重构场景推进和冲突组织,但不改主设定和大事件结果",
|
|
9
|
+
"anti-detect": "反检测改写:在保持剧情不变的前提下,降低AI生成可检测性。手法包括:增加段落长度差异、打破句式规律、用口语化/个性化表达替代书面套话、加入非对称修辞、随机化过渡方式",
|
|
9
10
|
};
|
|
10
11
|
export class ReviserAgent extends BaseAgent {
|
|
11
12
|
get name() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviser.js","sourceRoot":"","sources":["../../src/agents/reviser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAItC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAajC,MAAM,iBAAiB,GAA+B;IACpD,MAAM,EAAE,2BAA2B;IACnC,OAAO,EAAE,8BAA8B;IACvC,MAAM,EAAE,8BAA8B;
|
|
1
|
+
{"version":3,"file":"reviser.js","sourceRoot":"","sources":["../../src/agents/reviser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Style fingerprint analysis — pure text analysis (no LLM).
|
|
3
|
+
* Extracts statistical features from reference text to build a StyleProfile.
|
|
4
|
+
*/
|
|
5
|
+
import type { StyleProfile } from "../models/style-profile.js";
|
|
6
|
+
/**
|
|
7
|
+
* Analyze a reference text and extract its style profile.
|
|
8
|
+
* The returned profile can be serialized to style_profile.json.
|
|
9
|
+
*/
|
|
10
|
+
export declare function analyzeStyle(text: string, sourceName?: string): StyleProfile;
|
|
11
|
+
//# sourceMappingURL=style-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style-analyzer.d.ts","sourceRoot":"","sources":["../../src/agents/style-analyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAY/D;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,CAuE5E"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Style fingerprint analysis — pure text analysis (no LLM).
|
|
3
|
+
* Extracts statistical features from reference text to build a StyleProfile.
|
|
4
|
+
*/
|
|
5
|
+
// Common rhetorical patterns in Chinese fiction
|
|
6
|
+
const RHETORICAL_PATTERNS = [
|
|
7
|
+
{ name: "比喻(像/如/仿佛)", regex: /[像如仿佛似](?:是|同|一般|一样)/g },
|
|
8
|
+
{ name: "排比", regex: /[,。;]([^,。;]{2,6})[,。;]\1/g },
|
|
9
|
+
{ name: "反问", regex: /难道|怎么可能|岂不是|何尝不/g },
|
|
10
|
+
{ name: "夸张", regex: /天崩地裂|惊天动地|翻天覆地|震耳欲聋/g },
|
|
11
|
+
{ name: "拟人", regex: /[风雨雪月花树草石](?:在|像|仿佛).*?(?:笑|哭|叹|呻|吟|怒|舞)/g },
|
|
12
|
+
{ name: "短句节奏", regex: /[。!?][^。!?]{1,8}[。!?]/g },
|
|
13
|
+
];
|
|
14
|
+
/**
|
|
15
|
+
* Analyze a reference text and extract its style profile.
|
|
16
|
+
* The returned profile can be serialized to style_profile.json.
|
|
17
|
+
*/
|
|
18
|
+
export function analyzeStyle(text, sourceName) {
|
|
19
|
+
const sentences = text
|
|
20
|
+
.split(/[。!?\n]/)
|
|
21
|
+
.map((s) => s.trim())
|
|
22
|
+
.filter((s) => s.length > 0);
|
|
23
|
+
const paragraphs = text
|
|
24
|
+
.split(/\n\s*\n/)
|
|
25
|
+
.map((p) => p.trim())
|
|
26
|
+
.filter((p) => p.length > 0);
|
|
27
|
+
// Sentence length stats
|
|
28
|
+
const sentenceLengths = sentences.map((s) => s.length);
|
|
29
|
+
const avgSentenceLength = sentenceLengths.length > 0
|
|
30
|
+
? sentenceLengths.reduce((a, b) => a + b, 0) / sentenceLengths.length
|
|
31
|
+
: 0;
|
|
32
|
+
const sentenceLengthStdDev = sentenceLengths.length > 1
|
|
33
|
+
? Math.sqrt(sentenceLengths.reduce((sum, l) => sum + (l - avgSentenceLength) ** 2, 0) /
|
|
34
|
+
sentenceLengths.length)
|
|
35
|
+
: 0;
|
|
36
|
+
// Paragraph length stats
|
|
37
|
+
const paragraphLengths = paragraphs.map((p) => p.length);
|
|
38
|
+
const avgParagraphLength = paragraphLengths.length > 0
|
|
39
|
+
? paragraphLengths.reduce((a, b) => a + b, 0) / paragraphLengths.length
|
|
40
|
+
: 0;
|
|
41
|
+
const minParagraph = paragraphLengths.length > 0 ? Math.min(...paragraphLengths) : 0;
|
|
42
|
+
const maxParagraph = paragraphLengths.length > 0 ? Math.max(...paragraphLengths) : 0;
|
|
43
|
+
// Vocabulary diversity (TTR — Type-Token Ratio)
|
|
44
|
+
// Use character-level for Chinese (each char is roughly a "token")
|
|
45
|
+
const chars = text.replace(/[\s\n\r,。!?、:;""''()【】《》\d]/g, "");
|
|
46
|
+
const uniqueChars = new Set(chars);
|
|
47
|
+
const vocabularyDiversity = chars.length > 0 ? uniqueChars.size / chars.length : 0;
|
|
48
|
+
// Top sentence opening patterns (first 2 chars)
|
|
49
|
+
const openingCounts = {};
|
|
50
|
+
for (const s of sentences) {
|
|
51
|
+
if (s.length >= 2) {
|
|
52
|
+
const opening = s.slice(0, 2);
|
|
53
|
+
openingCounts[opening] = (openingCounts[opening] ?? 0) + 1;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const topPatterns = Object.entries(openingCounts)
|
|
57
|
+
.sort((a, b) => b[1] - a[1])
|
|
58
|
+
.slice(0, 5)
|
|
59
|
+
.filter(([, count]) => count >= 3)
|
|
60
|
+
.map(([pattern, count]) => `${pattern}...(${count}次)`);
|
|
61
|
+
// Rhetorical features
|
|
62
|
+
const rhetoricalFeatures = [];
|
|
63
|
+
for (const { name, regex } of RHETORICAL_PATTERNS) {
|
|
64
|
+
const matches = text.match(regex);
|
|
65
|
+
if (matches && matches.length >= 2) {
|
|
66
|
+
rhetoricalFeatures.push(`${name}(${matches.length}处)`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
avgSentenceLength: Math.round(avgSentenceLength * 10) / 10,
|
|
71
|
+
sentenceLengthStdDev: Math.round(sentenceLengthStdDev * 10) / 10,
|
|
72
|
+
avgParagraphLength: Math.round(avgParagraphLength),
|
|
73
|
+
paragraphLengthRange: { min: minParagraph, max: maxParagraph },
|
|
74
|
+
vocabularyDiversity: Math.round(vocabularyDiversity * 1000) / 1000,
|
|
75
|
+
topPatterns,
|
|
76
|
+
rhetoricalFeatures,
|
|
77
|
+
sourceName,
|
|
78
|
+
analyzedAt: new Date().toISOString(),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=style-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style-analyzer.js","sourceRoot":"","sources":["../../src/agents/style-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { BookConfig } from "../models/book.js";
|
|
2
2
|
import type { GenreProfile } from "../models/genre-profile.js";
|
|
3
3
|
import type { BookRules } from "../models/book-rules.js";
|
|
4
|
-
export declare function buildWriterSystemPrompt(book: BookConfig, genreProfile: GenreProfile, bookRules: BookRules | null, bookRulesBody: string, genreBody: string, styleGuide: string): string;
|
|
4
|
+
export declare function buildWriterSystemPrompt(book: BookConfig, genreProfile: GenreProfile, bookRules: BookRules | null, bookRulesBody: string, genreBody: string, styleGuide: string, styleFingerprint?: string): string;
|
|
5
5
|
//# sourceMappingURL=writer-prompts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer-prompts.d.ts","sourceRoot":"","sources":["../../src/agents/writer-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAMzD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,UAAU,EAChB,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,GAAG,IAAI,EAC3B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"writer-prompts.d.ts","sourceRoot":"","sources":["../../src/agents/writer-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAMzD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,UAAU,EAChB,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,GAAG,IAAI,EAC3B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,gBAAgB,CAAC,EAAE,MAAM,GACxB,MAAM,CAmBR"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// ---------------------------------------------------------------------------
|
|
2
2
|
// Public API
|
|
3
3
|
// ---------------------------------------------------------------------------
|
|
4
|
-
export function buildWriterSystemPrompt(book, genreProfile, bookRules, bookRulesBody, genreBody, styleGuide) {
|
|
4
|
+
export function buildWriterSystemPrompt(book, genreProfile, bookRules, bookRulesBody, genreBody, styleGuide, styleFingerprint) {
|
|
5
5
|
const sections = [
|
|
6
6
|
buildGenreIntro(book, genreProfile),
|
|
7
7
|
buildCoreRules(book),
|
|
@@ -14,6 +14,7 @@ export function buildWriterSystemPrompt(book, genreProfile, bookRules, bookRules
|
|
|
14
14
|
buildProtagonistRules(bookRules),
|
|
15
15
|
buildBookRulesBody(bookRulesBody),
|
|
16
16
|
buildStyleGuide(styleGuide),
|
|
17
|
+
buildStyleFingerprint(styleFingerprint),
|
|
17
18
|
buildPreWriteChecklist(book, genreProfile),
|
|
18
19
|
buildOutputFormat(book, genreProfile),
|
|
19
20
|
];
|
|
@@ -217,6 +218,18 @@ function buildStyleGuide(styleGuide) {
|
|
|
217
218
|
return `## 文风指南\n\n${styleGuide}`;
|
|
218
219
|
}
|
|
219
220
|
// ---------------------------------------------------------------------------
|
|
221
|
+
// Style fingerprint (Phase 9: C3)
|
|
222
|
+
// ---------------------------------------------------------------------------
|
|
223
|
+
function buildStyleFingerprint(fingerprint) {
|
|
224
|
+
if (!fingerprint)
|
|
225
|
+
return "";
|
|
226
|
+
return `## 文风指纹(模仿目标)
|
|
227
|
+
|
|
228
|
+
以下是从参考文本中提取的写作风格特征。你的输出必须尽量贴合这些特征:
|
|
229
|
+
|
|
230
|
+
${fingerprint}`;
|
|
231
|
+
}
|
|
232
|
+
// ---------------------------------------------------------------------------
|
|
220
233
|
// Pre-write checklist
|
|
221
234
|
// ---------------------------------------------------------------------------
|
|
222
235
|
function buildPreWriteChecklist(book, gp) {
|
|
@@ -284,6 +297,33 @@ ${postSettlement}
|
|
|
284
297
|
(更新后的完整状态卡,Markdown表格格式)
|
|
285
298
|
${updatedLedger}
|
|
286
299
|
=== UPDATED_HOOKS ===
|
|
287
|
-
(更新后的完整伏笔池,Markdown表格格式)
|
|
300
|
+
(更新后的完整伏笔池,Markdown表格格式)
|
|
301
|
+
|
|
302
|
+
=== CHAPTER_SUMMARY ===
|
|
303
|
+
(本章摘要,Markdown表格格式,必须包含以下列)
|
|
304
|
+
| 章节 | 标题 | 出场人物 | 关键事件 | 状态变化 | 伏笔动态 | 情绪基调 | 章节类型 |
|
|
305
|
+
|------|------|----------|----------|----------|----------|----------|----------|
|
|
306
|
+
| N | 本章标题 | 角色1,角色2 | 一句话概括 | 关键变化 | H01埋设/H02推进 | 情绪走向 | ${gp.chapterTypes.length > 0 ? gp.chapterTypes.join("/") : "过渡/冲突/高潮/收束"} |
|
|
307
|
+
|
|
308
|
+
=== UPDATED_SUBPLOTS ===
|
|
309
|
+
(更新后的完整支线进度板,Markdown表格格式)
|
|
310
|
+
| 支线ID | 支线名 | 相关角色 | 起始章 | 最近活跃章 | 状态 | 进度概述 |
|
|
311
|
+
|--------|--------|----------|--------|------------|------|----------|
|
|
312
|
+
|
|
313
|
+
=== UPDATED_EMOTIONAL_ARCS ===
|
|
314
|
+
(更新后的完整情感弧线,Markdown表格格式)
|
|
315
|
+
| 角色 | 章节 | 情绪状态 | 触发事件 | 强度(1-10) | 弧线方向 |
|
|
316
|
+
|------|------|----------|----------|------------|----------|
|
|
317
|
+
|
|
318
|
+
=== UPDATED_CHARACTER_MATRIX ===
|
|
319
|
+
(更新后的角色交互矩阵,分两个子表)
|
|
320
|
+
|
|
321
|
+
### 相遇记录
|
|
322
|
+
| 角色A | 角色B | 首次相遇章 | 最近交互章 | 关系性质 | 关系变化 |
|
|
323
|
+
|-------|-------|------------|------------|----------|----------|
|
|
324
|
+
|
|
325
|
+
### 信息边界
|
|
326
|
+
| 角色 | 已知信息 | 未知信息 | 信息来源章 |
|
|
327
|
+
|------|----------|----------|------------|`;
|
|
288
328
|
}
|
|
289
329
|
//# sourceMappingURL=writer-prompts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer-prompts.js","sourceRoot":"","sources":["../../src/agents/writer-prompts.ts"],"names":[],"mappings":"AAIA,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,UAAU,uBAAuB,CACrC,IAAgB,EAChB,YAA0B,EAC1B,SAA2B,EAC3B,aAAqB,EACrB,SAAiB,EACjB,UAAkB;
|
|
1
|
+
{"version":3,"file":"writer-prompts.js","sourceRoot":"","sources":["../../src/agents/writer-prompts.ts"],"names":[],"mappings":"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"}
|
package/dist/agents/writer.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export interface WriteChapterInput {
|
|
|
5
5
|
readonly bookDir: string;
|
|
6
6
|
readonly chapterNumber: number;
|
|
7
7
|
readonly externalContext?: string;
|
|
8
|
+
readonly wordCountOverride?: number;
|
|
8
9
|
}
|
|
9
10
|
export interface WriteChapterOutput {
|
|
10
11
|
readonly chapterNumber: number;
|
|
@@ -16,6 +17,10 @@ export interface WriteChapterOutput {
|
|
|
16
17
|
readonly updatedState: string;
|
|
17
18
|
readonly updatedLedger: string;
|
|
18
19
|
readonly updatedHooks: string;
|
|
20
|
+
readonly chapterSummary: string;
|
|
21
|
+
readonly updatedSubplots: string;
|
|
22
|
+
readonly updatedEmotionalArcs: string;
|
|
23
|
+
readonly updatedCharacterMatrix: string;
|
|
19
24
|
}
|
|
20
25
|
export declare class WriterAgent extends BaseAgent {
|
|
21
26
|
get name(): string;
|
|
@@ -25,6 +30,10 @@ export declare class WriterAgent extends BaseAgent {
|
|
|
25
30
|
private loadRecentChapters;
|
|
26
31
|
private readFileOrDefault;
|
|
27
32
|
private parseOutput;
|
|
33
|
+
/** Save new truth files (summaries, subplots, emotional arcs, character matrix). */
|
|
34
|
+
saveNewTruthFiles(bookDir: string, output: WriteChapterOutput): Promise<void>;
|
|
35
|
+
private appendChapterSummary;
|
|
36
|
+
private buildStyleFingerprint;
|
|
28
37
|
private sanitizeFilename;
|
|
29
38
|
}
|
|
30
39
|
//# sourceMappingURL=writer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/agents/writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQpD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../src/agents/writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQpD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;CACzC;AAED,qBAAa,WAAY,SAAQ,SAAS;IACxC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAEK,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA8DnE,WAAW,CACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,kBAAkB,EAC1B,eAAe,GAAE,OAAc,GAC9B,OAAO,CAAC,IAAI,CAAC;IA6BhB,OAAO,CAAC,eAAe;YA8DT,kBAAkB;YA2BlB,iBAAiB;IAQ/B,OAAO,CAAC,WAAW;IAkCnB,oFAAoF;IAC9E,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;YA2BrE,oBAAoB;IAqBlC,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,gBAAgB;CAMzB"}
|