@slope-dev/slope 1.5.1
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/LICENSE +21 -0
- package/README.md +243 -0
- package/dist/cli/commands/auto-card.d.ts +2 -0
- package/dist/cli/commands/auto-card.d.ts.map +1 -0
- package/dist/cli/commands/auto-card.js +267 -0
- package/dist/cli/commands/auto-card.js.map +1 -0
- package/dist/cli/commands/briefing.d.ts +2 -0
- package/dist/cli/commands/briefing.d.ts.map +1 -0
- package/dist/cli/commands/briefing.js +133 -0
- package/dist/cli/commands/briefing.js.map +1 -0
- package/dist/cli/commands/card.d.ts +2 -0
- package/dist/cli/commands/card.d.ts.map +1 -0
- package/dist/cli/commands/card.js +144 -0
- package/dist/cli/commands/card.js.map +1 -0
- package/dist/cli/commands/claim.d.ts +2 -0
- package/dist/cli/commands/claim.d.ts.map +1 -0
- package/dist/cli/commands/claim.js +99 -0
- package/dist/cli/commands/claim.js.map +1 -0
- package/dist/cli/commands/classify.d.ts +2 -0
- package/dist/cli/commands/classify.d.ts.map +1 -0
- package/dist/cli/commands/classify.js +70 -0
- package/dist/cli/commands/classify.js.map +1 -0
- package/dist/cli/commands/dashboard.d.ts +4 -0
- package/dist/cli/commands/dashboard.d.ts.map +1 -0
- package/dist/cli/commands/dashboard.js +156 -0
- package/dist/cli/commands/dashboard.js.map +1 -0
- package/dist/cli/commands/distill.d.ts +2 -0
- package/dist/cli/commands/distill.d.ts.map +1 -0
- package/dist/cli/commands/distill.js +91 -0
- package/dist/cli/commands/distill.js.map +1 -0
- package/dist/cli/commands/escalate.d.ts +2 -0
- package/dist/cli/commands/escalate.d.ts.map +1 -0
- package/dist/cli/commands/escalate.js +136 -0
- package/dist/cli/commands/escalate.js.map +1 -0
- package/dist/cli/commands/extract.d.ts +2 -0
- package/dist/cli/commands/extract.d.ts.map +1 -0
- package/dist/cli/commands/extract.js +147 -0
- package/dist/cli/commands/extract.js.map +1 -0
- package/dist/cli/commands/flows.d.ts +2 -0
- package/dist/cli/commands/flows.d.ts.map +1 -0
- package/dist/cli/commands/flows.js +156 -0
- package/dist/cli/commands/flows.js.map +1 -0
- package/dist/cli/commands/guard.d.ts +15 -0
- package/dist/cli/commands/guard.d.ts.map +1 -0
- package/dist/cli/commands/guard.js +207 -0
- package/dist/cli/commands/guard.js.map +1 -0
- package/dist/cli/commands/hook.d.ts +2 -0
- package/dist/cli/commands/hook.d.ts.map +1 -0
- package/dist/cli/commands/hook.js +299 -0
- package/dist/cli/commands/hook.js.map +1 -0
- package/dist/cli/commands/init.d.ts +6 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +421 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/map.d.ts +10 -0
- package/dist/cli/commands/map.d.ts.map +1 -0
- package/dist/cli/commands/map.js +591 -0
- package/dist/cli/commands/map.js.map +1 -0
- package/dist/cli/commands/next.d.ts +2 -0
- package/dist/cli/commands/next.d.ts.map +1 -0
- package/dist/cli/commands/next.js +28 -0
- package/dist/cli/commands/next.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +2 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +54 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/plugin.d.ts +2 -0
- package/dist/cli/commands/plugin.d.ts.map +1 -0
- package/dist/cli/commands/plugin.js +118 -0
- package/dist/cli/commands/plugin.js.map +1 -0
- package/dist/cli/commands/release.d.ts +2 -0
- package/dist/cli/commands/release.d.ts.map +1 -0
- package/dist/cli/commands/release.js +64 -0
- package/dist/cli/commands/release.js.map +1 -0
- package/dist/cli/commands/report.d.ts +2 -0
- package/dist/cli/commands/report.d.ts.map +1 -0
- package/dist/cli/commands/report.js +68 -0
- package/dist/cli/commands/report.js.map +1 -0
- package/dist/cli/commands/review-state.d.ts +11 -0
- package/dist/cli/commands/review-state.d.ts.map +1 -0
- package/dist/cli/commands/review-state.js +193 -0
- package/dist/cli/commands/review-state.js.map +1 -0
- package/dist/cli/commands/review.d.ts +2 -0
- package/dist/cli/commands/review.d.ts.map +1 -0
- package/dist/cli/commands/review.js +53 -0
- package/dist/cli/commands/review.js.map +1 -0
- package/dist/cli/commands/roadmap.d.ts +2 -0
- package/dist/cli/commands/roadmap.d.ts.map +1 -0
- package/dist/cli/commands/roadmap.js +283 -0
- package/dist/cli/commands/roadmap.js.map +1 -0
- package/dist/cli/commands/session.d.ts +2 -0
- package/dist/cli/commands/session.d.ts.map +1 -0
- package/dist/cli/commands/session.js +232 -0
- package/dist/cli/commands/session.js.map +1 -0
- package/dist/cli/commands/standup.d.ts +2 -0
- package/dist/cli/commands/standup.d.ts.map +1 -0
- package/dist/cli/commands/standup.js +117 -0
- package/dist/cli/commands/standup.js.map +1 -0
- package/dist/cli/commands/status.d.ts +2 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +148 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/tournament.d.ts +2 -0
- package/dist/cli/commands/tournament.d.ts.map +1 -0
- package/dist/cli/commands/tournament.js +60 -0
- package/dist/cli/commands/tournament.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +2 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +74 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/config.d.ts +2 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +2 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/guards/commit-nudge.d.ts +7 -0
- package/dist/cli/guards/commit-nudge.d.ts.map +1 -0
- package/dist/cli/guards/commit-nudge.js +50 -0
- package/dist/cli/guards/commit-nudge.js.map +1 -0
- package/dist/cli/guards/compaction.d.ts +8 -0
- package/dist/cli/guards/compaction.d.ts.map +1 -0
- package/dist/cli/guards/compaction.js +79 -0
- package/dist/cli/guards/compaction.js.map +1 -0
- package/dist/cli/guards/explore.d.ts +8 -0
- package/dist/cli/guards/explore.d.ts.map +1 -0
- package/dist/cli/guards/explore.js +78 -0
- package/dist/cli/guards/explore.js.map +1 -0
- package/dist/cli/guards/hazard.d.ts +7 -0
- package/dist/cli/guards/hazard.d.ts.map +1 -0
- package/dist/cli/guards/hazard.js +43 -0
- package/dist/cli/guards/hazard.js.map +1 -0
- package/dist/cli/guards/next-action.d.ts +28 -0
- package/dist/cli/guards/next-action.d.ts.map +1 -0
- package/dist/cli/guards/next-action.js +196 -0
- package/dist/cli/guards/next-action.js.map +1 -0
- package/dist/cli/guards/push-nudge.d.ts +7 -0
- package/dist/cli/guards/push-nudge.d.ts.map +1 -0
- package/dist/cli/guards/push-nudge.js +53 -0
- package/dist/cli/guards/push-nudge.js.map +1 -0
- package/dist/cli/guards/review-tier.d.ts +7 -0
- package/dist/cli/guards/review-tier.d.ts.map +1 -0
- package/dist/cli/guards/review-tier.js +108 -0
- package/dist/cli/guards/review-tier.js.map +1 -0
- package/dist/cli/guards/scope-drift.d.ts +7 -0
- package/dist/cli/guards/scope-drift.d.ts.map +1 -0
- package/dist/cli/guards/scope-drift.js +47 -0
- package/dist/cli/guards/scope-drift.js.map +1 -0
- package/dist/cli/guards/stop-check.d.ts +7 -0
- package/dist/cli/guards/stop-check.d.ts.map +1 -0
- package/dist/cli/guards/stop-check.js +34 -0
- package/dist/cli/guards/stop-check.js.map +1 -0
- package/dist/cli/guards/subagent-gate.d.ts +7 -0
- package/dist/cli/guards/subagent-gate.d.ts.map +1 -0
- package/dist/cli/guards/subagent-gate.js +39 -0
- package/dist/cli/guards/subagent-gate.js.map +1 -0
- package/dist/cli/guards/version-check.d.ts +8 -0
- package/dist/cli/guards/version-check.d.ts.map +1 -0
- package/dist/cli/guards/version-check.js +49 -0
- package/dist/cli/guards/version-check.js.map +1 -0
- package/dist/cli/guards/workflow-gate.d.ts +7 -0
- package/dist/cli/guards/workflow-gate.d.ts.map +1 -0
- package/dist/cli/guards/workflow-gate.js +31 -0
- package/dist/cli/guards/workflow-gate.js.map +1 -0
- package/dist/cli/hooks-config.d.ts +9 -0
- package/dist/cli/hooks-config.d.ts.map +1 -0
- package/dist/cli/hooks-config.js +21 -0
- package/dist/cli/hooks-config.js.map +1 -0
- package/dist/cli/index.d.ts +19 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +282 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/loader.d.ts +2 -0
- package/dist/cli/loader.d.ts.map +1 -0
- package/dist/cli/loader.js +2 -0
- package/dist/cli/loader.js.map +1 -0
- package/dist/cli/metaphor.d.ts +6 -0
- package/dist/cli/metaphor.d.ts.map +1 -0
- package/dist/cli/metaphor.js +26 -0
- package/dist/cli/metaphor.js.map +1 -0
- package/dist/cli/registries/api-registry.d.ts +11 -0
- package/dist/cli/registries/api-registry.d.ts.map +1 -0
- package/dist/cli/registries/api-registry.js +42 -0
- package/dist/cli/registries/api-registry.js.map +1 -0
- package/dist/cli/registries/file-registry.d.ts +13 -0
- package/dist/cli/registries/file-registry.d.ts.map +1 -0
- package/dist/cli/registries/file-registry.js +55 -0
- package/dist/cli/registries/file-registry.js.map +1 -0
- package/dist/cli/registries/index.d.ts +7 -0
- package/dist/cli/registries/index.d.ts.map +1 -0
- package/dist/cli/registries/index.js +20 -0
- package/dist/cli/registries/index.js.map +1 -0
- package/dist/cli/store.d.ts +3 -0
- package/dist/cli/store.d.ts.map +1 -0
- package/dist/cli/store.js +13 -0
- package/dist/cli/store.js.map +1 -0
- package/dist/cli/template-generator.d.ts +15 -0
- package/dist/cli/template-generator.d.ts.map +1 -0
- package/dist/cli/template-generator.js +562 -0
- package/dist/cli/template-generator.js.map +1 -0
- package/dist/core/advisor.d.ts +63 -0
- package/dist/core/advisor.d.ts.map +1 -0
- package/dist/core/advisor.js +395 -0
- package/dist/core/advisor.js.map +1 -0
- package/dist/core/briefing.d.ts +103 -0
- package/dist/core/briefing.d.ts.map +1 -0
- package/dist/core/briefing.js +380 -0
- package/dist/core/briefing.js.map +1 -0
- package/dist/core/builder.d.ts +70 -0
- package/dist/core/builder.d.ts.map +1 -0
- package/dist/core/builder.js +175 -0
- package/dist/core/builder.js.map +1 -0
- package/dist/core/ci-signals.d.ts +10 -0
- package/dist/core/ci-signals.d.ts.map +1 -0
- package/dist/core/ci-signals.js +145 -0
- package/dist/core/ci-signals.js.map +1 -0
- package/dist/core/config.d.ts +48 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +42 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/constants.d.ts +14 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/constants.js +44 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/dashboard.d.ts +40 -0
- package/dist/core/dashboard.d.ts.map +1 -0
- package/dist/core/dashboard.js +413 -0
- package/dist/core/dashboard.js.map +1 -0
- package/dist/core/dispersion.d.ts +12 -0
- package/dist/core/dispersion.d.ts.map +1 -0
- package/dist/core/dispersion.js +164 -0
- package/dist/core/dispersion.js.map +1 -0
- package/dist/core/escalation.d.ts +52 -0
- package/dist/core/escalation.d.ts.map +1 -0
- package/dist/core/escalation.js +105 -0
- package/dist/core/escalation.js.map +1 -0
- package/dist/core/flows.d.ts +44 -0
- package/dist/core/flows.d.ts.map +1 -0
- package/dist/core/flows.js +123 -0
- package/dist/core/flows.js.map +1 -0
- package/dist/core/formatter.d.ts +23 -0
- package/dist/core/formatter.d.ts.map +1 -0
- package/dist/core/formatter.js +301 -0
- package/dist/core/formatter.js.map +1 -0
- package/dist/core/guard.d.ts +124 -0
- package/dist/core/guard.d.ts.map +1 -0
- package/dist/core/guard.js +185 -0
- package/dist/core/guard.js.map +1 -0
- package/dist/core/handicap.d.ts +22 -0
- package/dist/core/handicap.d.ts.map +1 -0
- package/dist/core/handicap.js +111 -0
- package/dist/core/handicap.js.map +1 -0
- package/dist/core/index.d.ts +55 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +62 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/leaderboard.d.ts +32 -0
- package/dist/core/leaderboard.d.ts.map +1 -0
- package/dist/core/leaderboard.js +98 -0
- package/dist/core/leaderboard.js.map +1 -0
- package/dist/core/loader.d.ts +17 -0
- package/dist/core/loader.d.ts.map +1 -0
- package/dist/core/loader.js +68 -0
- package/dist/core/loader.js.map +1 -0
- package/dist/core/metaphor.d.ts +73 -0
- package/dist/core/metaphor.d.ts.map +1 -0
- package/dist/core/metaphor.js +73 -0
- package/dist/core/metaphor.js.map +1 -0
- package/dist/core/metaphors/baseball.d.ts +3 -0
- package/dist/core/metaphors/baseball.d.ts.map +1 -0
- package/dist/core/metaphors/baseball.js +89 -0
- package/dist/core/metaphors/baseball.js.map +1 -0
- package/dist/core/metaphors/dnd.d.ts +3 -0
- package/dist/core/metaphors/dnd.d.ts.map +1 -0
- package/dist/core/metaphors/dnd.js +89 -0
- package/dist/core/metaphors/dnd.js.map +1 -0
- package/dist/core/metaphors/gaming.d.ts +3 -0
- package/dist/core/metaphors/gaming.d.ts.map +1 -0
- package/dist/core/metaphors/gaming.js +89 -0
- package/dist/core/metaphors/gaming.js.map +1 -0
- package/dist/core/metaphors/golf.d.ts +3 -0
- package/dist/core/metaphors/golf.d.ts.map +1 -0
- package/dist/core/metaphors/golf.js +89 -0
- package/dist/core/metaphors/golf.js.map +1 -0
- package/dist/core/metaphors/index.d.ts +8 -0
- package/dist/core/metaphors/index.d.ts.map +1 -0
- package/dist/core/metaphors/index.js +17 -0
- package/dist/core/metaphors/index.js.map +1 -0
- package/dist/core/metaphors/matrix.d.ts +3 -0
- package/dist/core/metaphors/matrix.d.ts.map +1 -0
- package/dist/core/metaphors/matrix.js +89 -0
- package/dist/core/metaphors/matrix.js.map +1 -0
- package/dist/core/metaphors/tennis.d.ts +3 -0
- package/dist/core/metaphors/tennis.d.ts.map +1 -0
- package/dist/core/metaphors/tennis.js +89 -0
- package/dist/core/metaphors/tennis.js.map +1 -0
- package/dist/core/pipeline.d.ts +39 -0
- package/dist/core/pipeline.d.ts.map +1 -0
- package/dist/core/pipeline.js +158 -0
- package/dist/core/pipeline.js.map +1 -0
- package/dist/core/player.d.ts +51 -0
- package/dist/core/player.d.ts.map +1 -0
- package/dist/core/player.js +101 -0
- package/dist/core/player.js.map +1 -0
- package/dist/core/plugins.d.ts +33 -0
- package/dist/core/plugins.d.ts.map +1 -0
- package/dist/core/plugins.js +176 -0
- package/dist/core/plugins.js.map +1 -0
- package/dist/core/pr-signals.d.ts +23 -0
- package/dist/core/pr-signals.d.ts.map +1 -0
- package/dist/core/pr-signals.js +178 -0
- package/dist/core/pr-signals.js.map +1 -0
- package/dist/core/registry.d.ts +20 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +62 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/report.d.ts +50 -0
- package/dist/core/report.d.ts.map +1 -0
- package/dist/core/report.js +392 -0
- package/dist/core/report.js.map +1 -0
- package/dist/core/roadmap.d.ts +74 -0
- package/dist/core/roadmap.d.ts.map +1 -0
- package/dist/core/roadmap.js +389 -0
- package/dist/core/roadmap.js.map +1 -0
- package/dist/core/roles.d.ts +23 -0
- package/dist/core/roles.d.ts.map +1 -0
- package/dist/core/roles.js +107 -0
- package/dist/core/roles.js.map +1 -0
- package/dist/core/standup.d.ts +44 -0
- package/dist/core/standup.d.ts.map +1 -0
- package/dist/core/standup.js +164 -0
- package/dist/core/standup.js.map +1 -0
- package/dist/core/store.d.ts +43 -0
- package/dist/core/store.d.ts.map +1 -0
- package/dist/core/store.js +11 -0
- package/dist/core/store.js.map +1 -0
- package/dist/core/team-handicap.d.ts +59 -0
- package/dist/core/team-handicap.d.ts.map +1 -0
- package/dist/core/team-handicap.js +227 -0
- package/dist/core/team-handicap.js.map +1 -0
- package/dist/core/tournament.d.ts +12 -0
- package/dist/core/tournament.d.ts.map +1 -0
- package/dist/core/tournament.js +249 -0
- package/dist/core/tournament.js.map +1 -0
- package/dist/core/types.d.ts +339 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +4 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/validation.d.ts +23 -0
- package/dist/core/validation.d.ts.map +1 -0
- package/dist/core/validation.js +140 -0
- package/dist/core/validation.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +17 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +363 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/index.test.d.ts +2 -0
- package/dist/mcp/index.test.d.ts.map +1 -0
- package/dist/mcp/index.test.js +497 -0
- package/dist/mcp/index.test.js.map +1 -0
- package/dist/mcp/registry.d.ts +17 -0
- package/dist/mcp/registry.d.ts.map +1 -0
- package/dist/mcp/registry.js +708 -0
- package/dist/mcp/registry.js.map +1 -0
- package/dist/mcp/sandbox.d.ts +15 -0
- package/dist/mcp/sandbox.d.ts.map +1 -0
- package/dist/mcp/sandbox.js +153 -0
- package/dist/mcp/sandbox.js.map +1 -0
- package/dist/store/index.d.ts +40 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +324 -0
- package/dist/store/index.js.map +1 -0
- package/dist/tokens/colors.d.ts +47 -0
- package/dist/tokens/colors.d.ts.map +1 -0
- package/dist/tokens/colors.js +56 -0
- package/dist/tokens/colors.js.map +1 -0
- package/dist/tokens/css.d.ts +3 -0
- package/dist/tokens/css.d.ts.map +1 -0
- package/dist/tokens/css.js +58 -0
- package/dist/tokens/css.js.map +1 -0
- package/dist/tokens/index.d.ts +5 -0
- package/dist/tokens/index.d.ts.map +1 -0
- package/dist/tokens/index.js +6 -0
- package/dist/tokens/index.js.map +1 -0
- package/dist/tokens/spacing.d.ts +23 -0
- package/dist/tokens/spacing.d.ts.map +1 -0
- package/dist/tokens/spacing.js +28 -0
- package/dist/tokens/spacing.js.map +1 -0
- package/dist/tokens/typography.d.ts +28 -0
- package/dist/tokens/typography.d.ts.map +1 -0
- package/dist/tokens/typography.js +34 -0
- package/dist/tokens/typography.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { loadConfig } from '../config.js';
|
|
2
|
+
import { resolveStore } from '../store.js';
|
|
3
|
+
/**
|
|
4
|
+
* Scope drift guard: fires PreToolUse on Edit|Write.
|
|
5
|
+
* Warns when editing files outside the claimed ticket's scope.
|
|
6
|
+
*/
|
|
7
|
+
export async function scopeDriftGuard(input, cwd) {
|
|
8
|
+
const config = loadConfig();
|
|
9
|
+
if (config.guidance?.scopeDrift === false)
|
|
10
|
+
return {};
|
|
11
|
+
const filePath = input.tool_input?.file_path;
|
|
12
|
+
if (!filePath)
|
|
13
|
+
return {};
|
|
14
|
+
// Normalize file path relative to cwd
|
|
15
|
+
const relativePath = filePath.startsWith(cwd)
|
|
16
|
+
? filePath.slice(cwd.length + 1)
|
|
17
|
+
: filePath;
|
|
18
|
+
// Look up active claims for the current sprint
|
|
19
|
+
let sprintNumber;
|
|
20
|
+
if (config.currentSprint) {
|
|
21
|
+
sprintNumber = config.currentSprint;
|
|
22
|
+
}
|
|
23
|
+
if (!sprintNumber)
|
|
24
|
+
return {}; // Can't check without a sprint
|
|
25
|
+
try {
|
|
26
|
+
const store = await resolveStore(cwd);
|
|
27
|
+
const claims = await store.list(sprintNumber);
|
|
28
|
+
store.close();
|
|
29
|
+
if (claims.length === 0)
|
|
30
|
+
return {}; // No claims — can't check
|
|
31
|
+
// Check if the file is within any claimed area
|
|
32
|
+
const areaClaims = claims.filter(c => c.scope === 'area');
|
|
33
|
+
if (areaClaims.length === 0)
|
|
34
|
+
return {}; // No area claims — ticket-only claims don't restrict files
|
|
35
|
+
const inScope = areaClaims.some(c => relativePath.startsWith(c.target));
|
|
36
|
+
if (inScope)
|
|
37
|
+
return {}; // File is in scope
|
|
38
|
+
const claimedAreas = areaClaims.map(c => c.target).join(', ');
|
|
39
|
+
return {
|
|
40
|
+
context: `SLOPE scope drift: ${relativePath} is outside claimed areas (${claimedAreas}). Intentional?`,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return {}; // Store not available — skip
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=scope-drift.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-drift.js","sourceRoot":"","sources":["../../../src/cli/guards/scope-drift.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAgB,EAAE,GAAW;IACjE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,MAAM,CAAC,QAAQ,EAAE,UAAU,KAAK,KAAK;QAAE,OAAO,EAAE,CAAC;IAErD,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,SAA+B,CAAC;IACnE,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IAEzB,sCAAsC;IACtC,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;QAC3C,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QAChC,CAAC,CAAC,QAAQ,CAAC;IAEb,+CAA+C;IAC/C,IAAI,YAAgC,CAAC;IACrC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC;IACtC,CAAC;IACD,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,CAAC,CAAC,+BAA+B;IAE7D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9C,KAAK,CAAC,KAAK,EAAE,CAAC;QAEd,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC,CAAC,0BAA0B;QAE9D,+CAA+C;QAC/C,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC;QAC1D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC,CAAC,2DAA2D;QAEnG,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACxE,IAAI,OAAO;YAAE,OAAO,EAAE,CAAC,CAAC,mBAAmB;QAE3C,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,OAAO;YACL,OAAO,EAAE,sBAAsB,YAAY,8BAA8B,YAAY,iBAAiB;SACvG,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,6BAA6B;IAC1C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { HookInput, GuardResult } from '../../core/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Stop check guard: fires on Stop.
|
|
4
|
+
* Checks for uncommitted/unpushed work before session end.
|
|
5
|
+
*/
|
|
6
|
+
export declare function stopCheckGuard(input: HookInput, cwd: string): Promise<GuardResult>;
|
|
7
|
+
//# sourceMappingURL=stop-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop-check.d.ts","sourceRoot":"","sources":["../../../src/cli/guards/stop-check.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElE;;;GAGG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA4BxF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
/**
|
|
3
|
+
* Stop check guard: fires on Stop.
|
|
4
|
+
* Checks for uncommitted/unpushed work before session end.
|
|
5
|
+
*/
|
|
6
|
+
export async function stopCheckGuard(input, cwd) {
|
|
7
|
+
const issues = [];
|
|
8
|
+
// Check for uncommitted changes
|
|
9
|
+
try {
|
|
10
|
+
const status = execSync('git status --porcelain 2>/dev/null', { cwd, encoding: 'utf8' }).trim();
|
|
11
|
+
if (status.length > 0) {
|
|
12
|
+
const lines = status.split('\n').filter(Boolean);
|
|
13
|
+
issues.push(`${lines.length} uncommitted change${lines.length === 1 ? '' : 's'}`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
catch { /* not a git repo */ }
|
|
17
|
+
// Check for unpushed commits
|
|
18
|
+
try {
|
|
19
|
+
const unpushed = execSync('git log @{u}..HEAD --oneline 2>/dev/null', { cwd, encoding: 'utf8' }).trim();
|
|
20
|
+
if (unpushed) {
|
|
21
|
+
const lines = unpushed.split('\n').filter(Boolean);
|
|
22
|
+
if (lines.length > 0) {
|
|
23
|
+
issues.push(`${lines.length} unpushed commit${lines.length === 1 ? '' : 's'}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch { /* no upstream */ }
|
|
28
|
+
if (issues.length === 0)
|
|
29
|
+
return {};
|
|
30
|
+
return {
|
|
31
|
+
blockReason: `SLOPE: ${issues.join(' and ')} detected. Commit and push before stopping to preserve your recovery point.`,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=stop-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop-check.js","sourceRoot":"","sources":["../../../src/cli/guards/stop-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAgB,EAAE,GAAW;IAChE,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,gCAAgC;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,oCAAoC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAChG,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,sBAAsB,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAEhC,6BAA6B;IAC7B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,0CAA0C,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACxG,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,mBAAmB,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAE7B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,OAAO;QACL,WAAW,EAAE,UAAU,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,6EAA6E;KACzH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { HookInput, GuardResult } from '../../core/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Subagent gate guard: fires PreToolUse on Task.
|
|
4
|
+
* Forces haiku model and caps max_turns on Explore/Plan subagents.
|
|
5
|
+
*/
|
|
6
|
+
export declare function subagentGateGuard(input: HookInput, _cwd: string): Promise<GuardResult>;
|
|
7
|
+
//# sourceMappingURL=subagent-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-gate.d.ts","sourceRoot":"","sources":["../../../src/cli/guards/subagent-gate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlE;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAqC5F"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { loadConfig } from '../config.js';
|
|
2
|
+
/**
|
|
3
|
+
* Subagent gate guard: fires PreToolUse on Task.
|
|
4
|
+
* Forces haiku model and caps max_turns on Explore/Plan subagents.
|
|
5
|
+
*/
|
|
6
|
+
export async function subagentGateGuard(input, _cwd) {
|
|
7
|
+
const toolInput = input.tool_input ?? {};
|
|
8
|
+
const subagentType = toolInput.subagent_type;
|
|
9
|
+
const model = toolInput.model;
|
|
10
|
+
const maxTurns = toolInput.max_turns;
|
|
11
|
+
const resume = toolInput.resume;
|
|
12
|
+
// Exempt resumed agents — they inherit prior settings
|
|
13
|
+
if (resume)
|
|
14
|
+
return {};
|
|
15
|
+
// Only gate Explore and Plan subagents
|
|
16
|
+
if (subagentType !== 'Explore' && subagentType !== 'Plan')
|
|
17
|
+
return {};
|
|
18
|
+
const config = loadConfig();
|
|
19
|
+
const guidance = config.guidance ?? {};
|
|
20
|
+
const allowedModels = guidance.subagentAllowModels ?? ['haiku'];
|
|
21
|
+
const turnsLimit = subagentType === 'Explore'
|
|
22
|
+
? (guidance.subagentExploreTurns ?? 10)
|
|
23
|
+
: (guidance.subagentPlanTurns ?? 15);
|
|
24
|
+
const violations = [];
|
|
25
|
+
if (model && !allowedModels.includes(model)) {
|
|
26
|
+
violations.push(`model "${model}" not in allowed list [${allowedModels.join(', ')}]`);
|
|
27
|
+
}
|
|
28
|
+
if (maxTurns === undefined || maxTurns > turnsLimit) {
|
|
29
|
+
const current = maxTurns === undefined ? 'not set' : `${maxTurns}`;
|
|
30
|
+
violations.push(`max_turns ${current}, limit is ${turnsLimit}`);
|
|
31
|
+
}
|
|
32
|
+
if (violations.length === 0)
|
|
33
|
+
return {};
|
|
34
|
+
return {
|
|
35
|
+
decision: 'deny',
|
|
36
|
+
blockReason: `SLOPE subagent-gate: ${subagentType} agent blocked — ${violations.join('; ')}. Resubmit with model: ${allowedModels[0]}, max_turns: ${turnsLimit}.`,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=subagent-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-gate.js","sourceRoot":"","sources":["../../../src/cli/guards/subagent-gate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAgB,EAAE,IAAY;IACpE,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;IACzC,MAAM,YAAY,GAAG,SAAS,CAAC,aAAmC,CAAC;IACnE,MAAM,KAAK,GAAG,SAAS,CAAC,KAA2B,CAAC;IACpD,MAAM,QAAQ,GAAG,SAAS,CAAC,SAA+B,CAAC;IAC3D,MAAM,MAAM,GAAG,SAAS,CAAC,MAA4B,CAAC;IAEtD,sDAAsD;IACtD,IAAI,MAAM;QAAE,OAAO,EAAE,CAAC;IAEtB,uCAAuC;IACvC,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IAErE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;IACvC,MAAM,aAAa,GAAG,QAAQ,CAAC,mBAAmB,IAAI,CAAC,OAAO,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,YAAY,KAAK,SAAS;QAC3C,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,IAAI,EAAE,CAAC;QACvC,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IAEvC,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,UAAU,CAAC,IAAI,CAAC,UAAU,KAAK,0BAA0B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,GAAG,UAAU,EAAE,CAAC;QACpD,MAAM,OAAO,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC;QACnE,UAAU,CAAC,IAAI,CAAC,aAAa,OAAO,cAAc,UAAU,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,OAAO;QACL,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,wBAAwB,YAAY,oBAAoB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,aAAa,CAAC,CAAC,CAAC,gBAAgB,UAAU,GAAG;KAClK,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { HookInput, GuardResult } from '../../core/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Version-check guard: fires PreToolUse on Bash.
|
|
4
|
+
* Blocks `git push` to main/master when local package version matches
|
|
5
|
+
* the published npm version (i.e. version hasn't been bumped).
|
|
6
|
+
*/
|
|
7
|
+
export declare function versionCheckGuard(input: HookInput, cwd: string): Promise<GuardResult>;
|
|
8
|
+
//# sourceMappingURL=version-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../../../src/cli/guards/version-check.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElE;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAwC3F"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
/**
|
|
5
|
+
* Version-check guard: fires PreToolUse on Bash.
|
|
6
|
+
* Blocks `git push` to main/master when local package version matches
|
|
7
|
+
* the published npm version (i.e. version hasn't been bumped).
|
|
8
|
+
*/
|
|
9
|
+
export async function versionCheckGuard(input, cwd) {
|
|
10
|
+
const command = input.tool_input?.command ?? '';
|
|
11
|
+
// Only fire on git push targeting main/master
|
|
12
|
+
if (!command.includes('git push'))
|
|
13
|
+
return {};
|
|
14
|
+
if (!/(main|master)/.test(command))
|
|
15
|
+
return {};
|
|
16
|
+
// Read local version from core package.json
|
|
17
|
+
let localVersion;
|
|
18
|
+
try {
|
|
19
|
+
const pkgPath = join(cwd, 'packages', 'core', 'package.json');
|
|
20
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
|
|
21
|
+
localVersion = pkg.version;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Can't read local package — skip check
|
|
25
|
+
return {};
|
|
26
|
+
}
|
|
27
|
+
// Get published version from npm
|
|
28
|
+
let publishedVersion;
|
|
29
|
+
try {
|
|
30
|
+
publishedVersion = execSync('npm view @slope-dev/slope version 2>/dev/null', {
|
|
31
|
+
cwd,
|
|
32
|
+
encoding: 'utf8',
|
|
33
|
+
timeout: 10000,
|
|
34
|
+
}).trim();
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Package not published yet or npm unreachable — allow
|
|
38
|
+
return {};
|
|
39
|
+
}
|
|
40
|
+
// If versions match, the developer hasn't bumped yet
|
|
41
|
+
if (localVersion === publishedVersion) {
|
|
42
|
+
return {
|
|
43
|
+
decision: 'deny',
|
|
44
|
+
blockReason: `Version not bumped — local @slope-dev/slope is ${localVersion}, same as npm. Run \`pnpm version:bump <version>\` before pushing to main.`,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return {};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=version-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-check.js","sourceRoot":"","sources":["../../../src/cli/guards/version-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAgB,EAAE,GAAW;IACnE,MAAM,OAAO,GAAI,KAAK,CAAC,UAAU,EAAE,OAAkB,IAAI,EAAE,CAAC;IAE5D,8CAA8C;IAC9C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IAE9C,4CAA4C;IAC5C,IAAI,YAAoB,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QACtD,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,wCAAwC;QACxC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,iCAAiC;IACjC,IAAI,gBAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,gBAAgB,GAAG,QAAQ,CAAC,+CAA+C,EAAE;YAC3E,GAAG;YACH,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,KAAK;SACf,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,uDAAuD;QACvD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,qDAAqD;IACrD,IAAI,YAAY,KAAK,gBAAgB,EAAE,CAAC;QACtC,OAAO;YACL,QAAQ,EAAE,MAAM;YAChB,WAAW,EAAE,kDAAkD,YAAY,4EAA4E;SACxJ,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { HookInput, GuardResult } from '../../core/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Workflow gate guard: fires PreToolUse on ExitPlanMode.
|
|
4
|
+
* Blocks ExitPlanMode until review rounds are complete.
|
|
5
|
+
*/
|
|
6
|
+
export declare function workflowGateGuard(input: HookInput, cwd: string): Promise<GuardResult>;
|
|
7
|
+
//# sourceMappingURL=workflow-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-gate.d.ts","sourceRoot":"","sources":["../../../src/cli/guards/workflow-gate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAQlE;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAyB3F"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Workflow gate guard: fires PreToolUse on ExitPlanMode.
|
|
5
|
+
* Blocks ExitPlanMode until review rounds are complete.
|
|
6
|
+
*/
|
|
7
|
+
export async function workflowGateGuard(input, cwd) {
|
|
8
|
+
const statePath = join(cwd, '.slope', 'review-state.json');
|
|
9
|
+
if (!existsSync(statePath))
|
|
10
|
+
return {};
|
|
11
|
+
let state;
|
|
12
|
+
try {
|
|
13
|
+
state = JSON.parse(readFileSync(statePath, 'utf8'));
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
// Malformed JSON — don't block on bad data
|
|
17
|
+
return {};
|
|
18
|
+
}
|
|
19
|
+
// Validate shape
|
|
20
|
+
if (typeof state.rounds_required !== 'number' || typeof state.rounds_completed !== 'number') {
|
|
21
|
+
return {};
|
|
22
|
+
}
|
|
23
|
+
if (state.rounds_completed >= state.rounds_required)
|
|
24
|
+
return {};
|
|
25
|
+
const planRef = state.plan_file ? ` (${state.plan_file})` : '';
|
|
26
|
+
return {
|
|
27
|
+
decision: 'deny',
|
|
28
|
+
blockReason: `SLOPE workflow-gate: Review incomplete. ${state.rounds_completed}/${state.rounds_required} rounds done${planRef}. Complete remaining review rounds before exiting plan mode.`,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=workflow-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-gate.js","sourceRoot":"","sources":["../../../src/cli/guards/workflow-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AASjC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAgB,EAAE,GAAW;IACnE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAE3D,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAC;IAEtC,IAAI,KAAkB,CAAC;IACvB,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;QAC3C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,iBAAiB;IACjB,IAAI,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ,EAAE,CAAC;QAC5F,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,eAAe;QAAE,OAAO,EAAE,CAAC;IAE/D,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,OAAO;QACL,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,2CAA2C,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,eAAe,eAAe,OAAO,8DAA8D;KAC5L,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface HooksConfig {
|
|
2
|
+
installed: Record<string, {
|
|
3
|
+
provider: string;
|
|
4
|
+
installed_at: string;
|
|
5
|
+
}>;
|
|
6
|
+
}
|
|
7
|
+
export declare function loadHooksConfig(cwd: string): HooksConfig;
|
|
8
|
+
export declare function saveHooksConfig(cwd: string, config: HooksConfig): void;
|
|
9
|
+
//# sourceMappingURL=hooks-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-config.d.ts","sourceRoot":"","sources":["../../src/cli/hooks-config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvE;AAID,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAUxD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAItE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
const HOOKS_CONFIG_FILE = '.slope/hooks.json';
|
|
4
|
+
export function loadHooksConfig(cwd) {
|
|
5
|
+
const configPath = join(cwd, HOOKS_CONFIG_FILE);
|
|
6
|
+
if (!existsSync(configPath)) {
|
|
7
|
+
return { installed: {} };
|
|
8
|
+
}
|
|
9
|
+
try {
|
|
10
|
+
return JSON.parse(readFileSync(configPath, 'utf8'));
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return { installed: {} };
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function saveHooksConfig(cwd, config) {
|
|
17
|
+
const dir = join(cwd, '.slope');
|
|
18
|
+
mkdirSync(dir, { recursive: true });
|
|
19
|
+
writeFileSync(join(cwd, HOOKS_CONFIG_FILE), JSON.stringify(config, null, 2) + '\n');
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=hooks-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-config.js","sourceRoot":"","sources":["../../src/cli/hooks-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAMjC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAE9C,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC3B,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAgB,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,MAAmB;IAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAChC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACtF,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* SLOPE CLI — Sprint Lifecycle & Operational Performance Engine
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* slope init Initialize .slope/ directory
|
|
7
|
+
* slope card Display handicap card
|
|
8
|
+
* slope validate [path] Validate scorecard(s)
|
|
9
|
+
* slope review [path] [--plain] Format sprint review
|
|
10
|
+
* slope briefing [--sprint=N] [options] Pre-round briefing
|
|
11
|
+
* slope plan --complexity=<level> Pre-shot advisor
|
|
12
|
+
* slope classify --scope=... ... Classify a shot
|
|
13
|
+
* slope claim --target=<t> [--force] Claim a ticket or area
|
|
14
|
+
* slope release --id=<id> Release a claim
|
|
15
|
+
* slope status [--sprint=N] Show sprint course status
|
|
16
|
+
* slope dashboard [--port=N] [--no-open] Live local performance dashboard
|
|
17
|
+
*/
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG"}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* SLOPE CLI — Sprint Lifecycle & Operational Performance Engine
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* slope init Initialize .slope/ directory
|
|
7
|
+
* slope card Display handicap card
|
|
8
|
+
* slope validate [path] Validate scorecard(s)
|
|
9
|
+
* slope review [path] [--plain] Format sprint review
|
|
10
|
+
* slope briefing [--sprint=N] [options] Pre-round briefing
|
|
11
|
+
* slope plan --complexity=<level> Pre-shot advisor
|
|
12
|
+
* slope classify --scope=... ... Classify a shot
|
|
13
|
+
* slope claim --target=<t> [--force] Claim a ticket or area
|
|
14
|
+
* slope release --id=<id> Release a claim
|
|
15
|
+
* slope status [--sprint=N] Show sprint course status
|
|
16
|
+
* slope dashboard [--port=N] [--no-open] Live local performance dashboard
|
|
17
|
+
*/
|
|
18
|
+
import { initCommand } from './commands/init.js';
|
|
19
|
+
import { cardCommand } from './commands/card.js';
|
|
20
|
+
import { validateCommand } from './commands/validate.js';
|
|
21
|
+
import { reviewCommand } from './commands/review.js';
|
|
22
|
+
import { briefingCommand } from './commands/briefing.js';
|
|
23
|
+
import { planCommand } from './commands/plan.js';
|
|
24
|
+
import { classifyCommand } from './commands/classify.js';
|
|
25
|
+
import { claimCommand } from './commands/claim.js';
|
|
26
|
+
import { releaseCommand } from './commands/release.js';
|
|
27
|
+
import { statusCommand } from './commands/status.js';
|
|
28
|
+
import { tournamentCommand } from './commands/tournament.js';
|
|
29
|
+
import { autoCardCommand } from './commands/auto-card.js';
|
|
30
|
+
import { nextCommand } from './commands/next.js';
|
|
31
|
+
import { sessionCommand } from './commands/session.js';
|
|
32
|
+
import { hookCommand } from './commands/hook.js';
|
|
33
|
+
import { roadmapCommand } from './commands/roadmap.js';
|
|
34
|
+
import { extractCommand } from './commands/extract.js';
|
|
35
|
+
import { distillCommand } from './commands/distill.js';
|
|
36
|
+
import { guardCommand, guardManageCommand } from './commands/guard.js';
|
|
37
|
+
import { reportCommand } from './commands/report.js';
|
|
38
|
+
import { standupCommand } from './commands/standup.js';
|
|
39
|
+
import { escalateCommand } from './commands/escalate.js';
|
|
40
|
+
import { pluginCommand } from './commands/plugin.js';
|
|
41
|
+
import { dashboardCommand } from './commands/dashboard.js';
|
|
42
|
+
import { mapCommand } from './commands/map.js';
|
|
43
|
+
import { flowsCommand } from './commands/flows.js';
|
|
44
|
+
import { reviewStateCommand } from './commands/review-state.js';
|
|
45
|
+
const subcommand = process.argv[2];
|
|
46
|
+
switch (subcommand) {
|
|
47
|
+
case 'init':
|
|
48
|
+
initCommand(process.argv.slice(3)).catch(err => {
|
|
49
|
+
console.error('Error:', err.message);
|
|
50
|
+
process.exit(1);
|
|
51
|
+
});
|
|
52
|
+
break;
|
|
53
|
+
case 'card':
|
|
54
|
+
cardCommand(process.argv.slice(3));
|
|
55
|
+
break;
|
|
56
|
+
case 'validate':
|
|
57
|
+
validateCommand(process.argv[3]);
|
|
58
|
+
break;
|
|
59
|
+
case 'review': {
|
|
60
|
+
const reviewArgs = process.argv.slice(3);
|
|
61
|
+
const reviewSub = reviewArgs[0];
|
|
62
|
+
if (['start', 'round', 'status', 'reset'].includes(reviewSub)) {
|
|
63
|
+
reviewStateCommand(reviewArgs).catch(err => {
|
|
64
|
+
console.error('Error:', err.message);
|
|
65
|
+
process.exit(1);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
const plainFlag = reviewArgs.includes('--plain');
|
|
70
|
+
const metaphorArg = reviewArgs.find((a) => a.startsWith('--metaphor='));
|
|
71
|
+
const metaphorVal = metaphorArg?.slice('--metaphor='.length);
|
|
72
|
+
const path = reviewArgs.find((a) => !a.startsWith('--'));
|
|
73
|
+
reviewCommand(path, plainFlag ? 'plain' : undefined, metaphorVal);
|
|
74
|
+
}
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
case 'briefing':
|
|
78
|
+
briefingCommand(process.argv.slice(3)).catch(err => {
|
|
79
|
+
console.error('Error:', err.message);
|
|
80
|
+
process.exit(1);
|
|
81
|
+
});
|
|
82
|
+
break;
|
|
83
|
+
case 'plan':
|
|
84
|
+
planCommand(process.argv.slice(3));
|
|
85
|
+
break;
|
|
86
|
+
case 'classify':
|
|
87
|
+
classifyCommand(process.argv.slice(3));
|
|
88
|
+
break;
|
|
89
|
+
case 'claim':
|
|
90
|
+
claimCommand(process.argv.slice(3)).catch(err => {
|
|
91
|
+
console.error('Error:', err.message);
|
|
92
|
+
process.exit(1);
|
|
93
|
+
});
|
|
94
|
+
break;
|
|
95
|
+
case 'release':
|
|
96
|
+
releaseCommand(process.argv.slice(3)).catch(err => {
|
|
97
|
+
console.error('Error:', err.message);
|
|
98
|
+
process.exit(1);
|
|
99
|
+
});
|
|
100
|
+
break;
|
|
101
|
+
case 'status':
|
|
102
|
+
statusCommand(process.argv.slice(3)).catch(err => {
|
|
103
|
+
console.error('Error:', err.message);
|
|
104
|
+
process.exit(1);
|
|
105
|
+
});
|
|
106
|
+
break;
|
|
107
|
+
case 'tournament':
|
|
108
|
+
tournamentCommand(process.argv.slice(3));
|
|
109
|
+
break;
|
|
110
|
+
case 'auto-card':
|
|
111
|
+
autoCardCommand(process.argv.slice(3)).catch(err => {
|
|
112
|
+
console.error('Error:', err.message);
|
|
113
|
+
process.exit(1);
|
|
114
|
+
});
|
|
115
|
+
break;
|
|
116
|
+
case 'hook':
|
|
117
|
+
hookCommand(process.argv.slice(3)).catch(err => {
|
|
118
|
+
console.error('Error:', err.message);
|
|
119
|
+
process.exit(1);
|
|
120
|
+
});
|
|
121
|
+
break;
|
|
122
|
+
case 'session':
|
|
123
|
+
sessionCommand(process.argv.slice(3)).catch(err => {
|
|
124
|
+
console.error('Error:', err.message);
|
|
125
|
+
process.exit(1);
|
|
126
|
+
});
|
|
127
|
+
break;
|
|
128
|
+
case 'next':
|
|
129
|
+
nextCommand();
|
|
130
|
+
break;
|
|
131
|
+
case 'roadmap':
|
|
132
|
+
roadmapCommand(process.argv.slice(3)).catch(err => {
|
|
133
|
+
console.error('Error:', err.message);
|
|
134
|
+
process.exit(1);
|
|
135
|
+
});
|
|
136
|
+
break;
|
|
137
|
+
case 'extract':
|
|
138
|
+
extractCommand(process.argv.slice(3)).catch(err => {
|
|
139
|
+
console.error('Error:', err.message);
|
|
140
|
+
process.exit(1);
|
|
141
|
+
});
|
|
142
|
+
break;
|
|
143
|
+
case 'distill':
|
|
144
|
+
distillCommand(process.argv.slice(3)).catch(err => {
|
|
145
|
+
console.error('Error:', err.message);
|
|
146
|
+
process.exit(1);
|
|
147
|
+
});
|
|
148
|
+
break;
|
|
149
|
+
case 'report':
|
|
150
|
+
reportCommand(process.argv.slice(3)).catch(err => {
|
|
151
|
+
console.error('Error:', err.message);
|
|
152
|
+
process.exit(1);
|
|
153
|
+
});
|
|
154
|
+
break;
|
|
155
|
+
case 'standup':
|
|
156
|
+
standupCommand(process.argv.slice(3)).catch(err => {
|
|
157
|
+
console.error('Error:', err.message);
|
|
158
|
+
process.exit(1);
|
|
159
|
+
});
|
|
160
|
+
break;
|
|
161
|
+
case 'escalate':
|
|
162
|
+
escalateCommand(process.argv.slice(3)).catch(err => {
|
|
163
|
+
console.error('Error:', err.message);
|
|
164
|
+
process.exit(1);
|
|
165
|
+
});
|
|
166
|
+
break;
|
|
167
|
+
case 'guard': {
|
|
168
|
+
const guardArgs = process.argv.slice(3);
|
|
169
|
+
const guardSub = guardArgs[0];
|
|
170
|
+
if (guardSub === 'list' || guardSub === 'enable' || guardSub === 'disable') {
|
|
171
|
+
guardManageCommand(guardArgs).catch(err => {
|
|
172
|
+
console.error('Error:', err.message);
|
|
173
|
+
process.exit(1);
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
guardCommand(guardArgs).catch(err => {
|
|
178
|
+
console.error('Error:', err.message);
|
|
179
|
+
process.exit(1);
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
case 'plugin':
|
|
185
|
+
pluginCommand(process.argv.slice(3)).catch(err => {
|
|
186
|
+
console.error('Error:', err.message);
|
|
187
|
+
process.exit(1);
|
|
188
|
+
});
|
|
189
|
+
break;
|
|
190
|
+
case 'dashboard':
|
|
191
|
+
dashboardCommand(process.argv.slice(3)).catch(err => {
|
|
192
|
+
console.error('Error:', err.message);
|
|
193
|
+
process.exit(1);
|
|
194
|
+
});
|
|
195
|
+
break;
|
|
196
|
+
case 'map':
|
|
197
|
+
mapCommand(process.argv.slice(3)).catch(err => {
|
|
198
|
+
console.error('Error:', err.message);
|
|
199
|
+
process.exit(1);
|
|
200
|
+
});
|
|
201
|
+
break;
|
|
202
|
+
case 'flows':
|
|
203
|
+
flowsCommand(process.argv.slice(3)).catch(err => {
|
|
204
|
+
console.error('Error:', err.message);
|
|
205
|
+
process.exit(1);
|
|
206
|
+
});
|
|
207
|
+
break;
|
|
208
|
+
default:
|
|
209
|
+
console.log(`
|
|
210
|
+
SLOPE CLI — Sprint Lifecycle & Operational Performance Engine
|
|
211
|
+
|
|
212
|
+
Usage:
|
|
213
|
+
slope init [--claude-code|--cursor|--opencode|--generic|--all] Initialize .slope/ directory
|
|
214
|
+
slope init --team Enable multi-developer team mode
|
|
215
|
+
slope card Show handicap card
|
|
216
|
+
slope card --player=<name> Show handicap for a specific player
|
|
217
|
+
slope card --team Show per-player comparison table
|
|
218
|
+
slope validate [path] Validate scorecard(s)
|
|
219
|
+
slope review [path] [--plain] Format sprint review markdown
|
|
220
|
+
slope review start [--rounds=N|--tier=T] Start plan review lifecycle
|
|
221
|
+
slope review round Record a completed review round
|
|
222
|
+
slope review status Show current review state
|
|
223
|
+
slope review reset Clear review state
|
|
224
|
+
slope briefing [--sprint=N] [options] Pre-round briefing
|
|
225
|
+
slope plan --complexity=<level> Pre-shot advisor (club + training + hazards)
|
|
226
|
+
slope classify --scope=... ... Classify a shot from execution trace
|
|
227
|
+
slope claim --target=<t> [--force] Claim a ticket or area for the sprint
|
|
228
|
+
slope release --id=<id> Release a claim by ID
|
|
229
|
+
slope release --target=<t> [--player=<p>] Release a claim by target
|
|
230
|
+
slope status [--sprint=N] Show sprint course status + conflicts
|
|
231
|
+
slope tournament --id=<id> --sprints=N..M Build tournament review from sprints
|
|
232
|
+
slope auto-card --sprint=<N> [options] Generate scorecard from git + CI signals
|
|
233
|
+
slope hook add|remove|list|show Manage lifecycle hooks
|
|
234
|
+
slope hook add --level=full Install all guidance hooks
|
|
235
|
+
slope guard <name> Run a guard handler (reads stdin)
|
|
236
|
+
slope guard list|enable|disable Manage guard activation
|
|
237
|
+
slope session start|end|heartbeat|list Manage live sessions
|
|
238
|
+
slope next Show next sprint number (auto-detect)
|
|
239
|
+
slope extract --file=<path> [options] Extract events into SLOPE store
|
|
240
|
+
slope distill [--auto] [--dry-run] Promote event patterns to common issues
|
|
241
|
+
slope standup [--session=<id>] [--json] Generate standup report from session
|
|
242
|
+
slope standup --ingest=<path> [--role=<id>] Ingest another agent's standup
|
|
243
|
+
slope report --html [--output=<path>] Generate HTML performance report
|
|
244
|
+
slope dashboard [--port=N] [--no-open] Live local performance dashboard
|
|
245
|
+
slope dashboard --player=<name> Filter dashboard to a single player
|
|
246
|
+
slope roadmap validate|review|status|show Strategic planning tools
|
|
247
|
+
slope map [--check] [--output=<path>] Generate/update codebase map
|
|
248
|
+
slope flows init|list|check Manage user flow definitions
|
|
249
|
+
slope plugin list|validate Manage custom plugins
|
|
250
|
+
|
|
251
|
+
Examples:
|
|
252
|
+
slope init Create .slope/ with config + example scorecard
|
|
253
|
+
slope init --cursor Also install Cursor IDE rules
|
|
254
|
+
slope init --cursor Also add SLOPE MCP server to .cursor/mcp.json
|
|
255
|
+
slope init --claude-code Also install Claude Code rules + hooks
|
|
256
|
+
slope init --opencode Also install OpenCode AGENTS.md + MCP config
|
|
257
|
+
slope init --team Enable multi-developer mode
|
|
258
|
+
slope card Show handicap across all scorecards
|
|
259
|
+
slope card --player=alice Show handicap for alice only
|
|
260
|
+
slope card --team Compare all players side-by-side
|
|
261
|
+
slope validate docs/retros/sprint-1.json Validate a specific scorecard
|
|
262
|
+
slope validate Validate all scorecards
|
|
263
|
+
slope review Review the latest scorecard
|
|
264
|
+
slope review --plain Non-technical sprint review
|
|
265
|
+
slope briefing Full briefing (top 10 recent gotchas)
|
|
266
|
+
slope briefing --categories=testing Filter by category
|
|
267
|
+
slope briefing --keywords=migration Filter by keyword
|
|
268
|
+
slope plan --complexity=medium Club recommendation for medium ticket
|
|
269
|
+
slope plan --complexity=large --areas=db Include hazard warnings for db area
|
|
270
|
+
slope classify --scope="a.ts" --modified="a.ts" --tests=pass --reverts=0
|
|
271
|
+
slope briefing --sprint=2 Briefing for sprint 2
|
|
272
|
+
slope claim --target=S2-1 --sprint=2 Claim ticket S2-1 for sprint 2
|
|
273
|
+
slope claim --target=packages/cli --scope=area Claim an area
|
|
274
|
+
slope claim --target=S2-1 --force Claim even if overlap conflict exists
|
|
275
|
+
slope status --sprint=2 Show all claims for sprint 2
|
|
276
|
+
slope release --target=S2-1 Release your claim on S2-1
|
|
277
|
+
slope dashboard Start live dashboard on port 3000
|
|
278
|
+
slope dashboard --port=8080 --no-open Custom port, no browser auto-open
|
|
279
|
+
`);
|
|
280
|
+
process.exit(subcommand ? 1 : 0);
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|