botmux 2.73.0 → 2.75.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.
- package/README.en.md +3 -2
- package/README.md +3 -2
- package/dist/adapters/cli/antigravity.d.ts.map +1 -1
- package/dist/adapters/cli/antigravity.js +7 -0
- package/dist/adapters/cli/antigravity.js.map +1 -1
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +30 -19
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/adapters/cli/codex.d.ts.map +1 -1
- package/dist/adapters/cli/codex.js +7 -1
- package/dist/adapters/cli/codex.js.map +1 -1
- package/dist/adapters/cli/traex.d.ts.map +1 -1
- package/dist/adapters/cli/traex.js +7 -1
- package/dist/adapters/cli/traex.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +35 -0
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/adapters/hook-installer.d.ts +4 -0
- package/dist/adapters/hook-installer.d.ts.map +1 -1
- package/dist/adapters/hook-installer.js +32 -2
- package/dist/adapters/hook-installer.js.map +1 -1
- package/dist/bot-registry.d.ts +10 -0
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +3 -0
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +29 -9
- package/dist/cli.js.map +1 -1
- package/dist/core/command-handler.d.ts +10 -0
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +78 -7
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +1 -0
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/dashboard/bot-onboarding.d.ts +2 -0
- package/dist/dashboard/bot-onboarding.d.ts.map +1 -1
- package/dist/dashboard/bot-onboarding.js +2 -0
- package/dist/dashboard/bot-onboarding.js.map +1 -1
- package/dist/dashboard.js +13 -7
- package/dist/dashboard.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +7 -2
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +7 -2
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-builder.d.ts +14 -4
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +59 -18
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +52 -7
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/grant-command.d.ts +8 -2
- package/dist/im/lark/grant-command.d.ts.map +1 -1
- package/dist/im/lark/grant-command.js +66 -14
- package/dist/im/lark/grant-command.js.map +1 -1
- package/dist/services/resumable-session-discovery.d.ts +12 -0
- package/dist/services/resumable-session-discovery.d.ts.map +1 -0
- package/dist/services/resumable-session-discovery.js +331 -0
- package/dist/services/resumable-session-discovery.js.map +1 -0
- package/dist/services/session-store.d.ts +13 -0
- package/dist/services/session-store.d.ts.map +1 -1
- package/dist/services/session-store.js +44 -0
- package/dist/services/session-store.js.map +1 -1
- package/dist/setup/bot-config-editor.d.ts +9 -0
- package/dist/setup/bot-config-editor.d.ts.map +1 -1
- package/dist/setup/bot-config-editor.js +11 -0
- package/dist/setup/bot-config-editor.js.map +1 -1
- package/dist/setup/cli-selection.d.ts +65 -0
- package/dist/setup/cli-selection.d.ts.map +1 -0
- package/dist/setup/cli-selection.js +112 -0
- package/dist/setup/cli-selection.js.map +1 -0
- package/dist/setup/interactive-select.d.ts +30 -0
- package/dist/setup/interactive-select.d.ts.map +1 -0
- package/dist/setup/interactive-select.js +177 -0
- package/dist/setup/interactive-select.js.map +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/ready-gate.d.ts +6 -0
- package/dist/utils/ready-gate.d.ts.map +1 -1
- package/dist/utils/ready-gate.js +6 -0
- package/dist/utils/ready-gate.js.map +1 -1
- package/dist/worker.js +82 -4
- package/dist/worker.js.map +1 -1
- package/dist/workflows/events/schema.d.ts +560 -560
- package/package.json +1 -1
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cli-selection.ts
|
|
3
|
+
*
|
|
4
|
+
* 单一事实源:把「用户可选的 CLI 形态」从「原始 cliId 列表」抽象成一层
|
|
5
|
+
* **可级联的选择项**。除了原生 CLI,额外提供两个 aiden 网关形态:
|
|
6
|
+
* - Aiden × Claude → 底层 cliId=claude-code,启动前缀 `aiden x claude`
|
|
7
|
+
* - Aiden × Codex → 底层 cliId=codex,启动前缀 `aiden x codex`
|
|
8
|
+
*
|
|
9
|
+
* 这两个形态**不生成任何 wrapper 脚本**:通过 bot 配置的 `wrapperCli`(通用启动前缀)
|
|
10
|
+
* 实现——worker 在 spawn 时把启动命令拼成 `<wrapperCli> <CLI 参数>`(纯 argv,跨系统)。
|
|
11
|
+
* `wrapperCli` 是通用机制(也能承载 ccr / claude-w 等),不止 aiden。见 worker.ts 的
|
|
12
|
+
* wrapperCli 处理与 {@link buildWrappedLaunch} / {@link stripSettingsArgs}。
|
|
13
|
+
*
|
|
14
|
+
* 三处入口(终端 setup / 终端 bot 编辑 / dashboard 网页添加机器人)共用本模块:
|
|
15
|
+
* - 展示:`CLI_SELECT_OPTIONS`(扁平,web 下拉 + 非 TTY 回退)/ `CLI_SELECT_TREE`(级联,终端 TUI)
|
|
16
|
+
* - 解析:`resolveCliSelection(key)` → `{ cliId, wrapperCli? }`(纯映射,无副作用)
|
|
17
|
+
*/
|
|
18
|
+
import { CLI_OPTIONS } from './bot-config-editor.js';
|
|
19
|
+
// ─── aiden 选项 ──────────────────────────────────────────────────────────────
|
|
20
|
+
const AIDEN_NATIVE = { key: 'aiden', label: 'Aiden(原生 agent)', cliId: 'aiden' };
|
|
21
|
+
const AIDEN_X_CLAUDE = { key: 'aiden-x-claude', label: 'Aiden × Claude', cliId: 'claude-code', wrapperCli: 'aiden x claude' };
|
|
22
|
+
const AIDEN_X_CODEX = { key: 'aiden-x-codex', label: 'Aiden × Codex', cliId: 'codex', wrapperCli: 'aiden x codex' };
|
|
23
|
+
const AIDEN_VARIANTS = [AIDEN_NATIVE, AIDEN_X_CLAUDE, AIDEN_X_CODEX];
|
|
24
|
+
// ─── 扁平 / 级联 视图(均派生自 bot-config-editor 的 CLI_OPTIONS,避免再抄一份)──
|
|
25
|
+
/**
|
|
26
|
+
* 级联树(终端 TUI 用):顺序同 CLI_OPTIONS;'aiden' 一项展开成 children。
|
|
27
|
+
*/
|
|
28
|
+
export const CLI_SELECT_TREE = CLI_OPTIONS.map((o) => o.id === 'aiden'
|
|
29
|
+
? { key: 'aiden', label: 'Aiden', children: AIDEN_VARIANTS }
|
|
30
|
+
: { key: o.id, label: o.label, option: { key: o.id, label: o.label, cliId: o.id } });
|
|
31
|
+
/**
|
|
32
|
+
* 扁平选项(web 下拉 + 非 TTY 回退用):在 'aiden' 之后紧跟两个 aiden×* 项。
|
|
33
|
+
*/
|
|
34
|
+
export const CLI_SELECT_OPTIONS = CLI_OPTIONS.flatMap((o) => o.id === 'aiden'
|
|
35
|
+
? AIDEN_VARIANTS
|
|
36
|
+
: [{ key: o.id, label: o.label, cliId: o.id }]);
|
|
37
|
+
const OPTION_BY_KEY = new Map(CLI_SELECT_OPTIONS.map((o) => [o.key, o]));
|
|
38
|
+
/** 按 key 查选项;非法 key 返回 undefined。 */
|
|
39
|
+
export function lookupCliSelection(key) {
|
|
40
|
+
return OPTION_BY_KEY.get(key.trim());
|
|
41
|
+
}
|
|
42
|
+
/** 反查:由一个 bot 现有的 cliId + wrapperCli 得到对应的选择键(供编辑时高亮默认)。 */
|
|
43
|
+
export function selectionKeyForBot(cliId, wrapperCli) {
|
|
44
|
+
if (wrapperCli && wrapperCli.trim()) {
|
|
45
|
+
const match = CLI_SELECT_OPTIONS.find((o) => o.wrapperCli === wrapperCli.trim());
|
|
46
|
+
if (match)
|
|
47
|
+
return match.key;
|
|
48
|
+
}
|
|
49
|
+
return cliId;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* 把选择键解析成可落盘的 bot 配置片段(纯映射,无副作用)。非法 key 抛错。
|
|
53
|
+
*/
|
|
54
|
+
export function resolveCliSelection(key) {
|
|
55
|
+
const opt = lookupCliSelection(key);
|
|
56
|
+
if (!opt) {
|
|
57
|
+
throw new Error(`未知 CLI 选择项 "${key}"。合法值:${CLI_SELECT_OPTIONS.map((o) => o.key).join(', ')}`);
|
|
58
|
+
}
|
|
59
|
+
return opt.wrapperCli ? { cliId: opt.cliId, wrapperCli: opt.wrapperCli } : { cliId: opt.cliId };
|
|
60
|
+
}
|
|
61
|
+
// ─── 运行时:通用 wrapperCli 启动前缀(无 wrapper 脚本)────────────────────────
|
|
62
|
+
/** 按空格把 wrapperCli 前缀拆成 token(首 token 为 bin)。 */
|
|
63
|
+
export function parseWrapperCli(wrapperCli) {
|
|
64
|
+
return wrapperCli.trim().split(/\s+/).filter(Boolean);
|
|
65
|
+
}
|
|
66
|
+
/** 该前缀是否为 `aiden x claude`(仅它需要剥 --settings)。 */
|
|
67
|
+
function isAidenXClaude(tokens) {
|
|
68
|
+
return tokens[0] === 'aiden' && tokens[1] === 'x' && tokens[2] === 'claude';
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 剥掉 aiden x claude 拒收的 `--settings`(含其值),支持 `--settings <v>` 与
|
|
72
|
+
* `--settings=<v>` 两种写法。其余参数原样保留。改用纯 argv 处理(跨系统、无 shell)。
|
|
73
|
+
*/
|
|
74
|
+
export function stripSettingsArgs(args) {
|
|
75
|
+
const out = [];
|
|
76
|
+
for (let i = 0; i < args.length; i++) {
|
|
77
|
+
const a = args[i];
|
|
78
|
+
if (a === '--settings') {
|
|
79
|
+
i++;
|
|
80
|
+
continue;
|
|
81
|
+
} // 跳过 flag + 紧随其后的值
|
|
82
|
+
if (a.startsWith('--settings='))
|
|
83
|
+
continue; // 跳过 --settings=<v>
|
|
84
|
+
out.push(a);
|
|
85
|
+
}
|
|
86
|
+
return out;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* 由 wrapperCli 前缀 + 底层 CLI 的 args 构造实际 spawn 的 `{ bin, args }`。
|
|
90
|
+
* - bin = 前缀首 token(经 binResolver 走 PATH 解析)
|
|
91
|
+
* - args = 前缀其余 token + CLI 参数(aiden x claude 形态会先剥掉 --settings)
|
|
92
|
+
* 前缀为空时返回 `{ bin: '', args }`,调用方据此跳过(不改写 spawn)。
|
|
93
|
+
*/
|
|
94
|
+
export function buildWrappedLaunch(wrapperCli, cliArgs, binResolver = (b) => b) {
|
|
95
|
+
const tokens = parseWrapperCli(wrapperCli);
|
|
96
|
+
if (tokens.length === 0)
|
|
97
|
+
return { bin: '', args: [...cliArgs] };
|
|
98
|
+
const forwarded = isAidenXClaude(tokens) ? stripSettingsArgs(cliArgs) : [...cliArgs];
|
|
99
|
+
return { bin: binResolver(tokens[0]), args: [...tokens.slice(1), ...forwarded] };
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* 把适配器给出的「裸 CLI 恢复命令」改写成 wrapperCli 形态,供 session-closed 卡片里
|
|
103
|
+
* 展示给用户手动 resume。例:`claude --resume <id>` + 前缀 `aiden x claude` →
|
|
104
|
+
* `aiden x claude --resume <id>`。wrapperCli 未设时原样返回。
|
|
105
|
+
*/
|
|
106
|
+
export function decorateResumeForWrapper(cmd, wrapperCli) {
|
|
107
|
+
if (!wrapperCli || !wrapperCli.trim())
|
|
108
|
+
return cmd;
|
|
109
|
+
const rest = cmd.replace(/^\S+\s*/, ''); // 去掉首个 token(底层 bin 名)
|
|
110
|
+
return `${wrapperCli.trim()} ${rest}`.trimEnd();
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=cli-selection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-selection.js","sourceRoot":"","sources":["../../src/setup/cli-selection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { createInterface } from 'node:readline';
|
|
2
|
+
export interface SelectItem {
|
|
3
|
+
/** 主展示文本。 */
|
|
4
|
+
readonly label: string;
|
|
5
|
+
/** 暗色后缀(如 cliId / 命令前缀),仅展示用。 */
|
|
6
|
+
readonly hint?: string;
|
|
7
|
+
/** 选中后还有二级菜单(渲染 ▸)。 */
|
|
8
|
+
readonly submenu?: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Raw-mode 单选 + 输入过滤。返回选中项在 `items` 中的下标;取消(Esc / Ctrl-C)
|
|
12
|
+
* 返回 null。要求处于 TTY;非 TTY 直接返回 null(调用方回退)。
|
|
13
|
+
*/
|
|
14
|
+
export declare function interactiveSelect(opts: {
|
|
15
|
+
title: string;
|
|
16
|
+
items: ReadonlyArray<SelectItem>;
|
|
17
|
+
footer?: string;
|
|
18
|
+
}): Promise<number | null>;
|
|
19
|
+
/**
|
|
20
|
+
* 级联 CLI 选择器:顶层列出所有 CLI(Aiden 带 ▸),选 Aiden 进二级菜单
|
|
21
|
+
* (原生 / × Claude / × Codex)。返回选择键(CLI_SELECT_OPTIONS 的 key),
|
|
22
|
+
* 取消返回 null。
|
|
23
|
+
*
|
|
24
|
+
* 非 TTY 回退:打印带序号的扁平列表,用 readline 读「序号 / key」。
|
|
25
|
+
*/
|
|
26
|
+
export declare function pickCliSelection(rl: ReturnType<typeof createInterface>, opts?: {
|
|
27
|
+
title?: string;
|
|
28
|
+
currentKey?: string;
|
|
29
|
+
}): Promise<string | null>;
|
|
30
|
+
//# sourceMappingURL=interactive-select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive-select.d.ts","sourceRoot":"","sources":["../../src/setup/interactive-select.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,aAAa;IACb,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,iCAAiC;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,uBAAuB;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAQD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA8EzB;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,EACtC,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACjD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmCxB"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* interactive-select.ts
|
|
3
|
+
*
|
|
4
|
+
* 终端可搜索单选器(raw-mode + 输入即过滤 + 方向键),以及在其之上的级联
|
|
5
|
+
* CLI 选择器 {@link pickCliSelection}。
|
|
6
|
+
*
|
|
7
|
+
* 设计同 `botmux list` 的 TUI(alt-screen + ANSI 渲染),但做成可复用、自带
|
|
8
|
+
* stdin 隔离:进入时摘掉 readline 的 'data' 监听、退出时还原,因此可以在一个
|
|
9
|
+
* 持续打开的 readline 会话(botmux setup)中间插入使用,不会和 rl 抢输入。
|
|
10
|
+
* 非 TTY(管道 / 脚本化)下不进入 raw-mode,由调用方走 readline 回退。
|
|
11
|
+
*/
|
|
12
|
+
import { stdin as input, stdout as output } from 'node:process';
|
|
13
|
+
import { CLI_SELECT_TREE, CLI_SELECT_OPTIONS } from './cli-selection.js';
|
|
14
|
+
const ESC = '\x1b';
|
|
15
|
+
function isPrintable(s) {
|
|
16
|
+
return s.length === 1 && s >= ' ' && s !== '\x7f';
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Raw-mode 单选 + 输入过滤。返回选中项在 `items` 中的下标;取消(Esc / Ctrl-C)
|
|
20
|
+
* 返回 null。要求处于 TTY;非 TTY 直接返回 null(调用方回退)。
|
|
21
|
+
*/
|
|
22
|
+
export function interactiveSelect(opts) {
|
|
23
|
+
const { items } = opts;
|
|
24
|
+
if (!input.isTTY || !output.isTTY || items.length === 0)
|
|
25
|
+
return Promise.resolve(null);
|
|
26
|
+
let query = '';
|
|
27
|
+
let cursor = 0;
|
|
28
|
+
let filtered = items.map((_, i) => i);
|
|
29
|
+
function refilter() {
|
|
30
|
+
const q = query.trim().toLowerCase();
|
|
31
|
+
filtered = items
|
|
32
|
+
.map((_, i) => i)
|
|
33
|
+
.filter((i) => !q || `${items[i].label} ${items[i].hint ?? ''}`.toLowerCase().includes(q));
|
|
34
|
+
if (cursor >= filtered.length)
|
|
35
|
+
cursor = Math.max(0, filtered.length - 1);
|
|
36
|
+
if (cursor < 0)
|
|
37
|
+
cursor = 0;
|
|
38
|
+
}
|
|
39
|
+
function render() {
|
|
40
|
+
output.write('\x1b[H\x1b[J');
|
|
41
|
+
output.write(`\x1b[1m ${opts.title}\x1b[0m\n`);
|
|
42
|
+
output.write(`\x1b[2m 输入可搜索 · ↑/↓ 选择 · ⏎ 确认 · Esc 取消\x1b[0m\n\n`);
|
|
43
|
+
output.write(` \x1b[36m🔍\x1b[0m ${query || '\x1b[2m(全部)\x1b[0m'}\n\n`);
|
|
44
|
+
if (filtered.length === 0) {
|
|
45
|
+
output.write(` \x1b[2m无匹配项\x1b[0m\n`);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
for (let row = 0; row < filtered.length; row++) {
|
|
49
|
+
const it = items[filtered[row]];
|
|
50
|
+
const selected = row === cursor;
|
|
51
|
+
const pointer = selected ? '\x1b[36m❯\x1b[0m' : ' ';
|
|
52
|
+
const arrow = it.submenu ? ' \x1b[2m▸\x1b[0m' : '';
|
|
53
|
+
const hint = it.hint ? ` \x1b[2m${it.hint}\x1b[0m` : '';
|
|
54
|
+
const label = selected ? `\x1b[7m ${it.label} \x1b[0m` : ` ${it.label} `;
|
|
55
|
+
output.write(` ${pointer} ${label}${hint}${arrow}\n`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (opts.footer)
|
|
59
|
+
output.write(`\n \x1b[2m${opts.footer}\x1b[0m\n`);
|
|
60
|
+
}
|
|
61
|
+
return new Promise((resolve) => {
|
|
62
|
+
const prevListeners = input.listeners('data');
|
|
63
|
+
const prevRaw = input.isRaw ?? false;
|
|
64
|
+
input.removeAllListeners('data');
|
|
65
|
+
try {
|
|
66
|
+
input.setRawMode(true);
|
|
67
|
+
}
|
|
68
|
+
catch { /* 非 raw 终端 */ }
|
|
69
|
+
input.resume();
|
|
70
|
+
input.setEncoding('utf-8');
|
|
71
|
+
output.write('\x1b[?25l\x1b[?1049h'); // hide cursor + alt screen
|
|
72
|
+
render();
|
|
73
|
+
function cleanup(result) {
|
|
74
|
+
input.removeListener('data', onData);
|
|
75
|
+
output.write('\x1b[?25h\x1b[?1049l'); // show cursor + leave alt screen
|
|
76
|
+
try {
|
|
77
|
+
input.setRawMode(prevRaw);
|
|
78
|
+
}
|
|
79
|
+
catch { /* */ }
|
|
80
|
+
for (const l of prevListeners)
|
|
81
|
+
input.on('data', l);
|
|
82
|
+
if (prevListeners.length === 0)
|
|
83
|
+
input.pause();
|
|
84
|
+
resolve(result);
|
|
85
|
+
}
|
|
86
|
+
function onData(key) {
|
|
87
|
+
// Ctrl-C / 裸 Esc → 取消
|
|
88
|
+
if (key === '\x03' || key === ESC) {
|
|
89
|
+
cleanup(null);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
// 方向键 / Ctrl-P / Ctrl-N
|
|
93
|
+
if (key === `${ESC}[A` || key === '\x10') {
|
|
94
|
+
if (filtered.length)
|
|
95
|
+
cursor = (cursor - 1 + filtered.length) % filtered.length;
|
|
96
|
+
render();
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (key === `${ESC}[B` || key === '\x0e') {
|
|
100
|
+
if (filtered.length)
|
|
101
|
+
cursor = (cursor + 1) % filtered.length;
|
|
102
|
+
render();
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
// Enter
|
|
106
|
+
if (key === '\r' || key === '\n') {
|
|
107
|
+
if (filtered.length)
|
|
108
|
+
cleanup(filtered[cursor]);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
// Backspace
|
|
112
|
+
if (key === '\x7f' || key === '\x08') {
|
|
113
|
+
query = query.slice(0, -1);
|
|
114
|
+
refilter();
|
|
115
|
+
render();
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
// 普通可打印字符 → 追加到搜索
|
|
119
|
+
if (isPrintable(key)) {
|
|
120
|
+
query += key;
|
|
121
|
+
cursor = 0;
|
|
122
|
+
refilter();
|
|
123
|
+
render();
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
// 其它(未识别的转义序列等)忽略
|
|
127
|
+
}
|
|
128
|
+
input.on('data', onData);
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* 级联 CLI 选择器:顶层列出所有 CLI(Aiden 带 ▸),选 Aiden 进二级菜单
|
|
133
|
+
* (原生 / × Claude / × Codex)。返回选择键(CLI_SELECT_OPTIONS 的 key),
|
|
134
|
+
* 取消返回 null。
|
|
135
|
+
*
|
|
136
|
+
* 非 TTY 回退:打印带序号的扁平列表,用 readline 读「序号 / key」。
|
|
137
|
+
*/
|
|
138
|
+
export async function pickCliSelection(rl, opts = {}) {
|
|
139
|
+
const title = opts.title ?? '选择 CLI 适配器';
|
|
140
|
+
// ── 非 TTY 回退:序号 / key 文本输入 ──
|
|
141
|
+
if (!input.isTTY || !output.isTTY) {
|
|
142
|
+
const lines = CLI_SELECT_OPTIONS.map((o, i) => ` ${i + 1}) ${o.label} (${o.key})`);
|
|
143
|
+
output.write(`\n${title}\n${lines.join('\n')}\n`);
|
|
144
|
+
const def = opts.currentKey ?? CLI_SELECT_OPTIONS[0].key;
|
|
145
|
+
const ans = (await new Promise((res) => rl.question(`选择 [${def}]: `, res))).trim();
|
|
146
|
+
if (!ans)
|
|
147
|
+
return def;
|
|
148
|
+
const byNum = CLI_SELECT_OPTIONS[Number(ans) - 1];
|
|
149
|
+
if (byNum)
|
|
150
|
+
return byNum.key;
|
|
151
|
+
const byKey = CLI_SELECT_OPTIONS.find((o) => o.key === ans);
|
|
152
|
+
return byKey ? byKey.key : ans; // 透传:让上层 resolveCliSelection 抛错给出明确提示
|
|
153
|
+
}
|
|
154
|
+
// ── TTY:级联 ──
|
|
155
|
+
// 顶层循环:选中带二级菜单的项后进子菜单,子菜单取消则退回顶层。
|
|
156
|
+
for (;;) {
|
|
157
|
+
const topItems = CLI_SELECT_TREE.map((g) => ({
|
|
158
|
+
label: g.label,
|
|
159
|
+
hint: g.children ? '' : g.option?.key,
|
|
160
|
+
submenu: !!g.children,
|
|
161
|
+
}));
|
|
162
|
+
const ti = await interactiveSelect({ title, items: topItems, footer: '选 Aiden 进入子菜单(× Claude / × Codex)' });
|
|
163
|
+
if (ti === null)
|
|
164
|
+
return null;
|
|
165
|
+
const group = CLI_SELECT_TREE[ti];
|
|
166
|
+
if (group.option)
|
|
167
|
+
return group.option.key;
|
|
168
|
+
if (group.children) {
|
|
169
|
+
const subItems = group.children.map((c) => ({ label: c.label, hint: c.wrapperCli ?? c.key }));
|
|
170
|
+
const si = await interactiveSelect({ title: `${title} › ${group.label}`, items: subItems, footer: 'Esc 返回上一级' });
|
|
171
|
+
if (si === null)
|
|
172
|
+
continue; // 退回顶层
|
|
173
|
+
return group.children[si].key;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=interactive-select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive-select.js","sourceRoot":"","sources":["../../src/setup/interactive-select.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,6DAA6D;AAC7D,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;AACxE,8EAA8E;AAC9E,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,UAAU,CAAC;AAErD,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC3B;;2EAEuE;IACvE,aAAa,EAAE,MAAM,CAAC;IACtB;;;qEAGiE;IACjE,KAAK,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B;yCACqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;kEAK8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;8EAM0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;oEAGgE;IAChE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;mBAGe;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE;QAAE,CAAC,aAAa,EAAE,MAAM,GAAG;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IAC5F;;;;OAIG;IACH,kBAAkB,CAAC,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAClF,6EAA6E;IAC7E,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;kDAC8C;IAC9C,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;mFAC+E;IAC/E,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,wBAAwB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC;2DACuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uFAAuF;IACvF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wDAAwD;IACxD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,2FAA2F;IAC3F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kGAAkG;IAClG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2FAA2F;IAC3F,KAAK,CAAC,EAAE,OAAO,yBAAyB,EAAE,KAAK,CAAC;IAChD;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B;mFAC+E;IAC/E,WAAW,CAAC,EAAE;QACZ,iFAAiF;QACjF,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;QACrC,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,uEAAuE;QACvE,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;qEAEiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;uEACmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;qBAIiB;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;IACnC,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf;4EACwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,aAAa,CAAC;IAC3C;;8DAE0D;IAC1D,KAAK,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;8EAG0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mFAAmF;IACnF,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,4FAA4F;IAC5F,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAE7B,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;CACrC;AAID,mDAAmD;AACnD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,YAAY,CAAC;AAElD,iFAAiF;AACjF,MAAM,MAAM,aAAa,GACrB,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAC3C,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAChC,cAAc,GAAG,gBAAgB,CAAC;AAEtC,0CAA0C;AAC1C,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,yBAAyB,CAAC,EAAE,OAAO,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,6 +49,12 @@
|
|
|
49
49
|
*
|
|
50
50
|
* Any of the negatives → don't arm; the gate stays open and the spawn behaves
|
|
51
51
|
* exactly as before (readyPattern + quiescence).
|
|
52
|
+
*
|
|
53
|
+
* NB: `wrapperCli=aiden x claude` strips our process-level `--settings`, but the
|
|
54
|
+
* SessionStart hook is ALSO installed globally (~/.claude/settings.json — see
|
|
55
|
+
* claude-code.ts hookInstall.sessionStartCommand), which aiden's Claude still
|
|
56
|
+
* reads. So the real signal fires there too → we KEEP arming for that case
|
|
57
|
+
* (no readyPattern fallback, which could misjudge).
|
|
52
58
|
*/
|
|
53
59
|
export declare function shouldArmReadyGate(state: {
|
|
54
60
|
injectsReadyHook: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ready-gate.d.ts","sourceRoot":"","sources":["../../src/utils/ready-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH
|
|
1
|
+
{"version":3,"file":"ready-gate.d.ts","sourceRoot":"","sources":["../../src/utils/ready-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,sBAAsB,EAAE,OAAO,CAAC;CACjC,GAAG,OAAO,CAEV;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAS;IAEzB,oFAAoF;IACpF,GAAG,IAAI,IAAI;IAIX,qFAAqF;IACrF,UAAU,IAAI,OAAO;IAIrB;;;;;;OAMG;IACH,OAAO,IAAI,OAAO;IAOlB,qEAAqE;IACrE,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,gEAAgE;IAChE,IAAI,UAAU,IAAI,OAAO,CAExB;CACF"}
|
package/dist/utils/ready-gate.js
CHANGED
|
@@ -49,6 +49,12 @@
|
|
|
49
49
|
*
|
|
50
50
|
* Any of the negatives → don't arm; the gate stays open and the spawn behaves
|
|
51
51
|
* exactly as before (readyPattern + quiescence).
|
|
52
|
+
*
|
|
53
|
+
* NB: `wrapperCli=aiden x claude` strips our process-level `--settings`, but the
|
|
54
|
+
* SessionStart hook is ALSO installed globally (~/.claude/settings.json — see
|
|
55
|
+
* claude-code.ts hookInstall.sessionStartCommand), which aiden's Claude still
|
|
56
|
+
* reads. So the real signal fires there too → we KEEP arming for that case
|
|
57
|
+
* (no readyPattern fallback, which could misjudge).
|
|
52
58
|
*/
|
|
53
59
|
export function shouldArmReadyGate(state) {
|
|
54
60
|
return state.injectsReadyHook && !state.adoptMode && !state.willReattachPersistent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ready-gate.js","sourceRoot":"","sources":["../../src/utils/ready-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH
|
|
1
|
+
{"version":3,"file":"ready-gate.js","sourceRoot":"","sources":["../../src/utils/ready-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAIlC;IACC,OAAO,KAAK,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC;AACrF,CAAC;AAED,MAAM,OAAO,SAAS;IACZ,KAAK,GAAG,KAAK,CAAC;IACd,QAAQ,GAAG,KAAK,CAAC;IAEzB,oFAAoF;IACpF,GAAG;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,qFAAqF;IACrF,UAAU;QACR,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IACtC,CAAC;IAED;;;;;;OAMG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,qEAAqE;IACrE,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,gEAAgE;IAChE,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF"}
|
package/dist/worker.js
CHANGED
|
@@ -39,6 +39,7 @@ import { t, setDefaultLocale } from './i18n/index.js';
|
|
|
39
39
|
import { TerminalRenderer } from './utils/terminal-renderer.js';
|
|
40
40
|
import { DEFAULT_RENDER_COLS, DEFAULT_RENDER_ROWS, MAX_RENDER_COLS, MAX_RENDER_ROWS, MIN_RENDER_COLS, MIN_RENDER_ROWS, clamp, resolveRenderDimensions, } from './utils/render-dimensions.js';
|
|
41
41
|
import { createCliAdapterSync, locateOnPath } from './adapters/cli/registry.js';
|
|
42
|
+
import { buildWrappedLaunch } from './setup/cli-selection.js';
|
|
42
43
|
import { claudeJsonlPathForSession, resolveJsonlFromPid, findOpenClaudeSessionIds, DEFAULT_CLAUDE_DATA_DIR } from './adapters/cli/claude-code.js';
|
|
43
44
|
import { mtrSessionIdForBotmuxSession } from './adapters/cli/mtr.js';
|
|
44
45
|
import { HerdrBackend } from './adapters/backend/herdr-backend.js';
|
|
@@ -147,6 +148,41 @@ let readySignalTimer = null;
|
|
|
147
148
|
* back. The real signal lands within ~ms of the input box rendering, so this is
|
|
148
149
|
* pure insurance against a missing/failed hook — generous but bounded. */
|
|
149
150
|
const READY_SIGNAL_TIMEOUT_MS = 45_000;
|
|
151
|
+
/** Epoch ms of the most recent PTY output — used to settle for quiescence
|
|
152
|
+
* before the first flush (see settleThenFlush). */
|
|
153
|
+
let lastPtyOutputAtMs = 0;
|
|
154
|
+
/** After the SessionStart signal fires, the input box has appeared but Ink's
|
|
155
|
+
* startup render isn't fully drained yet — typing immediately trips Claude's
|
|
156
|
+
* paste-burst heuristic and the `\` soft-newline markers (claude-code
|
|
157
|
+
* writeInput) get kept literally. This is pronounced under wrapperCli launchers
|
|
158
|
+
* (e.g. `aiden x claude`) whose Claude renders more at startup. So we wait for
|
|
159
|
+
* the PTY to fall quiet for SETTLE_MS before the first flush — the signal still
|
|
160
|
+
* gates readiness (anti-selector), the settle just lets the render drain. */
|
|
161
|
+
const READY_FLUSH_SETTLE_MS = 1_000;
|
|
162
|
+
/** Upper bound on the settle so a chatty startup (spinners, periodic redraw)
|
|
163
|
+
* can't stall the first prompt indefinitely. */
|
|
164
|
+
const READY_FLUSH_SETTLE_CAP_MS = 6_000;
|
|
165
|
+
let readyFlushSettleTimer = null;
|
|
166
|
+
/** True while the post-signal quiescence settle is in progress — flushPending
|
|
167
|
+
* holds (just like the gate) so a message arriving mid-settle can't type-ahead
|
|
168
|
+
* past the settle and re-trigger paste-burst. */
|
|
169
|
+
let isSettlingFirstFlush = false;
|
|
170
|
+
/** Wait until the PTY has been quiet for READY_FLUSH_SETTLE_MS (Ink render
|
|
171
|
+
* drained), capped at READY_FLUSH_SETTLE_CAP_MS, then flush the held prompt. */
|
|
172
|
+
function settleThenFlush(startedAtMs) {
|
|
173
|
+
readyFlushSettleTimer = null;
|
|
174
|
+
const now = Date.now();
|
|
175
|
+
const quietForMs = now - lastPtyOutputAtMs;
|
|
176
|
+
if (quietForMs >= READY_FLUSH_SETTLE_MS || now - startedAtMs >= READY_FLUSH_SETTLE_CAP_MS) {
|
|
177
|
+
isSettlingFirstFlush = false;
|
|
178
|
+
log(`Ready-gate settle done (quiet ${quietForMs}ms); delivering held first prompt`);
|
|
179
|
+
void flushPending();
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
const wait = Math.min(READY_FLUSH_SETTLE_MS - quietForMs, READY_FLUSH_SETTLE_CAP_MS - (now - startedAtMs));
|
|
183
|
+
readyFlushSettleTimer = setTimeout(() => settleThenFlush(startedAtMs), Math.max(50, wait));
|
|
184
|
+
readyFlushSettleTimer.unref?.();
|
|
185
|
+
}
|
|
150
186
|
/** Release the ready-gate and flush anything it held. No-op when the gate was
|
|
151
187
|
* never armed (other CLIs / adopt) or already released (idempotent). */
|
|
152
188
|
function releaseReadyGate(reason) {
|
|
@@ -155,8 +191,13 @@ function releaseReadyGate(reason) {
|
|
|
155
191
|
readySignalTimer = null;
|
|
156
192
|
}
|
|
157
193
|
if (readyGate.receive()) {
|
|
158
|
-
log(`Ready gate released (${reason});
|
|
159
|
-
|
|
194
|
+
log(`Ready gate released (${reason}); settling for PTY quiescence before first flush`);
|
|
195
|
+
if (readyFlushSettleTimer) {
|
|
196
|
+
clearTimeout(readyFlushSettleTimer);
|
|
197
|
+
readyFlushSettleTimer = null;
|
|
198
|
+
}
|
|
199
|
+
isSettlingFirstFlush = true;
|
|
200
|
+
settleThenFlush(Date.now());
|
|
160
201
|
}
|
|
161
202
|
}
|
|
162
203
|
const pendingMessages = [];
|
|
@@ -2785,7 +2826,9 @@ function onPtyData(data) {
|
|
|
2785
2826
|
return;
|
|
2786
2827
|
}
|
|
2787
2828
|
}
|
|
2788
|
-
//
|
|
2829
|
+
// Track last PTY output time for the ready-gate quiescence settle (see
|
|
2830
|
+
// settleThenFlush) and delegate idle detection to IdleDetector.
|
|
2831
|
+
lastPtyOutputAtMs = Date.now();
|
|
2789
2832
|
idleDetector?.feed(data);
|
|
2790
2833
|
}
|
|
2791
2834
|
function markPromptReady() {
|
|
@@ -2970,6 +3013,12 @@ async function flushPending() {
|
|
|
2970
3013
|
log(`Holding ${pendingMessages.length} pending message(s) until SessionStart ready signal`);
|
|
2971
3014
|
return;
|
|
2972
3015
|
}
|
|
3016
|
+
// Post-signal quiescence settle in progress — hold so the first write lands
|
|
3017
|
+
// after Ink's startup render has drained (else paste-burst keeps `\` literal).
|
|
3018
|
+
if (isSettlingFirstFlush) {
|
|
3019
|
+
log(`Holding ${pendingMessages.length} pending message(s) until ready-gate settle completes`);
|
|
3020
|
+
return;
|
|
3021
|
+
}
|
|
2973
3022
|
// Type-ahead adapters flush even while the CLI is busy; others wait for
|
|
2974
3023
|
// idle. Claude bridge fallback used to also disable type-ahead because
|
|
2975
3024
|
// BridgeTurnQueue.ingest didn't recognise the `attachment(queued_command)`
|
|
@@ -3838,6 +3887,23 @@ function spawnCli(cfg) {
|
|
|
3838
3887
|
throw err;
|
|
3839
3888
|
}
|
|
3840
3889
|
}
|
|
3890
|
+
// 通用启动前缀(wrapperCli):把启动命令重写成 `<wrapperCli> <CLI 参数>`(首 token 当
|
|
3891
|
+
// bin 走 PATH 解析),无需 wrapper 脚本、跨系统。aiden x claude 形态会剥掉 aiden 拒收的
|
|
3892
|
+
// --settings(见 buildWrappedLaunch)。与文件沙盒互斥:沙盒已把命令重写成 bwrap,叠加
|
|
3893
|
+
// 前缀会破坏隔离,故 sandboxOn 时跳过并告警(网关 + oncall 沙盒本就不是合理组合)。
|
|
3894
|
+
if (cfg.wrapperCli && cfg.wrapperCli.trim()) {
|
|
3895
|
+
if (sandboxOn) {
|
|
3896
|
+
log(`wrapperCli="${cfg.wrapperCli}" ignored: file sandbox enabled and takes precedence (cannot combine launch prefix with bwrap)`);
|
|
3897
|
+
}
|
|
3898
|
+
else {
|
|
3899
|
+
const launch = buildWrappedLaunch(cfg.wrapperCli, spawnArgs, (b) => locateOnPath(b) ?? b);
|
|
3900
|
+
if (launch.bin) {
|
|
3901
|
+
spawnBin = launch.bin;
|
|
3902
|
+
spawnArgs = launch.args;
|
|
3903
|
+
log(`Launch prefix: spawning ${spawnBin} ${spawnArgs.slice(0, 2).join(' ')} … (cliId=${cfg.cliId})`);
|
|
3904
|
+
}
|
|
3905
|
+
}
|
|
3906
|
+
}
|
|
3841
3907
|
backend.spawn(spawnBin, spawnArgs, {
|
|
3842
3908
|
cwd: spawnCwd,
|
|
3843
3909
|
cols: PTY_COLS,
|
|
@@ -4010,6 +4076,13 @@ function spawnCli(cfg) {
|
|
|
4010
4076
|
clearTimeout(readySignalTimer);
|
|
4011
4077
|
readySignalTimer = null;
|
|
4012
4078
|
}
|
|
4079
|
+
if (readyFlushSettleTimer) {
|
|
4080
|
+
clearTimeout(readyFlushSettleTimer);
|
|
4081
|
+
readyFlushSettleTimer = null;
|
|
4082
|
+
}
|
|
4083
|
+
isSettlingFirstFlush = false;
|
|
4084
|
+
// Reset quiescence baseline so the settle measures silence from THIS spawn.
|
|
4085
|
+
lastPtyOutputAtMs = Date.now();
|
|
4013
4086
|
if (shouldArmReadyGate({
|
|
4014
4087
|
injectsReadyHook: cliAdapter.injectsReadyHook === true,
|
|
4015
4088
|
adoptMode: cfg.adoptMode === true,
|
|
@@ -4092,11 +4165,16 @@ function spawnCli(cfg) {
|
|
|
4092
4165
|
function killCli() {
|
|
4093
4166
|
idleDetector?.dispose();
|
|
4094
4167
|
idleDetector = null;
|
|
4095
|
-
// Cancel any pending ready-gate fallback
|
|
4168
|
+
// Cancel any pending ready-gate fallback / settle timers; spawnCli re-arms on respawn.
|
|
4096
4169
|
if (readySignalTimer) {
|
|
4097
4170
|
clearTimeout(readySignalTimer);
|
|
4098
4171
|
readySignalTimer = null;
|
|
4099
4172
|
}
|
|
4173
|
+
if (readyFlushSettleTimer) {
|
|
4174
|
+
clearTimeout(readyFlushSettleTimer);
|
|
4175
|
+
readyFlushSettleTimer = null;
|
|
4176
|
+
}
|
|
4177
|
+
isSettlingFirstFlush = false;
|
|
4100
4178
|
stopScreenAnalyzer();
|
|
4101
4179
|
stopScreenUpdates();
|
|
4102
4180
|
backend?.kill();
|