@slope-dev/slope 1.53.0 → 1.55.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/dist/cli/commands/agent.d.ts +35 -0
- package/dist/cli/commands/agent.d.ts.map +1 -0
- package/dist/cli/commands/agent.js +345 -0
- package/dist/cli/commands/agent.js.map +1 -0
- package/dist/cli/commands/briefing.d.ts.map +1 -1
- package/dist/cli/commands/briefing.js +5 -3
- package/dist/cli/commands/briefing.js.map +1 -1
- package/dist/cli/commands/commit-ready.d.ts +29 -0
- package/dist/cli/commands/commit-ready.d.ts.map +1 -0
- package/dist/cli/commands/commit-ready.js +263 -0
- package/dist/cli/commands/commit-ready.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +9 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +163 -3
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/gate.d.ts +2 -0
- package/dist/cli/commands/gate.d.ts.map +1 -0
- package/dist/cli/commands/gate.js +175 -0
- package/dist/cli/commands/gate.js.map +1 -0
- package/dist/cli/commands/guard.d.ts.map +1 -1
- package/dist/cli/commands/guard.js +4 -0
- package/dist/cli/commands/guard.js.map +1 -1
- package/dist/cli/commands/hook.js +6 -1
- package/dist/cli/commands/hook.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +23 -6
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/pr.d.ts +49 -0
- package/dist/cli/commands/pr.d.ts.map +1 -0
- package/dist/cli/commands/pr.js +214 -0
- package/dist/cli/commands/pr.js.map +1 -0
- package/dist/cli/commands/retro.d.ts +18 -0
- package/dist/cli/commands/retro.d.ts.map +1 -0
- package/dist/cli/commands/retro.js +251 -0
- package/dist/cli/commands/retro.js.map +1 -0
- package/dist/cli/commands/review-state.d.ts +1 -2
- package/dist/cli/commands/review-state.d.ts.map +1 -1
- package/dist/cli/commands/review-state.js +71 -25
- package/dist/cli/commands/review-state.js.map +1 -1
- package/dist/cli/commands/roadmap.d.ts.map +1 -1
- package/dist/cli/commands/roadmap.js +31 -4
- package/dist/cli/commands/roadmap.js.map +1 -1
- package/dist/cli/commands/sprint-plan.d.ts +21 -0
- package/dist/cli/commands/sprint-plan.d.ts.map +1 -0
- package/dist/cli/commands/sprint-plan.js +226 -0
- package/dist/cli/commands/sprint-plan.js.map +1 -0
- package/dist/cli/commands/sprint.d.ts.map +1 -1
- package/dist/cli/commands/sprint.js +137 -0
- package/dist/cli/commands/sprint.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +34 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/ticket.d.ts +9 -0
- package/dist/cli/commands/ticket.d.ts.map +1 -0
- package/dist/cli/commands/ticket.js +168 -0
- package/dist/cli/commands/ticket.js.map +1 -0
- package/dist/cli/commands/version.d.ts.map +1 -1
- package/dist/cli/commands/version.js +33 -4
- package/dist/cli/commands/version.js.map +1 -1
- package/dist/cli/commands/vision.d.ts.map +1 -1
- package/dist/cli/commands/vision.js +14 -1
- package/dist/cli/commands/vision.js.map +1 -1
- package/dist/cli/guards/branch-before-commit.d.ts.map +1 -1
- package/dist/cli/guards/branch-before-commit.js +2 -1
- package/dist/cli/guards/branch-before-commit.js.map +1 -1
- package/dist/cli/guards/next-action.d.ts.map +1 -1
- package/dist/cli/guards/next-action.js +3 -2
- package/dist/cli/guards/next-action.js.map +1 -1
- package/dist/cli/guards/post-hole-enforcement.d.ts +18 -0
- package/dist/cli/guards/post-hole-enforcement.d.ts.map +1 -0
- package/dist/cli/guards/post-hole-enforcement.js +100 -0
- package/dist/cli/guards/post-hole-enforcement.js.map +1 -0
- package/dist/cli/guards/pr-review.d.ts +16 -1
- package/dist/cli/guards/pr-review.d.ts.map +1 -1
- package/dist/cli/guards/pr-review.js +87 -5
- package/dist/cli/guards/pr-review.js.map +1 -1
- package/dist/cli/guards/roadmap-edit-shipped.d.ts +12 -0
- package/dist/cli/guards/roadmap-edit-shipped.d.ts.map +1 -0
- package/dist/cli/guards/roadmap-edit-shipped.js +155 -0
- package/dist/cli/guards/roadmap-edit-shipped.js.map +1 -0
- package/dist/cli/index.js +47 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/registry.d.ts +1 -1
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/cli/registry.js +67 -1
- package/dist/cli/registry.js.map +1 -1
- package/dist/core/analyzers/git.d.ts +14 -0
- package/dist/core/analyzers/git.d.ts.map +1 -1
- package/dist/core/analyzers/git.js +47 -0
- package/dist/core/analyzers/git.js.map +1 -1
- package/dist/core/formatter.d.ts.map +1 -1
- package/dist/core/formatter.js +51 -2
- package/dist/core/formatter.js.map +1 -1
- package/dist/core/guard.d.ts +1 -1
- package/dist/core/guard.d.ts.map +1 -1
- package/dist/core/guard.js +16 -0
- package/dist/core/guard.js.map +1 -1
- package/dist/core/index.d.ts +3 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +3 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/json-memory-backend.d.ts +23 -0
- package/dist/core/json-memory-backend.d.ts.map +1 -0
- package/dist/core/json-memory-backend.js +98 -0
- package/dist/core/json-memory-backend.js.map +1 -0
- package/dist/core/memory-backend.d.ts +30 -0
- package/dist/core/memory-backend.d.ts.map +1 -0
- package/dist/core/memory-backend.js +14 -0
- package/dist/core/memory-backend.js.map +1 -0
- package/dist/core/memory-types.d.ts +25 -0
- package/dist/core/memory-types.d.ts.map +1 -0
- package/dist/core/memory-types.js +4 -0
- package/dist/core/memory-types.js.map +1 -0
- package/dist/core/memory-validation.d.ts +4 -0
- package/dist/core/memory-validation.d.ts.map +1 -0
- package/dist/core/memory-validation.js +35 -0
- package/dist/core/memory-validation.js.map +1 -0
- package/dist/core/memory.d.ts +21 -37
- package/dist/core/memory.d.ts.map +1 -1
- package/dist/core/memory.js +97 -147
- package/dist/core/memory.js.map +1 -1
- package/dist/core/pi-settings.d.ts.map +1 -1
- package/dist/core/pi-settings.js +8 -0
- package/dist/core/pi-settings.js.map +1 -1
- package/dist/core/roadmap.d.ts +16 -2
- package/dist/core/roadmap.d.ts.map +1 -1
- package/dist/core/roadmap.js +81 -24
- package/dist/core/roadmap.js.map +1 -1
- package/dist/core/vision.d.ts +10 -0
- package/dist/core/vision.d.ts.map +1 -1
- package/dist/core/vision.js +68 -1
- package/dist/core/vision.js.map +1 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +18 -0
- package/dist/store/index.js.map +1 -1
- package/dist/store/sqlite-memory-backend.d.ts +43 -0
- package/dist/store/sqlite-memory-backend.d.ts.map +1 -0
- package/dist/store/sqlite-memory-backend.js +181 -0
- package/dist/store/sqlite-memory-backend.js.map +1 -0
- package/dist/store-pg/index.d.ts.map +1 -1
- package/dist/store-pg/index.js +23 -0
- package/dist/store-pg/index.js.map +1 -1
- package/package.json +1 -1
- package/packages/pi-extension/dist/index.d.ts +19 -0
- package/packages/pi-extension/dist/index.js +339 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next-action.d.ts","sourceRoot":"","sources":["../../../src/cli/guards/next-action.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAe,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAO3F,mDAAmD;AACnD,KAAK,WAAW,GACZ;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GACnF;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACnE;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAE5E;;;GAGG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAmCzF;AAED,qEAAqE;AACrE,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"next-action.d.ts","sourceRoot":"","sources":["../../../src/cli/guards/next-action.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAe,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAO3F,mDAAmD;AACnD,KAAK,WAAW,GACZ;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GACnF;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GACnE;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAE5E;;;GAGG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAmCzF;AAED,qEAAqE;AACrE,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAgH7F;AAiCD,oDAAoD;AACpD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,UAAU,CA4GpE;AAED,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAU3D"}
|
|
@@ -129,7 +129,8 @@ export async function detectSprintState(cwd, sessionId) {
|
|
|
129
129
|
}
|
|
130
130
|
// Check if findings exist but scorecard hasn't been amended
|
|
131
131
|
const findingsData = loadFindings(cwd);
|
|
132
|
-
|
|
132
|
+
const sprintFindings = findingsData?.sprints[latestScoredSprint] ?? [];
|
|
133
|
+
if (sprintFindings.length > 0) {
|
|
133
134
|
try {
|
|
134
135
|
// Check if scorecard already has review hazards
|
|
135
136
|
const scorecardPath = join(retrosDir, `sprint-${latestScoredSprint}.json`);
|
|
@@ -140,7 +141,7 @@ export async function detectSprintState(cwd, sessionId) {
|
|
|
140
141
|
return {
|
|
141
142
|
type: 'needs-amend',
|
|
142
143
|
sprintNumber: latestScoredSprint,
|
|
143
|
-
findingCount:
|
|
144
|
+
findingCount: sprintFindings.length,
|
|
144
145
|
};
|
|
145
146
|
}
|
|
146
147
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next-action.js","sourceRoot":"","sources":["../../../src/cli/guards/next-action.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"next-action.js","sourceRoot":"","sources":["../../../src/cli/guards/next-action.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { HookInput, GuardResult } from '../../core/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Post-hole enforcement guard: fires on Stop.
|
|
4
|
+
*
|
|
5
|
+
* Detects "silent roadmap drift" — sprints with shipped commits on main
|
|
6
|
+
* that haven't been properly closed out per the post-hole routine. A
|
|
7
|
+
* sprint is considered drifting if either:
|
|
8
|
+
* • roadmap.json status is not "complete", OR
|
|
9
|
+
* • no scorecard exists at docs/retros/sprint-N.json
|
|
10
|
+
*
|
|
11
|
+
* Advisory by default — surfaces the drift list with fix commands. Set
|
|
12
|
+
* SLOPE_POST_HOLE_BLOCK=1 to upgrade to a mechanical block on session end.
|
|
13
|
+
*
|
|
14
|
+
* Tied to GH #291. Builds on the validator drift detector from S86-1
|
|
15
|
+
* (findShippedSprintsOnMain in src/core/analyzers/git.ts).
|
|
16
|
+
*/
|
|
17
|
+
export declare function postHoleEnforcementGuard(_input: HookInput, cwd: string): Promise<GuardResult>;
|
|
18
|
+
//# sourceMappingURL=post-hole-enforcement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post-hole-enforcement.d.ts","sourceRoot":"","sources":["../../../src/cli/guards/post-hole-enforcement.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIlE;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA8FnG"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { findShippedSprintsOnMain } from '../../core/index.js';
|
|
4
|
+
import { loadConfig } from '../config.js';
|
|
5
|
+
/**
|
|
6
|
+
* Post-hole enforcement guard: fires on Stop.
|
|
7
|
+
*
|
|
8
|
+
* Detects "silent roadmap drift" — sprints with shipped commits on main
|
|
9
|
+
* that haven't been properly closed out per the post-hole routine. A
|
|
10
|
+
* sprint is considered drifting if either:
|
|
11
|
+
* • roadmap.json status is not "complete", OR
|
|
12
|
+
* • no scorecard exists at docs/retros/sprint-N.json
|
|
13
|
+
*
|
|
14
|
+
* Advisory by default — surfaces the drift list with fix commands. Set
|
|
15
|
+
* SLOPE_POST_HOLE_BLOCK=1 to upgrade to a mechanical block on session end.
|
|
16
|
+
*
|
|
17
|
+
* Tied to GH #291. Builds on the validator drift detector from S86-1
|
|
18
|
+
* (findShippedSprintsOnMain in src/core/analyzers/git.ts).
|
|
19
|
+
*/
|
|
20
|
+
export async function postHoleEnforcementGuard(_input, cwd) {
|
|
21
|
+
let roadmapAbs;
|
|
22
|
+
let scorecardDirAbs;
|
|
23
|
+
let scorecardPattern;
|
|
24
|
+
try {
|
|
25
|
+
const config = loadConfig(cwd);
|
|
26
|
+
roadmapAbs = join(cwd, config.roadmapPath);
|
|
27
|
+
scorecardDirAbs = join(cwd, config.scorecardDir);
|
|
28
|
+
scorecardPattern = config.scorecardPattern;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return {};
|
|
32
|
+
}
|
|
33
|
+
// Pattern must contain a '*' wildcard so each sprint's scorecard resolves
|
|
34
|
+
// to a unique filename. Misconfigured patterns (e.g. 'sprint.json') would
|
|
35
|
+
// collide every sprint to the same path, making this check meaningless.
|
|
36
|
+
if (!scorecardPattern.includes('*')) {
|
|
37
|
+
return {
|
|
38
|
+
context: `SLOPE post-hole enforcement: scorecardPattern "${scorecardPattern}" has no '*' wildcard — drift detection skipped. Update .slope/config.json to e.g. "sprint-*.json".`,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
if (!existsSync(roadmapAbs))
|
|
42
|
+
return {};
|
|
43
|
+
// Loose JSON parse — only need .sprints[]; phases and other fields are
|
|
44
|
+
// out of scope for this guard.
|
|
45
|
+
let parsed;
|
|
46
|
+
try {
|
|
47
|
+
parsed = JSON.parse(readFileSync(roadmapAbs, 'utf8'));
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return {};
|
|
51
|
+
}
|
|
52
|
+
const sprints = parsed?.sprints;
|
|
53
|
+
if (!Array.isArray(sprints))
|
|
54
|
+
return {};
|
|
55
|
+
const statusById = new Map();
|
|
56
|
+
for (const s of sprints) {
|
|
57
|
+
const id = s?.id;
|
|
58
|
+
const status = s?.status;
|
|
59
|
+
if (typeof id === 'number') {
|
|
60
|
+
statusById.set(id, typeof status === 'string' ? status : null);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const shipped = findShippedSprintsOnMain(cwd);
|
|
64
|
+
if (shipped.size === 0)
|
|
65
|
+
return {};
|
|
66
|
+
const drifts = [];
|
|
67
|
+
for (const id of [...shipped].sort((a, b) => b - a)) {
|
|
68
|
+
const status = statusById.get(id);
|
|
69
|
+
// Replace EVERY '*' so patterns with multiple wildcards are sanitized
|
|
70
|
+
// (CodeQL js/incomplete-sanitization): single .replace() leaves later
|
|
71
|
+
// occurrences as literal '*' which won't match real filenames.
|
|
72
|
+
const scorecardFile = join(scorecardDirAbs, scorecardPattern.replaceAll('*', String(id)));
|
|
73
|
+
const hasScorecard = existsSync(scorecardFile);
|
|
74
|
+
const issues = [];
|
|
75
|
+
if (status !== 'complete')
|
|
76
|
+
issues.push(`status="${status ?? 'unset'}"`);
|
|
77
|
+
if (!hasScorecard)
|
|
78
|
+
issues.push('no scorecard');
|
|
79
|
+
if (issues.length > 0)
|
|
80
|
+
drifts.push({ sprint: id, issues });
|
|
81
|
+
}
|
|
82
|
+
if (drifts.length === 0)
|
|
83
|
+
return {};
|
|
84
|
+
const shown = drifts.slice(0, 5);
|
|
85
|
+
const remainder = drifts.length - shown.length;
|
|
86
|
+
const lines = [
|
|
87
|
+
`SLOPE post-hole enforcement: ${drifts.length} shipped sprint${drifts.length === 1 ? '' : 's'} with incomplete close-out:`,
|
|
88
|
+
'',
|
|
89
|
+
...shown.map(d => ` • S${d.sprint}: ${d.issues.join(', ')}`),
|
|
90
|
+
];
|
|
91
|
+
if (remainder > 0)
|
|
92
|
+
lines.push(` …and ${remainder} more`);
|
|
93
|
+
lines.push('', 'Per the post-hole routine, each shipped sprint needs:', ' • status:complete in roadmap.json', ' • scorecard at docs/retros/sprint-N.json', '', 'Fix commands:', ' - Build scorecard: slope auto-card --sprint=<N>', ' - Validate scorecard: slope validate', ' - Roadmap status: edit docs/backlog/roadmap.json (or slope sprint complete)');
|
|
94
|
+
const message = lines.join('\n');
|
|
95
|
+
if (process.env.SLOPE_POST_HOLE_BLOCK === '1') {
|
|
96
|
+
return { decision: 'deny', blockReason: message };
|
|
97
|
+
}
|
|
98
|
+
return { context: message };
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=post-hole-enforcement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post-hole-enforcement.js","sourceRoot":"","sources":["../../../src/cli/guards/post-hole-enforcement.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,22 @@
|
|
|
1
1
|
import type { HookInput, GuardResult } from '../../core/index.js';
|
|
2
|
+
import type { ReviewRecommendation } from '../../core/index.js';
|
|
2
3
|
/**
|
|
3
4
|
* PR review guard: fires PostToolUse on Bash.
|
|
5
|
+
*
|
|
4
6
|
* Detects `gh pr create` output and prompts for review workflow choice.
|
|
7
|
+
* As of S91-4 (#302) the suggestion includes recommended review types
|
|
8
|
+
* computed from the PR's diff (file patterns) and current sprint metadata.
|
|
5
9
|
*/
|
|
6
|
-
export declare function prReviewGuard(input: HookInput,
|
|
10
|
+
export declare function prReviewGuard(input: HookInput, cwd: string): Promise<GuardResult>;
|
|
11
|
+
/** Inspect the current branch's diff and call recommendReviews(). Best-effort
|
|
12
|
+
* — returns [] if git is unavailable or the diff can't be read. */
|
|
13
|
+
declare function computeRecommendations(cwd: string): ReviewRecommendation[];
|
|
14
|
+
declare function inferTicketCount(cwd: string, base: string): number;
|
|
15
|
+
declare function formatRecommendations(recs: ReviewRecommendation[]): string;
|
|
16
|
+
export declare const _internals: {
|
|
17
|
+
computeRecommendations: typeof computeRecommendations;
|
|
18
|
+
formatRecommendations: typeof formatRecommendations;
|
|
19
|
+
inferTicketCount: typeof inferTicketCount;
|
|
20
|
+
};
|
|
21
|
+
export {};
|
|
7
22
|
//# sourceMappingURL=pr-review.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-review.d.ts","sourceRoot":"","sources":["../../../src/cli/guards/pr-review.ts"],"names":[],"mappings":"
|
|
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,EAAc,MAAM,qBAAqB,CAAC;AAE9E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEhE;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAkCvF;AAED;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"}
|
|
@@ -1,23 +1,32 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
import { recommendReviews } from '../../core/review.js';
|
|
1
3
|
/**
|
|
2
4
|
* PR review guard: fires PostToolUse on Bash.
|
|
5
|
+
*
|
|
3
6
|
* Detects `gh pr create` output and prompts for review workflow choice.
|
|
7
|
+
* As of S91-4 (#302) the suggestion includes recommended review types
|
|
8
|
+
* computed from the PR's diff (file patterns) and current sprint metadata.
|
|
4
9
|
*/
|
|
5
|
-
export async function prReviewGuard(input,
|
|
10
|
+
export async function prReviewGuard(input, cwd) {
|
|
6
11
|
const command = input.tool_input?.command ?? '';
|
|
7
12
|
const response = input.tool_response?.stdout ?? input.tool_response?.result ?? '';
|
|
8
|
-
// Only fire after gh pr create commands
|
|
9
13
|
if (!command.includes('gh pr create'))
|
|
10
14
|
return {};
|
|
11
|
-
// Verify a PR URL was returned (successful creation)
|
|
12
15
|
if (!response.includes('github.com/') || !response.includes('/pull/'))
|
|
13
16
|
return {};
|
|
14
|
-
// Extract PR URL from response
|
|
15
17
|
const urlMatch = response.match(/(https:\/\/github\.com\/[^\s]+\/pull\/\d+)/);
|
|
16
18
|
const prUrl = urlMatch ? urlMatch[1] : 'the PR';
|
|
19
|
+
const recs = computeRecommendations(cwd);
|
|
20
|
+
const recLine = formatRecommendations(recs);
|
|
17
21
|
const suggestion = {
|
|
18
22
|
id: 'pr-review',
|
|
19
23
|
title: 'PR Review',
|
|
20
|
-
context:
|
|
24
|
+
context: [
|
|
25
|
+
`A pull request was just created (${prUrl}).`,
|
|
26
|
+
...(recLine ? [`Recommended reviews based on diff: ${recLine}`] : []),
|
|
27
|
+
`After the review, capture findings with \`slope review findings add\`, then \`slope review amend\` to apply to scorecard.`,
|
|
28
|
+
'Tip: also run `slope pr finalize` to add Closes #N for any issues referenced in commits.',
|
|
29
|
+
].join(' '),
|
|
21
30
|
options: [
|
|
22
31
|
{ id: 'code', label: 'Code Review', description: 'Detailed line-by-line code review of the diff' },
|
|
23
32
|
{ id: 'architect', label: 'Architect Review', description: 'High-level architecture and design review' },
|
|
@@ -30,4 +39,77 @@ export async function prReviewGuard(input, _cwd) {
|
|
|
30
39
|
};
|
|
31
40
|
return { suggestion };
|
|
32
41
|
}
|
|
42
|
+
/** Inspect the current branch's diff and call recommendReviews(). Best-effort
|
|
43
|
+
* — returns [] if git is unavailable or the diff can't be read. */
|
|
44
|
+
function computeRecommendations(cwd) {
|
|
45
|
+
try {
|
|
46
|
+
const base = inferBaseRef(cwd) ?? 'origin/main';
|
|
47
|
+
const filesRaw = execSync(`git diff ${base}...HEAD --name-only`, { cwd, encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
|
|
48
|
+
const filePatterns = filesRaw ? filesRaw.split('\n').filter(Boolean) : [];
|
|
49
|
+
const ticketCount = inferTicketCount(cwd, base);
|
|
50
|
+
return recommendReviews({
|
|
51
|
+
ticketCount,
|
|
52
|
+
slope: 1,
|
|
53
|
+
filePatterns,
|
|
54
|
+
hasNewInfra: filePatterns.some(p => /(\.sql|migration|schema|infra|terraform|k8s|deploy)/i.test(p)),
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function refExists(cwd, ref) {
|
|
62
|
+
try {
|
|
63
|
+
execSync(`git rev-parse --verify ${ref}`, { cwd, stdio: ['pipe', 'pipe', 'pipe'] });
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function inferBaseRef(cwd) {
|
|
71
|
+
try {
|
|
72
|
+
const remoteHead = execSync('git symbolic-ref --short refs/remotes/origin/HEAD', { cwd, encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
|
|
73
|
+
// Verify the ref exists locally — symbolic-ref can return a name that
|
|
74
|
+
// points at a branch the local repo doesn't track yet (no fetch).
|
|
75
|
+
if (remoteHead && refExists(cwd, remoteHead))
|
|
76
|
+
return remoteHead;
|
|
77
|
+
}
|
|
78
|
+
catch { /* fall through */ }
|
|
79
|
+
for (const r of ['origin/main', 'origin/master', 'main', 'master']) {
|
|
80
|
+
if (refExists(cwd, r))
|
|
81
|
+
return r;
|
|
82
|
+
}
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
function inferTicketCount(cwd, base) {
|
|
86
|
+
try {
|
|
87
|
+
const subjects = execSync(`git log ${base}..HEAD --format=%s`, { cwd, encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
|
|
88
|
+
if (!subjects)
|
|
89
|
+
return 1;
|
|
90
|
+
// Count distinct ticket keys (S{N}-{M}) referenced across commit subjects;
|
|
91
|
+
// fall back to commit count if no ticket keys found.
|
|
92
|
+
const keys = new Set();
|
|
93
|
+
const re = /\bS(\d+)-(\d+)\b/g;
|
|
94
|
+
let m;
|
|
95
|
+
while ((m = re.exec(subjects)) !== null) {
|
|
96
|
+
keys.add(`${m[1]}-${m[2]}`);
|
|
97
|
+
}
|
|
98
|
+
if (keys.size > 0)
|
|
99
|
+
return keys.size;
|
|
100
|
+
return Math.max(1, subjects.split('\n').length);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return 1;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function formatRecommendations(recs) {
|
|
107
|
+
if (recs.length === 0)
|
|
108
|
+
return '';
|
|
109
|
+
return recs
|
|
110
|
+
.map(r => r.priority === 'required' ? `${r.review_type} (required)` : r.review_type)
|
|
111
|
+
.join(', ');
|
|
112
|
+
}
|
|
113
|
+
// Exported for tests
|
|
114
|
+
export const _internals = { computeRecommendations, formatRecommendations, inferTicketCount };
|
|
33
115
|
//# sourceMappingURL=pr-review.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-review.js","sourceRoot":"","sources":["../../../src/cli/guards/pr-review.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pr-review.js","sourceRoot":"","sources":["../../../src/cli/guards/pr-review.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { HookInput, GuardResult } from '../../core/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* roadmap-edit-shipped guard: PreToolUse on Edit|Write.
|
|
4
|
+
* Blocks edits to roadmap.json that modify any sprint with status:"complete".
|
|
5
|
+
* Shipped sprints are historical record — adding tickets, changing fields,
|
|
6
|
+
* or removing entries retroactively creates "paper-tickets" against frozen
|
|
7
|
+
* sprints (see GH #320 / commit 9255ee8).
|
|
8
|
+
*
|
|
9
|
+
* Override: set SLOPE_ALLOW_SHIPPED_EDIT=1 in the shell to bypass.
|
|
10
|
+
*/
|
|
11
|
+
export declare function roadmapEditShippedGuard(input: HookInput, cwd: string): Promise<GuardResult>;
|
|
12
|
+
//# sourceMappingURL=roadmap-edit-shipped.d.ts.map
|
|
@@ -0,0 +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;AAKlE;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAuFjG"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { loadConfig } from '../../core/index.js';
|
|
4
|
+
const DEFAULT_ROADMAP_PATH = 'docs/backlog/roadmap.json';
|
|
5
|
+
/**
|
|
6
|
+
* roadmap-edit-shipped guard: PreToolUse on Edit|Write.
|
|
7
|
+
* Blocks edits to roadmap.json that modify any sprint with status:"complete".
|
|
8
|
+
* Shipped sprints are historical record — adding tickets, changing fields,
|
|
9
|
+
* or removing entries retroactively creates "paper-tickets" against frozen
|
|
10
|
+
* sprints (see GH #320 / commit 9255ee8).
|
|
11
|
+
*
|
|
12
|
+
* Override: set SLOPE_ALLOW_SHIPPED_EDIT=1 in the shell to bypass.
|
|
13
|
+
*/
|
|
14
|
+
export async function roadmapEditShippedGuard(input, cwd) {
|
|
15
|
+
if (process.env.SLOPE_ALLOW_SHIPPED_EDIT === '1')
|
|
16
|
+
return {};
|
|
17
|
+
const filePath = input.tool_input?.file_path;
|
|
18
|
+
if (!filePath)
|
|
19
|
+
return {};
|
|
20
|
+
let roadmapAbs;
|
|
21
|
+
try {
|
|
22
|
+
const config = loadConfig(cwd);
|
|
23
|
+
roadmapAbs = resolve(cwd, config.roadmapPath ?? DEFAULT_ROADMAP_PATH);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
roadmapAbs = resolve(cwd, DEFAULT_ROADMAP_PATH);
|
|
27
|
+
}
|
|
28
|
+
if (resolve(filePath) !== roadmapAbs)
|
|
29
|
+
return {};
|
|
30
|
+
let currentContent;
|
|
31
|
+
try {
|
|
32
|
+
currentContent = readFileSync(roadmapAbs, 'utf8');
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return {}; // file doesn't exist yet — nothing to protect
|
|
36
|
+
}
|
|
37
|
+
const newString = input.tool_input?.new_string;
|
|
38
|
+
const oldString = input.tool_input?.old_string;
|
|
39
|
+
if (newString === undefined)
|
|
40
|
+
return {};
|
|
41
|
+
let wouldBeContent;
|
|
42
|
+
if (oldString !== undefined) {
|
|
43
|
+
if (!currentContent.includes(oldString))
|
|
44
|
+
return {}; // Edit will fail with its own error
|
|
45
|
+
wouldBeContent = currentContent.replace(oldString, newString);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
wouldBeContent = newString;
|
|
49
|
+
}
|
|
50
|
+
let current;
|
|
51
|
+
let next;
|
|
52
|
+
try {
|
|
53
|
+
current = JSON.parse(currentContent);
|
|
54
|
+
next = JSON.parse(wouldBeContent);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return {}; // malformed JSON on either side — let other tools surface that
|
|
58
|
+
}
|
|
59
|
+
if (!Array.isArray(current.sprints) || !Array.isArray(next.sprints))
|
|
60
|
+
return {};
|
|
61
|
+
const nextById = new Map();
|
|
62
|
+
for (const s of next.sprints) {
|
|
63
|
+
const id = s?.id;
|
|
64
|
+
if (typeof id === 'number')
|
|
65
|
+
nextById.set(id, s);
|
|
66
|
+
}
|
|
67
|
+
const violations = [];
|
|
68
|
+
for (const cur of current.sprints) {
|
|
69
|
+
const c = cur;
|
|
70
|
+
if (c?.status !== 'complete')
|
|
71
|
+
continue;
|
|
72
|
+
const id = c.id;
|
|
73
|
+
if (typeof id !== 'number')
|
|
74
|
+
continue;
|
|
75
|
+
const nxt = nextById.get(id);
|
|
76
|
+
if (nxt === undefined) {
|
|
77
|
+
violations.push(`S${id}: removed (was status:complete)`);
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
if (!deepEqual(cur, nxt)) {
|
|
81
|
+
violations.push(`S${id}: shipped sprint fields modified`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (violations.length === 0)
|
|
85
|
+
return {};
|
|
86
|
+
return {
|
|
87
|
+
decision: 'deny',
|
|
88
|
+
blockReason: [
|
|
89
|
+
'SLOPE: Cannot edit shipped sprints (status:complete).',
|
|
90
|
+
'',
|
|
91
|
+
'Violations:',
|
|
92
|
+
...violations.map(v => ` • ${v}`),
|
|
93
|
+
'',
|
|
94
|
+
'Shipped sprints are historical record. Modifying their tickets, status,',
|
|
95
|
+
'or theme creates "paper-tickets" against frozen sprints (GH #320).',
|
|
96
|
+
'File the work as a NEW sprint instead.',
|
|
97
|
+
'',
|
|
98
|
+
'Override: set SLOPE_ALLOW_SHIPPED_EDIT=1 if you genuinely need to',
|
|
99
|
+
'correct shipped-sprint history.',
|
|
100
|
+
].join('\n'),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/** Detect built-in object types that need special equality handling.
|
|
104
|
+
* Plain objects fall through to recursive key comparison. */
|
|
105
|
+
function isNonPlainObject(v) {
|
|
106
|
+
if (v === null || typeof v !== 'object')
|
|
107
|
+
return false;
|
|
108
|
+
const proto = Object.getPrototypeOf(v);
|
|
109
|
+
return proto !== Object.prototype && proto !== null && !Array.isArray(v);
|
|
110
|
+
}
|
|
111
|
+
function deepEqual(a, b) {
|
|
112
|
+
if (a === b)
|
|
113
|
+
return true;
|
|
114
|
+
if (typeof a !== typeof b)
|
|
115
|
+
return false;
|
|
116
|
+
if (a === null || b === null)
|
|
117
|
+
return a === b;
|
|
118
|
+
if (typeof a !== 'object')
|
|
119
|
+
return false;
|
|
120
|
+
if (Array.isArray(a) !== Array.isArray(b))
|
|
121
|
+
return false;
|
|
122
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
123
|
+
if (a.length !== b.length)
|
|
124
|
+
return false;
|
|
125
|
+
for (let i = 0; i < a.length; i++) {
|
|
126
|
+
if (!deepEqual(a[i], b[i]))
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
// Non-plain objects (Date, RegExp, Map, Set, etc.) — compare via JSON
|
|
132
|
+
// serialization as a conservative fallback. roadmap.json never contains
|
|
133
|
+
// these in practice, but guarding here prevents future schema additions
|
|
134
|
+
// from triggering infinite recursion or incorrect equality.
|
|
135
|
+
if (isNonPlainObject(a) || isNonPlainObject(b)) {
|
|
136
|
+
try {
|
|
137
|
+
return JSON.stringify(a) === JSON.stringify(b);
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return false; // circular references → conservatively flag as unequal
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const ka = Object.keys(a).sort();
|
|
144
|
+
const kb = Object.keys(b).sort();
|
|
145
|
+
if (ka.length !== kb.length)
|
|
146
|
+
return false;
|
|
147
|
+
for (let i = 0; i < ka.length; i++) {
|
|
148
|
+
if (ka[i] !== kb[i])
|
|
149
|
+
return false;
|
|
150
|
+
if (!deepEqual(a[ka[i]], b[kb[i]]))
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=roadmap-edit-shipped.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roadmap-edit-shipped.js","sourceRoot":"","sources":["../../../src/cli/guards/roadmap-edit-shipped.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,KAAgB,EAAE,GAAW;IACzE,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC;IAE5D,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,SAA+B,CAAC;IACnE,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IAEzB,IAAI,UAAkB,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC/B,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,IAAI,oBAAoB,CAAC,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,UAAU;QAAE,OAAO,EAAE,CAAC;IAEhD,IAAI,cAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,cAAc,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,8CAA8C;IAC3D,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,EAAE,UAAgC,CAAC;IACrE,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,EAAE,UAAgC,CAAC;IACrE,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAEvC,IAAI,cAAsB,CAAC;IAC3B,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO,EAAE,CAAC,CAAC,oCAAoC;QACxF,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;SAAM,CAAC;QACN,cAAc,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,IAAI,OAAgC,CAAC;IACrC,IAAI,IAA6B,CAAC;IAClC,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACrC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,+DAA+D;IAC5E,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IAE/E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAI,CAAsB,EAAE,EAAE,CAAC;QACvC,IAAI,OAAO,EAAE,KAAK,QAAQ;YAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,GAAyC,CAAC;QACpD,IAAI,CAAC,EAAE,MAAM,KAAK,UAAU;YAAE,SAAS;QACvC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;QAChB,IAAI,OAAO,EAAE,KAAK,QAAQ;YAAE,SAAS;QAErC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,iCAAiC,CAAC,CAAC;YACzD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YACzB,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,kCAAkC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,OAAO;QACL,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE;YACX,uDAAuD;YACvD,EAAE;YACF,aAAa;YACb,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,EAAE;YACF,yEAAyE;YACzE,oEAAoE;YACpE,wCAAwC;YACxC,EAAE;YACF,mEAAmE;YACnE,iCAAiC;SAClC,CAAC,IAAI,CAAC,IAAI,CAAC;KACb,CAAC;AACJ,CAAC;AAED;8DAC8D;AAC9D,SAAS,gBAAgB,CAAC,CAAU;IAClC,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IACvC,OAAO,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,SAAS,CAAC,CAAU,EAAE,CAAU;IACvC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,OAAO,CAAC,KAAK,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAExD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sEAAsE;IACtE,wEAAwE;IACxE,wEAAwE;IACxE,4DAA4D;IAC5D,IAAI,gBAAgB,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC,CAAC,uDAAuD;QACvE,CAAC;IACH,CAAC;IAED,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAA4B,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5D,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAA4B,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5D,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAClC,IAAI,CAAC,SAAS,CAAE,CAA6B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAG,CAA6B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IAC7G,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|