u1s1-cli-cn 1.18.0 → 1.20.0

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 (43) hide show
  1. package/dist/agents/agent-config.d.ts +1 -1
  2. package/dist/agents/agent-config.js +1 -1
  3. package/dist/agents/claude.d.ts +4 -1
  4. package/dist/agents/claude.js +6 -3
  5. package/dist/agents/codex.d.ts +4 -1
  6. package/dist/agents/codex.js +6 -3
  7. package/dist/agents/custom-models.d.ts +61 -0
  8. package/dist/agents/custom-models.js +175 -0
  9. package/dist/agents/dsh.d.ts +90 -0
  10. package/dist/agents/dsh.js +243 -0
  11. package/dist/agents/launch.d.ts +24 -2
  12. package/dist/agents/launch.js +115 -15
  13. package/dist/agents/models-list.d.ts +65 -0
  14. package/dist/agents/models-list.js +297 -0
  15. package/dist/agents/node-runtime.d.ts +91 -0
  16. package/dist/agents/node-runtime.js +223 -0
  17. package/dist/agents/runtime.d.ts +26 -3
  18. package/dist/agents/runtime.js +50 -14
  19. package/dist/agents/status.d.ts +4 -0
  20. package/dist/agents/status.js +32 -7
  21. package/dist/api.d.ts +2 -0
  22. package/dist/chat-protocol/anthropic.d.ts +29 -0
  23. package/dist/chat-protocol/anthropic.js +484 -0
  24. package/dist/chat-protocol/json.d.ts +20 -0
  25. package/dist/chat-protocol/json.js +22 -0
  26. package/dist/chat-protocol/responses.d.ts +97 -0
  27. package/dist/chat-protocol/responses.js +1076 -0
  28. package/dist/chat-protocol/sse.d.ts +19 -0
  29. package/dist/chat-protocol/sse.js +67 -0
  30. package/dist/chat-protocol/thinking.d.ts +22 -0
  31. package/dist/chat-protocol/thinking.js +58 -0
  32. package/dist/config-command.d.ts +1 -1
  33. package/dist/config-command.js +20 -10
  34. package/dist/config.d.ts +23 -1
  35. package/dist/config.js +52 -1
  36. package/dist/custom-endpoint-proxy.d.ts +92 -0
  37. package/dist/custom-endpoint-proxy.js +461 -0
  38. package/dist/device-auth.d.ts +14 -3
  39. package/dist/device-auth.js +36 -2
  40. package/dist/index.js +12 -3
  41. package/dist/launcher.d.ts +5 -1
  42. package/dist/launcher.js +35 -11
  43. package/package.json +1 -1
package/dist/launcher.js CHANGED
@@ -1,14 +1,15 @@
1
1
  /**
2
2
  * 启动器:选择器与分发。一个命令 `u1s1`,可以启动内置的 Pi,也可以启动用户机器上的官方原版客户端。
3
3
  *
4
- * u1s1 pi|claude|codex [参数…] 指定客户端,后面的参数原样传给它
4
+ * u1s1 pi|claude|codex|dsh [参数…] 指定客户端,后面的参数原样传给它(dsh 不带子命令时进网页界面)
5
5
  * u1s1 [参数…] 默认客户端;存量用户(已有配置、没有默认客户端字段)默认 Pi,
6
6
  * 全新用户首次运行出选择器并记住
7
7
  * u1s1 use <客户端> 改默认
8
8
  * u1s1 agents [pin|unpin|install …] 安装状态、版本、是否有更新;锁定版本;只下载不启动
9
+ * u1s1 agents models [--json] 各客户端可用的模型(带显示名),给 Hearth 等前端用;不登录、秒回
9
10
  * u1s1 config [list|get|set|unset …] 用户可调的设置(默认客户端、各客户端默认模型、自动更新),见 config-command.ts
10
11
  *
11
- * claude / codex 是否可用完全由网关配置(/v1/agents/:agent/config 的 enabled)决定,这里不写死。
12
+ * claude / codex / dsh 是否可用完全由网关配置(/v1/agents/:agent/config 的 enabled)决定,这里不写死。
12
13
  *
13
14
  * 现有子命令(login、usage、model、update、deploy 等)在 index.ts 里先于这里处理,行为不变。
14
15
  */
@@ -17,7 +18,7 @@ import { createInterface } from "node:readline/promises";
17
18
  import { agentSettingsFile, isDefaultAgent, loadConfig, readRawConfigFile, saveDefaultAgent, } from "./config.js";
18
19
  import { tr } from "./i18n.js";
19
20
  /** 启动器的保留字:不会再当 prompt 交给默认客户端。 */
20
- export const LAUNCHER_WORDS = ["pi", "claude", "codex", "use", "agents", "config"];
21
+ export const LAUNCHER_WORDS = ["pi", "claude", "codex", "dsh", "use", "agents", "config"];
21
22
  export function isLauncherWord(word) {
22
23
  return LAUNCHER_WORDS.includes(word);
23
24
  }
@@ -32,6 +33,7 @@ export function resolveDispatch(args, ctx) {
32
33
  case "pi":
33
34
  case "claude":
34
35
  case "codex":
36
+ case "dsh":
35
37
  return { kind: "agent", agent: first, args: rest, via: "explicit" };
36
38
  case "use":
37
39
  return { kind: "use", args: rest };
@@ -103,7 +105,9 @@ async function launch(agent, args) {
103
105
  }
104
106
  const code = agent === "codex"
105
107
  ? await (await import("./agents/codex.js")).runCodex(args)
106
- : await (await import("./agents/claude.js")).runClaude(args);
108
+ : agent === "dsh"
109
+ ? await (await import("./agents/dsh.js")).runDsh(args)
110
+ : await (await import("./agents/claude.js")).runClaude(args);
107
111
  // 签名代理是 unref 的,子进程退出后不必等;直接带着子进程的退出码退出
108
112
  process.exit(code);
109
113
  }
@@ -120,6 +124,10 @@ const OPTIONS = [
120
124
  agent: "codex",
121
125
  line: () => tr("codex 官方 Codex CLI,首次使用时下载", "codex Official Codex CLI, downloaded on first use"),
122
126
  },
127
+ {
128
+ agent: "dsh",
129
+ line: () => tr("dsh DeepSeek Harness(网页界面),首次使用时下载", "dsh DeepSeek Harness (web UI), downloaded on first use"),
130
+ },
123
131
  ];
124
132
  export function parseSelection(answer) {
125
133
  const a = answer.trim().toLowerCase();
@@ -151,7 +159,7 @@ async function selectAgent() {
151
159
  function useCommand(args) {
152
160
  const target = args[0];
153
161
  if (!isDefaultAgent(target)) {
154
- console.error(tr("用法: u1s1 use <pi|claude|codex>", "Usage: u1s1 use <pi|claude|codex>"));
162
+ console.error(tr("用法: u1s1 use <pi|claude|codex|dsh>", "Usage: u1s1 use <pi|claude|codex|dsh>"));
155
163
  process.exitCode = target === undefined || target === "--help" || target === "-h" ? 0 : 1;
156
164
  return;
157
165
  }
@@ -167,10 +175,10 @@ async function agentsCommand(args) {
167
175
  return;
168
176
  }
169
177
  if (sub === "pin" || sub === "unpin") {
170
- if (agent !== "claude" && agent !== "codex") {
178
+ if (agent !== "claude" && agent !== "codex" && agent !== "dsh") {
171
179
  console.error(sub === "pin"
172
- ? tr("用法: u1s1 agents pin <claude|codex> <版本>", "Usage: u1s1 agents pin <claude|codex> <version>")
173
- : tr("用法: u1s1 agents unpin <claude|codex>", "Usage: u1s1 agents unpin <claude|codex>"));
180
+ ? tr("用法: u1s1 agents pin <claude|codex|dsh> <版本>", "Usage: u1s1 agents pin <claude|codex|dsh> <version>")
181
+ : tr("用法: u1s1 agents unpin <claude|codex|dsh>", "Usage: u1s1 agents unpin <claude|codex|dsh>"));
174
182
  process.exitCode = 1;
175
183
  return;
176
184
  }
@@ -178,13 +186,19 @@ async function agentsCommand(args) {
178
186
  process.exitCode = sub === "pin" ? await pinCommand(version, agent) : unpinCommand(agent);
179
187
  return;
180
188
  }
189
+ if (sub === "models") {
190
+ // 不经 ensureAuth:未登录直接输出 loggedIn:false;联网只做短超时刷新,失败用缓存
191
+ const { modelsCommand } = await import("./agents/models-list.js");
192
+ process.exitCode = await modelsCommand(args.slice(1));
193
+ return;
194
+ }
181
195
  if (sub === "install") {
182
196
  if (agent === "pi" && version === undefined) {
183
197
  console.log(tr("pi 随 u1s1 一起安装,不用单独下载。", "pi ships with u1s1; nothing to download."));
184
198
  return;
185
199
  }
186
- if ((agent !== "claude" && agent !== "codex") || version !== undefined) {
187
- console.error(tr("用法: u1s1 agents install <claude|codex>", "Usage: u1s1 agents install <claude|codex>"));
200
+ if ((agent !== "claude" && agent !== "codex" && agent !== "dsh") || version !== undefined) {
201
+ console.error(tr("用法: u1s1 agents install <claude|codex|dsh>", "Usage: u1s1 agents install <claude|codex|dsh>"));
188
202
  process.exitCode = 1;
189
203
  return;
190
204
  }
@@ -205,9 +219,10 @@ function agentsHelpLines() {
205
219
  return [
206
220
  tr("用法:", "Usage:"),
207
221
  tr(" u1s1 agents 查看各客户端的安装状态、版本、是否有更新", " u1s1 agents Show each client's install status, version and updates"),
208
- tr(" u1s1 agents install <客户端> 下载或更新到可用版本,不启动(claude / codex)", " u1s1 agents install <client> Download or update to a usable version without launching (claude / codex)"),
222
+ tr(" u1s1 agents install <客户端> 下载或更新到可用版本,不启动(claude / codex / dsh)", " u1s1 agents install <client> Download or update to a usable version without launching (claude / codex / dsh)"),
209
223
  tr(" u1s1 agents pin <客户端> <版本> 锁定版本(不超出允许的范围)", " u1s1 agents pin <client> <ver> Pin a version (within the allowed range)"),
210
224
  tr(" u1s1 agents unpin <客户端> 解除锁定,恢复自动更新", " u1s1 agents unpin <client> Remove the pin and resume automatic updates"),
225
+ tr(" u1s1 agents models [--json] 列出各客户端可用的模型(带显示名);--offline 只读本地缓存", " u1s1 agents models [--json] List each client's models with display names; --offline reads local caches only"),
211
226
  ];
212
227
  }
213
228
  // ---------------------------------------------------------------- help
@@ -215,3 +230,12 @@ function agentsHelpLines() {
215
230
  export function launcherHelpRow() {
216
231
  return ["u1s1 pi|claude|codex", tr("用指定客户端启动,后面的参数原样传入", "Start a specific client; extra args are passed through")];
217
232
  }
233
+ /**
234
+ * `u1s1 --help` 里 dsh 单独一行(它没有终端界面,默认进网页界面)。Hearth 按这一行判断 CLI 支不支持 `u1s1 dsh`。
235
+ */
236
+ export function dshHelpRow() {
237
+ return [
238
+ "u1s1 dsh [web|headless]",
239
+ tr("启动 DeepSeek Harness;不带子命令时打开网页界面,参数原样传入", "Start DeepSeek Harness; opens its web UI by default, extra args are passed through"),
240
+ ];
241
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "u1s1-cli-cn",
3
- "version": "1.18.0",
3
+ "version": "1.20.0",
4
4
  "description": "u1s1 — 有一说一,最省心的 AI 编程搭子。终端里用中文说需求,AI 帮你读文件、改代码、跑命令。",
5
5
  "type": "module",
6
6
  "bin": {