bbdata-cli 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/bin/bbdata.js +128 -16
  2. package/dist/bin/bbdata.js.map +1 -1
  3. package/dist/src/index.d.ts +3 -1
  4. package/dist/src/index.js +122 -12
  5. package/dist/src/index.js.map +1 -1
  6. package/dist/templates/queries/hitter-batted-ball.ts +66 -0
  7. package/dist/templates/queries/hitter-hot-cold-zones.ts +81 -0
  8. package/dist/templates/queries/hitter-vs-pitch-type.ts +78 -0
  9. package/dist/templates/queries/index.ts +24 -0
  10. package/dist/templates/queries/leaderboard-comparison.ts +72 -0
  11. package/dist/templates/queries/leaderboard-custom.ts +90 -0
  12. package/dist/templates/queries/matchup-pitcher-vs-hitter.ts +81 -0
  13. package/dist/templates/queries/matchup-situational.ts +68 -0
  14. package/dist/templates/queries/pitcher-arsenal.ts +89 -0
  15. package/dist/templates/queries/pitcher-handedness-splits.ts +81 -0
  16. package/dist/templates/queries/pitcher-velocity-trend.ts +73 -0
  17. package/dist/templates/queries/registry.ts +73 -0
  18. package/dist/templates/queries/trend-rolling-average.ts +86 -0
  19. package/dist/templates/queries/trend-year-over-year.ts +73 -0
  20. package/dist/templates/reports/advance-lineup.hbs +29 -0
  21. package/dist/templates/reports/advance-sp.hbs +60 -0
  22. package/dist/templates/reports/college-hitter-draft.hbs +49 -0
  23. package/dist/templates/reports/college-pitcher-draft.hbs +48 -0
  24. package/dist/templates/reports/dev-progress.hbs +29 -0
  25. package/dist/templates/reports/draft-board-card.hbs +35 -0
  26. package/dist/templates/reports/hs-prospect.hbs +48 -0
  27. package/dist/templates/reports/partials/footer.hbs +7 -0
  28. package/dist/templates/reports/partials/header.hbs +12 -0
  29. package/dist/templates/reports/post-promotion.hbs +25 -0
  30. package/dist/templates/reports/pro-hitter-eval.hbs +65 -0
  31. package/dist/templates/reports/pro-pitcher-eval.hbs +69 -0
  32. package/dist/templates/reports/registry.ts +215 -0
  33. package/dist/templates/reports/relief-pitcher-quick.hbs +29 -0
  34. package/dist/templates/reports/trade-target-onepager.hbs +45 -0
  35. package/package.json +1 -1
@@ -0,0 +1,7 @@
1
+
2
+ ---
3
+
4
+ *Generated by bbdata CLI v0.1.0*
5
+ *Data sources: {{sources}}*
6
+ *Report date: {{date}}*
7
+ *This report was generated with AI assistance. All statistics should be verified against primary sources before making personnel decisions.*
@@ -0,0 +1,12 @@
1
+ # {{reportTitle}}
2
+
3
+ | Field | Value |
4
+ |-------|-------|
5
+ | **Player** | {{player}} |
6
+ | **Team** | {{team}} |
7
+ | **Season** | {{season}} |
8
+ | **Report Type** | {{reportType}} |
9
+ | **Audience** | {{audience}} |
10
+ | **Date** | {{date}} |
11
+
12
+ ---
@@ -0,0 +1,25 @@
1
+ # Post-Promotion Evaluation: {{player}}
2
+
3
+ **Season:** {{season}} | **Generated:** {{date}}
4
+
5
+ ---
6
+
7
+ ## Pre-Promotion Stats
8
+
9
+ *Stats at previous level — to be populated*
10
+
11
+ ## Post-Promotion Stats
12
+
13
+ *Stats at new level — to be populated*
14
+
15
+ ## Adjustment Analysis
16
+
17
+ *What changed, what didn't, approach differences — to be filled by evaluator*
18
+
19
+ ## Recommendation
20
+
21
+ *Continue at level / promote / reassign — to be filled*
22
+
23
+ ---
24
+
25
+ *Generated by bbdata CLI*
@@ -0,0 +1,65 @@
1
+ # Pro Hitter Evaluation: {{player}}
2
+
3
+ **Season:** {{season}} | **Audience:** {{audience}} | **Generated:** {{date}}
4
+
5
+ ---
6
+
7
+ ## Batted Ball Profile
8
+
9
+ {{#if data.hitter-batted-ball}}
10
+ | Metric | Value |
11
+ |--------|-------|
12
+ {{#each data.hitter-batted-ball}}
13
+ | {{this.Metric}} | {{this.Value}} |
14
+ {{/each}}
15
+ {{else}}
16
+ *Batted ball data not available*
17
+ {{/if}}
18
+
19
+ ## Approach & Discipline
20
+
21
+ {{#if data.hitter-vs-pitch-type}}
22
+ | Pitch Type | Seen | Swing % | Whiff % | Foul % | In Play | Avg EV | SLG |
23
+ |------------|------|---------|---------|--------|---------|--------|-----|
24
+ {{#each data.hitter-vs-pitch-type}}
25
+ | {{this.[Pitch Type]}} | {{this.Seen}} | {{this.[Swing %]}} | {{this.[Whiff %]}} | {{this.[Foul %]}} | {{this.[In Play]}} | {{this.[Avg EV]}} | {{this.SLG}} |
26
+ {{/each}}
27
+ {{else}}
28
+ *Pitch type breakdown not available*
29
+ {{/if}}
30
+
31
+ ## Hot/Cold Zones
32
+
33
+ {{#if data.hitter-hot-cold-zones}}
34
+ | Zone | Pitches | Swings | Whiff % | AVG | SLG |
35
+ |------|---------|--------|---------|-----|-----|
36
+ {{#each data.hitter-hot-cold-zones}}
37
+ | {{this.Zone}} | {{this.Pitches}} | {{this.Swings}} | {{this.[Whiff %]}} | {{this.AVG}} | {{this.SLG}} |
38
+ {{/each}}
39
+ {{else}}
40
+ *Zone data not available*
41
+ {{/if}}
42
+
43
+ ## Splits Analysis
44
+
45
+ *To be populated: vs LHP/RHP, home/away*
46
+
47
+ ## Trend Analysis
48
+
49
+ *To be populated: rolling average trends*
50
+
51
+ ## Risk Assessment
52
+
53
+ *To be filled by evaluator: injury history, age curve, contract implications*
54
+
55
+ ## Comparable Player
56
+
57
+ *To be filled by evaluator: statistical comp*
58
+
59
+ ## Role Projection
60
+
61
+ *To be filled by evaluator: lineup position, expected production, Acquire / Pass / Monitor*
62
+
63
+ ---
64
+
65
+ *Generated by bbdata CLI · Data sources: {{sources}}*
@@ -0,0 +1,69 @@
1
+ # Pro Pitcher Evaluation: {{player}}
2
+
3
+ **Season:** {{season}} | **Audience:** {{audience}} | **Generated:** {{date}}
4
+
5
+ ---
6
+
7
+ ## Header
8
+
9
+ | Field | Value |
10
+ |-------|-------|
11
+ | Player | {{player}} |
12
+ | Season | {{season}} |
13
+ | Sources | {{sources}} |
14
+
15
+ ## Pitch Arsenal
16
+
17
+ {{#if data.pitcher-arsenal}}
18
+ | Pitch Type | Usage % | Avg Velo | Avg Spin | H Break | V Break | Whiff % | Put Away % | Pitches |
19
+ |------------|---------|----------|----------|---------|---------|---------|------------|---------|
20
+ {{#each data.pitcher-arsenal}}
21
+ | {{this.[Pitch Type]}} | {{this.[Usage %]}} | {{this.[Avg Velo]}} | {{this.[Avg Spin]}} | {{this.[H Break]}} | {{this.[V Break]}} | {{this.[Whiff %]}} | {{this.[Put Away %]}} | {{this.Pitches}} |
22
+ {{/each}}
23
+ {{else}}
24
+ *Arsenal data not available*
25
+ {{/if}}
26
+
27
+ ## Performance Profile
28
+
29
+ *Season statistics to be populated from FanGraphs data (ERA, FIP, xFIP, SIERA, K-BB%, WAR)*
30
+
31
+ ## Splits Analysis
32
+
33
+ {{#if data.pitcher-handedness-splits}}
34
+ | vs | PA | AVG | SLG | K % | BB % | Avg EV | Whiff % |
35
+ |----|-----|-----|-----|-----|------|--------|---------|
36
+ {{#each data.pitcher-handedness-splits}}
37
+ | {{this.vs}} | {{this.PA}} | {{this.AVG}} | {{this.SLG}} | {{this.[K %]}} | {{this.[BB %]}} | {{this.[Avg EV]}} | {{this.[Whiff %]}} |
38
+ {{/each}}
39
+ {{else}}
40
+ *Splits data not available*
41
+ {{/if}}
42
+
43
+ ## Trend Analysis
44
+
45
+ {{#if data.pitcher-velocity-trend}}
46
+ | Month | Avg Velo | Max Velo | Δ vs Prior | Pitches | Flag |
47
+ |-------|----------|----------|------------|---------|------|
48
+ {{#each data.pitcher-velocity-trend}}
49
+ | {{this.Month}} | {{this.[Avg Velo]}} | {{this.[Max Velo]}} | {{this.[Δ vs Prior]}} | {{this.Pitches}} | {{this.Flag}} |
50
+ {{/each}}
51
+ {{else}}
52
+ *Velocity trend data not available*
53
+ {{/if}}
54
+
55
+ ## Risk Assessment
56
+
57
+ *To be filled by evaluator: injury history, mechanical concerns, workload flags*
58
+
59
+ ## Comparable Player
60
+
61
+ *To be filled by evaluator: statistical comp to current/recent MLB pitcher*
62
+
63
+ ## Role Projection
64
+
65
+ *To be filled by evaluator: SP1-5 / Setup / Closer / Middle Relief + Acquire / Pass / Monitor recommendation*
66
+
67
+ ---
68
+
69
+ *Generated by bbdata CLI · Data sources: {{sources}}*
@@ -0,0 +1,215 @@
1
+ import type { DataSource, AdapterQuery } from '../../adapters/types.js';
2
+
3
+ export type ReportCategory = 'pro-scouting' | 'amateur-scouting' | 'advance' | 'player-dev' | 'executive';
4
+ export type Audience = 'coach' | 'gm' | 'scout' | 'analyst';
5
+
6
+ export interface ReportTemplate {
7
+ id: string;
8
+ name: string;
9
+ category: ReportCategory;
10
+ description: string;
11
+ audiences: Audience[];
12
+ templateFile: string;
13
+
14
+ /** What data queries this report needs */
15
+ dataRequirements: {
16
+ queryTemplate: string;
17
+ paramMapping: Record<string, string>;
18
+ required: boolean;
19
+ }[];
20
+
21
+ /** Sections that must be present in the output */
22
+ requiredSections: string[];
23
+
24
+ examples: string[];
25
+ }
26
+
27
+ // Template registry
28
+ const templates = new Map<string, ReportTemplate>();
29
+
30
+ export function registerReportTemplate(template: ReportTemplate): void {
31
+ templates.set(template.id, template);
32
+ }
33
+
34
+ export function getReportTemplate(id: string): ReportTemplate | undefined {
35
+ return templates.get(id);
36
+ }
37
+
38
+ export function getAllReportTemplates(): ReportTemplate[] {
39
+ return Array.from(templates.values());
40
+ }
41
+
42
+ export function getReportTemplatesByCategory(category: ReportCategory): ReportTemplate[] {
43
+ return getAllReportTemplates().filter((t) => t.category === category);
44
+ }
45
+
46
+ export function listReportTemplates(): { id: string; name: string; category: string; description: string }[] {
47
+ return getAllReportTemplates().map((t) => ({
48
+ id: t.id,
49
+ name: t.name,
50
+ category: t.category,
51
+ description: t.description,
52
+ }));
53
+ }
54
+
55
+ // --- Register all 12 report templates ---
56
+
57
+ registerReportTemplate({
58
+ id: 'pro-pitcher-eval',
59
+ name: 'Pro Pitcher Evaluation',
60
+ category: 'pro-scouting',
61
+ description: 'Full MLB/MiLB pitcher assessment for trade/free agency decisions',
62
+ audiences: ['gm', 'scout', 'analyst'],
63
+ templateFile: 'pro-pitcher-eval.hbs',
64
+ dataRequirements: [
65
+ { queryTemplate: 'pitcher-arsenal', paramMapping: { player: 'player' }, required: true },
66
+ { queryTemplate: 'pitcher-velocity-trend', paramMapping: { player: 'player' }, required: false },
67
+ { queryTemplate: 'pitcher-handedness-splits', paramMapping: { player: 'player' }, required: true },
68
+ ],
69
+ requiredSections: ['Header', 'Pitch Arsenal', 'Performance Profile', 'Splits Analysis', 'Trend Analysis', 'Risk Assessment', 'Comparable Player', 'Role Projection'],
70
+ examples: ['bbdata report pro-pitcher-eval --player "Corbin Burnes"'],
71
+ });
72
+
73
+ registerReportTemplate({
74
+ id: 'pro-hitter-eval',
75
+ name: 'Pro Hitter Evaluation',
76
+ category: 'pro-scouting',
77
+ description: 'Full MLB/MiLB hitter assessment for acquisition decisions',
78
+ audiences: ['gm', 'scout', 'analyst'],
79
+ templateFile: 'pro-hitter-eval.hbs',
80
+ dataRequirements: [
81
+ { queryTemplate: 'hitter-batted-ball', paramMapping: { player: 'player' }, required: true },
82
+ { queryTemplate: 'hitter-vs-pitch-type', paramMapping: { player: 'player' }, required: true },
83
+ { queryTemplate: 'hitter-hot-cold-zones', paramMapping: { player: 'player' }, required: false },
84
+ ],
85
+ requiredSections: ['Header', 'Batted Ball Profile', 'Approach & Discipline', 'Splits Analysis', 'Trend Analysis', 'Risk Assessment', 'Comparable Player', 'Role Projection'],
86
+ examples: ['bbdata report pro-hitter-eval --player "Juan Soto"'],
87
+ });
88
+
89
+ registerReportTemplate({
90
+ id: 'relief-pitcher-quick',
91
+ name: 'Relief Pitcher Quick Eval',
92
+ category: 'pro-scouting',
93
+ description: 'Fast 1-page evaluation for bullpen additions',
94
+ audiences: ['gm', 'scout'],
95
+ templateFile: 'relief-pitcher-quick.hbs',
96
+ dataRequirements: [
97
+ { queryTemplate: 'pitcher-arsenal', paramMapping: { player: 'player' }, required: true },
98
+ ],
99
+ requiredSections: ['Header', 'Arsenal', 'Key Metrics', 'Recommendation'],
100
+ examples: ['bbdata report relief-pitcher-quick --player "Edwin Diaz"'],
101
+ });
102
+
103
+ registerReportTemplate({
104
+ id: 'college-pitcher-draft',
105
+ name: 'College Pitcher Draft Report',
106
+ category: 'amateur-scouting',
107
+ description: 'Draft evaluation with tools and projection focus',
108
+ audiences: ['gm', 'scout'],
109
+ templateFile: 'college-pitcher-draft.hbs',
110
+ dataRequirements: [],
111
+ requiredSections: ['Header', 'Physical', 'Arsenal Grades', 'Performance', 'Projection', 'Risk', 'Recommendation'],
112
+ examples: ['bbdata report college-pitcher-draft --player "Chase Burns"'],
113
+ });
114
+
115
+ registerReportTemplate({
116
+ id: 'college-hitter-draft',
117
+ name: 'College Hitter Draft Report',
118
+ category: 'amateur-scouting',
119
+ description: 'Draft evaluation with tools and projection focus',
120
+ audiences: ['gm', 'scout'],
121
+ templateFile: 'college-hitter-draft.hbs',
122
+ dataRequirements: [],
123
+ requiredSections: ['Header', 'Physical', 'Tool Grades', 'Performance', 'Projection', 'Risk', 'Recommendation'],
124
+ examples: ['bbdata report college-hitter-draft --player "Charlie Condon"'],
125
+ });
126
+
127
+ registerReportTemplate({
128
+ id: 'hs-prospect',
129
+ name: 'High School Prospect Report',
130
+ category: 'amateur-scouting',
131
+ description: 'Tools-and-projection focused (stats unreliable at HS level)',
132
+ audiences: ['gm', 'scout'],
133
+ templateFile: 'hs-prospect.hbs',
134
+ dataRequirements: [],
135
+ requiredSections: ['Header', 'Physical', 'Tool Grades', 'Makeup', 'Projection', 'Signability', 'Recommendation'],
136
+ examples: ['bbdata report hs-prospect --player "Prospect Name"'],
137
+ });
138
+
139
+ registerReportTemplate({
140
+ id: 'advance-sp',
141
+ name: 'Advance Report: Starting Pitcher',
142
+ category: 'advance',
143
+ description: 'Game prep for opposing starter — actionable, 1-page, bullet-point format',
144
+ audiences: ['coach', 'analyst'],
145
+ templateFile: 'advance-sp.hbs',
146
+ dataRequirements: [
147
+ { queryTemplate: 'pitcher-arsenal', paramMapping: { player: 'player' }, required: true },
148
+ { queryTemplate: 'pitcher-handedness-splits', paramMapping: { player: 'player' }, required: true },
149
+ ],
150
+ requiredSections: ['Header', 'Recent Form', 'Pitch Mix & Sequencing', 'Times Through Order', 'Platoon Vulnerabilities', 'How to Attack'],
151
+ examples: ['bbdata report advance-sp --player "Gerrit Cole" --audience coach'],
152
+ });
153
+
154
+ registerReportTemplate({
155
+ id: 'advance-lineup',
156
+ name: 'Advance Report: Opposing Lineup',
157
+ category: 'advance',
158
+ description: 'Hitter-by-hitter breakdown for pitchers and catchers',
159
+ audiences: ['coach', 'analyst'],
160
+ templateFile: 'advance-lineup.hbs',
161
+ dataRequirements: [],
162
+ requiredSections: ['Header', 'Lineup Overview', 'Hitter Breakdowns', 'Key Matchups'],
163
+ examples: ['bbdata report advance-lineup --team NYY'],
164
+ });
165
+
166
+ registerReportTemplate({
167
+ id: 'dev-progress',
168
+ name: 'Development Progress Report',
169
+ category: 'player-dev',
170
+ description: 'Track minor league player growth over time (monthly/quarterly)',
171
+ audiences: ['scout', 'analyst'],
172
+ templateFile: 'dev-progress.hbs',
173
+ dataRequirements: [],
174
+ requiredSections: ['Header', 'Current Stats', 'Trend Analysis', 'Mechanical Notes', 'Development Goals', 'Next Steps'],
175
+ examples: ['bbdata report dev-progress --player "Jackson Holliday"'],
176
+ });
177
+
178
+ registerReportTemplate({
179
+ id: 'post-promotion',
180
+ name: 'Post-Promotion Evaluation',
181
+ category: 'player-dev',
182
+ description: 'Assess player adjustment after level change',
183
+ audiences: ['scout', 'analyst'],
184
+ templateFile: 'post-promotion.hbs',
185
+ dataRequirements: [],
186
+ requiredSections: ['Header', 'Pre-Promotion Stats', 'Post-Promotion Stats', 'Adjustment Analysis', 'Recommendation'],
187
+ examples: ['bbdata report post-promotion --player "Jackson Holliday"'],
188
+ });
189
+
190
+ registerReportTemplate({
191
+ id: 'trade-target-onepager',
192
+ name: 'Trade Target One-Pager',
193
+ category: 'executive',
194
+ description: 'Condensed 2-minute evaluation for GM-level trade decisions',
195
+ audiences: ['gm'],
196
+ templateFile: 'trade-target-onepager.hbs',
197
+ dataRequirements: [
198
+ { queryTemplate: 'hitter-batted-ball', paramMapping: { player: 'player' }, required: false },
199
+ { queryTemplate: 'pitcher-arsenal', paramMapping: { player: 'player' }, required: false },
200
+ ],
201
+ requiredSections: ['Header', 'Key Stats', 'Strengths', 'Concerns', 'Fit Assessment', 'Recommendation'],
202
+ examples: ['bbdata report trade-target-onepager --player "Vladimir Guerrero Jr." --audience gm'],
203
+ });
204
+
205
+ registerReportTemplate({
206
+ id: 'draft-board-card',
207
+ name: 'Draft Board Summary Card',
208
+ category: 'executive',
209
+ description: 'Glanceable index card for draft room use',
210
+ audiences: ['gm', 'scout'],
211
+ templateFile: 'draft-board-card.hbs',
212
+ dataRequirements: [],
213
+ requiredSections: ['Name', 'Position', 'School', 'Tool Grades', 'Projection', 'Comp', 'Round Range'],
214
+ examples: ['bbdata report draft-board-card --player "Prospect Name"'],
215
+ });
@@ -0,0 +1,29 @@
1
+ # Relief Pitcher Quick Eval: {{player}}
2
+
3
+ **Season:** {{season}} | **Generated:** {{date}}
4
+
5
+ ---
6
+
7
+ ## Arsenal
8
+
9
+ {{#if data.pitcher-arsenal}}
10
+ | Pitch | Usage | Velo | Whiff % |
11
+ |-------|-------|------|---------|
12
+ {{#each data.pitcher-arsenal}}
13
+ | {{this.[Pitch Type]}} | {{this.[Usage %]}} | {{this.[Avg Velo]}} | {{this.[Whiff %]}} |
14
+ {{/each}}
15
+ {{else}}
16
+ *Data not available*
17
+ {{/if}}
18
+
19
+ ## Key Metrics
20
+
21
+ *ERA, FIP, K-BB%, leverage index — to be populated*
22
+
23
+ ## Recommendation
24
+
25
+ *Acquire / Pass / Monitor — to be filled by evaluator*
26
+
27
+ ---
28
+
29
+ *Generated by bbdata CLI · 1-page format*
@@ -0,0 +1,45 @@
1
+ # Trade Target: {{player}}
2
+
3
+ **Season:** {{season}} | **For:** {{audience}} | **Generated:** {{date}}
4
+
5
+ ---
6
+
7
+ ## Key Stats
8
+
9
+ {{#if data.hitter-batted-ball}}
10
+ | Metric | Value |
11
+ |--------|-------|
12
+ {{#each data.hitter-batted-ball}}
13
+ | {{this.Metric}} | {{this.Value}} |
14
+ {{/each}}
15
+ {{else}}
16
+ {{#if data.pitcher-arsenal}}
17
+ | Pitch | Usage | Velo | Whiff % |
18
+ |-------|-------|------|---------|
19
+ {{#each data.pitcher-arsenal}}
20
+ | {{this.[Pitch Type]}} | {{this.[Usage %]}} | {{this.[Avg Velo]}} | {{this.[Whiff %]}} |
21
+ {{/each}}
22
+ {{else}}
23
+ *Stats to be populated*
24
+ {{/if}}
25
+ {{/if}}
26
+
27
+ ## Strengths
28
+
29
+ *Top 2-3 strengths — to be filled*
30
+
31
+ ## Concerns
32
+
33
+ *Top 2-3 concerns — to be filled*
34
+
35
+ ## Fit Assessment
36
+
37
+ *How this player fits the acquiring team's needs — to be filled*
38
+
39
+ ## Recommendation
40
+
41
+ **Acquire / Pass / Monitor** — *to be filled*
42
+
43
+ ---
44
+
45
+ *Generated by bbdata CLI · Executive 1-page format*
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bbdata-cli",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Baseball data CLI for querying, scouting reports, and analytics — built for humans and AI agents",
5
5
  "type": "module",
6
6
  "bin": {