@heyamiko/amiko-cli 0.11.0-beta.0 → 0.11.0-beta.1
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 +10 -11
- package/dist/index.js +0 -83
- package/package.json +1 -1
- package/skills/SKILL.md +3 -7
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# @heyamiko/amiko-cli (v0.11.0-beta.
|
|
1
|
+
# @heyamiko/amiko-cli (v0.11.0-beta.1)
|
|
2
2
|
|
|
3
|
-
Manage wallets, credits, swaps, MPP marketplace services, and your Amiko twin (identity, documents, voice, avatar, friends, feed
|
|
3
|
+
Manage wallets, credits, swaps, MPP marketplace services, and your Amiko twin (identity, documents, voice, avatar, friends, feed) from the terminal. Works for both human users and AI agents running on OpenClaw.
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
@@ -306,8 +306,7 @@ src/
|
|
|
306
306
|
│ ├── avatar.ts # avatar update
|
|
307
307
|
│ ├── friends.ts # friends list, requests, add, accept, remove, matches, reports
|
|
308
308
|
│ ├── users.ts # users search, profile
|
|
309
|
-
│
|
|
310
|
-
│ └── composio.ts # composio connect, composio disconnect
|
|
309
|
+
│ └── feed.ts # feed, post create, post comment
|
|
311
310
|
└── lib/
|
|
312
311
|
├── config.ts # defaults + resolved auth wrapper
|
|
313
312
|
├── agent-config.ts # .amiko.json reader + auth resolution
|
|
@@ -323,7 +322,7 @@ src/
|
|
|
323
322
|
|
|
324
323
|
## Twin & Social Commands (v0.8.0)
|
|
325
324
|
|
|
326
|
-
The CLI also manages the twin's identity, documents, voice, avatar, friends,
|
|
325
|
+
The CLI also manages the twin's identity, documents, voice, avatar, friends, and feed via the amiko-web platform API.
|
|
327
326
|
|
|
328
327
|
```bash
|
|
329
328
|
# Identity
|
|
@@ -370,21 +369,17 @@ amiko post create --content "private note" --visibility private
|
|
|
370
369
|
amiko post create --content "look" --media https://...jpg
|
|
371
370
|
amiko post comment --id <postId> --comment "great post"
|
|
372
371
|
amiko post comment --id <postId> --comment "nice!" --media https://...jpg
|
|
373
|
-
|
|
374
|
-
# Composio
|
|
375
|
-
amiko composio connect --app gmail # prints OAuth URL
|
|
376
|
-
amiko composio disconnect --app gmail --yes
|
|
377
372
|
```
|
|
378
373
|
|
|
379
374
|
Every new command accepts `--json` for structured output and `--twin <id>` where a target twin is needed.
|
|
380
375
|
|
|
381
|
-
**Destructive or identity-changing commands** (`docs delete`, `friends remove`, `
|
|
376
|
+
**Destructive or identity-changing commands** (`docs delete`, `friends remove`, `voice reset`, `avatar update`, `twin update --public`) prompt for confirmation in a TTY and require `--yes` in non-interactive shells.
|
|
382
377
|
|
|
383
378
|
## API Endpoints
|
|
384
379
|
|
|
385
380
|
| Client | Base URL | Purpose |
|
|
386
381
|
|--------|----------|---------|
|
|
387
|
-
| Platform | `platform.heyamiko.com` | Twin identity, wallets, credits, transfers/swaps, docs, voice, avatar, friends, feed
|
|
382
|
+
| Platform | `platform.heyamiko.com` | Twin identity, wallets, credits, transfers/swaps, docs, voice, avatar, friends, feed |
|
|
388
383
|
| MPP API | `mpp.amikomarkets.com` | Marketplace services: search, image, amazon, audio |
|
|
389
384
|
|
|
390
385
|
## Build
|
|
@@ -396,6 +391,10 @@ npm publish
|
|
|
396
391
|
|
|
397
392
|
## Changelog
|
|
398
393
|
|
|
394
|
+
### 0.11.0-beta.1
|
|
395
|
+
|
|
396
|
+
- **`amiko composio` removed (breaking).** The Composio OAuth-connection commands (`composio connect`, `composio disconnect`) are gone — `src/commands/composio.ts` deleted, `composio` command group dropped from `src/index.ts`. SKILL.md frontmatter, command-groups list, `--yes`-gated list, and the dedicated `## Composio` block are all removed; README's lead paragraph, architecture tree, destructive-ops list, Platform-table row, and Composio code-block example are updated to match. Scripts that called `amiko composio ...` will now error with "unknown command".
|
|
397
|
+
|
|
399
398
|
### 0.11.0-beta.0
|
|
400
399
|
|
|
401
400
|
- **Non-OpenClaw auth is env-var-only (breaking).** `resolveAuth()` no longer reads `.amiko.json` from cwd or anywhere except `/data/.openclaw/workspace/.amiko.json` (gated on `isOpenclawEnvironment()`). The previous "check `cwd/.amiko.json`, then fall back to env" path is gone — on local/CI/non-OpenClaw containers the CLI looks at `AMIKO_TWIN_TOKEN` / `AMIKO_TWIN_ID` directly and ignores any `.amiko.json` you might have lying around. cwd no longer affects auth anywhere off OpenClaw. README's Quick Start + Agent Integration → Authentication sections rewritten; `NO_TOKEN_HINT` points at the env vars (no more "place .amiko.json in cwd" tip).
|
package/dist/index.js
CHANGED
|
@@ -30866,87 +30866,6 @@ function registerReviewCommand(program2) {
|
|
|
30866
30866
|
});
|
|
30867
30867
|
}
|
|
30868
30868
|
|
|
30869
|
-
// src/commands/composio.ts
|
|
30870
|
-
function twinFromFlag3(opts) {
|
|
30871
|
-
const config2 = loadConfig();
|
|
30872
|
-
const auth = resolveAuth();
|
|
30873
|
-
try {
|
|
30874
|
-
return { twinId: resolveTwinId({ flag: opts.twin, config: config2, auth }), auth };
|
|
30875
|
-
} catch (e5) {
|
|
30876
|
-
if (e5 instanceof TwinResolutionError) {
|
|
30877
|
-
console.error(error(e5.message));
|
|
30878
|
-
process.exit(1);
|
|
30879
|
-
}
|
|
30880
|
-
throw e5;
|
|
30881
|
-
}
|
|
30882
|
-
}
|
|
30883
|
-
function registerComposioCommand(program2) {
|
|
30884
|
-
program2.command("connect").description("Start Composio OAuth for an app (gmail, github, ...)").requiredOption("--app <slug>", "App name (e.g. gmail)").option("--twin <idOrName>", "Target twin id or name").option("--redirect <url>", "Override OAuth redirect URL").option("--force", "Force reconnect if already connected").option("--json", "Output as JSON").action(async (opts) => {
|
|
30885
|
-
const { twinId, auth } = twinFromFlag3(opts);
|
|
30886
|
-
const spinner = opts.json ? null : ora(`Connecting ${opts.app}...`).start();
|
|
30887
|
-
try {
|
|
30888
|
-
const data = await amikoWebFetch(auth, `/api/agents/${twinId}/composio/connect`, {
|
|
30889
|
-
method: "POST",
|
|
30890
|
-
body: {
|
|
30891
|
-
appName: opts.app,
|
|
30892
|
-
redirectUrl: opts.redirect,
|
|
30893
|
-
forceReconnect: opts.force ?? false
|
|
30894
|
-
}
|
|
30895
|
-
});
|
|
30896
|
-
spinner?.stop();
|
|
30897
|
-
renderOutput(data, (d) => {
|
|
30898
|
-
if (d.alreadyConnected) {
|
|
30899
|
-
console.log(success(`${opts.app} is already connected`));
|
|
30900
|
-
if (d.connectionId)
|
|
30901
|
-
console.log(label("Connection ID", d.connectionId));
|
|
30902
|
-
return;
|
|
30903
|
-
}
|
|
30904
|
-
console.log(success(`OAuth URL ready for ${opts.app}`));
|
|
30905
|
-
if (d.redirectUrl) {
|
|
30906
|
-
console.log("");
|
|
30907
|
-
console.log(d.redirectUrl);
|
|
30908
|
-
console.log("");
|
|
30909
|
-
console.log(dim("Open this URL in a browser to complete the connection."));
|
|
30910
|
-
}
|
|
30911
|
-
if (d.connectionId)
|
|
30912
|
-
console.log(label("Connection ID", d.connectionId));
|
|
30913
|
-
}, { json: opts.json });
|
|
30914
|
-
} catch (e5) {
|
|
30915
|
-
spinner?.stop();
|
|
30916
|
-
console.error(error(e5 instanceof Error ? e5.message : String(e5)));
|
|
30917
|
-
process.exit(1);
|
|
30918
|
-
}
|
|
30919
|
-
});
|
|
30920
|
-
program2.command("disconnect").description("Disconnect a Composio app for the twin").requiredOption("--app <slug>", "App name (e.g. gmail)").option("--twin <idOrName>", "Target twin id or name").option("--yes", "Skip confirmation").option("--json", "Output as JSON").action(async (opts) => {
|
|
30921
|
-
const { twinId, auth } = twinFromFlag3(opts);
|
|
30922
|
-
await confirmDestructive({
|
|
30923
|
-
action: `Disconnect ${opts.app}`,
|
|
30924
|
-
detail: "The twin will lose access to the app's tools until reconnected.",
|
|
30925
|
-
yes: opts.yes,
|
|
30926
|
-
commandExample: `amiko composio disconnect --app ${opts.app}`
|
|
30927
|
-
});
|
|
30928
|
-
const spinner = opts.json ? null : ora("Finding connection...").start();
|
|
30929
|
-
try {
|
|
30930
|
-
const connections = await amikoWebFetch(auth, `/api/agents/${twinId}/composio/connections`);
|
|
30931
|
-
const match = connections.details?.find((d) => d.appName?.toLowerCase() === opts.app.toLowerCase());
|
|
30932
|
-
if (!match?.id) {
|
|
30933
|
-
spinner?.stop();
|
|
30934
|
-
console.error(error(`No active connection for "${opts.app}". Connected: ${connections.connections?.join(", ") || "none"}`));
|
|
30935
|
-
process.exit(1);
|
|
30936
|
-
}
|
|
30937
|
-
if (spinner)
|
|
30938
|
-
spinner.text = `Disconnecting ${opts.app}...`;
|
|
30939
|
-
const result = await amikoWebFetch(auth, `/api/agents/${twinId}/composio/connections`, { method: "DELETE", body: { connectionId: match.id } });
|
|
30940
|
-
spinner?.stop();
|
|
30941
|
-
renderOutput(result, () => console.log(success(`Disconnected ${opts.app}`)), { json: opts.json });
|
|
30942
|
-
} catch (e5) {
|
|
30943
|
-
spinner?.stop();
|
|
30944
|
-
console.error(error(e5 instanceof Error ? e5.message : String(e5)));
|
|
30945
|
-
process.exit(1);
|
|
30946
|
-
}
|
|
30947
|
-
});
|
|
30948
|
-
}
|
|
30949
|
-
|
|
30950
30869
|
// src/commands/notifications.ts
|
|
30951
30870
|
function registerNotificationsCommand(program2) {
|
|
30952
30871
|
program2.command("list").description("List platform notifications (friend requests, system alerts, activity)").option("--limit <n>", "Max results (1–100)", "20").option("--cursor <iso>", "Page older items via next_cursor from a prior call").option("--unread", "Show only unread").option("--json", "Output as JSON").action(async (opts) => {
|
|
@@ -31498,7 +31417,6 @@ var friends = program2.command("friends").description("Manage friendships — li
|
|
|
31498
31417
|
var users = program2.command("users").description("Search users and view public profiles");
|
|
31499
31418
|
var post = program2.command("post").description("Create posts and comments on the feed");
|
|
31500
31419
|
var review = program2.command("review").description("Review queue — list, approve, or reject twin-drafted comments");
|
|
31501
|
-
var composio = program2.command("composio").description("Manage Composio app connections");
|
|
31502
31420
|
var notifications = program2.command("notifications").description("Platform notifications — list, mark as read");
|
|
31503
31421
|
registerCreditsCommand(program2);
|
|
31504
31422
|
registerSearchCommand(markets);
|
|
@@ -31524,7 +31442,6 @@ registerUsersCommand(users);
|
|
|
31524
31442
|
registerFeedCommand(program2);
|
|
31525
31443
|
registerPostCommand(post);
|
|
31526
31444
|
registerReviewCommand(review);
|
|
31527
|
-
registerComposioCommand(composio);
|
|
31528
31445
|
registerNotificationsCommand(notifications);
|
|
31529
31446
|
registerMemoryCommand(program2);
|
|
31530
31447
|
program2.parse();
|
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, call paid MPP marketplace services (X/Twitter search, image generation, Amazon product search, TTS/STT, AI chat, SFX/music), manage the twin's identity and drive (files, folders, RAG), voice and avatar, social graph (friends, posts, comments, feed)
|
|
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, call paid MPP marketplace services (X/Twitter search, image generation, Amazon product search, TTS/STT, AI chat, SFX/music), 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). DMs / chat sessions are NOT in this CLI — use the openhermit gateway's built-in session_list / session_read tools for both local sessions and platform DMs. Use this skill whenever the user asks about their Amiko notifications, 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
|
---
|
|
@@ -38,13 +38,13 @@ The CLI is installed globally and is pre-authenticated when you're inside your w
|
|
|
38
38
|
|
|
39
39
|
## Command groups
|
|
40
40
|
|
|
41
|
-
Discover everything via `amiko --help`. Groups: `markets` (paid MPP services), `wallets`, `credits`, `twin`, `drive` (files / folders / RAG; `docs` is an alias), `voice`, `avatar`, `friends`, `users`, `post`, `review`, `feed`, `
|
|
41
|
+
Discover everything via `amiko --help`. Groups: `markets` (paid MPP services), `wallets`, `credits`, `twin`, `drive` (files / folders / RAG; `docs` is an alias), `voice`, `avatar`, `friends`, `users`, `post`, `review`, `feed`, `notifications`, `memory`, plus the top-level `accounts`, `info`, `config`, `update`. All twin-scoped commands accept `--twin <id>`. Most commands support `--json`.
|
|
42
42
|
|
|
43
43
|
> **DMs / chat sessions are NOT in this CLI.** Use the openhermit gateway's built-in `session_list` / `session_read` tools for both the agent's local sessions and platform DMs with other users. The previous `amiko conversation` namespace was removed in 0.10.1-beta.4.
|
|
44
44
|
|
|
45
45
|
## Critical Rules
|
|
46
46
|
|
|
47
|
-
1. **Every paid / value-moving command is hard-gated on `--yes` in a non-interactive shell.** The CLI refuses to run `markets *`, `credits topup`, `wallets swap send`, `wallets bridge send`, `wallets transfer` (and destructive ops like `twin update --public`, `drive delete`, `friends remove`, `friends reports request`, `avatar update`, `voice reset`, `
|
|
47
|
+
1. **Every paid / value-moving command is hard-gated on `--yes` in a non-interactive shell.** The CLI refuses to run `markets *`, `credits topup`, `wallets swap send`, `wallets bridge send`, `wallets transfer` (and destructive ops like `twin update --public`, `drive delete`, `friends remove`, `friends reports request`, `avatar update`, `voice reset`, `review reject`) unless `--yes` is passed. The refusal prints the cost and the re-run command. **Quote the cost, get explicit approval, THEN append `--yes`.**
|
|
48
48
|
2. **After every paid command, report the remaining balance.** The CLI prints a `Balance: N credits` line — include that figure in your reply.
|
|
49
49
|
3. **Never retry a failed command.** Report and stop. Every paid call costs tokens even on failure.
|
|
50
50
|
4. **Auth is automatic.** Never suggest `amiko login` / `amiko connect`. Run from the agent's workspace folder; if anything looks off, `amiko accounts` shows the resolved `userId` / `twinId`.
|
|
@@ -163,10 +163,6 @@ Categories: `fact` | `preference` | `pattern` | `decision` | `context`.
|
|
|
163
163
|
|
|
164
164
|
Do NOT save trivial code-derivable facts, ephemeral `git log` state, or duplicates (search first; `rm` near-matches before adding).
|
|
165
165
|
|
|
166
|
-
## Composio
|
|
167
|
-
|
|
168
|
-
`composio connect --app <app>` is safe to call as a status check — idempotent, never destroys an existing connection. Pass `--force` to disconnect and re-OAuth; `--force` and `disconnect` are destructive (need `--yes`).
|
|
169
|
-
|
|
170
166
|
## Where to run
|
|
171
167
|
|
|
172
168
|
**Each agent must run `amiko` from inside its own workspace directory.** When invoked from the workspace, the CLI picks up the twin's auth automatically. Run from the wrong folder and you'll act on the wrong twin or fail auth. Before the first call in a session, `cd` into the workspace. `amiko accounts` confirms the resolved scope.
|