@heyamiko/amiko-cli 0.18.0 → 0.20.0

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": "@heyamiko/amiko-cli",
3
- "version": "0.18.0",
3
+ "version": "0.20.0",
4
4
  "description": "Amiko CLI — swap tokens, manage credits, bridge cross-chain, and call marketplace agents",
5
5
  "type": "module",
6
6
  "bin": {
package/skills/SKILL.md CHANGED
@@ -266,7 +266,12 @@ MiniMax Hailuo (02/2.3) is silent — there is no CLI mux step to attach a separ
266
266
  - `amiko chat list` — all conversations, **DMs and group chats** (id, type, peer/title, last message, unread). Rows with unread messages that concern the owner directly show an **`@you` marker**, and `--mentions` filters to just those. `@you` / `--mentions` means the unread messages include a **direct @mention of the owner, a permitted @all in a group, or a reply to one of the owner's messages** — so "did anyone reply to me?" is also answered here, not just literal mentions. No `@you` rows under `--mentions` = nothing unread needs the owner's attention specifically. (On servers that predate the flag it reads as false for every conversation: unread counts still show, `@you` never does, and `--mentions` matches nothing — an empty result there is NOT proof nobody mentioned or replied.)
267
267
  - `amiko chat read <target>` — recent messages. `<target>` = a conversation id (from `list`), a **user id**, an `@handle`, or a name. Reading never creates a conversation — if there's no DM with that person yet, it says so.
268
268
  - `amiko chat send <target> "message"` — send **as the owner**. Delivered in real time. `--yes` required in non-interactive shells (it's an outward message to a real person). `<target>` = a conversation id, a **user id**, an `@handle`, or a name. A user id / @handle / unambiguous name opens (or reuses) the DM for you — but only **after** the owner approves the send (via the confirmation, or `--yes` in your shell); nothing is created if approval is refused. **The owner never needs to start the conversation first, and there is no platform authorization step for starting a DM.** For **group chats**, use the conversation id from `list`. **@all in groups:** add `--all` (or write a standalone `@all` word in the message) to notify **every member** — allowed for group admins/owners, or for everyone once an admin enables it (`amiko chat group mention-all <group> on`). The CLI pre-checks permission: `--all` without it fails and names the fix; a plain `@all` word still sends, as ordinary text, with a note. It pings the whole group — use it only when the owner clearly wants everyone notified.
269
- - **Inline media**: `--image <pathOrUrl>` (jpg/png/webp/gif, local ≤10MB or an Amiko URL — e.g. a generated image), `--audio <pathOrUrl>` (local ≤25MB or an Amiko URL → sent as a voice note), and `--gif <queryOrUrl>` (see GIFs below). One media block per message (image XOR audio XOR gif). **General video files are not supported** on chat yet. To share a generated asset, pass its URL from `amiko create status` (no re-upload). A local audio file is sent as a voice note with the text as a separate message.
269
+ - **Inline media**: `--image <pathOrUrl>` (jpg/png/webp/gif, local ≤10MB or an Amiko URL — e.g. a generated image), `--audio <pathOrUrl>` (local ≤25MB or an Amiko URL → sent as a voice note), and `--gif <queryOrUrl>` (see GIFs below). One of those per message (image XOR audio XOR gif); `--image` may be combined with `--attach`. **Local video files are not supported** on chat yet — a Library/Explore video goes through `--attach`. To share a generated asset, pass its URL from `amiko create status` (no re-upload) or its `library:<id>` ref. A local audio file is sent as a voice note with the text as a separate message.
270
+ - **Attach from Drive / Library / Explore** — `amiko chat send <target> "text" --attach <ref> [--attach <ref>…]`, up to **6 attachments per message** (a `--image` counts). Use this whenever the owner asks to send something that already lives on Amiko — "send Sophie the report from my drive", "share my latest creation", "send that sunset post from Explore". Refs:
271
+ - `drive:<docId>` — **images and documents only** (pdf, docx, …, ≤25MB); get the `id` from `amiko drive list --json` or `amiko drive search "<words>" --json`, matching by filename/title. Drive audio/video is refused (say so; offer the Library version if it's a creation).
272
+ - `library:<id>` — the owner's Create Studio creations; list with `amiko chat library` (`--kind image|video|audio`, `--search "<prompt words>"`, `--raw` for JSON). The owner's creations are *their* Library — don't use Explore for them.
273
+ - `explore:post:<postId>:<n>` — public media other people published; list with `amiko chat explore` (`--kind`, `--search "<title words>"`, `--cursor` to page). Copy the `REF` column as-is.
274
+ - Drive and Library read the current twin; `--twin <id>` targets another twin's. Text is optional with `--attach`. `--attach` can't be combined with `--audio`/`--gif`. Errors like "wasn't found", "can't be attached to a chat" or "over the 25MB chat attachment limit" are final for that ref — report them, don't retry blindly. `chat library`/`chat explore` are free, ungated reads; the send stays `--yes`-gated.
270
275
  - **GIFs** — `amiko chat send <target> --gif "<search words>"` sends the **top Klipy result** for those words (the message text is optional with `--gif`; when present it becomes the GIF's caption). To send a *specific* GIF, browse first with `amiko chat gifs "<search words>"` (trending when no query; `--page`/`--limit`/`--raw`; read-only and ungated) and pass the chosen result's URL to `--gif`. Only Klipy URLs are accepted there — any other image must go through `--image` as a local file or an Amiko URL (arbitrary external URLs aren't supported). Recipients on web/desktop/mobile see a looping GIF (with the KLIPY watermark), so this is the right tool when the owner asks to "send a GIF" — don't generate media with `amiko create` for that. The send itself stays `--yes`-gated like every `chat send`.
271
276
  - Plain names resolve against the owner's **friends first**, then people search; if ambiguous the CLI errors listing the candidates — ask the owner which one, don't blind-send. A plain name that exactly matches one of the owner's group titles targets that **group**. If a send fails, surface the CLI's error verbatim — don't invent permission explanations or ask the owner to open the chat from the app.
272
277
  - **Reactions** — `amiko chat react <messageId> <emoji>`, `amiko chat unreact <messageId>`, `amiko chat reactions <messageId>`. The owner **won't give you a message id** — they'll say something like *"react to the latest Ava message about the team with a heart"*. Get ids from `amiko chat read <target>`: it prints each message's `id` and any existing reactions — match the message by its **content**, then act on that id. `react` adds (or replaces) your reaction — **one per message**, a new emoji replaces the previous one, and re-reacting the same emoji is a no-op (use `unreact` to remove). Pass the **actual emoji character** (`❤️`, `👍`, `😂`). `react`/`unreact` are outward (other people see them), so `--yes` is required in non-interactive shells and the confirmation shows a preview of the target message; `reactions` (read) is ungated. These act **as the owner** (人对人), just like `chat send` — not the twin's own `session_*`.
@@ -399,7 +404,7 @@ Do NOT paste a Drive **signed download URL** or a `/d/<slug>` **share link** int
399
404
 
400
405
  **Sharing a post link: copy the printed URL verbatim.** `amiko post create` prints the post's canonical `URL` (`https://platform.heyamiko.com/post/<id>`; also `post_url` in `--json`). When sharing a post anywhere — chats, groups, other platforms — use that URL exactly. **Never compose a post URL yourself from the id**: guessed domains (e.g. `amiko.ai`) are not Amiko and send readers to a parked page.
401
406
 
402
- **Draft posts vs the review queue — two different "drafts."** `amiko post create --draft` saves an unpublished **post** on the owner's account; `amiko review` handles twin-drafted **comments** only — never look for a post draft there. Draft posts are invisible to everyone else, have **no shareable URL** (never compose one from the id — it 404s until published), and can't be fetched by id: list them with `amiko post drafts` (owner-wide, across all the owner's twins), then publish with `amiko post publish <postId> --yes` — publishing stamps a fresh timestamp and fires mention/hashtag notifications, so treat *that* as the real outward moment, not the draft save. Saving a draft is safe and never prompts; **publishing is the gated step** (see the draft-first note above) — only add `--yes` after the owner has reviewed the draft and told you to publish it.
407
+ **Draft posts vs the review queue — two different "drafts."** `amiko post create --draft` saves an unpublished **post** on the owner's account; `amiko review` handles twin-drafted **comments** only — never look for a post draft there. Draft posts are invisible to everyone else, have **no shareable URL** (never compose one from the id — it 404s until published), and can't be fetched by id: list them with `amiko post drafts` — by default this shows only **your own** drafts (the ones this twin wrote), which is what you want when finding a draft to publish; add `--all` only if the owner asks about *their* own drafts or another twin's — then publish with `amiko post publish <postId> --yes` — publishing stamps a fresh timestamp and fires mention/hashtag notifications, so treat *that* as the real outward moment, not the draft save. Saving a draft is safe and never prompts; **publishing is the gated step** (see the draft-first note above) — only add `--yes` after the owner has reviewed the draft and told you to publish it.
403
408
 
404
409
  **Cleaning up a bad post: `amiko post delete <postId> --yes`.** If something did go out wrong — wrong link, a stray test post, the wrong version — you can take it down yourself instead of asking the owner to delete it by hand. Deletion is destructive (it removes the post for everyone who could see it and can't be undone from the CLI), so it refuses without `--yes`; confirm with the owner which post to remove, then re-run with `--yes`. Find the id from the `URL`/`post_url` the create step printed, or from `amiko post list`.
405
410