protara 0.3.6 → 0.3.9

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.
Files changed (3) hide show
  1. package/README.md +157 -5
  2. package/dist/cli/index.cjs +58762 -40089
  3. package/package.json +4 -4
package/README.md CHANGED
@@ -19,14 +19,74 @@ protara --version
19
19
 
20
20
  CLI 用**独立的**登录态(`credentials.cli.json`),不与桌面端共享 —— 服务端的刷新令牌一次一换,共用一份会互相踢下线。
21
21
 
22
+ ### 两种登录方式:`--login` 会问你一句
23
+
24
+ ```bash
25
+ protara --login
26
+ ```
27
+
28
+ ```
29
+ protara: 登录方式:
30
+ 1) 设备码登录 —— 在浏览器里确认一下(有浏览器时最省事)
31
+ 2) 用户名密码登录 —— 没有浏览器时用(SSH / CI)
32
+ 回车 = 1(设备码)
33
+ protara: 选择 [1/2]:
34
+ ```
35
+
36
+ - **1 / 回车** → 设备码:浏览器里确认一下就完成
37
+ - **2** → 用户名密码:接着问用户名(回显),密码**不回显**
38
+
39
+ **为什么密码登录需要被发现**:SSH 到远程机器、CI、纯终端环境里拿不到浏览器时,设备码走不通
40
+ (`user_code` 可以手输,但那要另一台设备先打开浏览器)。这时密码登录是唯一可用的路径。
41
+
42
+ ### 直接指定,跳过询问
43
+
44
+ ```bash
45
+ protara --login --password # 跳过菜单,直接用账号密码
46
+ protara --login --password --username alice # 用户名也给定
47
+ ```
48
+
49
+ ⚠️ **非交互环境(CI / 管道)不会弹菜单**,自动按设备码走 —— 脚本里 `protara --login`
50
+ 的行为与以前完全一致,不会被卡在等输入。
51
+
52
+ ### 脚本化登录(CI / 自动化)
53
+
54
+ ```bash
55
+ # 方式一:从 stdin 读(推荐,密码不进 shell 历史、不进 ps)
56
+ echo "$MY_PASSWORD" | protara --login --password-stdin --username alice
57
+
58
+ # 方式二:环境变量
59
+ PROTARA_PASSWORD="$MY_PASSWORD" protara --login --password --username alice
60
+ ```
61
+
62
+ ⚠️ **刻意没有 `--password <明文>`**:那会把密码写进 shell 历史、`ps` 的命令行、以及 CI 日志。
63
+ 这不是没做,是不提供。
64
+
65
+ ⚠️ 密码输入**一个字符都不回显**(连 `*` 都没有)—— 终端回滚、tmux `capture-pane`、
66
+ 屏幕共享都可能留下屏幕内容,密码长度也是信息。
67
+
68
+ ### 首登会被要求改密
69
+
70
+ 如果输出里有这句:
71
+
72
+ ```
73
+ protara: ⚠️ 这个账号首次登录需要先改密码。请用浏览器登录平台改密后再回来用 CLI
74
+ ```
75
+
76
+ 说明服务端判了 `must_change_password`。**令牌是有效的**(登录确实成功了),但改密前多数
77
+ 操作会被拒绝。去 Web 端改一次密码再回来。
78
+
79
+ ### 排障
80
+
22
81
  ```bash
23
- protara --login # 走设备码:浏览器里确认一下就完成
24
- protara status # 查登录态 / 凭据路径 / 终端指纹(排障入口)
82
+ protara status # 登录态 / 凭据路径 / 作用域根 / 终端指纹
25
83
  ```
26
84
 
27
85
  ## 用法
28
86
 
29
87
  ```bash
88
+ protara agents # 列出可用 Agent(含 id / 默认模型)
89
+ protara --agent <id> -p "…" # 指定 Agent 提问
30
90
  protara # 交互界面(需要真 TTY)
31
91
  protara -p "帮我看下这个仓库" # 一次性提问;stdout 只有答案正文
32
92
  cat log.txt | protara -p - # 从管道读正文
@@ -46,6 +106,43 @@ protara --help # 全部参数 + 退出码表
46
106
 
47
107
  `-p` 模式下 **stdout 保证纯净**:所有诊断走 stderr 且带 `protara:` 前缀,或写进日志文件。
48
108
 
109
+ ### 切换 Agent
110
+
111
+ 先看有哪些(`--agent` 要的是 `id`,不是名字):
112
+
113
+ ```bash
114
+ protara agents
115
+ ```
116
+
117
+ ```
118
+ ✓ 2 个可用 Agent
119
+
120
+ desktop 优联智能文档(默认)
121
+ 面向内部文档平台的通用助手:能读写工作区文件、跑命令、查技能库
122
+ 默认模型 claude-sonnet-4
123
+ 可选模型 gpt-4o
124
+
125
+ code-reviewer 代码审查助手
126
+ 默认模型 claude-sonnet-4
127
+ ```
128
+
129
+ 然后指定:
130
+
131
+ ```bash
132
+ protara --agent code-reviewer -p "审查一下这个 diff"
133
+ protara --agent code-reviewer --model gpt-4o -p "…" # 同时换模型
134
+ ```
135
+
136
+ **不给 `--agent` 时用内置的 `cli` Agent**(终端专用:工具清单里没有浏览器 / 文档编辑,
137
+ 因为那两套运行时装不进这个 3.3 MB 的包)。它**不出现在上面的列表里** ——
138
+ 它是 CLI 的实现细节,不是给你选的。
139
+
140
+ ⚠️ **Agent 在「建会话」那一刻冻结**,之后不能中途切换 —— 想换就开一个新会话
141
+ (不加 `--session` / `--resume-last` 就是新会话)。这是服务端的口径:
142
+ 会话的 `agent_id` 创建后不可变,因为权限档位、技能集、工具清单都在那时定下了。
143
+
144
+ `protara agents --json` 给脚本用:`{ ok: true, agents: [...] }`(`default: true` 标出默认那个)。
145
+
49
146
  ### 退出码
50
147
 
51
148
  | 码 | 含义 |
@@ -86,10 +183,65 @@ $DESKTOP_HOME/logs/cli.log # 默认 ~/.desktop-agents/logs/cli.log
86
183
  连接器要重新「去认证」一次。
87
184
  3. **凭据目前是明文 `0600` 文件**(refresh 令牌寿命 30 天)。在共享机器上慎用 `--login`。
88
185
 
89
- ## 当前未支持
186
+ ## 能做什么 / 不能做什么
187
+
188
+ CLI 与桌面端**共用同一份工具执行器**,但装配不同 —— 差别只有「有没有那个运行时」。
189
+
190
+ ### ✅ 能用的本机工具(13 条)
191
+
192
+ | 类别 | 工具 |
193
+ |---|---|
194
+ | 文件读写 | `read` / `write` / `edit` / `delete`(废纸篓通道缺省,见下) |
195
+ | 查找 | `grep` / `find` / `glob` / `ls` |
196
+ | 执行 | `bash`(任意命令、可后台) |
197
+ | 技能 | `load_skill` |
198
+ | 传输 | `upload_file` / `download_file`(只要登录态) |
199
+
200
+ 外加:**MCP 连接器工具**(`mcp.json` 与桌面端共享,但授权令牌不共享)、
201
+ `tool_search`(连接器工具的延迟加载检索)。
202
+
203
+ ### ❌ 不能用的两条(会**明确告诉你**,不静默失败)
204
+
205
+ | 工具 | CLI 里的返回 |
206
+ |---|---|
207
+ | `browser`(浏览器操作) | `本客户端没有装配浏览器通道(找不到随包分发的 bsk 运行时)…` |
208
+ | `univer`(文档编辑) | `本客户端没有装配文档编辑通道(找不到随包分发的 univer 运行时)…` |
209
+
210
+ **为什么**:这两个能力依赖**随包分发的大体积运行时**,而 npm 包只有 3.3 MB:
211
+
212
+ | 载荷 | 体积 |
213
+ |---|---|
214
+ | `bsk`(浏览器操作二进制,含 Chromium 驱动) | 23 MB |
215
+ | `univer`(文档编辑:Node 运行时 + 公式/排版/导入导出四份原生模块) | **2.0 GB** |
216
+
217
+ 把 2 GB 塞进 npm 包不现实(npm 单包上限 500 MB,且装一次要几分钟)。
218
+ 所以 CLI 里这两条**如实拒绝**,⛔ 不会偷偷用 `bash` 去跑 —— 那会绕过整条权限口径。
219
+
220
+ > 需要浏览器自动化 / 文档编辑:请用**桌面端**(它随包带了这两套载荷)。
221
+ > 在 CLI 里模型会看到这两条工具(清单与桌面端同一份),调用后收到上面那句拒绝,
222
+ > 然后自己改用 `bash` + 其他方式,或者告诉你「这个我做不了」。
223
+
224
+ ### ✅ 交互界面里的键盘
225
+
226
+ | 键 | 作用 |
227
+ |---|---|
228
+ | `Enter` | 发送 |
229
+ | `Alt+Enter` / `Ctrl+J` | **换行**(可写多行,2026-11-12 起支持) |
230
+ | `Ctrl+C` | 中断当前回合;空闲时退出(会先收掉本机后台进程) |
231
+ | `Ctrl+D` | 退出(**输入框为空时**;有内容时是删掉光标后的字符) |
232
+ | `Ctrl+U` / `Ctrl+K` | 删到行首 / 行尾 |
233
+ | `Ctrl+P` 或 `/plan` | 展开 / 收起任务计划条 |
234
+
235
+ 模型中途要你决定时(`ask_user` 工具),界面会画出选项让你选序号或直接打字;
236
+ 没有交互终端(`-p` / CI)时默认回一条「用户取消」让模型换思路 ——
237
+ 要让它自动取第一项就用 `--ask-user=first`(⚠️ 会静默替你决定,慎用)。
238
+
239
+ ### ❌ 其他没做的
240
+
241
+ 连接器「去认证」交互面板、作业角标面板、diff 分页、图片拖入、Windows 上的沙箱助手。
90
242
 
91
- 连接器「去认证」交互面板、计划条、作业角标面板、diff 分页、图片拖入、多行编辑框
92
- (TUI 逐行提交)、Windows 上的沙箱助手。
243
+ > ⚠️ 这份清单要与代码保持一致:**计划条**与**多行编辑框**已在 2026-11-12 实现
244
+ > (见 `docs/desktop-cli-tui-pi-reuse-design.md` §14),已从上表移走。
93
245
 
94
246
  ## 环境变量
95
247