@acedatacloud/skills 2026.705.1 → 2026.705.3

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acedatacloud/skills",
3
- "version": "2026.705.1",
3
+ "version": "2026.705.3",
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",
@@ -62,7 +62,10 @@ The skill ships [`scripts/acedatacloud.py`](scripts/acedatacloud.py) — a self-
62
62
  CLI (stdlib only) for the most common operations.
63
63
 
64
64
  ```bash
65
- ADC=$SKILL_DIR/scripts/acedatacloud.py
65
+ # $SKILL_DIR can point at another skill loaded this turn — anchor on our own
66
+ # script (re-run this at the top of every fresh-shell Bash block).
67
+ ADC="$SKILL_DIR/scripts/acedatacloud.py"; [ -f "$ADC" ] || ADC=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/acedatacloud.py' 2>/dev/null | head -1)
68
+ [ -f "$ADC" ] || { echo "acedatacloud script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
66
69
 
67
70
  # Read
68
71
  python3 $ADC balance # remaining credits per subscription
@@ -34,11 +34,14 @@ The connector injects the cookie jar as an env var:
34
34
  The skill ships [`scripts/bilibili.py`](scripts/bilibili.py) — self-contained, stdlib only.
35
35
 
36
36
  ```sh
37
- BILI=$SKILL_DIR/scripts/bilibili.py
38
- python3 $BILI whoami # who is logged in (mid, name)
39
- python3 $BILI articles --limit 20 # my 专栏 articles + stats
40
- python3 $BILI article <cvid> # one article's stats (cv id)
41
- python3 $BILI drafts --limit 50 # list saved drafts (aid + title)
37
+ # $SKILL_DIR can point at another skill loaded this turn — anchor on our own
38
+ # script, and re-run this at the top of every Bash block (fresh shell each time).
39
+ BILI="$SKILL_DIR/scripts/bilibili.py"; [ -f "$BILI" ] || BILI=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/bilibili.py' 2>/dev/null | head -1)
40
+ [ -f "$BILI" ] || { echo "bilibili script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
41
+ python3 "$BILI" whoami # who is logged in (mid, name)
42
+ python3 "$BILI" articles --limit 20 # my 专栏 articles + stats
43
+ python3 "$BILI" article <cvid> # one article's stats (cv id)
44
+ python3 "$BILI" drafts --limit 50 # list saved drafts (aid + title)
42
45
  ```
43
46
 
44
47
  Stats come straight from Bilibili: `view` (阅读), `like` (点赞), `reply` (评论),
@@ -47,7 +50,8 @@ Stats come straight from Bilibili: `view` (阅读), `like` (点赞), `reply` (
47
50
  ## Verify the connection first
48
51
 
49
52
  ```sh
50
- python3 $BILI whoami
53
+ BILI="$SKILL_DIR/scripts/bilibili.py"; [ -f "$BILI" ] || BILI=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/bilibili.py' 2>/dev/null | head -1)
54
+ python3 "$BILI" whoami
51
55
  # → {"mid": 91207595, "name": "...", "level": 4}
52
56
  ```
53
57
 
@@ -61,9 +65,10 @@ trailing `--confirm` it dry-runs. `--confirm` is honored **only as the last
61
65
  argument**. Always show the dry-run, get an explicit "yes", then re-run.
62
66
 
63
67
  ```sh
64
- python3 $BILI publish --title "标题" --content-file a.html # dry-run
65
- python3 $BILI publish --title "标题" --content-file a.html --draft-only --confirm # save a draft
66
- python3 $BILI publish --title "标题" --content-file a.html --confirm # save draft + submit (publish)
68
+ BILI="$SKILL_DIR/scripts/bilibili.py"; [ -f "$BILI" ] || BILI=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/bilibili.py' 2>/dev/null | head -1)
69
+ python3 "$BILI" publish --title "标题" --content-file a.html # dry-run
70
+ python3 "$BILI" publish --title "标题" --content-file a.html --draft-only --confirm # save a draft
71
+ python3 "$BILI" publish --title "标题" --content-file a.html --confirm # save draft + submit (publish)
67
72
  ```
68
73
 
69
74
  - `--draft-only` saves a draft (no submit) — safe; finish/publish in the editor.
@@ -77,9 +82,10 @@ Bilibili caps 专栏 drafts at **999**; once full, saving a new draft fails with
77
82
  `code 37106 草稿数已达最大上限`. List drafts and delete the ones you don't need:
78
83
 
79
84
  ```sh
80
- python3 $BILI drafts --limit 50 # list (aid + title)
81
- python3 $BILI delete-draft <aid> <aid2> ... # dry-run (shows what would delete)
82
- python3 $BILI delete-draft <aid> <aid2> ... --confirm # PERMANENTLY delete those drafts
85
+ BILI="$SKILL_DIR/scripts/bilibili.py"; [ -f "$BILI" ] || BILI=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/bilibili.py' 2>/dev/null | head -1)
86
+ python3 "$BILI" drafts --limit 50 # list (aid + title)
87
+ python3 "$BILI" delete-draft <aid> <aid2> ... # dry-run (shows what would delete)
88
+ python3 "$BILI" delete-draft <aid> <aid2> ... --confirm # PERMANENTLY delete those drafts
83
89
  ```
84
90
 
85
91
  - `delete-draft` is **GATED** (dry-run unless trailing `--confirm`) and deletion
@@ -31,7 +31,10 @@ Three connector credentials are injected: `$BLUESKY_HANDLE`
31
31
  them from the env — never echo them.
32
32
 
33
33
  ```sh
34
- BSKY="$SKILL_DIR/scripts/bluesky.py"
34
+ # $SKILL_DIR can point at another skill loaded this turn — anchor on our own
35
+ # script (re-run this at the top of every fresh-shell Bash block below).
36
+ BSKY="$SKILL_DIR/scripts/bluesky.py"; [ -f "$BSKY" ] || BSKY=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/bluesky.py' 2>/dev/null | head -1)
37
+ [ -f "$BSKY" ] || { echo "bluesky script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
35
38
  python3 "$BSKY" whoami # verify the session → {did, handle, service}
36
39
  ```
37
40
 
@@ -36,10 +36,13 @@ The connector injects the cookie jar as an env var:
36
36
  The skill ships [`scripts/csdn.py`](scripts/csdn.py) — self-contained, stdlib only.
37
37
 
38
38
  ```sh
39
- CSDN=$SKILL_DIR/scripts/csdn.py
40
- python3 $CSDN whoami # who is logged in (+ total article count)
41
- python3 $CSDN articles --limit 20 # my published articles + stats
42
- python3 $CSDN article <article-id> # one article's stats
39
+ # $SKILL_DIR can point at another skill loaded this turn — anchor on our own
40
+ # script, and re-run this at the top of every Bash block (fresh shell each time).
41
+ CSDN="$SKILL_DIR/scripts/csdn.py"; [ -f "$CSDN" ] || CSDN=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/csdn.py' 2>/dev/null | head -1)
42
+ [ -f "$CSDN" ] || { echo "csdn script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
43
+ python3 "$CSDN" whoami # who is logged in (+ total article count)
44
+ python3 "$CSDN" articles --limit 20 # my published articles + stats
45
+ python3 "$CSDN" article <article-id> # one article's stats
43
46
  ```
44
47
 
45
48
  Stats come straight from CSDN: `view_count` (阅读), `digg_count` (点赞),
@@ -48,7 +51,8 @@ Stats come straight from CSDN: `view_count` (阅读), `digg_count` (点赞),
48
51
  ## Verify the connection first
49
52
 
50
53
  ```sh
51
- python3 $CSDN whoami
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
+ python3 "$CSDN" whoami
52
56
  # → {"username": "...", "nickname": "...", "articles_total": 1597}
53
57
  ```
54
58
 
@@ -63,9 +67,10 @@ argument**. Always show the dry-run, get an explicit "yes", then re-run with
63
67
  `--confirm` last.
64
68
 
65
69
  ```sh
66
- python3 $CSDN publish --title "标题" --content-file a.md # dry-run
67
- python3 $CSDN publish --title "标题" --content-file a.md --draft-only --confirm # private draft (status=2)
68
- python3 $CSDN publish --title "标题" --content-file a.md --tags "AI,Python" --confirm # PUBLIC, goes live
70
+ CSDN="$SKILL_DIR/scripts/csdn.py"; [ -f "$CSDN" ] || CSDN=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/csdn.py' 2>/dev/null | head -1)
71
+ python3 "$CSDN" publish --title "标题" --content-file a.md # dry-run
72
+ python3 "$CSDN" publish --title "标题" --content-file a.md --draft-only --confirm # private draft (status=2)
73
+ python3 "$CSDN" publish --title "标题" --content-file a.md --tags "AI,Python" --confirm # PUBLIC, goes live
69
74
  ```
70
75
 
71
76
  - `--draft-only` saves a private draft (CSDN `status=2`) — safe, nothing public.
@@ -34,10 +34,13 @@ If `DIDI_MCP_KEY` is missing, tell the user to connect the DiDi connector at
34
34
  ## CLI
35
35
 
36
36
  The skill ships a stdlib-only helper that speaks the MCP Streamable-HTTP
37
- protocol to DiDi. Point at it once:
37
+ protocol to DiDi. **Run this resolver at the top of every Bash block below** —
38
+ each Bash call is a fresh shell, and `$SKILL_DIR` points at the LAST skill loaded
39
+ this turn, so anchor on our own script:
38
40
 
39
41
  ```bash
40
- DIDI=$SKILL_DIR/scripts/didi.py
42
+ DIDI="$SKILL_DIR/scripts/didi.py"; [ -f "$DIDI" ] || DIDI=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/didi.py' 2>/dev/null | head -1)
43
+ [ -f "$DIDI" ] || { echo "didi-ride script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
41
44
  ```
42
45
 
43
46
  Two commands:
@@ -30,10 +30,13 @@ The connector injects the cookie jar as an env var:
30
30
  The skill ships [`scripts/juejin.py`](scripts/juejin.py) — self-contained, stdlib only.
31
31
 
32
32
  ```sh
33
- JJ=$SKILL_DIR/scripts/juejin.py
34
- python3 $JJ whoami # who is logged in (+ totals)
35
- python3 $JJ articles --limit 20 # my published articles + stats
36
- python3 $JJ article <article-id> # one article's stats
33
+ # $SKILL_DIR can point at another skill loaded this turn — anchor on our own
34
+ # script, and re-run this at the top of every Bash block (fresh shell each time).
35
+ JJ="$SKILL_DIR/scripts/juejin.py"; [ -f "$JJ" ] || JJ=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/juejin.py' 2>/dev/null | head -1)
36
+ [ -f "$JJ" ] || { echo "juejin script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
37
+ python3 "$JJ" whoami # who is logged in (+ totals)
38
+ python3 "$JJ" articles --limit 20 # my published articles + stats
39
+ python3 "$JJ" article <article-id> # one article's stats
37
40
  ```
38
41
 
39
42
  Stats come straight from 掘金: `view_count` (阅读), `digg_count` (点赞),
@@ -42,7 +45,8 @@ Stats come straight from 掘金: `view_count` (阅读), `digg_count` (点赞),
42
45
  ## Verify the connection first
43
46
 
44
47
  ```sh
45
- python3 $JJ whoami
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
+ python3 "$JJ" whoami
46
50
  # → {"user_id": "...", "name": "...", "post_article_count": 336}
47
51
  ```
48
52
 
@@ -56,9 +60,10 @@ trailing `--confirm` it dry-runs. `--confirm` is honored **only as the last
56
60
  argument**. Always show the dry-run, get an explicit "yes", then re-run.
57
61
 
58
62
  ```sh
59
- python3 $JJ publish --title "标题" --content-file a.md # dry-run
60
- python3 $JJ publish --title "标题" --content-file a.md --draft-only --confirm # private draft
61
- python3 $JJ publish --title "标题" --content-file a.md \
63
+ JJ="$SKILL_DIR/scripts/juejin.py"; [ -f "$JJ" ] || JJ=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/juejin.py' 2>/dev/null | head -1)
64
+ python3 "$JJ" publish --title "标题" --content-file a.md # dry-run
65
+ python3 "$JJ" publish --title "标题" --content-file a.md --draft-only --confirm # private draft
66
+ python3 "$JJ" publish --title "标题" --content-file a.md \
62
67
  --category-id 6809637769959178254 --tag-ids 6809640407484334093 --confirm # PUBLIC
63
68
  ```
64
69
 
@@ -34,16 +34,20 @@ The connector injects the cookie jar as an env var:
34
34
  The skill ships [`scripts/medium.py`](scripts/medium.py) — self-contained, stdlib only.
35
35
 
36
36
  ```sh
37
- MED=$SKILL_DIR/scripts/medium.py
38
- python3 $MED whoami # who is logged in
39
- python3 $MED articles --limit 20 # my posts + clap/response stats
40
- python3 $MED article <post-id> # one post's details
37
+ # $SKILL_DIR can point at another skill loaded this turn — anchor on our own
38
+ # script, and re-run this at the top of every Bash block (fresh shell each time).
39
+ MED="$SKILL_DIR/scripts/medium.py"; [ -f "$MED" ] || MED=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/medium.py' 2>/dev/null | head -1)
40
+ [ -f "$MED" ] || { echo "medium script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
41
+ python3 "$MED" whoami # who is logged in
42
+ python3 "$MED" articles --limit 20 # my posts + clap/response stats
43
+ python3 "$MED" article <post-id> # one post's details
41
44
  ```
42
45
 
43
46
  ## Verify the connection first
44
47
 
45
48
  ```sh
46
- python3 $MED whoami
49
+ MED="$SKILL_DIR/scripts/medium.py"; [ -f "$MED" ] || MED=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/medium.py' 2>/dev/null | head -1)
50
+ python3 "$MED" whoami
47
51
  # → {"user_id": "...", "name": "...", "username": "..."}
48
52
  ```
49
53
 
@@ -62,9 +66,10 @@ Without a trailing `--confirm` it dry-runs. `--confirm` is honored **only as the
62
66
  last argument**. Always show the dry-run, get an explicit "yes", then re-run.
63
67
 
64
68
  ```sh
65
- python3 $MED publish --title "Title" --content-file a.md # dry-run
66
- python3 $MED publish --title "Title" --content-file a.md --draft-only --confirm # private draft
67
- python3 $MED publish --title "Title" --content-file a.md --confirm # PUBLIC story
69
+ MED="$SKILL_DIR/scripts/medium.py"; [ -f "$MED" ] || MED=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/medium.py' 2>/dev/null | head -1)
70
+ python3 "$MED" publish --title "Title" --content-file a.md # dry-run
71
+ python3 "$MED" publish --title "Title" --content-file a.md --draft-only --confirm # private draft
72
+ python3 "$MED" publish --title "Title" --content-file a.md --confirm # PUBLIC story
68
73
  ```
69
74
 
70
75
  Publishing is Medium's multi-step editor flow (new-story → write deltas →
@@ -37,10 +37,13 @@ after the user explicitly approves the exact target and content.
37
37
 
38
38
  ## CLI
39
39
 
40
- The skill ships a stdlib-only helper:
40
+ The skill ships a stdlib-only helper. **Run this resolver at the top of every
41
+ Bash block below** — each Bash call is a fresh shell, and `$SKILL_DIR` points at
42
+ the LAST skill loaded this turn, so anchor on our own script:
41
43
 
42
44
  ```bash
43
- WX=$SKILL_DIR/scripts/personal_wechat.py
45
+ WX="$SKILL_DIR/scripts/personal_wechat.py"; [ -f "$WX" ] || WX=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/personal_wechat.py' 2>/dev/null | head -1)
46
+ [ -f "$WX" ] || { echo "personal-wechat script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
44
47
  ```
45
48
 
46
49
  ## Verify Connection First
@@ -34,15 +34,19 @@ The connector injects the cookie jar as an env var:
34
34
  The skill ships [`scripts/substack.py`](scripts/substack.py) — self-contained, stdlib only.
35
35
 
36
36
  ```sh
37
- SUB=$SKILL_DIR/scripts/substack.py
38
- python3 $SUB whoami # who is logged in + primary publication
39
- python3 $SUB articles --limit 20 # my published posts + stats
37
+ # $SKILL_DIR can point at another skill loaded this turn — anchor on our own
38
+ # script, and re-run this at the top of every Bash block (fresh shell each time).
39
+ SUB="$SKILL_DIR/scripts/substack.py"; [ -f "$SUB" ] || SUB=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/substack.py' 2>/dev/null | head -1)
40
+ [ -f "$SUB" ] || { echo "substack script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
41
+ python3 "$SUB" whoami # who is logged in + primary publication
42
+ python3 "$SUB" articles --limit 20 # my published posts + stats
40
43
  ```
41
44
 
42
45
  ## Verify the connection first
43
46
 
44
47
  ```sh
45
- python3 $SUB whoami
48
+ SUB="$SKILL_DIR/scripts/substack.py"; [ -f "$SUB" ] || SUB=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/substack.py' 2>/dev/null | head -1)
49
+ python3 "$SUB" whoami
46
50
  # → {"user_id": ..., "name": "...", "handle": "...", "publication": "...", "publication_url": "https://<sub>.substack.com"}
47
51
  ```
48
52
 
@@ -61,17 +65,18 @@ Without a trailing `--confirm` it dry-runs. `--confirm` is honored **only as the
61
65
  last argument**. Always show the dry-run, get an explicit "yes", then re-run.
62
66
 
63
67
  ```sh
68
+ SUB="$SKILL_DIR/scripts/substack.py"; [ -f "$SUB" ] || SUB=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/substack.py' 2>/dev/null | head -1)
64
69
  # dry-run (shows the plan, writes nothing)
65
- python3 $SUB publish --title "Title" --content-file post.md
70
+ python3 "$SUB" publish --title "Title" --content-file post.md
66
71
 
67
72
  # private draft (visible only in the user's dashboard)
68
- python3 $SUB publish --title "Title" --content-file post.md --draft-only --confirm
73
+ python3 "$SUB" publish --title "Title" --content-file post.md --draft-only --confirm
69
74
 
70
75
  # go LIVE on the web (does NOT email subscribers)
71
- python3 $SUB publish --title "Title" --content-file post.md --confirm
76
+ python3 "$SUB" publish --title "Title" --content-file post.md --confirm
72
77
 
73
78
  # go LIVE and email subscribers (use only when the user explicitly asks)
74
- python3 $SUB publish --title "Title" --content-file post.md --send-email --confirm
79
+ python3 "$SUB" publish --title "Title" --content-file post.md --send-email --confirm
75
80
  ```
76
81
 
77
82
  - `--draft-only` stops at a draft — **default to this** unless the user asked to
@@ -34,7 +34,10 @@ The skill ships [`scripts/tg.py`](scripts/tg.py) — self-contained (the only th
34
34
  to re-create per turn, so a multi-step flow (dry-run → confirm) can't lose the helper between calls:
35
35
 
36
36
  ```sh
37
- TG="$SKILL_DIR/scripts/tg.py"
37
+ # $SKILL_DIR can point at another skill loaded this turn — anchor on our own
38
+ # script (re-run this at the top of every fresh-shell Bash block below).
39
+ TG="$SKILL_DIR/scripts/tg.py"; [ -f "$TG" ] || TG=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/tg.py' 2>/dev/null | head -1)
40
+ [ -f "$TG" ] || { echo "telegram script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
38
41
  python3 "$TG" whoami
39
42
  ```
40
43
 
@@ -26,7 +26,10 @@ Search and run CQL / SQL analytics over Tencent Cloud CLS log topics.
26
26
  The skill ships [`scripts/cls.py`](scripts/cls.py) — a self-contained CLI for the most common operations.
27
27
 
28
28
  ```bash
29
- CLS=$SKILL_DIR/scripts/cls.py
29
+ # $SKILL_DIR can point at another skill loaded this turn — anchor on our own
30
+ # script (re-run this at the top of every fresh-shell Bash block).
31
+ CLS="$SKILL_DIR/scripts/cls.py"; [ -f "$CLS" ] || CLS=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/cls.py' 2>/dev/null | head -1)
32
+ [ -f "$CLS" ] || { echo "tencentcloud-cls script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
30
33
 
31
34
  python3 $CLS topics # list topics
32
35
  python3 $CLS search --topic <topic-id> --query 'level:ERROR' --time 1h
@@ -27,23 +27,26 @@ CRUD on CLS alarm policies, notice groups, mute shields, and the alarm execution
27
27
  The skill ships [`scripts/cls_alarm.py`](scripts/cls_alarm.py) — wraps every alarm / notice / shield operation as a subcommand.
28
28
 
29
29
  ```bash
30
- A=$SKILL_DIR/scripts/cls_alarm.py
31
-
32
- python3 $A alarms # list policies
33
- python3 $A alarm <alarm-id> # full detail
34
- python3 $A alarm-disable <alarm-id> # quick mute (Status=false)
35
- python3 $A alarm-enable <alarm-id>
36
- python3 $A alarm-create --json /tmp/alarm.json --dry-run
37
- python3 $A alarm-modify <alarm-id> --condition '$1.cnt > 20'
38
- python3 $A alarm-delete <alarm-id> --yes # destructive
39
-
40
- python3 $A notices # notice groups
41
- python3 $A notice <notice-id>
42
-
43
- python3 $A shields # mute rules
44
- python3 $A shield-create --notice-id <notice-id> --start $(date +%s) --end $(date -v+2H +%s) --type 1 --reason "deploy"
45
-
46
- python3 $A alarm-log --time 6h # firing history
30
+ # $SKILL_DIR can point at another skill loaded this turn — anchor on our own
31
+ # script (re-run this at the top of every fresh-shell Bash block).
32
+ CLSA="$SKILL_DIR/scripts/cls_alarm.py"; [ -f "$CLSA" ] || CLSA=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/cls_alarm.py' 2>/dev/null | head -1)
33
+ [ -f "$CLSA" ] || { echo "tencentcloud-cls-alarm script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
34
+
35
+ python3 "$CLSA" alarms # list policies
36
+ python3 "$CLSA" alarm <alarm-id> # full detail
37
+ python3 "$CLSA" alarm-disable <alarm-id> # quick mute (Status=false)
38
+ python3 "$CLSA" alarm-enable <alarm-id>
39
+ python3 "$CLSA" alarm-create --json /tmp/alarm.json --dry-run
40
+ python3 "$CLSA" alarm-modify <alarm-id> --condition '$1.cnt > 20'
41
+ python3 "$CLSA" alarm-delete <alarm-id> --yes # destructive
42
+
43
+ python3 "$CLSA" notices # notice groups
44
+ python3 "$CLSA" notice <notice-id>
45
+
46
+ python3 "$CLSA" shields # mute rules
47
+ python3 "$CLSA" shield-create --notice-id <notice-id> --start $(date +%s) --end $(date -v+2H +%s) --type 1 --reason "deploy"
48
+
49
+ python3 "$CLSA" alarm-log --time 6h # firing history
47
50
  ```
48
51
 
49
52
  For the rare schema field the CLI doesn't surface, fall through to the raw SDK examples below.
@@ -24,7 +24,10 @@ Manage Tencent Cloud COS buckets and objects via the official `cos-python-sdk-v5
24
24
  The skill ships [`scripts/cos.py`](scripts/cos.py) — a self-contained CLI that wraps every COS operation below. **Prefer this over hand-rolled SDK calls** when the user's request maps cleanly onto one of its subcommands; it's what the maintained code paths exercise.
25
25
 
26
26
  ```bash
27
- COS=$SKILL_DIR/scripts/cos.py
27
+ # $SKILL_DIR can point at another skill loaded this turn — anchor on our own
28
+ # script (re-run this at the top of every fresh-shell Bash block).
29
+ COS="$SKILL_DIR/scripts/cos.py"; [ -f "$COS" ] || COS=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/cos.py' 2>/dev/null | head -1)
30
+ [ -f "$COS" ] || { echo "tencentcloud-cos script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
28
31
 
29
32
  python3 $COS buckets # list all buckets
30
33
  python3 $COS ls mydata-1250000000 --prefix images/ # list objects
@@ -26,7 +26,10 @@ Manage DNS records via the DNSPod API.
26
26
  The skill ships [`scripts/dns.py`](scripts/dns.py) — wraps every common DNSPod v3 operation.
27
27
 
28
28
  ```bash
29
- DNS=$SKILL_DIR/scripts/dns.py
29
+ # $SKILL_DIR can point at another skill loaded this turn — anchor on our own
30
+ # script (re-run this at the top of every fresh-shell Bash block).
31
+ DNS="$SKILL_DIR/scripts/dns.py"; [ -f "$DNS" ] || DNS=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/dns.py' 2>/dev/null | head -1)
32
+ [ -f "$DNS" ] || { echo "tencentcloud-dns script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
30
33
 
31
34
  python3 $DNS domains # list domains
32
35
  python3 $DNS list example.com # records on one domain
@@ -25,7 +25,10 @@ Manage EdgeOne zones — purge cache, prefetch URLs, manage DNS records on the z
25
25
  The skill ships [`scripts/edgeone.py`](scripts/edgeone.py) — wraps zone discovery, purge / prefetch, task tracking, EdgeOne DNS records, and WAF inspection.
26
26
 
27
27
  ```bash
28
- EO=$SKILL_DIR/scripts/edgeone.py
28
+ # $SKILL_DIR can point at another skill loaded this turn — anchor on our own
29
+ # script (re-run this at the top of every fresh-shell Bash block).
30
+ EO="$SKILL_DIR/scripts/edgeone.py"; [ -f "$EO" ] || EO=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/edgeone.py' 2>/dev/null | head -1)
31
+ [ -f "$EO" ] || { echo "tencentcloud-edgeone script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
29
32
 
30
33
  python3 $EO zones # list zones
31
34
  python3 $EO zone zone-xxxxxxxx # one zone's details
@@ -25,7 +25,10 @@ Manage TKE clusters and the workloads inside them.
25
25
  The skill ships [`scripts/tke.py`](scripts/tke.py) — wraps cluster discovery, kubeconfig retrieval, and the most common in-cluster operations.
26
26
 
27
27
  ```bash
28
- TKE=$SKILL_DIR/scripts/tke.py
28
+ # $SKILL_DIR can point at another skill loaded this turn — anchor on our own
29
+ # script (re-run this at the top of every fresh-shell Bash block).
30
+ TKE="$SKILL_DIR/scripts/tke.py"; [ -f "$TKE" ] || TKE=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/tke.py' 2>/dev/null | head -1)
31
+ [ -f "$TKE" ] || { echo "tencentcloud-tke script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
29
32
 
30
33
  python3 $TKE clusters # list clusters
31
34
  python3 $TKE cluster cls-xxxxxxxx # one cluster's details
@@ -37,9 +37,12 @@ The connector injects the cookie jar as an env var:
37
37
  The skill ships [`scripts/weibo.py`](scripts/weibo.py) — self-contained, stdlib only.
38
38
 
39
39
  ```sh
40
- WB=$SKILL_DIR/scripts/weibo.py
41
- python3 $WB whoami # who is logged in (+ counts)
42
- python3 $WB posts --limit 20 # my recent 微博 + engagement
40
+ # $SKILL_DIR can point at another skill loaded this turn — anchor on our own
41
+ # script, and re-run this at the top of every Bash block (fresh shell each time).
42
+ WB="$SKILL_DIR/scripts/weibo.py"; [ -f "$WB" ] || WB=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/weibo.py' 2>/dev/null | head -1)
43
+ [ -f "$WB" ] || { echo "weibo script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
44
+ python3 "$WB" whoami # who is logged in (+ counts)
45
+ python3 "$WB" posts --limit 20 # my recent 微博 + engagement
43
46
  ```
44
47
 
45
48
  Engagement comes straight from 微博: `reposts_count` (转发), `comments_count`
@@ -48,7 +51,8 @@ Engagement comes straight from 微博: `reposts_count` (转发), `comments_count
48
51
  ## Verify the connection first
49
52
 
50
53
  ```sh
51
- python3 $WB whoami
54
+ WB="$SKILL_DIR/scripts/weibo.py"; [ -f "$WB" ] || WB=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/weibo.py' 2>/dev/null | head -1)
55
+ python3 "$WB" whoami
52
56
  # → {"uid": "...", "name": "...", "statuses_count": ...}
53
57
  ```
54
58
 
@@ -62,8 +66,9 @@ Without a trailing `--confirm` it dry-runs. `--confirm` is honored **only as the
62
66
  last argument**. Always show the dry-run, get an explicit "yes", then re-run.
63
67
 
64
68
  ```sh
65
- python3 $WB post --content "你好,这是一条微博" # dry-run
66
- python3 $WB post --content "你好,这是一条微博" --confirm # PUBLIC 微博 (immediate)
69
+ WB="$SKILL_DIR/scripts/weibo.py"; [ -f "$WB" ] || WB=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/weibo.py' 2>/dev/null | head -1)
70
+ python3 "$WB" post --content "你好,这是一条微博" # dry-run
71
+ python3 "$WB" post --content "你好,这是一条微博" --confirm # PUBLIC 微博 (immediate)
67
72
  ```
68
73
 
69
74
  - There is **no draft and no private mode** on 微博 — a confirmed post is
package/skills/x/SKILL.md CHANGED
@@ -38,8 +38,11 @@ skill), then call the shipped CLI:
38
38
 
39
39
  ```sh
40
40
  python3 -c "import twikit" 2>/dev/null || pip install --user --quiet twikit 2>/dev/null || true
41
- X=$SKILL_DIR/scripts/x.py
42
- python3 $X whoami # who is logged in
41
+ # $SKILL_DIR can point at another skill loaded this turn — anchor on our own
42
+ # script (re-run this setup at the top of every fresh-shell Bash block below).
43
+ X="$SKILL_DIR/scripts/x.py"; [ -f "$X" ] || X=$(find /tmp -maxdepth 8 -path '*/skills/*/scripts/x.py' 2>/dev/null | head -1)
44
+ [ -f "$X" ] || { echo "x script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
45
+ python3 "$X" whoami # who is logged in
43
46
  ```
44
47
 
45
48
  ## Read commands (run directly)