@hongmaple0820/scale-engine 0.18.0 → 0.20.0

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 (110) hide show
  1. package/README.en.md +310 -237
  2. package/README.md +255 -63
  3. package/dist/api/cli.js +2656 -1258
  4. package/dist/api/cli.js.map +1 -1
  5. package/dist/api/doctor.d.ts +4 -1
  6. package/dist/api/doctor.js +85 -1
  7. package/dist/api/doctor.js.map +1 -1
  8. package/dist/api/quickstart.d.ts +3 -0
  9. package/dist/api/quickstart.js +9 -4
  10. package/dist/api/quickstart.js.map +1 -1
  11. package/dist/cli/phaseCommands.js +7 -0
  12. package/dist/cli/phaseCommands.js.map +1 -1
  13. package/dist/codegraph/CodeIntelligence.d.ts +135 -0
  14. package/dist/codegraph/CodeIntelligence.js +460 -0
  15. package/dist/codegraph/CodeIntelligence.js.map +1 -0
  16. package/dist/context/ContextBudget.d.ts +90 -0
  17. package/dist/context/ContextBudget.js +322 -0
  18. package/dist/context/ContextBudget.js.map +1 -0
  19. package/dist/eval/WorkflowEval.d.ts +161 -0
  20. package/dist/eval/WorkflowEval.js +379 -0
  21. package/dist/eval/WorkflowEval.js.map +1 -0
  22. package/dist/governance/GovernanceRoi.d.ts +25 -0
  23. package/dist/governance/GovernanceRoi.js +70 -0
  24. package/dist/governance/GovernanceRoi.js.map +1 -0
  25. package/dist/governance/ProgressiveGovernance.d.ts +22 -0
  26. package/dist/governance/ProgressiveGovernance.js +159 -0
  27. package/dist/governance/ProgressiveGovernance.js.map +1 -0
  28. package/dist/index.d.ts +2 -0
  29. package/dist/index.js +4 -0
  30. package/dist/index.js.map +1 -1
  31. package/dist/memory/MemoryBrain.d.ts +135 -0
  32. package/dist/memory/MemoryBrain.js +635 -0
  33. package/dist/memory/MemoryBrain.js.map +1 -0
  34. package/dist/memory/MemoryFabric.d.ts +118 -0
  35. package/dist/memory/MemoryFabric.js +281 -0
  36. package/dist/memory/MemoryFabric.js.map +1 -0
  37. package/dist/memory/MemoryLearning.d.ts +61 -0
  38. package/dist/memory/MemoryLearning.js +203 -0
  39. package/dist/memory/MemoryLearning.js.map +1 -0
  40. package/dist/memory/index.d.ts +3 -0
  41. package/dist/memory/index.js +4 -0
  42. package/dist/memory/index.js.map +1 -0
  43. package/dist/output/GovernanceDashboard.d.ts +57 -0
  44. package/dist/output/GovernanceDashboard.js +250 -0
  45. package/dist/output/GovernanceDashboard.js.map +1 -0
  46. package/dist/output/HTMLArtifactLayer.js +31 -31
  47. package/dist/output/index.d.ts +2 -0
  48. package/dist/output/index.js +1 -0
  49. package/dist/output/index.js.map +1 -1
  50. package/dist/prompts/VibeTemplateGallery.js +121 -121
  51. package/dist/runtime/FinalReportGuard.d.ts +16 -0
  52. package/dist/runtime/FinalReportGuard.js +14 -0
  53. package/dist/runtime/FinalReportGuard.js.map +1 -0
  54. package/dist/runtime/RuntimeDoctor.d.ts +23 -0
  55. package/dist/runtime/RuntimeDoctor.js +151 -0
  56. package/dist/runtime/RuntimeDoctor.js.map +1 -0
  57. package/dist/runtime/RuntimeEvidenceLedger.d.ts +50 -0
  58. package/dist/runtime/RuntimeEvidenceLedger.js +89 -0
  59. package/dist/runtime/RuntimeEvidenceLedger.js.map +1 -0
  60. package/dist/runtime/SessionLedger.d.ts +53 -0
  61. package/dist/runtime/SessionLedger.js +104 -0
  62. package/dist/runtime/SessionLedger.js.map +1 -0
  63. package/dist/runtime/index.d.ts +4 -0
  64. package/dist/runtime/index.js +5 -0
  65. package/dist/runtime/index.js.map +1 -0
  66. package/dist/skills/SkillRadar.d.ts +83 -0
  67. package/dist/skills/SkillRadar.js +384 -0
  68. package/dist/skills/SkillRadar.js.map +1 -0
  69. package/dist/workflow/EngineeringStandards.js +69 -66
  70. package/dist/workflow/EngineeringStandards.js.map +1 -1
  71. package/dist/workflow/GovernanceTemplatePacks.js +126 -126
  72. package/dist/workflow/GovernanceTemplates.d.ts +1 -1
  73. package/dist/workflow/GovernanceTemplates.js +500 -229
  74. package/dist/workflow/GovernanceTemplates.js.map +1 -1
  75. package/dist/workflow/ResourceGovernance.js +27 -18
  76. package/dist/workflow/ResourceGovernance.js.map +1 -1
  77. package/dist/workflow/VerificationCommands.d.ts +11 -0
  78. package/dist/workflow/VerificationCommands.js +2 -0
  79. package/dist/workflow/VerificationCommands.js.map +1 -1
  80. package/dist/workflow/VerificationProfile.d.ts +2 -1
  81. package/dist/workflow/VerificationProfile.js +3 -0
  82. package/dist/workflow/VerificationProfile.js.map +1 -1
  83. package/dist/workflow/WorkflowArtifactWriter.js +2 -1
  84. package/dist/workflow/WorkflowArtifactWriter.js.map +1 -1
  85. package/dist/workflow/WorkflowEngine.js +4 -1
  86. package/dist/workflow/WorkflowEngine.js.map +1 -1
  87. package/dist/workflow/WorkspaceSafety.d.ts +9 -0
  88. package/dist/workflow/WorkspaceSafety.js +49 -0
  89. package/dist/workflow/WorkspaceSafety.js.map +1 -0
  90. package/dist/workflow/gates/GateSystem.d.ts +12 -1
  91. package/dist/workflow/gates/GateSystem.js +106 -0
  92. package/dist/workflow/gates/GateSystem.js.map +1 -1
  93. package/dist/workflow/types.d.ts +1 -1
  94. package/docs/CODE_INTELLIGENCE.md +138 -0
  95. package/docs/CONTEXT_BUDGET.md +87 -0
  96. package/docs/GOVERNANCE_DASHBOARD.md +69 -0
  97. package/docs/MEMORY_BRAIN.md +104 -0
  98. package/docs/MEMORY_FABRIC.md +107 -0
  99. package/docs/README.md +76 -0
  100. package/docs/RUNTIME_EVIDENCE.md +101 -0
  101. package/docs/SKILL_RADAR.md +115 -0
  102. package/docs/WORKFLOW_EVAL.md +151 -0
  103. package/docs/start/README.md +42 -0
  104. package/docs/start/agent-governance-demo.md +107 -0
  105. package/docs/start/quickstart.md +127 -0
  106. package/examples/demo-projects/agent-governance-demo/README.md +37 -0
  107. package/examples/demo-projects/agent-governance-demo/package.json +16 -0
  108. package/examples/demo-projects/agent-governance-demo/src/oauth-state.ts +39 -0
  109. package/examples/demo-projects/agent-governance-demo/tests/oauth-state.test.ts +52 -0
  110. package/package.json +14 -3
@@ -0,0 +1,322 @@
1
+ import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
2
+ import { extname, isAbsolute, join, relative, resolve } from 'node:path';
3
+ const CATEGORIES = ['always', 'on-demand', 'evidence', 'archive', 'generated'];
4
+ const DEFAULT_MAX_ALWAYS_TOKENS = 2500;
5
+ const DEFAULT_MAX_TASK_TOKENS = 8000;
6
+ const IGNORED_DIRS = new Set([
7
+ '.git',
8
+ 'node_modules',
9
+ 'dist',
10
+ 'coverage',
11
+ 'tmp',
12
+ '.worktrees',
13
+ ]);
14
+ const SCANNED_EXTENSIONS = new Set(['.md', '.json', '.yml', '.yaml', '.html', '.txt']);
15
+ export function estimateTokens(content) {
16
+ if (content.length === 0)
17
+ return 0;
18
+ return Math.max(1, Math.ceil(content.length / 4));
19
+ }
20
+ export function scanContextBudget(options = {}) {
21
+ const projectDir = resolve(options.projectDir ?? process.cwd());
22
+ const scaleDir = options.scaleDir ?? '.scale';
23
+ const scaleRoot = resolveScaleRoot(projectDir, scaleDir);
24
+ const entries = discoverContextFiles(projectDir, scaleDir)
25
+ .map(file => contextEntry(projectDir, scaleRoot, file))
26
+ .sort((a, b) => categoryIndex(a.category) - categoryIndex(b.category) || b.estimatedTokens - a.estimatedTokens);
27
+ const summary = summarize(entries);
28
+ const thresholds = {
29
+ maxAlwaysTokens: options.maxAlwaysTokens ?? DEFAULT_MAX_ALWAYS_TOKENS,
30
+ maxTaskTokens: options.maxTaskTokens ?? DEFAULT_MAX_TASK_TOKENS,
31
+ };
32
+ return {
33
+ projectDir,
34
+ scaleDir,
35
+ generatedAt: new Date().toISOString(),
36
+ thresholds,
37
+ entries,
38
+ summary,
39
+ recommendations: recommendations(summary, thresholds, entries),
40
+ };
41
+ }
42
+ export function writeContextBudgetReport(report) {
43
+ const scaleRoot = resolveScaleRoot(report.projectDir, report.scaleDir);
44
+ mkdirSync(scaleRoot, { recursive: true });
45
+ const target = join(scaleRoot, 'context-budget.json');
46
+ writeFileSync(target, JSON.stringify(report, null, 2), 'utf-8');
47
+ return target;
48
+ }
49
+ export function doctorContextBudget(options = {}) {
50
+ const report = scanContextBudget(options);
51
+ const checks = [];
52
+ checks.push({
53
+ name: 'Always-loaded context',
54
+ status: report.summary.alwaysTokens <= report.thresholds.maxAlwaysTokens ? 'pass' : 'fail',
55
+ message: `Always-loaded context is ${report.summary.alwaysTokens} tokens; limit is ${report.thresholds.maxAlwaysTokens}.`,
56
+ });
57
+ checks.push({
58
+ name: 'Task context budget',
59
+ status: report.summary.totalTokens <= report.thresholds.maxTaskTokens ? 'pass' : 'warn',
60
+ message: `Scanned context is ${report.summary.totalTokens} tokens; task pack limit is ${report.thresholds.maxTaskTokens}.`,
61
+ });
62
+ checks.push({
63
+ name: 'Generated artifacts',
64
+ status: report.summary.byCategory.generated.files > 0 ? 'warn' : 'pass',
65
+ message: report.summary.byCategory.generated.files > 0
66
+ ? `${report.summary.byCategory.generated.files} generated artifacts should stay manifest-only unless explicitly requested.`
67
+ : 'No generated context artifacts detected.',
68
+ });
69
+ return {
70
+ ok: checks.every(check => check.status !== 'fail'),
71
+ checks,
72
+ report,
73
+ };
74
+ }
75
+ export function buildContextPack(options) {
76
+ const budget = options.budget ?? DEFAULT_MAX_TASK_TOKENS;
77
+ const report = scanContextBudget({ ...options, maxTaskTokens: budget });
78
+ const task = options.task;
79
+ const files = options.files ?? [];
80
+ const activations = activationRules(task, files, options.level ?? 'M');
81
+ const sections = [];
82
+ const alwaysEntries = report.entries.filter(entry => entry.category === 'always');
83
+ sections.push(section('always-core', 'always', true, 'Core agent entry rules and governance policy.', alwaysEntries));
84
+ for (const activation of activations) {
85
+ const activatedEntries = report.entries.filter(entry => activation.matches(entry));
86
+ if (activatedEntries.length === 0) {
87
+ sections.push({
88
+ id: activation.id,
89
+ category: activation.category,
90
+ included: false,
91
+ estimatedTokens: 0,
92
+ reason: `${activation.reason}; no matching artifacts found.`,
93
+ paths: [],
94
+ });
95
+ continue;
96
+ }
97
+ sections.push(section(activation.id, activation.category, true, activation.reason, activatedEntries));
98
+ }
99
+ const unique = dedupeSections(sections);
100
+ let total = 0;
101
+ const packed = [];
102
+ const omitted = [];
103
+ for (const item of unique) {
104
+ if (item.included && total + item.estimatedTokens > budget) {
105
+ packed.push({ ...item, included: false, reason: `${item.reason} Omitted because it would exceed budget ${budget}.` });
106
+ omitted.push({ id: item.id, reason: 'budget-exceeded', estimatedTokens: item.estimatedTokens });
107
+ continue;
108
+ }
109
+ if (item.included)
110
+ total += item.estimatedTokens;
111
+ packed.push(item);
112
+ }
113
+ return {
114
+ task: {
115
+ taskId: options.taskId,
116
+ task,
117
+ level: options.level ?? 'M',
118
+ files,
119
+ budget,
120
+ },
121
+ generatedAt: new Date().toISOString(),
122
+ totalEstimatedTokens: total,
123
+ lazyLoaded: packed
124
+ .filter(item => item.included && item.id !== 'always-core')
125
+ .map(item => ({ id: item.id, reason: item.reason })),
126
+ omitted,
127
+ sections: packed,
128
+ };
129
+ }
130
+ function discoverContextFiles(projectDir, scaleDir) {
131
+ const files = [];
132
+ const scaleRoot = resolveScaleRoot(projectDir, scaleDir);
133
+ const roots = [projectDir, join(projectDir, 'docs'), scaleRoot];
134
+ for (const root of roots) {
135
+ const absolute = root;
136
+ if (!existsSync(absolute))
137
+ continue;
138
+ if (statSync(absolute).isFile()) {
139
+ files.push(absolute);
140
+ continue;
141
+ }
142
+ walk(absolute, projectDir, files);
143
+ }
144
+ return Array.from(new Set(files));
145
+ }
146
+ function walk(dir, projectDir, files) {
147
+ const rel = normalizePath(relative(projectDir, dir));
148
+ const base = rel.split('/').pop() ?? '';
149
+ if (IGNORED_DIRS.has(base))
150
+ return;
151
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
152
+ const absolute = join(dir, entry.name);
153
+ if (entry.isDirectory()) {
154
+ if (!IGNORED_DIRS.has(entry.name))
155
+ walk(absolute, projectDir, files);
156
+ continue;
157
+ }
158
+ if (!entry.isFile())
159
+ continue;
160
+ const ext = extname(entry.name).toLowerCase();
161
+ const relativePath = normalizePath(relative(projectDir, absolute));
162
+ if (SCANNED_EXTENSIONS.has(ext) || ['AGENTS.md', 'CLAUDE.md', 'GEMINI.md', '.cursorrules'].includes(relativePath)) {
163
+ files.push(absolute);
164
+ }
165
+ }
166
+ }
167
+ function contextEntry(projectDir, scaleRoot, file) {
168
+ const content = safeRead(file);
169
+ const path = logicalContextPath(projectDir, scaleRoot, file);
170
+ const classification = classifyContextPath(path);
171
+ return {
172
+ path,
173
+ category: classification.category,
174
+ bytes: Buffer.byteLength(content, 'utf-8'),
175
+ estimatedTokens: estimateTokens(content),
176
+ reason: classification.reason,
177
+ };
178
+ }
179
+ export function classifyContextPath(path) {
180
+ const normalized = normalizePath(path);
181
+ const lower = normalized.toLowerCase();
182
+ if (['agents.md', 'claude.md', 'gemini.md', '.cursorrules'].includes(lower)) {
183
+ return { category: 'always', reason: 'agent entrypoint loaded at session start' };
184
+ }
185
+ if (/^\.scale\/(verification|skills|workflow|resource-policy|tool-policy|workspace|context-budget)\.json$/i.test(normalized)) {
186
+ return { category: 'always', reason: 'governance source-of-truth configuration' };
187
+ }
188
+ if (lower.includes('/evidence/') || lower.includes('/events/') || lower.startsWith('docs/worklog/tasks/')) {
189
+ return { category: 'evidence', reason: 'task or runtime evidence should be summarized and referenced' };
190
+ }
191
+ if (lower.endsWith('.html') || lower.includes('graphify-out/') || lower.includes('/resource-reports/')) {
192
+ return { category: 'generated', reason: 'generated artifact should stay manifest-only by default' };
193
+ }
194
+ if (lower.startsWith('docs/plans/') || lower.startsWith('docs/superpowers/') || lower.includes('roadmap') || lower.includes('optimization_plan') || lower.includes('changelog')) {
195
+ return { category: 'archive', reason: 'planning or historical context should be loaded only when requested' };
196
+ }
197
+ if (lower.includes('memory') || lower.includes('skill') || lower.includes('tool') || lower.includes('runtime') || lower.includes('resource')) {
198
+ return { category: 'on-demand', reason: 'domain-specific governance context loaded by trigger' };
199
+ }
200
+ return { category: 'on-demand', reason: 'project documentation loaded by task relevance' };
201
+ }
202
+ function summarize(entries) {
203
+ const byCategory = Object.fromEntries(CATEGORIES.map(category => [category, { files: 0, tokens: 0 }]));
204
+ for (const entry of entries) {
205
+ byCategory[entry.category].files += 1;
206
+ byCategory[entry.category].tokens += entry.estimatedTokens;
207
+ }
208
+ return {
209
+ totalFiles: entries.length,
210
+ totalTokens: entries.reduce((sum, entry) => sum + entry.estimatedTokens, 0),
211
+ byCategory,
212
+ alwaysTokens: byCategory.always.tokens,
213
+ onDemandTokens: byCategory['on-demand'].tokens,
214
+ };
215
+ }
216
+ function recommendations(summary, thresholds, entries) {
217
+ const output = [];
218
+ if (summary.alwaysTokens > thresholds.maxAlwaysTokens) {
219
+ output.push(`Reduce Always-loaded context from ${summary.alwaysTokens} to <= ${thresholds.maxAlwaysTokens} tokens.`);
220
+ }
221
+ const largest = entries.slice().sort((a, b) => b.estimatedTokens - a.estimatedTokens).slice(0, 3);
222
+ for (const entry of largest) {
223
+ if (entry.estimatedTokens > 1000 && entry.category !== 'archive') {
224
+ output.push(`Consider summarizing or demoting ${entry.path} (${entry.estimatedTokens} tokens).`);
225
+ }
226
+ }
227
+ if (summary.byCategory.generated.files > 0) {
228
+ output.push('Keep generated artifacts out of prompt context; load their manifests or summaries instead.');
229
+ }
230
+ return output;
231
+ }
232
+ function activationRules(task, files, level) {
233
+ const haystack = `${task} ${files.join(' ')} ${level}`.toLowerCase();
234
+ const rules = [
235
+ {
236
+ id: 'runtime-evidence',
237
+ category: 'evidence',
238
+ reason: 'Evidence is needed for completion and verification claims.',
239
+ matches: entry => entry.category === 'evidence',
240
+ },
241
+ ];
242
+ if (/skill|mcp|cli|browser|desktop|e2e|ui|ux|frontend/.test(haystack)) {
243
+ rules.push({
244
+ id: 'tool-and-skill-governance',
245
+ category: 'on-demand',
246
+ reason: 'Task mentions tool, skill, browser, desktop, E2E, or UI work.',
247
+ matches: entry => entry.category === 'on-demand' && /skill|tool|runtime|resource|engineering/i.test(entry.path),
248
+ });
249
+ }
250
+ if (/memory|knowledge|learn|contradiction|resume/.test(haystack)) {
251
+ rules.push({
252
+ id: 'memory-governance',
253
+ category: 'on-demand',
254
+ reason: 'Task needs project memory, knowledge recall, or contradiction handling.',
255
+ matches: entry => entry.category === 'on-demand' && /memory|knowledge/i.test(entry.path),
256
+ });
257
+ }
258
+ if (/plan|roadmap|architecture|review|critical|release/.test(haystack) || level.toUpperCase() === 'L' || level.toUpperCase() === 'CRITICAL') {
259
+ rules.push({
260
+ id: 'planning-archive',
261
+ category: 'archive',
262
+ reason: 'Task is high level or critical; archived plans may be relevant but remain budgeted.',
263
+ matches: entry => entry.category === 'archive',
264
+ });
265
+ }
266
+ return rules;
267
+ }
268
+ function section(id, category, included, reason, entries) {
269
+ return {
270
+ id,
271
+ category,
272
+ included,
273
+ estimatedTokens: entries.reduce((sum, entry) => sum + entry.estimatedTokens, 0),
274
+ reason,
275
+ paths: entries.map(entry => entry.path),
276
+ };
277
+ }
278
+ function dedupeSections(sections) {
279
+ const seenPaths = new Set();
280
+ return sections.map(section => {
281
+ const paths = section.paths.filter(path => {
282
+ if (seenPaths.has(path))
283
+ return false;
284
+ seenPaths.add(path);
285
+ return true;
286
+ });
287
+ return {
288
+ ...section,
289
+ paths,
290
+ estimatedTokens: paths.length === section.paths.length ? section.estimatedTokens : Math.ceil(section.estimatedTokens * (paths.length / Math.max(1, section.paths.length))),
291
+ };
292
+ }).filter(section => section.paths.length > 0 || section.id !== 'always-core');
293
+ }
294
+ function categoryIndex(category) {
295
+ return CATEGORIES.indexOf(category);
296
+ }
297
+ function safeRead(path) {
298
+ try {
299
+ return readFileSync(path, 'utf-8');
300
+ }
301
+ catch {
302
+ return '';
303
+ }
304
+ }
305
+ function normalizePath(path) {
306
+ return path.replace(/\\/g, '/');
307
+ }
308
+ function resolveScaleRoot(projectDir, scaleDir) {
309
+ return isAbsolute(scaleDir) ? scaleDir : resolve(projectDir, scaleDir);
310
+ }
311
+ function logicalContextPath(projectDir, scaleRoot, file) {
312
+ if (isWithin(projectDir, file))
313
+ return normalizePath(relative(projectDir, file));
314
+ if (isWithin(scaleRoot, file))
315
+ return normalizePath(join('.scale', relative(scaleRoot, file)));
316
+ return normalizePath(file);
317
+ }
318
+ function isWithin(root, target) {
319
+ const rel = relative(root, target);
320
+ return rel === '' || (!!rel && !rel.startsWith('..') && !isAbsolute(rel));
321
+ }
322
+ //# sourceMappingURL=ContextBudget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextBudget.js","sourceRoot":"","sources":["../../src/context/ContextBudget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,161 @@
1
+ export type WorkflowEvalCaseType = 'bugfix' | 'feature' | 'refactor' | 'security' | 'frontend' | 'release' | 'resource';
2
+ export type FailureReplayCategory = 'wrong-exploration-path' | 'hallucinated-project-fact' | 'missing-codegraph-or-graph-fallback' | 'over-broad-context-load' | 'bad-skill-recommendation' | 'missing-verification-evidence' | 'failed-security-or-resource-gate' | 'human-correction-after-agent-confidence' | 'command-failure' | 'unknown';
3
+ export interface WorkflowEvalAttempt {
4
+ id?: string;
5
+ command: string;
6
+ expectedExitCode?: number;
7
+ outputContains?: string;
8
+ timeoutMs?: number;
9
+ }
10
+ export interface WorkflowEvalCase {
11
+ id: string;
12
+ type: WorkflowEvalCaseType;
13
+ title: string;
14
+ task: string;
15
+ phase?: string;
16
+ successCriteria?: string[];
17
+ attempts: WorkflowEvalAttempt[];
18
+ expectedFailureCategory?: FailureReplayCategory;
19
+ humanCorrections?: number;
20
+ estimatedContextTokens?: number;
21
+ }
22
+ export interface WorkflowEvalSuite {
23
+ version: string;
24
+ id: string;
25
+ name: string;
26
+ cases: WorkflowEvalCase[];
27
+ }
28
+ export interface WorkflowEvalAttemptResult {
29
+ id: string;
30
+ command: string;
31
+ expectedExitCode: number;
32
+ exitCode: number;
33
+ passed: boolean;
34
+ durationMs: number;
35
+ outputSummary: string;
36
+ redactionApplied: boolean;
37
+ }
38
+ export interface WorkflowEvalCaseResult {
39
+ id: string;
40
+ type: WorkflowEvalCaseType;
41
+ title: string;
42
+ task: string;
43
+ passed: boolean;
44
+ passAt1: boolean;
45
+ passAt3: boolean;
46
+ fixIterations: number;
47
+ humanCorrections: number;
48
+ estimatedTokens: number;
49
+ toolCalls: number;
50
+ attempts: WorkflowEvalAttemptResult[];
51
+ failureReplayIds: string[];
52
+ }
53
+ export interface WorkflowEvalMetrics {
54
+ total: number;
55
+ passed: number;
56
+ failed: number;
57
+ passAt1: number;
58
+ passAt3: number;
59
+ passAt1Rate: number;
60
+ passAt3Rate: number;
61
+ averageFixIterations: number;
62
+ totalToolCalls: number;
63
+ estimatedTokens: number;
64
+ humanCorrections: number;
65
+ failureReplayCount: number;
66
+ }
67
+ export interface WorkflowEvalRun {
68
+ id: string;
69
+ suiteId: string;
70
+ generatedAt: string;
71
+ projectDir: string;
72
+ ok: boolean;
73
+ cases: WorkflowEvalCaseResult[];
74
+ metrics: WorkflowEvalMetrics;
75
+ failureReplayIds: string[];
76
+ }
77
+ export interface FailureReplayRecord {
78
+ id: string;
79
+ taskId: string;
80
+ suiteId: string;
81
+ caseId: string;
82
+ generatedAt: string;
83
+ category: FailureReplayCategory;
84
+ phase: string;
85
+ task: string;
86
+ wrongTurn: string;
87
+ evidence: string;
88
+ correction: string;
89
+ prevention: string;
90
+ replayCommand?: string;
91
+ status: 'open' | 'promoted' | 'accepted-risk' | 'closed';
92
+ redactionApplied: boolean;
93
+ }
94
+ export interface FailureImprovementCandidate {
95
+ id: string;
96
+ failureId: string;
97
+ createdAt: string;
98
+ category: FailureReplayCategory;
99
+ title: string;
100
+ recommendation: string;
101
+ evidencePath: string;
102
+ status: 'candidate';
103
+ }
104
+ export interface WorkflowEvalComparison {
105
+ baseline: Pick<WorkflowEvalRun, 'id' | 'suiteId' | 'metrics'>;
106
+ candidate: Pick<WorkflowEvalRun, 'id' | 'suiteId' | 'metrics'>;
107
+ delta: {
108
+ passAt1Rate: number;
109
+ passAt3Rate: number;
110
+ averageFixIterations: number;
111
+ totalToolCalls: number;
112
+ estimatedTokens: number;
113
+ humanCorrections: number;
114
+ };
115
+ recommendation: 'improved' | 'regressed' | 'mixed' | 'same';
116
+ }
117
+ export interface WorkflowEvalStoreOptions {
118
+ projectDir?: string;
119
+ scaleDir?: string;
120
+ }
121
+ export declare function defaultWorkflowEvalSuite(): WorkflowEvalSuite;
122
+ export declare class WorkflowEvalStore {
123
+ readonly projectDir: string;
124
+ readonly scaleRoot: string;
125
+ readonly evalRoot: string;
126
+ readonly suitesDir: string;
127
+ readonly runsDir: string;
128
+ readonly failuresDir: string;
129
+ readonly improvementsDir: string;
130
+ constructor(options?: WorkflowEvalStoreOptions);
131
+ initSuite(suiteId?: string, force?: boolean): {
132
+ path: string;
133
+ written: boolean;
134
+ suite: WorkflowEvalSuite;
135
+ };
136
+ loadSuite(suiteIdOrPath?: string): WorkflowEvalSuite;
137
+ saveRun(run: WorkflowEvalRun): string;
138
+ saveFailure(record: FailureReplayRecord): string;
139
+ listFailures(query?: {
140
+ taskId?: string;
141
+ sinceDays?: number;
142
+ }): FailureReplayRecord[];
143
+ getFailure(id: string): FailureReplayRecord | null;
144
+ loadRun(idOrPath: string): WorkflowEvalRun;
145
+ promoteFailure(id: string): FailureImprovementCandidate;
146
+ suitePath(suiteId: string): string;
147
+ private resolveSuitePath;
148
+ private resolveRunPath;
149
+ }
150
+ export declare function runWorkflowEvalSuite(options?: WorkflowEvalStoreOptions & {
151
+ suite?: string;
152
+ }): Promise<{
153
+ run: WorkflowEvalRun;
154
+ runPath: string;
155
+ failurePaths: string[];
156
+ }>;
157
+ export declare function compareWorkflowEvalRuns(options: WorkflowEvalStoreOptions & {
158
+ baseline: string;
159
+ candidate: string;
160
+ }): WorkflowEvalComparison;
161
+ export declare function renderWorkflowEvalReport(run: WorkflowEvalRun): string;