@heyamiko/amiko-cli 0.14.0-beta.6 → 0.14.0-beta.7
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/README.md +4 -0
- package/dist/index.js +25 -0
- package/package.json +1 -1
- package/skills/SKILL.md +5 -3
package/README.md
CHANGED
|
@@ -562,6 +562,10 @@ npm publish
|
|
|
562
562
|
|
|
563
563
|
## Changelog
|
|
564
564
|
|
|
565
|
+
### 0.14.0-beta.7
|
|
566
|
+
|
|
567
|
+
- **`amiko chat group invite <group>` — share a group's invite/join link + QR.** New read-only subcommand that fetches `GET /api/conversations/{id}/invite` (twin token) and prints the join link plus a scannable QR image URL. Admins-only: SKILL.md instructs the agent to confirm the asker holds `admin`/`owner` (via `amiko chat group info`) before sharing, and the endpoint is admin-gated server-side (403 → admin tip). Fails loudly if the response is missing its link/QR instead of printing a placeholder. Requires the companion amiko-web change (adds `qrUrl` to the invite response + a public `GET /api/conversations/join/[token]/qr` PNG route).
|
|
568
|
+
|
|
565
569
|
### 0.14.0-beta.6
|
|
566
570
|
|
|
567
571
|
- **`amiko chat send`/`read` accept user ids — DMs no longer require an existing conversation.** Target resolution is rebuilt: a cuid target is verified as a conversation first and, on 404, retried as a user id (user ids and conversation ids are both cuids — previously a user id went straight to the messages route and died with "Conversation not found"). Plain names now resolve **friends-first** (then people search) via the shared `resolveMembers`, with ambiguity reported as a candidate list. Resolution is fully read-only: for `send`, a missing DM is found-or-created only **after** the `--yes`/approval gate (no more empty conversations from an unapproved send), and `read` never creates a DM at all — it errors if none exists. The confirmation summary now shows the **resolved** recipient (`Send to DM with Mars (@mars): …`) so a wrong-person resolution is visible before anything goes out. Unknown cuids are rejected before any conversation is created (the backend accepts dangling participant ids silently), and a 403 on a real conversation no longer falls through to DM creation.
|
package/dist/index.js
CHANGED
|
@@ -27186,6 +27186,31 @@ function registerChatGroupCommand(group) {
|
|
|
27186
27186
|
];
|
|
27187
27187
|
console.log(table(rows));
|
|
27188
27188
|
});
|
|
27189
|
+
group.command("invite <group>").description("Show a group's invite/join link + QR image URL (admins only)").option("--raw", "Output raw JSON").action(async (target, opts) => {
|
|
27190
|
+
const auth = authOrExit();
|
|
27191
|
+
const conv = await resolveGroupOrExit(auth, target);
|
|
27192
|
+
let data;
|
|
27193
|
+
try {
|
|
27194
|
+
data = await amikoWebFetch(auth, `/api/conversations/${encodeURIComponent(conv.id)}/invite`, { timeoutMs: 20000 });
|
|
27195
|
+
} catch (e5) {
|
|
27196
|
+
if (statusOf2(e5) === 403) {
|
|
27197
|
+
console.error(error(`Can't view the invite link. ${ADMIN_TIP}`));
|
|
27198
|
+
process.exit(1);
|
|
27199
|
+
}
|
|
27200
|
+
exitWithError(e5, "Failed to load invite link");
|
|
27201
|
+
}
|
|
27202
|
+
if (!data.url || !data.qrUrl) {
|
|
27203
|
+
exitWithError(null, "The invite link response was missing its link or QR URL — nothing to share.");
|
|
27204
|
+
}
|
|
27205
|
+
if (opts.raw) {
|
|
27206
|
+
console.log(JSON.stringify(data, null, 2));
|
|
27207
|
+
return;
|
|
27208
|
+
}
|
|
27209
|
+
console.log(heading(conv.title ?? "(untitled group)"));
|
|
27210
|
+
console.log(label("Invite link", data.url));
|
|
27211
|
+
console.log(label("QR image", data.qrUrl));
|
|
27212
|
+
console.log(dim("Share with group admins only — anyone who opens it can join."));
|
|
27213
|
+
});
|
|
27189
27214
|
group.command("rename <group> <newTitle>").description("Rename a group (admins only)").option("--yes", "Skip the confirmation (required in non-interactive shells)").option("--raw", "Output raw JSON").action(async (target, newTitle, opts) => {
|
|
27190
27215
|
const auth = authOrExit();
|
|
27191
27216
|
const conv = await resolveGroupOrExit(auth, target);
|
package/package.json
CHANGED
package/skills/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: amiko-cli
|
|
3
|
-
description: The Amiko CLI lets an agent act on the Amiko platform end-to-end — read platform notifications (friend requests, mentions, system alerts), search and write **cross-agent memories** about the owner (what other agents already know — preferences, decisions, facts), manage Solana/Base wallets (create, swap via Jupiter, bridge USDC via Across, transfer tokens to external addresses), top up and spend credits, generate media — images, video, speech, music, and SFX — via Create Studio (`amiko create`, async and charged on success), call paid MPP marketplace services (X/Twitter search, Amazon product search, TTS/STT, AI chat), manage the twin's identity and drive (files, folders, RAG), voice and avatar, and social graph (friends, posts, comments, feed). Auth is automatic when run from the agent's workspace folder; payments are platform-custodied (no keys on disk). The owner's DMs and group chats are `amiko chat` (list / read / send / create + manage group chats AS the owner, 人对人); the agent's OWN sessions are the openhermit gateway's session_list / session_send (AS the agent) — different identities, different surfaces. Use this skill whenever the user asks about their Amiko notifications, chats/DMs, drive, memory, social graph, wallets, credits, or marketplace services — anything that would show up in their Amiko account or cost AMIKO/credits.
|
|
3
|
+
description: The Amiko CLI lets an agent act on the Amiko platform end-to-end — read platform notifications (friend requests, mentions, system alerts), search and write **cross-agent memories** about the owner (what other agents already know — preferences, decisions, facts), manage Solana/Base wallets (create, swap via Jupiter, bridge USDC via Across, transfer tokens to external addresses), top up and spend credits, generate media — images, video, speech, music, and SFX — via Create Studio (`amiko create`, async and charged on success), call paid MPP marketplace services (X/Twitter search, Amazon product search, TTS/STT, AI chat), manage the twin's identity and drive (files, folders, RAG), voice and avatar, and social graph (friends, posts, comments, feed). Auth is automatic when run from the agent's workspace folder; payments are platform-custodied (no keys on disk). The owner's DMs and group chats are `amiko chat` (list / read / send / create + manage group chats AS the owner, including sharing a group's invite/join link + QR, 人对人); the agent's OWN sessions are the openhermit gateway's session_list / session_send (AS the agent) — different identities, different surfaces. Use this skill whenever the user asks about their Amiko notifications, chats/DMs, drive, memory, social graph, wallets, credits, or marketplace services — anything that would show up in their Amiko account or cost AMIKO/credits.
|
|
4
4
|
homepage: https://platform.heyamiko.com
|
|
5
5
|
metadata: {"openclaw":{"emoji":"🤖","requires":{"bins":["node"]}}}
|
|
6
6
|
---
|
|
@@ -32,6 +32,7 @@ Call your shell tool (your runtime calls it `bash`, `shell`, `run`, or similar)
|
|
|
32
32
|
| "find files about Q1 revenue" | shell → `amiko drive search "Q1 revenue"` |
|
|
33
33
|
| "what comments are on my post?" | shell → `amiko post comments --id <postId>` |
|
|
34
34
|
| "search memory for X" | shell → `amiko memory search "X"` |
|
|
35
|
+
| "share the group's invite link" (asked by an admin) | shell → `amiko chat group info "<group>"` (confirm they're admin) → `amiko chat group invite "<group>"` |
|
|
35
36
|
| "what can amiko do?" | shell → `amiko --help` |
|
|
36
37
|
|
|
37
38
|
The CLI is installed globally and is pre-authenticated when you're inside your workspace folder. Never suggest `amiko login` or `amiko connect` — they don't exist.
|
|
@@ -131,14 +132,15 @@ MiniMax Hailuo is silent — there is no CLI mux step to attach a separate music
|
|
|
131
132
|
|
|
132
133
|
### Group chats — `amiko chat group`
|
|
133
134
|
|
|
134
|
-
Create and manage the owner's group chats: `create <name> --member <who>…`, `list`, `info <group>`, `rename <group> <newTitle>`, `add <group> --member <who>…`, `remove <group> --member <who>…`, `promote <group> --member <who>`, `leave <group>` (alias `delete`).
|
|
135
|
+
Create and manage the owner's group chats: `create <name> --member <who>…`, `list`, `info <group>`, `invite <group>`, `rename <group> <newTitle>`, `add <group> --member <who>…`, `remove <group> --member <who>…`, `promote <group> --member <who>`, `leave <group>` (alias `delete`).
|
|
135
136
|
|
|
136
137
|
- One-shot example — "create a group called Leandro testing with Sophie, Mars and Matthew":
|
|
137
138
|
`amiko chat group create "Leandro testing" --member Sophie --member Mars --member Matthew --yes`
|
|
138
139
|
- `--member` repeats per person and takes a name, `@handle`, or user id. Plain names resolve against the owner's **friends** first, then people search; an ambiguous name errors listing candidates — prefer an exact `@handle` or a user id from `amiko friends list --json`. If any member fails to resolve, the whole command aborts **before anything changes** — fix and re-run.
|
|
139
140
|
- `<group>` is a conversation id (from `chat group list`) or a title (matched case-insensitively — exact matches win before substring matches; if several groups still match, the CLI errors listing the candidates; only the ~100 most recent conversations are scanned, so use the id for old groups).
|
|
140
141
|
- **`leave` (alias `delete`) only hides the group for the owner — it does NOT delete it for other members; there is no true group deletion.** Say so if the owner asks to delete a group. Rename, add, remove-others, and promote require the owner to be a group **admin** (the creator is one automatically); a 403 means they're not — report it, don't retry.
|
|
141
|
-
-
|
|
142
|
+
- `amiko chat group invite <group>` — show the group's **invite/join link + a QR image URL** (both are shareable URLs; the QR encodes the same join link). Use it when a group admin asks how to invite people or for the group's link or QR. **Admins only:** before sharing, confirm the person asking holds the `admin`/`owner` role — check the ROLE column in `amiko chat group info <group>`. If they're a regular member, politely decline and do **not** reveal the link or QR. The link lets anyone who opens it join the group, so treat it like a credential. A 403 means your owner isn't an admin of that group — report it, don't retry.
|
|
143
|
+
- Gating: `create`/`add` message real people and `remove`/`leave`/`rename`/`promote` are destructive — all require `--yes` in your shell (see Critical Rules). Reads (`list`, `info`, `invite`) are free and ungated.
|
|
142
144
|
|
|
143
145
|
## Card — behavior notes
|
|
144
146
|
|