botmux 2.31.1 → 2.32.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 (50) hide show
  1. package/README.en.md +69 -18
  2. package/README.md +70 -19
  3. package/dist/adapters/cli/antigravity.d.ts +4 -0
  4. package/dist/adapters/cli/antigravity.d.ts.map +1 -0
  5. package/dist/adapters/cli/antigravity.js +264 -0
  6. package/dist/adapters/cli/antigravity.js.map +1 -0
  7. package/dist/adapters/cli/registry.d.ts +2 -1
  8. package/dist/adapters/cli/registry.d.ts.map +1 -1
  9. package/dist/adapters/cli/registry.js +3 -1
  10. package/dist/adapters/cli/registry.js.map +1 -1
  11. package/dist/adapters/cli/types.d.ts +1 -1
  12. package/dist/adapters/cli/types.d.ts.map +1 -1
  13. package/dist/cli.js +73 -8
  14. package/dist/cli.js.map +1 -1
  15. package/dist/core/command-handler.d.ts.map +1 -1
  16. package/dist/core/command-handler.js +23 -2
  17. package/dist/core/command-handler.js.map +1 -1
  18. package/dist/core/session-manager.d.ts.map +1 -1
  19. package/dist/core/session-manager.js +5 -1
  20. package/dist/core/session-manager.js.map +1 -1
  21. package/dist/daemon.d.ts.map +1 -1
  22. package/dist/daemon.js +27 -0
  23. package/dist/daemon.js.map +1 -1
  24. package/dist/i18n/en.d.ts.map +1 -1
  25. package/dist/i18n/en.js +1 -0
  26. package/dist/i18n/en.js.map +1 -1
  27. package/dist/i18n/zh.d.ts.map +1 -1
  28. package/dist/i18n/zh.js +1 -0
  29. package/dist/i18n/zh.js.map +1 -1
  30. package/dist/im/lark/card-builder.d.ts.map +1 -1
  31. package/dist/im/lark/card-builder.js +1 -0
  32. package/dist/im/lark/card-builder.js.map +1 -1
  33. package/dist/im/lark/client.d.ts +23 -0
  34. package/dist/im/lark/client.d.ts.map +1 -1
  35. package/dist/im/lark/client.js +30 -0
  36. package/dist/im/lark/client.js.map +1 -1
  37. package/dist/setup/bot-config-editor.d.ts +1 -1
  38. package/dist/setup/bot-config-editor.d.ts.map +1 -1
  39. package/dist/setup/bot-config-editor.js +3 -2
  40. package/dist/setup/bot-config-editor.js.map +1 -1
  41. package/dist/skills/definitions.d.ts.map +1 -1
  42. package/dist/skills/definitions.js +19 -4
  43. package/dist/skills/definitions.js.map +1 -1
  44. package/dist/utils/working-dir.d.ts +11 -0
  45. package/dist/utils/working-dir.d.ts.map +1 -0
  46. package/dist/utils/working-dir.js +45 -0
  47. package/dist/utils/working-dir.js.map +1 -0
  48. package/dist/worker.js +1 -1
  49. package/dist/worker.js.map +1 -1
  50. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/adapters/cli/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/adapters/cli/registry.ts"],"names":[],"mappings":"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"}
@@ -114,5 +114,5 @@ export interface CliAdapter {
114
114
  /** Whether CLI uses alternate screen buffer */
115
115
  readonly altScreen: boolean;
116
116
  }
117
- export type CliId = 'claude-code' | 'aiden' | 'coco' | 'codex' | 'cursor' | 'gemini' | 'opencode';
117
+ export type CliId = 'claude-code' | 'aiden' | 'coco' | 'codex' | 'cursor' | 'gemini' | 'opencode' | 'antigravity';
118
118
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kEAAkE;IAClE,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,4FAA4F;IAC5F,eAAe,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1C,8FAA8F;IAC9F,SAAS,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;2FAEuF;IACvF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;yEAEqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;+DAC2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,+CAA+C;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B;;;;yCAIqC;IACrC,SAAS,CAAC,IAAI,EAAE;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC;QAChB,sFAAsF;QACtF,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,+EAA+E;QAC/E,MAAM,CAAC,EAAE,OAAO,qBAAqB,EAAE,MAAM,CAAC;KAC/C,GAAG,MAAM,EAAE,CAAC;IAEb;+DAC2D;IAC3D,QAAQ,CAAC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAE9C;;;;;;;;;;;;;0DAasD;IACtD,kBAAkB,CAAC,CAAC,IAAI,EAAE;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,uEAAuE;QACvE,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,MAAM,GAAG,IAAI,CAAC;IAElB;;;;;;;;;;;;;gEAa4D;IAC5D,UAAU,CACR,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,GAAG;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB;;sEAE8D;QAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KAC5C,CAAC,CAAC;IAEH;;;4EAGwE;IACxE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAE5B,wFAAwF;IACxF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAEpC;;;;;sEAKkE;IAClE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAE/B;qEACiE;IACjE,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAE/B;;2EAEuE;IACvE,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEzC;;;;6EAIyE;IACzE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAErC,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,MAAM,KAAK,GAAG,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kEAAkE;IAClE,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,4FAA4F;IAC5F,eAAe,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1C,8FAA8F;IAC9F,SAAS,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;2FAEuF;IACvF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;yEAEqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;+DAC2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,+CAA+C;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B;;;;yCAIqC;IACrC,SAAS,CAAC,IAAI,EAAE;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC;QAChB,sFAAsF;QACtF,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,+EAA+E;QAC/E,MAAM,CAAC,EAAE,OAAO,qBAAqB,EAAE,MAAM,CAAC;KAC/C,GAAG,MAAM,EAAE,CAAC;IAEb;+DAC2D;IAC3D,QAAQ,CAAC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAE9C;;;;;;;;;;;;;0DAasD;IACtD,kBAAkB,CAAC,CAAC,IAAI,EAAE;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,uEAAuE;QACvE,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,MAAM,GAAG,IAAI,CAAC;IAElB;;;;;;;;;;;;;gEAa4D;IAC5D,UAAU,CACR,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,GAAG;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB;;sEAE8D;QAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KAC5C,CAAC,CAAC;IAEH;;;4EAGwE;IACxE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAE5B,wFAAwF;IACxF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAEpC;;;;;sEAKkE;IAClE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAE/B;qEACiE;IACjE,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAE/B;;2EAEuE;IACvE,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEzC;;;;6EAIyE;IACzE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAErC,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,MAAM,KAAK,GAAG,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAC"}
package/dist/cli.js CHANGED
@@ -30,6 +30,7 @@ import { tmuxEnv } from './setup/ensure-tmux.js';
30
30
  import { writeBotsJsonAtomic as writeBotsAtomic } from './setup/bots-store.js';
31
31
  import { applyBotConfigEdits, assertUniqueBotProcessNames, botProcessName, normalizeBotConfig, parseBotConfigsJson, parseBotSelection, removeBotConfig, resolveCliId, } from './setup/bot-config-editor.js';
32
32
  import { logger } from './utils/logger.js';
33
+ import { invalidWorkingDirs } from './utils/working-dir.js';
33
34
  import { firstPositional } from './cli/arg-utils.js';
34
35
  import { isLocale, setDefaultLocale, SUPPORTED_LOCALES } from './i18n/index.js';
35
36
  import { readGlobalConfig, setGlobalLocale, globalConfigPath } from './global-config.js';
@@ -173,6 +174,16 @@ function loadBotsJson() {
173
174
  }
174
175
  return [];
175
176
  }
177
+ function ensureBotWorkingDirsExist(bot, context = 'workingDir') {
178
+ const invalid = invalidWorkingDirs(bot);
179
+ if (invalid.length === 0)
180
+ return true;
181
+ console.log(`\n❌ ${context} 指向的目录不存在或不是目录:`);
182
+ for (const dir of invalid)
183
+ console.log(` - ${dir}`);
184
+ console.log(' 请先创建目录,或重新填写一个已存在的工作目录。');
185
+ return false;
186
+ }
176
187
  function ensureUniqueBotProcessNames(bots) {
177
188
  try {
178
189
  assertUniqueBotProcessNames(bots, PM2_NAME);
@@ -421,7 +432,7 @@ async function promptBotConfig(rl) {
421
432
  return null;
422
433
  }
423
434
  console.log('✅ 凭证有效(tenant_access_token 已成功获取)\n');
424
- console.log('支持的 CLI: 1) claude-code 2) aiden 3) coco 4) codex 5) cursor 6) gemini 7) opencode');
435
+ console.log('支持的 CLI: 1) claude-code 2) aiden 3) coco 4) codex 5) cursor 6) gemini 7) opencode 8) antigravity');
425
436
  const cliChoice = await ask(rl, 'CLI 适配器 [1]: ');
426
437
  let cliId;
427
438
  try {
@@ -450,6 +461,8 @@ async function promptBotConfig(rl) {
450
461
  // 字段即可. 手动 fallback 场景没 open_id, 字段直接不写 (== 不限制).
451
462
  if (creds.userOpenId)
452
463
  bot.allowedUsers = [creds.userOpenId];
464
+ if (!ensureBotWorkingDirsExist(bot, '默认工作目录'))
465
+ return null;
453
466
  return normalizeBotConfig(bot);
454
467
  }
455
468
  function formatOptionalValue(v) {
@@ -498,7 +511,7 @@ async function promptEditBotConfig(rl, bot) {
498
511
  '留空保留当前值。',
499
512
  ]);
500
513
  input.larkAppSecret = await ask(rl, `LARK_APP_SECRET [保留当前值]: `);
501
- console.log('\n支持的 CLI: 1) claude-code 2) aiden 3) coco 4) codex 5) cursor 6) gemini 7) opencode');
514
+ console.log('\n支持的 CLI: 1) claude-code 2) aiden 3) coco 4) codex 5) cursor 6) gemini 7) opencode 8) antigravity');
502
515
  printInputHelp('CLI 适配器', [
503
516
  '选择 botmux 需要套用哪一种 CLI 参数协议和会话恢复方式。',
504
517
  '留空保留当前值;可以输入序号,也可以直接输入适配器 ID。',
@@ -638,6 +651,11 @@ async function cmdSetup() {
638
651
  console.log(`\n❌ 编辑失败: ${err?.message ?? String(err)}`);
639
652
  return;
640
653
  }
654
+ if (!ensureBotWorkingDirsExist(edited, '默认工作目录')) {
655
+ rl.close();
656
+ console.log(' 配置未修改。');
657
+ return;
658
+ }
641
659
  // 凭证字段有变化时, 像 promptBotConfig 一样跑一次 tenant_access_token
642
660
  // 校验. 失败不写盘——避免编辑后 typo 一个字符, daemon 重启时才发现.
643
661
  // (cmdRestart 不校验凭证, 只 cmdStart 校验, 所以编辑路径必须自己兜.)
@@ -1934,7 +1952,9 @@ botmux v${getVersion()} — IM ↔ AI 编程 CLI 桥接
1934
1952
  --top-level 发顶层消息(不回复进当前话题)
1935
1953
  --chat-id <oc_xxx> 指定目标群(默认当前话题所在群)
1936
1954
  bots list 列出当前群聊中的机器人(含 open_id)
1937
- history [--limit N] 拉取当前会话的消息历史 (JSON),话题群 → 话题内,普通群 → 整群
1955
+ history [--limit N] [--scope session|thread|chat|ambient]
1956
+ 拉取当前会话的消息历史 (JSON)。默认按 session scope:话题/话题群 → 话题内,普通群 → 整群;
1957
+ thread 会话里可用 --scope ambient 读取 thread 外的群聊上下文
1938
1958
  quoted <message_id> 拉取被引用的单条消息 (JSON),message_id 取自 daemon 注入的引用提示行
1939
1959
 
1940
1960
  新建飞书群:
@@ -2206,19 +2226,56 @@ async function resolveSessionAppId(sessionIdArg) {
2206
2226
  }
2207
2227
  async function cmdHistory(rest) {
2208
2228
  const limit = parseInt(argValue(rest, '--limit') ?? '50', 10);
2229
+ const scopeArg = argValue(rest, '--scope') ?? 'session';
2209
2230
  const sessionIdArg = argValue(rest, '--session-id');
2210
2231
  const { sid, larkAppId: appId, session: s } = await resolveSessionAppId(sessionIdArg);
2211
- const { listThreadMessages, listChatMessages } = await import('./im/lark/client.js');
2232
+ const validScopes = new Set(['session', 'thread', 'chat', 'ambient']);
2233
+ if (!validScopes.has(scopeArg)) {
2234
+ console.error(`无效 --scope: ${scopeArg}。可用: session | thread | chat | ambient`);
2235
+ process.exit(1);
2236
+ }
2237
+ const { getMessageDetail, listAmbientChatMessages, listThreadMessages, listChatMessages } = await import('./im/lark/client.js');
2212
2238
  const { parseApiMessage, cardContentHasUpgradeFallback, resolveMergedCardContent } = await import('./im/lark/message-parser.js');
2213
2239
  const { expandMergeForward } = await import('./im/lark/merge-forward.js');
2214
2240
  try {
2215
2241
  // Chat-scope sessions (普通群整群一会话) have no thread to walk — list the
2216
2242
  // chat container directly and let the caller cap with --limit. Thread-scope
2217
- // sessions walk the thread container by root_id.
2243
+ // sessions walk the thread container by root_id. `--scope chat|ambient`
2244
+ // lets a thread-scope session intentionally read outside its thread when
2245
+ // it needs the surrounding group conversation (for example `/t` spawned
2246
+ // from an ongoing 普通群 discussion).
2218
2247
  const isChatScope = s.scope === 'chat';
2219
- const raw = isChatScope
2248
+ const effectiveScope = scopeArg === 'session'
2249
+ ? (isChatScope ? 'chat' : 'thread')
2250
+ : scopeArg;
2251
+ if (effectiveScope === 'thread' && isChatScope) {
2252
+ console.error('当前 session 是 chat-scope,没有 thread 历史可读取。请使用 --scope chat。');
2253
+ process.exit(1);
2254
+ }
2255
+ if (effectiveScope === 'ambient' && isChatScope) {
2256
+ console.error('当前 session 是 chat-scope,没有 thread root 可作为 ambient 边界。请使用 --scope chat。');
2257
+ process.exit(1);
2258
+ }
2259
+ let ambientBeforeCreateTime;
2260
+ if (effectiveScope === 'ambient') {
2261
+ try {
2262
+ const detail = await getMessageDetail(appId, s.rootMessageId, { userCardContent: false });
2263
+ ambientBeforeCreateTime = detail?.items?.[0]?.create_time;
2264
+ }
2265
+ catch {
2266
+ // Best-effort only: ambient history should still work if the root
2267
+ // message was withdrawn or is otherwise unavailable; it will then fall
2268
+ // back to the chat tail with current-thread messages filtered out.
2269
+ }
2270
+ }
2271
+ const raw = effectiveScope === 'chat'
2220
2272
  ? await listChatMessages(appId, s.chatId, limit)
2221
- : await listThreadMessages(appId, s.chatId, s.rootMessageId, limit);
2273
+ : effectiveScope === 'ambient'
2274
+ ? await listAmbientChatMessages(appId, s.chatId, limit, {
2275
+ beforeCreateTime: ambientBeforeCreateTime,
2276
+ excludeRootMessageId: s.rootMessageId,
2277
+ })
2278
+ : await listThreadMessages(appId, s.chatId, s.rootMessageId, limit);
2222
2279
  // Expand merge_forward to <forwarded_messages> XML, mirroring the live event
2223
2280
  // path in daemon.ts. Each merge_forward gets its own numberer (we don't
2224
2281
  // download resources here — only [图片 N] placeholders matter).
@@ -2243,8 +2300,16 @@ async function cmdHistory(rest) {
2243
2300
  console.log(JSON.stringify({
2244
2301
  sessionId: sid,
2245
2302
  chatId: s.chatId,
2246
- scope: isChatScope ? 'chat' : 'thread',
2303
+ scope: effectiveScope,
2304
+ sessionScope: isChatScope ? 'chat' : 'thread',
2247
2305
  ...(isChatScope ? {} : { rootMessageId: s.rootMessageId }),
2306
+ ...(effectiveScope === 'ambient' ? {
2307
+ ambient: {
2308
+ source: 'chat',
2309
+ beforeCreateTime: ambientBeforeCreateTime,
2310
+ excludeRootMessageId: s.rootMessageId,
2311
+ },
2312
+ } : {}),
2248
2313
  messages,
2249
2314
  total: messages.length,
2250
2315
  }, null, 2));