@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,22 @@
|
|
|
1
|
+
import type { GolfScorecard, HandicapCard, ScoreLabel } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Compute par value from ticket count.
|
|
4
|
+
* 1-2 tickets = par 3, 3-4 tickets = par 4, 5+ tickets = par 5.
|
|
5
|
+
*/
|
|
6
|
+
export declare function computePar(ticketCount: number): 3 | 4 | 5;
|
|
7
|
+
/**
|
|
8
|
+
* Compute slope (difficulty modifier) from a list of factors present in the sprint.
|
|
9
|
+
* Each factor adds +1 to the base slope of 0.
|
|
10
|
+
*/
|
|
11
|
+
export declare function computeSlope(factors: string[]): number;
|
|
12
|
+
/**
|
|
13
|
+
* Compute a ScoreLabel from actual score and par.
|
|
14
|
+
* Scores 3+ over par are all 'triple_plus'.
|
|
15
|
+
*/
|
|
16
|
+
export declare function computeScoreLabel(score: number, par: number): ScoreLabel;
|
|
17
|
+
/**
|
|
18
|
+
* Compute a full HandicapCard from an array of scorecards.
|
|
19
|
+
* Scorecards should be ordered chronologically (oldest first).
|
|
20
|
+
*/
|
|
21
|
+
export declare function computeHandicapCard(scorecards: GolfScorecard[]): HandicapCard;
|
|
22
|
+
//# sourceMappingURL=handicap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handicap.d.ts","sourceRoot":"","sources":["../../src/core/handicap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EAIZ,UAAU,EACX,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAOzD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAKxE;AA0ED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,YAAY,CAS7E"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { PAR_THRESHOLDS, SCORE_LABELS } from './constants.js';
|
|
2
|
+
import { normalizeStats } from './builder.js';
|
|
3
|
+
/**
|
|
4
|
+
* Compute par value from ticket count.
|
|
5
|
+
* 1-2 tickets = par 3, 3-4 tickets = par 4, 5+ tickets = par 5.
|
|
6
|
+
*/
|
|
7
|
+
export function computePar(ticketCount) {
|
|
8
|
+
for (const [par, [min, max]] of Object.entries(PAR_THRESHOLDS)) {
|
|
9
|
+
if (ticketCount >= min && ticketCount <= max) {
|
|
10
|
+
return Number(par);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return 5;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Compute slope (difficulty modifier) from a list of factors present in the sprint.
|
|
17
|
+
* Each factor adds +1 to the base slope of 0.
|
|
18
|
+
*/
|
|
19
|
+
export function computeSlope(factors) {
|
|
20
|
+
return factors.length;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Compute a ScoreLabel from actual score and par.
|
|
24
|
+
* Scores 3+ over par are all 'triple_plus'.
|
|
25
|
+
*/
|
|
26
|
+
export function computeScoreLabel(score, par) {
|
|
27
|
+
const diff = score - par;
|
|
28
|
+
if (diff <= -2)
|
|
29
|
+
return 'eagle';
|
|
30
|
+
if (diff >= 3)
|
|
31
|
+
return 'triple_plus';
|
|
32
|
+
return SCORE_LABELS[diff] ?? 'par';
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Compute rolling statistics from a window of scorecards.
|
|
36
|
+
* Returns zeroed stats if the array is empty.
|
|
37
|
+
*/
|
|
38
|
+
function computeRollingStats(scorecards) {
|
|
39
|
+
if (scorecards.length === 0) {
|
|
40
|
+
return {
|
|
41
|
+
handicap: 0,
|
|
42
|
+
fairway_pct: 0,
|
|
43
|
+
gir_pct: 0,
|
|
44
|
+
avg_putts: 0,
|
|
45
|
+
penalties_per_round: 0,
|
|
46
|
+
miss_pattern: { long: 0, short: 0, left: 0, right: 0 },
|
|
47
|
+
mulligans: 0,
|
|
48
|
+
gimmes: 0,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
const n = scorecards.length;
|
|
52
|
+
const totalDiff = scorecards.reduce((sum, sc) => sum + (sc.score - sc.par), 0);
|
|
53
|
+
const handicap = Math.max(0, Math.round((totalDiff / n) * 10) / 10);
|
|
54
|
+
let totalFairways = 0;
|
|
55
|
+
let totalFairwaysTotal = 0;
|
|
56
|
+
let totalGir = 0;
|
|
57
|
+
let totalGirTotal = 0;
|
|
58
|
+
let totalPutts = 0;
|
|
59
|
+
let totalPenalties = 0;
|
|
60
|
+
const missPattern = { long: 0, short: 0, left: 0, right: 0 };
|
|
61
|
+
let totalMulligans = 0;
|
|
62
|
+
let totalGimmes = 0;
|
|
63
|
+
for (const sc of scorecards) {
|
|
64
|
+
const stats = normalizeStats(sc.stats, sc.shots?.length ?? 0);
|
|
65
|
+
totalFairways += stats.fairways_hit;
|
|
66
|
+
totalFairwaysTotal += stats.fairways_total;
|
|
67
|
+
totalGir += stats.greens_in_regulation;
|
|
68
|
+
totalGirTotal += stats.greens_total;
|
|
69
|
+
totalPutts += stats.putts;
|
|
70
|
+
totalPenalties += stats.penalties;
|
|
71
|
+
for (const dir of ['long', 'short', 'left', 'right']) {
|
|
72
|
+
missPattern[dir] += stats.miss_directions[dir] ?? 0;
|
|
73
|
+
}
|
|
74
|
+
for (const play of sc.special_plays ?? []) {
|
|
75
|
+
if (play === 'mulligan')
|
|
76
|
+
totalMulligans++;
|
|
77
|
+
if (play === 'gimme')
|
|
78
|
+
totalGimmes++;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const fairway_pct = totalFairwaysTotal > 0
|
|
82
|
+
? Math.round((totalFairways / totalFairwaysTotal) * 1000) / 10
|
|
83
|
+
: 0;
|
|
84
|
+
const gir_pct = totalGirTotal > 0
|
|
85
|
+
? Math.round((totalGir / totalGirTotal) * 1000) / 10
|
|
86
|
+
: 0;
|
|
87
|
+
return {
|
|
88
|
+
handicap,
|
|
89
|
+
fairway_pct,
|
|
90
|
+
gir_pct,
|
|
91
|
+
avg_putts: Math.round((totalPutts / n) * 10) / 10,
|
|
92
|
+
penalties_per_round: Math.round((totalPenalties / n) * 10) / 10,
|
|
93
|
+
miss_pattern: missPattern,
|
|
94
|
+
mulligans: totalMulligans,
|
|
95
|
+
gimmes: totalGimmes,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Compute a full HandicapCard from an array of scorecards.
|
|
100
|
+
* Scorecards should be ordered chronologically (oldest first).
|
|
101
|
+
*/
|
|
102
|
+
export function computeHandicapCard(scorecards) {
|
|
103
|
+
const last5 = scorecards.slice(-5);
|
|
104
|
+
const last10 = scorecards.slice(-10);
|
|
105
|
+
return {
|
|
106
|
+
last_5: computeRollingStats(last5),
|
|
107
|
+
last_10: computeRollingStats(last10),
|
|
108
|
+
all_time: computeRollingStats(scorecards),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=handicap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handicap.js","sourceRoot":"","sources":["../../src/core/handicap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export type { ClubSelection, ShotResult, HazardType, ConditionType, SpecialPlay, MissDirection, ScoreLabel, SprintType, HazardHit, ShotRecord, ConditionRecord, HoleStats, HoleScore, TrainingType, TrainingSession, NutritionCategory, NutritionEntry, NineteenthHole, GolfScorecard, AgentBreakdown, RollingStats, HandicapCard, DispersionReport, AreaReport, ExecutionTrace, ShotClassification, ClubRecommendation, TrainingRecommendation, ClaimScope, SprintClaim, SprintConflict, EventType, SlopeEvent, CIRunner, CISignal, PRPlatform, PRReviewDecision, PRSignal, HazardSeverity, } from './types.js';
|
|
2
|
+
export { PAR_THRESHOLDS, SLOPE_FACTORS, SCORE_LABELS, TRAINING_TYPE_MAP, NUTRITION_CHECKLIST, HAZARD_SEVERITY_PENALTIES, } from './constants.js';
|
|
3
|
+
export { computePar, computeSlope, computeScoreLabel, computeHandicapCard, } from './handicap.js';
|
|
4
|
+
export { computeStatsFromShots, buildScorecard, buildAgentBreakdowns, } from './builder.js';
|
|
5
|
+
export type { ScorecardInput, AgentShotInput } from './builder.js';
|
|
6
|
+
export { validateScorecard, } from './validation.js';
|
|
7
|
+
export type { ScorecardValidationError, ScorecardValidationWarning, ScorecardValidationResult, } from './validation.js';
|
|
8
|
+
export { computeDispersion, computeAreaPerformance, } from './dispersion.js';
|
|
9
|
+
export { recommendClub, classifyShot, classifyShotFromSignals, generateTrainingPlan, } from './advisor.js';
|
|
10
|
+
export type { RecommendClubInput, TrainingPlanInput, CombinedSignals, } from './advisor.js';
|
|
11
|
+
export { formatSprintReview, formatAdvisorReport, } from './formatter.js';
|
|
12
|
+
export type { ProjectStats, ProjectStatsDelta, ReviewMode, AdvisorReportInput, } from './formatter.js';
|
|
13
|
+
export { filterCommonIssues, extractHazardIndex, computeNutritionTrend, hazardBriefing, formatBriefing, } from './briefing.js';
|
|
14
|
+
export type { RecurringPattern, CommonIssuesFile, SessionEntry, BriefingFilter, HazardEntry, NutritionTrend, } from './briefing.js';
|
|
15
|
+
export { checkConflicts } from './registry.js';
|
|
16
|
+
export type { SprintRegistry } from './registry.js';
|
|
17
|
+
export { SlopeStoreError } from './store.js';
|
|
18
|
+
export type { SlopeStore, SlopeSession, StoreErrorCode } from './store.js';
|
|
19
|
+
export { buildTournamentReview, formatTournamentReview, } from './tournament.js';
|
|
20
|
+
export type { TournamentReview, TournamentSprintEntry, TournamentScoring, TournamentStats, TournamentHazard, } from './types.js';
|
|
21
|
+
export { validateRoadmap, computeCriticalPath, findParallelOpportunities, parseRoadmap, formatRoadmapSummary, formatStrategicContext, } from './roadmap.js';
|
|
22
|
+
export type { RoadmapDefinition, RoadmapSprint, RoadmapTicket, RoadmapPhase, RoadmapClub, RoadmapValidationResult, RoadmapValidationError, RoadmapValidationWarning, CriticalPathResult, ParallelGroup, } from './roadmap.js';
|
|
23
|
+
export type { SlopeConfig } from './config.js';
|
|
24
|
+
export { loadConfig, createConfig, resolveConfigPath } from './config.js';
|
|
25
|
+
export { loadScorecards, detectLatestSprint, resolveCurrentSprint } from './loader.js';
|
|
26
|
+
export { registerMetaphor, getMetaphor, listMetaphors, hasMetaphor, validateMetaphor, } from './metaphor.js';
|
|
27
|
+
export type { MetaphorDefinition, MetaphorVocabulary, ClubTerms, ShotResultTerms, HazardTerms, ConditionTerms, SpecialPlayTerms, MissDirectionTerms, ScoreLabelTerms, SprintTypeTerms, TrainingTypeTerms, NutritionTerms, } from './metaphor.js';
|
|
28
|
+
export { clusterEvents, findPromotionCandidates, runPipeline, } from './pipeline.js';
|
|
29
|
+
export type { EventCluster, PromotionCandidate, PipelineResult, } from './pipeline.js';
|
|
30
|
+
export { detectRunner, parseTestOutput, parseVitestOutput, parseJestOutput, } from './ci-signals.js';
|
|
31
|
+
export { GH_PR_JSON_FIELDS, buildGhCommand, parsePRJson, emptyPRSignal, mergePRChecksWithCI, detectCheckRetries, } from './pr-signals.js';
|
|
32
|
+
export { GUARD_DEFINITIONS, formatPreToolUseOutput, formatPostToolUseOutput, formatStopOutput, generateClaudeCodeHooksConfig, registerCustomGuard, getAllGuardDefinitions, getCustomGuard, clearCustomGuards, } from './guard.js';
|
|
33
|
+
export type { HookInput, PreToolUseOutput, PostToolUseOutput, StopOutput, GuardResult, GuardName, GuardDefinition, GuidanceConfig, CustomGuardDefinition, AnyGuardDefinition, } from './guard.js';
|
|
34
|
+
export { buildReportData, generateHtmlReport, REPORT_CSS, escapeHtml, svgLine, svgRect, svgText, renderSummaryCards, renderHandicapTrendChart, renderDispersionChart, renderAreaPerformanceChart, renderNutritionChart, renderSprintTable, } from './report.js';
|
|
35
|
+
export type { ReportData, SprintTrendEntry, NutritionTrendEntry, } from './report.js';
|
|
36
|
+
export { DEFAULT_DASHBOARD_CONFIG, generateDashboardHtml, renderSprintDetail, renderSprintTimeline, generateDashboardScript, computeMissHeatmap, renderMissHeatmap, computeAreaHazards, renderAreaHazardOverlay, } from './dashboard.js';
|
|
37
|
+
export type { DashboardConfig, HeatmapCell, MissHeatmapData, AreaHazardEntry, } from './dashboard.js';
|
|
38
|
+
export { extractRoleData, computeRoleHandicap, computeSwarmEfficiency, analyzeRoleCombinations, computeTeamHandicap, } from './team-handicap.js';
|
|
39
|
+
export type { RoleHandicap, SwarmEfficiency, RoleCombinationStats, TeamHandicapCard, } from './team-handicap.js';
|
|
40
|
+
export { registerRole, getRole, hasRole, listRoles, loadCustomRoles, generalist, backend, frontend, architect, devops, } from './roles.js';
|
|
41
|
+
export type { RoleDefinition } from './roles.js';
|
|
42
|
+
export { resolveEscalationConfig, detectEscalation, buildEscalationEvent, } from './escalation.js';
|
|
43
|
+
export type { EscalationTrigger, EscalationSeverity, EscalationAction, EscalationConfig, EscalationResult, } from './escalation.js';
|
|
44
|
+
export { generateStandup, formatStandup, parseStandup, extractRelevantHandoffs, } from './standup.js';
|
|
45
|
+
export type { StandupReport, HandoffEntry, } from './standup.js';
|
|
46
|
+
export { validatePluginManifest, discoverPlugins, loadPlugins, loadPluginMetaphors, loadPluginGuards, isPluginEnabled, } from './plugins.js';
|
|
47
|
+
export type { PluginType, PluginManifest, DiscoveredPlugin, PluginLoadResult, PluginsConfig, } from './plugins.js';
|
|
48
|
+
export { buildLeaderboard, formatLeaderboard, renderLeaderboardHtml, } from './leaderboard.js';
|
|
49
|
+
export type { LeaderboardEntry, Leaderboard } from './leaderboard.js';
|
|
50
|
+
export { DEFAULT_PLAYER, extractPlayers, filterScorecardsByPlayer, computePlayerHandicaps, computePlayerHandicap, computeReporterSeverity, mergeHazardIndices, filterHazardsByVisibility, } from './player.js';
|
|
51
|
+
export type { PlayerHandicap, ReporterSeverity } from './player.js';
|
|
52
|
+
export { parseFlows, validateFlows, checkFlowStaleness, loadFlows, } from './flows.js';
|
|
53
|
+
export type { FlowStep, FlowDefinition, FlowsFile, FlowValidationResult, FlowStalenessResult, } from './flows.js';
|
|
54
|
+
export { golf, tennis, baseball, gaming, dnd, matrix } from './metaphors/index.js';
|
|
55
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// SLOPE — Sprint Lifecycle & Operational Performance Engine
|
|
2
|
+
// Core library barrel export
|
|
3
|
+
// Constants
|
|
4
|
+
export { PAR_THRESHOLDS, SLOPE_FACTORS, SCORE_LABELS, TRAINING_TYPE_MAP, NUTRITION_CHECKLIST, HAZARD_SEVERITY_PENALTIES, } from './constants.js';
|
|
5
|
+
// Handicap
|
|
6
|
+
export { computePar, computeSlope, computeScoreLabel, computeHandicapCard, } from './handicap.js';
|
|
7
|
+
// Builder
|
|
8
|
+
export { computeStatsFromShots, buildScorecard, buildAgentBreakdowns, } from './builder.js';
|
|
9
|
+
// Validation
|
|
10
|
+
export { validateScorecard, } from './validation.js';
|
|
11
|
+
// Dispersion
|
|
12
|
+
export { computeDispersion, computeAreaPerformance, } from './dispersion.js';
|
|
13
|
+
// Advisor
|
|
14
|
+
export { recommendClub, classifyShot, classifyShotFromSignals, generateTrainingPlan, } from './advisor.js';
|
|
15
|
+
// Formatter
|
|
16
|
+
export { formatSprintReview, formatAdvisorReport, } from './formatter.js';
|
|
17
|
+
// Briefing
|
|
18
|
+
export { filterCommonIssues, extractHazardIndex, computeNutritionTrend, hazardBriefing, formatBriefing, } from './briefing.js';
|
|
19
|
+
// Registry
|
|
20
|
+
export { checkConflicts } from './registry.js';
|
|
21
|
+
// Store
|
|
22
|
+
export { SlopeStoreError } from './store.js';
|
|
23
|
+
// Tournament Review
|
|
24
|
+
export { buildTournamentReview, formatTournamentReview, } from './tournament.js';
|
|
25
|
+
// Roadmap
|
|
26
|
+
export { validateRoadmap, computeCriticalPath, findParallelOpportunities, parseRoadmap, formatRoadmapSummary, formatStrategicContext, } from './roadmap.js';
|
|
27
|
+
export { loadConfig, createConfig, resolveConfigPath } from './config.js';
|
|
28
|
+
// Loader
|
|
29
|
+
export { loadScorecards, detectLatestSprint, resolveCurrentSprint } from './loader.js';
|
|
30
|
+
// Metaphor
|
|
31
|
+
export { registerMetaphor, getMetaphor, listMetaphors, hasMetaphor, validateMetaphor, } from './metaphor.js';
|
|
32
|
+
// Event Pipeline
|
|
33
|
+
export { clusterEvents, findPromotionCandidates, runPipeline, } from './pipeline.js';
|
|
34
|
+
// CI Signal Parser
|
|
35
|
+
export { detectRunner, parseTestOutput, parseVitestOutput, parseJestOutput, } from './ci-signals.js';
|
|
36
|
+
// PR Signal Parser
|
|
37
|
+
export { GH_PR_JSON_FIELDS, buildGhCommand, parsePRJson, emptyPRSignal, mergePRChecksWithCI, detectCheckRetries, } from './pr-signals.js';
|
|
38
|
+
// Guard Framework
|
|
39
|
+
export { GUARD_DEFINITIONS, formatPreToolUseOutput, formatPostToolUseOutput, formatStopOutput, generateClaudeCodeHooksConfig, registerCustomGuard, getAllGuardDefinitions, getCustomGuard, clearCustomGuards, } from './guard.js';
|
|
40
|
+
// Report
|
|
41
|
+
export { buildReportData, generateHtmlReport, REPORT_CSS, escapeHtml, svgLine, svgRect, svgText, renderSummaryCards, renderHandicapTrendChart, renderDispersionChart, renderAreaPerformanceChart, renderNutritionChart, renderSprintTable, } from './report.js';
|
|
42
|
+
// Dashboard
|
|
43
|
+
export { DEFAULT_DASHBOARD_CONFIG, generateDashboardHtml, renderSprintDetail, renderSprintTimeline, generateDashboardScript, computeMissHeatmap, renderMissHeatmap, computeAreaHazards, renderAreaHazardOverlay, } from './dashboard.js';
|
|
44
|
+
// Team Handicap
|
|
45
|
+
export { extractRoleData, computeRoleHandicap, computeSwarmEfficiency, analyzeRoleCombinations, computeTeamHandicap, } from './team-handicap.js';
|
|
46
|
+
// Roles
|
|
47
|
+
export { registerRole, getRole, hasRole, listRoles, loadCustomRoles, generalist, backend, frontend, architect, devops, } from './roles.js';
|
|
48
|
+
// Escalation
|
|
49
|
+
export { resolveEscalationConfig, detectEscalation, buildEscalationEvent, } from './escalation.js';
|
|
50
|
+
// Standup (Communication Protocol)
|
|
51
|
+
export { generateStandup, formatStandup, parseStandup, extractRelevantHandoffs, } from './standup.js';
|
|
52
|
+
// Plugin System
|
|
53
|
+
export { validatePluginManifest, discoverPlugins, loadPlugins, loadPluginMetaphors, loadPluginGuards, isPluginEnabled, } from './plugins.js';
|
|
54
|
+
// Leaderboard (Multi-Developer)
|
|
55
|
+
export { buildLeaderboard, formatLeaderboard, renderLeaderboardHtml, } from './leaderboard.js';
|
|
56
|
+
// Player (Multi-Developer)
|
|
57
|
+
export { DEFAULT_PLAYER, extractPlayers, filterScorecardsByPlayer, computePlayerHandicaps, computePlayerHandicap, computeReporterSeverity, mergeHazardIndices, filterHazardsByVisibility, } from './player.js';
|
|
58
|
+
// Flows
|
|
59
|
+
export { parseFlows, validateFlows, checkFlowStaleness, loadFlows, } from './flows.js';
|
|
60
|
+
// Built-in metaphors (auto-registers on import)
|
|
61
|
+
export { golf, tennis, baseball, gaming, dnd, matrix } from './metaphors/index.js';
|
|
62
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { GolfScorecard } from './types.js';
|
|
2
|
+
import type { MetaphorDefinition } from './metaphor.js';
|
|
3
|
+
/** A single entry in the team leaderboard */
|
|
4
|
+
export interface LeaderboardEntry {
|
|
5
|
+
rank: number;
|
|
6
|
+
player: string;
|
|
7
|
+
handicap: number;
|
|
8
|
+
scorecardCount: number;
|
|
9
|
+
improvementTrend: number;
|
|
10
|
+
fairwayPct: number;
|
|
11
|
+
girPct: number;
|
|
12
|
+
}
|
|
13
|
+
/** Complete leaderboard */
|
|
14
|
+
export interface Leaderboard {
|
|
15
|
+
entries: LeaderboardEntry[];
|
|
16
|
+
generatedAt: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Build a ranked leaderboard from scorecards.
|
|
20
|
+
* Rank by handicap ascending (lower = better).
|
|
21
|
+
* Ties broken by improvement trend (last_5.handicap - all_time.handicap, more negative = more improvement).
|
|
22
|
+
*/
|
|
23
|
+
export declare function buildLeaderboard(scorecards: GolfScorecard[]): Leaderboard;
|
|
24
|
+
/**
|
|
25
|
+
* Format leaderboard as a text table for CLI output.
|
|
26
|
+
*/
|
|
27
|
+
export declare function formatLeaderboard(leaderboard: Leaderboard, metaphor?: MetaphorDefinition): string;
|
|
28
|
+
/**
|
|
29
|
+
* Render leaderboard as an HTML table, following renderSprintTable() pattern.
|
|
30
|
+
*/
|
|
31
|
+
export declare function renderLeaderboardHtml(leaderboard: Leaderboard, metaphor?: MetaphorDefinition): string;
|
|
32
|
+
//# sourceMappingURL=leaderboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leaderboard.d.ts","sourceRoot":"","sources":["../../src/core/leaderboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAKxD,6CAA6C;AAC7C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,2BAA2B;AAC3B,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,WAAW,CA0CzE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAsBjG;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,kBAAkB,GAAG,MAAM,CA4BrG"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { escapeHtml } from './report.js';
|
|
2
|
+
import { extractPlayers, filterScorecardsByPlayer } from './player.js';
|
|
3
|
+
import { computeHandicapCard } from './handicap.js';
|
|
4
|
+
/**
|
|
5
|
+
* Build a ranked leaderboard from scorecards.
|
|
6
|
+
* Rank by handicap ascending (lower = better).
|
|
7
|
+
* Ties broken by improvement trend (last_5.handicap - all_time.handicap, more negative = more improvement).
|
|
8
|
+
*/
|
|
9
|
+
export function buildLeaderboard(scorecards) {
|
|
10
|
+
const players = extractPlayers(scorecards);
|
|
11
|
+
const entries = players.map(player => {
|
|
12
|
+
const filtered = filterScorecardsByPlayer(scorecards, player);
|
|
13
|
+
const card = computeHandicapCard(filtered);
|
|
14
|
+
const improvementTrend = filtered.length >= 5
|
|
15
|
+
? Math.round((card.last_5.handicap - card.all_time.handicap) * 10) / 10
|
|
16
|
+
: 0;
|
|
17
|
+
return {
|
|
18
|
+
rank: 0, // assigned below
|
|
19
|
+
player,
|
|
20
|
+
handicap: card.all_time.handicap,
|
|
21
|
+
scorecardCount: filtered.length,
|
|
22
|
+
improvementTrend,
|
|
23
|
+
fairwayPct: card.all_time.fairway_pct,
|
|
24
|
+
girPct: card.all_time.gir_pct,
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
// Sort by handicap asc, then improvement trend asc (more negative = better)
|
|
28
|
+
entries.sort((a, b) => {
|
|
29
|
+
if (a.handicap !== b.handicap)
|
|
30
|
+
return a.handicap - b.handicap;
|
|
31
|
+
return a.improvementTrend - b.improvementTrend;
|
|
32
|
+
});
|
|
33
|
+
// Assign ranks (ties get same rank)
|
|
34
|
+
let currentRank = 1;
|
|
35
|
+
for (let i = 0; i < entries.length; i++) {
|
|
36
|
+
if (i > 0 && entries[i].handicap === entries[i - 1].handicap) {
|
|
37
|
+
entries[i].rank = entries[i - 1].rank;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
entries[i].rank = currentRank;
|
|
41
|
+
}
|
|
42
|
+
currentRank = i + 2;
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
entries,
|
|
46
|
+
generatedAt: new Date().toISOString(),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Format leaderboard as a text table for CLI output.
|
|
51
|
+
*/
|
|
52
|
+
export function formatLeaderboard(leaderboard, metaphor) {
|
|
53
|
+
const lines = [];
|
|
54
|
+
const title = metaphor?.vocabulary.review ?? 'Team Leaderboard';
|
|
55
|
+
lines.push(title);
|
|
56
|
+
lines.push('\u2501'.repeat(64));
|
|
57
|
+
lines.push('');
|
|
58
|
+
const pad = (s, w) => String(s).padStart(w);
|
|
59
|
+
lines.push(`${'Rank'.padEnd(6)}${'Player'.padEnd(16)}${'Handicap'.padStart(10)}${'Cards'.padStart(7)}${'Fairway%'.padStart(10)}${'GIR%'.padStart(8)}${'Trend'.padStart(7)}`);
|
|
60
|
+
lines.push('\u2500'.repeat(64));
|
|
61
|
+
for (const e of leaderboard.entries) {
|
|
62
|
+
const trend = e.improvementTrend > 0 ? `+${e.improvementTrend}` : e.improvementTrend === 0 ? '—' : `${e.improvementTrend}`;
|
|
63
|
+
lines.push(`${pad(e.rank, 4)} ${e.player.padEnd(16)}${pad(`+${e.handicap.toFixed(1)}`, 10)}${pad(e.scorecardCount, 7)}${pad(e.fairwayPct.toFixed(1) + '%', 10)}${pad(e.girPct.toFixed(1) + '%', 8)}${pad(trend, 7)}`);
|
|
64
|
+
}
|
|
65
|
+
lines.push('');
|
|
66
|
+
return lines.join('\n');
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Render leaderboard as an HTML table, following renderSprintTable() pattern.
|
|
70
|
+
*/
|
|
71
|
+
export function renderLeaderboardHtml(leaderboard, metaphor) {
|
|
72
|
+
if (leaderboard.entries.length === 0) {
|
|
73
|
+
return '<p>No leaderboard data available.</p>';
|
|
74
|
+
}
|
|
75
|
+
const rows = leaderboard.entries.map(e => {
|
|
76
|
+
const trend = e.improvementTrend > 0 ? `+${e.improvementTrend}` : e.improvementTrend === 0 ? '\u2014' : `${e.improvementTrend}`;
|
|
77
|
+
const trendClass = e.improvementTrend < 0 ? 'under' : e.improvementTrend > 0 ? 'over' : 'even';
|
|
78
|
+
return `<tr>
|
|
79
|
+
<td>${e.rank}</td>
|
|
80
|
+
<td>${escapeHtml(e.player)}</td>
|
|
81
|
+
<td>+${e.handicap.toFixed(1)}</td>
|
|
82
|
+
<td>${e.scorecardCount}</td>
|
|
83
|
+
<td>${e.fairwayPct.toFixed(1)}%</td>
|
|
84
|
+
<td>${e.girPct.toFixed(1)}%</td>
|
|
85
|
+
<td class="${trendClass}">${escapeHtml(trend)}</td>
|
|
86
|
+
</tr>`;
|
|
87
|
+
}).join('\n');
|
|
88
|
+
return `
|
|
89
|
+
<div class="chart-container">
|
|
90
|
+
<table>
|
|
91
|
+
<thead>
|
|
92
|
+
<tr><th>Rank</th><th>Player</th><th>Handicap</th><th>Cards</th><th>Fairway%</th><th>GIR%</th><th>Trend</th></tr>
|
|
93
|
+
</thead>
|
|
94
|
+
<tbody>${rows}</tbody>
|
|
95
|
+
</table>
|
|
96
|
+
</div>`;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=leaderboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leaderboard.js","sourceRoot":"","sources":["../../src/core/leaderboard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAkB,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAmBpD;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAA2B;IAC1D,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAE3C,MAAM,OAAO,GAAuB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QACvD,MAAM,QAAQ,GAAG,wBAAwB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC;YAC3C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;YACvE,CAAC,CAAC,CAAC,CAAC;QAEN,OAAO;YACL,IAAI,EAAE,CAAC,EAAE,iBAAiB;YAC1B,MAAM;YACN,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ;YAChC,cAAc,EAAE,QAAQ,CAAC,MAAM;YAC/B,gBAAgB;YAChB,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW;YACrC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO;SAC9B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,4EAA4E;IAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACpB,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;YAAE,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;QAC9D,OAAO,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,oCAAoC;IACpC,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC7D,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,WAAW,CAAC;QAChC,CAAC;QACD,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,OAAO;QACL,OAAO;QACP,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAwB,EAAE,QAA6B;IACvF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,QAAQ,EAAE,UAAU,CAAC,MAAM,IAAI,kBAAkB,CAAC;IAEhE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,MAAM,GAAG,GAAG,CAAC,CAAkB,EAAE,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAErE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7K,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAEhC,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC3H,KAAK,CAAC,IAAI,CACR,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAC3M,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,WAAwB,EAAE,QAA6B;IAC3F,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,uCAAuC,CAAC;IACjD,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QACvC,MAAM,KAAK,GAAG,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAChI,MAAM,UAAU,GAAG,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/F,OAAO;YACC,CAAC,CAAC,IAAI;YACN,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;aACnB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YACtB,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;YACvB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;mBACZ,UAAU,KAAK,UAAU,CAAC,KAAK,CAAC;UACzC,CAAC;IACT,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;;;;;;eAMM,IAAI;;SAEV,CAAC;AACV,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { GolfScorecard } from './types.js';
|
|
2
|
+
import type { SlopeConfig } from './config.js';
|
|
3
|
+
/**
|
|
4
|
+
* Load SLOPE scorecards from the configured directory.
|
|
5
|
+
* Filters by minSprint and normalizes sprint_number.
|
|
6
|
+
*/
|
|
7
|
+
export declare function loadScorecards(config: SlopeConfig, cwd?: string): GolfScorecard[];
|
|
8
|
+
/**
|
|
9
|
+
* Detect the latest sprint number from existing scorecards.
|
|
10
|
+
* Returns 0 if no scorecards are found.
|
|
11
|
+
*/
|
|
12
|
+
export declare function detectLatestSprint(config: SlopeConfig, cwd?: string): number;
|
|
13
|
+
/**
|
|
14
|
+
* Resolve the current sprint number: explicit config > auto-detect + 1.
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolveCurrentSprint(config: SlopeConfig, cwd?: string): number;
|
|
17
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,GAAE,MAAsB,GAAG,aAAa,EAAE,CAyChG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,CAI3F;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,CAI7F"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { readFileSync, readdirSync, existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Load SLOPE scorecards from the configured directory.
|
|
5
|
+
* Filters by minSprint and normalizes sprint_number.
|
|
6
|
+
*/
|
|
7
|
+
export function loadScorecards(config, cwd = process.cwd()) {
|
|
8
|
+
const dir = join(cwd, config.scorecardDir);
|
|
9
|
+
if (!existsSync(dir)) {
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
// Build regex from pattern (e.g. "sprint-*.json" → /^sprint-(\d+)\.json$/)
|
|
13
|
+
const patternParts = config.scorecardPattern.split('*');
|
|
14
|
+
const prefix = patternParts[0] ?? '';
|
|
15
|
+
const suffix = patternParts[1] ?? '';
|
|
16
|
+
const regex = new RegExp(`^${escapeRegex(prefix)}(\\d+)${escapeRegex(suffix)}$`);
|
|
17
|
+
const files = readdirSync(dir)
|
|
18
|
+
.filter((f) => regex.test(f))
|
|
19
|
+
.sort((a, b) => {
|
|
20
|
+
const na = parseInt(a.match(regex)?.[1] ?? '0', 10);
|
|
21
|
+
const nb = parseInt(b.match(regex)?.[1] ?? '0', 10);
|
|
22
|
+
return na - nb;
|
|
23
|
+
});
|
|
24
|
+
const scorecards = [];
|
|
25
|
+
for (const file of files) {
|
|
26
|
+
const match = file.match(regex);
|
|
27
|
+
if (!match)
|
|
28
|
+
continue;
|
|
29
|
+
const num = parseInt(match[1], 10);
|
|
30
|
+
if (num < config.minSprint)
|
|
31
|
+
continue;
|
|
32
|
+
try {
|
|
33
|
+
const raw = JSON.parse(readFileSync(join(dir, file), 'utf8'));
|
|
34
|
+
const card = {
|
|
35
|
+
...raw,
|
|
36
|
+
sprint_number: raw.sprint_number ?? raw.sprint,
|
|
37
|
+
};
|
|
38
|
+
scorecards.push(card);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
console.error(` Warning: Could not parse ${file}, skipping`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return scorecards;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Detect the latest sprint number from existing scorecards.
|
|
48
|
+
* Returns 0 if no scorecards are found.
|
|
49
|
+
*/
|
|
50
|
+
export function detectLatestSprint(config, cwd = process.cwd()) {
|
|
51
|
+
const cards = loadScorecards(config, cwd);
|
|
52
|
+
if (cards.length === 0)
|
|
53
|
+
return 0;
|
|
54
|
+
return Math.max(...cards.map((c) => c.sprint_number));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Resolve the current sprint number: explicit config > auto-detect + 1.
|
|
58
|
+
*/
|
|
59
|
+
export function resolveCurrentSprint(config, cwd = process.cwd()) {
|
|
60
|
+
if (config.currentSprint)
|
|
61
|
+
return config.currentSprint;
|
|
62
|
+
const latest = detectLatestSprint(config, cwd);
|
|
63
|
+
return latest + 1;
|
|
64
|
+
}
|
|
65
|
+
function escapeRegex(s) {
|
|
66
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { ClubSelection, ShotResult, HazardType, ConditionType, SpecialPlay, MissDirection, ScoreLabel, SprintType, TrainingType, NutritionCategory } from './types.js';
|
|
2
|
+
/** Display names for club selections (approach complexity) */
|
|
3
|
+
export type ClubTerms = Record<ClubSelection, string>;
|
|
4
|
+
/** Display names for shot results (ticket outcomes) */
|
|
5
|
+
export type ShotResultTerms = Record<ShotResult, string>;
|
|
6
|
+
/** Display names for hazard types */
|
|
7
|
+
export type HazardTerms = Record<HazardType, string>;
|
|
8
|
+
/** Display names for external conditions */
|
|
9
|
+
export type ConditionTerms = Record<ConditionType, string>;
|
|
10
|
+
/** Display names for special plays */
|
|
11
|
+
export type SpecialPlayTerms = Record<SpecialPlay, string>;
|
|
12
|
+
/** Display names for miss directions */
|
|
13
|
+
export type MissDirectionTerms = Record<MissDirection, string>;
|
|
14
|
+
/** Display names for score labels */
|
|
15
|
+
export type ScoreLabelTerms = Record<ScoreLabel, string>;
|
|
16
|
+
/** Display names for sprint types */
|
|
17
|
+
export type SprintTypeTerms = Record<SprintType, string>;
|
|
18
|
+
/** Display names for training types */
|
|
19
|
+
export type TrainingTypeTerms = Record<TrainingType, string>;
|
|
20
|
+
/** Display names for nutrition categories */
|
|
21
|
+
export type NutritionTerms = Record<NutritionCategory, string>;
|
|
22
|
+
/** Metaphor-specific vocabulary for framework concepts */
|
|
23
|
+
export interface MetaphorVocabulary {
|
|
24
|
+
/** What a sprint is called (e.g., "hole", "set", "inning") */
|
|
25
|
+
sprint: string;
|
|
26
|
+
/** What a ticket is called (e.g., "shot", "point", "at-bat") */
|
|
27
|
+
ticket: string;
|
|
28
|
+
/** What the scorecard is called (e.g., "scorecard", "match report") */
|
|
29
|
+
scorecard: string;
|
|
30
|
+
/** What the handicap card is called (e.g., "handicap card", "player stats") */
|
|
31
|
+
handicapCard: string;
|
|
32
|
+
/** What the briefing is called (e.g., "pre-round briefing", "pre-match scouting") */
|
|
33
|
+
briefing: string;
|
|
34
|
+
/** What a perfect score is called (e.g., "hole-in-one", "ace") */
|
|
35
|
+
perfectScore: string;
|
|
36
|
+
/** What par means (e.g., "par", "expected", "baseline") */
|
|
37
|
+
onTarget: string;
|
|
38
|
+
/** What the review is called (e.g., "19th hole", "post-match") */
|
|
39
|
+
review: string;
|
|
40
|
+
}
|
|
41
|
+
/** A complete metaphor definition — all display terms for SLOPE output */
|
|
42
|
+
export interface MetaphorDefinition {
|
|
43
|
+
/** Unique identifier (e.g., "golf", "tennis", "gaming") */
|
|
44
|
+
id: string;
|
|
45
|
+
/** Human-readable name (e.g., "Golf", "Tennis", "Gaming") */
|
|
46
|
+
name: string;
|
|
47
|
+
/** Brief description of the metaphor */
|
|
48
|
+
description: string;
|
|
49
|
+
/** Framework vocabulary */
|
|
50
|
+
vocabulary: MetaphorVocabulary;
|
|
51
|
+
/** Term maps for all enum types */
|
|
52
|
+
clubs: ClubTerms;
|
|
53
|
+
shotResults: ShotResultTerms;
|
|
54
|
+
hazards: HazardTerms;
|
|
55
|
+
conditions: ConditionTerms;
|
|
56
|
+
specialPlays: SpecialPlayTerms;
|
|
57
|
+
missDirections: MissDirectionTerms;
|
|
58
|
+
scoreLabels: ScoreLabelTerms;
|
|
59
|
+
sprintTypes: SprintTypeTerms;
|
|
60
|
+
trainingTypes: TrainingTypeTerms;
|
|
61
|
+
nutrition: NutritionTerms;
|
|
62
|
+
}
|
|
63
|
+
/** Register a metaphor definition */
|
|
64
|
+
export declare function registerMetaphor(metaphor: MetaphorDefinition): void;
|
|
65
|
+
/** Get a metaphor by ID. Returns the golf metaphor as fallback if not found. */
|
|
66
|
+
export declare function getMetaphor(id: string): MetaphorDefinition;
|
|
67
|
+
/** List all registered metaphors */
|
|
68
|
+
export declare function listMetaphors(): MetaphorDefinition[];
|
|
69
|
+
/** Check if a metaphor ID is registered */
|
|
70
|
+
export declare function hasMetaphor(id: string): boolean;
|
|
71
|
+
/** Validate that a metaphor definition covers every required term */
|
|
72
|
+
export declare function validateMetaphor(metaphor: MetaphorDefinition): string[];
|
|
73
|
+
//# sourceMappingURL=metaphor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metaphor.d.ts","sourceRoot":"","sources":["../../src/core/metaphor.ts"],"names":[],"mappings":"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"}
|