@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,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Judge phase: Compute touched files from git diff.
|
|
3
|
+
*
|
|
4
|
+
* Provides functions to analyze git changes and categorize files
|
|
5
|
+
* for scope guardrail enforcement.
|
|
6
|
+
*/
|
|
7
|
+
import type { TaskScope, DiffLimits } from '../types/task.js';
|
|
8
|
+
import type { ScopeConfig } from '../types/config.js';
|
|
9
|
+
import type { ReportCode } from '../types/report.js';
|
|
10
|
+
import type { BlastRadius } from '../types/report.js';
|
|
11
|
+
/**
|
|
12
|
+
* Categorized list of files touched since a base commit.
|
|
13
|
+
*/
|
|
14
|
+
export interface TouchedFiles {
|
|
15
|
+
/** Files that were modified */
|
|
16
|
+
modified: string[];
|
|
17
|
+
/** Files that were added */
|
|
18
|
+
added: string[];
|
|
19
|
+
/** Files that were deleted */
|
|
20
|
+
deleted: string[];
|
|
21
|
+
/** Files that were renamed (with old and new paths) */
|
|
22
|
+
renamed: Array<{
|
|
23
|
+
from: string;
|
|
24
|
+
to: string;
|
|
25
|
+
}>;
|
|
26
|
+
/** Files that are untracked (new files not yet committed) */
|
|
27
|
+
untracked: string[];
|
|
28
|
+
/** Union of all file paths (excluding deleted files) */
|
|
29
|
+
all: string[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Parsed result from git diff --name-status output.
|
|
33
|
+
*/
|
|
34
|
+
interface ParsedDiffStatus {
|
|
35
|
+
modified: string[];
|
|
36
|
+
added: string[];
|
|
37
|
+
deleted: string[];
|
|
38
|
+
renamed: Array<{
|
|
39
|
+
from: string;
|
|
40
|
+
to: string;
|
|
41
|
+
}>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Parses git diff --name-status output into categorized file lists.
|
|
45
|
+
*
|
|
46
|
+
* Git diff --name-status format:
|
|
47
|
+
* - M <path> - Modified
|
|
48
|
+
* - A <path> - Added
|
|
49
|
+
* - D <path> - Deleted
|
|
50
|
+
* - R<score> <old> <new> - Renamed (tab-separated, e.g., R100\told\tnew)
|
|
51
|
+
*
|
|
52
|
+
* This is a pure function that can be easily tested.
|
|
53
|
+
*
|
|
54
|
+
* @param output - Raw output from `git diff --name-status <base>...HEAD`
|
|
55
|
+
* @returns Object with categorized file lists
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```typescript
|
|
59
|
+
* const diffOutput = 'M\tfile1.ts\nA\tfile2.ts\nR100\told.ts\tnew.ts\n';
|
|
60
|
+
* const result = parseGitDiffNameStatus(diffOutput);
|
|
61
|
+
* // result.modified = ['file1.ts']
|
|
62
|
+
* // result.added = ['file2.ts']
|
|
63
|
+
* // result.renamed = [{ from: 'old.ts', to: 'new.ts' }]
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export declare function parseGitDiffNameStatus(output: string): ParsedDiffStatus;
|
|
67
|
+
/**
|
|
68
|
+
* Gets all files touched since a base commit using git diff --name-status
|
|
69
|
+
* and git status --porcelain.
|
|
70
|
+
*
|
|
71
|
+
* Combines:
|
|
72
|
+
* - Tracked file changes (modified, added, deleted, renamed) from git diff
|
|
73
|
+
* - Untracked files from git status
|
|
74
|
+
*
|
|
75
|
+
* @param baseCommit - The base commit SHA to diff against (e.g., 'main' or commit hash)
|
|
76
|
+
* @returns TouchedFiles object with categorized file lists
|
|
77
|
+
* @throws {Error} If git commands fail
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```typescript
|
|
81
|
+
* const touched = getTouchedFiles('main');
|
|
82
|
+
* console.log(`Modified: ${touched.modified.length}`);
|
|
83
|
+
* console.log(`All files: ${touched.all.join(', ')}`);
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
export declare function getTouchedFiles(baseCommit: string): TouchedFiles;
|
|
87
|
+
/**
|
|
88
|
+
* Result of scope violation checking.
|
|
89
|
+
*/
|
|
90
|
+
export interface ScopeCheckResult {
|
|
91
|
+
/** True if no violations found */
|
|
92
|
+
ok: boolean;
|
|
93
|
+
/** Stop code if violation found, null otherwise */
|
|
94
|
+
stopCode: ReportCode | null;
|
|
95
|
+
/** List of file paths that caused the violation */
|
|
96
|
+
violatingFiles: string[];
|
|
97
|
+
/** Human-readable reason for the violation */
|
|
98
|
+
reason: string | null;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Checks touched files against scope rules and returns first violation or success.
|
|
102
|
+
*
|
|
103
|
+
* Checks are performed in priority order:
|
|
104
|
+
* 1. Runner-owned mutation (highest priority)
|
|
105
|
+
* 2. Forbidden globs
|
|
106
|
+
* 3. Outside allowed globs
|
|
107
|
+
* 4. New file when not allowed
|
|
108
|
+
* 5. Lockfile change when not allowed
|
|
109
|
+
*
|
|
110
|
+
* Returns the first violation found, or success if no violations.
|
|
111
|
+
*
|
|
112
|
+
* @param touched - TouchedFiles object with categorized file lists
|
|
113
|
+
* @param taskScope - Task scope configuration with allowed/forbidden globs and permissions
|
|
114
|
+
* @param scopeConfig - Scope configuration with lockfiles list
|
|
115
|
+
* @param runnerOwnedGlobs - Glob patterns for files owned by the runner
|
|
116
|
+
* @returns ScopeCheckResult with stopCode and violatingFiles
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```typescript
|
|
120
|
+
* const result = checkScopeViolations(
|
|
121
|
+
* { modified: ['src/utils.ts'], added: ['src/new.ts'], deleted: [], renamed: [], untracked: ['src/new.ts'], all: ['src/utils.ts', 'src/new.ts'] },
|
|
122
|
+
* { allowed_globs: ['src/**'], forbidden_globs: ['*.key'], allow_new_files: false, allow_lockfile_changes: true },
|
|
123
|
+
* { lockfiles: ['package-lock.json'], default_allowed_globs: [], default_forbidden_globs: [], default_allow_new_files: true, default_allow_lockfile_changes: false },
|
|
124
|
+
* ['pilot/**']
|
|
125
|
+
* );
|
|
126
|
+
* if (!result.ok) {
|
|
127
|
+
* console.error(`Violation: ${result.stopCode}`, result.violatingFiles);
|
|
128
|
+
* }
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
export declare function checkScopeViolations(touched: TouchedFiles, taskScope: TaskScope, scopeConfig: ScopeConfig, runnerOwnedGlobs: string[]): ScopeCheckResult;
|
|
132
|
+
/**
|
|
133
|
+
* Result of diff limits checking.
|
|
134
|
+
*/
|
|
135
|
+
export interface DiffCheckResult {
|
|
136
|
+
/** True if within limits, false if limits exceeded */
|
|
137
|
+
ok: boolean;
|
|
138
|
+
/** Stop code if limits exceeded, null otherwise */
|
|
139
|
+
stopCode: 'STOP_DIFF_TOO_LARGE' | null;
|
|
140
|
+
/** Blast radius metrics */
|
|
141
|
+
blastRadius: BlastRadius;
|
|
142
|
+
/** Human-readable reason for the violation */
|
|
143
|
+
reason: string | null;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Parses git diff --stat output to extract line counts.
|
|
147
|
+
*
|
|
148
|
+
* Git diff --stat format:
|
|
149
|
+
* - Individual file lines: " file.ts | N +++++" or " file.ts | N +++---"
|
|
150
|
+
* - Summary line: "N files changed, M insertions(+), K deletions(-)"
|
|
151
|
+
*
|
|
152
|
+
* This function extracts the summary line totals.
|
|
153
|
+
*
|
|
154
|
+
* @param output - Raw output from `git diff --stat <base>...HEAD`
|
|
155
|
+
* @returns Object with linesAdded and linesDeleted totals
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* ```typescript
|
|
159
|
+
* const diffStat = ' file1.ts | 5 +++++\n file2.ts | 3 ---\n 2 files changed, 5 insertions(+), 3 deletions(-)';
|
|
160
|
+
* const result = parseGitDiffStat(diffStat);
|
|
161
|
+
* // result.linesAdded = 5
|
|
162
|
+
* // result.linesDeleted = 3
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
165
|
+
export declare function parseGitDiffStat(output: string): {
|
|
166
|
+
linesAdded: number;
|
|
167
|
+
linesDeleted: number;
|
|
168
|
+
};
|
|
169
|
+
/**
|
|
170
|
+
* Computes blast radius metrics from git diff.
|
|
171
|
+
*
|
|
172
|
+
* Uses git diff --stat to get line counts and TouchedFiles to get file counts.
|
|
173
|
+
*
|
|
174
|
+
* @param baseCommit - The base commit SHA to diff against (e.g., 'main' or commit hash)
|
|
175
|
+
* @param touched - TouchedFiles object with categorized file lists
|
|
176
|
+
* @returns BlastRadius object with file and line counts
|
|
177
|
+
* @throws {Error} If git diff --stat command fails
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* ```typescript
|
|
181
|
+
* const touched = getTouchedFiles('main');
|
|
182
|
+
* const blastRadius = computeBlastRadius('main', touched);
|
|
183
|
+
* console.log(`Files touched: ${blastRadius.files_touched}`);
|
|
184
|
+
* console.log(`Lines added: ${blastRadius.lines_added}`);
|
|
185
|
+
* ```
|
|
186
|
+
*/
|
|
187
|
+
export declare function computeBlastRadius(baseCommit: string, touched: TouchedFiles): BlastRadius;
|
|
188
|
+
/**
|
|
189
|
+
* Checks blast radius against configured diff limits.
|
|
190
|
+
*
|
|
191
|
+
* Returns STOP_DIFF_TOO_LARGE if either limit is exceeded:
|
|
192
|
+
* - files_touched > max_files_touched
|
|
193
|
+
* - lines_changed (added + deleted) > max_lines_changed
|
|
194
|
+
*
|
|
195
|
+
* @param blastRadius - Blast radius metrics from computeBlastRadius
|
|
196
|
+
* @param limits - Diff limits configuration
|
|
197
|
+
* @returns DiffCheckResult with ok status and stopCode
|
|
198
|
+
*
|
|
199
|
+
* @example
|
|
200
|
+
* ```typescript
|
|
201
|
+
* const blastRadius = computeBlastRadius('main', touched);
|
|
202
|
+
* const result = checkDiffLimits(blastRadius, { max_files_touched: 10, max_lines_changed: 100 });
|
|
203
|
+
* if (!result.ok) {
|
|
204
|
+
* console.error(`Violation: ${result.stopCode}`, result.reason);
|
|
205
|
+
* }
|
|
206
|
+
* ```
|
|
207
|
+
*/
|
|
208
|
+
export declare function checkDiffLimits(blastRadius: BlastRadius, limits: DiffLimits): DiffCheckResult;
|
|
209
|
+
/**
|
|
210
|
+
* Result of HEAD-moved check (JUDGE phase).
|
|
211
|
+
* Detects if HEAD was moved externally during a tick (e.g. force push, external commit).
|
|
212
|
+
*/
|
|
213
|
+
export interface HeadCheckResult {
|
|
214
|
+
/** True if HEAD is still at expected commit or a descendant of it */
|
|
215
|
+
ok: boolean;
|
|
216
|
+
/** 'STOP_HEAD_MOVED' if HEAD was moved externally, null otherwise */
|
|
217
|
+
stopCode: 'STOP_HEAD_MOVED' | null;
|
|
218
|
+
/** The base commit we expected (stored at tick start) */
|
|
219
|
+
expectedHead: string;
|
|
220
|
+
/** Current HEAD commit SHA */
|
|
221
|
+
actualHead: string;
|
|
222
|
+
/** Human-readable reason when not ok */
|
|
223
|
+
reason: string | null;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Checks if HEAD is still at the expected commit (or a descendant of it).
|
|
227
|
+
*
|
|
228
|
+
* - If HEAD === expectedBaseCommit → ok (no changes yet).
|
|
229
|
+
* - If expectedBaseCommit is ancestor of HEAD → ok (builder made commits).
|
|
230
|
+
* - Otherwise → HEAD was moved externally (force push, external commit, branch switch) → STOP_HEAD_MOVED.
|
|
231
|
+
*
|
|
232
|
+
* @param expectedBaseCommit - The base commit SHA stored at tick start
|
|
233
|
+
* @returns HeadCheckResult with ok, stopCode, expectedHead, actualHead, reason
|
|
234
|
+
*/
|
|
235
|
+
export declare function checkHeadMoved(expectedBaseCommit: string): HeadCheckResult;
|
|
236
|
+
export {};
|
|
237
|
+
//# sourceMappingURL=judge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge.d.ts","sourceRoot":"","sources":["../../src/lib/judge.ts"],"names":[],"mappings":"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"}
|