@ttfw/envoi 1.0.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.
- package/README.md +238 -0
- package/dist/commands/app.d.ts +2 -0
- package/dist/commands/app.d.ts.map +1 -0
- package/dist/commands/app.js +31 -0
- package/dist/commands/app.js.map +1 -0
- package/dist/commands/autonomy.d.ts +6 -0
- package/dist/commands/autonomy.d.ts.map +1 -0
- package/dist/commands/autonomy.js +89 -0
- package/dist/commands/autonomy.js.map +1 -0
- package/dist/commands/builder.d.ts +13 -0
- package/dist/commands/builder.d.ts.map +1 -0
- package/dist/commands/builder.js +142 -0
- package/dist/commands/builder.js.map +1 -0
- package/dist/commands/idea.d.ts +12 -0
- package/dist/commands/idea.d.ts.map +1 -0
- package/dist/commands/idea.js +79 -0
- package/dist/commands/idea.js.map +1 -0
- package/dist/commands/init.d.ts +18 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +423 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/mode.d.ts +13 -0
- package/dist/commands/mode.d.ts.map +1 -0
- package/dist/commands/mode.js +96 -0
- package/dist/commands/mode.js.map +1 -0
- package/dist/commands/onboard.d.ts +37 -0
- package/dist/commands/onboard.d.ts.map +1 -0
- package/dist/commands/onboard.js +743 -0
- package/dist/commands/onboard.js.map +1 -0
- package/dist/commands/pr-note.d.ts +8 -0
- package/dist/commands/pr-note.d.ts.map +1 -0
- package/dist/commands/pr-note.js +27 -0
- package/dist/commands/pr-note.js.map +1 -0
- package/dist/commands/undo.d.ts +7 -0
- package/dist/commands/undo.d.ts.map +1 -0
- package/dist/commands/undo.js +59 -0
- package/dist/commands/undo.js.map +1 -0
- package/dist/commands/update.d.ts +24 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +248 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/constants/report_codes.d.ts +29 -0
- package/dist/constants/report_codes.d.ts.map +1 -0
- package/dist/constants/report_codes.js +69 -0
- package/dist/constants/report_codes.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +675 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/autonomy.d.ts +16 -0
- package/dist/lib/autonomy.d.ts.map +1 -0
- package/dist/lib/autonomy.js +38 -0
- package/dist/lib/autonomy.js.map +1 -0
- package/dist/lib/blocked.d.ts +87 -0
- package/dist/lib/blocked.d.ts.map +1 -0
- package/dist/lib/blocked.js +134 -0
- package/dist/lib/blocked.js.map +1 -0
- package/dist/lib/branding.d.ts +13 -0
- package/dist/lib/branding.d.ts.map +1 -0
- package/dist/lib/branding.js +19 -0
- package/dist/lib/branding.js.map +1 -0
- package/dist/lib/claude.d.ts +42 -0
- package/dist/lib/claude.d.ts.map +1 -0
- package/dist/lib/claude.js +291 -0
- package/dist/lib/claude.js.map +1 -0
- package/dist/lib/config.d.ts +71 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +410 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/diff.d.ts +150 -0
- package/dist/lib/diff.d.ts.map +1 -0
- package/dist/lib/diff.js +257 -0
- package/dist/lib/diff.js.map +1 -0
- package/dist/lib/doctor.d.ts +67 -0
- package/dist/lib/doctor.d.ts.map +1 -0
- package/dist/lib/doctor.js +211 -0
- package/dist/lib/doctor.js.map +1 -0
- package/dist/lib/fingerprint.d.ts +27 -0
- package/dist/lib/fingerprint.d.ts.map +1 -0
- package/dist/lib/fingerprint.js +116 -0
- package/dist/lib/fingerprint.js.map +1 -0
- package/dist/lib/fs.d.ts +93 -0
- package/dist/lib/fs.d.ts.map +1 -0
- package/dist/lib/fs.js +179 -0
- package/dist/lib/fs.js.map +1 -0
- package/dist/lib/git.d.ts +177 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +355 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/git_branching.d.ts +84 -0
- package/dist/lib/git_branching.d.ts.map +1 -0
- package/dist/lib/git_branching.js +327 -0
- package/dist/lib/git_branching.js.map +1 -0
- package/dist/lib/gitignore.d.ts +26 -0
- package/dist/lib/gitignore.d.ts.map +1 -0
- package/dist/lib/gitignore.js +119 -0
- package/dist/lib/gitignore.js.map +1 -0
- package/dist/lib/guardrails.d.ts +232 -0
- package/dist/lib/guardrails.d.ts.map +1 -0
- package/dist/lib/guardrails.js +323 -0
- package/dist/lib/guardrails.js.map +1 -0
- package/dist/lib/history.d.ts +110 -0
- package/dist/lib/history.d.ts.map +1 -0
- package/dist/lib/history.js +236 -0
- package/dist/lib/history.js.map +1 -0
- package/dist/lib/index.d.ts +29 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +29 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/json-extract.d.ts +42 -0
- package/dist/lib/json-extract.d.ts.map +1 -0
- package/dist/lib/json-extract.js +201 -0
- package/dist/lib/json-extract.js.map +1 -0
- package/dist/lib/judge.d.ts +237 -0
- package/dist/lib/judge.d.ts.map +1 -0
- package/dist/lib/judge.js +501 -0
- package/dist/lib/judge.js.map +1 -0
- package/dist/lib/lock.d.ts +79 -0
- package/dist/lib/lock.d.ts.map +1 -0
- package/dist/lib/lock.js +254 -0
- package/dist/lib/lock.js.map +1 -0
- package/dist/lib/migration.d.ts +9 -0
- package/dist/lib/migration.d.ts.map +1 -0
- package/dist/lib/migration.js +74 -0
- package/dist/lib/migration.js.map +1 -0
- package/dist/lib/paths.d.ts +18 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +27 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/lib/preflight.d.ts +33 -0
- package/dist/lib/preflight.d.ts.map +1 -0
- package/dist/lib/preflight.js +177 -0
- package/dist/lib/preflight.js.map +1 -0
- package/dist/lib/prompt_budget.d.ts +18 -0
- package/dist/lib/prompt_budget.d.ts.map +1 -0
- package/dist/lib/prompt_budget.js +36 -0
- package/dist/lib/prompt_budget.js.map +1 -0
- package/dist/lib/report.d.ts +102 -0
- package/dist/lib/report.d.ts.map +1 -0
- package/dist/lib/report.js +347 -0
- package/dist/lib/report.js.map +1 -0
- package/dist/lib/reviewer-flow.d.ts +80 -0
- package/dist/lib/reviewer-flow.d.ts.map +1 -0
- package/dist/lib/reviewer-flow.js +138 -0
- package/dist/lib/reviewer-flow.js.map +1 -0
- package/dist/lib/reviewer.d.ts +53 -0
- package/dist/lib/reviewer.d.ts.map +1 -0
- package/dist/lib/reviewer.js +199 -0
- package/dist/lib/reviewer.js.map +1 -0
- package/dist/lib/risk.d.ts +127 -0
- package/dist/lib/risk.d.ts.map +1 -0
- package/dist/lib/risk.js +192 -0
- package/dist/lib/risk.js.map +1 -0
- package/dist/lib/rollback.d.ts +143 -0
- package/dist/lib/rollback.d.ts.map +1 -0
- package/dist/lib/rollback.js +244 -0
- package/dist/lib/rollback.js.map +1 -0
- package/dist/lib/schema.d.ts +47 -0
- package/dist/lib/schema.d.ts.map +1 -0
- package/dist/lib/schema.js +91 -0
- package/dist/lib/schema.js.map +1 -0
- package/dist/lib/scope.d.ts +89 -0
- package/dist/lib/scope.d.ts.map +1 -0
- package/dist/lib/scope.js +135 -0
- package/dist/lib/scope.js.map +1 -0
- package/dist/lib/self_update.d.ts +13 -0
- package/dist/lib/self_update.d.ts.map +1 -0
- package/dist/lib/self_update.js +172 -0
- package/dist/lib/self_update.js.map +1 -0
- package/dist/lib/state.d.ts +143 -0
- package/dist/lib/state.d.ts.map +1 -0
- package/dist/lib/state.js +258 -0
- package/dist/lib/state.js.map +1 -0
- package/dist/lib/tick.d.ts +310 -0
- package/dist/lib/tick.d.ts.map +1 -0
- package/dist/lib/tick.js +424 -0
- package/dist/lib/tick.js.map +1 -0
- package/dist/lib/transport.d.ts +145 -0
- package/dist/lib/transport.d.ts.map +1 -0
- package/dist/lib/transport.js +237 -0
- package/dist/lib/transport.js.map +1 -0
- package/dist/lib/verdict_labels.d.ts +5 -0
- package/dist/lib/verdict_labels.d.ts.map +1 -0
- package/dist/lib/verdict_labels.js +25 -0
- package/dist/lib/verdict_labels.js.map +1 -0
- package/dist/lib/verify-safety.d.ts +63 -0
- package/dist/lib/verify-safety.d.ts.map +1 -0
- package/dist/lib/verify-safety.js +123 -0
- package/dist/lib/verify-safety.js.map +1 -0
- package/dist/lib/verify.d.ts +139 -0
- package/dist/lib/verify.d.ts.map +1 -0
- package/dist/lib/verify.js +311 -0
- package/dist/lib/verify.js.map +1 -0
- package/dist/lib/workspace_state.d.ts +79 -0
- package/dist/lib/workspace_state.d.ts.map +1 -0
- package/dist/lib/workspace_state.js +283 -0
- package/dist/lib/workspace_state.js.map +1 -0
- package/dist/runner/builder.d.ts +58 -0
- package/dist/runner/builder.d.ts.map +1 -0
- package/dist/runner/builder.js +775 -0
- package/dist/runner/builder.js.map +1 -0
- package/dist/runner/builder_parse.d.ts +37 -0
- package/dist/runner/builder_parse.d.ts.map +1 -0
- package/dist/runner/builder_parse.js +76 -0
- package/dist/runner/builder_parse.js.map +1 -0
- package/dist/runner/index.d.ts +9 -0
- package/dist/runner/index.d.ts.map +1 -0
- package/dist/runner/index.js +7 -0
- package/dist/runner/index.js.map +1 -0
- package/dist/runner/loop.d.ts +51 -0
- package/dist/runner/loop.d.ts.map +1 -0
- package/dist/runner/loop.js +221 -0
- package/dist/runner/loop.js.map +1 -0
- package/dist/runner/orchestrator.d.ts +67 -0
- package/dist/runner/orchestrator.d.ts.map +1 -0
- package/dist/runner/orchestrator.js +376 -0
- package/dist/runner/orchestrator.js.map +1 -0
- package/dist/runner/tick.d.ts +10 -0
- package/dist/runner/tick.d.ts.map +1 -0
- package/dist/runner/tick.js +1639 -0
- package/dist/runner/tick.js.map +1 -0
- package/dist/types/blocked.d.ts +52 -0
- package/dist/types/blocked.d.ts.map +1 -0
- package/dist/types/blocked.js +8 -0
- package/dist/types/blocked.js.map +1 -0
- package/dist/types/builder.d.ts +25 -0
- package/dist/types/builder.d.ts.map +1 -0
- package/dist/types/builder.js +7 -0
- package/dist/types/builder.js.map +1 -0
- package/dist/types/claude.d.ts +86 -0
- package/dist/types/claude.d.ts.map +1 -0
- package/dist/types/claude.js +48 -0
- package/dist/types/claude.js.map +1 -0
- package/dist/types/config.d.ts +384 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +7 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +18 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/lock.d.ts +21 -0
- package/dist/types/lock.d.ts.map +1 -0
- package/dist/types/lock.js +8 -0
- package/dist/types/lock.js.map +1 -0
- package/dist/types/preflight.d.ts +49 -0
- package/dist/types/preflight.d.ts.map +1 -0
- package/dist/types/preflight.js +8 -0
- package/dist/types/preflight.js.map +1 -0
- package/dist/types/report.d.ts +161 -0
- package/dist/types/report.d.ts.map +1 -0
- package/dist/types/report.js +8 -0
- package/dist/types/report.js.map +1 -0
- package/dist/types/reviewer.d.ts +66 -0
- package/dist/types/reviewer.d.ts.map +1 -0
- package/dist/types/reviewer.js +5 -0
- package/dist/types/reviewer.js.map +1 -0
- package/dist/types/state.d.ts +124 -0
- package/dist/types/state.d.ts.map +1 -0
- package/dist/types/state.js +20 -0
- package/dist/types/state.js.map +1 -0
- package/dist/types/task.d.ts +117 -0
- package/dist/types/task.d.ts.map +1 -0
- package/dist/types/task.js +7 -0
- package/dist/types/task.js.map +1 -0
- package/dist/types/workspace_state.d.ts +125 -0
- package/dist/types/workspace_state.d.ts.map +1 -0
- package/dist/types/workspace_state.js +10 -0
- package/dist/types/workspace_state.js.map +1 -0
- package/envoi.config.json +191 -0
- package/package.json +52 -0
- package/relais/prompts/.gitkeep +0 -0
- package/relais/prompts/builder.system.txt +13 -0
- package/relais/prompts/builder.user.txt +15 -0
- package/relais/prompts/orchestrator.system.txt +37 -0
- package/relais/prompts/orchestrator.user.txt +34 -0
- package/relais/prompts/reviewer.system.txt +33 -0
- package/relais/prompts/reviewer.user.txt +35 -0
- package/relais/schemas/.gitkeep +0 -0
- package/relais/schemas/builder_result.schema.json +29 -0
- package/relais/schemas/report.schema.json +195 -0
- package/relais/schemas/reviewer_result.schema.json +70 -0
- package/relais/schemas/task.schema.json +155 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt budgeting helpers to keep context payloads bounded and deterministic.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Truncates a prompt section to a max size with a deterministic marker.
|
|
6
|
+
*
|
|
7
|
+
* Strategy:
|
|
8
|
+
* - keep the beginning (usually most structural context)
|
|
9
|
+
* - keep the tail (usually latest status/error detail)
|
|
10
|
+
* - insert a deterministic marker between both
|
|
11
|
+
*/
|
|
12
|
+
export function truncatePromptSection(sectionName, value, maxChars) {
|
|
13
|
+
const effectiveMax = Math.max(0, maxChars);
|
|
14
|
+
if (value.length <= effectiveMax) {
|
|
15
|
+
return { text: value, truncated: false, originalChars: value.length };
|
|
16
|
+
}
|
|
17
|
+
const marker = `\n\n[TRUNCATED ${sectionName}: kept head+tail within ${effectiveMax} of ${value.length} chars]\n\n`;
|
|
18
|
+
const keep = Math.max(0, effectiveMax - marker.length);
|
|
19
|
+
if (keep === 0) {
|
|
20
|
+
return {
|
|
21
|
+
text: marker.slice(0, effectiveMax),
|
|
22
|
+
truncated: true,
|
|
23
|
+
originalChars: value.length,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
const headKeep = Math.max(1, Math.floor(keep * 0.7));
|
|
27
|
+
const tailKeep = Math.max(0, keep - headKeep);
|
|
28
|
+
const head = value.slice(0, headKeep);
|
|
29
|
+
const tail = tailKeep > 0 ? value.slice(value.length - tailKeep) : '';
|
|
30
|
+
return {
|
|
31
|
+
text: head + marker + tail,
|
|
32
|
+
truncated: true,
|
|
33
|
+
originalChars: value.length,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=prompt_budget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt_budget.js","sourceRoot":"","sources":["../../src/lib/prompt_budget.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,WAAmB,EACnB,KAAa,EACb,QAAgB;IAEhB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC3C,IAAI,KAAK,CAAC,MAAM,IAAI,YAAY,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IACxE,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,WAAW,2BAA2B,YAAY,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC;IACpH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACf,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC;YACnC,SAAS,EAAE,IAAI;YACf,aAAa,EAAE,KAAK,CAAC,MAAM;SAC5B,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtE,OAAO;QACL,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI;QAC1B,SAAS,EAAE,IAAI;QACf,aAAa,EAAE,KAAK,CAAC,MAAM;KAC5B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Report generation module for envoi tick execution results.
|
|
3
|
+
*
|
|
4
|
+
* Provides functions to generate REPORT.json containing complete tick data:
|
|
5
|
+
* run_id, timestamps, task info, verdict, code, blast_radius, scope check,
|
|
6
|
+
* diff, verification results, and budgets.
|
|
7
|
+
*/
|
|
8
|
+
import type { ReportData, Verdict, ReportCode, BudgetInfo } from '../types/report.js';
|
|
9
|
+
import type { TickState } from '../types/state.js';
|
|
10
|
+
import type { DiffAnalysis } from './diff.js';
|
|
11
|
+
import type { ScopeCheckResult } from './scope.js';
|
|
12
|
+
import type { VerificationRun as VerifyRun } from './verify.js';
|
|
13
|
+
import type { VerificationTemplate } from '../types/config.js';
|
|
14
|
+
/**
|
|
15
|
+
* Generates a unique run ID for a tick.
|
|
16
|
+
*
|
|
17
|
+
* Format: timestamp + random suffix (hex encoded)
|
|
18
|
+
* Example: "20250128T123456Z-a1b2c3d4e5f6..."
|
|
19
|
+
*
|
|
20
|
+
* @returns A unique identifier string
|
|
21
|
+
*/
|
|
22
|
+
export declare function generateRunId(): string;
|
|
23
|
+
/**
|
|
24
|
+
* Tick data required to build a complete report.
|
|
25
|
+
*/
|
|
26
|
+
export interface TickReportData {
|
|
27
|
+
/** Tick state */
|
|
28
|
+
state: TickState;
|
|
29
|
+
/** Verdict */
|
|
30
|
+
verdict: Verdict;
|
|
31
|
+
/** Report code */
|
|
32
|
+
code: ReportCode;
|
|
33
|
+
/** Head commit SHA (may differ from base_commit if HEAD moved) */
|
|
34
|
+
head_commit: string;
|
|
35
|
+
/** Diff analysis results */
|
|
36
|
+
diff_analysis?: DiffAnalysis;
|
|
37
|
+
/** Scope check results */
|
|
38
|
+
scope_check?: ScopeCheckResult;
|
|
39
|
+
/** Verification runs (from verify.ts) */
|
|
40
|
+
verification_runs?: VerifyRun[];
|
|
41
|
+
/** Verification templates map (for transforming verification runs) */
|
|
42
|
+
verification_templates?: Map<string, VerificationTemplate>;
|
|
43
|
+
/** Verification log file path */
|
|
44
|
+
verify_log_path?: string;
|
|
45
|
+
/** Diff patch file path */
|
|
46
|
+
diff_patch_path?: string;
|
|
47
|
+
/** Budget information */
|
|
48
|
+
budgets?: BudgetInfo;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Builds a complete report from tick execution data.
|
|
52
|
+
*
|
|
53
|
+
* @param tickData - Complete tick data including state, verdict, diff, scope, verification, budgets
|
|
54
|
+
* @returns Complete ReportData matching report.schema.json
|
|
55
|
+
*/
|
|
56
|
+
export declare function buildReport(tickData: TickReportData): ReportData;
|
|
57
|
+
/**
|
|
58
|
+
* Writes a report to a file atomically.
|
|
59
|
+
*
|
|
60
|
+
* Uses atomicWriteJson from fs.ts to ensure crash-safe writes.
|
|
61
|
+
*
|
|
62
|
+
* @param report - Report data to write
|
|
63
|
+
* @param filePath - Path to write the report file
|
|
64
|
+
* @returns Promise that resolves when write completes
|
|
65
|
+
* @throws {Error} If the write operation fails
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```typescript
|
|
69
|
+
* const report = buildReport(tickData);
|
|
70
|
+
* await writeReport(report, '/path/to/REPORT.json');
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export declare function writeReport(report: ReportData, filePath: string): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Renders report data as markdown.
|
|
76
|
+
*
|
|
77
|
+
* Generates a deterministic, human-readable markdown representation
|
|
78
|
+
* of the report data. Same input always produces same output.
|
|
79
|
+
*
|
|
80
|
+
* @param report - Report data to render
|
|
81
|
+
* @returns Markdown string
|
|
82
|
+
*/
|
|
83
|
+
export declare function renderReportMarkdown(report: ReportData): string;
|
|
84
|
+
/**
|
|
85
|
+
* Atomically writes markdown content to a file.
|
|
86
|
+
*
|
|
87
|
+
* Uses the same write-tmp-fsync-rename pattern as atomicWriteJson
|
|
88
|
+
* to ensure crash-safe writes.
|
|
89
|
+
*
|
|
90
|
+
* @param content - Markdown content to write
|
|
91
|
+
* @param filePath - Path to write the markdown file
|
|
92
|
+
* @returns Promise that resolves when write completes
|
|
93
|
+
* @throws {AtomicFsError} If the write operation fails
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```typescript
|
|
97
|
+
* const markdown = renderReportMarkdown(report);
|
|
98
|
+
* await writeReportMarkdown(markdown, '/path/to/REPORT.md');
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
export declare function writeReportMarkdown(content: string, filePath: string): Promise<void>;
|
|
102
|
+
//# sourceMappingURL=report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/lib/report.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAA0D,UAAU,EAAyD,MAAM,oBAAoB,CAAC;AACrM,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAK/D;;;;;;;GAOG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAQtC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,iBAAiB;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,cAAc;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB;IAClB,IAAI,EAAE,UAAU,CAAC;IACjB,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,0BAA0B;IAC1B,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,yCAAyC;IACzC,iBAAiB,CAAC,EAAE,SAAS,EAAE,CAAC;IAChC,sEAAsE;IACtE,sBAAsB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC3D,iCAAiC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2BAA2B;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yBAAyB;IACzB,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB;AAqDD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,UAAU,CAqGhE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErF;AAaD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CA+F/D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6C1F"}
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Report generation module for envoi tick execution results.
|
|
3
|
+
*
|
|
4
|
+
* Provides functions to generate REPORT.json containing complete tick data:
|
|
5
|
+
* run_id, timestamps, task info, verdict, code, blast_radius, scope check,
|
|
6
|
+
* diff, verification results, and budgets.
|
|
7
|
+
*/
|
|
8
|
+
import { randomBytes } from 'node:crypto';
|
|
9
|
+
import { open, rename, unlink } from 'node:fs/promises';
|
|
10
|
+
import { atomicWriteJson, AtomicFsError } from './fs.js';
|
|
11
|
+
import { formatDisplayState } from './verdict_labels.js';
|
|
12
|
+
/**
|
|
13
|
+
* Generates a unique run ID for a tick.
|
|
14
|
+
*
|
|
15
|
+
* Format: timestamp + random suffix (hex encoded)
|
|
16
|
+
* Example: "20250128T123456Z-a1b2c3d4e5f6..."
|
|
17
|
+
*
|
|
18
|
+
* @returns A unique identifier string
|
|
19
|
+
*/
|
|
20
|
+
export function generateRunId() {
|
|
21
|
+
// Generate timestamp prefix (ISO format without colons)
|
|
22
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-').replace('T', 'T').substring(0, 19) + 'Z';
|
|
23
|
+
// Generate 8 random bytes and encode as hex (16 chars)
|
|
24
|
+
const randomSuffix = randomBytes(8).toString('hex');
|
|
25
|
+
return `${timestamp}-${randomSuffix}`;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Transforms verification runs from verify.ts format to report format.
|
|
29
|
+
*
|
|
30
|
+
* @param runs - Verification runs from verify.ts
|
|
31
|
+
* @param templates - Map of verification templates
|
|
32
|
+
* @param task - Task containing verification configuration
|
|
33
|
+
* @returns Array of verification runs in report format
|
|
34
|
+
*/
|
|
35
|
+
function transformVerificationRuns(runs, templates, task) {
|
|
36
|
+
if (!task) {
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
const result = [];
|
|
40
|
+
const fastSet = new Set(task.verification.fast);
|
|
41
|
+
const slowSet = new Set(task.verification.slow);
|
|
42
|
+
for (const run of runs) {
|
|
43
|
+
const template = templates.get(run.template_id);
|
|
44
|
+
if (!template) {
|
|
45
|
+
// Skip runs without templates
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
// Determine phase based on task verification config
|
|
49
|
+
const phase = fastSet.has(run.template_id) ? 'fast' : slowSet.has(run.template_id) ? 'slow' : 'fast';
|
|
50
|
+
// Get args from template (they may have been interpolated, but we store original)
|
|
51
|
+
const args = template.args || [];
|
|
52
|
+
// Determine if timed out (exit code 124 is standard timeout code)
|
|
53
|
+
const timed_out = run.exit_code === 124;
|
|
54
|
+
result.push({
|
|
55
|
+
template_id: run.template_id,
|
|
56
|
+
phase,
|
|
57
|
+
cmd: template.cmd,
|
|
58
|
+
args,
|
|
59
|
+
exit_code: run.exit_code,
|
|
60
|
+
duration_ms: run.duration_ms,
|
|
61
|
+
timed_out,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Builds a complete report from tick execution data.
|
|
68
|
+
*
|
|
69
|
+
* @param tickData - Complete tick data including state, verdict, diff, scope, verification, budgets
|
|
70
|
+
* @returns Complete ReportData matching report.schema.json
|
|
71
|
+
*/
|
|
72
|
+
export function buildReport(tickData) {
|
|
73
|
+
const { state, verdict, code, head_commit, diff_analysis, scope_check, verification_runs, verification_templates, verify_log_path, diff_patch_path, budgets } = tickData;
|
|
74
|
+
const ended_at = new Date().toISOString();
|
|
75
|
+
const started_at = new Date(state.started_at);
|
|
76
|
+
const ended_at_date = new Date(ended_at);
|
|
77
|
+
const duration_ms = Math.max(0, ended_at_date.getTime() - started_at.getTime());
|
|
78
|
+
// Build task summary
|
|
79
|
+
const task = state.task
|
|
80
|
+
? {
|
|
81
|
+
task_id: state.task.task_id,
|
|
82
|
+
milestone_id: state.task.milestone_id,
|
|
83
|
+
task_kind: state.task.task_kind,
|
|
84
|
+
intent: state.task.intent,
|
|
85
|
+
}
|
|
86
|
+
: {
|
|
87
|
+
task_id: 'none',
|
|
88
|
+
milestone_id: 'none',
|
|
89
|
+
task_kind: 'execute',
|
|
90
|
+
intent: 'No task assigned',
|
|
91
|
+
};
|
|
92
|
+
// Build blast radius from diff analysis
|
|
93
|
+
const blast_radius = diff_analysis
|
|
94
|
+
? {
|
|
95
|
+
files_touched: diff_analysis.files_touched,
|
|
96
|
+
lines_added: diff_analysis.lines_added,
|
|
97
|
+
lines_deleted: diff_analysis.lines_deleted,
|
|
98
|
+
new_files: diff_analysis.new_files,
|
|
99
|
+
}
|
|
100
|
+
: {
|
|
101
|
+
files_touched: 0,
|
|
102
|
+
lines_added: 0,
|
|
103
|
+
lines_deleted: 0,
|
|
104
|
+
new_files: 0,
|
|
105
|
+
};
|
|
106
|
+
// Build scope result
|
|
107
|
+
const scope = scope_check
|
|
108
|
+
? {
|
|
109
|
+
ok: scope_check.ok,
|
|
110
|
+
violations: scope_check.violations.map((v) => v.detail),
|
|
111
|
+
touched_paths: scope_check.touched_paths,
|
|
112
|
+
}
|
|
113
|
+
: {
|
|
114
|
+
ok: true,
|
|
115
|
+
violations: [],
|
|
116
|
+
touched_paths: [],
|
|
117
|
+
};
|
|
118
|
+
// Build diff info
|
|
119
|
+
const diff = diff_analysis
|
|
120
|
+
? {
|
|
121
|
+
files_changed: diff_analysis.files_touched,
|
|
122
|
+
lines_changed: diff_analysis.lines_added + diff_analysis.lines_deleted,
|
|
123
|
+
diff_patch_path: diff_patch_path || '',
|
|
124
|
+
}
|
|
125
|
+
: {
|
|
126
|
+
files_changed: 0,
|
|
127
|
+
lines_changed: 0,
|
|
128
|
+
diff_patch_path: diff_patch_path || '',
|
|
129
|
+
};
|
|
130
|
+
// Build verification result
|
|
131
|
+
const verification = {
|
|
132
|
+
exec_mode: 'argv_no_shell',
|
|
133
|
+
runs: verification_runs && verification_templates && state.task
|
|
134
|
+
? transformVerificationRuns(verification_runs, verification_templates, state.task)
|
|
135
|
+
: [],
|
|
136
|
+
verify_log_path: verify_log_path || '',
|
|
137
|
+
};
|
|
138
|
+
// Build budgets
|
|
139
|
+
const budgets_data = budgets || {
|
|
140
|
+
milestone_id: state.task?.milestone_id || 'none',
|
|
141
|
+
ticks: 0,
|
|
142
|
+
orchestrator_calls: 0,
|
|
143
|
+
builder_calls: 0,
|
|
144
|
+
verify_runs: verification_runs?.length || 0,
|
|
145
|
+
estimated_cost_usd: 0,
|
|
146
|
+
warnings: [],
|
|
147
|
+
};
|
|
148
|
+
return {
|
|
149
|
+
run_id: state.run_id,
|
|
150
|
+
started_at: state.started_at,
|
|
151
|
+
ended_at,
|
|
152
|
+
duration_ms,
|
|
153
|
+
base_commit: state.base_commit,
|
|
154
|
+
head_commit,
|
|
155
|
+
task,
|
|
156
|
+
verdict,
|
|
157
|
+
code,
|
|
158
|
+
blast_radius,
|
|
159
|
+
scope,
|
|
160
|
+
diff,
|
|
161
|
+
verification,
|
|
162
|
+
budgets: budgets_data,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Writes a report to a file atomically.
|
|
167
|
+
*
|
|
168
|
+
* Uses atomicWriteJson from fs.ts to ensure crash-safe writes.
|
|
169
|
+
*
|
|
170
|
+
* @param report - Report data to write
|
|
171
|
+
* @param filePath - Path to write the report file
|
|
172
|
+
* @returns Promise that resolves when write completes
|
|
173
|
+
* @throws {Error} If the write operation fails
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
* ```typescript
|
|
177
|
+
* const report = buildReport(tickData);
|
|
178
|
+
* await writeReport(report, '/path/to/REPORT.json');
|
|
179
|
+
* ```
|
|
180
|
+
*/
|
|
181
|
+
export async function writeReport(report, filePath) {
|
|
182
|
+
await atomicWriteJson(filePath, report);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Formats verdict and code for markdown display.
|
|
186
|
+
*
|
|
187
|
+
* @param verdict - The verdict value
|
|
188
|
+
* @param code - The report code
|
|
189
|
+
* @returns Formatted verdict string
|
|
190
|
+
*/
|
|
191
|
+
function formatVerdict(verdict, code) {
|
|
192
|
+
return formatDisplayState(verdict, code);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Renders report data as markdown.
|
|
196
|
+
*
|
|
197
|
+
* Generates a deterministic, human-readable markdown representation
|
|
198
|
+
* of the report data. Same input always produces same output.
|
|
199
|
+
*
|
|
200
|
+
* @param report - Report data to render
|
|
201
|
+
* @returns Markdown string
|
|
202
|
+
*/
|
|
203
|
+
export function renderReportMarkdown(report) {
|
|
204
|
+
const lines = [];
|
|
205
|
+
// Header
|
|
206
|
+
lines.push('# Envoi Run Report');
|
|
207
|
+
lines.push('');
|
|
208
|
+
// Summary section
|
|
209
|
+
lines.push('## Summary');
|
|
210
|
+
lines.push('');
|
|
211
|
+
lines.push(`- **Run ID**: ${report.run_id}`);
|
|
212
|
+
lines.push(`- **Started**: ${report.started_at}`);
|
|
213
|
+
lines.push(`- **Ended**: ${report.ended_at}`);
|
|
214
|
+
lines.push(`- **Duration**: ${report.duration_ms}ms`);
|
|
215
|
+
lines.push(`- **Verdict**: ${formatVerdict(report.verdict, report.code)}`);
|
|
216
|
+
lines.push(`- **Base Commit**: ${report.base_commit}`);
|
|
217
|
+
lines.push(`- **Head Commit**: ${report.head_commit}`);
|
|
218
|
+
lines.push('');
|
|
219
|
+
// Task section
|
|
220
|
+
lines.push('## Task');
|
|
221
|
+
lines.push('');
|
|
222
|
+
lines.push(`- **Task ID**: ${report.task.task_id}`);
|
|
223
|
+
lines.push(`- **Milestone**: ${report.task.milestone_id}`);
|
|
224
|
+
lines.push(`- **Kind**: ${report.task.task_kind}`);
|
|
225
|
+
lines.push(`- **Intent**: ${report.task.intent}`);
|
|
226
|
+
lines.push('');
|
|
227
|
+
// Blast Radius section
|
|
228
|
+
lines.push('## Blast Radius');
|
|
229
|
+
lines.push('');
|
|
230
|
+
lines.push(`- **Files Touched**: ${report.blast_radius.files_touched}`);
|
|
231
|
+
lines.push(`- **Lines Added**: ${report.blast_radius.lines_added}`);
|
|
232
|
+
lines.push(`- **Lines Deleted**: ${report.blast_radius.lines_deleted}`);
|
|
233
|
+
lines.push(`- **New Files**: ${report.blast_radius.new_files}`);
|
|
234
|
+
lines.push('');
|
|
235
|
+
// Scope section
|
|
236
|
+
lines.push('## Scope');
|
|
237
|
+
lines.push('');
|
|
238
|
+
if (report.scope.ok) {
|
|
239
|
+
lines.push('✓ **OK** - No violations');
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
lines.push('✗ **Violations**:');
|
|
243
|
+
for (const violation of report.scope.violations) {
|
|
244
|
+
lines.push(` - ${violation}`);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
if (report.scope.touched_paths.length > 0) {
|
|
248
|
+
lines.push('');
|
|
249
|
+
lines.push('**Touched Paths**:');
|
|
250
|
+
for (const path of report.scope.touched_paths) {
|
|
251
|
+
lines.push(` - ${path}`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
lines.push('');
|
|
255
|
+
// Verification section
|
|
256
|
+
lines.push('## Verification');
|
|
257
|
+
lines.push('');
|
|
258
|
+
if (report.verification.runs.length === 0) {
|
|
259
|
+
lines.push('No verification runs.');
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
lines.push('| Template ID | Phase | Exit Code | Duration (ms) |');
|
|
263
|
+
lines.push('|-------------|-------|-----------|---------------|');
|
|
264
|
+
for (const run of report.verification.runs) {
|
|
265
|
+
const status = run.exit_code === 0 ? '✓' : '✗';
|
|
266
|
+
lines.push(`| ${run.template_id} | ${run.phase} | ${status} ${run.exit_code} | ${run.duration_ms} |`);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
if (report.verification.verify_log_path) {
|
|
270
|
+
lines.push('');
|
|
271
|
+
lines.push(`**Log**: ${report.verification.verify_log_path}`);
|
|
272
|
+
}
|
|
273
|
+
lines.push('');
|
|
274
|
+
// Budgets section
|
|
275
|
+
lines.push('## Budgets');
|
|
276
|
+
lines.push('');
|
|
277
|
+
lines.push(`- **Milestone**: ${report.budgets.milestone_id}`);
|
|
278
|
+
lines.push(`- **Ticks**: ${report.budgets.ticks}`);
|
|
279
|
+
lines.push(`- **Orchestrator Calls**: ${report.budgets.orchestrator_calls}`);
|
|
280
|
+
lines.push(`- **Builder Calls**: ${report.budgets.builder_calls}`);
|
|
281
|
+
lines.push(`- **Verification Runs**: ${report.budgets.verify_runs}`);
|
|
282
|
+
lines.push(`- **Estimated Cost**: $${report.budgets.estimated_cost_usd.toFixed(4)}`);
|
|
283
|
+
if (report.budgets.warnings.length > 0) {
|
|
284
|
+
lines.push('');
|
|
285
|
+
lines.push('**Warnings**:');
|
|
286
|
+
for (const warning of report.budgets.warnings) {
|
|
287
|
+
lines.push(` - ${warning}`);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
lines.push('');
|
|
291
|
+
return lines.join('\n');
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Atomically writes markdown content to a file.
|
|
295
|
+
*
|
|
296
|
+
* Uses the same write-tmp-fsync-rename pattern as atomicWriteJson
|
|
297
|
+
* to ensure crash-safe writes.
|
|
298
|
+
*
|
|
299
|
+
* @param content - Markdown content to write
|
|
300
|
+
* @param filePath - Path to write the markdown file
|
|
301
|
+
* @returns Promise that resolves when write completes
|
|
302
|
+
* @throws {AtomicFsError} If the write operation fails
|
|
303
|
+
*
|
|
304
|
+
* @example
|
|
305
|
+
* ```typescript
|
|
306
|
+
* const markdown = renderReportMarkdown(report);
|
|
307
|
+
* await writeReportMarkdown(markdown, '/path/to/REPORT.md');
|
|
308
|
+
* ```
|
|
309
|
+
*/
|
|
310
|
+
export async function writeReportMarkdown(content, filePath) {
|
|
311
|
+
const tmpPath = `${filePath}.tmp`;
|
|
312
|
+
let fileHandle = null;
|
|
313
|
+
try {
|
|
314
|
+
// Ensure content ends with newline
|
|
315
|
+
const normalizedContent = content.endsWith('\n') ? content : content + '\n';
|
|
316
|
+
// Open file for writing, create if doesn't exist, truncate if exists
|
|
317
|
+
fileHandle = await open(tmpPath, 'w');
|
|
318
|
+
// Write the content
|
|
319
|
+
await fileHandle.writeFile(normalizedContent, 'utf-8');
|
|
320
|
+
// fsync to ensure data is flushed to disk
|
|
321
|
+
await fileHandle.sync();
|
|
322
|
+
// Close before rename
|
|
323
|
+
await fileHandle.close();
|
|
324
|
+
fileHandle = null;
|
|
325
|
+
// Atomic rename (POSIX guarantees atomicity)
|
|
326
|
+
await rename(tmpPath, filePath);
|
|
327
|
+
}
|
|
328
|
+
catch (error) {
|
|
329
|
+
// Attempt to clean up the tmp file on error
|
|
330
|
+
if (fileHandle) {
|
|
331
|
+
try {
|
|
332
|
+
await fileHandle.close();
|
|
333
|
+
}
|
|
334
|
+
catch {
|
|
335
|
+
// Ignore close errors during cleanup
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
try {
|
|
339
|
+
await unlink(tmpPath);
|
|
340
|
+
}
|
|
341
|
+
catch {
|
|
342
|
+
// Ignore unlink errors - file may not exist
|
|
343
|
+
}
|
|
344
|
+
throw new AtomicFsError(`Failed to atomically write markdown to ${filePath}: ${error instanceof Error ? error.message : String(error)}`, filePath, error instanceof Error ? error : undefined);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
//# sourceMappingURL=report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/lib/report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reviewer flow integration for pre-builder risk checks.
|
|
3
|
+
*
|
|
4
|
+
* Integrates the reviewer into the tick flow to be called pre-builder when
|
|
5
|
+
* risk is detected. Handles reviewer decisions and returns appropriate stop
|
|
6
|
+
* codes or proceeds to builder.
|
|
7
|
+
*/
|
|
8
|
+
import type { EnvoiConfig } from '../types/config.js';
|
|
9
|
+
import type { ReportCode } from '../types/report.js';
|
|
10
|
+
import type { RiskFlags } from '../types/reviewer.js';
|
|
11
|
+
import type { Task } from '../types/task.js';
|
|
12
|
+
import type { DiffAnalysis } from './diff.js';
|
|
13
|
+
import type { StopHistoryEntry } from './risk.js';
|
|
14
|
+
/**
|
|
15
|
+
* Context information for reviewer invocation.
|
|
16
|
+
*/
|
|
17
|
+
export interface ReviewerFlowContext {
|
|
18
|
+
/** Risk flags that triggered the reviewer */
|
|
19
|
+
riskFlags: RiskFlags[];
|
|
20
|
+
/** Current task (if available) */
|
|
21
|
+
task: Task | null;
|
|
22
|
+
/** Diff analysis (if available) */
|
|
23
|
+
diffAnalysis?: DiffAnalysis;
|
|
24
|
+
/** Stop history entries */
|
|
25
|
+
stopHistory: StopHistoryEntry[];
|
|
26
|
+
/** Current tick number */
|
|
27
|
+
currentTick: number;
|
|
28
|
+
/** Whether verification failed */
|
|
29
|
+
verifyFailed: boolean;
|
|
30
|
+
/** Whether budget warning threshold reached */
|
|
31
|
+
budgetWarning: boolean;
|
|
32
|
+
/** Last report markdown (if available) */
|
|
33
|
+
lastReportMd?: string;
|
|
34
|
+
/** Diff patch content (if available) */
|
|
35
|
+
diffPatch?: string;
|
|
36
|
+
/** Verification log excerpt (if available) */
|
|
37
|
+
verifyLogExcerpt?: string;
|
|
38
|
+
/** Touched file paths */
|
|
39
|
+
touchedPaths: string[];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Result of reviewer flow execution.
|
|
43
|
+
*/
|
|
44
|
+
export interface ReviewerFlowResult {
|
|
45
|
+
/** Stop code if reviewer decided to stop, null if proceed */
|
|
46
|
+
stopCode: ReportCode | null;
|
|
47
|
+
/** Question object if ask_question decision */
|
|
48
|
+
question?: {
|
|
49
|
+
prompt: string;
|
|
50
|
+
choices?: string[];
|
|
51
|
+
};
|
|
52
|
+
/** Reviewer error message if invocation failed */
|
|
53
|
+
reviewerError?: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Handles reviewer decision and returns appropriate stop code or null.
|
|
57
|
+
*
|
|
58
|
+
* @param decision - Reviewer decision object from parsed output
|
|
59
|
+
* @returns ReviewerFlowResult with stopCode or null (proceed)
|
|
60
|
+
*/
|
|
61
|
+
export declare function handleReviewerDecision(decision: {
|
|
62
|
+
decision: 'proceed' | 'force_patch' | 'ask_question';
|
|
63
|
+
question?: {
|
|
64
|
+
prompt: string;
|
|
65
|
+
choices?: string[];
|
|
66
|
+
};
|
|
67
|
+
}): ReviewerFlowResult;
|
|
68
|
+
/**
|
|
69
|
+
* Runs reviewer if needed based on risk flags and configuration.
|
|
70
|
+
*
|
|
71
|
+
* This function should be called pre-builder when risk is detected.
|
|
72
|
+
* It checks if reviewer should be triggered, invokes it if needed, and
|
|
73
|
+
* handles the decision.
|
|
74
|
+
*
|
|
75
|
+
* @param config - Envoi configuration
|
|
76
|
+
* @param context - Reviewer flow context
|
|
77
|
+
* @returns Promise resolving to ReviewerFlowResult
|
|
78
|
+
*/
|
|
79
|
+
export declare function runReviewerIfNeeded(config: EnvoiConfig, context: ReviewerFlowContext): Promise<ReviewerFlowResult>;
|
|
80
|
+
//# sourceMappingURL=reviewer-flow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviewer-flow.d.ts","sourceRoot":"","sources":["../../src/lib/reviewer-flow.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAG7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,SAAS,EAAE,SAAS,EAAE,CAAC;IACvB,kCAAkC;IAClC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,mCAAmC;IACnC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,2BAA2B;IAC3B,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,YAAY,EAAE,OAAO,CAAC;IACtB,+CAA+C;IAC/C,aAAa,EAAE,OAAO,CAAC;IACvB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yBAAyB;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,6DAA6D;IAC7D,QAAQ,EAAE,UAAU,GAAG,IAAI,CAAC;IAC5B,+CAA+C;IAC/C,QAAQ,CAAC,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE;IAC/C,QAAQ,EAAE,SAAS,GAAG,aAAa,GAAG,cAAc,CAAC;IACrD,QAAQ,CAAC,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH,GAAG,kBAAkB,CAyBrB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAiH7B"}
|