@proofhound/optimization-strategy 0.1.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.
Files changed (90) hide show
  1. package/LICENSE +190 -0
  2. package/dist/error-pattern-analysis/analysis-types.d.ts +45 -0
  3. package/dist/error-pattern-analysis/analysis-types.d.ts.map +1 -0
  4. package/dist/error-pattern-analysis/analysis-types.js +3 -0
  5. package/dist/error-pattern-analysis/analysis-types.js.map +1 -0
  6. package/dist/error-pattern-analysis/analyze.d.ts +81 -0
  7. package/dist/error-pattern-analysis/analyze.d.ts.map +1 -0
  8. package/dist/error-pattern-analysis/analyze.js +423 -0
  9. package/dist/error-pattern-analysis/analyze.js.map +1 -0
  10. package/dist/error-pattern-analysis/config.schema.d.ts +16 -0
  11. package/dist/error-pattern-analysis/config.schema.d.ts.map +1 -0
  12. package/dist/error-pattern-analysis/config.schema.js +26 -0
  13. package/dist/error-pattern-analysis/config.schema.js.map +1 -0
  14. package/dist/error-pattern-analysis/confusion-pairs.d.ts +37 -0
  15. package/dist/error-pattern-analysis/confusion-pairs.d.ts.map +1 -0
  16. package/dist/error-pattern-analysis/confusion-pairs.js +109 -0
  17. package/dist/error-pattern-analysis/confusion-pairs.js.map +1 -0
  18. package/dist/error-pattern-analysis/generate-initial.d.ts +36 -0
  19. package/dist/error-pattern-analysis/generate-initial.d.ts.map +1 -0
  20. package/dist/error-pattern-analysis/generate-initial.js +261 -0
  21. package/dist/error-pattern-analysis/generate-initial.js.map +1 -0
  22. package/dist/error-pattern-analysis/generate.d.ts +57 -0
  23. package/dist/error-pattern-analysis/generate.d.ts.map +1 -0
  24. package/dist/error-pattern-analysis/generate.js +369 -0
  25. package/dist/error-pattern-analysis/generate.js.map +1 -0
  26. package/dist/error-pattern-analysis/index.d.ts +8 -0
  27. package/dist/error-pattern-analysis/index.d.ts.map +1 -0
  28. package/dist/error-pattern-analysis/index.js +29 -0
  29. package/dist/error-pattern-analysis/index.js.map +1 -0
  30. package/dist/error-pattern-analysis/parse.d.ts +92 -0
  31. package/dist/error-pattern-analysis/parse.d.ts.map +1 -0
  32. package/dist/error-pattern-analysis/parse.js +456 -0
  33. package/dist/error-pattern-analysis/parse.js.map +1 -0
  34. package/dist/error-pattern-analysis/prompts/analyze-confusion.system.en-US.md +50 -0
  35. package/dist/error-pattern-analysis/prompts/analyze-confusion.system.md +61 -0
  36. package/dist/error-pattern-analysis/prompts/analyze-regression.system.en-US.md +50 -0
  37. package/dist/error-pattern-analysis/prompts/analyze-regression.system.md +61 -0
  38. package/dist/error-pattern-analysis/prompts/generate-initial.system.en-US.md +43 -0
  39. package/dist/error-pattern-analysis/prompts/generate-initial.system.md +49 -0
  40. package/dist/error-pattern-analysis/prompts/generate.system.en-US.md +53 -0
  41. package/dist/error-pattern-analysis/prompts/generate.system.md +68 -0
  42. package/dist/error-pattern-analysis/prompts/loader.d.ts +46 -0
  43. package/dist/error-pattern-analysis/prompts/loader.d.ts.map +1 -0
  44. package/dist/error-pattern-analysis/prompts/loader.js +109 -0
  45. package/dist/error-pattern-analysis/prompts/loader.js.map +1 -0
  46. package/dist/error-pattern-analysis/prompts/optimization-tips.en-US.md +25 -0
  47. package/dist/error-pattern-analysis/prompts/optimization-tips.md +38 -0
  48. package/dist/error-pattern-analysis/prompts/summarize.system.en-US.md +48 -0
  49. package/dist/error-pattern-analysis/prompts/summarize.system.md +69 -0
  50. package/dist/error-pattern-analysis/prompts.d.ts +79 -0
  51. package/dist/error-pattern-analysis/prompts.d.ts.map +1 -0
  52. package/dist/error-pattern-analysis/prompts.js +659 -0
  53. package/dist/error-pattern-analysis/prompts.js.map +1 -0
  54. package/dist/error-pattern-analysis/token-budget.d.ts +20 -0
  55. package/dist/error-pattern-analysis/token-budget.d.ts.map +1 -0
  56. package/dist/error-pattern-analysis/token-budget.js +88 -0
  57. package/dist/error-pattern-analysis/token-budget.js.map +1 -0
  58. package/dist/index.d.ts +9 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +27 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/loop/best.d.ts +3 -0
  63. package/dist/loop/best.d.ts.map +1 -0
  64. package/dist/loop/best.js +43 -0
  65. package/dist/loop/best.js.map +1 -0
  66. package/dist/loop/goals.d.ts +6 -0
  67. package/dist/loop/goals.d.ts.map +1 -0
  68. package/dist/loop/goals.js +38 -0
  69. package/dist/loop/goals.js.map +1 -0
  70. package/dist/loop/round-outcome.d.ts +14 -0
  71. package/dist/loop/round-outcome.d.ts.map +1 -0
  72. package/dist/loop/round-outcome.js +18 -0
  73. package/dist/loop/round-outcome.js.map +1 -0
  74. package/dist/loop/run-iteration-loop.d.ts +5 -0
  75. package/dist/loop/run-iteration-loop.d.ts.map +1 -0
  76. package/dist/loop/run-iteration-loop.js +247 -0
  77. package/dist/loop/run-iteration-loop.js.map +1 -0
  78. package/dist/loop/types.d.ts +190 -0
  79. package/dist/loop/types.d.ts.map +1 -0
  80. package/dist/loop/types.js +13 -0
  81. package/dist/loop/types.js.map +1 -0
  82. package/dist/registry.d.ts +5 -0
  83. package/dist/registry.d.ts.map +1 -0
  84. package/dist/registry.js +19 -0
  85. package/dist/registry.js.map +1 -0
  86. package/dist/types.d.ts +10 -0
  87. package/dist/types.d.ts.map +1 -0
  88. package/dist/types.js +3 -0
  89. package/dist/types.js.map +1 -0
  90. package/package.json +52 -0
@@ -0,0 +1,369 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateNextVersion = generateNextVersion;
4
+ // New-version generation — 9-block system prompt + variable whitelist validation + token budget
5
+ const llm_client_1 = require("@proofhound/llm-client");
6
+ const analyze_1 = require("./analyze");
7
+ const parse_1 = require("./parse");
8
+ const shared_1 = require("@proofhound/shared");
9
+ const prompts_1 = require("./prompts");
10
+ const token_budget_1 = require("./token-budget");
11
+ // LLM retry cap — at most 1 first call + N retries; when retries are exhausted and placeholders are still missing → fall back to the system auto-patch
12
+ const MAX_VARIABLE_RETRY_ATTEMPTS = 2;
13
+ // Append the system patch section: at the end of the new body, structured hint, ensuring missing placeholders are restored in ASCII {{var}} form.
14
+ // This section is separated by blank lines + ---; the UI can clip the tail to prompt the user to manually tweak placeholder embedding.
15
+ function autoPatchPromptBody(body, missingVariables, language = shared_1.DEFAULT_PROMPT_LANGUAGE) {
16
+ const lines = missingVariables.map((v) => `- ${v}:{{${v}}}`).join('\n');
17
+ if (language === 'en-US') {
18
+ return `${body}\n\n---\n(System auto-patch: these input variables were restored; please review and place them naturally.)\n${lines}`;
19
+ }
20
+ return `${body}\n\n---\n(系统自动补丁:以下输入变量被系统补回,请人工核查并调整使用位置)\n${lines}`;
21
+ }
22
+ // Build the user message that feeds back to the LLM on retry: explicitly tell it which placeholders were missed last round + that ASCII double-curly syntax must be used to restore them
23
+ function buildVariableRetryFeedback(removedVariables, language = shared_1.DEFAULT_PROMPT_LANGUAGE) {
24
+ const occList = removedVariables.map((v) => `- \`{{${v}}}\``).join('\n');
25
+ if (language === 'en-US') {
26
+ return [
27
+ '## Previous newPromptBody violated hard constraint #1 (must preserve base placeholders)',
28
+ 'Your newPromptBody is missing these placeholders. They were used by the base prompt and are still whitelisted:',
29
+ occList,
30
+ '',
31
+ 'Return the complete JSON again with these requirements:',
32
+ '- newPromptBody must include every placeholder above exactly with ASCII double braces, e.g. `{{var}}`.',
33
+ '- Do not use `{var}`, `<var>`, `[var]`, full-width braces, or any other syntax variant.',
34
+ '- Keep the other fields aligned with your intended change.',
35
+ ].join('\n');
36
+ }
37
+ return [
38
+ '## 上一轮 newPromptBody 违反硬约束 #1(必须保留 base 已用占位)',
39
+ `你的 newPromptBody 中缺少以下占位(base 已用 ∩ 白名单内 → 必须逐字保留):`,
40
+ occList,
41
+ '',
42
+ '请重新输出完整 JSON,要求:',
43
+ '- **newPromptBody 中必须以 ASCII 双花括号语法 `{{var}}` 原样包含上述全部占位**(位置可调整)',
44
+ '- 禁止用 `{var}` / `<var>` / `[var]` / 全角 `{{var}}` 等任何变体语法',
45
+ '- 其他字段(changeSummary / appliedChanges / appliedTips / variablesUsed / newOutputSchema)按你的原意保留',
46
+ ].join('\n');
47
+ }
48
+ async function generateNextVersion(args, deps) {
49
+ const promptLanguage = args.promptLanguage ?? shared_1.DEFAULT_PROMPT_LANGUAGE;
50
+ const evidenceBundle = args.analysis.evidenceBundle ?? legacyEvidenceBundle(args.analysis);
51
+ // 0) Cross-round history token-budget degradation — shared fitted history across probe + actual call
52
+ // History takes at most 40% of the batch input budget; the rest goes to error samples / evidence
53
+ const historyCap = Math.floor(args.strategyConfig.maxInputTokensPerBatch * 0.4);
54
+ const fittedHistoryResult = (0, prompts_1.fitRoundHistoryToBudget)(args.roundHistory, historyCap, args.goals, promptLanguage);
55
+ const fittedHistory = fittedHistoryResult.fitted;
56
+ // 1) Probe: clear the evidence package and construct one message to estimate the baseline (including the fitted cross-round history + toolbox rotation hint)
57
+ const probe = (0, prompts_1.buildGenerateMessages)({
58
+ currentVersion: args.currentVersion,
59
+ errorAnalysisText: '',
60
+ analysisEvidenceBundle: {
61
+ evidenceBundleVersion: 1,
62
+ summary: '',
63
+ errorPatterns: [],
64
+ suggestedChanges: [],
65
+ conflicts: [],
66
+ sourceStats: {
67
+ batchCount: 0,
68
+ totalConfusionFailures: 0,
69
+ totalRegressionSamples: 0,
70
+ truncated: false,
71
+ },
72
+ },
73
+ metrics: args.metrics,
74
+ goals: args.goals,
75
+ fieldWhitelist: args.fieldWhitelist,
76
+ optimizationHint: args.optimizationHint,
77
+ roundHistory: fittedHistory,
78
+ toolboxSwitchHint: args.toolboxSwitchHint,
79
+ promptLanguage,
80
+ });
81
+ const baseline = (0, token_budget_1.estimateMessagesTokens)(probe.system, probe.user, args.strategyConfig.maxGenerationOutputTokens);
82
+ const errorAnalysisBudgetTokens = (0, token_budget_1.computeSampleBudget)(args.strategyConfig.maxInputTokensPerBatch, baseline.inputTokens);
83
+ // 2) The structured evidence package is trimmed by weight; the legacy summary text is also retained as fallback
84
+ const fittedEvidence = fitEvidenceBundleToBudget(evidenceBundle, errorAnalysisBudgetTokens);
85
+ const maxErrorAnalysisChars = errorAnalysisBudgetTokens * 4;
86
+ const originalText = args.analysis.errorAnalysisText;
87
+ const fittedText = (0, token_budget_1.truncateLongText)(originalText, maxErrorAnalysisChars);
88
+ const errorAnalysisTruncated = fittedText !== originalText;
89
+ // 3) Construct the final messages using the fitted evidence package
90
+ const { system, user } = (0, prompts_1.buildGenerateMessages)({
91
+ currentVersion: args.currentVersion,
92
+ errorAnalysisText: fittedText,
93
+ analysisEvidenceBundle: fittedEvidence.bundle,
94
+ metrics: args.metrics,
95
+ goals: args.goals,
96
+ fieldWhitelist: args.fieldWhitelist,
97
+ optimizationHint: args.optimizationHint,
98
+ roundHistory: fittedHistory,
99
+ toolboxSwitchHint: args.toolboxSwitchHint,
100
+ promptLanguage,
101
+ });
102
+ // base body's already-used ∩ whitelist = placeholders that the new version must retain
103
+ // (losing them prevents the model from inferring the input; the output immediately collapses to the prior, see docs/specs/25 §11 optimization oscillation)
104
+ const allowedSet = new Set(args.fieldWhitelist.promptVariables);
105
+ const requiredVariables = (0, prompts_1.extractVariableNames)(args.currentVersion.body).filter((v) => allowedSet.has(v));
106
+ // Loop structure — one first call + at most N retries + system patch fallback. Intermediate calls do not write to ph_runs.run_results;
107
+ // outside the loop, manually write one row from the finally-adopted InvokeLLMResult + parsed (including autoPatched/patchedVariables).
108
+ let messages = [
109
+ { role: 'system', content: system },
110
+ { role: 'user', content: user },
111
+ ];
112
+ let finalInvokeResult = null;
113
+ let parsed = null;
114
+ let validation = null;
115
+ let retries = 0;
116
+ let autoPatched = false;
117
+ let patchedVariables = [];
118
+ for (let attempt = 0; attempt <= MAX_VARIABLE_RETRY_ATTEMPTS; attempt++) {
119
+ const result = await (0, llm_client_1.invokeLLM)({
120
+ model: args.analysisModel,
121
+ limiterKey: args.analysisLimiterKey,
122
+ messages,
123
+ params: {
124
+ temperature: args.strategyConfig.temperature,
125
+ maxTokens: args.strategyConfig.maxGenerationOutputTokens,
126
+ },
127
+ context: {
128
+ source: 'optimization_generate',
129
+ stepName: 'error_pattern_generate',
130
+ requestId: `optimization:${args.optimizationId}:r${args.roundNumber}:generate${attempt > 0 ? `:retry${attempt}` : ''}`,
131
+ promptVersionId: args.currentVersion.id,
132
+ promptLanguage,
133
+ },
134
+ // Intermediate calls do not write run_result — write the finally-adopted one manually outside the loop (including autoPatched / patchedVariables)
135
+ parseResponse: (content) => {
136
+ try {
137
+ return (0, parse_1.parseGenerateOutput)(content, null);
138
+ }
139
+ catch {
140
+ return null;
141
+ }
142
+ },
143
+ }, deps);
144
+ finalInvokeResult = result;
145
+ const attemptParsed = (0, parse_1.parseGenerateOutput)(result.content, result.finishReason);
146
+ validateAppliedChanges(attemptParsed, fittedEvidence.bundle);
147
+ const attemptValidation = (0, parse_1.validatePromptVariables)(attemptParsed.newPromptBody, args.fieldWhitelist.promptVariables, attemptParsed.variablesUsed, requiredVariables);
148
+ // disallowed is unrecoverable (LLM used a variable outside the whitelist → business-side field config error; retries cannot save it) → fatal immediately
149
+ if (attemptValidation.disallowed.length > 0) {
150
+ throw new parse_1.InvalidVariableUsageError(attemptValidation.disallowed, attemptValidation.missing, attemptValidation.removed);
151
+ }
152
+ // Validation passes → done
153
+ if (attemptValidation.ok) {
154
+ parsed = attemptParsed;
155
+ validation = attemptValidation;
156
+ retries = attempt;
157
+ break;
158
+ }
159
+ // Only removed errors: if retries remain, feed back to the LLM; otherwise fall back to the system auto-patch
160
+ if (attempt === MAX_VARIABLE_RETRY_ATTEMPTS) {
161
+ const removedToPatch = [...attemptValidation.removed];
162
+ const patchedBody = autoPatchPromptBody(attemptParsed.newPromptBody, removedToPatch, promptLanguage);
163
+ const reValidation = (0, parse_1.validatePromptVariables)(patchedBody, args.fieldWhitelist.promptVariables, attemptParsed.variablesUsed, requiredVariables);
164
+ if (!reValidation.ok) {
165
+ // The fallback sentence already concatenates the literal {{var}}; theoretically unreachable, but throw to be safe
166
+ throw new parse_1.InvalidVariableUsageError(reValidation.disallowed, reValidation.missing, reValidation.removed);
167
+ }
168
+ parsed = { ...attemptParsed, newPromptBody: patchedBody };
169
+ validation = reValidation;
170
+ autoPatched = true;
171
+ patchedVariables = removedToPatch;
172
+ retries = attempt;
173
+ deps.logger.info({
174
+ optimizationId: args.optimizationId,
175
+ roundNumber: args.roundNumber,
176
+ patchedVariables,
177
+ retries,
178
+ promptVersionId: args.currentVersion.id,
179
+ level: 'warn',
180
+ }, 'optimization_generate_auto_patched');
181
+ break;
182
+ }
183
+ // Feed back the failure reason and prepare for the next iteration
184
+ const removedSnapshot = [...attemptValidation.removed];
185
+ deps.logger.info({
186
+ optimizationId: args.optimizationId,
187
+ roundNumber: args.roundNumber,
188
+ attempt,
189
+ removedVariables: removedSnapshot,
190
+ promptVersionId: args.currentVersion.id,
191
+ }, 'optimization_generate_retry');
192
+ messages = [
193
+ ...messages,
194
+ { role: 'assistant', content: result.content },
195
+ { role: 'user', content: buildVariableRetryFeedback(removedSnapshot, promptLanguage) },
196
+ ];
197
+ }
198
+ if (!parsed || !validation || !finalInvokeResult) {
199
+ // unreachable — the loop must hit break or throw
200
+ throw new Error('generate_loop_invariant_violated');
201
+ }
202
+ // Manually write run_result (merge autoPatched / patchedVariables / retries into parsedOutput,
203
+ // for the detail-page service to read and populate into the round DTO)
204
+ const runResultCtx = (0, analyze_1.buildRunResultForCall)({
205
+ meta: args.runResultMeta,
206
+ runResultId: args.generateRunResultId,
207
+ source: 'optimization_generate',
208
+ roundIndex: args.roundNumber,
209
+ messages,
210
+ inputVariables: {
211
+ optimizationId: args.optimizationId,
212
+ roundNumber: args.roundNumber,
213
+ stepName: 'error_pattern_generate',
214
+ retries,
215
+ autoPatched,
216
+ promptLanguage,
217
+ },
218
+ });
219
+ if (runResultCtx && deps.runResultWriter) {
220
+ await deps.runResultWriter.writeRunResult({
221
+ ...runResultCtx,
222
+ roundIndex: runResultCtx.roundIndex ?? null,
223
+ rawResponse: finalInvokeResult.content,
224
+ parsedOutput: { ...parsed, autoPatched, patchedVariables, retries },
225
+ decisionOutput: null,
226
+ isCorrect: null,
227
+ judgmentStatus: null,
228
+ status: 'success',
229
+ errorClass: null,
230
+ errorMessage: null,
231
+ latencyMs: finalInvokeResult.durationMs,
232
+ inputTokens: finalInvokeResult.usage.inputTokens,
233
+ outputTokens: finalInvokeResult.usage.outputTokens,
234
+ costEstimate: finalInvokeResult.costEstimate,
235
+ });
236
+ }
237
+ // Validate the LLM-output newOutputSchema: only adopt when it passes whitelist constraints (adds fields / keeps type);
238
+ // validation failure → warn and degrade to inheriting the old schema (do not throw, to avoid blocking the round).
239
+ let effectiveOutputSchema = args.currentVersion.outputSchema;
240
+ if (parsed.newOutputSchema !== undefined) {
241
+ const schemaCheck = (0, parse_1.safeValidateNewOutputSchema)(parsed.newOutputSchema, args.currentVersion.outputSchema);
242
+ if (schemaCheck.ok) {
243
+ effectiveOutputSchema = parsed.newOutputSchema;
244
+ }
245
+ else {
246
+ deps.logger.info({
247
+ optimizationId: args.optimizationId,
248
+ roundNumber: args.roundNumber,
249
+ promptVersionId: args.currentVersion.id,
250
+ level: 'warn',
251
+ errors: schemaCheck.errors,
252
+ rejectedSchema: parsed.newOutputSchema,
253
+ }, 'optimization_generate_new_output_schema_rejected');
254
+ delete parsed.newOutputSchema;
255
+ delete parsed.outputSchemaChangeReason;
256
+ }
257
+ }
258
+ // Bridge to a standard JSON Schema before generating the output-format section; consistent with the experiment.renderer real-dispatch assembly path.
259
+ // The persisted effectiveOutputSchema retains the original shape (DTO or LLM-direct JSON Schema); the workflow writes it into the new version.
260
+ const effectiveJsonSchema = (0, shared_1.outputSchemaToJsonSchema)(effectiveOutputSchema);
261
+ const outputFormatInstruction = (0, shared_1.buildOutputFormatInstruction)(effectiveJsonSchema, { language: promptLanguage });
262
+ const composedFullPrompt = (0, shared_1.composeFullPrompt)(parsed.newPromptBody, effectiveJsonSchema, { language: promptLanguage });
263
+ return {
264
+ ...parsed,
265
+ variableValidation: validation,
266
+ budget: {
267
+ baselineInputTokens: baseline.inputTokens,
268
+ errorAnalysisBudgetTokens,
269
+ errorAnalysisTruncated,
270
+ originalErrorAnalysisChars: originalText.length,
271
+ evidenceBundleBudgetTokens: errorAnalysisBudgetTokens,
272
+ evidenceBundleTruncated: fittedEvidence.truncated,
273
+ originalEvidenceBundleTokens: fittedEvidence.originalTokens,
274
+ roundHistoryEntryCount: fittedHistoryResult.entryCount,
275
+ roundHistoryFittedLevel: fittedHistoryResult.level,
276
+ roundHistoryBudgetTokens: fittedHistoryResult.budgetTokens,
277
+ roundHistoryTruncated: fittedHistoryResult.truncated,
278
+ },
279
+ effectiveOutputSchema,
280
+ outputFormatInstruction,
281
+ composedFullPrompt,
282
+ retries,
283
+ autoPatched,
284
+ patchedVariables,
285
+ };
286
+ }
287
+ function validateAppliedChanges(parsed, evidenceBundle) {
288
+ const applied = parsed.appliedChanges ?? [];
289
+ if (applied.length === 0)
290
+ return;
291
+ const valid = new Set(evidenceBundle.suggestedChanges
292
+ .map((c) => c.changeId)
293
+ .filter((id) => typeof id === 'string' && id.length > 0));
294
+ const invalid = applied.map((c) => c.changeId).filter((changeId) => changeId && !valid.has(changeId));
295
+ if (invalid.length > 0) {
296
+ throw new parse_1.InvalidAppliedChangeReferenceError(invalid);
297
+ }
298
+ }
299
+ function priorityRank(priority) {
300
+ return priority === 'high' ? 3 : priority === 'medium' ? 2 : priority === 'low' ? 1 : 0;
301
+ }
302
+ function sortEvidenceBundle(bundle) {
303
+ return {
304
+ ...bundle,
305
+ errorPatterns: [...bundle.errorPatterns].sort((a, b) => (b.affectedCount ?? b.count ?? 0) - (a.affectedCount ?? a.count ?? 0)),
306
+ suggestedChanges: [...bundle.suggestedChanges].sort((a, b) => {
307
+ const byPriority = priorityRank(b.priority) - priorityRank(a.priority);
308
+ if (byPriority !== 0)
309
+ return byPriority;
310
+ return (b.affectedCount ?? 0) - (a.affectedCount ?? 0);
311
+ }),
312
+ conflicts: [...(bundle.conflicts ?? [])],
313
+ };
314
+ }
315
+ function fitEvidenceBundleToBudget(bundle, budgetTokens) {
316
+ const originalTokens = (0, token_budget_1.estimateMessagesTokens)('', JSON.stringify(bundle), 0).inputTokens;
317
+ if (originalTokens <= budgetTokens) {
318
+ return { bundle, truncated: false, originalTokens };
319
+ }
320
+ let fitted = sortEvidenceBundle({
321
+ ...bundle,
322
+ summary: (0, token_budget_1.truncateLongText)(bundle.summary, 1200),
323
+ conflicts: (bundle.conflicts ?? []).slice(0, 5),
324
+ });
325
+ let truncated = fitted.summary !== bundle.summary || fitted.conflicts.length !== (bundle.conflicts ?? []).length;
326
+ while ((0, token_budget_1.estimateMessagesTokens)('', JSON.stringify(fitted), 0).inputTokens > budgetTokens &&
327
+ (fitted.suggestedChanges.length > 1 || fitted.errorPatterns.length > 1)) {
328
+ truncated = true;
329
+ if (fitted.suggestedChanges.length >= fitted.errorPatterns.length && fitted.suggestedChanges.length > 1) {
330
+ fitted = { ...fitted, suggestedChanges: fitted.suggestedChanges.slice(0, -1) };
331
+ }
332
+ else if (fitted.errorPatterns.length > 1) {
333
+ const keptPatterns = fitted.errorPatterns.slice(0, -1);
334
+ const keptIds = new Set(keptPatterns.map((p) => p.patternId).filter((id) => typeof id === 'string'));
335
+ fitted = {
336
+ ...fitted,
337
+ errorPatterns: keptPatterns,
338
+ suggestedChanges: fitted.suggestedChanges.filter((c) => !c.addressesPatternIds ||
339
+ c.addressesPatternIds.length === 0 ||
340
+ c.addressesPatternIds.some((id) => keptIds.has(id))),
341
+ };
342
+ }
343
+ }
344
+ if ((0, token_budget_1.estimateMessagesTokens)('', JSON.stringify(fitted), 0).inputTokens > budgetTokens) {
345
+ truncated = true;
346
+ fitted = {
347
+ ...fitted,
348
+ summary: (0, token_budget_1.truncateLongText)(fitted.summary, 400),
349
+ conflicts: [],
350
+ };
351
+ }
352
+ return { bundle: fitted, truncated, originalTokens };
353
+ }
354
+ function legacyEvidenceBundle(analysis) {
355
+ return {
356
+ evidenceBundleVersion: 1,
357
+ summary: analysis.summary.summary || analysis.errorAnalysisText,
358
+ errorPatterns: analysis.summary.errorPatterns ?? [],
359
+ suggestedChanges: analysis.summary.suggestedChanges ?? [],
360
+ conflicts: analysis.summary.conflicts ?? [],
361
+ sourceStats: {
362
+ batchCount: analysis.batches.length,
363
+ totalConfusionFailures: analysis.totalConfusionFailures,
364
+ totalRegressionSamples: analysis.totalRegressionSamples,
365
+ truncated: analysis.truncated,
366
+ },
367
+ };
368
+ }
369
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/error-pattern-analysis/generate.ts"],"names":[],"mappings":";;AA8IA,kDA8RC;AA5aD,gGAAgG;AAChG,uDAMgC;AAEhC,uCAA8G;AAE9G,mCASiB;AACjB,+CAM4B;AAC5B,uCAAiG;AACjG,iDAA+F;AAkE/F,uJAAuJ;AACvJ,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAEtC,kJAAkJ;AAClJ,uIAAuI;AACvI,SAAS,mBAAmB,CAC1B,IAAY,EACZ,gBAA0B,EAC1B,WAA8B,gCAAuB;IAErD,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxE,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,GAAG,IAAI,+GAA+G,KAAK,EAAE,CAAC;IACvI,CAAC;IACD,OAAO,GAAG,IAAI,+CAA+C,KAAK,EAAE,CAAC;AACvE,CAAC;AAED,yLAAyL;AACzL,SAAS,0BAA0B,CACjC,gBAA0B,EAC1B,WAA8B,gCAAuB;IAErD,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzE,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO;YACL,yFAAyF;YACzF,gHAAgH;YAChH,OAAO;YACP,EAAE;YACF,yDAAyD;YACzD,wGAAwG;YACxG,yFAAyF;YACzF,4DAA4D;SAC7D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IACD,OAAO;QACL,+CAA+C;QAC/C,oDAAoD;QACpD,OAAO;QACP,EAAE;QACF,kBAAkB;QAClB,mEAAmE;QACnE,0DAA0D;QAC1D,+FAA+F;KAChG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAEM,KAAK,UAAU,mBAAmB,CACvC,IAA6B,EAC7B,IAA2B;IAE3B,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,gCAAuB,CAAC;IACtE,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,IAAI,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE3F,qGAAqG;IACrG,iGAAiG;IACjG,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,sBAAsB,GAAG,GAAG,CAAC,CAAC;IAChF,MAAM,mBAAmB,GAAG,IAAA,iCAAuB,EAAC,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAC/G,MAAM,aAAa,GAAG,mBAAmB,CAAC,MAAM,CAAC;IAEjD,6JAA6J;IAC7J,MAAM,KAAK,GAAG,IAAA,+BAAqB,EAAC;QAClC,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,iBAAiB,EAAE,EAAE;QACrB,sBAAsB,EAAE;YACtB,qBAAqB,EAAE,CAAC;YACxB,OAAO,EAAE,EAAE;YACX,aAAa,EAAE,EAAE;YACjB,gBAAgB,EAAE,EAAE;YACpB,SAAS,EAAE,EAAE;YACb,WAAW,EAAE;gBACX,UAAU,EAAE,CAAC;gBACb,sBAAsB,EAAE,CAAC;gBACzB,sBAAsB,EAAE,CAAC;gBACzB,SAAS,EAAE,KAAK;aACjB;SACF;QACD,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,YAAY,EAAE,aAAa;QAC3B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,cAAc;KACf,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,IAAA,qCAAsB,EAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,yBAAyB,CAAC,CAAC;IACjH,MAAM,yBAAyB,GAAG,IAAA,kCAAmB,EACnD,IAAI,CAAC,cAAc,CAAC,sBAAsB,EAC1C,QAAQ,CAAC,WAAW,CACrB,CAAC;IAEF,gHAAgH;IAChH,MAAM,cAAc,GAAG,yBAAyB,CAAC,cAAc,EAAE,yBAAyB,CAAC,CAAC;IAE5F,MAAM,qBAAqB,GAAG,yBAAyB,GAAG,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACrD,MAAM,UAAU,GAAG,IAAA,+BAAgB,EAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;IACzE,MAAM,sBAAsB,GAAG,UAAU,KAAK,YAAY,CAAC;IAE3D,oEAAoE;IACpE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAA,+BAAqB,EAAC;QAC7C,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,iBAAiB,EAAE,UAAU;QAC7B,sBAAsB,EAAE,cAAc,CAAC,MAAM;QAC7C,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,YAAY,EAAE,aAAa;QAC3B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,cAAc;KACf,CAAC,CAAC;IAEH,uFAAuF;IACvF,2JAA2J;IAC3J,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;IAChE,MAAM,iBAAiB,GAAG,IAAA,8BAAoB,EAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1G,uIAAuI;IACvI,uIAAuI;IACvI,IAAI,QAAQ,GAAiB;QAC3B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE;QACnC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;KAChC,CAAC;IACF,IAAI,iBAAiB,GAA2B,IAAI,CAAC;IACrD,IAAI,MAAM,GAA0B,IAAI,CAAC;IACzC,IAAI,UAAU,GAAoC,IAAI,CAAC;IACvD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,gBAAgB,GAAa,EAAE,CAAC;IAEpC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,2BAA2B,EAAE,OAAO,EAAE,EAAE,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAS,EAC5B;YACE,KAAK,EAAE,IAAI,CAAC,aAAa;YACzB,UAAU,EAAE,IAAI,CAAC,kBAAkB;YACnC,QAAQ;YACR,MAAM,EAAE;gBACN,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,WAAW;gBAC5C,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,yBAAyB;aACzD;YACD,OAAO,EAAE;gBACP,MAAM,EAAE,uBAAuB;gBAC/B,QAAQ,EAAE,wBAAwB;gBAClC,SAAS,EAAE,gBAAgB,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,WAAW,YAAY,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;gBACtH,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE;gBACvC,cAAc;aACf;YACD,kJAAkJ;YAClJ,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE;gBACzB,IAAI,CAAC;oBACH,OAAO,IAAA,2BAAmB,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC5C,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;SACF,EACD,IAAI,CACL,CAAC;QAEF,iBAAiB,GAAG,MAAM,CAAC;QAC3B,MAAM,aAAa,GAAG,IAAA,2BAAmB,EAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QAC/E,sBAAsB,CAAC,aAAa,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;QAC7D,MAAM,iBAAiB,GAAG,IAAA,+BAAuB,EAC/C,aAAa,CAAC,aAAa,EAC3B,IAAI,CAAC,cAAc,CAAC,eAAe,EACnC,aAAa,CAAC,aAAa,EAC3B,iBAAiB,CAClB,CAAC;QAEF,yJAAyJ;QACzJ,IAAI,iBAAiB,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,iCAAyB,CACjC,iBAAiB,CAAC,UAAU,EAC5B,iBAAiB,CAAC,OAAO,EACzB,iBAAiB,CAAC,OAAO,CAC1B,CAAC;QACJ,CAAC;QAED,2BAA2B;QAC3B,IAAI,iBAAiB,CAAC,EAAE,EAAE,CAAC;YACzB,MAAM,GAAG,aAAa,CAAC;YACvB,UAAU,GAAG,iBAAiB,CAAC;YAC/B,OAAO,GAAG,OAAO,CAAC;YAClB,MAAM;QACR,CAAC;QAED,6GAA6G;QAC7G,IAAI,OAAO,KAAK,2BAA2B,EAAE,CAAC;YAC5C,MAAM,cAAc,GAAG,CAAC,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACtD,MAAM,WAAW,GAAG,mBAAmB,CAAC,aAAa,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;YACrG,MAAM,YAAY,GAAG,IAAA,+BAAuB,EAC1C,WAAW,EACX,IAAI,CAAC,cAAc,CAAC,eAAe,EACnC,aAAa,CAAC,aAAa,EAC3B,iBAAiB,CAClB,CAAC;YACF,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;gBACrB,kHAAkH;gBAClH,MAAM,IAAI,iCAAyB,CAAC,YAAY,CAAC,UAAU,EAAE,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;YAC3G,CAAC;YACD,MAAM,GAAG,EAAE,GAAG,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;YAC1D,UAAU,GAAG,YAAY,CAAC;YAC1B,WAAW,GAAG,IAAI,CAAC;YACnB,gBAAgB,GAAG,cAAc,CAAC;YAClC,OAAO,GAAG,OAAO,CAAC;YAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd;gBACE,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,gBAAgB;gBAChB,OAAO;gBACP,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE;gBACvC,KAAK,EAAE,MAAM;aACd,EACD,oCAAoC,CACrC,CAAC;YACF,MAAM;QACR,CAAC;QAED,kEAAkE;QAClE,MAAM,eAAe,GAAG,CAAC,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,IAAI,CACd;YACE,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO;YACP,gBAAgB,EAAE,eAAe;YACjC,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE;SACxC,EACD,6BAA6B,CAC9B,CAAC;QACF,QAAQ,GAAG;YACT,GAAG,QAAQ;YACX,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;YAC9C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,0BAA0B,CAAC,eAAe,EAAE,cAAc,CAAC,EAAE;SACvF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACjD,iDAAiD;QACjD,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,+FAA+F;IAC/F,uEAAuE;IACvE,MAAM,YAAY,GAAG,IAAA,+BAAqB,EAAC;QACzC,IAAI,EAAE,IAAI,CAAC,aAAa;QACxB,WAAW,EAAE,IAAI,CAAC,mBAAmB;QACrC,MAAM,EAAE,uBAAuB;QAC/B,UAAU,EAAE,IAAI,CAAC,WAAW;QAC5B,QAAQ;QACR,cAAc,EAAE;YACd,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,wBAAwB;YAClC,OAAO;YACP,WAAW;YACX,cAAc;SACf;KACF,CAAC,CAAC;IACH,IAAI,YAAY,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QACzC,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;YACxC,GAAG,YAAY;YACf,UAAU,EAAE,YAAY,CAAC,UAAU,IAAI,IAAI;YAC3C,WAAW,EAAE,iBAAiB,CAAC,OAAO;YACtC,YAAY,EAAE,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE;YACnE,cAAc,EAAE,IAAI;YACpB,SAAS,EAAE,IAAI;YACf,cAAc,EAAE,IAAI;YACpB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,iBAAiB,CAAC,UAAU;YACvC,WAAW,EAAE,iBAAiB,CAAC,KAAK,CAAC,WAAW;YAChD,YAAY,EAAE,iBAAiB,CAAC,KAAK,CAAC,YAAY;YAClD,YAAY,EAAE,iBAAiB,CAAC,YAAY;SAC7C,CAAC,CAAC;IACL,CAAC;IAED,uHAAuH;IACvH,kHAAkH;IAClH,IAAI,qBAAqB,GAAY,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;IACtE,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QACzC,MAAM,WAAW,GAAG,IAAA,mCAA2B,EAAC,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC1G,IAAI,WAAW,CAAC,EAAE,EAAE,CAAC;YACnB,qBAAqB,GAAG,MAAM,CAAC,eAAe,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,IAAI,CACd;gBACE,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE;gBACvC,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,WAAW,CAAC,MAAM;gBAC1B,cAAc,EAAE,MAAM,CAAC,eAAe;aACvC,EACD,kDAAkD,CACnD,CAAC;YACF,OAAO,MAAM,CAAC,eAAe,CAAC;YAC9B,OAAO,MAAM,CAAC,wBAAwB,CAAC;QACzC,CAAC;IACH,CAAC;IAED,qJAAqJ;IACrJ,+IAA+I;IAC/I,MAAM,mBAAmB,GAAG,IAAA,iCAAwB,EAAC,qBAAqB,CAAC,CAAC;IAC5E,MAAM,uBAAuB,GAAG,IAAA,qCAA4B,EAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC;IAChH,MAAM,kBAAkB,GAAG,IAAA,0BAAiB,EAAC,MAAM,CAAC,aAAa,EAAE,mBAAmB,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC;IAEtH,OAAO;QACL,GAAG,MAAM;QACT,kBAAkB,EAAE,UAAU;QAC9B,MAAM,EAAE;YACN,mBAAmB,EAAE,QAAQ,CAAC,WAAW;YACzC,yBAAyB;YACzB,sBAAsB;YACtB,0BAA0B,EAAE,YAAY,CAAC,MAAM;YAC/C,0BAA0B,EAAE,yBAAyB;YACrD,uBAAuB,EAAE,cAAc,CAAC,SAAS;YACjD,4BAA4B,EAAE,cAAc,CAAC,cAAc;YAC3D,sBAAsB,EAAE,mBAAmB,CAAC,UAAU;YACtD,uBAAuB,EAAE,mBAAmB,CAAC,KAAK;YAClD,wBAAwB,EAAE,mBAAmB,CAAC,YAAY;YAC1D,qBAAqB,EAAE,mBAAmB,CAAC,SAAS;SACrD;QACD,qBAAqB;QACrB,uBAAuB;QACvB,kBAAkB;QAClB,OAAO;QACP,WAAW;QACX,gBAAgB;KACjB,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAsB,EAAE,cAAsC;IAC5F,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;IAC5C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,MAAM,KAAK,GAAG,IAAI,GAAG,CACnB,cAAc,CAAC,gBAAgB;SAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;SACtB,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CACzE,CAAC;IACF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtG,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,0CAAkC,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,QAA4B;IAChD,OAAO,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1F,CAAC;AAED,SAAS,kBAAkB,CAAC,MAA8B;IACxD,OAAO;QACL,GAAG,MAAM;QACT,aAAa,EAAE,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAC3C,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAChF;QACD,gBAAgB,EAAE,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC3D,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACvE,IAAI,UAAU,KAAK,CAAC;gBAAE,OAAO,UAAU,CAAC;YACxC,OAAO,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC;QACF,SAAS,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;KACzC,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAChC,MAA8B,EAC9B,YAAoB;IAEpB,MAAM,cAAc,GAAG,IAAA,qCAAsB,EAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;IACzF,IAAI,cAAc,IAAI,YAAY,EAAE,CAAC;QACnC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IACtD,CAAC;IAED,IAAI,MAAM,GAA2B,kBAAkB,CAAC;QACtD,GAAG,MAAM;QACT,OAAO,EAAE,IAAA,+BAAgB,EAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC;QAC/C,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;KAChD,CAAC,CAAC;IAEH,IAAI,SAAS,GAAG,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAEjH,OACE,IAAA,qCAAsB,EAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,YAAY;QAChF,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,EACvE,CAAC;QACD,SAAS,GAAG,IAAI,CAAC;QACjB,IAAI,MAAM,CAAC,gBAAgB,CAAC,MAAM,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,IAAI,MAAM,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxG,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,CAAC;aAAM,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvD,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,CAC1F,CAAC;YACF,MAAM,GAAG;gBACP,GAAG,MAAM;gBACT,aAAa,EAAE,YAAY;gBAC3B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAC9C,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,CAAC,mBAAmB;oBACtB,CAAC,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC;oBAClC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CACtD;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,IAAA,qCAAsB,EAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,YAAY,EAAE,CAAC;QACrF,SAAS,GAAG,IAAI,CAAC;QACjB,MAAM,GAAG;YACP,GAAG,MAAM;YACT,OAAO,EAAE,IAAA,+BAAgB,EAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC;YAC9C,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,oBAAoB,CAAC,QAA+B;IAC3D,OAAO;QACL,qBAAqB,EAAE,CAAC;QACxB,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,iBAAiB;QAC/D,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE;QACnD,gBAAgB,EAAE,QAAQ,CAAC,OAAO,CAAC,gBAAgB,IAAI,EAAE;QACzD,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE;QAC3C,WAAW,EAAE;YACX,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM;YACnC,sBAAsB,EAAE,QAAQ,CAAC,sBAAsB;YACvD,sBAAsB,EAAE,QAAQ,CAAC,sBAAsB;YACvD,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC9B;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ export * from './config.schema';
2
+ export * from './parse';
3
+ export * from './prompts';
4
+ export * from './confusion-pairs';
5
+ export * from './analyze';
6
+ export * from './generate';
7
+ export * from './generate-initial';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/error-pattern-analysis/index.ts"],"names":[],"mappings":"AAKA,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ // V1 default strategy — error pattern analysis + new version generation
18
+ // See docs/specs/25-optimizations.md §3
19
+ //
20
+ // Key system prompt templates live in ./prompts/*.md, loaded synchronously by ./prompts/loader.ts.
21
+ // To modify a prompt → edit the .md file → restart the process for it to take effect.
22
+ __exportStar(require("./config.schema"), exports);
23
+ __exportStar(require("./parse"), exports);
24
+ __exportStar(require("./prompts"), exports);
25
+ __exportStar(require("./confusion-pairs"), exports);
26
+ __exportStar(require("./analyze"), exports);
27
+ __exportStar(require("./generate"), exports);
28
+ __exportStar(require("./generate-initial"), exports);
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/error-pattern-analysis/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wEAAwE;AACxE,wCAAwC;AACxC,EAAE;AACF,mGAAmG;AACnG,sFAAsF;AACtF,kDAAgC;AAChC,0CAAwB;AACxB,4CAA0B;AAC1B,oDAAkC;AAClC,4CAA0B;AAC1B,6CAA2B;AAC3B,qDAAmC"}
@@ -0,0 +1,92 @@
1
+ import type { AnalysisPattern, SuggestedChange, SummarizeConflict } from './analysis-types';
2
+ export type { AnalysisEvidenceBundle, AnalysisPattern, SuggestedChange, SummarizeConflict, } from './analysis-types';
3
+ export declare class MalformedGenerationError extends Error {
4
+ constructor(message: string);
5
+ }
6
+ export declare class InvalidVariableUsageError extends Error {
7
+ readonly disallowedVariables: string[];
8
+ readonly missingVariables: string[];
9
+ readonly removedVariables: string[];
10
+ constructor(disallowed: string[], missing: string[], removed?: string[]);
11
+ }
12
+ export declare class InvalidAppliedChangeReferenceError extends Error {
13
+ readonly invalidChangeIds: string[];
14
+ constructor(invalidChangeIds: string[]);
15
+ }
16
+ export declare function isTruncated(finishReason: string | null | undefined): boolean;
17
+ export declare function extractJsonObject(text: string): string | null;
18
+ export declare function safeParseJson(text: string): unknown;
19
+ export interface ConfusionAnalysisOutput {
20
+ confusionPair?: string;
21
+ errorPatterns: AnalysisPattern[];
22
+ suggestedChanges: SuggestedChange[];
23
+ truncated: boolean;
24
+ rawContent: string;
25
+ }
26
+ export interface RegressionAnalysisOutput {
27
+ errorPatterns: AnalysisPattern[];
28
+ suggestedChanges: SuggestedChange[];
29
+ truncated: boolean;
30
+ rawContent: string;
31
+ }
32
+ export interface SummarizeOutput {
33
+ summary: string;
34
+ errorPatterns: Array<AnalysisPattern & {
35
+ source?: 'confusion' | 'regression';
36
+ }>;
37
+ suggestedChanges: SuggestedChange[];
38
+ conflicts?: SummarizeConflict[];
39
+ evidenceBundleVersion: 1;
40
+ truncated: boolean;
41
+ rawContent: string;
42
+ }
43
+ export interface NormalizeEvidenceContext {
44
+ source: 'confusion' | 'regression';
45
+ bucketKey: string;
46
+ affectedCountFallback: number;
47
+ }
48
+ export interface NormalizedEvidenceBatch {
49
+ errorPatterns: AnalysisPattern[];
50
+ suggestedChanges: SuggestedChange[];
51
+ }
52
+ export declare function normalizeEvidenceBundle(raw: {
53
+ errorPatterns: AnalysisPattern[];
54
+ suggestedChanges: SuggestedChange[];
55
+ }, ctx: NormalizeEvidenceContext): NormalizedEvidenceBatch;
56
+ export declare function parseConfusionAnalysisOutput(content: string, finishReason: string | null | undefined): ConfusionAnalysisOutput;
57
+ export declare function parseRegressionAnalysisOutput(content: string, finishReason: string | null | undefined): RegressionAnalysisOutput;
58
+ export declare function parseSummarizeOutput(content: string, finishReason: string | null | undefined): SummarizeOutput;
59
+ export interface GenerateOutput {
60
+ newPromptBody: string;
61
+ changeSummary: string;
62
+ appliedTips: string[];
63
+ variablesUsed: string[];
64
+ truncated: boolean;
65
+ rawContent: string;
66
+ newOutputSchema?: unknown;
67
+ outputSchemaChangeReason?: string;
68
+ appliedChanges?: Array<{
69
+ changeId: string;
70
+ patternIds: string[];
71
+ summary: string;
72
+ }>;
73
+ unappliedSuggestions?: Array<{
74
+ changeId: string;
75
+ reason: string;
76
+ }>;
77
+ }
78
+ export interface OutputSchemaValidationResult {
79
+ ok: boolean;
80
+ errors: string[];
81
+ }
82
+ export declare function safeValidateNewOutputSchema(newSchema: unknown, oldSchema: unknown): OutputSchemaValidationResult;
83
+ export declare function parseGenerateOutput(content: string, finishReason: string | null | undefined): GenerateOutput;
84
+ export interface VariableValidationResult {
85
+ ok: boolean;
86
+ disallowed: string[];
87
+ missing: string[];
88
+ removed: string[];
89
+ detected: string[];
90
+ }
91
+ export declare function validatePromptVariables(newPromptBody: string, promptVariables: string[], reportedVariablesUsed: string[], requiredVariables?: string[]): VariableValidationResult;
92
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/error-pattern-analysis/parse.ts"],"names":[],"mappings":"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"}