@claudinho/cli 0.8.9 → 0.8.11
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/README.md +33 -14
- package/dist/index.js +11 -3
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
# @claudinho/cli ⚽
|
|
2
2
|
|
|
3
|
-
**The 2026 men's football tournament, right in your terminal.** Live scores, fixtures, group tables, and market signals — TZ-aware, localized, scriptable.
|
|
4
|
-
|
|
5
|
-
> ⚠️ **Not affiliated with, endorsed by, or connected to FIFA or Anthropic.**
|
|
6
|
-
> Claudinho is an independent, open-source fan project. It shows factual match
|
|
7
|
-
> data (scores, fixtures, standings) with emoji flags only — no logos, crests,
|
|
8
|
-
> kits, broadcast footage, or player likenesses.
|
|
3
|
+
**The 2026 men's football tournament, right in your terminal.** Live scores, fixtures, group tables, and market signals — TZ-aware, localized, scriptable. No API key, no signup.
|
|
9
4
|
|
|
10
5
|
## Install
|
|
11
6
|
|
|
@@ -15,6 +10,24 @@ npm i -g @claudinho/cli # installs the `claudinho` binary
|
|
|
15
10
|
npx @claudinho/cli today
|
|
16
11
|
```
|
|
17
12
|
|
|
13
|
+
`claudinho today` on a knockout night — penalty shootouts and all:
|
|
14
|
+
|
|
15
|
+
<!-- DEMO: verbatim `claudinho today <date>` from a knockout matchday. Shootouts render
|
|
16
|
+
as 1(3)–1(4). REGENERATE per matchday (capture after the day's games finish, so the
|
|
17
|
+
scores are live and current). Never hand-edit. -->
|
|
18
|
+
```text
|
|
19
|
+
Matches · 2026-06-29
|
|
20
|
+
|
|
21
|
+
🇧🇷 Brazil 2–1 Japan 🇯🇵 FT into the history books!
|
|
22
|
+
🇩🇪 Germany 1(3)–1(4) Paraguay 🇵🇾 FT it's all over!
|
|
23
|
+
🇳🇱 Netherlands 1(2)–1(3) Morocco 🇲🇦 FT the final whistle blows!
|
|
24
|
+
|
|
25
|
+
Live data: ESPN
|
|
26
|
+
Not affiliated with FIFA or Anthropic.
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
All 104 fixtures ship bundled, so the schedule works offline; only live scores hit the network.
|
|
30
|
+
|
|
18
31
|
## Commands
|
|
19
32
|
|
|
20
33
|
```bash
|
|
@@ -120,18 +133,20 @@ claudinho share 760415 # one match by id
|
|
|
120
133
|
claudinho share next MEX --copy # …and copy it straight to the clipboard
|
|
121
134
|
```
|
|
122
135
|
|
|
123
|
-
<!-- DEMO CARD: verbatim output of `claudinho share next
|
|
124
|
-
REGENERATE
|
|
125
|
-
|
|
136
|
+
<!-- DEMO CARD: verbatim output of `claudinho share next MEX --tz America/Los_Angeles`.
|
|
137
|
+
REGENERATE before release — the matchup advances each round and any market block
|
|
138
|
+
drifts. Never hand-edit. -->
|
|
126
139
|
```text
|
|
127
|
-
Next up for
|
|
140
|
+
Next up for Mexico
|
|
128
141
|
|
|
129
|
-
|
|
130
|
-
Jun
|
|
131
|
-
|
|
142
|
+
🇲🇽 Mexico vs Ecuador 🇪🇨
|
|
143
|
+
Jun 30 · 18:00 America/Los_Angeles
|
|
144
|
+
Estadio Banorte, Mexico City, Mexico
|
|
145
|
+
Round of 32
|
|
132
146
|
|
|
147
|
+
Live data: ESPN
|
|
133
148
|
#VibingLaVidaLoca · Independent fan project · not affiliated with FIFA or Anthropic.
|
|
134
|
-
Try it: npx @claudinho/cli next
|
|
149
|
+
Try it: npx @claudinho/cli next MEX
|
|
135
150
|
```
|
|
136
151
|
|
|
137
152
|
Snippets are **plain text** (no color codes — they paste cleanly everywhere) and
|
|
@@ -225,6 +240,10 @@ from Polymarket; provider attribution and rate limits are respected.
|
|
|
225
240
|
|
|
226
241
|
MIT © 2026 Arturo Garrido · [source & issues](https://github.com/arturogarrido/claudinho)
|
|
227
242
|
|
|
243
|
+
> **Not affiliated with, endorsed by, or connected to FIFA or Anthropic.** An independent,
|
|
244
|
+
> open-source fan project showing factual match data (scores, fixtures, standings) with emoji
|
|
245
|
+
> flags only — no logos, crests, kits, broadcast footage, or player likenesses.
|
|
246
|
+
|
|
228
247
|
---
|
|
229
248
|
|
|
230
249
|
_Built while watching the games._ **#VibingLaVidaLoca** ⚽
|
package/dist/index.js
CHANGED
|
@@ -509,7 +509,11 @@ function isFinished(status) {
|
|
|
509
509
|
}
|
|
510
510
|
function scoreline(match) {
|
|
511
511
|
if (!match.score) return "vs";
|
|
512
|
-
|
|
512
|
+
const { home, away } = match.score;
|
|
513
|
+
if (match.shootout) {
|
|
514
|
+
return `${home}(${match.shootout.home})\u2013${away}(${match.shootout.away})`;
|
|
515
|
+
}
|
|
516
|
+
return `${home}\u2013${away}`;
|
|
513
517
|
}
|
|
514
518
|
function matchLocation(match) {
|
|
515
519
|
return [match.venue, match.city, match.country].filter(Boolean).join(", ");
|
|
@@ -2864,7 +2868,7 @@ function stageFromSlug(slug) {
|
|
|
2864
2868
|
}
|
|
2865
2869
|
function toInt(s) {
|
|
2866
2870
|
if (s == null || s === "") return void 0;
|
|
2867
|
-
const n = parseInt(s, 10);
|
|
2871
|
+
const n = parseInt(String(s), 10);
|
|
2868
2872
|
return Number.isFinite(n) ? n : void 0;
|
|
2869
2873
|
}
|
|
2870
2874
|
function toTeam(t2) {
|
|
@@ -2893,6 +2897,9 @@ function mapEspnEvent(ev, ctx = {}) {
|
|
|
2893
2897
|
if (homeC?.winner) winnerCode = home.code;
|
|
2894
2898
|
else if (awayC?.winner) winnerCode = away.code;
|
|
2895
2899
|
}
|
|
2900
|
+
const hShoot = toInt(homeC?.shootoutScore);
|
|
2901
|
+
const aShoot = toInt(awayC?.shootoutScore);
|
|
2902
|
+
const shootout = hasScore && hShoot !== void 0 && aShoot !== void 0 ? { home: hShoot, away: aShoot } : void 0;
|
|
2896
2903
|
return {
|
|
2897
2904
|
id: ev.id,
|
|
2898
2905
|
stage,
|
|
@@ -2904,6 +2911,7 @@ function mapEspnEvent(ev, ctx = {}) {
|
|
|
2904
2911
|
home,
|
|
2905
2912
|
away,
|
|
2906
2913
|
score: hasScore ? { home: hs, away: as } : void 0,
|
|
2914
|
+
shootout,
|
|
2907
2915
|
minute: parseMinute(ev.status ?? comp?.status),
|
|
2908
2916
|
status,
|
|
2909
2917
|
winnerCode,
|
|
@@ -6311,7 +6319,7 @@ function handlePipeError(stream) {
|
|
|
6311
6319
|
}
|
|
6312
6320
|
handlePipeError(process.stdout);
|
|
6313
6321
|
handlePipeError(process.stderr);
|
|
6314
|
-
var VERSION = "0.8.
|
|
6322
|
+
var VERSION = "0.8.11";
|
|
6315
6323
|
var DISCLAIMER = "Claudinho is an independent fan project. Not affiliated with or endorsed by FIFA or Anthropic.";
|
|
6316
6324
|
function ctxFrom(cmd) {
|
|
6317
6325
|
let root = cmd;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@claudinho/cli",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.11",
|
|
4
4
|
"description": "Live scores, fixtures, group tables, and read-only prediction-market signals for the 2026 men's football tournament — in your terminal, Claude Code, and Cursor CLI statusline. No API keys. Not affiliated with FIFA or Anthropic.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"tsup": "^8.0.0",
|
|
62
62
|
"typescript": "^5.7.0",
|
|
63
63
|
"vitest": "^4.1.9",
|
|
64
|
-
"@claudinho/core": "0.8.
|
|
64
|
+
"@claudinho/core": "0.8.11"
|
|
65
65
|
},
|
|
66
66
|
"scripts": {
|
|
67
67
|
"build": "tsup",
|