botmux 2.75.0 → 2.75.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.
Files changed (71) hide show
  1. package/dist/bot-registry.d.ts.map +1 -1
  2. package/dist/bot-registry.js +19 -5
  3. package/dist/bot-registry.js.map +1 -1
  4. package/dist/cli/pm2-command.d.ts +6 -0
  5. package/dist/cli/pm2-command.d.ts.map +1 -0
  6. package/dist/cli/pm2-command.js +7 -0
  7. package/dist/cli/pm2-command.js.map +1 -0
  8. package/dist/cli/stdin-encoding.d.ts +3 -0
  9. package/dist/cli/stdin-encoding.d.ts.map +1 -0
  10. package/dist/cli/stdin-encoding.js +19 -0
  11. package/dist/cli/stdin-encoding.js.map +1 -0
  12. package/dist/cli.d.ts.map +1 -1
  13. package/dist/cli.js +19 -4
  14. package/dist/cli.js.map +1 -1
  15. package/dist/core/maintenance.d.ts +18 -0
  16. package/dist/core/maintenance.d.ts.map +1 -1
  17. package/dist/core/maintenance.js +56 -4
  18. package/dist/core/maintenance.js.map +1 -1
  19. package/dist/dashboard/auth.d.ts.map +1 -1
  20. package/dist/dashboard/auth.js +2 -1
  21. package/dist/dashboard/auth.js.map +1 -1
  22. package/dist/dashboard/hd2d-assets.d.ts +20 -0
  23. package/dist/dashboard/hd2d-assets.d.ts.map +1 -0
  24. package/dist/dashboard/hd2d-assets.js +216 -0
  25. package/dist/dashboard/hd2d-assets.js.map +1 -0
  26. package/dist/dashboard/web/app.d.ts.map +1 -1
  27. package/dist/dashboard/web/app.js +3 -0
  28. package/dist/dashboard/web/app.js.map +1 -1
  29. package/dist/dashboard/web/office.d.ts +2 -0
  30. package/dist/dashboard/web/office.d.ts.map +1 -0
  31. package/dist/dashboard/web/office.js +140 -0
  32. package/dist/dashboard/web/office.js.map +1 -0
  33. package/dist/dashboard-web/app.js +327 -299
  34. package/dist/dashboard-web/game/index.apple-touch-icon.png +0 -0
  35. package/dist/dashboard-web/game/index.audio.position.worklet.js +66 -0
  36. package/dist/dashboard-web/game/index.audio.worklet.js +213 -0
  37. package/dist/dashboard-web/game/index.html +224 -0
  38. package/dist/dashboard-web/game/index.icon.png +0 -0
  39. package/dist/dashboard-web/game/index.js +909 -0
  40. package/dist/dashboard-web/game/index.png +0 -0
  41. package/dist/dashboard-web/index.html +1 -0
  42. package/dist/dashboard.js +74 -6
  43. package/dist/dashboard.js.map +1 -1
  44. package/dist/global-config.d.ts +5 -0
  45. package/dist/global-config.d.ts.map +1 -1
  46. package/dist/global-config.js +2 -0
  47. package/dist/global-config.js.map +1 -1
  48. package/dist/i18n/en.js +2 -2
  49. package/dist/i18n/en.js.map +1 -1
  50. package/dist/i18n/zh.js +2 -2
  51. package/dist/i18n/zh.js.map +1 -1
  52. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  53. package/dist/im/lark/event-dispatcher.js +66 -6
  54. package/dist/im/lark/event-dispatcher.js.map +1 -1
  55. package/dist/im/lark/reply-mode-command.d.ts.map +1 -1
  56. package/dist/im/lark/reply-mode-command.js +4 -1
  57. package/dist/im/lark/reply-mode-command.js.map +1 -1
  58. package/dist/services/bridge-rotation-policy.d.ts +40 -0
  59. package/dist/services/bridge-rotation-policy.d.ts.map +1 -1
  60. package/dist/services/bridge-rotation-policy.js +38 -0
  61. package/dist/services/bridge-rotation-policy.js.map +1 -1
  62. package/dist/services/chat-reply-mode-store.d.ts +1 -1
  63. package/dist/services/chat-reply-mode-store.d.ts.map +1 -1
  64. package/dist/services/chat-reply-mode-store.js +8 -9
  65. package/dist/services/chat-reply-mode-store.js.map +1 -1
  66. package/dist/skills/definitions.d.ts.map +1 -1
  67. package/dist/skills/definitions.js +17 -3
  68. package/dist/skills/definitions.js.map +1 -1
  69. package/dist/worker.js +23 -3
  70. package/dist/worker.js.map +1 -1
  71. package/package.json +2 -2
@@ -4,12 +4,11 @@
4
4
  * Three modes (tri-state) — unifies #116 + #131 into one knob so a chat resolves
5
5
  * to EXACTLY ONE mode and the two thread-reply mechanisms can never compete:
6
6
  * • chat — flat chat-scope replies in the group (default).
7
- * • new-topic each top-level @mention opens a fresh thread-scope session
8
- * under the trigger (its own worker/cwd/context). This is the
9
- * per-bot fork behavior from #116.
10
- * • shared 话题模式但复用同一个 session: reuse the bot's existing
11
- * chat-scope session/worker/cwd, but route this turn's reply
12
- * into the trigger message's thread (#131).
7
+ * • topic/shared 话题展示但复用同一个 session: reuse the bot's existing
8
+ * chat-scope session/worker/cwd, but route this turn's reply
9
+ * into the trigger message's thread (#131).
10
+ * • new-topic explicit fork mode: each top-level @mention opens a fresh
11
+ * thread-scope session under the trigger (its own worker/cwd/context).
13
12
  *
14
13
  * Resolution: per-chat override (`chatReplyModes[chatId]`) wins; otherwise fall
15
14
  * back to the per-bot default (`regularGroupReplyMode`, default 'chat'). The
@@ -25,15 +24,15 @@ export function normalizeChatReplyMode(raw) {
25
24
  return undefined;
26
25
  if (v === 'chat')
27
26
  return 'chat';
28
- if (v === 'topic' || v === 'new-topic' || v === 'newtopic' || v === 'thread')
27
+ if (v === 'new-topic' || v === 'newtopic' || v === 'thread')
29
28
  return 'new-topic';
30
- if (v === 'shared' || v === 'share' || v === 'alias' || v === 'topic-alias' || v === 'topic_alias')
29
+ if (v === 'topic' || v === 'shared' || v === 'share' || v === 'alias' || v === 'topic-alias' || v === 'topic_alias')
31
30
  return 'shared';
32
31
  return undefined;
33
32
  }
34
33
  /** Short command-word label for status / confirmation messages. */
35
34
  export function replyModeLabel(mode) {
36
- return mode === 'new-topic' ? 'topic' : mode === 'shared' ? 'shared' : 'chat';
35
+ return mode === 'shared' ? 'topic' : mode === 'new-topic' ? 'new-topic' : 'chat';
37
36
  }
38
37
  /** Per-bot default regular-group mode (`regularGroupReplyMode`, default 'chat'). */
39
38
  function regularGroupDefaultMode(larkAppId) {
@@ -1 +1 @@
1
- {"version":3,"file":"chat-reply-mode-store.js","sourceRoot":"","sources":["../../src/services/chat-reply-mode-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-reply-mode-store.js","sourceRoot":"","sources":["../../src/services/chat-reply-mode-store.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/skills/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,QAAQ;IACvB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;CACjB;AA24BD,eAAO,MAAM,SAAS,wjJAiErB,CAAC;AAoGF,eAAO,MAAM,cAAc,eAAe,CAAC;AAE3C,eAAO,MAAM,cAAc,EAAE,QAAQ,EAUpC,CAAC;AAEF;;qCAEqC;AACrC,eAAO,MAAM,mBAAmB,EAAE,MAAM,EAKvC,CAAC"}
1
+ {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/skills/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,QAAQ;IACvB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;CACjB;AAy5BD,eAAO,MAAM,SAAS,wjJAiErB,CAAC;AAoGF,eAAO,MAAM,cAAc,eAAe,CAAC;AAE3C,eAAO,MAAM,cAAc,EAAE,QAAQ,EAUpC,CAAC;AAEF;;qCAEqC;AACrC,eAAO,MAAM,mBAAmB,EAAE,MAAM,EAKvC,CAAC"}
@@ -254,13 +254,13 @@ botmux send --attention=blocked --mention-back "缺 TOS 上传密钥,拿不到
254
254
 
255
255
  ### 纯文本(最常见)
256
256
 
257
- 多行内容必须用 heredoc;不要写成 \`botmux send "第一行\\n第二行"\`,否则用户会在飞书里看到字面量 \`\\n\`。
257
+ 多行内容不要写成 \`botmux send "第一行\\n第二行"\`,否则用户会在飞书里看到字面量 \`\\n\`。在 Unix shell 里可用 heredoc;在 Windows/PowerShell 里发送包含中文或 emoji 的多行内容时,必须先写 UTF-8 文件,再用 \`--content-file\`,不要把中文直接通过 here-string、\`echo\` 或管道送进 stdin。
258
258
 
259
259
  \`\`\`bash
260
260
  # 直接传参
261
261
  botmux send "分析完成,核心问题是 X"
262
262
 
263
- # heredoc(多行内容推荐)
263
+ # Unix shell: heredoc
264
264
  botmux send <<'EOF'
265
265
  ## 分析报告
266
266
 
@@ -274,9 +274,23 @@ EOF
274
274
  echo "构建成功 ✅" | botmux send
275
275
  \`\`\`
276
276
 
277
+ \`\`\`powershell
278
+ # Windows PowerShell: 中文/emoji 多行内容
279
+ $msg = Join-Path $env:TEMP "botmux-message.md"
280
+ @'
281
+ ## 分析报告
282
+
283
+ 1. 发现问题 A
284
+ 2. 建议方案 B
285
+
286
+ 需要你确认后我再动手。
287
+ '@ | Set-Content -LiteralPath $msg -Encoding utf8
288
+ botmux send --content-file $msg
289
+ \`\`\`
290
+
277
291
  > ⚠️ **重要:single-quoted heredoc \`<<'EOF'\` 内反引号直接写真反引号,不要加反斜杠转义。**
278
292
  > 原因:单引号 heredoc 已经禁用所有特殊字符解释(\`$\`、反斜杠、反引号一律按字面量处理)。再加反斜杠反而会把"反斜杠+反引号"作为字面字符混进 markdown,让 markdown-it 按 CommonMark 的 backslash-escape 处理——结果卡片里三反引号变成可见字符、代码块整段废掉。
279
- > 自检:写完 bash 命令后扫一眼,如果 EOF 块内**任何反引号前面带反斜杠**,删掉那个反斜杠。
293
+ > 自检:写完 bash 命令后扫一眼,如果 EOF 块内**任何反引号前面带反斜杠**,删掉那个反斜杠。Windows/PowerShell 需要中文或 emoji 时优先用上面的 \`--content-file\` 写法。
280
294
 
281
295
  ### 可用的 markdown 语法(自动走卡片)
282
296
 
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/skills/definitions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/skills/definitions.ts"],"names":[],"mappings":"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"}
package/dist/worker.js CHANGED
@@ -22,7 +22,7 @@ import { shouldSuppressBridgeEmit } from './services/bridge-fallback-gate.js';
22
22
  import { shouldWriteNow } from './utils/input-gate.js';
23
23
  import { ReadyGate, shouldArmReadyGate } from './utils/ready-gate.js';
24
24
  import { InflightInputTracker } from './core/inflight-input-tracker.js';
25
- import { shouldRunQuietRotation, evaluatePidResolverPullback, decideFingerprintSwitch, sessionIdFromJsonlPath, SESSION_ID_FILENAME_RE, } from './services/bridge-rotation-policy.js';
25
+ import { shouldRunQuietRotation, evaluatePidResolverPullback, decideFingerprintSwitch, shouldHealAbsentBaseline, sessionIdFromJsonlPath, SESSION_ID_FILENAME_RE, } from './services/bridge-rotation-policy.js';
26
26
  import { CodexBridgeQueue } from './services/codex-bridge-queue.js';
27
27
  import { drainCodexRollout, findCodexRolloutBySessionId, findCodexRolloutByPid, splitCodexEventsByCutoff, extractLastCodexTurn } from './services/codex-transcript.js';
28
28
  import { findTraexRolloutBySessionId, findTraexRolloutByPid } from './services/traex-transcript.js';
@@ -1416,8 +1416,28 @@ function bridgeMarkPendingTurn(messageText, preferredTurnId) {
1416
1416
  if (!bridgeJsonlPath)
1417
1417
  return undefined;
1418
1418
  if (!bridgeBaselineDone) {
1419
- log('Bridge baseline not ready this turn will not have transcript-driven final_output');
1420
- return undefined;
1419
+ // Self-heal a stuck baseline: the guessed transcript path never
1420
+ // materialised (Claude wrote under a different sessionId, a stale resume
1421
+ // id, or an /adopt sid persisted as the botmux sid). An absent file has
1422
+ // no history to absorb, so arm fresh-empty readiness so THIS turn gets
1423
+ // marked — the mark arms the per-tick exact-content fingerprint recovery,
1424
+ // which finds the jsonl Claude actually wrote this message to and switches
1425
+ // the bridge onto it (no dependence on Claude-internal pid files, so
1426
+ // version-robust). See shouldHealAbsentBaseline for the full rationale.
1427
+ if (shouldHealAbsentBaseline({
1428
+ baselineDone: bridgeBaselineDone,
1429
+ hasJsonlPath: !!bridgeJsonlPath,
1430
+ jsonlFileExists: existsSyncSafe(bridgeJsonlPath),
1431
+ })) {
1432
+ bridgeOffset = 0;
1433
+ bridgePendingTail = '';
1434
+ bridgeBaselineDone = true;
1435
+ log(`Bridge baseline self-healed: guessed transcript ${bridgeJsonlPath} absent; fresh-empty readiness armed for fingerprint recovery`);
1436
+ }
1437
+ else {
1438
+ log('Bridge baseline not ready — this turn will not have transcript-driven final_output');
1439
+ return undefined;
1440
+ }
1421
1441
  }
1422
1442
  const fingerprint = makeFingerprint(messageText);
1423
1443
  // Full normalised content powers the unknown-sid recovery path. When a