8 Commits

Author SHA1 Message Date
不白 29176d1aae feat(install): auto-detect agents, route MCP auth to QR mode for remote installs (#18)
## Summary

Two end-to-end improvements to `install.sh` / `install.ps1`, mirrored
across both:

### 1. Agent auto-detection

Probe well-known config dirs and binaries for ~18 of
[vercel-labs/skills](https://github.com/vercel-labs/skills)' 45
supported agents (`claude-code`, `cursor`, `codex`, `gemini-cli`,
`opencode`, `openclaw`, `qwen-code`, `iflow-cli`, `windsurf`, `warp`,
`amp`, `crush`, `goose`, `droid`, `kode`, `kilo`, `kimi-cli`,
`kiro-cli`).

When detection finds anything, the `skills add` step gets `-a id1,id2,…`
instead of dumping the user into the multi-select. New flags:

- `--list-agents` — preview what we'd auto-select (and exit)
- `--all-agents` — skip our detection, let `skills` CLI scan everything
- `--only` — manual override (unchanged)

### 2. Local-vs-remote MCP auth routing

The current `--auth-login` always auto-opens a browser. On SSH sessions,
Docker containers, and OpenClaw remote channels (where the user is on a
phone), that silently launches a browser they can't see — leaving them
stuck on "Waiting for authorization…".

Detection (any signal fires ⇒ remote):

| Signal | Notes |
|---|---|
| `$HOME/.openclaw` exists | OpenClaw runtime — most reliable single
signal |
| `$SSH_CONNECTION` / `$SSH_TTY` | Generic SSH session |
| Linux without `$DISPLAY` / `$WAYLAND_DISPLAY` | Headless |

When remote, pass `--no-browser` to the MCP CLI, which prints URL + ANSI
QR for the user to scan with a phone.

New flags:

- `--remote` / `--local` — force either mode
- `--force-mcp` — re-auth even if AgentKey is already configured

Also adds an idempotency short-circuit: if any known MCP config already
has an `agentkey` block with a valid-looking API key, skip the auth step
entirely (`--force-mcp` to override).

### 3. Docs

`README.md` + `docs/README_zh.md` updated to document the new flags and
add a dedicated **"Installing over SSH / Docker / OpenClaw"** section.

## Companion PRs (server side)

The MCP-server changes that this installer routes to ship in a chain of
three PRs against `chainbase-labs/AgentKey-Server`:

| PR | Status | What it adds |
|---|---|---|
| [#2](https://github.com/chainbase-labs/AgentKey-Server/pull/2) |
merged | `--no-browser` / `--qr` / `--no-qr` flags + `qrcode-terminal`
dep (v0.3.5 source bump) |
| [#3](https://github.com/chainbase-labs/AgentKey-Server/pull/3) |
merged | Bump to 0.3.6 — npm `0.3.5` had been published from a pre-merge
commit and shipped stale `dist/` |
| [#4](https://github.com/chainbase-labs/AgentKey-Server/pull/4) | open
| Fix QR not rendering in `--no-browser` (CJS interop bug —
`qrcode-terminal`'s `generate` lives on `.default` under NodeNext); bump
to 0.3.7 |

**This installer needs `@agentkey/mcp@0.3.7`** to be on npm for the QR
flow to actually work. Sequence:

1. Merge #4 ✅
2. Maintainer runs `cd mcp-server && npm publish` (no npm-publish CI
workflow) ✅
3. Merge this PR — `npx -y @agentkey/mcp` will then pull 0.3.7+ and the
`--remote` path renders the QR

This installer change is **forward-compatible**: it can land anytime —
older `@agentkey/mcp` versions silently ignore the unknown
`--no-browser` flag, so worst case a remote user gets the old
browser-opens-on-the-wrong-host UX until the new mcp publishes.

## Test plan

Verified end-to-end on macOS against a local build of
`@agentkey/mcp@0.3.7` (server PR #4):

- [x] Bash syntax check passes (`bash -n install.sh`)
- [x] `install.sh --help` renders all 5 new flag rows
- [x] `install.sh --list-agents` correctly prints detected agents on
test host (10 agents incl. `openclaw`)
- [x] `install.sh --remote --local` exits with code 1 (mutex)
- [x] `install.sh --skip-skill` short-circuits with "AgentKey is already
configured…" when configs have agentkey
- [x] `install.sh --remote --skip-skill --force-mcp` end-to-end: prints
`Detected remote install context — printing QR + URL instead of opening
a browser here`, then `reason: $HOME/.openclaw exists (OpenClaw
runtime)`, launches mcp CLI, renders 16-row ANSI QR, polls — no `open`
process spawned
- [x] All 4 mcp 0.3.7 flag combinations behave correctly (`--no-browser`
/ `--no-browser --no-qr` / `--qr` / no-flags back-compat)
- [ ] `install.ps1` not lint-checked locally (no pwsh on test host);
logic is a strict mirror of bash — needs Windows smoke before merge
- [ ] Inside a real OpenClaw container — confirm `~/.openclaw` triggers
as expected

## Why now

Users running the installer via OpenClaw / Claude Code remote channels
(on a phone) currently see a black-hole UX: the browser opens on the
wrong machine and the install process appears to hang. The detection
here removes the manual `--remote` flag for the common case.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-04-27 21:55:57 +08:00
MOGU :\'-"/ 400cf97578 docs: surface website and console links before install (#17)
## Summary
- Add a "New here? Start on the web" section above `## Install` in both
`README.md` and `docs/README_zh.md`, pointing first-time visitors to
`agentkey.app` and `console.agentkey.app` and explaining what each is
for.
- Add a Console badge alongside the existing Website badge near the top
of both READMEs so the two destinations are visible at a glance.

## Why
Right now the only mention of the website is a single small badge near
the top, and `console.agentkey.app` isn't surfaced in the README at all
— non-technical visitors landing on GitHub get funneled straight into a
`curl | bash` step without ever discovering the friendlier web-based
entry points where the product is explained more clearly.

## Test plan
- [ ] Render `README.md` on GitHub and confirm both badges show in the
header and the new section appears directly above `## Install`.
- [ ] Render `docs/README_zh.md` on GitHub and confirm the same
structure in the Chinese version.
- [ ] Click `agentkey.app` and `console.agentkey.app` links to verify
they resolve.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 00:12:05 +08:00
不白 3e6a444092 docs: emphasize supported agents in README (#15)
## Summary
- Tweak wording in `README.md` and `docs/README_zh.md` to emphasize
supported agents.

## Test plan
- [ ] Docs render correctly on GitHub
- [ ] EN/ZH copies stay in sync

Co-authored-by: lxcong <83766787@qq.com>
2026-04-24 00:19:20 +08:00
lxcong faa4855b1e docs: update Telegram link to AgentKey_Official (#14)
Replaces the old `t.me/agentkey33` community link with
`t.me/AgentKey_Official` in both READMEs. Mirrored change across English
and Chinese docs.

Co-authored-by: lxcong <lxhtheresa@gmail.com>
2026-04-23 19:41:04 +08:00
lxcong 890244f586 docs: bump auto-update example to v1.1.0 (#13)
## Summary

The auto-update example in the **How do I update?** FAQ still quoted
`v0.4.5` — that's the old pre-migration tag scheme, which no longer
exists. Bumped to `v1.1.0` (the actual current latest) so the example
matches what a user would see.

Applied symmetrically to `README.md` and `docs/README_zh.md`.

## Why this PR

Not strictly necessary — nothing was broken — but it was misleading.
Also serves as a smoke test for the full CI pipeline:

- [x] Conventional Commits PR title (`docs:`)
- [ ] commitlint passes
- [ ] Claude reviewer comments within a few minutes with a ✅
- [ ] release-please does NOT open a release PR (`docs:` is not bumping)

## Test plan

This is a docs-only 2-line change in a user-facing FAQ. No functional
impact.

---------

Co-authored-by: lxcong <lxhtheresa@gmail.com>
2026-04-23 15:23:58 +08:00
lxcong bf90edd3d8 chore: remove archive directory and stale release docs (#11)
## Summary

Removes `archive/` entirely and syncs all doc references. Archive held
historical code from the pre-public-release era:

- `archive/cli/` — old `@agentkey/cli` workspace (retired; superseded by
`npx skills add chainbase-labs/agentkey`)
- `archive/scripts/` — `inject.sh`, `install-openclaw.sh`,
`setup-key.sh`, and the old `release.sh` (retired; superseded by
release-please)
- `archive/docs/` — OPENCLAW_INSTALL, QA checklists, QA report from the
pre-1.0 flow
- `archive/pnpm-workspace.yaml`, `archive/pnpm-lock.yaml`,
`archive/README.md` — retired pnpm workspace scaffold

None of it is referenced from active code. History is preserved in git
(visible via `git log --diff-filter=D --summary` or `git show
<commit>:archive/path`) for anyone who needs to look back.

## Incidental cleanup (same PR)

The directory tree snippets in `README.md` and `docs/README_zh.md` were
stale (they still listed `scripts/release.sh` and called `version` a
"release.sh-managed" file). Updated to reflect:

- `release.sh` is gone (release-please took over)
- `version` → `version.txt` (renamed in #7)
- Release docs now describe the release-please flow instead of the old
`./scripts/release.sh patch/minor/major` invocation

`.claude/CLAUDE.md` similarly updated: dropped the `archive/`
directory-tree line, the `archive/` paragraph, and the "re-add OpenClaw"
bullet.

`.github/workflows/claude-pr-review.yml` had a convention rule
`archive/** — retired code` which is vacuously true now; removed so the
prompt stays accurate.

## Expected Claude reviewer behavior

The reviewer should flag this PR as ⚠️ Convention violation on the
grounds that `version.txt` / `CHANGELOG.md` / release-please-managed
files shouldn't be touched directly — but **none of those are modified**
in this PR. The reviewer should produce a clean ✅ or Suggestion-level
output at worst.

This PR is partially a live test of the reviewer:
- Did the `Claude` GitHub App install + `ANTHROPIC_API_KEY` secret get
set up? If yes, we'll see a `🤖 Claude security review` comment.
- If the comment never appears, the setup is incomplete (ACTION
REQUIRED: maintainer).

## Test plan

- [x] `git rm -r archive/` — 69 files removed
- [x] No active code references `archive/` anymore (verified: `grep -rn
'archive/' --exclude-dir=.git` is empty)
- [x] Both READMEs' directory trees updated
- [x] CLAUDE.md scrubbed
- [x] Workflow YAML still valid (`python3 -c "import yaml;
yaml.safe_load(...)"`)
- [x] PR title conventional; commitlint should pass
- [ ] Post-merge: no user-facing impact (archive was never shipped as
installable content)
- [ ] Post-merge: this is a `chore:` so release-please should NOT open a
release PR

---------

Co-authored-by: lxcong <lxhtheresa@gmail.com>
2026-04-23 15:16:32 +08:00
lxcong eda2c80be6 docs: refresh README onboarding and FAQ framing (#4)
## Summary

Syncs README.md and docs/README_zh.md content that landed on the private
`AgentKey-Skill` repo after v1.0.0 was cut, with repo-name + version
pins re-applied for the public `chainbase-labs/agentkey` home.

Upstream source of content (private):
- `7ff988a` Update README.md (onboarding restructure)
- `59e0d1d` Update README_zh.md (mirror)
- `922bc62` docs: consolidate README tail into expandable FAQ; tighten
safety framing

## Transforms re-applied

- `chainbase-labs/AgentKey-Skill` → `chainbase-labs/agentkey`
- `chainbase-labs%2FAgentKey-Skill` → `chainbase-labs%2Fagentkey`
- `AgentKey-Skill` (bare) → `agentkey`
- `agentkey@v0.4.4` → `agentkey@v1.0.0`

Verified zero remaining old-name or old-version refs.

## Test plan

- [x] `grep -c AgentKey-Skill README.md docs/README_zh.md` → 0, 0
- [x] `grep -c '@v0.4.4' …` → 0, 0
- [x] commitlint passes on PR title
- [ ] Post-merge: release-please workflow runs but does NOT open a
Release PR (`docs:` is not a version-bumping type)

Co-authored-by: lxcong <lxhtheresa@gmail.com>
2026-04-23 14:14:40 +08:00
lxcong b3d806105b chore: initial public release 2026-04-23 13:52:31 +08:00