@co0ontty/wand 4.73.0 → 4.75.1-beta.gbf7dafd

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 (62) hide show
  1. package/dist/build-info.json +4 -4
  2. package/dist/claude-sdk-runner.d.ts +2 -3
  3. package/dist/config.d.ts +1 -1
  4. package/dist/config.js +28 -0
  5. package/dist/message-truncator.js +3 -3
  6. package/dist/models.d.ts +39 -2
  7. package/dist/models.js +302 -9
  8. package/dist/native/darwin-arm64/wand-render +0 -0
  9. package/dist/native/darwin-arm64/wand-render.sha256 +1 -1
  10. package/dist/native/darwin-arm64/wand-render.version +1 -1
  11. package/dist/native/darwin-arm64/wand-structured-renderd +0 -0
  12. package/dist/native/darwin-arm64/wand-structured-renderd.sha256 +1 -0
  13. package/dist/native/darwin-arm64/wand-structured-renderd.version +1 -0
  14. package/dist/native/darwin-x64/wand-render +0 -0
  15. package/dist/native/darwin-x64/wand-render.sha256 +1 -1
  16. package/dist/native/darwin-x64/wand-render.version +1 -1
  17. package/dist/native/darwin-x64/wand-structured-renderd +0 -0
  18. package/dist/native/darwin-x64/wand-structured-renderd.sha256 +1 -0
  19. package/dist/native/darwin-x64/wand-structured-renderd.version +1 -0
  20. package/dist/native/linux-arm64/wand-render +0 -0
  21. package/dist/native/linux-arm64/wand-render.sha256 +1 -1
  22. package/dist/native/linux-arm64/wand-render.version +1 -1
  23. package/dist/native/linux-arm64/wand-structured-renderd +0 -0
  24. package/dist/native/linux-arm64/wand-structured-renderd.sha256 +1 -0
  25. package/dist/native/linux-arm64/wand-structured-renderd.version +1 -0
  26. package/dist/native/linux-x64/wand-render +0 -0
  27. package/dist/native/linux-x64/wand-render.sha256 +1 -1
  28. package/dist/native/linux-x64/wand-render.version +1 -1
  29. package/dist/native/linux-x64/wand-structured-renderd +0 -0
  30. package/dist/native/linux-x64/wand-structured-renderd.sha256 +1 -0
  31. package/dist/native/linux-x64/wand-structured-renderd.version +1 -0
  32. package/dist/process-manager.d.ts +2 -1
  33. package/dist/process-manager.js +15 -3
  34. package/dist/pty-terminal-state.d.ts +17 -0
  35. package/dist/pty-terminal-state.js +51 -1
  36. package/dist/render-daemon-client.d.ts +33 -2
  37. package/dist/render-daemon-client.js +66 -16
  38. package/dist/render-host.d.ts +27 -3
  39. package/dist/render-host.js +156 -17
  40. package/dist/server-session-routes.js +42 -3
  41. package/dist/server-task-routes.js +3 -3
  42. package/dist/server.js +12 -4
  43. package/dist/session-ai-context.d.ts +1 -1
  44. package/dist/session-ai-context.js +15 -4
  45. package/dist/session-logger.d.ts +2 -0
  46. package/dist/session-logger.js +44 -1
  47. package/dist/structured-grok-adapter.js +22 -0
  48. package/dist/structured-provider-common.d.ts +11 -9
  49. package/dist/structured-provider-common.js +60 -18
  50. package/dist/task-types.d.ts +2 -1
  51. package/dist/terminal-daemon-server.js +27 -4
  52. package/dist/tui/commands.js +183 -10
  53. package/dist/types.d.ts +11 -9
  54. package/dist/wand-task-sync.js +2 -1
  55. package/dist/web-ui/content/scripts.js +78 -72
  56. package/dist/web-ui/content/styles.css +1 -1
  57. package/dist/web-ui/content/tailwind.css +9 -0
  58. package/dist/web-ui/embedded-assets.js +2 -2
  59. package/dist/web-ui/thinking-efforts.d.ts +24 -0
  60. package/dist/web-ui/thinking-efforts.js +81 -0
  61. package/dist/ws-broadcast.js +11 -4
  62. package/package.json +1 -1
@@ -0,0 +1,24 @@
1
+ /**
2
+ * 思考档位下拉。
3
+ *
4
+ * 旧的 off/standard/deep/max 继续表示「不覆盖 / 各 CLI 的低、中、高档」,
5
+ * CLI 新报出来的档位用 `provider:level` 存,避免和旧的 max 撞车。
6
+ */
7
+ export interface CliThinkingEffort {
8
+ effort: string;
9
+ description?: string;
10
+ }
11
+ export interface ThinkingChoice {
12
+ id: string;
13
+ /** CLI 原生档位名,例如 low / xhigh。off 档的 label 是 auto。 */
14
+ label: string;
15
+ hint: string;
16
+ }
17
+ /** 能和旧四档对上的原生档位继续用旧 id,其余写成 `provider:level`。 */
18
+ export declare function thinkingChoiceId(provider: string, native: string): string;
19
+ export declare function compactThinkingLabel(native: string): string;
20
+ /**
21
+ * 用 CLI 报出的档位生成下拉。完全没有档位时返回 null,调用方继续用旧的四档兜底。
22
+ * 模型明确只支持 off 时只保留「不覆盖」。原生 off 不重复列出。
23
+ */
24
+ export declare function dynamicThinkingChoices(provider: string, efforts: readonly CliThinkingEffort[], defaultEffort?: string): ThinkingChoice[] | null;
@@ -0,0 +1,81 @@
1
+ /**
2
+ * 思考档位下拉。
3
+ *
4
+ * 旧的 off/standard/deep/max 继续表示「不覆盖 / 各 CLI 的低、中、高档」,
5
+ * CLI 新报出来的档位用 `provider:level` 存,避免和旧的 max 撞车。
6
+ */
7
+ const LEGACY_NATIVE = {
8
+ claude: { standard: "low", deep: "medium", max: "max" },
9
+ codex: { standard: "low", deep: "medium", max: "xhigh" },
10
+ opencode: { standard: "low", deep: "high", max: "max" },
11
+ grok: { standard: "low", deep: "high", max: "xhigh" },
12
+ qoder: { standard: "low", deep: "high", max: "max" },
13
+ pi: { standard: "low", deep: "high", max: "max" },
14
+ };
15
+ const COMPACT_LABELS = {
16
+ auto: "自动",
17
+ none: "关闭",
18
+ minimal: "最低",
19
+ low: "低",
20
+ medium: "中",
21
+ high: "高",
22
+ xhigh: "超高",
23
+ max: "极高",
24
+ ultra: "极限",
25
+ ultracode: "极限代码",
26
+ };
27
+ /** 能和旧四档对上的原生档位继续用旧 id,其余写成 `provider:level`。 */
28
+ export function thinkingChoiceId(provider, native) {
29
+ const legacy = LEGACY_NATIVE[provider];
30
+ if (legacy?.standard === native)
31
+ return "standard";
32
+ if (legacy?.deep === native)
33
+ return "deep";
34
+ if (legacy?.max === native)
35
+ return "max";
36
+ return `${provider}:${native}`;
37
+ }
38
+ export function compactThinkingLabel(native) {
39
+ return COMPACT_LABELS[native] ?? native;
40
+ }
41
+ /**
42
+ * 用 CLI 报出的档位生成下拉。完全没有档位时返回 null,调用方继续用旧的四档兜底。
43
+ * 模型明确只支持 off 时只保留「不覆盖」。原生 off 不重复列出。
44
+ */
45
+ export function dynamicThinkingChoices(provider, efforts, defaultEffort) {
46
+ const reported = efforts
47
+ .map((level) => level.effort.trim().toLowerCase())
48
+ .filter((effort) => /^[a-z][a-z0-9_-]{0,31}$/.test(effort));
49
+ if (!reported.length)
50
+ return null;
51
+ const natives = efforts
52
+ .map((level) => ({
53
+ effort: level.effort.trim().toLowerCase(),
54
+ description: level.description?.trim() || "",
55
+ }))
56
+ .filter((level) => /^[a-z][a-z0-9_-]{0,31}$/.test(level.effort) && level.effort !== "off");
57
+ if (!natives.length) {
58
+ return [{
59
+ id: "off",
60
+ label: "auto",
61
+ hint: "这个模型不能调思考深度",
62
+ }];
63
+ }
64
+ const hint = defaultEffort
65
+ ? `使用模型默认档位(${defaultEffort})`
66
+ : "使用模型默认档位";
67
+ const choices = [{ id: "off", label: "auto", hint }];
68
+ const seen = new Set(["off"]);
69
+ for (const level of natives) {
70
+ const id = thinkingChoiceId(provider, level.effort);
71
+ if (seen.has(id))
72
+ continue;
73
+ seen.add(id);
74
+ choices.push({
75
+ id,
76
+ label: level.effort,
77
+ hint: level.description || level.effort,
78
+ });
79
+ }
80
+ return choices;
81
+ }
@@ -344,20 +344,27 @@ export class WsBroadcastManager {
344
344
  * and the first incremental update.
345
345
  */
346
346
  sendInit(client, sessionId, snapshot, resync) {
347
- // 块级窗口客户端(iOS)只下发最近 blockBudget 个块;其余走 turn 级窗口。
347
+ // 块级窗口客户端(Web/iOS)只下发最近 blockBudget 个块;其余走 turn 级窗口。
348
348
  // 两种都附 offset/total,更早的客户端按需翻页。
349
349
  const windowed = this.windowForClient(client, sessionId, snapshot.messages);
350
350
  const seq = (client.outputSeqBySession.get(sessionId) ?? 0) + 1;
351
351
  client.outputSeqBySession.set(sessionId, seq);
352
352
  client.pendingResyncSessions.delete(sessionId);
353
+ const terminalState = (snapshot.sessionKind ?? "pty") === "pty"
354
+ ? this.port?.getTerminalState?.(sessionId) ?? undefined
355
+ : undefined;
353
356
  client.ws.send(JSON.stringify({
354
357
  type: "init",
355
358
  sessionId,
356
359
  seq,
357
360
  ...(resync ? { resync: true } : {}),
358
361
  data: {
359
- ...toSessionDetailDTO(snapshot, { output: snapshot.output, ...windowed }),
360
- terminalState: this.port?.getTerminalState?.(sessionId) ?? undefined,
362
+ ...toSessionDetailDTO(snapshot, {
363
+ output: snapshot.output,
364
+ outputLimit: terminalState ? 16_000 : undefined,
365
+ ...windowed,
366
+ }),
367
+ terminalState,
361
368
  },
362
369
  }));
363
370
  }
@@ -389,7 +396,7 @@ export class WsBroadcastManager {
389
396
  // 非增量事件若带完整 messages(结构化 output/ended 快照、PTY 非流式 chat 快照),
390
397
  // 在这个统一出口窗口化——避免逐个 emit 点各自处理、也防止超大帧撑爆移动端 WS。
391
398
  // 增量事件只带 lastMessage,不含 messages 数组,不受影响。
392
- // 块级窗口客户端(iOS)需按各自预算切,所以这里改为「按客户端」窗口化;
399
+ // 块级窗口客户端(Web/iOS)需按各自预算切,所以这里改为「按客户端」窗口化;
393
400
  // turn 级(Web/Android)的结果跨客户端一致,缓存一次复用,避免重复计算。
394
401
  const boundedData = boundSessionEventData(event.data);
395
402
  const boundedEvent = boundedData === event.data ? event : { ...event, data: boundedData };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@co0ontty/wand",
3
- "version": "4.73.0",
3
+ "version": "4.75.1-beta.gbf7dafd",
4
4
  "description": "A web console for Claude Code, Codex, OpenCode, and other local CLI tools.",
5
5
  "type": "module",
6
6
  "bin": {