@acedatacloud/skills 2026.728.0 → 2026.728.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/package.json +1 -1
- package/skills/bilibili/SKILL.md +1 -1
- package/skills/csdn/SKILL.md +1 -1
- package/skills/discord/SKILL.md +5 -5
- package/skills/discord/scripts/discord_user.py +4 -4
- package/skills/google-gmail/SKILL.md +1 -1
- package/skills/juejin/SKILL.md +1 -1
- package/skills/mastodon/SKILL.md +1 -1
- package/skills/personal-wechat/SKILL.md +2 -2
- package/skills/telegram/SKILL.md +1 -1
- package/skills/toutiao/SKILL.md +1 -1
- package/skills/x/SKILL.md +11 -8
- package/skills/x/scripts/x.py +2 -2
- package/skills/yuque/SKILL.md +7 -7
- package/skills/zhihu/SKILL.md +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acedatacloud/skills",
|
|
3
|
-
"version": "2026.728.
|
|
3
|
+
"version": "2026.728.1",
|
|
4
4
|
"description": "Agent Skills for AceDataCloud AI services — music, image, video generation, LLM chat, web search. Compatible with Claude Code, GitHub Copilot, Gemini CLI, OpenAI Codex, and 30+ AI coding agents.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent-skills",
|
package/skills/bilibili/SKILL.md
CHANGED
|
@@ -54,7 +54,7 @@ Stats come straight from Bilibili: `view` (阅读), `like` (点赞), `reply` (
|
|
|
54
54
|
```sh
|
|
55
55
|
BILI="$SKILL_DIR/scripts/bilibili.py"; [ -f "$BILI" ] || BILI=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/bilibili.py' 2>/dev/null | head -1)
|
|
56
56
|
python3 "$BILI" whoami
|
|
57
|
-
# → {"mid":
|
|
57
|
+
# → {"mid": 10000000, "name": "...", "level": 4}
|
|
58
58
|
```
|
|
59
59
|
|
|
60
60
|
On a not-logged-in / auth error the cookie is expired — have the user reconnect
|
package/skills/csdn/SKILL.md
CHANGED
|
@@ -53,7 +53,7 @@ Stats come straight from CSDN: `view_count` (阅读), `digg_count` (点赞),
|
|
|
53
53
|
```sh
|
|
54
54
|
CSDN="$SKILL_DIR/scripts/csdn.py"; [ -f "$CSDN" ] || CSDN=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/csdn.py' 2>/dev/null | head -1)
|
|
55
55
|
python3 "$CSDN" whoami
|
|
56
|
-
# → {"username": "...", "nickname": "...", "articles_total":
|
|
56
|
+
# → {"username": "...", "nickname": "...", "articles_total": 0}
|
|
57
57
|
```
|
|
58
58
|
|
|
59
59
|
On a WAF 403 / auth error the cookie is expired — tell the user to reconnect at
|
package/skills/discord/SKILL.md
CHANGED
|
@@ -63,15 +63,15 @@ python3 scripts/discord_user.py whoami
|
|
|
63
63
|
# list the servers (guilds) the account is in
|
|
64
64
|
python3 scripts/discord_user.py guilds
|
|
65
65
|
# list text channels in a server
|
|
66
|
-
python3 scripts/discord_user.py channels --guild
|
|
66
|
+
python3 scripts/discord_user.py channels --guild GUILD_ID
|
|
67
67
|
# read recent messages in a channel
|
|
68
|
-
python3 scripts/discord_user.py messages --channel
|
|
68
|
+
python3 scripts/discord_user.py messages --channel CHANNEL_ID --limit 20
|
|
69
69
|
# send — dry-run first, then re-run with a trailing --confirm
|
|
70
|
-
python3 scripts/discord_user.py send --channel
|
|
71
|
-
python3 scripts/discord_user.py send --channel
|
|
70
|
+
python3 scripts/discord_user.py send --channel CHANNEL_ID --text "hello"
|
|
71
|
+
python3 scripts/discord_user.py send --channel CHANNEL_ID --text "hello" --confirm
|
|
72
72
|
# reply to a specific message
|
|
73
73
|
python3 scripts/discord_user.py reply \
|
|
74
|
-
--channel
|
|
74
|
+
--channel CHANNEL_ID --message MESSAGE_ID --text "on it" --confirm
|
|
75
75
|
```
|
|
76
76
|
|
|
77
77
|
`--confirm` is honored ONLY as the final argument (one strip), so a message body
|
|
@@ -17,10 +17,10 @@ account access — NEVER echo or print it.
|
|
|
17
17
|
Examples:
|
|
18
18
|
python3 discord_user.py whoami
|
|
19
19
|
python3 discord_user.py guilds
|
|
20
|
-
python3 discord_user.py channels --guild
|
|
21
|
-
python3 discord_user.py messages --channel
|
|
22
|
-
python3 discord_user.py send --channel
|
|
23
|
-
python3 discord_user.py reply --channel
|
|
20
|
+
python3 discord_user.py channels --guild GUILD_ID
|
|
21
|
+
python3 discord_user.py messages --channel CHANNEL_ID --limit 20
|
|
22
|
+
python3 discord_user.py send --channel CHANNEL_ID --text "hello" --confirm
|
|
23
|
+
python3 discord_user.py reply --channel CHANNEL_ID --message MESSAGE_ID --text "on it" --confirm
|
|
24
24
|
"""
|
|
25
25
|
|
|
26
26
|
from __future__ import annotations
|
|
@@ -383,7 +383,7 @@ BODY='Hi Alice,
|
|
|
383
383
|
Just a quick test note from the AceDataCloud Gmail connector.
|
|
384
384
|
|
|
385
385
|
Best,
|
|
386
|
-
|
|
386
|
+
YOUR_NAME'
|
|
387
387
|
|
|
388
388
|
# Multi-line subject lines need MIME encoded-word for non-ASCII; ASCII is fine raw.
|
|
389
389
|
RAW=$(printf 'To: %s\r\nSubject: %s\r\nContent-Type: text/plain; charset=UTF-8\r\nMIME-Version: 1.0\r\n\r\n%s' \
|
package/skills/juejin/SKILL.md
CHANGED
|
@@ -47,7 +47,7 @@ Stats come straight from 掘金: `view_count` (阅读), `digg_count` (点赞),
|
|
|
47
47
|
```sh
|
|
48
48
|
JJ="$SKILL_DIR/scripts/juejin.py"; [ -f "$JJ" ] || JJ=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/juejin.py' 2>/dev/null | head -1)
|
|
49
49
|
python3 "$JJ" whoami
|
|
50
|
-
# → {"user_id": "...", "name": "...", "post_article_count":
|
|
50
|
+
# → {"user_id": "...", "name": "...", "post_article_count": 0}
|
|
51
51
|
```
|
|
52
52
|
|
|
53
53
|
On an auth error (`err_no` 401 / "请登录") the cookie is expired — have the user
|
package/skills/mastodon/SKILL.md
CHANGED
|
@@ -64,7 +64,7 @@ curl -sS -X POST "$MASTODON_BASE_URL/api/v1/statuses" \
|
|
|
64
64
|
Use the `id` from `verify_credentials`:
|
|
65
65
|
|
|
66
66
|
```bash
|
|
67
|
-
ACCT_ID="
|
|
67
|
+
ACCT_ID="ACCOUNT_ID" # from verify_credentials
|
|
68
68
|
curl -sS "$MASTODON_BASE_URL/api/v1/accounts/$ACCT_ID/statuses?limit=20&exclude_replies=true&exclude_reblogs=true" \
|
|
69
69
|
-H "Authorization: Bearer $MASTODON_ACCESS_TOKEN" \
|
|
70
70
|
| jq '.[] | {id, url, boosts: .reblogs_count, favs: .favourites_count, replies: .replies_count, created_at}'
|
|
@@ -98,7 +98,7 @@ python3 $WX conversations --history --limit 20
|
|
|
98
98
|
First list conversations, then use the `id` as `conversation_id`:
|
|
99
99
|
|
|
100
100
|
```bash
|
|
101
|
-
python3 $WX messages "
|
|
101
|
+
python3 $WX messages "CONVERSATION_ID" --limit 50 --order asc
|
|
102
102
|
```
|
|
103
103
|
|
|
104
104
|
### Historical Messages
|
|
@@ -107,7 +107,7 @@ Read from Wisdom's decrypted WeChat local databases:
|
|
|
107
107
|
|
|
108
108
|
```bash
|
|
109
109
|
python3 $WX history --limit 50
|
|
110
|
-
python3 $WX history --talker "
|
|
110
|
+
python3 $WX history --talker "CONVERSATION_ID" --limit 50
|
|
111
111
|
python3 $WX history --limit 20 --offset 20
|
|
112
112
|
```
|
|
113
113
|
|
package/skills/telegram/SKILL.md
CHANGED
|
@@ -51,7 +51,7 @@ last argument** so a message/caption that merely contains "--confirm" can never
|
|
|
51
51
|
|
|
52
52
|
```sh
|
|
53
53
|
python3 "$TG" whoami
|
|
54
|
-
# → {"id":
|
|
54
|
+
# → {"id": 100000000, "username": "<the connected handle>", "name": "<display name>", "phone": "..."}
|
|
55
55
|
```
|
|
56
56
|
|
|
57
57
|
On an auth/session error the stored session is dead — tell the user to reconnect at
|
package/skills/toutiao/SKILL.md
CHANGED
|
@@ -54,7 +54,7 @@ Stats come straight from 头条: `impression_count` (展现), `read_count` (阅
|
|
|
54
54
|
```sh
|
|
55
55
|
TT="$SKILL_DIR/scripts/toutiao.py"; [ -f "$TT" ] || TT=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/toutiao.py' 2>/dev/null | head -1)
|
|
56
56
|
python3 "$TT" whoami
|
|
57
|
-
# → {"user_id": ..., "name": "...", "articles_total":
|
|
57
|
+
# → {"user_id": ..., "name": "...", "articles_total": 0}
|
|
58
58
|
```
|
|
59
59
|
|
|
60
60
|
On an auth error the cookie is expired — tell the user to reconnect at
|
package/skills/x/SKILL.md
CHANGED
|
@@ -50,8 +50,8 @@ python3 "$X" whoami # confirm the shipped CLI can read the authenticate
|
|
|
50
50
|
## Read commands (run directly)
|
|
51
51
|
|
|
52
52
|
```sh
|
|
53
|
-
python3 $X whoami --expect GermeyAce # verify this exact account
|
|
54
53
|
python3 $X whoami # discover the authenticated account
|
|
54
|
+
python3 $X whoami --expect SCREEN_NAME # optional: assert a specific account
|
|
55
55
|
python3 $X search --query "ai agents" --product Latest --limit 20 # Top | Latest | Media
|
|
56
56
|
python3 $X search-users --query "openai" --limit 10
|
|
57
57
|
python3 $X timeline --limit 20 # my home timeline
|
|
@@ -65,19 +65,22 @@ python3 $X trends --category trending --limit 20 # trending|for-you|
|
|
|
65
65
|
## Verify the connection first
|
|
66
66
|
|
|
67
67
|
```sh
|
|
68
|
-
python3 $X whoami
|
|
69
|
-
# → {"id": "...", "screen_name": "
|
|
68
|
+
python3 $X whoami
|
|
69
|
+
# → {"id": "...", "screen_name": "<the connected handle>", "identity_verified": true, ...}
|
|
70
70
|
```
|
|
71
71
|
|
|
72
72
|
`whoami` reads the authenticated account's screen name from X account settings,
|
|
73
|
-
then resolves its public profile.
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
73
|
+
then resolves its public profile. This avoids X's Cloudflare-blocked
|
|
74
|
+
`UserByRestId` endpoint without trusting a local identity cookie.
|
|
75
|
+
|
|
76
|
+
`--expect <screen_name>` is optional: pass it only when the user explicitly names
|
|
77
|
+
the account they want to act as, and it will abort if the connected cookie
|
|
78
|
+
belongs to someone else. Do not invent an expected handle — plain `whoami` is
|
|
79
|
+
the default.
|
|
77
80
|
|
|
78
81
|
On an actual auth error the cookie is expired — have the user reconnect at
|
|
79
82
|
<https://auth.acedata.cloud/user/connections>. A Cloudflare block is different:
|
|
80
|
-
reconnecting cookies does not fix it. Use
|
|
83
|
+
reconnecting cookies does not fix it. Use `whoami` for identity checks; other
|
|
81
84
|
blocked endpoints need `X_PROXY` or the official X API. Do **not** loop-retry.
|
|
82
85
|
|
|
83
86
|
## Write commands — GATED (dry-run unless trailing `--confirm`)
|
package/skills/x/scripts/x.py
CHANGED
|
@@ -19,7 +19,7 @@ breakage.
|
|
|
19
19
|
|
|
20
20
|
Examples:
|
|
21
21
|
python3 x.py whoami
|
|
22
|
-
|
|
22
|
+
python3 x.py whoami --expect SCREEN_NAME
|
|
23
23
|
python3 x.py search --query "python" --product Latest --limit 20
|
|
24
24
|
python3 x.py timeline --limit 20
|
|
25
25
|
python3 x.py user-tweets --user elonmusk --type Tweets --limit 20
|
|
@@ -107,7 +107,7 @@ def cloudflare_block_message(error: Exception) -> str | None:
|
|
|
107
107
|
ray = f" Ray ID: {ray_match.group(1)}." if ray_match else ""
|
|
108
108
|
return (
|
|
109
109
|
"X blocked this automated web-API request at Cloudflare; the login cookies may still be valid."
|
|
110
|
-
f"{ray} For identity checks, use `whoami
|
|
110
|
+
f"{ray} For identity checks, use `whoami`; for other blocked endpoints, "
|
|
111
111
|
"configure X_PROXY or use the official X API."
|
|
112
112
|
)
|
|
113
113
|
|
package/skills/yuque/SKILL.md
CHANGED
|
@@ -43,8 +43,8 @@ python3 "$SKILL_DIR/scripts/yuque.py" whoami
|
|
|
43
43
|
|
|
44
44
|
# List knowledge bases, then the documents in one.
|
|
45
45
|
python3 "$SKILL_DIR/scripts/yuque.py" repos
|
|
46
|
-
python3 "$SKILL_DIR/scripts/yuque.py" docs
|
|
47
|
-
python3 "$SKILL_DIR/scripts/yuque.py" doc
|
|
46
|
+
python3 "$SKILL_DIR/scripts/yuque.py" docs REPO_NAMESPACE --limit 20
|
|
47
|
+
python3 "$SKILL_DIR/scripts/yuque.py" doc REPO_NAMESPACE DOC_ID
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
## Create and update
|
|
@@ -55,18 +55,18 @@ by default and only publishes publicly with an explicit `--public`.
|
|
|
55
55
|
|
|
56
56
|
```bash
|
|
57
57
|
# First call is always a dry run and does not load credentials or call the API.
|
|
58
|
-
python3 "$SKILL_DIR/scripts/yuque.py" create
|
|
58
|
+
python3 "$SKILL_DIR/scripts/yuque.py" create REPO_NAMESPACE \
|
|
59
59
|
--title "标题" --content-file /tmp/article.md
|
|
60
60
|
|
|
61
61
|
# Create it privately after the user confirms.
|
|
62
|
-
python3 "$SKILL_DIR/scripts/yuque.py" create
|
|
62
|
+
python3 "$SKILL_DIR/scripts/yuque.py" create REPO_NAMESPACE \
|
|
63
63
|
--title "标题" --content-file /tmp/article.md --confirm
|
|
64
64
|
|
|
65
65
|
# Public publishing additionally requires --public.
|
|
66
|
-
python3 "$SKILL_DIR/scripts/yuque.py" create
|
|
66
|
+
python3 "$SKILL_DIR/scripts/yuque.py" create REPO_NAMESPACE \
|
|
67
67
|
--title "标题" --content-file /tmp/article.md --public --confirm
|
|
68
68
|
|
|
69
|
-
python3 "$SKILL_DIR/scripts/yuque.py" update
|
|
69
|
+
python3 "$SKILL_DIR/scripts/yuque.py" update REPO_NAMESPACE DOC_ID \
|
|
70
70
|
--title "新标题" --content-file /tmp/article.md --public --confirm
|
|
71
71
|
```
|
|
72
72
|
|
|
@@ -81,7 +81,7 @@ first if the user only wants part of it changed.
|
|
|
81
81
|
## Delete
|
|
82
82
|
|
|
83
83
|
```bash
|
|
84
|
-
python3 "$SKILL_DIR/scripts/yuque.py" delete
|
|
84
|
+
python3 "$SKILL_DIR/scripts/yuque.py" delete REPO_NAMESPACE DOC_ID --confirm
|
|
85
85
|
```
|
|
86
86
|
|
|
87
87
|
Use the real returned `doc_id` and URL. Do not retry a timed-out write
|
package/skills/zhihu/SKILL.md
CHANGED
|
@@ -138,7 +138,7 @@ python3 "$BLOG" question <question-id> # a question's info + whether I answe
|
|
|
138
138
|
```sh
|
|
139
139
|
ZDIR="$SKILL_DIR"; [ -f "$ZDIR/scripts/blog.py" ] || ZDIR=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/blog.py' 2>/dev/null | head -1 | sed 's#/scripts/blog.py##')
|
|
140
140
|
python3 "$ZDIR/scripts/blog.py" whoami
|
|
141
|
-
# → {"id": "...", "name": "
|
|
141
|
+
# → {"id": "...", "name": "<the connected display name>", "url_token": "<the connected handle>", ...}
|
|
142
142
|
```
|
|
143
143
|
|
|
144
144
|
On a `401`/`403` the cookie is expired — tell the user to reconnect at
|