@mkterswingman/5mghost-twinkler 0.1.6 → 0.1.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 +4 -0
- package/package.json +2 -2
- package/skills/use-5mghost-twinkler/SKILL.md +62 -2
package/README.md
CHANGED
|
@@ -17,6 +17,10 @@ was unavailable during install; normal AI workflows should start with
|
|
|
17
17
|
Auth defaults to browser OAuth via `twinkler login`. PAT login is an advanced
|
|
18
18
|
fallback with `twinkler login --pat-stdin`.
|
|
19
19
|
|
|
20
|
+
`GET /api/v1/search/advanced` intentionally returns 501 and is not part of the
|
|
21
|
+
public-ready supported surface. Use `/api/v1/search`, rankings, channel, or game
|
|
22
|
+
routes instead.
|
|
23
|
+
|
|
20
24
|
Watch jobs are remembered locally in `~/.mkterswingman/twinkler/jobs.json` so AI
|
|
21
25
|
sessions can recover active and recent jobs without making users remember job
|
|
22
26
|
IDs.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mkterswingman/5mghost-twinkler",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.11",
|
|
4
4
|
"description": "Lightweight AI helper for the 5mghost Twinkler API",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
},
|
|
12
12
|
"repository": {
|
|
13
13
|
"type": "git",
|
|
14
|
-
"url": "https://github.com/
|
|
14
|
+
"url": "https://github.com/mkterswingman/mcp_projects.git",
|
|
15
15
|
"directory": "5mghost-twinkler/client"
|
|
16
16
|
},
|
|
17
17
|
"bin": {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: use-5mghost-twinkler
|
|
3
3
|
preamble-tier: 3
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.4.0
|
|
5
5
|
description: |
|
|
6
6
|
Use when the user wants Twitch streamer, game, ranking, stream-session, CCV,
|
|
7
7
|
chat, live-watch, or SullyGnome data through the mkterswingman Twinkler API.
|
|
@@ -39,6 +39,58 @@ Read the JSON.
|
|
|
39
39
|
Do not use time-based latest-version caches. The preflight checks npm latest on
|
|
40
40
|
every invocation.
|
|
41
41
|
|
|
42
|
+
## Ambiguity Gate
|
|
43
|
+
|
|
44
|
+
Before choosing an endpoint, decide whether the user's wording identifies all
|
|
45
|
+
result-shaping inputs. Do not guess when a different interpretation would change
|
|
46
|
+
the answer.
|
|
47
|
+
|
|
48
|
+
Ask a short clarification before calling heavy endpoints when any of these are
|
|
49
|
+
missing and not inferable from context:
|
|
50
|
+
|
|
51
|
+
- Target type: channel, game, broad ranking, team/community, stream session, or
|
|
52
|
+
live watch job.
|
|
53
|
+
- Metric: average CCV / average viewers, peak viewers, watched hours, stream
|
|
54
|
+
hours, followers, growth, chat, live CCV, or per-session game splits.
|
|
55
|
+
- Time window: `7/14/30/90/180/365` days or a named month/year.
|
|
56
|
+
- Filters: language, mature content, minimum CCV, minimum stream time, region or
|
|
57
|
+
game/category constraints.
|
|
58
|
+
- Ordering: `watched`, `avgviewers`, `peakviewers`, `streamtime`,
|
|
59
|
+
`mostfollowers`, `followergrowth`, or "latest streams".
|
|
60
|
+
|
|
61
|
+
Use these defaults only for low-risk exploratory asks, and say them briefly in
|
|
62
|
+
the answer: `days=30`, `language=any`, `mature=include`, `page_size=25`.
|
|
63
|
+
Do not default the sort order when the user's wording says only "data",
|
|
64
|
+
"ranking", "creator list", or "主播数据"; ask whether they want watched hours,
|
|
65
|
+
average viewers/CCV, peak viewers, stream time, or followers.
|
|
66
|
+
|
|
67
|
+
Lightweight probes are allowed before asking:
|
|
68
|
+
|
|
69
|
+
- Run `/api/v1/search?q=<term>` when a name could be a game or channel, or when
|
|
70
|
+
a game title may have multiple SullyGnome IDs.
|
|
71
|
+
- Run `/api/v1/meta/languages`, `/api/v1/meta/days-ranges`, or
|
|
72
|
+
`/api/v1/meta/sort-options` when you need exact accepted enum values.
|
|
73
|
+
- If `/search` returns multiple plausible candidates, show the candidate names,
|
|
74
|
+
numeric ids, and `siteurl` values; ask the user to pick one. Do not silently
|
|
75
|
+
choose the first row.
|
|
76
|
+
|
|
77
|
+
Examples:
|
|
78
|
+
|
|
79
|
+
- User: "帮我找找 Delta Force 的主播数据"
|
|
80
|
+
- First run search for `Delta Force`.
|
|
81
|
+
- If multiple games match, show candidates and ask which game.
|
|
82
|
+
- Also ask the missing result shape: time window, language, and sort metric
|
|
83
|
+
(watched hours vs avg CCV vs peak viewers vs stream time).
|
|
84
|
+
- User: "查 ibai 30 天 avg ccv"
|
|
85
|
+
- This is specific enough: call `/channel/ibai/summary?days=30` and report the
|
|
86
|
+
summary-card Average viewers.
|
|
87
|
+
- User: "找英语区近 30 天播过 Tarkov、平均 CCV 1000+ 的主播"
|
|
88
|
+
- Search/resolve the game, use `/game/{id}/channels`, start with
|
|
89
|
+
`sort_by=watched`, then filter rows locally by language and avg viewers.
|
|
90
|
+
|
|
91
|
+
When asking, keep it to at most three user-facing questions in one message. For
|
|
92
|
+
example: "你要哪个 Delta Force 版本?时间窗用 30 天还是 365 天?排序看观看时长还是平均 CCV?"
|
|
93
|
+
|
|
42
94
|
## Data Request Layer
|
|
43
95
|
|
|
44
96
|
Use `twinkler call` for one-off hosted API requests:
|
|
@@ -46,10 +98,16 @@ Use `twinkler call` for one-off hosted API requests:
|
|
|
46
98
|
```bash
|
|
47
99
|
twinkler call GET /api/v1/channel/ibai/summary --query days=30
|
|
48
100
|
twinkler call GET /api/v1/channel/ibai/streams --query days=30 --query sort_by=avgviewers --query page=1 --query page_size=25
|
|
49
|
-
twinkler call GET /api/v1/
|
|
101
|
+
twinkler call GET /api/v1/search --query 'q=Delta Force'
|
|
102
|
+
twinkler call GET /api/v1/game/<selected_sullygnome_game_id>/channels --query days=365 --query sort_by=watched --query page=1 --query page_size=50
|
|
50
103
|
twinkler call GET /api/v1/rankings/channels --query sort_by=mostfollowers --query days=30 --query page=1 --query page_size=25
|
|
51
104
|
```
|
|
52
105
|
|
|
106
|
+
Use the numeric `value` from the chosen `/search` game candidate as
|
|
107
|
+
`<selected_sullygnome_game_id>`. Do not use Twitch Helix game ids or URL-encoded
|
|
108
|
+
game names in `/game/{game_identifier}` once search has shown multiple
|
|
109
|
+
candidates.
|
|
110
|
+
|
|
53
111
|
Pick the smallest API that answers the question:
|
|
54
112
|
|
|
55
113
|
- Channel profile/current history: `/channel/{name}/summary`.
|
|
@@ -61,6 +119,8 @@ Pick the smallest API that answers the question:
|
|
|
61
119
|
- Broad Twitch leaderboards: `/rankings/channels`, `/rankings/games`,
|
|
62
120
|
`/rankings/teams`.
|
|
63
121
|
- Live CCV/chat sampling: create a watch job instead of polling summary pages.
|
|
122
|
+
- Do not use `/search/advanced`; it intentionally returns 501 and is not part
|
|
123
|
+
of the public-ready supported surface.
|
|
64
124
|
|
|
65
125
|
## Watch Job Layer
|
|
66
126
|
|