@heyamiko/amiko-cli 0.14.0-beta.16 → 0.14.0-beta.18

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 CHANGED
@@ -255,14 +255,19 @@ amiko chat send @sophie "on my way!" --yes # send as the owner
255
255
  amiko chat send <userId> "hey!" --yes # user id works too — the DM is opened automatically
256
256
  amiko chat send Mars "hey!" --yes # or a name (friends first, then people search)
257
257
  amiko chat send <groupConversationId> "hi all" --yes # send to a group chat
258
+ amiko chat send "Trip planning" "standup in 5 @all" --yes # @all — notifies every group member
259
+ amiko chat send "Trip planning" "standup in 5" --all --yes # same, via the explicit flag
258
260
  amiko chat send @sophie "look 👀" --image ./cat.png --yes # attach a local image
259
261
  amiko chat send @sophie "made this 🎵" --audio <generated-url> --yes # attach audio (e.g. from `amiko create`)
262
+ amiko chat receipts <messageId> # who read your message + when (id from `chat read`)
260
263
  ```
261
264
 
262
265
  - **`<target>`** for `read`/`send` is a **conversation id** (from `chat list` — use this for groups), a **user id**, an **`@handle`**, or a **name**. Names resolve against your **friends first**, then people search; if ambiguous, the CLI lists candidates instead of guessing. A cuid that isn't one of your conversations is retried as a user id, so pasting a user id "just works".
263
266
  - `send` to a person you have no DM with yet **creates the DM automatically** (find-or-create, after the confirmation). `read` never creates one — it errors if no DM exists yet.
264
267
  - **Inline media**: `--image <pathOrUrl>` (jpg/png/webp/gif, local ≤10MB or an Amiko URL) and `--audio <pathOrUrl>` (local ≤25MB or an Amiko URL → sent as a voice note). One media block per message (image *or* audio). **Video isn't supported in chat yet.** A local file is uploaded; an Amiko URL (e.g. a generated asset from `amiko create`) attaches directly with no re-upload. (A local *audio* file is sent as a voice note, with your text as a separate message.)
268
+ - **@all in groups**: `--all` prepends an @all mention, and a standalone `@all` word typed in the message converts too — either way **every member** is notified. Group **admins/owners** can always use it; everyone else only after an admin runs `amiko chat group mention-all <group> on`. Without permission, `--all` fails with the fix named, while a typed `@all` is delivered as plain text (with a note). Incoming mention markup renders as plain `@name`/`@all` in `chat read` and `chat list`.
265
269
  - `chat send` messages a real person, so it's **gated on `--yes`** in non-interactive shells. Delivery is real-time. `--raw` prints raw JSON on any subcommand.
270
+ - **`chat receipts <messageId>`** shows read receipts for **your own** messages (server-enforced; 403 otherwise): sent time, who read it with each person's first-read time, and who it was delivered to but hasn't read. Reads from before receipts tracking show as "exact time unknown". Read-only, ungated.
266
271
 
267
272
  ### Group chats
268
273
 
@@ -276,13 +281,15 @@ amiko chat group rename <groupIdOrTitle> "New name" --yes
276
281
  amiko chat group add <groupIdOrTitle> --member @sophie --yes
277
282
  amiko chat group remove <groupIdOrTitle> --member Mars --yes
278
283
  amiko chat group promote <groupIdOrTitle> --member Sophie --yes # make a member an admin
284
+ amiko chat group mention-all <groupIdOrTitle> on --yes # let everyone use @all (off = admins only, the default)
279
285
  amiko chat group leave <groupIdOrTitle> --yes # alias: delete — see caveat below
280
286
  ```
281
287
 
282
288
  - **`--member`** is repeatable and accepts a plain name, `@handle`, or user id. Plain names resolve against your **friends** first (then people search); an ambiguous name errors listing candidates instead of guessing, and one unresolvable member aborts the whole command **before anything is changed**.
283
289
  - **Groups address by id or title** — titles match case-insensitively (exact first, then substring) across your most recent 100 conversations; ambiguous titles error with candidates. `chat send "<group title>" "hi" --yes` also works when exactly one group title matches.
284
- - **`leave` (alias `delete`) only hides the group for you.** Other members keep the conversation and its history — the platform has no delete-for-everyone. Rename, add, remove-others, and promote are **admin-only** (the creator is admin); the server enforces this.
285
- - `create`/`add` are outward social actions and `rename`/`remove`/`leave`/`promote` are destructive, so all are **gated on `--yes`** in non-interactive shells. `--raw` prints JSON everywhere.
290
+ - **`leave` (alias `delete`) only hides the group for you.** Other members keep the conversation and its history — the platform has no delete-for-everyone. Rename, add, remove-others, promote, and the @all toggle are **admin-only** (the creator is admin); the server enforces this.
291
+ - **`mention-all <group> <on|off>`** controls who may @all in the group: `on` lets every member, `off` (the default) restricts it to admins. The current setting shows in `amiko chat group info` as `@all mentions: everyone | admins only`.
292
+ - `create`/`add` are outward social actions and `rename`/`remove`/`leave`/`promote`/`mention-all` are destructive, so all are **gated on `--yes`** in non-interactive shells. `--raw` prints JSON everywhere.
286
293
 
287
294
  ## Twin Cards
288
295
 
@@ -583,6 +590,14 @@ npm publish
583
590
 
584
591
  ## Changelog
585
592
 
593
+ ### 0.14.0-beta.18
594
+
595
+ - **Read receipts: `amiko chat receipts <messageId>`.** Shows when the message was sent, who has read it (per-person first-read time), and who it was delivered to but hasn't read yet. Sender-only, enforced server-side — works for messages sent as the owner (`chat send`); anything else 403s with a clear message. Reader names resolve from the conversation's participant list (short-id fallback). Read-only and ungated, like `chat reactions`; `--raw` prints the API payload. Rows read before receipts tracking existed render as "exact time unknown". Requires the companion amiko-web `feat/chat-read-receipts` deploy (`GET /api/messages/{id}/receipts`).
596
+
597
+ ### 0.14.0-beta.17
598
+
599
+ - **@all mentions in group chats + `amiko chat group mention-all <group> <on|off>`.** `chat send` gains `--all`, and a standalone literal `@all` word in the message converts too — both emit the canonical sentinel `@[all](all:all)` (kept in sync with amiko-web `src/utils/mentions.ts`), which amiko-chat expands into a mention notification for every group member. The CLI pre-checks permission client-side, mirroring the web gate plus the server-honored `owner` role (`admin`/`owner`, or the conversation's `allow_everyone_mention_all` flag; `left_at` participants excluded): a denied `--all` exits 1 naming the fix, before the approval gate and before any DM could be created, while a denied literal `@all` degrades to plain text with a note — the server treats an unauthorized token as inert either way. The new `chat group mention-all` toggle PATCHes `/api/conversations/{id}/mention-all-permission` (admin-gated server-side, 403 → admin tip) behind `confirmDestructive`, and the current setting shows in `chat group info` (`@all mentions: everyone | admins only`). Incoming mention markup (`@[Name](id:user|agent)` / `@[all](all:all)`) now renders as plain `@Name`/`@all` in `chat read`, `chat list`, and `chat group list` previews (new `src/lib/mentions.ts`). Requires the companion amiko-web `feat/group-mention-all` deploy.
600
+
586
601
  ### 0.14.0-beta.15
587
602
 
588
603
  - Create Studio defaults to `--pay credits` (account credits) instead of twin wallet; pass `--pay wallet` for on-chain.