@zicolasjac-ai/remote-readonly-ssh 1.4.2 → 1.4.4

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
@@ -25,7 +25,7 @@ npx 会自动拉取最新版本、进入初始化向导,依次询问:
25
25
  1. 是否覆盖已有 `~/.rrs/config.json`(首次安装跳过此步)
26
26
  2. **认证组**:堡垒机主机 / 端口 / 用户名 / 认证模式(SSH 密钥或密码)/ 凭据;可配置多个认证组
27
27
  3. 目标主机白名单(每行 `ip=堡垒机搜索关键字`),并为每台主机指定归属的认证组(多台主机可共用同一组)
28
- 4. 是否把 SKILL.md 安装到 opencode / Claude Code / Cursor 等 AI 助手
28
+ 4. 是否把 SKILL.md 安装到 opencode / Claude Code / Cursor 等 AI 助手(安装命令的 postinstall 已自动分发,此步幂等可确认)
29
29
 
30
30
  向导结束后 `~/.rrs/config.json` 已就位、`~/.rrs/audit.log` 已建好、AI skill 已分发。直接试跑:
31
31
 
@@ -38,7 +38,7 @@ npx -y @zicolasjac-ai/remote-readonly-ssh@latest sys-info --json
38
38
  每次调用都 `npx` 较慢(需下载/缓存)。如果要把 `rrs` 作为日常命令长期使用:
39
39
 
40
40
  ```bash
41
- npm install -g @zicolasjac-ai/remote-readonly-ssh
41
+ npm install -g @zicolasjac-ai/remote-readonly-ssh # postinstall 自动分发 AI skill
42
42
  rrs init # TTY 下仍是交互向导;非交互环境只生成配置模板
43
43
  rrs sys-info --json # 直接用 rrs 前缀
44
44
  ```
@@ -145,7 +145,7 @@ rrs upload "E:\deploy\nginx.conf" /opt/upload/nginx.conf --host 10.0.0.2 --json
145
145
 
146
146
  ## Agent Skills
147
147
 
148
- 本工具附带一份 `SKILL.md`,教 AI 助手何时用、怎么用 `rrs`。安装后用 `rrs setup skills` 一键分发到各 agent 的 skills 目录:
148
+ 本工具附带一份 `SKILL.md`,教 AI 助手何时用、怎么用 `rrs`。**`npm install` 时 postinstall 会自动分发**(agents 实体 + opencode/claude/qoder 软链接),无需手工执行;`rrs setup skills` 保留为手工重装 / 只装部分 agent 的方式:
149
149
 
150
150
  | `--agent` | 写入方式 | 路径 |
151
151
  |-----------|----------|------|
@@ -155,17 +155,16 @@ rrs upload "E:\deploy\nginx.conf" /opt/upload/nginx.conf --host 10.0.0.2 --json
155
155
  | `qoder` | 软链接 → agents | `~/.qoder/skills/remote-readonly-ssh/SKILL.md` |
156
156
  | `all`(默认) | 实体 + 上述 3 个软链接 | 一行命令装齐 |
157
157
 
158
- `rrs setup skills` 默认 `agent=all`(不询问,直接装),输出一行简明提示:
158
+ `rrs setup skills` 默认 `agent=all`(不询问,直接装;postinstall 自动分发亦采用此默认),输出一行简明提示:
159
159
 
160
160
  ```
161
161
  rrs skill 已安装: agents (实体), opencode/claude/qoder (软链接)
162
162
  ```
163
163
 
164
- > **Windows 注意**:普通用户缺少 `SeCreateSymbolicLinkPrivilege`,软链接创建会被 OS 拒绝;rrs 会自动 fallback 为复制,并提示"Windows 已 fallback 为复制(请开启开发者模式以启用真软链接)"。开启开发者模式后重新跑 `rrs setup skills` 即可使用真软链接。
164
+ > **Windows 注意**:普通用户缺少 `SeCreateSymbolicLinkPrivilege`,软链接创建会被 OS 拒绝;rrs 会自动 fallback 为复制,并提示"Windows 已 fallback 为复制(请开启开发者模式以启用真软链接)"。开启开发者模式后重新跑 `rrs setup skills`(或重装包)即可使用真软链接。
165
165
 
166
166
  ```bash
167
- rrs setup skills # 一行命令装齐(实体 + 3 个软链接)
168
- npx -y @zicolasjac-ai/remote-readonly-ssh@latest setup skills # 全局未装时用 npx
167
+ rrs setup skills # 手工重装(正常情况 npm install 已自动分发)
169
168
  rrs setup skills --agent opencode # 只装 opencode 链接(agents 实体也自动建)
170
169
  rrs setup skills --agent qoder # 只装 qoder 链接
171
170
  rrs setup skills --dry-run # 仅预览将要创建的目标
@@ -7,7 +7,28 @@ const path = require("path");
7
7
 
8
8
  const PACKAGE_ROOT = path.join(__dirname, "..");
9
9
 
10
+ /**
11
+ * npm 安装完成后自动把 SKILL.md 分发到各 AI 助手的 skills 目录(agents 实体 + 软链接),
12
+ * 使 "npm install -g @latest" 一步完成 CLI 与 AI skill 的同步升级;失败不阻塞安装。
13
+ * 幂等:重复安装/升级会重建实体与软链(Windows 无符号链接权限时自动退化为复制)。
14
+ */
15
+ function autoInstallSkills() {
16
+ try {
17
+ const results = setupSkill.install(PACKAGE_ROOT, { agent: "all" });
18
+ const canonical = results.find((r) => r.agent === "agents");
19
+ const links = results.filter((r) => r.agent !== "agents");
20
+ const anyFallback = links.some((r) => r.fallback);
21
+ const names = links.map((r) => r.agent).join("/");
22
+ const done = canonical && links.length ? `agents (实体), ${names} (软链接)` : canonical ? "agents (实体)" : names;
23
+ console.log(`rrs AI skill 已同步: ${done}${anyFallback ? " — Windows 已自动 fallback 为复制(开启开发者模式可获得真软链接)" : ""}`);
24
+ } catch (e) {
25
+ console.error(`[rrs postinstall] AI skill 自动分发失败(不影响 CLI 使用): ${e.message}`);
26
+ console.error("可稍后手动执行: rrs setup skills");
27
+ }
28
+ }
29
+
10
30
  (async () => {
31
+ autoInstallSkills();
11
32
  const tty = process.stdin.isTTY && process.stdout.isTTY;
12
33
  if (tty) {
13
34
  try {
@@ -19,9 +40,9 @@ const PACKAGE_ROOT = path.join(__dirname, "..");
19
40
  } else {
20
41
  console.log("");
21
42
  console.log("rrs 安装完成。下一步:");
22
- console.log(" rrs init # 交互式初始化 + 安装 AI skill(推荐)");
23
- console.log(" rrs setup skills # 仅安装 AI skill 到 opencode / claude 等");
43
+ console.log(" rrs init # 交互式初始化配置(首次安装必跑;向导不再询问 skill 安装,见上)");
44
+ console.log(" rrs setup skills --agent opencode # 如需只分发部分 AI 助手(默认已全量分发)");
24
45
  console.log(" rrs list-tools # 查看白名单与配置");
25
46
  console.log("");
26
47
  }
27
- })();
48
+ })();
package/bin/rrs.js CHANGED
@@ -182,7 +182,7 @@ function buildCmds(tool, arg, conf) {
182
182
  }
183
183
 
184
184
  function listTools(conf) {
185
- console.log("可用只读工具:");
185
+ console.log("可用工具:");
186
186
  const tools = {
187
187
  "sys-info": "主机名/OS/内核/uptime",
188
188
  "proc <pattern>": "进程查询",
@@ -191,6 +191,8 @@ function listTools(conf) {
191
191
  "dir <path>": "列目录",
192
192
  "bin-version <bin>": "查版本(二进制白名单)",
193
193
  "exec-only <cmd>": "通用只读命令(白名单校验)",
194
+ "download <远程> <本地>": "下载单文件(SFTP:direct 直连或 koko 网关)",
195
+ "upload <本地> <远程>": "上传单文件(写操作,opt-in + 写路径白名单)",
194
196
  };
195
197
  for (const [k, v] of Object.entries(tools)) console.log(` ${k.padEnd(20)} ${v}`);
196
198
  const profiles = conf.auth_profiles || {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zicolasjac-ai/remote-readonly-ssh",
3
- "version": "1.4.2",
3
+ "version": "1.4.4",
4
4
  "description": "只读 SSH 运维 CLI 与 Agent Skill:通过 JumpServer 堡垒机白名单强制执行只读查询;认证组支持 SSH 私钥/密码两种模式与按 IP 分组;附 SKILL.md 让 opencode / Claude Code / Cursor 等 AI 助手自动发现并正确调用。",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -34,11 +34,10 @@ metadata:
34
34
  ## Setup(用户一次性)
35
35
 
36
36
  ```bash
37
- npm install -g @zicolasjac-ai/remote-readonly-ssh
38
- rrs init # 生成配置模板 ~/.rrs/config.json
37
+ npm install -g @zicolasjac-ai/remote-readonly-ssh # postinstall 自动把 SKILL.md 分发到 opencode / claude / agents 等目录
38
+ rrs init # 生成配置模板 ~/.rrs/config.json(TTY 下为交互向导)
39
39
  # 编辑配置: auth_profiles(认证组,key/password 两种模式,可多个;direct:true 表示跳过堡垒机菜单直连裸机)
40
- # target_hosts(IP → 认证组+搜索关键字,多 IP 可共用一组)
41
- rrs setup skills # 把本 skill 安装到 opencode / claude / agents 等目录
40
+ # target_hosts(IP → 认证组+搜索关键字,多 IP 可共用一组;可选 sftp_root 声明 koko 资产树目录)
42
41
  ```
43
42
 
44
43
  ## Usage