@actalk/inkos-core 0.3.1 → 0.3.5
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/__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__/models.test.js +4 -4
- package/dist/__tests__/models.test.js.map +1 -1
- 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/__tests__/writer-parser.test.js +14 -2
- package/dist/__tests__/writer-parser.test.js.map +1 -1
- 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 +8 -0
- package/dist/agents/writer.d.ts.map +1 -1
- package/dist/agents/writer.js +97 -4
- 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/llm/provider.d.ts +6 -0
- package/dist/llm/provider.d.ts.map +1 -1
- package/dist/llm/provider.js +242 -55
- package/dist/llm/provider.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 +193 -5
- package/dist/models/project.d.ts.map +1 -1
- package/dist/models/project.js +36 -1
- 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 +1 -0
- package/dist/pipeline/runner.d.ts.map +1 -1
- package/dist/pipeline/runner.js +57 -4
- 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 +1 -1
package/dist/models/project.d.ts
CHANGED
|
@@ -2,18 +2,30 @@ import { z } from "zod";
|
|
|
2
2
|
export declare const LLMConfigSchema: z.ZodObject<{
|
|
3
3
|
provider: z.ZodEnum<["anthropic", "openai", "custom"]>;
|
|
4
4
|
baseUrl: z.ZodString;
|
|
5
|
-
apiKey: z.ZodString
|
|
5
|
+
apiKey: z.ZodDefault<z.ZodString>;
|
|
6
6
|
model: z.ZodString;
|
|
7
|
+
temperature: z.ZodDefault<z.ZodNumber>;
|
|
8
|
+
maxTokens: z.ZodDefault<z.ZodNumber>;
|
|
9
|
+
thinkingBudget: z.ZodDefault<z.ZodNumber>;
|
|
10
|
+
apiFormat: z.ZodDefault<z.ZodEnum<["chat", "responses"]>>;
|
|
7
11
|
}, "strip", z.ZodTypeAny, {
|
|
8
12
|
provider: "custom" | "anthropic" | "openai";
|
|
9
13
|
baseUrl: string;
|
|
10
14
|
apiKey: string;
|
|
11
15
|
model: string;
|
|
16
|
+
temperature: number;
|
|
17
|
+
maxTokens: number;
|
|
18
|
+
thinkingBudget: number;
|
|
19
|
+
apiFormat: "chat" | "responses";
|
|
12
20
|
}, {
|
|
13
21
|
provider: "custom" | "anthropic" | "openai";
|
|
14
22
|
baseUrl: string;
|
|
15
|
-
apiKey: string;
|
|
16
23
|
model: string;
|
|
24
|
+
apiKey?: string | undefined;
|
|
25
|
+
temperature?: number | undefined;
|
|
26
|
+
maxTokens?: number | undefined;
|
|
27
|
+
thinkingBudget?: number | undefined;
|
|
28
|
+
apiFormat?: "chat" | "responses" | undefined;
|
|
17
29
|
}>;
|
|
18
30
|
export type LLMConfig = z.infer<typeof LLMConfigSchema>;
|
|
19
31
|
export declare const NotifyChannelSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
|
|
@@ -46,26 +58,93 @@ export declare const NotifyChannelSchema: z.ZodDiscriminatedUnion<"type", [z.Zod
|
|
|
46
58
|
}, {
|
|
47
59
|
type: "feishu";
|
|
48
60
|
webhookUrl: string;
|
|
61
|
+
}>, z.ZodObject<{
|
|
62
|
+
type: z.ZodLiteral<"webhook">;
|
|
63
|
+
url: z.ZodString;
|
|
64
|
+
secret: z.ZodOptional<z.ZodString>;
|
|
65
|
+
events: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
66
|
+
}, "strip", z.ZodTypeAny, {
|
|
67
|
+
type: "webhook";
|
|
68
|
+
url: string;
|
|
69
|
+
events: string[];
|
|
70
|
+
secret?: string | undefined;
|
|
71
|
+
}, {
|
|
72
|
+
type: "webhook";
|
|
73
|
+
url: string;
|
|
74
|
+
secret?: string | undefined;
|
|
75
|
+
events?: string[] | undefined;
|
|
49
76
|
}>]>;
|
|
50
77
|
export type NotifyChannel = z.infer<typeof NotifyChannelSchema>;
|
|
78
|
+
export declare const DetectionConfigSchema: z.ZodObject<{
|
|
79
|
+
provider: z.ZodDefault<z.ZodEnum<["gptzero", "originality", "custom"]>>;
|
|
80
|
+
apiUrl: z.ZodString;
|
|
81
|
+
apiKeyEnv: z.ZodString;
|
|
82
|
+
threshold: z.ZodDefault<z.ZodNumber>;
|
|
83
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
84
|
+
autoRewrite: z.ZodDefault<z.ZodBoolean>;
|
|
85
|
+
maxRetries: z.ZodDefault<z.ZodNumber>;
|
|
86
|
+
}, "strip", z.ZodTypeAny, {
|
|
87
|
+
provider: "custom" | "gptzero" | "originality";
|
|
88
|
+
apiUrl: string;
|
|
89
|
+
apiKeyEnv: string;
|
|
90
|
+
threshold: number;
|
|
91
|
+
enabled: boolean;
|
|
92
|
+
autoRewrite: boolean;
|
|
93
|
+
maxRetries: number;
|
|
94
|
+
}, {
|
|
95
|
+
apiUrl: string;
|
|
96
|
+
apiKeyEnv: string;
|
|
97
|
+
provider?: "custom" | "gptzero" | "originality" | undefined;
|
|
98
|
+
threshold?: number | undefined;
|
|
99
|
+
enabled?: boolean | undefined;
|
|
100
|
+
autoRewrite?: boolean | undefined;
|
|
101
|
+
maxRetries?: number | undefined;
|
|
102
|
+
}>;
|
|
103
|
+
export type DetectionConfig = z.infer<typeof DetectionConfigSchema>;
|
|
104
|
+
export declare const QualityGatesSchema: z.ZodObject<{
|
|
105
|
+
maxAuditRetries: z.ZodDefault<z.ZodNumber>;
|
|
106
|
+
pauseAfterConsecutiveFailures: z.ZodDefault<z.ZodNumber>;
|
|
107
|
+
retryTemperatureStep: z.ZodDefault<z.ZodNumber>;
|
|
108
|
+
}, "strip", z.ZodTypeAny, {
|
|
109
|
+
maxAuditRetries: number;
|
|
110
|
+
pauseAfterConsecutiveFailures: number;
|
|
111
|
+
retryTemperatureStep: number;
|
|
112
|
+
}, {
|
|
113
|
+
maxAuditRetries?: number | undefined;
|
|
114
|
+
pauseAfterConsecutiveFailures?: number | undefined;
|
|
115
|
+
retryTemperatureStep?: number | undefined;
|
|
116
|
+
}>;
|
|
117
|
+
export type QualityGates = z.infer<typeof QualityGatesSchema>;
|
|
51
118
|
export declare const ProjectConfigSchema: z.ZodObject<{
|
|
52
119
|
name: z.ZodString;
|
|
53
120
|
version: z.ZodLiteral<"0.1.0">;
|
|
54
121
|
llm: z.ZodObject<{
|
|
55
122
|
provider: z.ZodEnum<["anthropic", "openai", "custom"]>;
|
|
56
123
|
baseUrl: z.ZodString;
|
|
57
|
-
apiKey: z.ZodString
|
|
124
|
+
apiKey: z.ZodDefault<z.ZodString>;
|
|
58
125
|
model: z.ZodString;
|
|
126
|
+
temperature: z.ZodDefault<z.ZodNumber>;
|
|
127
|
+
maxTokens: z.ZodDefault<z.ZodNumber>;
|
|
128
|
+
thinkingBudget: z.ZodDefault<z.ZodNumber>;
|
|
129
|
+
apiFormat: z.ZodDefault<z.ZodEnum<["chat", "responses"]>>;
|
|
59
130
|
}, "strip", z.ZodTypeAny, {
|
|
60
131
|
provider: "custom" | "anthropic" | "openai";
|
|
61
132
|
baseUrl: string;
|
|
62
133
|
apiKey: string;
|
|
63
134
|
model: string;
|
|
135
|
+
temperature: number;
|
|
136
|
+
maxTokens: number;
|
|
137
|
+
thinkingBudget: number;
|
|
138
|
+
apiFormat: "chat" | "responses";
|
|
64
139
|
}, {
|
|
65
140
|
provider: "custom" | "anthropic" | "openai";
|
|
66
141
|
baseUrl: string;
|
|
67
|
-
apiKey: string;
|
|
68
142
|
model: string;
|
|
143
|
+
apiKey?: string | undefined;
|
|
144
|
+
temperature?: number | undefined;
|
|
145
|
+
maxTokens?: number | undefined;
|
|
146
|
+
thinkingBudget?: number | undefined;
|
|
147
|
+
apiFormat?: "chat" | "responses" | undefined;
|
|
69
148
|
}>;
|
|
70
149
|
notify: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
|
|
71
150
|
type: z.ZodLiteral<"telegram">;
|
|
@@ -97,7 +176,47 @@ export declare const ProjectConfigSchema: z.ZodObject<{
|
|
|
97
176
|
}, {
|
|
98
177
|
type: "feishu";
|
|
99
178
|
webhookUrl: string;
|
|
179
|
+
}>, z.ZodObject<{
|
|
180
|
+
type: z.ZodLiteral<"webhook">;
|
|
181
|
+
url: z.ZodString;
|
|
182
|
+
secret: z.ZodOptional<z.ZodString>;
|
|
183
|
+
events: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
184
|
+
}, "strip", z.ZodTypeAny, {
|
|
185
|
+
type: "webhook";
|
|
186
|
+
url: string;
|
|
187
|
+
events: string[];
|
|
188
|
+
secret?: string | undefined;
|
|
189
|
+
}, {
|
|
190
|
+
type: "webhook";
|
|
191
|
+
url: string;
|
|
192
|
+
secret?: string | undefined;
|
|
193
|
+
events?: string[] | undefined;
|
|
100
194
|
}>]>, "many">>;
|
|
195
|
+
detection: z.ZodOptional<z.ZodObject<{
|
|
196
|
+
provider: z.ZodDefault<z.ZodEnum<["gptzero", "originality", "custom"]>>;
|
|
197
|
+
apiUrl: z.ZodString;
|
|
198
|
+
apiKeyEnv: z.ZodString;
|
|
199
|
+
threshold: z.ZodDefault<z.ZodNumber>;
|
|
200
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
201
|
+
autoRewrite: z.ZodDefault<z.ZodBoolean>;
|
|
202
|
+
maxRetries: z.ZodDefault<z.ZodNumber>;
|
|
203
|
+
}, "strip", z.ZodTypeAny, {
|
|
204
|
+
provider: "custom" | "gptzero" | "originality";
|
|
205
|
+
apiUrl: string;
|
|
206
|
+
apiKeyEnv: string;
|
|
207
|
+
threshold: number;
|
|
208
|
+
enabled: boolean;
|
|
209
|
+
autoRewrite: boolean;
|
|
210
|
+
maxRetries: number;
|
|
211
|
+
}, {
|
|
212
|
+
apiUrl: string;
|
|
213
|
+
apiKeyEnv: string;
|
|
214
|
+
provider?: "custom" | "gptzero" | "originality" | undefined;
|
|
215
|
+
threshold?: number | undefined;
|
|
216
|
+
enabled?: boolean | undefined;
|
|
217
|
+
autoRewrite?: boolean | undefined;
|
|
218
|
+
maxRetries?: number | undefined;
|
|
219
|
+
}>>;
|
|
101
220
|
daemon: z.ZodDefault<z.ZodObject<{
|
|
102
221
|
schedule: z.ZodObject<{
|
|
103
222
|
radarCron: z.ZodDefault<z.ZodString>;
|
|
@@ -113,6 +232,19 @@ export declare const ProjectConfigSchema: z.ZodObject<{
|
|
|
113
232
|
auditCron?: string | undefined;
|
|
114
233
|
}>;
|
|
115
234
|
maxConcurrentBooks: z.ZodDefault<z.ZodNumber>;
|
|
235
|
+
qualityGates: z.ZodDefault<z.ZodObject<{
|
|
236
|
+
maxAuditRetries: z.ZodDefault<z.ZodNumber>;
|
|
237
|
+
pauseAfterConsecutiveFailures: z.ZodDefault<z.ZodNumber>;
|
|
238
|
+
retryTemperatureStep: z.ZodDefault<z.ZodNumber>;
|
|
239
|
+
}, "strip", z.ZodTypeAny, {
|
|
240
|
+
maxAuditRetries: number;
|
|
241
|
+
pauseAfterConsecutiveFailures: number;
|
|
242
|
+
retryTemperatureStep: number;
|
|
243
|
+
}, {
|
|
244
|
+
maxAuditRetries?: number | undefined;
|
|
245
|
+
pauseAfterConsecutiveFailures?: number | undefined;
|
|
246
|
+
retryTemperatureStep?: number | undefined;
|
|
247
|
+
}>>;
|
|
116
248
|
}, "strip", z.ZodTypeAny, {
|
|
117
249
|
schedule: {
|
|
118
250
|
radarCron: string;
|
|
@@ -120,6 +252,11 @@ export declare const ProjectConfigSchema: z.ZodObject<{
|
|
|
120
252
|
auditCron: string;
|
|
121
253
|
};
|
|
122
254
|
maxConcurrentBooks: number;
|
|
255
|
+
qualityGates: {
|
|
256
|
+
maxAuditRetries: number;
|
|
257
|
+
pauseAfterConsecutiveFailures: number;
|
|
258
|
+
retryTemperatureStep: number;
|
|
259
|
+
};
|
|
123
260
|
}, {
|
|
124
261
|
schedule: {
|
|
125
262
|
radarCron?: string | undefined;
|
|
@@ -127,6 +264,11 @@ export declare const ProjectConfigSchema: z.ZodObject<{
|
|
|
127
264
|
auditCron?: string | undefined;
|
|
128
265
|
};
|
|
129
266
|
maxConcurrentBooks?: number | undefined;
|
|
267
|
+
qualityGates?: {
|
|
268
|
+
maxAuditRetries?: number | undefined;
|
|
269
|
+
pauseAfterConsecutiveFailures?: number | undefined;
|
|
270
|
+
retryTemperatureStep?: number | undefined;
|
|
271
|
+
} | undefined;
|
|
130
272
|
}>>;
|
|
131
273
|
}, "strip", z.ZodTypeAny, {
|
|
132
274
|
name: string;
|
|
@@ -136,6 +278,10 @@ export declare const ProjectConfigSchema: z.ZodObject<{
|
|
|
136
278
|
baseUrl: string;
|
|
137
279
|
apiKey: string;
|
|
138
280
|
model: string;
|
|
281
|
+
temperature: number;
|
|
282
|
+
maxTokens: number;
|
|
283
|
+
thinkingBudget: number;
|
|
284
|
+
apiFormat: "chat" | "responses";
|
|
139
285
|
};
|
|
140
286
|
notify: ({
|
|
141
287
|
type: "telegram";
|
|
@@ -147,6 +293,11 @@ export declare const ProjectConfigSchema: z.ZodObject<{
|
|
|
147
293
|
} | {
|
|
148
294
|
type: "feishu";
|
|
149
295
|
webhookUrl: string;
|
|
296
|
+
} | {
|
|
297
|
+
type: "webhook";
|
|
298
|
+
url: string;
|
|
299
|
+
events: string[];
|
|
300
|
+
secret?: string | undefined;
|
|
150
301
|
})[];
|
|
151
302
|
daemon: {
|
|
152
303
|
schedule: {
|
|
@@ -155,15 +306,33 @@ export declare const ProjectConfigSchema: z.ZodObject<{
|
|
|
155
306
|
auditCron: string;
|
|
156
307
|
};
|
|
157
308
|
maxConcurrentBooks: number;
|
|
309
|
+
qualityGates: {
|
|
310
|
+
maxAuditRetries: number;
|
|
311
|
+
pauseAfterConsecutiveFailures: number;
|
|
312
|
+
retryTemperatureStep: number;
|
|
313
|
+
};
|
|
158
314
|
};
|
|
315
|
+
detection?: {
|
|
316
|
+
provider: "custom" | "gptzero" | "originality";
|
|
317
|
+
apiUrl: string;
|
|
318
|
+
apiKeyEnv: string;
|
|
319
|
+
threshold: number;
|
|
320
|
+
enabled: boolean;
|
|
321
|
+
autoRewrite: boolean;
|
|
322
|
+
maxRetries: number;
|
|
323
|
+
} | undefined;
|
|
159
324
|
}, {
|
|
160
325
|
name: string;
|
|
161
326
|
version: "0.1.0";
|
|
162
327
|
llm: {
|
|
163
328
|
provider: "custom" | "anthropic" | "openai";
|
|
164
329
|
baseUrl: string;
|
|
165
|
-
apiKey: string;
|
|
166
330
|
model: string;
|
|
331
|
+
apiKey?: string | undefined;
|
|
332
|
+
temperature?: number | undefined;
|
|
333
|
+
maxTokens?: number | undefined;
|
|
334
|
+
thinkingBudget?: number | undefined;
|
|
335
|
+
apiFormat?: "chat" | "responses" | undefined;
|
|
167
336
|
};
|
|
168
337
|
notify?: ({
|
|
169
338
|
type: "telegram";
|
|
@@ -175,7 +344,21 @@ export declare const ProjectConfigSchema: z.ZodObject<{
|
|
|
175
344
|
} | {
|
|
176
345
|
type: "feishu";
|
|
177
346
|
webhookUrl: string;
|
|
347
|
+
} | {
|
|
348
|
+
type: "webhook";
|
|
349
|
+
url: string;
|
|
350
|
+
secret?: string | undefined;
|
|
351
|
+
events?: string[] | undefined;
|
|
178
352
|
})[] | undefined;
|
|
353
|
+
detection?: {
|
|
354
|
+
apiUrl: string;
|
|
355
|
+
apiKeyEnv: string;
|
|
356
|
+
provider?: "custom" | "gptzero" | "originality" | undefined;
|
|
357
|
+
threshold?: number | undefined;
|
|
358
|
+
enabled?: boolean | undefined;
|
|
359
|
+
autoRewrite?: boolean | undefined;
|
|
360
|
+
maxRetries?: number | undefined;
|
|
361
|
+
} | undefined;
|
|
179
362
|
daemon?: {
|
|
180
363
|
schedule: {
|
|
181
364
|
radarCron?: string | undefined;
|
|
@@ -183,6 +366,11 @@ export declare const ProjectConfigSchema: z.ZodObject<{
|
|
|
183
366
|
auditCron?: string | undefined;
|
|
184
367
|
};
|
|
185
368
|
maxConcurrentBooks?: number | undefined;
|
|
369
|
+
qualityGates?: {
|
|
370
|
+
maxAuditRetries?: number | undefined;
|
|
371
|
+
pauseAfterConsecutiveFailures?: number | undefined;
|
|
372
|
+
retryTemperatureStep?: number | undefined;
|
|
373
|
+
} | undefined;
|
|
186
374
|
} | undefined;
|
|
187
375
|
}>;
|
|
188
376
|
export type ProjectConfig = z.infer<typeof ProjectConfigSchema>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/models/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/models/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAoB9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;EAQhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAI7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+B9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
|
package/dist/models/project.js
CHANGED
|
@@ -2,8 +2,12 @@ import { z } from "zod";
|
|
|
2
2
|
export const LLMConfigSchema = z.object({
|
|
3
3
|
provider: z.enum(["anthropic", "openai", "custom"]),
|
|
4
4
|
baseUrl: z.string().url(),
|
|
5
|
-
apiKey: z.string().
|
|
5
|
+
apiKey: z.string().default(""),
|
|
6
6
|
model: z.string().min(1),
|
|
7
|
+
temperature: z.number().min(0).max(2).default(0.7),
|
|
8
|
+
maxTokens: z.number().int().min(1).default(8192),
|
|
9
|
+
thinkingBudget: z.number().int().min(0).default(0),
|
|
10
|
+
apiFormat: z.enum(["chat", "responses"]).default("chat"),
|
|
7
11
|
});
|
|
8
12
|
export const NotifyChannelSchema = z.discriminatedUnion("type", [
|
|
9
13
|
z.object({
|
|
@@ -19,12 +23,33 @@ export const NotifyChannelSchema = z.discriminatedUnion("type", [
|
|
|
19
23
|
type: z.literal("feishu"),
|
|
20
24
|
webhookUrl: z.string().url(),
|
|
21
25
|
}),
|
|
26
|
+
z.object({
|
|
27
|
+
type: z.literal("webhook"),
|
|
28
|
+
url: z.string().url(),
|
|
29
|
+
secret: z.string().optional(),
|
|
30
|
+
events: z.array(z.string()).default([]),
|
|
31
|
+
}),
|
|
22
32
|
]);
|
|
33
|
+
export const DetectionConfigSchema = z.object({
|
|
34
|
+
provider: z.enum(["gptzero", "originality", "custom"]).default("custom"),
|
|
35
|
+
apiUrl: z.string().url(),
|
|
36
|
+
apiKeyEnv: z.string().min(1),
|
|
37
|
+
threshold: z.number().min(0).max(1).default(0.5),
|
|
38
|
+
enabled: z.boolean().default(false),
|
|
39
|
+
autoRewrite: z.boolean().default(false),
|
|
40
|
+
maxRetries: z.number().int().min(1).max(10).default(3),
|
|
41
|
+
});
|
|
42
|
+
export const QualityGatesSchema = z.object({
|
|
43
|
+
maxAuditRetries: z.number().int().min(0).max(10).default(2),
|
|
44
|
+
pauseAfterConsecutiveFailures: z.number().int().min(1).default(3),
|
|
45
|
+
retryTemperatureStep: z.number().min(0).max(0.5).default(0.1),
|
|
46
|
+
});
|
|
23
47
|
export const ProjectConfigSchema = z.object({
|
|
24
48
|
name: z.string().min(1),
|
|
25
49
|
version: z.literal("0.1.0"),
|
|
26
50
|
llm: LLMConfigSchema,
|
|
27
51
|
notify: z.array(NotifyChannelSchema).default([]),
|
|
52
|
+
detection: DetectionConfigSchema.optional(),
|
|
28
53
|
daemon: z.object({
|
|
29
54
|
schedule: z.object({
|
|
30
55
|
radarCron: z.string().default("0 9 * * *"),
|
|
@@ -32,6 +57,11 @@ export const ProjectConfigSchema = z.object({
|
|
|
32
57
|
auditCron: z.string().default("0 17 * * *"),
|
|
33
58
|
}),
|
|
34
59
|
maxConcurrentBooks: z.number().int().min(1).default(3),
|
|
60
|
+
qualityGates: QualityGatesSchema.default({
|
|
61
|
+
maxAuditRetries: 2,
|
|
62
|
+
pauseAfterConsecutiveFailures: 3,
|
|
63
|
+
retryTemperatureStep: 0.1,
|
|
64
|
+
}),
|
|
35
65
|
}).default({
|
|
36
66
|
schedule: {
|
|
37
67
|
radarCron: "0 9 * * *",
|
|
@@ -39,6 +69,11 @@ export const ProjectConfigSchema = z.object({
|
|
|
39
69
|
auditCron: "0 17 * * *",
|
|
40
70
|
},
|
|
41
71
|
maxConcurrentBooks: 3,
|
|
72
|
+
qualityGates: {
|
|
73
|
+
maxAuditRetries: 2,
|
|
74
|
+
pauseAfterConsecutiveFailures: 3,
|
|
75
|
+
retryTemperatureStep: 0.1,
|
|
76
|
+
},
|
|
42
77
|
}),
|
|
43
78
|
});
|
|
44
79
|
//# sourceMappingURL=project.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/models/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACnD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACzB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/models/project.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** Style fingerprint profile extracted from reference text. */
|
|
2
|
+
export interface StyleProfile {
|
|
3
|
+
readonly avgSentenceLength: number;
|
|
4
|
+
readonly sentenceLengthStdDev: number;
|
|
5
|
+
readonly avgParagraphLength: number;
|
|
6
|
+
readonly paragraphLengthRange: {
|
|
7
|
+
readonly min: number;
|
|
8
|
+
readonly max: number;
|
|
9
|
+
};
|
|
10
|
+
readonly vocabularyDiversity: number;
|
|
11
|
+
readonly topPatterns: ReadonlyArray<string>;
|
|
12
|
+
readonly rhetoricalFeatures: ReadonlyArray<string>;
|
|
13
|
+
readonly sourceName?: string;
|
|
14
|
+
readonly analyzedAt?: string;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=style-profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style-profile.d.ts","sourceRoot":"","sources":["../../src/models/style-profile.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,oBAAoB,EAAE;QAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,kBAAkB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style-profile.js","sourceRoot":"","sources":["../../src/models/style-profile.ts"],"names":[],"mappings":""}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { NotifyChannel } from "../models/project.js";
|
|
2
|
+
import { type WebhookPayload } from "./webhook.js";
|
|
2
3
|
export interface NotifyMessage {
|
|
3
4
|
readonly title: string;
|
|
4
5
|
readonly body: string;
|
|
5
6
|
}
|
|
6
7
|
export declare function dispatchNotification(channels: ReadonlyArray<NotifyChannel>, message: NotifyMessage): Promise<void>;
|
|
8
|
+
/** Dispatch a structured webhook event to all webhook channels. */
|
|
9
|
+
export declare function dispatchWebhookEvent(channels: ReadonlyArray<NotifyChannel>, payload: WebhookPayload): Promise<void>;
|
|
7
10
|
//# sourceMappingURL=dispatcher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/notify/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/notify/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI1D,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,EACtC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAgDf;AAED,mEAAmE;AACnE,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,EACtC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CAiBf"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { sendTelegram } from "./telegram.js";
|
|
2
2
|
import { sendFeishu } from "./feishu.js";
|
|
3
3
|
import { sendWechatWork } from "./wechat-work.js";
|
|
4
|
+
import { sendWebhook } from "./webhook.js";
|
|
4
5
|
export async function dispatchNotification(channels, message) {
|
|
5
6
|
const fullText = `**${message.title}**\n\n${message.body}`;
|
|
6
7
|
const tasks = channels.map(async (channel) => {
|
|
@@ -15,6 +16,16 @@ export async function dispatchNotification(channels, message) {
|
|
|
15
16
|
case "wechat-work":
|
|
16
17
|
await sendWechatWork({ webhookUrl: channel.webhookUrl }, fullText);
|
|
17
18
|
break;
|
|
19
|
+
case "webhook":
|
|
20
|
+
// Webhook channels are handled by dispatchWebhookEvent for structured events.
|
|
21
|
+
// For generic text notifications, send as a pipeline-complete event.
|
|
22
|
+
await sendWebhook({ url: channel.url, secret: channel.secret, events: channel.events }, {
|
|
23
|
+
event: "pipeline-complete",
|
|
24
|
+
bookId: "",
|
|
25
|
+
timestamp: new Date().toISOString(),
|
|
26
|
+
data: { title: message.title, body: message.body },
|
|
27
|
+
});
|
|
28
|
+
break;
|
|
18
29
|
}
|
|
19
30
|
}
|
|
20
31
|
catch (e) {
|
|
@@ -24,4 +35,21 @@ export async function dispatchNotification(channels, message) {
|
|
|
24
35
|
});
|
|
25
36
|
await Promise.all(tasks);
|
|
26
37
|
}
|
|
38
|
+
/** Dispatch a structured webhook event to all webhook channels. */
|
|
39
|
+
export async function dispatchWebhookEvent(channels, payload) {
|
|
40
|
+
const webhookChannels = channels.filter((ch) => ch.type === "webhook");
|
|
41
|
+
if (webhookChannels.length === 0)
|
|
42
|
+
return;
|
|
43
|
+
const tasks = webhookChannels.map(async (channel) => {
|
|
44
|
+
if (channel.type !== "webhook")
|
|
45
|
+
return;
|
|
46
|
+
try {
|
|
47
|
+
await sendWebhook({ url: channel.url, secret: channel.secret, events: channel.events }, payload);
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
process.stderr.write(`[webhook] ${channel.url} failed: ${e}\n`);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
await Promise.all(tasks);
|
|
54
|
+
}
|
|
27
55
|
//# sourceMappingURL=dispatcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/notify/dispatcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/notify/dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface WebhookConfig {
|
|
2
|
+
readonly url: string;
|
|
3
|
+
readonly secret?: string;
|
|
4
|
+
readonly events?: ReadonlyArray<string>;
|
|
5
|
+
}
|
|
6
|
+
export type WebhookEvent = "chapter-complete" | "audit-passed" | "audit-failed" | "revision-complete" | "pipeline-complete" | "pipeline-error";
|
|
7
|
+
export interface WebhookPayload {
|
|
8
|
+
readonly event: WebhookEvent;
|
|
9
|
+
readonly bookId: string;
|
|
10
|
+
readonly chapterNumber?: number;
|
|
11
|
+
readonly timestamp: string;
|
|
12
|
+
readonly data?: Record<string, unknown>;
|
|
13
|
+
}
|
|
14
|
+
export declare function sendWebhook(config: WebhookConfig, payload: WebhookPayload): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=webhook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/notify/webhook.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACzC;AAED,MAAM,MAAM,YAAY,GACpB,kBAAkB,GAClB,cAAc,GACd,cAAc,GACd,mBAAmB,GACnB,mBAAmB,GACnB,gBAAgB,CAAC;AAErB,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { createHmac } from "node:crypto";
|
|
2
|
+
export async function sendWebhook(config, payload) {
|
|
3
|
+
// Filter by subscribed events
|
|
4
|
+
if (config.events && config.events.length > 0 && !config.events.includes(payload.event)) {
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
const body = JSON.stringify(payload);
|
|
8
|
+
const headers = {
|
|
9
|
+
"Content-Type": "application/json",
|
|
10
|
+
};
|
|
11
|
+
// HMAC-SHA256 signature if secret is configured
|
|
12
|
+
if (config.secret) {
|
|
13
|
+
const signature = createHmac("sha256", config.secret)
|
|
14
|
+
.update(body)
|
|
15
|
+
.digest("hex");
|
|
16
|
+
headers["X-InkOS-Signature"] = `sha256=${signature}`;
|
|
17
|
+
}
|
|
18
|
+
const response = await fetch(config.url, {
|
|
19
|
+
method: "POST",
|
|
20
|
+
headers,
|
|
21
|
+
body,
|
|
22
|
+
});
|
|
23
|
+
if (!response.ok) {
|
|
24
|
+
const responseBody = await response.text();
|
|
25
|
+
throw new Error(`Webhook POST to ${config.url} failed: ${response.status} ${responseBody}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=webhook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/notify/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAwBzC,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAqB,EACrB,OAAuB;IAEvB,8BAA8B;IAC9B,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxF,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IAEF,gDAAgD;IAChD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;aAClD,MAAM,CAAC,IAAI,CAAC;aACZ,MAAM,CAAC,KAAK,CAAC,CAAC;QACjB,OAAO,CAAC,mBAAmB,CAAC,GAAG,UAAU,SAAS,EAAE,CAAC;IACvD,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE;QACvC,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI;KACL,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,CAAC,GAAG,YAAY,QAAQ,CAAC,MAAM,IAAI,YAAY,EAAE,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detection pipeline runner — handles detection, auto-rewrite loop, and history tracking.
|
|
3
|
+
* Extracted from runner.ts to keep runner under 800 lines.
|
|
4
|
+
*/
|
|
5
|
+
import type { DetectionConfig } from "../models/project.js";
|
|
6
|
+
import type { DetectionHistoryEntry } from "../models/detection.js";
|
|
7
|
+
import type { AgentContext } from "../agents/base.js";
|
|
8
|
+
import { type DetectionResult } from "../agents/detector.js";
|
|
9
|
+
export interface DetectChapterResult {
|
|
10
|
+
readonly chapterNumber: number;
|
|
11
|
+
readonly detection: DetectionResult;
|
|
12
|
+
readonly passed: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface DetectAndRewriteResult {
|
|
15
|
+
readonly chapterNumber: number;
|
|
16
|
+
readonly originalScore: number;
|
|
17
|
+
readonly finalScore: number;
|
|
18
|
+
readonly attempts: number;
|
|
19
|
+
readonly passed: boolean;
|
|
20
|
+
readonly finalContent: string;
|
|
21
|
+
}
|
|
22
|
+
/** Run detection on a single chapter's content. */
|
|
23
|
+
export declare function detectChapter(config: DetectionConfig, content: string, chapterNumber: number): Promise<DetectChapterResult>;
|
|
24
|
+
/**
|
|
25
|
+
* Detect-and-rewrite loop: detect → revise in anti-detect mode → re-detect,
|
|
26
|
+
* until score passes threshold or max retries reached.
|
|
27
|
+
*/
|
|
28
|
+
export declare function detectAndRewrite(config: DetectionConfig, ctx: AgentContext, bookDir: string, content: string, chapterNumber: number, genre?: string): Promise<DetectAndRewriteResult>;
|
|
29
|
+
/** Load detection history from disk. */
|
|
30
|
+
export declare function loadDetectionHistory(bookDir: string): Promise<ReadonlyArray<DetectionHistoryEntry>>;
|
|
31
|
+
//# sourceMappingURL=detection-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detection-runner.d.ts","sourceRoot":"","sources":["../../src/pipeline/detection-runner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAK9E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,mDAAmD;AACnD,wBAAsB,aAAa,CACjC,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,mBAAmB,CAAC,CAO9B;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,YAAY,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,sBAAsB,CAAC,CA2EjC;AAuBD,wCAAwC;AACxC,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAQ/C"}
|