@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,708 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SLOPE function registry — discoverable API surface for the search() tool.
|
|
3
|
+
*/
|
|
4
|
+
export const SLOPE_REGISTRY = [
|
|
5
|
+
// ─── Handicap ───
|
|
6
|
+
{
|
|
7
|
+
name: 'computePar',
|
|
8
|
+
module: 'core',
|
|
9
|
+
description: 'Maps ticket count to par value (1-2 → 3, 3-4 → 4, 5+ → 5).',
|
|
10
|
+
signature: 'computePar(ticketCount: number): 3 | 4 | 5',
|
|
11
|
+
example: 'return computePar(3); // → 4',
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: 'computeSlope',
|
|
15
|
+
module: 'core',
|
|
16
|
+
description: 'Calculates slope difficulty modifier from an array of factor names.',
|
|
17
|
+
signature: 'computeSlope(factors: string[]): number',
|
|
18
|
+
example: 'return computeSlope(["cross_package", "new_area"]); // → 2',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: 'computeScoreLabel',
|
|
22
|
+
module: 'core',
|
|
23
|
+
description: 'Classifies a score relative to par (eagle, birdie, par, bogey, etc.).',
|
|
24
|
+
signature: 'computeScoreLabel(score: number, par: number): ScoreLabel',
|
|
25
|
+
example: 'return computeScoreLabel(3, 4); // → "birdie"',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: 'computeHandicapCard',
|
|
29
|
+
module: 'core',
|
|
30
|
+
description: 'Computes rolling stats across last-5, last-10, and all-time windows.',
|
|
31
|
+
signature: 'computeHandicapCard(scorecards: GolfScorecard[]): HandicapCard',
|
|
32
|
+
example: 'const cards = loadScorecards(); return computeHandicapCard(cards);',
|
|
33
|
+
},
|
|
34
|
+
// ─── Builder ───
|
|
35
|
+
{
|
|
36
|
+
name: 'computeStatsFromShots',
|
|
37
|
+
module: 'core',
|
|
38
|
+
description: 'Derives fairways, GIR, hazards, and miss directions from shot data.',
|
|
39
|
+
signature: 'computeStatsFromShots(shots: ShotRecord[], overrides?: { putts?: number; penalties?: number }): HoleStats',
|
|
40
|
+
example: 'return computeStatsFromShots(scorecard.shots);',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'buildScorecard',
|
|
44
|
+
module: 'core',
|
|
45
|
+
description: 'Builds a complete GolfScorecard from minimal ScorecardInput, auto-computing stats and score. Supports optional agents field for swarm sprints.',
|
|
46
|
+
signature: 'buildScorecard(input: ScorecardInput): GolfScorecard',
|
|
47
|
+
example: 'return buildScorecard({ sprint_number: 4, theme: "Code Mode", par: 4, slope: 3, date: "2026-02-21", shots: [...] });',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'buildAgentBreakdowns',
|
|
51
|
+
module: 'core',
|
|
52
|
+
description: 'Builds per-agent scoring breakdowns from swarm session shot data. Each agent gets independent score and stats.',
|
|
53
|
+
signature: 'buildAgentBreakdowns(agents: AgentShotInput[]): AgentBreakdown[]',
|
|
54
|
+
example: 'return buildAgentBreakdowns([{ session_id: "s1", agent_role: "backend", shots: [...] }]);',
|
|
55
|
+
},
|
|
56
|
+
// ─── Validation ───
|
|
57
|
+
{
|
|
58
|
+
name: 'validateScorecard',
|
|
59
|
+
module: 'core',
|
|
60
|
+
description: 'Validates scorecard internal consistency (score labels, stat bounds, shot counts).',
|
|
61
|
+
signature: 'validateScorecard(card: GolfScorecard): ScorecardValidationResult',
|
|
62
|
+
example: 'const cards = loadScorecards(); return validateScorecard(cards[0]);',
|
|
63
|
+
},
|
|
64
|
+
// ─── Dispersion ───
|
|
65
|
+
{
|
|
66
|
+
name: 'computeDispersion',
|
|
67
|
+
module: 'core',
|
|
68
|
+
description: 'Analyzes shot miss patterns by direction with systemic issue detection.',
|
|
69
|
+
signature: 'computeDispersion(scorecards: GolfScorecard[]): DispersionReport',
|
|
70
|
+
example: 'const cards = loadScorecards(); return computeDispersion(cards);',
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: 'computeAreaPerformance',
|
|
74
|
+
module: 'core',
|
|
75
|
+
description: 'Groups performance metrics by sprint type, club selection, and par value.',
|
|
76
|
+
signature: 'computeAreaPerformance(scorecards: GolfScorecard[]): AreaReport',
|
|
77
|
+
example: 'const cards = loadScorecards(); return computeAreaPerformance(cards);',
|
|
78
|
+
},
|
|
79
|
+
// ─── Advisor ───
|
|
80
|
+
{
|
|
81
|
+
name: 'recommendClub',
|
|
82
|
+
module: 'core',
|
|
83
|
+
description: 'Recommends club complexity for an upcoming ticket based on history and slope factors.',
|
|
84
|
+
signature: 'recommendClub(input: RecommendClubInput): ClubRecommendation',
|
|
85
|
+
example: 'return recommendClub({ ticketComplexity: "medium", scorecards: loadScorecards() });',
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: 'classifyShot',
|
|
89
|
+
module: 'core',
|
|
90
|
+
description: 'Classifies an execution trace as in_the_hole, green, or a specific miss type.',
|
|
91
|
+
signature: 'classifyShot(trace: ExecutionTrace): ShotClassification',
|
|
92
|
+
example: 'return classifyShot({ planned_scope_paths: ["src/"], modified_files: ["src/index.ts"], test_results: [{ suite: "unit", passed: true, first_run: true }], reverts: 0, elapsed_minutes: 30, hazards_encountered: [] });',
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
name: 'generateTrainingPlan',
|
|
96
|
+
module: 'core',
|
|
97
|
+
description: 'Generates training recommendations from handicap trends and dispersion data.',
|
|
98
|
+
signature: 'generateTrainingPlan(input: TrainingPlanInput): TrainingRecommendation[]',
|
|
99
|
+
example: 'const cards = loadScorecards(); return generateTrainingPlan({ handicap: computeHandicapCard(cards), dispersion: computeDispersion(cards), recentScorecards: cards.slice(-3) });',
|
|
100
|
+
},
|
|
101
|
+
// ─── Formatter ───
|
|
102
|
+
{
|
|
103
|
+
name: 'formatSprintReview',
|
|
104
|
+
module: 'core',
|
|
105
|
+
description: 'Formats a scorecard into a markdown sprint review.',
|
|
106
|
+
signature: "formatSprintReview(card: GolfScorecard, projectStats?: ProjectStats, deltas?: ProjectStatsDelta, mode?: 'technical' | 'plain'): string",
|
|
107
|
+
example: 'const cards = loadScorecards(); return formatSprintReview(cards[cards.length - 1]);',
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
name: 'formatAdvisorReport',
|
|
111
|
+
module: 'core',
|
|
112
|
+
description: 'Formats club recommendation, training plan, and hazard warnings into markdown.',
|
|
113
|
+
signature: 'formatAdvisorReport(input: AdvisorReportInput): string',
|
|
114
|
+
example: 'return formatAdvisorReport({ clubRecommendation: recommendClub(...), trainingPlan: generateTrainingPlan(...) });',
|
|
115
|
+
},
|
|
116
|
+
// ─── Briefing ───
|
|
117
|
+
{
|
|
118
|
+
name: 'filterCommonIssues',
|
|
119
|
+
module: 'core',
|
|
120
|
+
description: 'Filters common issues by category and/or keyword, returning top 10.',
|
|
121
|
+
signature: 'filterCommonIssues(issues: CommonIssuesFile, filter: BriefingFilter): RecurringPattern[]',
|
|
122
|
+
example: 'const issues = loadCommonIssues(); return filterCommonIssues(issues, { keywords: ["deploy"] });',
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
name: 'extractHazardIndex',
|
|
126
|
+
module: 'core',
|
|
127
|
+
description: 'Extracts all hazards from scorecards into a flat searchable index.',
|
|
128
|
+
signature: 'extractHazardIndex(scorecards: GolfScorecard[], keyword?: string): { shot_hazards: HazardEntry[]; bunker_locations: { sprint: number; location: string }[] }',
|
|
129
|
+
example: 'const cards = loadScorecards(); return extractHazardIndex(cards, "deploy");',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: 'computeNutritionTrend',
|
|
133
|
+
module: 'core',
|
|
134
|
+
description: 'Computes dev-health nutrition trends across categories.',
|
|
135
|
+
signature: 'computeNutritionTrend(scorecards: GolfScorecard[]): NutritionTrend[]',
|
|
136
|
+
example: 'const cards = loadScorecards(); return computeNutritionTrend(cards);',
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
name: 'hazardBriefing',
|
|
140
|
+
module: 'core',
|
|
141
|
+
description: 'Generates hazard warnings for specific areas.',
|
|
142
|
+
signature: 'hazardBriefing(opts: { areas: string[]; scorecards: GolfScorecard[] }): string[]',
|
|
143
|
+
example: 'const cards = loadScorecards(); return hazardBriefing({ areas: ["mcp-tools"], scorecards: cards });',
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
name: 'formatBriefing',
|
|
147
|
+
module: 'core',
|
|
148
|
+
description: 'Formats a complete pre-round briefing with handicap, hazards, issues, and training.',
|
|
149
|
+
signature: 'formatBriefing(opts: { scorecards: GolfScorecard[]; commonIssues: CommonIssuesFile; lastSession?: SessionEntry; filter?: BriefingFilter }): string',
|
|
150
|
+
example: 'return formatBriefing({ scorecards: loadScorecards(), commonIssues: loadCommonIssues() });',
|
|
151
|
+
},
|
|
152
|
+
// ─── Roadmap ───
|
|
153
|
+
{
|
|
154
|
+
name: 'validateRoadmap',
|
|
155
|
+
module: 'core',
|
|
156
|
+
description: 'Validates a roadmap definition for structural correctness (cycles, numbering, ticket counts).',
|
|
157
|
+
signature: 'validateRoadmap(roadmap: RoadmapDefinition): RoadmapValidationResult',
|
|
158
|
+
example: 'const roadmap = JSON.parse(readFile("docs/backlog/roadmap.json")); return validateRoadmap(roadmap);',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
name: 'computeCriticalPath',
|
|
162
|
+
module: 'core',
|
|
163
|
+
description: 'Computes the critical path (longest dependency chain) through the roadmap.',
|
|
164
|
+
signature: 'computeCriticalPath(roadmap: RoadmapDefinition): CriticalPathResult',
|
|
165
|
+
example: 'const roadmap = loadRoadmap(); return computeCriticalPath(roadmap);',
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
name: 'findParallelOpportunities',
|
|
169
|
+
module: 'core',
|
|
170
|
+
description: 'Finds sprints that can run in parallel (no mutual dependencies).',
|
|
171
|
+
signature: 'findParallelOpportunities(roadmap: RoadmapDefinition): ParallelGroup[]',
|
|
172
|
+
example: 'const roadmap = loadRoadmap(); return findParallelOpportunities(roadmap);',
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
name: 'parseRoadmap',
|
|
176
|
+
module: 'core',
|
|
177
|
+
description: 'Parses and validates a roadmap from a JSON object.',
|
|
178
|
+
signature: 'parseRoadmap(json: unknown): { roadmap: RoadmapDefinition | null; validation: RoadmapValidationResult }',
|
|
179
|
+
example: 'return parseRoadmap(JSON.parse(readFile("docs/backlog/roadmap.json")));',
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
name: 'formatRoadmapSummary',
|
|
183
|
+
module: 'core',
|
|
184
|
+
description: 'Formats a roadmap summary as markdown (phases, critical path, parallel opportunities).',
|
|
185
|
+
signature: 'formatRoadmapSummary(roadmap: RoadmapDefinition): string',
|
|
186
|
+
example: 'const roadmap = loadRoadmap(); return formatRoadmapSummary(roadmap);',
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
name: 'formatStrategicContext',
|
|
190
|
+
module: 'core',
|
|
191
|
+
description: 'Formats concise strategic context for a sprint (3-5 lines for briefings).',
|
|
192
|
+
signature: 'formatStrategicContext(roadmap: RoadmapDefinition, currentSprint: number): string | null',
|
|
193
|
+
example: 'const roadmap = loadRoadmap(); return formatStrategicContext(roadmap, 8);',
|
|
194
|
+
},
|
|
195
|
+
// ─── Registry ───
|
|
196
|
+
{
|
|
197
|
+
name: 'checkConflicts',
|
|
198
|
+
module: 'core',
|
|
199
|
+
description: 'Detects overlapping and adjacent conflicts among sprint claims.',
|
|
200
|
+
signature: 'checkConflicts(claims: SprintClaim[]): SprintConflict[]',
|
|
201
|
+
example: 'return checkConflicts(claims);',
|
|
202
|
+
},
|
|
203
|
+
// ─── Tournament ───
|
|
204
|
+
{
|
|
205
|
+
name: 'buildTournamentReview',
|
|
206
|
+
module: 'core',
|
|
207
|
+
description: 'Aggregates multiple scorecards into an initiative-level tournament review.',
|
|
208
|
+
signature: 'buildTournamentReview(id: string, name: string, scorecards: GolfScorecard[], options?: { takeaways?: string[]; improvements?: string[]; reflection?: string }): TournamentReview',
|
|
209
|
+
example: 'return buildTournamentReview("M-09", "Q1 Initiative", loadScorecards());',
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
name: 'formatTournamentReview',
|
|
213
|
+
module: 'core',
|
|
214
|
+
description: 'Formats a tournament review into detailed markdown.',
|
|
215
|
+
signature: 'formatTournamentReview(review: TournamentReview): string',
|
|
216
|
+
example: 'return formatTournamentReview(buildTournamentReview("M-09", "Q1", loadScorecards()));',
|
|
217
|
+
},
|
|
218
|
+
// ─── Roles ───
|
|
219
|
+
{
|
|
220
|
+
name: 'registerRole',
|
|
221
|
+
module: 'core',
|
|
222
|
+
description: 'Registers a custom role definition in the role registry.',
|
|
223
|
+
signature: 'registerRole(role: RoleDefinition): void',
|
|
224
|
+
example: 'registerRole({ id: "qa", name: "QA", description: "Quality assurance", focusAreas: ["tests"], clubPreferences: {}, briefingFilter: { emphasize: ["testing"], deemphasize: [] } });',
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
name: 'getRole',
|
|
228
|
+
module: 'core',
|
|
229
|
+
description: 'Returns a registered role by ID. Throws if not found.',
|
|
230
|
+
signature: 'getRole(id: string): RoleDefinition',
|
|
231
|
+
example: 'return getRole("backend");',
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
name: 'hasRole',
|
|
235
|
+
module: 'core',
|
|
236
|
+
description: 'Checks if a role ID is registered.',
|
|
237
|
+
signature: 'hasRole(id: string): boolean',
|
|
238
|
+
example: 'return hasRole("frontend"); // → true',
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
name: 'listRoles',
|
|
242
|
+
module: 'core',
|
|
243
|
+
description: 'Returns all registered role definitions.',
|
|
244
|
+
signature: 'listRoles(): RoleDefinition[]',
|
|
245
|
+
example: 'return listRoles().map(r => r.id);',
|
|
246
|
+
},
|
|
247
|
+
// ─── Standup (Communication Protocol) ───
|
|
248
|
+
{
|
|
249
|
+
name: 'generateStandup',
|
|
250
|
+
module: 'core',
|
|
251
|
+
description: 'Generate a standup report from session events and claims. Extracts progress, blockers, decisions, and handoffs.',
|
|
252
|
+
signature: 'generateStandup(opts: { sessionId: string; agent_role?: string; events: SlopeEvent[]; claims: SprintClaim[] }): StandupReport',
|
|
253
|
+
example: 'return generateStandup({ sessionId: "sess-1", events: [...], claims: [...] });',
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
name: 'formatStandup',
|
|
257
|
+
module: 'core',
|
|
258
|
+
description: 'Formats a standup report as human-readable markdown with status icons [ACTIVE]/[BLOCKED]/[DONE].',
|
|
259
|
+
signature: 'formatStandup(report: StandupReport): string',
|
|
260
|
+
example: 'return formatStandup(generateStandup({ sessionId: "s1", events: [], claims: [] }));',
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
name: 'parseStandup',
|
|
264
|
+
module: 'core',
|
|
265
|
+
description: 'Parse a standup report from JSON event data. Used when ingesting another agent standup.',
|
|
266
|
+
signature: 'parseStandup(data: Record<string, unknown>): StandupReport | null',
|
|
267
|
+
example: 'return parseStandup({ sessionId: "s1", status: "working", progress: "Active" });',
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
name: 'extractRelevantHandoffs',
|
|
271
|
+
module: 'core',
|
|
272
|
+
description: 'Extract handoffs from a standup that are relevant to a given role. Returns all when no role specified.',
|
|
273
|
+
signature: 'extractRelevantHandoffs(standup: StandupReport, roleId?: string): HandoffEntry[]',
|
|
274
|
+
example: 'return extractRelevantHandoffs(standup, "frontend");',
|
|
275
|
+
},
|
|
276
|
+
// ─── Escalation ───
|
|
277
|
+
{
|
|
278
|
+
name: 'detectEscalation',
|
|
279
|
+
module: 'core',
|
|
280
|
+
description: 'Detects escalation conditions from swarm state: blocker timeouts, claim conflicts, test failure cascades.',
|
|
281
|
+
signature: 'detectEscalation(opts: { config?: EscalationConfig; standups?: StandupReport[]; conflicts?: SprintConflict[]; events?: SlopeEvent[]; now?: number }): EscalationResult[]',
|
|
282
|
+
example: 'return detectEscalation({ standups: [...], conflicts: [...], events: [...] });',
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
name: 'buildEscalationEvent',
|
|
286
|
+
module: 'core',
|
|
287
|
+
description: 'Creates a hazard event from an escalation result, suitable for store.insertEvent().',
|
|
288
|
+
signature: 'buildEscalationEvent(escalation: EscalationResult, sessionId: string, sprintNumber?: number): Omit<SlopeEvent, "id" | "timestamp">',
|
|
289
|
+
example: 'const event = buildEscalationEvent(escalation, "sess-1", 15);',
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
name: 'resolveEscalationConfig',
|
|
293
|
+
module: 'core',
|
|
294
|
+
description: 'Merges partial escalation config with defaults (blocker_timeout: 15, claim_conflict: true, test_failure_cascade: 10).',
|
|
295
|
+
signature: 'resolveEscalationConfig(config?: EscalationConfig): Required<EscalationConfig>',
|
|
296
|
+
example: 'return resolveEscalationConfig({ blocker_timeout: 30 });',
|
|
297
|
+
},
|
|
298
|
+
// ─── Team Handicap ───
|
|
299
|
+
{
|
|
300
|
+
name: 'computeTeamHandicap',
|
|
301
|
+
module: 'core',
|
|
302
|
+
description: 'Builds a complete team handicap card: overall stats, per-role handicap, swarm efficiency, and role combination analysis.',
|
|
303
|
+
signature: 'computeTeamHandicap(scorecards: GolfScorecard[], coordinationEvents?: number): TeamHandicapCard',
|
|
304
|
+
example: 'return computeTeamHandicap(loadScorecards());',
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
name: 'computeRoleHandicap',
|
|
308
|
+
module: 'core',
|
|
309
|
+
description: 'Computes per-role handicap stats from agent breakdowns across sprints.',
|
|
310
|
+
signature: 'computeRoleHandicap(role: string, breakdowns: AgentBreakdown[]): RoleHandicap',
|
|
311
|
+
example: 'return computeRoleHandicap("backend", breakdowns);',
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
name: 'computeSwarmEfficiency',
|
|
315
|
+
module: 'core',
|
|
316
|
+
description: 'Computes swarm efficiency: agent counts, score vs par, and efficiency ratio (productive shots / total + coordination overhead).',
|
|
317
|
+
signature: 'computeSwarmEfficiency(scorecards: GolfScorecard[], coordinationEvents?: number): SwarmEfficiency',
|
|
318
|
+
example: 'return computeSwarmEfficiency(loadScorecards(), 5);',
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
name: 'analyzeRoleCombinations',
|
|
322
|
+
module: 'core',
|
|
323
|
+
description: 'Analyzes which role combinations produce the best sprint results.',
|
|
324
|
+
signature: 'analyzeRoleCombinations(scorecards: GolfScorecard[]): RoleCombinationStats[]',
|
|
325
|
+
example: 'return analyzeRoleCombinations(loadScorecards());',
|
|
326
|
+
},
|
|
327
|
+
// ─── PR Signals ───
|
|
328
|
+
{
|
|
329
|
+
name: 'parsePRJson',
|
|
330
|
+
module: 'core',
|
|
331
|
+
description: 'Parses raw `gh pr view --json` output into a structured PRSignal object.',
|
|
332
|
+
signature: 'parsePRJson(json: Record<string, unknown>): PRSignal',
|
|
333
|
+
example: 'const raw = JSON.parse(readFile("pr-data.json")); return parsePRJson(raw);',
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
name: 'buildGhCommand',
|
|
337
|
+
module: 'core',
|
|
338
|
+
description: 'Builds the `gh pr view --json` CLI command string for a given PR number.',
|
|
339
|
+
signature: 'buildGhCommand(prNumber: number): string',
|
|
340
|
+
example: 'return buildGhCommand(42); // → "gh pr view 42 --json number,additions,..."',
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
name: 'mergePRChecksWithCI',
|
|
344
|
+
module: 'core',
|
|
345
|
+
description: 'Merges PR check data with an existing CISignal. Derives CISignal from PR when no CI exists; detects retry scenarios.',
|
|
346
|
+
signature: 'mergePRChecksWithCI(prSignal: PRSignal, existingCI?: CISignal): CISignal',
|
|
347
|
+
example: 'const prSignal = parsePRJson(json); return mergePRChecksWithCI(prSignal, ciSignal);',
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
name: 'emptyPRSignal',
|
|
351
|
+
module: 'core',
|
|
352
|
+
description: 'Returns a PRSignal with safe defaults for graceful degradation when PR data is unavailable.',
|
|
353
|
+
signature: 'emptyPRSignal(prNumber?: number): PRSignal',
|
|
354
|
+
example: 'return emptyPRSignal(42);',
|
|
355
|
+
},
|
|
356
|
+
// ─── Plugins ───
|
|
357
|
+
{
|
|
358
|
+
name: 'discoverPlugins',
|
|
359
|
+
module: 'core',
|
|
360
|
+
description: 'Scans .slope/plugins/metaphors/ and .slope/plugins/guards/ for plugin JSON files. Returns discovered plugins with manifest and file path.',
|
|
361
|
+
signature: 'discoverPlugins(cwd: string): DiscoveredPlugin[]',
|
|
362
|
+
example: 'return discoverPlugins(process.cwd());',
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
name: 'loadPlugins',
|
|
366
|
+
module: 'core',
|
|
367
|
+
description: 'Discovers, validates, and registers all custom plugins (metaphors + guards). Returns loaded plugins and any errors.',
|
|
368
|
+
signature: 'loadPlugins(cwd: string, config?: PluginsConfig): PluginLoadResult',
|
|
369
|
+
example: 'return loadPlugins(process.cwd());',
|
|
370
|
+
},
|
|
371
|
+
{
|
|
372
|
+
name: 'loadPluginMetaphors',
|
|
373
|
+
module: 'core',
|
|
374
|
+
description: 'Loads and registers custom metaphor plugins from .slope/plugins/metaphors/. Each JSON file is a full MetaphorDefinition.',
|
|
375
|
+
signature: 'loadPluginMetaphors(cwd: string, config?: PluginsConfig): PluginLoadResult',
|
|
376
|
+
example: 'return loadPluginMetaphors(process.cwd());',
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
name: 'loadPluginGuards',
|
|
380
|
+
module: 'core',
|
|
381
|
+
description: 'Loads and registers custom guard plugins from .slope/plugins/guards/. Each JSON has name, hookEvent, command, and level.',
|
|
382
|
+
signature: 'loadPluginGuards(cwd: string, config?: PluginsConfig): PluginLoadResult',
|
|
383
|
+
example: 'return loadPluginGuards(process.cwd());',
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
name: 'validatePluginManifest',
|
|
387
|
+
module: 'core',
|
|
388
|
+
description: 'Validates a plugin manifest object for required fields (type, id, name).',
|
|
389
|
+
signature: 'validatePluginManifest(raw: unknown): { valid: boolean; errors: string[] }',
|
|
390
|
+
example: 'return validatePluginManifest({ type: "metaphor", id: "custom", name: "Custom" });',
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
name: 'isPluginEnabled',
|
|
394
|
+
module: 'core',
|
|
395
|
+
description: 'Checks if a plugin is enabled based on the PluginsConfig disabled/enabled lists.',
|
|
396
|
+
signature: 'isPluginEnabled(id: string, config?: PluginsConfig): boolean',
|
|
397
|
+
example: 'return isPluginEnabled("my-plugin", { disabled: ["other"] });',
|
|
398
|
+
},
|
|
399
|
+
// ─── Player (Multi-Developer) ───
|
|
400
|
+
{
|
|
401
|
+
name: 'extractPlayers',
|
|
402
|
+
module: 'core',
|
|
403
|
+
description: 'Extracts unique sorted player names from scorecards. Undefined player maps to DEFAULT_PLAYER.',
|
|
404
|
+
signature: 'extractPlayers(scorecards: GolfScorecard[]): string[]',
|
|
405
|
+
example: 'return extractPlayers(loadScorecards());',
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
name: 'filterScorecardsByPlayer',
|
|
409
|
+
module: 'core',
|
|
410
|
+
description: 'Filters scorecards to those belonging to a specific player.',
|
|
411
|
+
signature: 'filterScorecardsByPlayer(scorecards: GolfScorecard[], player: string): GolfScorecard[]',
|
|
412
|
+
example: 'return filterScorecardsByPlayer(loadScorecards(), "alice");',
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
name: 'computePlayerHandicaps',
|
|
416
|
+
module: 'core',
|
|
417
|
+
description: 'Computes independent handicap cards for all players found in scorecards.',
|
|
418
|
+
signature: 'computePlayerHandicaps(scorecards: GolfScorecard[]): PlayerHandicap[]',
|
|
419
|
+
example: 'return computePlayerHandicaps(loadScorecards());',
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
name: 'buildLeaderboard',
|
|
423
|
+
module: 'core',
|
|
424
|
+
description: 'Builds a ranked team leaderboard by handicap. Ties get same rank, secondary sort by improvement trend.',
|
|
425
|
+
signature: 'buildLeaderboard(scorecards: GolfScorecard[]): Leaderboard',
|
|
426
|
+
example: 'return buildLeaderboard(loadScorecards());',
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
name: 'computeReporterSeverity',
|
|
430
|
+
module: 'core',
|
|
431
|
+
description: 'Computes hazard severity from reporter count: 1→low, 2→medium, 3+→high.',
|
|
432
|
+
signature: "computeReporterSeverity(reporters: string[]): 'low' | 'medium' | 'high'",
|
|
433
|
+
example: 'return computeReporterSeverity(["alice", "bob"]); // → "medium"',
|
|
434
|
+
},
|
|
435
|
+
{
|
|
436
|
+
name: 'mergeHazardIndices',
|
|
437
|
+
module: 'core',
|
|
438
|
+
description: 'Merges new patterns into existing common issues, accumulating reporters and unioning sprints_hit.',
|
|
439
|
+
signature: 'mergeHazardIndices(issues: CommonIssuesFile, newPatterns: RecurringPattern[], reporter: string): CommonIssuesFile',
|
|
440
|
+
example: 'return mergeHazardIndices(loadCommonIssues(), newPatterns, "alice");',
|
|
441
|
+
},
|
|
442
|
+
// ─── Filesystem helpers (injected into sandbox) ───
|
|
443
|
+
{
|
|
444
|
+
name: 'loadConfig',
|
|
445
|
+
module: 'fs',
|
|
446
|
+
description: 'Loads .slope/config.json from the project root, returning SlopeConfig.',
|
|
447
|
+
signature: 'loadConfig(): SlopeConfig',
|
|
448
|
+
example: 'const config = loadConfig();',
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
name: 'loadScorecards',
|
|
452
|
+
module: 'fs',
|
|
453
|
+
description: 'Loads all sprint scorecards from the configured scorecardDir.',
|
|
454
|
+
signature: 'loadScorecards(): GolfScorecard[]',
|
|
455
|
+
example: 'const cards = loadScorecards();',
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
name: 'loadCommonIssues',
|
|
459
|
+
module: 'fs',
|
|
460
|
+
description: 'Loads the common-issues.json file from the configured path.',
|
|
461
|
+
signature: 'loadCommonIssues(): CommonIssuesFile',
|
|
462
|
+
example: 'const issues = loadCommonIssues();',
|
|
463
|
+
},
|
|
464
|
+
{
|
|
465
|
+
name: 'loadSessions',
|
|
466
|
+
module: 'fs',
|
|
467
|
+
description: 'Loads the sessions.json file from the configured path.',
|
|
468
|
+
signature: 'loadSessions(): SessionEntry[]',
|
|
469
|
+
example: 'const sessions = loadSessions();',
|
|
470
|
+
},
|
|
471
|
+
{
|
|
472
|
+
name: 'saveScorecard',
|
|
473
|
+
module: 'fs',
|
|
474
|
+
description: 'Writes a scorecard to {scorecardDir}/sprint-{N}.json.',
|
|
475
|
+
signature: 'saveScorecard(card: GolfScorecard): string',
|
|
476
|
+
example: 'const path = saveScorecard(buildScorecard({ ... }));',
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
name: 'loadRoadmap',
|
|
480
|
+
module: 'fs',
|
|
481
|
+
description: 'Loads and parses the roadmap JSON from the configured path (default: docs/backlog/roadmap.json). Returns null if no roadmap file exists.',
|
|
482
|
+
signature: 'loadRoadmap(): RoadmapDefinition | null',
|
|
483
|
+
example: 'const roadmap = loadRoadmap(); if (roadmap) return formatRoadmapSummary(roadmap);',
|
|
484
|
+
},
|
|
485
|
+
{
|
|
486
|
+
name: 'readFile',
|
|
487
|
+
module: 'fs',
|
|
488
|
+
description: 'Reads a file as UTF-8 text (path scoped to project root).',
|
|
489
|
+
signature: 'readFile(path: string): string',
|
|
490
|
+
example: 'return readFile("package.json");',
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
name: 'writeFile',
|
|
494
|
+
module: 'fs',
|
|
495
|
+
description: 'Writes a string to a file (path scoped to project root).',
|
|
496
|
+
signature: 'writeFile(path: string, content: string): void',
|
|
497
|
+
example: 'writeFile("output.json", JSON.stringify(data, null, 2));',
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
name: 'listFiles',
|
|
501
|
+
module: 'fs',
|
|
502
|
+
description: 'Lists files in a directory with optional glob pattern (scoped to project root).',
|
|
503
|
+
signature: 'listFiles(dir?: string, pattern?: string): string[]',
|
|
504
|
+
example: 'return listFiles("docs/retros", "sprint-*.json");',
|
|
505
|
+
},
|
|
506
|
+
// ─── Flows ───
|
|
507
|
+
{
|
|
508
|
+
name: 'parseFlows',
|
|
509
|
+
module: 'flows',
|
|
510
|
+
description: 'Parse and validate a flows JSON string into a FlowsFile object.',
|
|
511
|
+
signature: 'parseFlows(json: string): FlowsFile',
|
|
512
|
+
example: 'return parseFlows(readFile(".slope/flows.json"));',
|
|
513
|
+
},
|
|
514
|
+
{
|
|
515
|
+
name: 'validateFlows',
|
|
516
|
+
module: 'flows',
|
|
517
|
+
description: 'Validate flows against the filesystem — check file paths resolve, detect orphaned paths and duplicates.',
|
|
518
|
+
signature: 'validateFlows(flows: FlowsFile, cwd: string): { errors: string[], warnings: string[] }',
|
|
519
|
+
example: 'const flows = parseFlows(readFile(".slope/flows.json")); return validateFlows(flows, process.cwd());',
|
|
520
|
+
},
|
|
521
|
+
{
|
|
522
|
+
name: 'checkFlowStaleness',
|
|
523
|
+
module: 'flows',
|
|
524
|
+
description: 'Check if files in a flow have changed since last_verified_sha. Returns stale boolean and list of changed files.',
|
|
525
|
+
signature: 'checkFlowStaleness(flow: FlowDefinition, currentSha: string, cwd: string): { stale: boolean, changedFiles: string[] }',
|
|
526
|
+
example: 'return checkFlowStaleness(flow, "abc123", process.cwd());',
|
|
527
|
+
},
|
|
528
|
+
{
|
|
529
|
+
name: 'loadFlows',
|
|
530
|
+
module: 'flows',
|
|
531
|
+
description: 'Load and parse flows from a file path. Returns null if file does not exist.',
|
|
532
|
+
signature: 'loadFlows(flowsPath: string): FlowsFile | null',
|
|
533
|
+
example: 'return loadFlows(".slope/flows.json");',
|
|
534
|
+
},
|
|
535
|
+
// ─── Constants ───
|
|
536
|
+
{
|
|
537
|
+
name: 'PAR_THRESHOLDS',
|
|
538
|
+
module: 'constants',
|
|
539
|
+
description: 'Maps ticket count ranges to par values: { 3: [1,2], 4: [3,4], 5: [5,Infinity] }.',
|
|
540
|
+
signature: 'const PAR_THRESHOLDS: Record<number, [number, number]>',
|
|
541
|
+
example: 'return PAR_THRESHOLDS;',
|
|
542
|
+
},
|
|
543
|
+
{
|
|
544
|
+
name: 'SLOPE_FACTORS',
|
|
545
|
+
module: 'constants',
|
|
546
|
+
description: 'Factor names that increase sprint slope: cross_package, schema_migration, new_area, external_dep, concurrent_agents.',
|
|
547
|
+
signature: "const SLOPE_FACTORS: readonly ['cross_package', 'schema_migration', 'new_area', 'external_dep', 'concurrent_agents']",
|
|
548
|
+
example: 'return SLOPE_FACTORS;',
|
|
549
|
+
},
|
|
550
|
+
{
|
|
551
|
+
name: 'SCORE_LABELS',
|
|
552
|
+
module: 'constants',
|
|
553
|
+
description: 'Maps score-minus-par to label: { -2: eagle, -1: birdie, 0: par, 1: bogey, 2: double_bogey }.',
|
|
554
|
+
signature: 'const SCORE_LABELS: Record<number, ScoreLabel>',
|
|
555
|
+
example: 'return SCORE_LABELS;',
|
|
556
|
+
},
|
|
557
|
+
{
|
|
558
|
+
name: 'TRAINING_TYPE_MAP',
|
|
559
|
+
module: 'constants',
|
|
560
|
+
description: 'Maps sprint types to training types (research → driving_range, etc.).',
|
|
561
|
+
signature: 'const TRAINING_TYPE_MAP: Partial<Record<SprintType, TrainingType>>',
|
|
562
|
+
example: 'return TRAINING_TYPE_MAP;',
|
|
563
|
+
},
|
|
564
|
+
{
|
|
565
|
+
name: 'NUTRITION_CHECKLIST',
|
|
566
|
+
module: 'constants',
|
|
567
|
+
description: 'Default nutrition categories to assess: hydration, diet, recovery, supplements, stretching.',
|
|
568
|
+
signature: 'const NUTRITION_CHECKLIST: NutritionCategory[]',
|
|
569
|
+
example: 'return NUTRITION_CHECKLIST;',
|
|
570
|
+
},
|
|
571
|
+
// ─── Store (MCP tools) ───
|
|
572
|
+
{
|
|
573
|
+
name: 'session_status',
|
|
574
|
+
module: 'store',
|
|
575
|
+
description: 'MCP tool: Returns active sessions and claims from the SlopeStore.',
|
|
576
|
+
signature: 'session_status(): { sessions: SlopeSession[]; claims: SprintClaim[] }',
|
|
577
|
+
example: '// Called via MCP tool, not directly',
|
|
578
|
+
},
|
|
579
|
+
{
|
|
580
|
+
name: 'acquire_claim',
|
|
581
|
+
module: 'store',
|
|
582
|
+
description: 'MCP tool: Claims a ticket or area for the current sprint via SlopeStore.',
|
|
583
|
+
signature: 'acquire_claim(sessionId: string, target: string, scope: ClaimScope, sprintNumber: number, player: string): SprintClaim',
|
|
584
|
+
example: '// Called via MCP tool, not directly',
|
|
585
|
+
},
|
|
586
|
+
{
|
|
587
|
+
name: 'check_conflicts',
|
|
588
|
+
module: 'store',
|
|
589
|
+
description: 'MCP tool: Detects overlapping and adjacent conflicts among active claims.',
|
|
590
|
+
signature: 'check_conflicts(sprintNumber?: number): { claims: number; conflicts: SprintConflict[] }',
|
|
591
|
+
example: '// Called via MCP tool, not directly',
|
|
592
|
+
},
|
|
593
|
+
];
|
|
594
|
+
/**
|
|
595
|
+
* Key TypeScript type definitions for agent reference.
|
|
596
|
+
* Agents call search({ module: 'types' }) to retrieve this.
|
|
597
|
+
*/
|
|
598
|
+
export const SLOPE_TYPES = `\
|
|
599
|
+
// ─── Core Scoring Enums ───
|
|
600
|
+
type ClubSelection = 'driver' | 'long_iron' | 'short_iron' | 'wedge' | 'putter';
|
|
601
|
+
type ShotResult = 'fairway' | 'green' | 'in_the_hole' | 'missed_long' | 'missed_short' | 'missed_left' | 'missed_right';
|
|
602
|
+
type HazardType = 'bunker' | 'water' | 'ob' | 'rough' | 'trees';
|
|
603
|
+
type ConditionType = 'wind' | 'rain' | 'frost_delay' | 'altitude' | 'pin_position';
|
|
604
|
+
type SpecialPlay = 'gimme' | 'mulligan' | 'provisional' | 'lay_up' | 'scramble';
|
|
605
|
+
type MissDirection = 'long' | 'short' | 'left' | 'right';
|
|
606
|
+
type ScoreLabel = 'eagle' | 'birdie' | 'par' | 'bogey' | 'double_bogey' | 'triple_plus';
|
|
607
|
+
type SprintType = 'feature' | 'feedback' | 'infra' | 'bugfix' | 'research' | 'flow' | 'test-coverage';
|
|
608
|
+
|
|
609
|
+
// ─── Record Types ───
|
|
610
|
+
interface HazardHit { type: HazardType; description: string; gotcha_id?: string; }
|
|
611
|
+
interface ShotRecord { ticket_key: string; title: string; club: ClubSelection; result: ShotResult; hazards: HazardHit[]; provisional_declared?: boolean; notes?: string; }
|
|
612
|
+
interface ConditionRecord { type: ConditionType; description: string; impact: 'none' | 'minor' | 'major'; }
|
|
613
|
+
|
|
614
|
+
// ─── Scoring Types ───
|
|
615
|
+
interface HoleStats { fairways_hit: number; fairways_total: number; greens_in_regulation: number; greens_total: number; putts: number; penalties: number; hazards_hit: number; hazard_penalties: number; miss_directions: Record<MissDirection, number>; }
|
|
616
|
+
interface HoleScore { sprint_number: number; theme: string; par: 3 | 4 | 5; slope: number; score: number; score_label: ScoreLabel; shots: ShotRecord[]; conditions: ConditionRecord[]; special_plays: SpecialPlay[]; stats: HoleStats; }
|
|
617
|
+
|
|
618
|
+
// ─── Full Scorecard ───
|
|
619
|
+
interface GolfScorecard extends HoleScore { type?: SprintType; player?: string; date: string; training?: TrainingSession[]; nutrition?: NutritionEntry[]; yardage_book_updates: string[]; bunker_locations: string[]; course_management_notes: string[]; nineteenth_hole?: NineteenthHole; }
|
|
620
|
+
|
|
621
|
+
// ─── Handicap ───
|
|
622
|
+
interface RollingStats { handicap: number; fairway_pct: number; gir_pct: number; avg_putts: number; penalties_per_round: number; miss_pattern: Record<MissDirection, number>; mulligans: number; gimmes: number; }
|
|
623
|
+
interface HandicapCard { last_5: RollingStats; last_10: RollingStats; all_time: RollingStats; }
|
|
624
|
+
|
|
625
|
+
// ─── Dispersion ───
|
|
626
|
+
interface DispersionReport { total_shots: number; total_misses: number; miss_rate_pct: number; by_direction: Record<MissDirection, { count: number; pct: number; interpretation: string }>; dominant_miss: MissDirection | null; systemic_issues: string[]; }
|
|
627
|
+
interface AreaReport { by_sprint_type: Record<string, { count: number; avg_score_vs_par: number; fairway_pct: number; gir_pct: number }>; by_club: Record<string, { count: number; in_the_hole_rate: number; miss_rate: number }>; par_performance: Record<number, { count: number; avg_score_vs_par: number; over_par_rate: number }>; }
|
|
628
|
+
|
|
629
|
+
// ─── Config & Loader ───
|
|
630
|
+
interface SlopeConfig { scorecardDir: string; scorecardPattern: string; minSprint: number; commonIssuesPath: string; sessionsPath: string; registry: 'file' | 'api'; claimsPath: string; registryApiUrl?: string; currentSprint?: number; store?: string; store_path?: string; }
|
|
631
|
+
|
|
632
|
+
// ─── Store ───
|
|
633
|
+
interface SlopeSession { session_id: string; role: 'primary' | 'secondary' | 'observer'; ide: string; worktree_path?: string; branch?: string; started_at: string; last_heartbeat_at: string; metadata?: Record<string, unknown>; agent_role?: string; swarm_id?: string; }
|
|
634
|
+
interface SprintClaim { id: string; sprint_number: number; player: string; target: string; scope: ClaimScope; claimed_at: string; notes?: string; session_id?: string; expires_at?: string; metadata?: Record<string, unknown>; }
|
|
635
|
+
|
|
636
|
+
// ─── Standup ───
|
|
637
|
+
interface StandupReport { sessionId: string; agent_role?: string; ticketKey?: string; status: 'working' | 'blocked' | 'complete'; progress: string; blockers: string[]; decisions: string[]; handoffs: HandoffEntry[]; timestamp: string; }
|
|
638
|
+
interface HandoffEntry { target: string; description: string; for_role?: string; }
|
|
639
|
+
|
|
640
|
+
// ─── Roles ───
|
|
641
|
+
interface RoleDefinition { id: string; name: string; description: string; focusAreas: string[]; clubPreferences: Partial<Record<string, ClubSelection>>; briefingFilter: { emphasize: string[]; deemphasize: string[] }; }
|
|
642
|
+
|
|
643
|
+
// ─── Builder Input ───
|
|
644
|
+
interface AgentBreakdown { session_id: string; agent_role: string; shots: ShotRecord[]; score: number; stats: HoleStats; }
|
|
645
|
+
interface AgentShotInput { session_id: string; agent_role: string; shots: ShotRecord[]; }
|
|
646
|
+
interface ScorecardInput { sprint_number: number; theme: string; par: 3 | 4 | 5; slope: number; date: string; shots: ShotRecord[]; putts?: number; penalties?: number; type?: SprintType; conditions?: ConditionRecord[]; special_plays?: SpecialPlay[]; training?: TrainingSession[]; nutrition?: NutritionEntry[]; nineteenth_hole?: NineteenthHole; bunker_locations?: string[]; yardage_book_updates?: string[]; course_management_notes?: string[]; agents?: AgentBreakdown[]; }
|
|
647
|
+
|
|
648
|
+
// ─── Escalation ───
|
|
649
|
+
type EscalationTrigger = 'blocker_timeout' | 'claim_conflict' | 'test_failure_cascade' | 'manual';
|
|
650
|
+
type EscalationSeverity = 'warning' | 'critical';
|
|
651
|
+
type EscalationAction = 'log_event' | 'mark_blocked' | 'notify_standup';
|
|
652
|
+
interface EscalationConfig { blocker_timeout?: number; claim_conflict?: boolean; test_failure_cascade?: number; actions?: EscalationAction[]; }
|
|
653
|
+
interface EscalationResult { trigger: EscalationTrigger; severity: EscalationSeverity; description: string; session_id?: string; agent_role?: string; actions: EscalationAction[]; }
|
|
654
|
+
|
|
655
|
+
// ─── Team Handicap ───
|
|
656
|
+
interface RoleHandicap { role: string; sprints_participated: number; total_shots: number; stats: RollingStats; }
|
|
657
|
+
interface SwarmEfficiency { total_sprints: number; total_agents: number; avg_agents_per_sprint: number; total_shots: number; total_score: number; avg_score_vs_par: number; coordination_events: number; efficiency_ratio: number; }
|
|
658
|
+
interface RoleCombinationStats { roles: string[]; sprint_count: number; avg_score_vs_par: number; total_hazards: number; }
|
|
659
|
+
interface TeamHandicapCard { overall: RollingStats; by_role: RoleHandicap[]; swarm_efficiency: SwarmEfficiency; role_combinations: RoleCombinationStats[]; }
|
|
660
|
+
|
|
661
|
+
// ─── PR Signals ───
|
|
662
|
+
type PRPlatform = 'github' | 'gitlab' | 'bitbucket' | 'unknown';
|
|
663
|
+
type PRReviewDecision = 'APPROVED' | 'CHANGES_REQUESTED' | 'REVIEW_REQUIRED' | 'COMMENTED' | 'NONE';
|
|
664
|
+
interface PRSignal { platform: PRPlatform; pr_number: number; review_cycles: number; change_request_count: number; time_to_merge_minutes: number | null; ci_checks_passed: number; ci_checks_failed: number; file_count: number; additions: number; deletions: number; comment_count: number; review_decision: PRReviewDecision; }
|
|
665
|
+
|
|
666
|
+
// ─── Advisor ───
|
|
667
|
+
interface ExecutionTrace { planned_scope_paths: string[]; modified_files: string[]; test_results: { suite: string; passed: boolean; first_run: boolean }[]; reverts: number; elapsed_minutes: number; hazards_encountered: HazardHit[]; }
|
|
668
|
+
interface ShotClassification { result: ShotResult; miss_direction: MissDirection | null; confidence: number; reasoning: string; }
|
|
669
|
+
interface CombinedSignals { trace: ExecutionTrace; ci?: CISignal; pr?: PRSignal; events?: SlopeEvent[]; }
|
|
670
|
+
interface ClubRecommendation { club: ClubSelection; confidence: number; reasoning: string; provisional_suggestion?: string; }
|
|
671
|
+
interface TrainingRecommendation { area: string; type: TrainingType; description: string; priority: 'high' | 'medium' | 'low'; instruction_adjustment?: string; }
|
|
672
|
+
interface RecommendClubInput { ticketComplexity: 'trivial' | 'small' | 'medium' | 'large'; scorecards: GolfScorecard[]; slopeFactors?: string[]; }
|
|
673
|
+
interface TrainingPlanInput { handicap: HandicapCard; dispersion: DispersionReport; recentScorecards: GolfScorecard[]; }
|
|
674
|
+
|
|
675
|
+
// ─── Roadmap ───
|
|
676
|
+
type RoadmapClub = 'driver' | 'long_iron' | 'short_iron' | 'wedge' | 'putter';
|
|
677
|
+
interface RoadmapTicket { key: string; title: string; club: RoadmapClub; complexity: 'trivial' | 'small' | 'standard' | 'moderate'; depends_on?: string[]; }
|
|
678
|
+
interface RoadmapSprint { id: number; theme: string; par: 3 | 4 | 5; slope: number; type: string; tickets: RoadmapTicket[]; depends_on?: number[]; }
|
|
679
|
+
interface RoadmapPhase { name: string; sprints: number[]; }
|
|
680
|
+
interface RoadmapDefinition { name: string; description?: string; phases: RoadmapPhase[]; sprints: RoadmapSprint[]; }
|
|
681
|
+
interface RoadmapValidationResult { valid: boolean; errors: RoadmapValidationError[]; warnings: RoadmapValidationWarning[]; }
|
|
682
|
+
interface RoadmapValidationError { type: 'error'; sprint?: number; ticket?: string; message: string; }
|
|
683
|
+
interface RoadmapValidationWarning { type: 'warning'; sprint?: number; ticket?: string; message: string; }
|
|
684
|
+
interface CriticalPathResult { path: number[]; length: number; totalPar: number; }
|
|
685
|
+
interface ParallelGroup { sprints: number[]; reason: string; }
|
|
686
|
+
|
|
687
|
+
// ─── Player (Multi-Developer) ───
|
|
688
|
+
interface PlayerHandicap { player: string; scorecardCount: number; handicapCard: HandicapCard; }
|
|
689
|
+
interface LeaderboardEntry { rank: number; player: string; handicap: number; scorecardCount: number; improvementTrend: number; fairwayPct: number; girPct: number; }
|
|
690
|
+
interface Leaderboard { entries: LeaderboardEntry[]; generatedAt: string; }
|
|
691
|
+
|
|
692
|
+
// ─── Flows ───
|
|
693
|
+
interface FlowStep { name: string; description: string; file_paths: string[]; notes?: string; }
|
|
694
|
+
interface FlowDefinition { id: string; title: string; description: string; entry_point: string; steps: FlowStep[]; files: string[]; tags: string[]; last_verified_sha: string; last_verified_at: string; }
|
|
695
|
+
interface FlowsFile { version: '1'; last_generated: string; flows: FlowDefinition[]; }
|
|
696
|
+
|
|
697
|
+
// ─── Briefing ───
|
|
698
|
+
interface RecurringPattern { id: number; title: string; category: string; sprints_hit: number[]; gotcha_refs: string[]; description: string; prevention: string; reported_by?: string[]; }
|
|
699
|
+
interface CommonIssuesFile { recurring_patterns: RecurringPattern[]; }
|
|
700
|
+
interface SessionEntry { id: number; date: string; sprint: string; summary: string; where_left_off: string; }
|
|
701
|
+
interface BriefingFilter { categories?: string[]; keywords?: string[]; }
|
|
702
|
+
|
|
703
|
+
// ─── Tournament ───
|
|
704
|
+
interface TournamentReview { id: string; name: string; dateRange: { start: string; end: string }; sprints: TournamentSprintEntry[]; scoring: TournamentScoring; stats: TournamentStats; hazardIndex: TournamentHazard[]; clubPerformance: Record<string, { attempts: number; inTheHole: number; avgScore: number }>; takeaways: string[]; improvements: string[]; reflection?: string; }
|
|
705
|
+
interface TournamentSprintEntry { sprintNumber: number; theme: string; par: number; slope: number; score: number; scoreLabel: ScoreLabel; ticketCount: number; ticketsLanded: number; }
|
|
706
|
+
interface TournamentScoring { totalPar: number; totalScore: number; differential: number; avgScoreLabel: string; bestSprint: { sprintNumber: number; label: ScoreLabel }; worstSprint: { sprintNumber: number; label: ScoreLabel }; sprintCount: number; ticketCount: number; ticketsLanded: number; landingRate: number; }
|
|
707
|
+
`;
|
|
708
|
+
//# sourceMappingURL=registry.js.map
|