refactor: rename login skill to auth
`/tea:login` could not be invoked as `/login` because Claude Code reserves that name as a built-in command. Renaming the skill to `auth` frees the short form: `/tea:auth` and `/auth` both resolve. Updates all references in the guard hook, README, plugin manifests, and the use skill. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -7,7 +7,7 @@
|
|||||||
{
|
{
|
||||||
"name": "tea",
|
"name": "tea",
|
||||||
"source": "./",
|
"source": "./",
|
||||||
"description": "Gitea CLI (tea) reference plus a mandatory-login guard. Ships /tea:login, /tea:use, and a PreToolUse hook that blocks any tea command that would touch Gitea without --login."
|
"description": "Gitea CLI (tea) reference plus a mandatory-login guard. Ships /tea:auth, /tea:use, and a PreToolUse hook that blocks any tea command that would touch Gitea without --login."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "tea",
|
"name": "tea",
|
||||||
"description": "Gitea CLI (tea) reference plus a mandatory-login guard. Ships /tea:login (pin a login) and /tea:use (command reference), and a PreToolUse hook that blocks any tea command that would touch Gitea without --login.",
|
"description": "Gitea CLI (tea) reference plus a mandatory-login guard. Ships /tea:auth (pin a login) and /tea:use (command reference), and a PreToolUse hook that blocks any tea command that would touch Gitea without --login.",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "naudachu"
|
"name": "naudachu"
|
||||||
|
|||||||
@@ -2,3 +2,5 @@
|
|||||||
.docs/
|
.docs/
|
||||||
.claude/
|
.claude/
|
||||||
tmp/
|
tmp/
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ A Claude Code plugin that gives Claude a reference for the `tea` CLI and enforce
|
|||||||
|
|
||||||
| Piece | What it does |
|
| Piece | What it does |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `/tea:login` skill | Prompts you to pick a Gitea login and pins it to the project |
|
| `/tea:auth` skill | Prompts you to pick a Gitea login and pins it to the project |
|
||||||
| `/tea:use` skill | Tea CLI reference — loads command docs on demand |
|
| `/tea:use` skill | Tea CLI reference — loads command docs on demand |
|
||||||
| `tea-guard` hook | PreToolUse hook that blocks or rewrites every `tea` invocation |
|
| `tea-guard` hook | PreToolUse hook that blocks or rewrites every `tea` invocation |
|
||||||
|
|
||||||
@@ -39,16 +39,16 @@ This is a Claude Code plugin — install it through the plugin marketplace, not
|
|||||||
/plugin install tea@tea
|
/plugin install tea@tea
|
||||||
```
|
```
|
||||||
|
|
||||||
The skills (`/tea:login`, `/tea:use`) and the `tea-guard` hook load immediately. Use `/plugin` to enable, disable, or update it later.
|
The skills (`/tea:auth`, `/tea:use`) and the `tea-guard` hook load immediately. Use `/plugin` to enable, disable, or update it later.
|
||||||
|
|
||||||
> The marketplace registration is written to `extraKnownMarketplaces` and the plugin to `enabledPlugins` in your settings automatically — you don't edit those by hand. There is **no** top-level `"plugins"` settings key; if you've added one from older instructions, remove it.
|
> The marketplace registration is written to `extraKnownMarketplaces` and the plugin to `enabledPlugins` in your settings automatically — you don't edit those by hand. There is **no** top-level `"plugins"` settings key; if you've added one from older instructions, remove it.
|
||||||
|
|
||||||
## First use
|
## First use
|
||||||
|
|
||||||
Run `/tea:login` once per project. Claude will list your available Gitea logins and ask you to pick one. The choice is written to `.claude/settings.local.json` and takes effect immediately — no restart needed.
|
Run `/tea:auth` once per project. Claude will list your available Gitea logins and ask you to pick one. The choice is written to `.claude/settings.local.json` and takes effect immediately — no restart needed.
|
||||||
|
|
||||||
```
|
```
|
||||||
/tea:login
|
/tea:auth
|
||||||
```
|
```
|
||||||
|
|
||||||
After that, use `/tea:use` to look up commands, or just ask Claude to do something with Gitea and it will load the reference automatically.
|
After that, use `/tea:use` to look up commands, or just ask Claude to do something with Gitea and it will load the reference automatically.
|
||||||
@@ -76,7 +76,7 @@ hooks/
|
|||||||
hooks.json registers the PreToolUse hook
|
hooks.json registers the PreToolUse hook
|
||||||
tea-guard.sh the guard (Python 3, no deps)
|
tea-guard.sh the guard (Python 3, no deps)
|
||||||
skills/
|
skills/
|
||||||
login/SKILL.md /tea:login skill
|
auth/SKILL.md /tea:auth skill
|
||||||
use/SKILL.md /tea:use skill
|
use/SKILL.md /tea:use skill
|
||||||
use/references/tea/ tea CLI reference docs
|
use/references/tea/ tea CLI reference docs
|
||||||
```
|
```
|
||||||
|
|||||||
+5
-5
@@ -20,7 +20,7 @@ Rules:
|
|||||||
- no --login / -l ................................. BLOCK
|
- no --login / -l ................................. BLOCK
|
||||||
- --login <literal> or --login "$OTHER_VAR" ....... BLOCK (Claude may not pick)
|
- --login <literal> or --login "$OTHER_VAR" ....... BLOCK (Claude may not pick)
|
||||||
- --login "$GITEA_LOGIN", pin found ............... REWRITE to the pin, allow
|
- --login "$GITEA_LOGIN", pin found ............... REWRITE to the pin, allow
|
||||||
- --login "$GITEA_LOGIN", no pin .................. BLOCK (run /tea:login)
|
- --login "$GITEA_LOGIN", no pin .................. BLOCK (run /tea:auth)
|
||||||
|
|
||||||
Output protocol: exit 0 + JSON {hookSpecificOutput:{updatedInput,...}} to
|
Output protocol: exit 0 + JSON {hookSpecificOutput:{updatedInput,...}} to
|
||||||
rewrite; exit 2 + stderr to block.
|
rewrite; exit 2 + stderr to block.
|
||||||
@@ -92,7 +92,7 @@ def main():
|
|||||||
if not re.search(r'(^|[;&|(]|\s)tea(\s|$)', cmd):
|
if not re.search(r'(^|[;&|(]|\s)tea(\s|$)', cmd):
|
||||||
allow_passthrough()
|
allow_passthrough()
|
||||||
|
|
||||||
# Whitelist: login enumeration + meta. No identity is used; /tea:login
|
# Whitelist: login enumeration + meta. No identity is used; /tea:auth
|
||||||
# needs `tea logins list` while no pin exists yet.
|
# needs `tea logins list` while no pin exists yet.
|
||||||
if re.search(r'tea\s+(logins\s+(list|ls)|--version|-v|--help|help)(\s|$)', cmd):
|
if re.search(r'tea\s+(logins\s+(list|ls)|--version|-v|--help|help)(\s|$)', cmd):
|
||||||
allow_passthrough()
|
allow_passthrough()
|
||||||
@@ -102,7 +102,7 @@ def main():
|
|||||||
if not m:
|
if not m:
|
||||||
block('every `tea` command must include --login "$GITEA_LOGIN" '
|
block('every `tea` command must include --login "$GITEA_LOGIN" '
|
||||||
'(the guard substitutes the operator-pinned login). '
|
'(the guard substitutes the operator-pinned login). '
|
||||||
'Run /tea:login if no login is pinned.')
|
'Run /tea:auth if no login is pinned.')
|
||||||
|
|
||||||
raw_val = m.group(3)
|
raw_val = m.group(3)
|
||||||
inner = raw_val
|
inner = raw_val
|
||||||
@@ -114,13 +114,13 @@ def main():
|
|||||||
if inner not in PLACEHOLDERS:
|
if inner not in PLACEHOLDERS:
|
||||||
block('do not name the login yourself (got `%s`). Write exactly '
|
block('do not name the login yourself (got `%s`). Write exactly '
|
||||||
'--login "$GITEA_LOGIN"; the guard replaces it with the login '
|
'--login "$GITEA_LOGIN"; the guard replaces it with the login '
|
||||||
'the operator pinned via /tea:login. This prevents acting under '
|
'the operator pinned via /tea:auth. This prevents acting under '
|
||||||
'the wrong identity.' % raw_val)
|
'the wrong identity.' % raw_val)
|
||||||
|
|
||||||
start = os.environ.get("CLAUDE_PROJECT_DIR") or payload.get("cwd") or os.getcwd()
|
start = os.environ.get("CLAUDE_PROJECT_DIR") or payload.get("cwd") or os.getcwd()
|
||||||
pin, src = find_pin(start)
|
pin, src = find_pin(start)
|
||||||
if not pin:
|
if not pin:
|
||||||
block('no login is pinned. Run /tea:login to choose one (writes '
|
block('no login is pinned. Run /tea:auth to choose one (writes '
|
||||||
'.claude/settings.local.json env.GITEA_LOGIN). The guard reads '
|
'.claude/settings.local.json env.GITEA_LOGIN). The guard reads '
|
||||||
'the file at call time, so it takes effect with no restart.')
|
'the file at call time, so it takes effect with no restart.')
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
---
|
---
|
||||||
name: login
|
name: auth
|
||||||
description: Pin the Gitea login used by the tea CLI in this project. Run when the tea-guard hook reports no login is pinned, or when the user types /tea:login. Enumerates available logins, makes the OPERATOR pick one, and persists it to .claude/settings.local.json. The pin takes effect immediately — no restart.
|
description: Pin the Gitea login used by the tea CLI in this project. Run when the tea-guard hook reports no login is pinned, or when the user types /tea:auth. Enumerates available logins, makes the OPERATOR pick one, and persists it to .claude/settings.local.json. The pin takes effect immediately — no restart.
|
||||||
---
|
---
|
||||||
|
|
||||||
# /tea:login — pin the project Gitea login
|
# /tea:auth — pin the project Gitea login
|
||||||
|
|
||||||
Goal: have the **operator** select exactly one `tea` login for this project and
|
Goal: have the **operator** select exactly one `tea` login for this project and
|
||||||
persist it to `.claude/settings.local.json` under `env.GITEA_LOGIN`. The
|
persist it to `.claude/settings.local.json` under `env.GITEA_LOGIN`. The
|
||||||
+5
-5
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: use
|
name: use
|
||||||
description: Reference docs for the `tea` CLI — Gitea's command-line client. Load when the user asks about Gitea repos, issues, pulls, releases, actions, or other Gitea entities, to look up the right `tea` command and flags. Always write the login as the literal placeholder --login "$GITEA_LOGIN" — the tea-guard hook substitutes the operator-pinned login; set it with /tea:login.
|
description: Reference docs for the `tea` CLI — Gitea's command-line client. Load when the user asks about Gitea repos, issues, pulls, releases, actions, or other Gitea entities, to look up the right `tea` command and flags. Always write the login as the literal placeholder --login "$GITEA_LOGIN" — the tea-guard hook substitutes the operator-pinned login; set it with /tea:auth.
|
||||||
---
|
---
|
||||||
|
|
||||||
# /tea:use — tea CLI reference
|
# /tea:use — tea CLI reference
|
||||||
@@ -22,8 +22,8 @@ The **`tea-guard`** PreToolUse hook enforces this and resolves it:
|
|||||||
`.claude/settings.local.json` (`env.GITEA_LOGIN`) **at call time** and
|
`.claude/settings.local.json` (`env.GITEA_LOGIN`) **at call time** and
|
||||||
rewrites the command to use that literal before it runs.
|
rewrites the command to use that literal before it runs.
|
||||||
- `--login <some-name>` or any other variable → blocked. You may not choose the
|
- `--login <some-name>` or any other variable → blocked. You may not choose the
|
||||||
login; only the operator does (via `/tea:login`).
|
login; only the operator does (via `/tea:auth`).
|
||||||
- no login pinned → blocked with a pointer to run `/tea:login`.
|
- no login pinned → blocked with a pointer to run `/tea:auth`.
|
||||||
|
|
||||||
Why: without an explicit login `tea` silently falls back to the machine's
|
Why: without an explicit login `tea` silently falls back to the machine's
|
||||||
default (possibly the user's personal account), and a login *you* pick may be
|
default (possibly the user's personal account), and a login *you* pick may be
|
||||||
@@ -43,7 +43,7 @@ The pin takes effect immediately — no restart. Only `tea logins list` and
|
|||||||
|
|
||||||
`tea` auto-detects owner/repo from `$PWD` inside a git repo; otherwise pass
|
`tea` auto-detects owner/repo from `$PWD` inside a git repo; otherwise pass
|
||||||
`--repo owner/repo` (or `-r`). Login is **not** auto-detected — it is pinned
|
`--repo owner/repo` (or `-r`). Login is **not** auto-detected — it is pinned
|
||||||
per-project by the operator (see `/tea:login`) and injected by the guard.
|
per-project by the operator (see `/tea:auth`) and injected by the guard.
|
||||||
Config lives in `$XDG_CONFIG_HOME/tea`.
|
Config lives in `$XDG_CONFIG_HOME/tea`.
|
||||||
|
|
||||||
## Index
|
## Index
|
||||||
@@ -112,4 +112,4 @@ are still fine via entity commands. Always the placeholder, never a login name.
|
|||||||
- If a `tea` command is blocked by `tea-guard`: either you forgot
|
- If a `tea` command is blocked by `tea-guard`: either you forgot
|
||||||
`--login "$GITEA_LOGIN"`, you wrote a literal login name instead of the
|
`--login "$GITEA_LOGIN"`, you wrote a literal login name instead of the
|
||||||
placeholder (not allowed — let the guard substitute), or no login is pinned
|
placeholder (not allowed — let the guard substitute), or no login is pinned
|
||||||
(run `/tea:login`).
|
(run `/tea:auth`).
|
||||||
|
|||||||
Reference in New Issue
Block a user