@acedatacloud/skills 2026.703.12 → 2026.703.14

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.703.12",
3
+ "version": "2026.703.14",
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",
@@ -22,20 +22,33 @@ Privacy and Security → App Passwords**, NOT the account login password) and
22
22
  `$BLUESKY_SERVICE` (the PDS base URL, default `https://bsky.social`).
23
23
 
24
24
  Errors come back as JSON `{"error":"<name>","message":"<detail>"}` — show it
25
- verbatim. A `401 {"error":"AuthenticationRequired"}` on session creation means
26
- the handle or App Password is wrong/revoked the user must re-connect the
27
- Bluesky connector (or generate a fresh App Password).
25
+ verbatim. A `401 {"error":"AuthenticationRequired","message":"Invalid identifier
26
+ or password"}` on session creation means the identifier or App Password is
27
+ wrong/revoked. The **#1 cause is a bare handle**: the identifier must be the
28
+ FULL handle (`alice.bsky.social`), a DID, or the account email — a bare
29
+ `alice` will NOT resolve. Step 1 auto-appends `.bsky.social` to a bare handle
30
+ on the default PDS; if it still fails, the user must re-connect the Bluesky
31
+ connector with the full handle (or generate a fresh App Password).
28
32
 
29
33
  ## Step 1 — always create a session first
30
34
 
31
35
  Everything needs a short-lived `accessJwt` and your account `did`. Do this once
32
- per task and reuse the values:
36
+ per task and reuse the values. The identifier must be a full handle, DID or
37
+ email — normalize a bare username (no `.` / `@`) to `<name>.bsky.social` when
38
+ using the default PDS, otherwise `createSession` returns `AuthenticationRequired`:
33
39
 
34
40
  ```bash
35
41
  SVC="${BLUESKY_SERVICE:-https://bsky.social}"
42
+ ID="$BLUESKY_HANDLE"
43
+ # Bare username → full handle on the default bsky.social PDS. A dotted handle
44
+ # (custom domain), a DID (`did:...`) or an email are already valid — leave them.
45
+ case "$ID" in
46
+ *.* | *@* | did:*) : ;;
47
+ *) [ "$SVC" = "https://bsky.social" ] && ID="$ID.bsky.social" ;;
48
+ esac
36
49
  SESSION=$(curl -sS -X POST "$SVC/xrpc/com.atproto.server.createSession" \
37
50
  -H "Content-Type: application/json" \
38
- -d "$(jq -n --arg id "$BLUESKY_HANDLE" --arg pw "$BLUESKY_APP_PASSWORD" \
51
+ -d "$(jq -n --arg id "$ID" --arg pw "$BLUESKY_APP_PASSWORD" \
39
52
  '{identifier:$id, password:$pw}')")
40
53
  echo "$SESSION" | jq '{did, handle, active}'
41
54
  JWT=$(echo "$SESSION" | jq -r .accessJwt)
@@ -43,7 +56,9 @@ DID=$(echo "$SESSION" | jq -r .did)
43
56
  ```
44
57
 
45
58
  If `JWT` / `DID` are empty or `null`, print the raw `$SESSION` (it contains the
46
- error) and stop — do not continue to post.
59
+ error) and stop — do not continue to post. On `AuthenticationRequired`, tell the
60
+ user to reconnect the connector using their **full** handle (e.g.
61
+ `name.bsky.social`, not `name`) and a valid App Password.
47
62
 
48
63
  ## Post to Bluesky
49
64
 
@@ -64,8 +79,9 @@ curl -sS -X POST "$SVC/xrpc/com.atproto.repo.createRecord" \
64
79
  ```
65
80
 
66
81
  The returned `uri` looks like `at://did:plc:xxxx/app.bsky.feed.post/<rkey>`. The
67
- public web URL is `https://bsky.app/profile/$BLUESKY_HANDLE/post/<rkey>` where
68
- `<rkey>` is the last path segment of the `uri`.
82
+ public web URL is `https://bsky.app/profile/$ID/post/<rkey>` where `$ID` is the
83
+ normalized handle from Step 1 (or use the `did`) and `<rkey>` is the last path
84
+ segment of the `uri`.
69
85
 
70
86
  ### Clickable links, mentions and hashtags (facets)
71
87
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: nano-banana-image
3
- description: Generate and edit AI images with NanoBanana (Gemini-based) via AceDataCloud API. Use when creating images from text prompts or editing existing images with text instructions. Supports nano-banana, nano-banana-2, and nano-banana-pro models.
3
+ description: Generate and edit AI images with NanoBanana (Gemini-based) via AceDataCloud API. Use when creating images from text prompts or editing existing images with text instructions. Supports nano-banana, nano-banana-2, nano-banana-pro and their :official variants.
4
4
  license: Apache-2.0
5
5
  metadata:
6
6
  author: acedatacloud
@@ -31,6 +31,9 @@ curl -X POST https://api.acedata.cloud/nano-banana/images \
31
31
  | `nano-banana` | Standard image generation (default) |
32
32
  | `nano-banana-2` | Improved quality, second generation |
33
33
  | `nano-banana-pro` | Highest quality, most detailed output |
34
+ | `nano-banana:official` | Official channel variant of `nano-banana` |
35
+ | `nano-banana-2:official` | Official channel variant of `nano-banana-2` |
36
+ | `nano-banana-pro:official` | Official channel variant of `nano-banana-pro` |
34
37
 
35
38
  ## Workflows
36
39
 
@@ -66,7 +69,7 @@ POST /nano-banana/images
66
69
  | Parameter | Values | Description |
67
70
  |-----------|--------|-------------|
68
71
  | `action` | `"generate"`, `"edit"` | Operation mode |
69
- | `model` | `"nano-banana"`, `"nano-banana-2"`, `"nano-banana-pro"` | Model to use |
72
+ | `model` | `"nano-banana"`, `"nano-banana-2"`, `"nano-banana-pro"`, `"nano-banana:official"`, `"nano-banana-2:official"`, `"nano-banana-pro:official"` | Model to use |
70
73
  | `prompt` | string | Image description or editing instruction |
71
74
  | `image_urls` | array of strings | Source image URLs (required for edit action) |
72
75
  | `aspect_ratio` | `"1:1"`, `"3:2"`, `"2:3"`, `"16:9"`, `"9:16"`, `"4:3"`, `"3:4"` | Output aspect ratio |
@@ -78,6 +81,7 @@ POST /nano-banana/images
78
81
  - Editing does **NOT** require a mask — just describe the change in natural language
79
82
  - Editing uses the same `/nano-banana/images` endpoint with `action: "edit"` and `image_urls` array (not a separate `/edit` path)
80
83
  - `nano-banana-2` is the second-generation model; `nano-banana-pro` offers the highest quality
84
+ - `:official` variants (e.g., `nano-banana:official`) route through the official channel
81
85
  - Task polling uses `id` (not `task_id`) in the `/nano-banana/tasks` request body
82
86
  - Aspect ratio uses colon notation (e.g., `"16:9"`) not pixel dimensions
83
87
  - The Gemini-based model excels at understanding complex, conversational editing instructions