@acedatacloud/skills 2026.713.0 → 2026.713.2

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/AGENTS.md CHANGED
@@ -29,6 +29,7 @@ Skills are located in the `skills/` directory (also mirrored to `.agents/skills/
29
29
  ### AI Chat & Tools
30
30
  - **ai-chat** — Unified LLM gateway — GPT, Claude, Gemini, Kimi, Grok (50+ models)
31
31
  - **google-search** — Search the web, images, news, maps, places, and videos via Google
32
+ - **tgstat** — Discover and analyze public Telegram channels/groups (no login; optional TGStat API Token)
32
33
  - **face-transform** — Face analysis, beautification, age/gender transform, swap, cartoon
33
34
  - **short-url** — Create and manage short URLs
34
35
  - **onepage-pdf** — Convert an HTML page into one tall single-page PDF (local; no API token; needs Python + pymupdf + Chrome/Edge)
package/README.md CHANGED
@@ -48,6 +48,7 @@ Compatible with **30+ AI coding agents** via the [agentskills.io](https://agents
48
48
  |-------|-------------|
49
49
  | [ai-chat](skills/ai-chat/) | Unified LLM gateway — GPT, Claude, Gemini, Kimi, Grok (50+ models) |
50
50
  | [google-search](skills/google-search/) | Search the web, images, news, maps, places, and videos via Google |
51
+ | [tgstat](skills/tgstat/) | Discover and analyze public Telegram channels/groups; no login required, optional TGStat API Token |
51
52
  | [face-transform](skills/face-transform/) | Face analysis, beautification, age/gender transform, swap, cartoon |
52
53
  | [short-url](skills/short-url/) | Create and manage short URLs |
53
54
  | [onepage-pdf](skills/onepage-pdf/) | Convert an HTML page into one tall single-page PDF — no pagination breaks (local, no token) |
@@ -75,6 +76,7 @@ These skills drive third-party connectors users wire up at [auth.acedata.cloud/u
75
76
  | [didi-ride](skills/didi-ride/) | Book DiDi rides, estimate fares, query/cancel orders, plan routes via the DiDi MCP | `didi` (BYOC) |
76
77
  | [wecom](skills/wecom/) | WeCom (企业微信) self-built app — contacts, app messages, WeDoc, schedules, meetings | `wecom` (BYOC) |
77
78
  | [tencent-docs](skills/tencent-docs/) | Create / read / list / search / manage Tencent Docs — docs, sheets, slides, mind maps, flowcharts | `tencentdocs` (BYOC) |
79
+ | [tgstat](skills/tgstat/) | Public Telegram source discovery, rankings, and audience research | `tgstat` (public; optional Token) |
78
80
 
79
81
  ## Prerequisites
80
82
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acedatacloud/skills",
3
- "version": "2026.713.0",
3
+ "version": "2026.713.2",
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",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: reddit
3
- description: Submit posts (link or text) to subreddits and read your Reddit identity / content via the Reddit API. Use when the user mentions Reddit, posting to a subreddit, submitting a link or self-post, or checking their Reddit profile / submissions.
3
+ description: Submit posts (link or text) to subreddits and read your Reddit identity / submissions using either official OAuth or your own Reddit login cookies. Use when the user mentions Reddit, posting to a subreddit, submitting a link or self-post, or checking their Reddit profile / submissions.
4
4
  when_to_use: |
5
5
  Trigger when the user wants to submit a post to a subreddit (link or
6
6
  self/text post), or read their own Reddit identity and submissions.
@@ -8,75 +8,88 @@ when_to_use: |
8
8
  / karma requirements — confirm the target subreddit, title and body
9
9
  before submitting.
10
10
  connections: [reddit]
11
- allowed_tools: [Bash]
11
+ allowed_tools: [Bash, publish_artifact]
12
12
  license: Apache-2.0
13
13
  metadata:
14
14
  author: acedatacloud
15
- version: "1.0"
15
+ version: "2.0"
16
16
  ---
17
17
 
18
- Call the **Reddit API** (OAuth endpoints) with `curl + jq`. The user's bearer
19
- token is in `$REDDIT_TOKEN`. **Every call MUST send a `User-Agent` header** or
20
- Reddit returns `429`. Use the OAuth host `https://oauth.reddit.com`.
18
+ # Reddit OAuth or login-cookie access
21
19
 
22
- ```bash
23
- UA="web:cloud.acedata.connectors:v1.0 (by /u/acedatacloud)"
24
- ```
20
+ The connector injects exactly one of these credentials:
25
21
 
26
- Errors are JSON; a submit returns `{"json":{"errors":[...], "data":{...}}}`
27
- if `errors` is non-empty, show them verbatim. `401` token expired, re-connect.
22
+ - `REDDIT_COOKIES`: JSON cookie array captured by the ACE browser extension.
23
+ It includes `reddit_session` and grants full account access. **Secret never
24
+ echo, print, log or return it.**
25
+ - `REDDIT_TOKEN`: official OAuth bearer token (`identity read submit`).
28
26
 
29
- **Always start by confirming identity:**
27
+ The helper automatically prefers Cookie when present and otherwise uses OAuth.
28
+ It sends Reddit's required descriptive User-Agent and never forwards cookies
29
+ outside `reddit.com`.
30
30
 
31
- ```bash
32
- curl -sS -H "Authorization: Bearer $REDDIT_TOKEN" -H "User-Agent: $UA" \
33
- "https://oauth.reddit.com/api/v1/me" | jq '{name, total_karma, link_karma}'
34
- ```
31
+ ## Script resolution
35
32
 
36
- ## Submit a post
37
-
38
- **Confirm the subreddit + title + body with the user first.** `sr` is the
39
- subreddit name WITHOUT the `r/` prefix.
40
-
41
- ```bash
42
- # Self (text) post: kind=self + text. Link post: kind=link + url.
43
- curl -sS -X POST "https://oauth.reddit.com/api/submit" \
44
- -H "Authorization: Bearer $REDDIT_TOKEN" -H "User-Agent: $UA" \
45
- --data-urlencode "sr=test" \
46
- --data-urlencode "kind=self" \
47
- --data-urlencode "title=My title" \
48
- --data-urlencode "text=My self-post body in markdown" \
49
- --data-urlencode "api_type=json" \
50
- | jq '.json | {errors, url: .data.url, id: .data.id}'
33
+ Bash calls do not share shell variables. Resolve the helper inside **every**
34
+ fenced Bash invocation before using it:
35
+
36
+ ```sh
37
+ R="${SKILL_DIR:-}/scripts/reddit.py"; [ -f "$R" ] || R=$(find /tmp -maxdepth 8 -path '*/skills/*/reddit/scripts/reddit.py' -print -quit 2>/dev/null)
38
+ [ -f "$R" ] || { echo "reddit script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
39
+ python3 "$R" whoami
51
40
  ```
52
41
 
53
- For a link post:
42
+ If authentication fails, ask the user to reconnect at
43
+ <https://auth.acedata.cloud/user/connections>. Do not loop-retry a blocked or
44
+ expired session.
45
+
46
+ ## Read
54
47
 
55
- ```bash
56
- curl -sS -X POST "https://oauth.reddit.com/api/submit" \
57
- -H "Authorization: Bearer $REDDIT_TOKEN" -H "User-Agent: $UA" \
58
- --data-urlencode "sr=test" --data-urlencode "kind=link" \
59
- --data-urlencode "title=My title" --data-urlencode "url=https://example.com" \
60
- --data-urlencode "api_type=json" | jq '.json'
48
+ ```sh
49
+ R="${SKILL_DIR:-}/scripts/reddit.py"; [ -f "$R" ] || R=$(find /tmp -maxdepth 8 -path '*/skills/*/reddit/scripts/reddit.py' -print -quit 2>/dev/null)
50
+ [ -f "$R" ] || { echo "reddit script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
51
+ python3 "$R" whoami
52
+ python3 "$R" submissions --limit 10
61
53
  ```
62
54
 
63
- ## Read my submissions
55
+ ## Submit a post — GATED
64
56
 
65
- ```bash
66
- curl -sS -H "Authorization: Bearer $REDDIT_TOKEN" -H "User-Agent: $UA" \
67
- "https://oauth.reddit.com/user/USERNAME/submitted?limit=10" \
68
- | jq '.data.children[] | .data | {title, subreddit, ups, num_comments, permalink}'
69
- ```
57
+ Posting is public. **Always show the subreddit, final title and final body/URL,
58
+ then obtain explicit confirmation.** Without a trailing `--confirm`, both write
59
+ commands are dry-runs and make no network request.
60
+
61
+ ```sh
62
+ R="${SKILL_DIR:-}/scripts/reddit.py"; [ -f "$R" ] || R=$(find /tmp -maxdepth 8 -path '*/skills/*/reddit/scripts/reddit.py' -print -quit 2>/dev/null)
63
+ [ -f "$R" ] || { echo "reddit script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
70
64
 
71
- ## Gotchas
65
+ # Text post: use a file for long Markdown.
66
+ python3 "$R" submit-text --subreddit test --title "My title" --text-file post.md
67
+ python3 "$R" submit-text --subreddit test --title "My title" --text-file post.md --confirm
68
+
69
+ # Link post.
70
+ python3 "$R" submit-link --subreddit test --title "My title" --url "https://example.com"
71
+ python3 "$R" submit-link --subreddit test --title "My title" --url "https://example.com" --confirm
72
+ ```
72
73
 
73
- - **User-Agent is mandatory** on every request omitting it → `429`.
74
- - Many subreddits gate posting on **account age / karma / flair**; a submit can
75
- return `errors` like `[["SUBREDDIT_NOTALLOWED", ...]]` — surface it and try
76
- `r/test` to validate the flow.
77
- - Respect rate limits: read the `X-Ratelimit-Remaining` response header; space
78
- out bulk submits.
79
- - Use `r/test` as a safe target when validating that the connection works.
74
+ `--confirm` is honored only when it is the final argument. A title or body that
75
+ contains the text `--confirm` can never trigger a write.
76
+
77
+ ## Safety and failure handling
78
+
79
+ - Never print `REDDIT_COOKIES`, `REDDIT_TOKEN`, `reddit_session` or the modhash.
80
+ - Do not vote, send private messages, evade bans, automate engagement, or
81
+ cross-post identical content. This skill intentionally exposes none of those
82
+ operations.
83
+ - Follow each subreddit's rules. Account age, karma and flair requirements can
84
+ reject a post; report the rejection without exposing Reddit's raw authenticated
85
+ response, which may contain reflected credential material.
86
+ - Do not retry a write automatically. A timeout may occur after Reddit accepted
87
+ it, and replaying could create a duplicate.
88
+ - Respect rate limits and never bulk-submit. Use `r/test` only for a deliberate
89
+ end-to-end validation.
90
+ - Cookie mode drives Reddit's first-party web JSON endpoints and may drift when
91
+ Reddit changes its site. Report unexpected HTML or route errors as upstream
92
+ drift instead of guessing another private endpoint.
80
93
 
81
94
 
82
95
  ## Record the output