botmux 3.3.0 → 3.4.1
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/adapters/backend/sandbox.d.ts +47 -0
- package/dist/adapters/backend/sandbox.d.ts.map +1 -1
- package/dist/adapters/backend/sandbox.js +137 -0
- package/dist/adapters/backend/sandbox.js.map +1 -1
- package/dist/adapters/cli/read-isolation.d.ts +72 -3
- package/dist/adapters/cli/read-isolation.d.ts.map +1 -1
- package/dist/adapters/cli/read-isolation.js +143 -6
- package/dist/adapters/cli/read-isolation.js.map +1 -1
- package/dist/adapters/cli/registry.d.ts.map +1 -1
- package/dist/adapters/cli/registry.js +8 -2
- package/dist/adapters/cli/registry.js.map +1 -1
- package/dist/cli/create-group-resolver.d.ts +19 -0
- package/dist/cli/create-group-resolver.d.ts.map +1 -1
- package/dist/cli/create-group-resolver.js +30 -0
- package/dist/cli/create-group-resolver.js.map +1 -1
- package/dist/cli/pm2-command.d.ts.map +1 -1
- package/dist/cli/pm2-command.js +6 -0
- package/dist/cli/pm2-command.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +36 -1
- package/dist/cli.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +21 -0
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/device-isolation-activation.d.ts +56 -0
- package/dist/core/device-isolation-activation.d.ts.map +1 -0
- package/dist/core/device-isolation-activation.js +110 -0
- package/dist/core/device-isolation-activation.js.map +1 -0
- package/dist/core/device-isolation-daemon.d.ts +84 -0
- package/dist/core/device-isolation-daemon.d.ts.map +1 -0
- package/dist/core/device-isolation-daemon.js +591 -0
- package/dist/core/device-isolation-daemon.js.map +1 -0
- package/dist/core/types.d.ts +9 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +35 -0
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +5 -0
- package/dist/daemon.js.map +1 -1
- package/dist/desktop/main/auto-start.d.ts +2 -0
- package/dist/desktop/main/auto-start.d.ts.map +1 -1
- package/dist/desktop/main/auto-start.js +10 -6
- package/dist/desktop/main/auto-start.js.map +1 -1
- package/dist/desktop/main/bundled-runtime.d.ts +12 -0
- package/dist/desktop/main/bundled-runtime.d.ts.map +1 -0
- package/dist/desktop/main/bundled-runtime.js +30 -0
- package/dist/desktop/main/bundled-runtime.js.map +1 -0
- package/dist/desktop/main/device-status.d.ts +15 -0
- package/dist/desktop/main/device-status.d.ts.map +1 -0
- package/dist/desktop/main/device-status.js +94 -0
- package/dist/desktop/main/device-status.js.map +1 -0
- package/dist/desktop/main/external-runtime.d.ts +9 -0
- package/dist/desktop/main/external-runtime.d.ts.map +1 -1
- package/dist/desktop/main/external-runtime.js +88 -18
- package/dist/desktop/main/external-runtime.js.map +1 -1
- package/dist/desktop/main/ipc.d.ts.map +1 -1
- package/dist/desktop/main/ipc.js +1 -0
- package/dist/desktop/main/ipc.js.map +1 -1
- package/dist/desktop/main/node-command.d.ts +21 -0
- package/dist/desktop/main/node-command.d.ts.map +1 -1
- package/dist/desktop/main/node-command.js +41 -0
- package/dist/desktop/main/node-command.js.map +1 -1
- package/dist/desktop/main/pm2-apps.d.ts +4 -2
- package/dist/desktop/main/pm2-apps.d.ts.map +1 -1
- package/dist/desktop/main/pm2-apps.js +11 -3
- package/dist/desktop/main/pm2-apps.js.map +1 -1
- package/dist/desktop/main/runtime-service.d.ts +21 -5
- package/dist/desktop/main/runtime-service.d.ts.map +1 -1
- package/dist/desktop/main/runtime-service.js +94 -10
- package/dist/desktop/main/runtime-service.js.map +1 -1
- package/dist/desktop/main/runtime-source.d.ts +2 -0
- package/dist/desktop/main/runtime-source.d.ts.map +1 -1
- package/dist/desktop/main/runtime-source.js +12 -6
- package/dist/desktop/main/runtime-source.js.map +1 -1
- package/dist/desktop/main/tray.d.ts +1 -0
- package/dist/desktop/main/tray.d.ts.map +1 -1
- package/dist/desktop/main/tray.js +3 -3
- package/dist/desktop/main/tray.js.map +1 -1
- package/dist/desktop/main.js +28 -8
- package/dist/desktop/main.js.map +1 -1
- package/dist/desktop/preload.js +3 -0
- package/dist/desktop/preload.js.map +1 -1
- package/dist/desktop/renderer/app.d.ts +2 -1
- package/dist/desktop/renderer/app.d.ts.map +1 -1
- package/dist/desktop/renderer/app.js +6 -1
- package/dist/desktop/renderer/app.js.map +1 -1
- package/dist/desktop/renderer/runtime-state.d.ts.map +1 -1
- package/dist/desktop/renderer/runtime-state.js +2 -0
- package/dist/desktop/renderer/runtime-state.js.map +1 -1
- package/dist/desktop/shared/shell-path-probes.d.ts +24 -0
- package/dist/desktop/shared/shell-path-probes.d.ts.map +1 -0
- package/dist/desktop/shared/shell-path-probes.js +38 -0
- package/dist/desktop/shared/shell-path-probes.js.map +1 -0
- package/dist/desktop/shared/types.d.ts +21 -1
- package/dist/desktop/shared/types.d.ts.map +1 -1
- package/dist/desktop/smoke.d.ts +1 -0
- package/dist/desktop/smoke.d.ts.map +1 -1
- package/dist/desktop/smoke.js +20 -5
- package/dist/desktop/smoke.js.map +1 -1
- package/dist/platform/bind.d.ts +4 -1
- package/dist/platform/bind.d.ts.map +1 -1
- package/dist/platform/bind.js +10 -1
- package/dist/platform/bind.js.map +1 -1
- package/dist/platform/binding.d.ts.map +1 -1
- package/dist/platform/binding.js +15 -9
- package/dist/platform/binding.js.map +1 -1
- package/dist/platform/device-command.d.ts +35 -0
- package/dist/platform/device-command.d.ts.map +1 -0
- package/dist/platform/device-command.js +187 -0
- package/dist/platform/device-command.js.map +1 -0
- package/dist/platform/device-enroll.d.ts +156 -0
- package/dist/platform/device-enroll.d.ts.map +1 -0
- package/dist/platform/device-enroll.js +781 -0
- package/dist/platform/device-enroll.js.map +1 -0
- package/dist/platform/device-isolation-activation-client.d.ts +28 -0
- package/dist/platform/device-isolation-activation-client.d.ts.map +1 -0
- package/dist/platform/device-isolation-activation-client.js +279 -0
- package/dist/platform/device-isolation-activation-client.js.map +1 -0
- package/dist/platform/device-isolation.d.ts +35 -0
- package/dist/platform/device-isolation.d.ts.map +1 -0
- package/dist/platform/device-isolation.js +90 -0
- package/dist/platform/device-isolation.js.map +1 -0
- package/dist/platform/device-paths.d.ts +9 -0
- package/dist/platform/device-paths.d.ts.map +1 -0
- package/dist/platform/device-paths.js +14 -0
- package/dist/platform/device-paths.js.map +1 -0
- package/dist/platform/device.d.ts +77 -0
- package/dist/platform/device.d.ts.map +1 -0
- package/dist/platform/device.js +212 -0
- package/dist/platform/device.js.map +1 -0
- package/dist/platform/host-command-context.d.ts +15 -0
- package/dist/platform/host-command-context.d.ts.map +1 -0
- package/dist/platform/host-command-context.js +26 -0
- package/dist/platform/host-command-context.js.map +1 -0
- package/dist/platform/secure-host-file.d.ts +12 -0
- package/dist/platform/secure-host-file.d.ts.map +1 -0
- package/dist/platform/secure-host-file.js +182 -0
- package/dist/platform/secure-host-file.js.map +1 -0
- package/dist/services/group-creator.d.ts +8 -0
- package/dist/services/group-creator.d.ts.map +1 -1
- package/dist/services/group-creator.js +42 -0
- package/dist/services/group-creator.js.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/atomic-write.d.ts +13 -0
- package/dist/utils/atomic-write.d.ts.map +1 -1
- package/dist/utils/atomic-write.js +89 -9
- package/dist/utils/atomic-write.js.map +1 -1
- package/dist/utils/input-gate.d.ts +41 -0
- package/dist/utils/input-gate.d.ts.map +1 -1
- package/dist/utils/input-gate.js +41 -0
- package/dist/utils/input-gate.js.map +1 -1
- package/dist/worker.js +328 -22
- package/dist/worker.js.map +1 -1
- package/dist/workflows/events/payloads.d.ts +4 -4
- package/dist/workflows/events/schema.d.ts +16 -16
- package/package.json +6 -3
package/dist/cli.js
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* botmux logs [--lines] — view daemon logs
|
|
13
13
|
* botmux status — show daemon status
|
|
14
14
|
* botmux upgrade|update — upgrade to latest version
|
|
15
|
+
* botmux device enroll|status|logout — manage the host desktop device credential
|
|
15
16
|
* botmux list — interactive session picker (TUI), attach to tmux
|
|
16
17
|
* botmux list --plain — plain table output (for piping / scripts)
|
|
17
18
|
* botmux delete <id> — close a session by ID prefix
|
|
@@ -338,6 +339,10 @@ function ecosystemConfig() {
|
|
|
338
339
|
const externalHostEnv = resolveDaemonExternalHostEnv(process.env, existsSync(ENV_FILE) ? readFileSync(ENV_FILE, 'utf-8') : undefined);
|
|
339
340
|
const baseApp = {
|
|
340
341
|
script: daemonScript,
|
|
342
|
+
// Pin every managed core process to the Node that invoked this CLI. This
|
|
343
|
+
// keeps GUI/launchd starts independent from PATH and lets Desktop replace
|
|
344
|
+
// an external fleet without also killing unrelated plugin services.
|
|
345
|
+
interpreter: process.execPath,
|
|
341
346
|
cwd: CONFIG_DIR,
|
|
342
347
|
autorestart: true,
|
|
343
348
|
max_restarts: 10,
|
|
@@ -383,6 +388,7 @@ function ecosystemConfig() {
|
|
|
383
388
|
apps.push({
|
|
384
389
|
name: 'botmux-dashboard',
|
|
385
390
|
script: join(PKG_ROOT, 'dist', 'dashboard.js'),
|
|
391
|
+
interpreter: process.execPath,
|
|
386
392
|
cwd: PKG_ROOT,
|
|
387
393
|
autorestart: true,
|
|
388
394
|
max_restarts: 10,
|
|
@@ -4198,6 +4204,8 @@ botmux v${getVersion()} — IM ↔ AI 编程 CLI 桥接
|
|
|
4198
4204
|
status 查看 daemon 状态
|
|
4199
4205
|
upgrade 升级到最新版本(别名:update)
|
|
4200
4206
|
dashboard 打印新的 Web Dashboard 一次性登录 URL(旧 token 同时失效)
|
|
4207
|
+
device enroll|status|logout
|
|
4208
|
+
在宿主终端注册、查看或清除 desktop device 凭证(AI CLI 会话内拒绝)
|
|
4201
4209
|
list 列出活跃会话(交互式选择并连接 tmux)
|
|
4202
4210
|
--plain 纯文本表格输出(管道/脚本场景)
|
|
4203
4211
|
delete <id> 关闭指定会话(支持 ID 前缀匹配)
|
|
@@ -7105,6 +7113,7 @@ botmux create-group — 用一组机器人新建飞书群
|
|
|
7105
7113
|
用法:
|
|
7106
7114
|
botmux create-group --bot <name|larkAppId> [--bot ...] [--name "群名"]
|
|
7107
7115
|
[--working-dir <path>]
|
|
7116
|
+
[--kickoff-bot <open_id> --kickoff-prompt "文本"]
|
|
7108
7117
|
|
|
7109
7118
|
参数:
|
|
7110
7119
|
--bot <ref> 至少一个,可多次。ref 推荐用 bot 显示名(同 botmux send 的 @<name>)或完整 larkAppId;
|
|
@@ -7115,6 +7124,10 @@ botmux create-group — 用一组机器人新建飞书群
|
|
|
7115
7124
|
--working-dir <path>
|
|
7116
7125
|
可选;创建成功后,把新群为所有成功入群的 bot 绑定到该目录(等价于逐个 /oncall bind),
|
|
7117
7126
|
下次在群里开新话题时直接使用该目录,跳过仓库选择卡片。也可写作 --cwd / --dir。
|
|
7127
|
+
--kickoff-bot <open_id> 可选;建群成功后由 creator @ 该 bot 并发送 --kickoff-prompt,
|
|
7128
|
+
触发该 bot 自动开始工作(如 PR review)。需配合 --kickoff-prompt 使用。
|
|
7129
|
+
该 bot 必须已在 --bot 列表中(即已是群成员)。
|
|
7130
|
+
--kickoff-prompt "文本" 可选;与 --kickoff-bot 配合使用,@ bot 后发送的 prompt 文本。
|
|
7118
7131
|
|
|
7119
7132
|
行为:
|
|
7120
7133
|
- 第一个解析到的 bot 作为 creator(决定建群身份 + 初始群主 + open_id app scope)。
|
|
@@ -7122,6 +7135,8 @@ botmux create-group — 用一组机器人新建飞书群
|
|
|
7122
7135
|
转不出来或为空则跳过对应步骤,stderr warning)。
|
|
7123
7136
|
- 不依赖 botmux 会话,任何环境都能跑。
|
|
7124
7137
|
- --working-dir 会先校验路径存在且是目录;绑定失败不会重复建群,会在 stderr 给出逐 bot 结果。
|
|
7138
|
+
- --kickoff-bot/--kickoff-prompt:creator 建群后 @ 指定 bot 并发 prompt;该 bot 收到 @ 会自动起会话。
|
|
7139
|
+
注意:creator 不能 @ 自己(自消息被忽略),故 --kickoff-bot 应选 creator 之外的 bot。
|
|
7125
7140
|
|
|
7126
7141
|
输出协议(skill 友好):
|
|
7127
7142
|
- 成功(即使 transfer/notify 部分失败):stdout 单行 chatId,exit 0;stderr 打人类提示 + applink。
|
|
@@ -7133,6 +7148,8 @@ botmux create-group — 用一组机器人新建飞书群
|
|
|
7133
7148
|
const botRefs = argValues(rest, '--bot');
|
|
7134
7149
|
const name = argValue(rest, '--name');
|
|
7135
7150
|
const workingDirArg = argValue(rest, '--working-dir', '--cwd', '--dir');
|
|
7151
|
+
const kickoffBot = argValue(rest, '--kickoff-bot');
|
|
7152
|
+
const kickoffPrompt = argValue(rest, '--kickoff-prompt');
|
|
7136
7153
|
let bindWorkingDir;
|
|
7137
7154
|
let bindWorkingDirResolved;
|
|
7138
7155
|
if (workingDirArg !== undefined) {
|
|
@@ -7174,7 +7191,7 @@ botmux create-group — 用一组机器人新建飞书群
|
|
|
7174
7191
|
botInfoEntries = JSON.parse(readFileSync(botInfoPath, 'utf-8'));
|
|
7175
7192
|
}
|
|
7176
7193
|
catch { /* */ }
|
|
7177
|
-
const { resolveBotRefs } = await import('./cli/create-group-resolver.js');
|
|
7194
|
+
const { resolveBotRefs, resolveKickoff } = await import('./cli/create-group-resolver.js');
|
|
7178
7195
|
const resolved = resolveBotRefs(botRefs, botConfigs, botInfoEntries.map(b => ({ larkAppId: b.larkAppId, botName: b.botName })));
|
|
7179
7196
|
for (const w of resolved.ambiguousWarnings)
|
|
7180
7197
|
console.error(`⚠️ ${w}`);
|
|
@@ -7192,6 +7209,11 @@ botmux create-group — 用一组机器人新建飞书群
|
|
|
7192
7209
|
process.exit(1);
|
|
7193
7210
|
}
|
|
7194
7211
|
const creatorLarkAppId = resolved.larkAppIds[0];
|
|
7212
|
+
const kickoff = resolveKickoff(kickoffBot, kickoffPrompt, resolved.larkAppIds, botInfoEntries.map(b => ({ larkAppId: b.larkAppId, botOpenId: b.botOpenId })));
|
|
7213
|
+
if (!kickoff.ok) {
|
|
7214
|
+
console.error(kickoff.error);
|
|
7215
|
+
process.exit(1);
|
|
7216
|
+
}
|
|
7195
7217
|
// Register bots so getBotClient works inside service
|
|
7196
7218
|
const fullConfigs = loadBotConfigs();
|
|
7197
7219
|
const needed = new Set(resolved.larkAppIds);
|
|
@@ -7231,6 +7253,8 @@ botmux create-group — 用一组机器人新建飞书群
|
|
|
7231
7253
|
transferOwnerTo: targetOpenId,
|
|
7232
7254
|
notifyOwnerOpenId: targetOpenId,
|
|
7233
7255
|
bindWorkingDir,
|
|
7256
|
+
kickoffBotLarkAppId: kickoff.targetLarkAppId,
|
|
7257
|
+
kickoffPrompt: kickoff.prompt,
|
|
7234
7258
|
});
|
|
7235
7259
|
}
|
|
7236
7260
|
catch (err) {
|
|
@@ -7261,6 +7285,12 @@ botmux create-group — 用一组机器人新建飞书群
|
|
|
7261
7285
|
else if (result.notifyMessageId) {
|
|
7262
7286
|
console.error(`✅ @通知已发送 (msg ${result.notifyMessageId})`);
|
|
7263
7287
|
}
|
|
7288
|
+
if (result.kickoffError) {
|
|
7289
|
+
console.error(`⚠️ kickoff 消息发送失败: ${result.kickoffError}`);
|
|
7290
|
+
}
|
|
7291
|
+
else if (result.kickoffMessageId) {
|
|
7292
|
+
console.error(`✅ kickoff 消息已发送 (msg ${result.kickoffMessageId})`);
|
|
7293
|
+
}
|
|
7264
7294
|
if (bindWorkingDir) {
|
|
7265
7295
|
const ok = result.oncallBindings.filter(b => b.ok).length;
|
|
7266
7296
|
const failed = result.oncallBindings.filter(b => !b.ok);
|
|
@@ -8741,6 +8771,11 @@ switch (command) {
|
|
|
8741
8771
|
await cmdBind(process.argv.slice(3));
|
|
8742
8772
|
break;
|
|
8743
8773
|
}
|
|
8774
|
+
case 'device': {
|
|
8775
|
+
const { runDeviceCommand } = await import('./platform/device-command.js');
|
|
8776
|
+
process.exitCode = await runDeviceCommand(process.argv.slice(3));
|
|
8777
|
+
break;
|
|
8778
|
+
}
|
|
8744
8779
|
case 'list':
|
|
8745
8780
|
case 'ls':
|
|
8746
8781
|
await cmdList();
|