@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.
- package/dist/build-info.json +4 -4
- package/dist/claude-sdk-runner.d.ts +2 -3
- package/dist/config.d.ts +1 -1
- package/dist/config.js +28 -0
- package/dist/message-truncator.js +3 -3
- package/dist/models.d.ts +39 -2
- package/dist/models.js +302 -9
- package/dist/native/darwin-arm64/wand-render +0 -0
- package/dist/native/darwin-arm64/wand-render.sha256 +1 -1
- package/dist/native/darwin-arm64/wand-render.version +1 -1
- package/dist/native/darwin-arm64/wand-structured-renderd +0 -0
- package/dist/native/darwin-arm64/wand-structured-renderd.sha256 +1 -0
- package/dist/native/darwin-arm64/wand-structured-renderd.version +1 -0
- package/dist/native/darwin-x64/wand-render +0 -0
- package/dist/native/darwin-x64/wand-render.sha256 +1 -1
- package/dist/native/darwin-x64/wand-render.version +1 -1
- package/dist/native/darwin-x64/wand-structured-renderd +0 -0
- package/dist/native/darwin-x64/wand-structured-renderd.sha256 +1 -0
- package/dist/native/darwin-x64/wand-structured-renderd.version +1 -0
- package/dist/native/linux-arm64/wand-render +0 -0
- package/dist/native/linux-arm64/wand-render.sha256 +1 -1
- package/dist/native/linux-arm64/wand-render.version +1 -1
- package/dist/native/linux-arm64/wand-structured-renderd +0 -0
- package/dist/native/linux-arm64/wand-structured-renderd.sha256 +1 -0
- package/dist/native/linux-arm64/wand-structured-renderd.version +1 -0
- package/dist/native/linux-x64/wand-render +0 -0
- package/dist/native/linux-x64/wand-render.sha256 +1 -1
- package/dist/native/linux-x64/wand-render.version +1 -1
- package/dist/native/linux-x64/wand-structured-renderd +0 -0
- package/dist/native/linux-x64/wand-structured-renderd.sha256 +1 -0
- package/dist/native/linux-x64/wand-structured-renderd.version +1 -0
- package/dist/process-manager.d.ts +2 -1
- package/dist/process-manager.js +15 -3
- package/dist/pty-terminal-state.d.ts +17 -0
- package/dist/pty-terminal-state.js +51 -1
- package/dist/render-daemon-client.d.ts +33 -2
- package/dist/render-daemon-client.js +66 -16
- package/dist/render-host.d.ts +27 -3
- package/dist/render-host.js +156 -17
- package/dist/server-session-routes.js +42 -3
- package/dist/server-task-routes.js +3 -3
- package/dist/server.js +12 -4
- package/dist/session-ai-context.d.ts +1 -1
- package/dist/session-ai-context.js +15 -4
- package/dist/session-logger.d.ts +2 -0
- package/dist/session-logger.js +44 -1
- package/dist/structured-grok-adapter.js +22 -0
- package/dist/structured-provider-common.d.ts +11 -9
- package/dist/structured-provider-common.js +60 -18
- package/dist/task-types.d.ts +2 -1
- package/dist/terminal-daemon-server.js +27 -4
- package/dist/tui/commands.js +183 -10
- package/dist/types.d.ts +11 -9
- package/dist/wand-task-sync.js +2 -1
- package/dist/web-ui/content/scripts.js +78 -72
- package/dist/web-ui/content/styles.css +1 -1
- package/dist/web-ui/content/tailwind.css +9 -0
- package/dist/web-ui/embedded-assets.js +2 -2
- package/dist/web-ui/thinking-efforts.d.ts +24 -0
- package/dist/web-ui/thinking-efforts.js +81 -0
- package/dist/ws-broadcast.js +11 -4
- 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
|
+
}
|
package/dist/ws-broadcast.js
CHANGED
|
@@ -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, {
|
|
360
|
-
|
|
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 };
|