@slope-dev/slope 1.55.11 → 1.55.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/atomic-write.d.ts +9 -0
- package/dist/cli/atomic-write.d.ts.map +1 -0
- package/dist/cli/atomic-write.js +89 -0
- package/dist/cli/atomic-write.js.map +1 -0
- package/dist/cli/commands/claim.d.ts.map +1 -1
- package/dist/cli/commands/claim.js +22 -0
- package/dist/cli/commands/claim.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +32 -11
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/guard.d.ts.map +1 -1
- package/dist/cli/commands/guard.js +14 -0
- package/dist/cli/commands/guard.js.map +1 -1
- package/dist/cli/commands/init.d.ts +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +189 -13
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/pr.d.ts.map +1 -1
- package/dist/cli/commands/pr.js +27 -0
- package/dist/cli/commands/pr.js.map +1 -1
- package/dist/cli/commands/review-state.d.ts +2 -0
- package/dist/cli/commands/review-state.d.ts.map +1 -1
- package/dist/cli/commands/review-state.js +18 -0
- package/dist/cli/commands/review-state.js.map +1 -1
- package/dist/cli/commands/sprint.d.ts.map +1 -1
- package/dist/cli/commands/sprint.js +93 -7
- package/dist/cli/commands/sprint.js.map +1 -1
- package/dist/cli/commands/store.d.ts +1 -0
- package/dist/cli/commands/store.d.ts.map +1 -1
- package/dist/cli/commands/store.js +72 -5
- package/dist/cli/commands/store.js.map +1 -1
- package/dist/cli/commands/worktree.d.ts.map +1 -1
- package/dist/cli/commands/worktree.js +203 -8
- package/dist/cli/commands/worktree.js.map +1 -1
- package/dist/cli/guards/claim-required.d.ts.map +1 -1
- package/dist/cli/guards/claim-required.js +23 -25
- package/dist/cli/guards/claim-required.js.map +1 -1
- package/dist/cli/guards/docs.js +2 -2
- package/dist/cli/guards/docs.js.map +1 -1
- package/dist/cli/guards/hazard.d.ts.map +1 -1
- package/dist/cli/guards/hazard.js +148 -52
- package/dist/cli/guards/hazard.js.map +1 -1
- package/dist/cli/guards/hook-input.d.ts +15 -0
- package/dist/cli/guards/hook-input.d.ts.map +1 -0
- package/dist/cli/guards/hook-input.js +89 -0
- package/dist/cli/guards/hook-input.js.map +1 -0
- package/dist/cli/guards/pr-review.d.ts.map +1 -1
- package/dist/cli/guards/pr-review.js +3 -2
- package/dist/cli/guards/pr-review.js.map +1 -1
- package/dist/cli/guards/roadmap-edit-shipped.d.ts.map +1 -1
- package/dist/cli/guards/roadmap-edit-shipped.js +109 -16
- package/dist/cli/guards/roadmap-edit-shipped.js.map +1 -1
- package/dist/cli/guards/scope-drift.d.ts.map +1 -1
- package/dist/cli/guards/scope-drift.js +25 -15
- package/dist/cli/guards/scope-drift.js.map +1 -1
- package/dist/cli/guards/session-briefing.d.ts.map +1 -1
- package/dist/cli/guards/session-briefing.js +10 -6
- package/dist/cli/guards/session-briefing.js.map +1 -1
- package/dist/cli/guards/sprint-completion.js +10 -4
- package/dist/cli/guards/sprint-completion.js.map +1 -1
- package/dist/cli/guards/workflow-gate.js +6 -5
- package/dist/cli/guards/workflow-gate.js.map +1 -1
- package/dist/cli/guards/worktree-check.js +1 -1
- package/dist/cli/guards/worktree-check.js.map +1 -1
- package/dist/cli/index.js +3 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/session-state.d.ts +1 -1
- package/dist/cli/session-state.d.ts.map +1 -1
- package/dist/cli/session-state.js +76 -57
- package/dist/cli/session-state.js.map +1 -1
- package/dist/cli/sprint-state.d.ts +3 -1
- package/dist/cli/sprint-state.d.ts.map +1 -1
- package/dist/cli/sprint-state.js +41 -25
- package/dist/cli/sprint-state.js.map +1 -1
- package/dist/core/analytics.d.ts +2 -1
- package/dist/core/analytics.d.ts.map +1 -1
- package/dist/core/analytics.js +25 -2
- package/dist/core/analytics.js.map +1 -1
- package/dist/core/analyzers/git.d.ts +3 -1
- package/dist/core/analyzers/git.d.ts.map +1 -1
- package/dist/core/analyzers/git.js +4 -2
- package/dist/core/analyzers/git.js.map +1 -1
- package/dist/core/guard.d.ts +4 -0
- package/dist/core/guard.d.ts.map +1 -1
- package/dist/core/guard.js.map +1 -1
- package/dist/mcp/index.d.ts +2 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +13 -8
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/registry.d.ts +1 -0
- package/dist/mcp/registry.d.ts.map +1 -1
- package/dist/mcp/registry.js +20 -10
- package/dist/mcp/registry.js.map +1 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +5 -1
- package/dist/store/index.js.map +1 -1
- package/dist/store/sqlite-memory-backend.d.ts.map +1 -1
- package/dist/store/sqlite-memory-backend.js +6 -1
- package/dist/store/sqlite-memory-backend.js.map +1 -1
- package/package.json +1 -1
- package/templates/codex/plugins/slope/.codex-plugin/plugin.json +10 -7
- package/templates/codex/plugins/slope/.mcp.json +8 -0
- package/templates/codex/plugins/slope/hooks/slope-guard.sh +3 -1
- package/templates/codex/plugins/slope/hooks.json +211 -10
- package/templates/codex/plugins/slope/skills/slope-guard-warning/SKILL.md +28 -0
- package/templates/codex/plugins/slope/skills/slope-setup/SKILL.md +29 -0
- package/templates/codex/plugins/slope/skills/slope-sprint/SKILL.md +34 -0
package/dist/cli/guards/docs.js
CHANGED
|
@@ -10,8 +10,8 @@ export const GUARD_DOCS = {
|
|
|
10
10
|
hazard: {
|
|
11
11
|
purpose: 'Warns about known issues and recurring patterns in file areas being edited. Prevents the agent from repeating past mistakes.',
|
|
12
12
|
triggers: 'PreToolUse on Edit, Write. Fires when the agent is about to modify a file.',
|
|
13
|
-
behavior: 'Advisory — injects context with relevant hazards
|
|
14
|
-
configuration: 'guidance.hazardRecency (default: 5) controls how many
|
|
13
|
+
behavior: 'Advisory — injects context with relevant hazards for the file area being edited. Source precedence is common-issues.json first, recent scorecard shot hazards and bunker locations second, then compact cached guard state.',
|
|
14
|
+
configuration: 'guidance.hazardRecency (default: 5) controls how many recent scorecards the fallback source reads. Disable: add "hazard" to guidance.disabled.',
|
|
15
15
|
level: 'full',
|
|
16
16
|
},
|
|
17
17
|
'commit-nudge': {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../../src/cli/guards/docs.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAehF,MAAM,CAAC,MAAM,UAAU,GAA6B;IAClD,OAAO,EAAE;QACP,OAAO,EAAE,gKAAgK;QACzK,QAAQ,EAAE,qFAAqF;QAC/F,QAAQ,EAAE,oJAAoJ;QAC9J,aAAa,EAAE,0HAA0H;QACzI,KAAK,EAAE,MAAM;KACd;IACD,MAAM,EAAE;QACN,OAAO,EAAE,8HAA8H;QACvI,QAAQ,EAAE,4EAA4E;QACtF,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../../src/cli/guards/docs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hazard.d.ts","sourceRoot":"","sources":["../../../src/cli/guards/hazard.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"hazard.d.ts","sourceRoot":"","sources":["../../../src/cli/guards/hazard.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAwDlE;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA4ErF"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { readFileSync, existsSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
2
2
|
import { join, dirname } from 'node:path';
|
|
3
3
|
import { loadConfig } from '../config.js';
|
|
4
|
+
import { loadScorecards } from '../../core/index.js';
|
|
4
5
|
import { dedupGuardContext } from '../session-state.js';
|
|
6
|
+
import { normalizeTouchedPath, resolveTouchedPaths } from './hook-input.js';
|
|
5
7
|
const GUARD_STATE_DIR = '.slope/guard-state';
|
|
6
8
|
const STATE_FILE = 'hazard.json';
|
|
7
9
|
const MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000; // 7 days
|
|
10
|
+
const DEFAULT_HAZARD_RECENCY = 5;
|
|
11
|
+
const GENERIC_AREA_SEGMENTS = new Set(['src', 'test', 'tests', 'package', 'packages']);
|
|
8
12
|
function loadHazardState(cwd) {
|
|
9
13
|
try {
|
|
10
14
|
const path = join(cwd, GUARD_STATE_DIR, STATE_FILE);
|
|
@@ -38,74 +42,166 @@ function pruneState(state, currentSprint) {
|
|
|
38
42
|
* Writes state to disk so warnings survive context compaction.
|
|
39
43
|
*/
|
|
40
44
|
export async function hazardGuard(input, cwd) {
|
|
41
|
-
const
|
|
42
|
-
if (
|
|
43
|
-
return {};
|
|
44
|
-
const config = loadConfig();
|
|
45
|
-
const recency = config.guidance?.hazardRecency ?? 5;
|
|
45
|
+
const areas = resolveTouchedAreas(input, cwd);
|
|
46
|
+
if (areas.length === 0)
|
|
47
|
+
return { metricReason: 'no-file-path' };
|
|
48
|
+
const config = loadConfig(cwd);
|
|
46
49
|
const currentSprint = config.currentSprint ?? 0;
|
|
47
|
-
// Determine the area from the file path (use directory)
|
|
48
|
-
const area = dirname(filePath).replace(cwd + '/', '').replace(cwd, '');
|
|
49
|
-
if (!area || area === '.')
|
|
50
|
-
return {};
|
|
51
50
|
// Load and prune disk state
|
|
52
51
|
let state = loadHazardState(cwd);
|
|
53
52
|
state = pruneState(state, currentSprint);
|
|
54
|
-
|
|
55
|
-
const MAX_HAZARDS = 3;
|
|
56
|
-
const freshWarnings = [];
|
|
53
|
+
let issues = null;
|
|
57
54
|
try {
|
|
58
55
|
const issuesPath = join(cwd, config.commonIssuesPath);
|
|
59
56
|
if (existsSync(issuesPath)) {
|
|
60
|
-
|
|
61
|
-
const areaLower = area.toLowerCase();
|
|
62
|
-
for (const pattern of issues.recurring_patterns) {
|
|
63
|
-
// Check if pattern is relevant to this area
|
|
64
|
-
const text = `${pattern.title} ${pattern.description} ${pattern.prevention}`.toLowerCase();
|
|
65
|
-
if (text.includes(areaLower) || areaLower.split('/').some(seg => text.includes(seg))) {
|
|
66
|
-
const lastSprint = Math.max(...pattern.sprints_hit);
|
|
67
|
-
freshWarnings.push({ lastSprint, text: `[${pattern.category}] ${pattern.title} (S${lastSprint}) — ${pattern.prevention.slice(0, 80)}` });
|
|
68
|
-
}
|
|
69
|
-
}
|
|
57
|
+
issues = JSON.parse(readFileSync(issuesPath, 'utf8'));
|
|
70
58
|
}
|
|
71
59
|
}
|
|
72
60
|
catch { /* skip — common issues are optional */ }
|
|
73
|
-
|
|
61
|
+
const hazardRecency = config.guidance?.hazardRecency ?? DEFAULT_HAZARD_RECENCY;
|
|
62
|
+
let recentScorecards = null;
|
|
63
|
+
let scorecardSourceAvailable = false;
|
|
64
|
+
const loadRecentScorecards = () => {
|
|
65
|
+
if (recentScorecards)
|
|
66
|
+
return recentScorecards;
|
|
67
|
+
try {
|
|
68
|
+
const scorecards = loadScorecards(config, cwd);
|
|
69
|
+
recentScorecards = hazardRecency > 0 ? scorecards.slice(-hazardRecency) : scorecards;
|
|
70
|
+
scorecardSourceAvailable = recentScorecards.length > 0;
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
recentScorecards = [];
|
|
74
|
+
scorecardSourceAvailable = false;
|
|
75
|
+
}
|
|
76
|
+
return recentScorecards;
|
|
77
|
+
};
|
|
78
|
+
for (const area of areas) {
|
|
79
|
+
// Compute fresh warnings from common issues (ranked by recency)
|
|
80
|
+
const commonWarnings = computeFreshWarnings(area, issues);
|
|
81
|
+
const freshTexts = commonWarnings.length > 0
|
|
82
|
+
? commonWarnings
|
|
83
|
+
: computeScorecardWarnings(area, loadRecentScorecards());
|
|
84
|
+
// Merge fresh warnings with any disk-cached warnings for this area
|
|
85
|
+
const cached = state.entries.find(e => e.area === area);
|
|
86
|
+
const allWarnings = freshTexts.length > 0 ? freshTexts : (cached?.warnings ?? []);
|
|
87
|
+
if (freshTexts.length === 0 && cached) {
|
|
88
|
+
state.entries = state.entries.filter(e => e.area !== area);
|
|
89
|
+
saveHazardState(cwd, state);
|
|
90
|
+
}
|
|
91
|
+
// Persist fresh warnings to disk (update or add entry)
|
|
92
|
+
if (freshTexts.length > 0) {
|
|
93
|
+
const entry = {
|
|
94
|
+
area,
|
|
95
|
+
warnings: freshTexts,
|
|
96
|
+
sprint: currentSprint,
|
|
97
|
+
timestamp: Date.now(),
|
|
98
|
+
};
|
|
99
|
+
state.entries = state.entries.filter(e => e.area !== area);
|
|
100
|
+
state.entries.push(entry);
|
|
101
|
+
saveHazardState(cwd, state);
|
|
102
|
+
}
|
|
103
|
+
if (allWarnings.length === 0)
|
|
104
|
+
continue;
|
|
105
|
+
const fullContext = formatHazardContext(area, allWarnings);
|
|
106
|
+
// Session dedup: if this exact context was already injected, return compressed reference
|
|
107
|
+
const dedup = dedupGuardContext(cwd, input.session_id, 'hazard', fullContext);
|
|
108
|
+
if (dedup)
|
|
109
|
+
return { context: dedup, metricReason: 'deduped' };
|
|
110
|
+
return { context: fullContext, metricReason: 'matched' };
|
|
111
|
+
}
|
|
112
|
+
return { metricReason: issues || scorecardSourceAvailable ? 'no-match' : 'state-unavailable' };
|
|
113
|
+
}
|
|
114
|
+
function resolveTouchedAreas(input, cwd) {
|
|
115
|
+
const seen = new Set();
|
|
116
|
+
const areas = [];
|
|
117
|
+
for (const touchedPath of resolveTouchedPaths(input)) {
|
|
118
|
+
const relativePath = normalizeTouchedPath(touchedPath, cwd);
|
|
119
|
+
if (!relativePath)
|
|
120
|
+
continue;
|
|
121
|
+
const area = dirname(relativePath);
|
|
122
|
+
if (!area || area === '.' || seen.has(area))
|
|
123
|
+
continue;
|
|
124
|
+
seen.add(area);
|
|
125
|
+
areas.push(area);
|
|
126
|
+
}
|
|
127
|
+
return areas;
|
|
128
|
+
}
|
|
129
|
+
function computeFreshWarnings(area, issues) {
|
|
130
|
+
if (!issues)
|
|
131
|
+
return [];
|
|
132
|
+
const freshWarnings = [];
|
|
133
|
+
for (const pattern of issues.recurring_patterns) {
|
|
134
|
+
// Check if pattern is relevant to this area
|
|
135
|
+
const text = `${pattern.title} ${pattern.description} ${pattern.prevention}`.toLowerCase();
|
|
136
|
+
if (areaMatchesText(area, text, { includeGenericSegments: true })) {
|
|
137
|
+
const lastSprint = Math.max(...pattern.sprints_hit);
|
|
138
|
+
freshWarnings.push({ lastSprint, text: `[${pattern.category}] ${pattern.title} (S${lastSprint}) — ${pattern.prevention.slice(0, 80)}` });
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// Sort by recency (most recent first)
|
|
74
142
|
freshWarnings.sort((a, b) => b.lastSprint - a.lastSprint);
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
143
|
+
return freshWarnings.map(w => w.text);
|
|
144
|
+
}
|
|
145
|
+
function computeScorecardWarnings(area, scorecards) {
|
|
146
|
+
const warnings = [];
|
|
147
|
+
for (const sc of scorecards) {
|
|
148
|
+
const sprint = sc.sprint_number ?? sc.sprint ?? 0;
|
|
149
|
+
for (const shot of sc.shots ?? []) {
|
|
150
|
+
for (const hazard of shot.hazards ?? []) {
|
|
151
|
+
const description = hazard.description ?? '';
|
|
152
|
+
const haystack = `${shot.ticket_key} ${shot.title} ${hazard.type} ${description}`.toLowerCase();
|
|
153
|
+
if (!areaMatchesText(area, haystack))
|
|
154
|
+
continue;
|
|
155
|
+
warnings.push({
|
|
156
|
+
sprint,
|
|
157
|
+
text: `[scorecard:${hazard.type}] ${description || shot.title} (S${sprint})`,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
for (const location of sc.bunker_locations ?? []) {
|
|
162
|
+
const locationText = typeof location === 'string'
|
|
163
|
+
? location
|
|
164
|
+
: String(location.area ?? '');
|
|
165
|
+
if (!locationText || !areaMatchesText(area, locationText.toLowerCase()))
|
|
166
|
+
continue;
|
|
167
|
+
warnings.push({
|
|
168
|
+
sprint,
|
|
169
|
+
text: `[scorecard:bunker] ${locationText} (S${sprint})`,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
82
172
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
state.entries.push(entry);
|
|
93
|
-
saveHazardState(cwd, state);
|
|
173
|
+
warnings.sort((a, b) => b.sprint - a.sprint);
|
|
174
|
+
const seen = new Set();
|
|
175
|
+
const unique = [];
|
|
176
|
+
for (const warning of warnings) {
|
|
177
|
+
const key = warning.text.replace(/ \(S\d+\)$/, '');
|
|
178
|
+
if (seen.has(key))
|
|
179
|
+
continue;
|
|
180
|
+
seen.add(key);
|
|
181
|
+
unique.push(warning.text);
|
|
94
182
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
const
|
|
183
|
+
return unique;
|
|
184
|
+
}
|
|
185
|
+
function areaMatchesText(area, lowerText, opts = {}) {
|
|
186
|
+
const areaLower = area.toLowerCase();
|
|
187
|
+
if (lowerText.includes(areaLower))
|
|
188
|
+
return true;
|
|
189
|
+
const segments = areaLower
|
|
190
|
+
.split('/')
|
|
191
|
+
.map(seg => seg.trim())
|
|
192
|
+
.filter(Boolean)
|
|
193
|
+
.filter(seg => opts.includeGenericSegments || seg.length >= 4)
|
|
194
|
+
.filter(seg => opts.includeGenericSegments || !GENERIC_AREA_SEGMENTS.has(seg));
|
|
195
|
+
return segments.some(seg => lowerText.includes(seg));
|
|
196
|
+
}
|
|
197
|
+
function formatHazardContext(area, allWarnings) {
|
|
198
|
+
const maxHazards = 3;
|
|
199
|
+
const shown = allWarnings.slice(0, maxHazards);
|
|
99
200
|
const overflow = allWarnings.length - shown.length;
|
|
100
|
-
const header = `SLOPE hazards (${area}, ${allWarnings.length} total${overflow > 0 ? `, showing top ${
|
|
201
|
+
const header = `SLOPE hazards (${area}, ${allWarnings.length} total${overflow > 0 ? `, showing top ${maxHazards}` : ''}):`;
|
|
101
202
|
const lines = [header, ...shown.map(w => `• ${w}`)];
|
|
102
203
|
if (overflow > 0)
|
|
103
204
|
lines.push(` (+${overflow} more — run \`slope briefing --area=${area}\` for all)`);
|
|
104
|
-
|
|
105
|
-
// Session dedup: if this exact context was already injected, return compressed reference
|
|
106
|
-
const dedup = dedupGuardContext(cwd, input.session_id, 'hazard', fullContext);
|
|
107
|
-
if (dedup)
|
|
108
|
-
return { context: dedup };
|
|
109
|
-
return { context: fullContext };
|
|
205
|
+
return lines.join('\n');
|
|
110
206
|
}
|
|
111
207
|
//# sourceMappingURL=hazard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hazard.js","sourceRoot":"","sources":["../../../src/cli/guards/hazard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"hazard.js","sourceRoot":"","sources":["../../../src/cli/guards/hazard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { HookInput } from '../../core/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve file paths touched by a hook input across agent harness payloads.
|
|
4
|
+
*
|
|
5
|
+
* Claude-style tools usually provide tool_input.file_path. Codex apply_patch
|
|
6
|
+
* hooks carry the edited files inside the patch text, commonly in
|
|
7
|
+
* tool_input.command.
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolveTouchedPaths(input: HookInput): string[];
|
|
10
|
+
export declare function resolvePrimaryTouchedPath(input: HookInput): string | undefined;
|
|
11
|
+
export declare function normalizeTouchedPath(filePath: string | undefined, cwd: string): string | null;
|
|
12
|
+
export declare function toAbsoluteTouchedPath(filePath: string, cwd: string): string;
|
|
13
|
+
export declare function getApplyPatchText(input: HookInput): string | null;
|
|
14
|
+
export declare function parseApplyPatchTouchedPaths(patchText: string): string[];
|
|
15
|
+
//# sourceMappingURL=hook-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-input.d.ts","sourceRoot":"","sources":["../../../src/cli/guards/hook-input.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAMrD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE,CAqB9D;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAE9E;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAY7F;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAG3E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CASjE;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAavE"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { isAbsolute, resolve } from 'node:path';
|
|
2
|
+
const PATCH_TEXT_KEYS = ['command', 'patch', 'input'];
|
|
3
|
+
const DIRECT_PATH_KEYS = ['file_path', 'path'];
|
|
4
|
+
const DIRECT_PATH_ARRAY_KEYS = ['file_paths', 'paths'];
|
|
5
|
+
/**
|
|
6
|
+
* Resolve file paths touched by a hook input across agent harness payloads.
|
|
7
|
+
*
|
|
8
|
+
* Claude-style tools usually provide tool_input.file_path. Codex apply_patch
|
|
9
|
+
* hooks carry the edited files inside the patch text, commonly in
|
|
10
|
+
* tool_input.command.
|
|
11
|
+
*/
|
|
12
|
+
export function resolveTouchedPaths(input) {
|
|
13
|
+
const toolInput = input.tool_input ?? {};
|
|
14
|
+
const paths = [];
|
|
15
|
+
for (const key of DIRECT_PATH_KEYS) {
|
|
16
|
+
const value = toolInput[key];
|
|
17
|
+
if (typeof value === 'string')
|
|
18
|
+
paths.push(value);
|
|
19
|
+
}
|
|
20
|
+
for (const key of DIRECT_PATH_ARRAY_KEYS) {
|
|
21
|
+
const value = toolInput[key];
|
|
22
|
+
if (!Array.isArray(value))
|
|
23
|
+
continue;
|
|
24
|
+
for (const item of value) {
|
|
25
|
+
if (typeof item === 'string')
|
|
26
|
+
paths.push(item);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const patchText = getApplyPatchText(input);
|
|
30
|
+
if (patchText)
|
|
31
|
+
paths.push(...parseApplyPatchTouchedPaths(patchText));
|
|
32
|
+
return uniqueNonEmpty(paths);
|
|
33
|
+
}
|
|
34
|
+
export function resolvePrimaryTouchedPath(input) {
|
|
35
|
+
return resolveTouchedPaths(input)[0];
|
|
36
|
+
}
|
|
37
|
+
export function normalizeTouchedPath(filePath, cwd) {
|
|
38
|
+
if (!filePath)
|
|
39
|
+
return null;
|
|
40
|
+
const normalizedCwd = cwd.replace(/\\/g, '/').replace(/\/$/, '');
|
|
41
|
+
const normalizedPath = filePath.trim().replace(/\\/g, '/');
|
|
42
|
+
if (!normalizedPath)
|
|
43
|
+
return null;
|
|
44
|
+
const relativePath = normalizedPath.startsWith(`${normalizedCwd}/`)
|
|
45
|
+
? normalizedPath.slice(normalizedCwd.length + 1)
|
|
46
|
+
: normalizedPath;
|
|
47
|
+
return relativePath.replace(/^\.\//, '');
|
|
48
|
+
}
|
|
49
|
+
export function toAbsoluteTouchedPath(filePath, cwd) {
|
|
50
|
+
const trimmed = filePath.trim();
|
|
51
|
+
return isAbsolute(trimmed) ? resolve(trimmed) : resolve(cwd, trimmed);
|
|
52
|
+
}
|
|
53
|
+
export function getApplyPatchText(input) {
|
|
54
|
+
const toolInput = input.tool_input ?? {};
|
|
55
|
+
for (const key of PATCH_TEXT_KEYS) {
|
|
56
|
+
const value = toolInput[key];
|
|
57
|
+
if (typeof value === 'string' && value.includes('*** Begin Patch')) {
|
|
58
|
+
return value;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
export function parseApplyPatchTouchedPaths(patchText) {
|
|
64
|
+
const paths = [];
|
|
65
|
+
for (const line of patchText.split(/\r?\n/)) {
|
|
66
|
+
const match = line.match(/^\*\*\* (?:Add|Update|Delete) File: (.+)$/);
|
|
67
|
+
if (match) {
|
|
68
|
+
paths.push(match[1]);
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const moveMatch = line.match(/^\*\*\* Move to: (.+)$/);
|
|
72
|
+
if (moveMatch)
|
|
73
|
+
paths.push(moveMatch[1]);
|
|
74
|
+
}
|
|
75
|
+
return uniqueNonEmpty(paths);
|
|
76
|
+
}
|
|
77
|
+
function uniqueNonEmpty(values) {
|
|
78
|
+
const seen = new Set();
|
|
79
|
+
const result = [];
|
|
80
|
+
for (const value of values) {
|
|
81
|
+
const normalized = value.trim();
|
|
82
|
+
if (!normalized || seen.has(normalized))
|
|
83
|
+
continue;
|
|
84
|
+
seen.add(normalized);
|
|
85
|
+
result.push(normalized);
|
|
86
|
+
}
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=hook-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-input.js","sourceRoot":"","sources":["../../../src/cli/guards/hook-input.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-review.d.ts","sourceRoot":"","sources":["../../../src/cli/guards/pr-review.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAIhE;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"pr-review.d.ts","sourceRoot":"","sources":["../../../src/cli/guards/pr-review.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAIhE;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAgCvF;AAiBD;oEACoE;AACpE,iBAAS,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAenE;AAwBD,iBAAS,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAiB3D;AAED,iBAAS,qBAAqB,CAAC,IAAI,EAAE,oBAAoB,EAAE,GAAG,MAAM,CAKnE;AAGD,eAAO,MAAM,UAAU;;;;CAAsE,CAAC"}
|
|
@@ -14,7 +14,7 @@ export async function prReviewGuard(input, cwd) {
|
|
|
14
14
|
const command = input.tool_input?.command ?? '';
|
|
15
15
|
const response = input.tool_response?.stdout ?? input.tool_response?.result ?? '';
|
|
16
16
|
if (!command.includes('gh pr create'))
|
|
17
|
-
return {};
|
|
17
|
+
return { metricReason: 'irrelevant-command' };
|
|
18
18
|
// Substring fast-path used to gate the regex match, but `includes()` over
|
|
19
19
|
// arbitrary text can never tightly bound a URL — CodeQL flags it as
|
|
20
20
|
// js/incomplete-url-substring-sanitization. The regex below is the real
|
|
@@ -23,13 +23,14 @@ export async function prReviewGuard(input, cwd) {
|
|
|
23
23
|
// PR URL; if not, the guard skips.
|
|
24
24
|
const urlMatch = response.match(/(https:\/\/github\.com\/[^\s]+\/pull\/(\d+))/);
|
|
25
25
|
if (!urlMatch)
|
|
26
|
-
return {};
|
|
26
|
+
return { metricReason: 'no-match' };
|
|
27
27
|
const prUrl = urlMatch[1];
|
|
28
28
|
const prNumber = urlMatch[2];
|
|
29
29
|
recordPendingReview(cwd, parseInt(prNumber, 10));
|
|
30
30
|
const recs = computeRecommendations(cwd);
|
|
31
31
|
const recLine = formatRecommendations(recs);
|
|
32
32
|
return {
|
|
33
|
+
metricReason: 'matched',
|
|
33
34
|
context: [
|
|
34
35
|
`SLOPE PR Review: A pull request was just created (${prUrl}).`,
|
|
35
36
|
...(recLine ? [`Recommended reviews based on diff: ${recLine}.`] : []),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-review.js","sourceRoot":"","sources":["../../../src/cli/guards/pr-review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1E;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAgB,EAAE,GAAW;IAC/D,MAAM,OAAO,GAAI,KAAK,CAAC,UAAU,EAAE,OAAkB,IAAI,EAAE,CAAC;IAC5D,MAAM,QAAQ,GAAI,KAAK,CAAC,aAAa,EAAE,MAAiB,IAAK,KAAK,CAAC,aAAa,EAAE,MAAiB,IAAI,EAAE,CAAC;IAE1G,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;QAAE,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"pr-review.js","sourceRoot":"","sources":["../../../src/cli/guards/pr-review.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roadmap-edit-shipped.d.ts","sourceRoot":"","sources":["../../../src/cli/guards/roadmap-edit-shipped.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"roadmap-edit-shipped.d.ts","sourceRoot":"","sources":["../../../src/cli/guards/roadmap-edit-shipped.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMlE;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA6EjG"}
|