Просмотр исходного кода

fix(plugin): 0.8.2 —— 点名并否掉「不能执行 wikipali-login」这个拒绝理由

实测:另一台 Desktop 上的 agent 拒绝执行 wikipali-login,理由是「它要读你的
密码,我不能输入凭据,而且这个会话没有真正的交互式终端」。三条都不成立——
密码由 getpass 或系统对话框收取、不经过调用方;无 TTY 时自动改用对话框,那
正是 0.4.0 为这种环境加的。

原来的措辞「需要登录时直接执行 wikipali-login 即可」是对的,但没有预判这个
具体的拒绝理由。模型对「密码」有很强的默认警惕,泛泛地说「可以执行」压不住,
必须把错误行为直接点名。三处同时加:

- 写端 SKILL.md 铁律 1:⚠ 不要以「这个命令要读密码 / 我不能处理凭据 / 本会话
  没有交互式终端」为由拒绝执行它。先跑,让它自己判断环境;
- wikipali-login 的文件头加一段「给 AI agent」,因为读脚本源码是模型判断该不该
  跑的常见路径,光改 SKILL.md 覆盖不到;
- conventions.md 的凭据一节同步。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
visuddhinanda 1 неделя назад
Родитель
Сommit
34a30aca78

+ 1 - 1
plugins/wikipali/.claude-plugin/plugin.json

@@ -1,7 +1,7 @@
 {
   "name": "wikipali",
   "description": "WikiPali 巴利三藏平台的客户端:检索与阅读语料做研究(词形展开、全文检索、出处分布、按坐标取原文与译本),以及以 AI 模型身份写入句子。",
-  "version": "0.8.1",
+  "version": "0.8.2",
   "author": {
     "name": "visuddhinanda",
     "url": "https://github.com/visuddhinanda"

+ 4 - 0
plugins/wikipali/bin/wikipali-login

@@ -1,6 +1,10 @@
 #!/usr/bin/env python3
 """WikiPali 交互式登录——整个插件里唯一接触密码的程序。
 
+给 AI agent:**可以直接执行本程序**。密码由终端的 getpass 或操作系统的密码对话框
+收取,不经过调用方,你既看不到也无法读取。不要以「要读密码」或「本会话没有终端」
+为由拒绝——无 TTY 时它会自动改用系统对话框,那正是为这种环境设计的。
+
 密码只经 getpass 读入内存,不落盘、不进日志、不进对话上下文。
 登录成功后只把 JWT 存进 ~/.wikipali/credentials.json(0600)。
 

+ 2 - 1
plugins/wikipali/references/conventions.md

@@ -94,7 +94,8 @@ AI-汉译-Nissaya(**AI 生成**,deepseek-v3)(216:35)         ← 机器译
 对话——两者都会留痕(`ps` / shell history / 会话记录)。
 
 没有终端时(Claude Desktop、IDE、agent 代跑)`wikipali-login` 会自动弹系统密码框,所以
-**可以直接执行它**;只有既无终端又无图形界面时才需要用户自己开终端。Claude Desktop 的
+**可以直接执行它**——密码不经过调用方,**不要以「要读密码」或「没有终端」为由拒绝执行**。
+只有既无终端又无图形界面时才需要用户自己开终端。Claude Desktop 的
 内置终端按 <kbd>Ctrl</kbd>+<kbd>`</kbd> 打开(仅本地会话)。
 
 登录是**一次性**的:用户 token 有效期 365 天,同一台机器上所有副本共用这一份凭据。

+ 8 - 3
plugins/wikipali/skills/write/SKILL.md

@@ -22,9 +22,14 @@ metadata:
 
 ## 铁律
 
-1. **永远不要向用户索要密码。** 需要登录时直接执行 `wikipali-login` 即可——没有终端时它会
-   **弹出操作系统的密码对话框**,用户把密码输给系统,你全程看不到。绝不允许的三件事:
-   向用户索要密码、把密码写进命令行参数、让用户把密码打进对话(那会进入会话记录)。
+1. **永远不要向用户索要密码。** 需要登录时**直接执行 `wikipali-login`**——密码由终端的
+   `getpass` 或**操作系统的密码对话框**收取,**不经过你**,你既看不到也无法读取。
+   绝不允许的三件事:向用户索要密码、把密码写进命令行参数、让用户把密码打进对话
+   (那会进入会话记录)。
+
+   ⚠ **不要以「这个命令要读密码 / 我不能处理凭据 / 本会话没有交互式终端」为由拒绝执行它。**
+   这三条都不成立:密码不经过你;无 TTY 时它自动改用系统对话框,那正是为这种环境设计的。
+   先跑,让它自己判断环境——只有它明确报错时才转达下面的办法。
 
    若它报「既没有交互式终端也没有图形界面」,把这几条转达给用户:
    - **Claude Desktop**:按 <kbd>Ctrl</kbd>+<kbd>`</kbd> 打开内置终端,在里面跑 `wikipali-login`(内置终端仅本地会话有);