botmux 2.52.0 → 2.54.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 (150) hide show
  1. package/README.en.md +22 -269
  2. package/README.md +21 -300
  3. package/dist/adapters/backend/session-backend-selector.d.ts +5 -1
  4. package/dist/adapters/backend/session-backend-selector.d.ts.map +1 -1
  5. package/dist/adapters/backend/session-backend-selector.js +15 -1
  6. package/dist/adapters/backend/session-backend-selector.js.map +1 -1
  7. package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
  8. package/dist/adapters/backend/tmux-backend.js +3 -0
  9. package/dist/adapters/backend/tmux-backend.js.map +1 -1
  10. package/dist/adapters/backend/types.d.ts +22 -0
  11. package/dist/adapters/backend/types.d.ts.map +1 -1
  12. package/dist/adapters/backend/types.js +7 -1
  13. package/dist/adapters/backend/types.js.map +1 -1
  14. package/dist/adapters/backend/zellij-backend.d.ts +132 -0
  15. package/dist/adapters/backend/zellij-backend.d.ts.map +1 -0
  16. package/dist/adapters/backend/zellij-backend.js +375 -0
  17. package/dist/adapters/backend/zellij-backend.js.map +1 -0
  18. package/dist/adapters/backend/zellij-observe-backend.d.ts +62 -0
  19. package/dist/adapters/backend/zellij-observe-backend.d.ts.map +1 -0
  20. package/dist/adapters/backend/zellij-observe-backend.js +218 -0
  21. package/dist/adapters/backend/zellij-observe-backend.js.map +1 -0
  22. package/dist/adapters/cli/claude-code.d.ts +39 -5
  23. package/dist/adapters/cli/claude-code.d.ts.map +1 -1
  24. package/dist/adapters/cli/claude-code.js +53 -31
  25. package/dist/adapters/cli/claude-code.js.map +1 -1
  26. package/dist/adapters/cli/registry.d.ts +2 -1
  27. package/dist/adapters/cli/registry.d.ts.map +1 -1
  28. package/dist/adapters/cli/registry.js +3 -1
  29. package/dist/adapters/cli/registry.js.map +1 -1
  30. package/dist/adapters/cli/seed.d.ts +29 -0
  31. package/dist/adapters/cli/seed.d.ts.map +1 -0
  32. package/dist/adapters/cli/seed.js +63 -0
  33. package/dist/adapters/cli/seed.js.map +1 -0
  34. package/dist/adapters/cli/types.d.ts +17 -1
  35. package/dist/adapters/cli/types.d.ts.map +1 -1
  36. package/dist/bot-registry.d.ts +1 -1
  37. package/dist/bot-registry.d.ts.map +1 -1
  38. package/dist/cli.d.ts.map +1 -1
  39. package/dist/cli.js +79 -49
  40. package/dist/cli.js.map +1 -1
  41. package/dist/config.d.ts +7 -1
  42. package/dist/config.d.ts.map +1 -1
  43. package/dist/config.js +8 -0
  44. package/dist/config.js.map +1 -1
  45. package/dist/core/ask-hook/registry.d.ts.map +1 -1
  46. package/dist/core/ask-hook/registry.js +4 -0
  47. package/dist/core/ask-hook/registry.js.map +1 -1
  48. package/dist/core/command-handler.d.ts +4 -1
  49. package/dist/core/command-handler.d.ts.map +1 -1
  50. package/dist/core/command-handler.js +100 -8
  51. package/dist/core/command-handler.js.map +1 -1
  52. package/dist/core/dispatch.d.ts +33 -0
  53. package/dist/core/dispatch.d.ts.map +1 -1
  54. package/dist/core/dispatch.js +26 -0
  55. package/dist/core/dispatch.js.map +1 -1
  56. package/dist/core/pending-response.d.ts +31 -0
  57. package/dist/core/pending-response.d.ts.map +1 -0
  58. package/dist/core/pending-response.js +87 -0
  59. package/dist/core/pending-response.js.map +1 -0
  60. package/dist/core/session-discovery.d.ts +13 -4
  61. package/dist/core/session-discovery.d.ts.map +1 -1
  62. package/dist/core/session-discovery.js +5 -5
  63. package/dist/core/session-discovery.js.map +1 -1
  64. package/dist/core/session-manager.d.ts +10 -0
  65. package/dist/core/session-manager.d.ts.map +1 -1
  66. package/dist/core/session-manager.js +59 -19
  67. package/dist/core/session-manager.js.map +1 -1
  68. package/dist/core/types.d.ts +8 -2
  69. package/dist/core/types.d.ts.map +1 -1
  70. package/dist/core/types.js.map +1 -1
  71. package/dist/core/worker-pool.d.ts +2 -2
  72. package/dist/core/worker-pool.d.ts.map +1 -1
  73. package/dist/core/worker-pool.js +89 -15
  74. package/dist/core/worker-pool.js.map +1 -1
  75. package/dist/core/zellij-adopt-discovery.d.ts +28 -0
  76. package/dist/core/zellij-adopt-discovery.d.ts.map +1 -0
  77. package/dist/core/zellij-adopt-discovery.js +276 -0
  78. package/dist/core/zellij-adopt-discovery.js.map +1 -0
  79. package/dist/core/zellij-session-discovery.d.ts +73 -0
  80. package/dist/core/zellij-session-discovery.d.ts.map +1 -0
  81. package/dist/core/zellij-session-discovery.js +259 -0
  82. package/dist/core/zellij-session-discovery.js.map +1 -0
  83. package/dist/daemon.d.ts.map +1 -1
  84. package/dist/daemon.js +70 -4
  85. package/dist/daemon.js.map +1 -1
  86. package/dist/dashboard/web/i18n.js +1 -1
  87. package/dist/dashboard/web/i18n.js.map +1 -1
  88. package/dist/dashboard/web/sessions.d.ts.map +1 -1
  89. package/dist/dashboard/web/sessions.js +1 -0
  90. package/dist/dashboard/web/sessions.js.map +1 -1
  91. package/dist/dashboard/web/workflows.js +1 -1
  92. package/dist/dashboard/web/workflows.js.map +1 -1
  93. package/dist/dashboard-web/app.js +3 -3
  94. package/dist/i18n/en.d.ts.map +1 -1
  95. package/dist/i18n/en.js +12 -0
  96. package/dist/i18n/en.js.map +1 -1
  97. package/dist/i18n/zh.d.ts.map +1 -1
  98. package/dist/i18n/zh.js +13 -1
  99. package/dist/i18n/zh.js.map +1 -1
  100. package/dist/im/lark/card-builder.d.ts +7 -1
  101. package/dist/im/lark/card-builder.d.ts.map +1 -1
  102. package/dist/im/lark/card-builder.js +92 -2
  103. package/dist/im/lark/card-builder.js.map +1 -1
  104. package/dist/im/lark/card-handler.d.ts.map +1 -1
  105. package/dist/im/lark/card-handler.js +78 -6
  106. package/dist/im/lark/card-handler.js.map +1 -1
  107. package/dist/im/lark/event-dispatcher.d.ts +8 -1
  108. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  109. package/dist/im/lark/event-dispatcher.js +28 -0
  110. package/dist/im/lark/event-dispatcher.js.map +1 -1
  111. package/dist/im/lark/grant-command.d.ts +13 -0
  112. package/dist/im/lark/grant-command.d.ts.map +1 -1
  113. package/dist/im/lark/grant-command.js +93 -0
  114. package/dist/im/lark/grant-command.js.map +1 -1
  115. package/dist/services/codex-app-threads.d.ts +20 -0
  116. package/dist/services/codex-app-threads.d.ts.map +1 -0
  117. package/dist/services/codex-app-threads.js +165 -0
  118. package/dist/services/codex-app-threads.js.map +1 -0
  119. package/dist/services/pending-response-transaction-store.d.ts +12 -0
  120. package/dist/services/pending-response-transaction-store.d.ts.map +1 -0
  121. package/dist/services/pending-response-transaction-store.js +52 -0
  122. package/dist/services/pending-response-transaction-store.js.map +1 -0
  123. package/dist/services/session-store.d.ts.map +1 -1
  124. package/dist/services/session-store.js +15 -1
  125. package/dist/services/session-store.js.map +1 -1
  126. package/dist/setup/bot-config-editor.d.ts +1 -1
  127. package/dist/setup/bot-config-editor.d.ts.map +1 -1
  128. package/dist/setup/bot-config-editor.js +5 -4
  129. package/dist/setup/bot-config-editor.js.map +1 -1
  130. package/dist/setup/ensure-zellij.d.ts +48 -0
  131. package/dist/setup/ensure-zellij.d.ts.map +1 -0
  132. package/dist/setup/ensure-zellij.js +93 -0
  133. package/dist/setup/ensure-zellij.js.map +1 -0
  134. package/dist/types.d.ts +14 -3
  135. package/dist/types.d.ts.map +1 -1
  136. package/dist/utils/anchor-serializer.d.ts +3 -2
  137. package/dist/utils/anchor-serializer.d.ts.map +1 -1
  138. package/dist/utils/anchor-serializer.js +20 -5
  139. package/dist/utils/anchor-serializer.js.map +1 -1
  140. package/dist/utils/transient-snapshot.js +2 -2
  141. package/dist/utils/transient-snapshot.js.map +1 -1
  142. package/dist/worker.js +235 -32
  143. package/dist/worker.js.map +1 -1
  144. package/dist/workflows/attempt-resume.d.ts +1 -1
  145. package/dist/workflows/attempt-resume.d.ts.map +1 -1
  146. package/dist/workflows/attempt-resume.js +1 -1
  147. package/dist/workflows/attempt-resume.js.map +1 -1
  148. package/dist/workflows/events/payloads.d.ts +20 -20
  149. package/dist/workflows/events/schema.d.ts +48 -48
  150. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C;;gEAEgE;AAChE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA2BlD;AAID,sFAAsF;AACtF,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAO5F;AAED,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;AAE1Q,qDAAqD;AACrD,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,UAAU,CAgBjF"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C;;gEAEgE;AAChE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA2BlD;AAID,sFAAsF;AACtF,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAO5F;AAED,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;AAE7R,qDAAqD;AACrD,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,UAAU,CAiBjF"}
@@ -3,6 +3,7 @@ import { existsSync } from 'node:fs';
3
3
  import { homedir } from 'node:os';
4
4
  import { isAbsolute, join } from 'node:path';
5
5
  import { createClaudeCodeAdapter } from './claude-code.js';
6
+ import { createSeedAdapter } from './seed.js';
6
7
  import { createAidenAdapter } from './aiden.js';
7
8
  import { createCocoAdapter } from './coco.js';
8
9
  import { createCodexAdapter } from './codex.js';
@@ -60,11 +61,12 @@ export async function createCliAdapter(id, pathOverride) {
60
61
  adapterCache.set(key, adapter);
61
62
  return adapter;
62
63
  }
63
- export { createClaudeCodeAdapter, createAidenAdapter, createCocoAdapter, createCodexAdapter, createCodexAppAdapter, createCursorAdapter, createGeminiAdapter, createOpenCodeAdapter, createAntigravityAdapter, createMtrAdapter, createHermesAdapter, createMiraAdapter };
64
+ export { createClaudeCodeAdapter, createSeedAdapter, createAidenAdapter, createCocoAdapter, createCodexAdapter, createCodexAppAdapter, createCursorAdapter, createGeminiAdapter, createOpenCodeAdapter, createAntigravityAdapter, createMtrAdapter, createHermesAdapter, createMiraAdapter };
64
65
  /** Synchronous version for use in worker process. */
65
66
  export function createCliAdapterSync(id, pathOverride) {
66
67
  switch (id.toLowerCase()) {
67
68
  case 'claude-code': return createClaudeCodeAdapter(pathOverride);
69
+ case 'seed': return createSeedAdapter(pathOverride);
68
70
  case 'aiden': return createAidenAdapter(pathOverride);
69
71
  case 'coco': return createCocoAdapter(pathOverride);
70
72
  case 'codex': return createCodexAdapter(pathOverride);
@@ -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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"}
@@ -0,0 +1,29 @@
1
+ import type { CliAdapter } from './types.js';
2
+ /** Seed CLI (`@bytedance-seed/claude-code`, binary `seed`) is a ByteDance fork
3
+ * of Claude Code: identical flags, slash commands, and on-disk session layout
4
+ * (per-project JSONL transcripts, `sessions/<pid>.json`, `tasks/` fd locks,
5
+ * keybindings.json, settings.json hooks). It differs only in the binary name,
6
+ * its ByteCloud / SuperRelay auth, and its data root — which it isolates to a
7
+ * `.claude-runtime` directory *inside its own install package* (rather than
8
+ * `~/.claude`), respecting `CLAUDE_CONFIG_DIR` when set.
9
+ *
10
+ * So Seed reuses the entire Claude-family adapter; the only work here is
11
+ * locating that `.claude-runtime` so botmux watches exactly where Seed writes. */
12
+ /** Derive Seed's `.claude-runtime` data root from the resolved binary.
13
+ *
14
+ * `which seed` returns an ephemeral fnm/nvm shim (e.g.
15
+ * `/run/user/.../fnm_multishells/<pid>_.../bin/seed`); realpath follows the
16
+ * symlink chain to the package's `dist/cli.js`, whose package root is two
17
+ * levels up. `.claude-runtime` sits at that package root. Deriving from the
18
+ * binary on every spawn means a node/fnm switch (which moves the binary)
19
+ * auto-tracks to the matching runtime dir — and it equals the path a bare
20
+ * `seed` uses by default, so botmux-spawned and hand-started Seed sessions
21
+ * share one config (settings, history, cross-resume).
22
+ *
23
+ * Falls back to `~/.claude-runtime` only if realpath fails (unusual install
24
+ * layout) — Seed still runs, but the JSONL bridge may target the wrong dir;
25
+ * we log so it's diagnosable rather than silently degraded. */
26
+ export declare function deriveSeedDataDir(bin: string): string;
27
+ export declare function createSeedAdapter(pathOverride?: string): CliAdapter;
28
+ export declare const create: typeof createSeedAdapter;
29
+ //# sourceMappingURL=seed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/seed.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;;;;mFASmF;AAEnF;;;;;;;;;;;;;gEAagE;AAChE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUrD;AAED,wBAAgB,iBAAiB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,UAAU,CAkBnE;AAED,eAAO,MAAM,MAAM,0BAAoB,CAAC"}
@@ -0,0 +1,63 @@
1
+ import { realpathSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { dirname, join } from 'node:path';
4
+ import { resolveCommand } from './registry.js';
5
+ import { createClaudeFamilyAdapter } from './claude-code.js';
6
+ import { logger } from '../../utils/logger.js';
7
+ /** Seed CLI (`@bytedance-seed/claude-code`, binary `seed`) is a ByteDance fork
8
+ * of Claude Code: identical flags, slash commands, and on-disk session layout
9
+ * (per-project JSONL transcripts, `sessions/<pid>.json`, `tasks/` fd locks,
10
+ * keybindings.json, settings.json hooks). It differs only in the binary name,
11
+ * its ByteCloud / SuperRelay auth, and its data root — which it isolates to a
12
+ * `.claude-runtime` directory *inside its own install package* (rather than
13
+ * `~/.claude`), respecting `CLAUDE_CONFIG_DIR` when set.
14
+ *
15
+ * So Seed reuses the entire Claude-family adapter; the only work here is
16
+ * locating that `.claude-runtime` so botmux watches exactly where Seed writes. */
17
+ /** Derive Seed's `.claude-runtime` data root from the resolved binary.
18
+ *
19
+ * `which seed` returns an ephemeral fnm/nvm shim (e.g.
20
+ * `/run/user/.../fnm_multishells/<pid>_.../bin/seed`); realpath follows the
21
+ * symlink chain to the package's `dist/cli.js`, whose package root is two
22
+ * levels up. `.claude-runtime` sits at that package root. Deriving from the
23
+ * binary on every spawn means a node/fnm switch (which moves the binary)
24
+ * auto-tracks to the matching runtime dir — and it equals the path a bare
25
+ * `seed` uses by default, so botmux-spawned and hand-started Seed sessions
26
+ * share one config (settings, history, cross-resume).
27
+ *
28
+ * Falls back to `~/.claude-runtime` only if realpath fails (unusual install
29
+ * layout) — Seed still runs, but the JSONL bridge may target the wrong dir;
30
+ * we log so it's diagnosable rather than silently degraded. */
31
+ export function deriveSeedDataDir(bin) {
32
+ try {
33
+ const real = realpathSync(bin); // <pkg>/dist/cli.js
34
+ const pkgRoot = dirname(dirname(real)); // <pkg>
35
+ return join(pkgRoot, '.claude-runtime');
36
+ }
37
+ catch (err) {
38
+ const fallback = join(homedir(), '.claude-runtime');
39
+ logger.warn(`[seed] could not resolve .claude-runtime from binary "${bin}" (${err instanceof Error ? err.message : String(err)}); falling back to ${fallback}`);
40
+ return fallback;
41
+ }
42
+ }
43
+ export function createSeedAdapter(pathOverride) {
44
+ const bin = resolveCommand(pathOverride ?? 'seed');
45
+ const dataDir = deriveSeedDataDir(bin);
46
+ return createClaudeFamilyAdapter({
47
+ id: 'seed',
48
+ resumeBin: 'seed',
49
+ dataDir,
50
+ // Seed keeps `.claude.json` inside its data root (CLAUDE_CONFIG_DIR layout),
51
+ // unlike Claude Code which puts it at `~/.claude.json`.
52
+ stateJsonPath: join(dataDir, '.claude.json'),
53
+ // Pin CLAUDE_CONFIG_DIR to Seed's own default so the dir botmux watches and
54
+ // the dir Seed writes to are provably identical — and still equal to what a
55
+ // hand-started `seed` resolves, preserving config alignment.
56
+ spawnEnv: { CLAUDE_CONFIG_DIR: dataDir },
57
+ // Seed's model set is gateway-defined (ByteCloud / SuperRelay), not the
58
+ // Anthropic aliases — skip the setup model prompt; users pick via /model.
59
+ modelChoices: undefined,
60
+ }, bin);
61
+ }
62
+ export const create = createSeedAdapter;
63
+ //# sourceMappingURL=seed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../../src/adapters/cli/seed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG/C;;;;;;;;;mFASmF;AAEnF;;;;;;;;;;;;;gEAagE;AAChE,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAU,oBAAoB;QAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAG,QAAQ;QAClD,OAAO,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,iBAAiB,CAAC,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,yDAAyD,GAAG,MAAM,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAC;QAChK,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,YAAqB;IACrD,MAAM,GAAG,GAAG,cAAc,CAAC,YAAY,IAAI,MAAM,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvC,OAAO,yBAAyB,CAAC;QAC/B,EAAE,EAAE,MAAM;QACV,SAAS,EAAE,MAAM;QACjB,OAAO;QACP,6EAA6E;QAC7E,wDAAwD;QACxD,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC;QAC5C,4EAA4E;QAC5E,4EAA4E;QAC5E,6DAA6D;QAC7D,QAAQ,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE;QACxC,wEAAwE;QACxE,0EAA0E;QAC1E,YAAY,EAAE,SAAS;KACxB,EAAE,GAAG,CAAC,CAAC;AACV,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,iBAAiB,CAAC"}
@@ -151,6 +151,22 @@ export interface CliAdapter {
151
151
  * presented as-is; the setup prompt always appends an "Other / custom"
152
152
  * free-text option, so this list is curation, not a hard whitelist. */
153
153
  readonly modelChoices?: readonly string[];
154
+ /** Claude-family CLIs only (claude-code, seed). The data root holding
155
+ * `projects/<hash>/<id>.jsonl`, `sessions/<pid>.json`, `tasks/`,
156
+ * `keybindings.json` and `settings.json`. When set, the worker drives the
157
+ * JSONL submit-confirmation, bridge fallback and pid resolution against this
158
+ * dir (instead of hardcoding `~/.claude`). undefined → not Claude-family. */
159
+ readonly claudeDataDir?: string;
160
+ /** Claude-family CLIs only. Path to the `.claude.json` folder-trust / state
161
+ * file (pre-accepted at spawn so a fresh workingDir doesn't block on the
162
+ * interactive trust dialog). `~/.claude.json` for Claude Code; inside the
163
+ * data root for forks that set CLAUDE_CONFIG_DIR. */
164
+ readonly claudeStateJsonPath?: string;
165
+ /** Extra env merged into the spawned child's environment. Used by Claude-family
166
+ * forks to point the CLI at its data root (e.g. Seed's `CLAUDE_CONFIG_DIR`).
167
+ * Keys placed here are also forwarded through the tmux backend (see
168
+ * BOTMUX_INJECTED_ENV_KEYS). undefined → inherit the worker env unchanged. */
169
+ readonly spawnEnv?: Readonly<Record<string, string>>;
154
170
  }
155
- export type CliId = 'claude-code' | 'aiden' | 'coco' | 'codex' | 'codex-app' | 'cursor' | 'gemini' | 'opencode' | 'antigravity' | 'mtr' | 'hermes' | 'mira';
171
+ export type CliId = 'claude-code' | 'seed' | 'aiden' | 'coco' | 'codex' | 'codex-app' | 'cursor' | 'gemini' | 'opencode' | 'antigravity' | 'mtr' | 'hermes' | 'mira';
156
172
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/types.ts"],"names":[],"mappings":"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"}
@@ -44,7 +44,7 @@ export interface BotConfig {
44
44
  * such as --yolo or --dangerously-*. Missing/false preserves legacy behavior.
45
45
  */
46
46
  disableCliBypass?: boolean;
47
- backendType?: 'pty' | 'tmux';
47
+ backendType?: 'pty' | 'tmux' | 'zellij';
48
48
  workingDir?: string;
49
49
  workingDirs?: string[];
50
50
  allowedUsers?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"bot-registry.d.ts","sourceRoot":"","sources":["../src/bot-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,yBAAyB,CAAC;AAIhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAA0B,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEtE,MAAM,WAAW,UAAU;IACzB,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,6HAA6H;IAC7H,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,yIAAyI;IACzI,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,+FAA+F;IAC/F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oFAAoF;IACpF,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACjC;;;;;;OAMG;IACH,2BAA2B,CAAC,EAAE,MAAM,EAAE,CAAC;IACvC,+EAA+E;IAC/E,UAAU,CAAC,EAAE;QAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAC;IAC5C;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC;;;;;OAKG;IACH,UAAU,CAAC,EAAE;QAAE,CAAC,QAAQ,EAAE,MAAM,GAAG;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IACrE;;;;;;OAMG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;;;OAMG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;;OAKG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,2EAA2E;IAC3E,wBAAwB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/C;AAUD,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAExD;AAwBD,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,GAAG,QAAQ,CAcpD;AAED,wBAAgB,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,CAMlD;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAE3D;AAED,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEpE;AAED,4CAA4C;AAC5C,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAElE;AAED,wBAAgB,UAAU,IAAI,QAAQ,EAAE,CAEvC;AAED,8DAA8D;AAC9D,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAGxF;AAeD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CA+B9E;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAElE;AAgBD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAuBvE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,SAAS,EAAE,CAsB5C;AAYD,+EAA+E;AAC/E,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CA2JrE"}
1
+ {"version":3,"file":"bot-registry.d.ts","sourceRoot":"","sources":["../src/bot-registry.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AA02HA;;;;;;;;;;;GAWG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,qBAAqB,EAAE,SAAS,CAAC,EAC9F,KAAK,EAAE,MAAM,EACb,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,2BAA2B,EAAE,UAAU,GAAG,IAAI,CAAC,GACzF,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA+F7B"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AA64HA;;;;;;;;;;;GAWG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,qBAAqB,EAAE,SAAS,CAAC,EAC9F,KAAK,EAAE,MAAM,EACb,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,2BAA2B,EAAE,UAAU,GAAG,IAAI,CAAC,GACzF,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA+F7B"}
package/dist/cli.js CHANGED
@@ -26,7 +26,7 @@ import { createInterface } from 'node:readline';
26
26
  import { createRequire } from 'node:module';
27
27
  import { createHmac, randomBytes } from 'node:crypto';
28
28
  import { validateWorkingDir } from './core/working-dir.js';
29
- import { parseDispatchBotSpec, buildDispatchMessages, buildRepoPrimeText, buildReportContent, eligibleAutoMentionAliases, offTopicSubBotTopic } from './core/dispatch.js';
29
+ import { parseDispatchBotSpec, buildDispatchMessages, buildRepoPrimeText, buildReportContent, eligibleAutoMentionAliases, offTopicSubBotTopic, resolveReportTarget } from './core/dispatch.js';
30
30
  import { enableAutostart, disableAutostart, autostartStatus, refreshAutostart } from './autostart.js';
31
31
  import { tmuxEnv } from './setup/ensure-tmux.js';
32
32
  import { writeBotsJsonAtomic as writeBotsAtomic } from './setup/bots-store.js';
@@ -232,6 +232,12 @@ function ecosystemConfig() {
232
232
  // ad-hoc (e.g. `BOTMUX_MEMORY_DIAG_INTERVAL_MS=5000`) when chasing an
233
233
  // RSS regression — turned off in master so logs stay quiet.
234
234
  BOTMUX_MEMORY_DIAG_INTERVAL_MS: process.env.BOTMUX_MEMORY_DIAG_INTERVAL_MS ?? '0',
235
+ // Quiet restart (dev): when set, restore registers sessions but skips the
236
+ // tmux eager re-fork so restarts don't re-push unfinished-session cards.
237
+ // Pass the shell value through explicitly (default '0') so it overrides
238
+ // any stale value carried by the long-lived pm2 god daemon — letting an
239
+ // unset shell var truly turn quiet-restart back off.
240
+ BOTMUX_QUIET_RESTART: process.env.BOTMUX_QUIET_RESTART ?? '0',
235
241
  },
236
242
  }));
237
243
  apps.push({
@@ -615,7 +621,7 @@ async function promptBotConfig(rl) {
615
621
  return null;
616
622
  }
617
623
  console.log('✅ 凭证有效(tenant_access_token 已成功获取)\n');
618
- console.log('支持的 CLI: 1) claude-code 2) aiden 3) coco 4) codex 5) cursor 6) gemini 7) opencode 8) antigravity 9) mtr 10) hermes 11) codex-app 12) mira');
624
+ console.log('支持的 CLI: 1) claude-code 2) aiden 3) coco 4) codex 5) cursor 6) gemini 7) opencode 8) antigravity 9) mtr 10) hermes 11) codex-app 12) mira 13) seed');
619
625
  const cliChoice = await ask(rl, 'CLI 适配器 [1]: ');
620
626
  let cliId;
621
627
  try {
@@ -705,7 +711,7 @@ async function promptEditBotConfig(rl, bot) {
705
711
  '留空保留当前值。',
706
712
  ]);
707
713
  input.larkAppSecret = await ask(rl, `LARK_APP_SECRET [保留当前值]: `);
708
- console.log('\n支持的 CLI: 1) claude-code 2) aiden 3) coco 4) codex 5) cursor 6) gemini 7) opencode 8) antigravity 9) mtr 10) hermes 11) codex-app 12) mira');
714
+ console.log('\n支持的 CLI: 1) claude-code 2) aiden 3) coco 4) codex 5) cursor 6) gemini 7) opencode 8) antigravity 9) mtr 10) hermes 11) codex-app 12) mira 13) seed');
709
715
  printInputHelp('CLI 适配器', [
710
716
  '选择 botmux 需要套用哪一种 CLI 参数协议和会话恢复方式。',
711
717
  '留空保留当前值;可以输入序号,也可以直接输入适配器 ID。',
@@ -741,8 +747,8 @@ async function promptEditBotConfig(rl, bot) {
741
747
  input.model = cliChanged && result === undefined ? null : result;
742
748
  }
743
749
  printInputHelp('会话后端 backendType', [
744
- '可选。pty 更轻量;tmux 支持 adopt 和 Web Terminal 附着。',
745
- '留空保留当前值;输入 - 回到自动检测;只接受 pty tmux。',
750
+ '可选。pty 更轻量;tmux 支持 adopt 和 Web Terminal 附着;zellij 为实验后端(pty-under-zellij,需 zellij >= 0.44)。',
751
+ '留空保留当前值;输入 - 回到自动检测;接受 pty / tmux / zellij。',
746
752
  ]);
747
753
  input.backendType = await ask(rl, `会话后端 backendType [${formatOptionalValue(bot.backendType)}]: `);
748
754
  printInputHelp('默认工作目录', [
@@ -1504,6 +1510,9 @@ function loadSessions() {
1504
1510
  return sessions;
1505
1511
  }
1506
1512
  /** Save a single session back to its appropriate file based on larkAppId. */
1513
+ function loadSessionFresh(session) {
1514
+ return loadSessions().get(session.sessionId);
1515
+ }
1507
1516
  function saveSession(session) {
1508
1517
  const dataDir = resolveDataDir();
1509
1518
  const fileName = session.larkAppId ? `sessions-${session.larkAppId}.json` : 'sessions.json';
@@ -1516,7 +1525,7 @@ function saveSession(session) {
1516
1525
  }
1517
1526
  catch { /* start fresh */ }
1518
1527
  }
1519
- data[session.sessionId] = session;
1528
+ data[session.sessionId] = mergePendingResponseState(session, data[session.sessionId]);
1520
1529
  // Clean up entries where file key doesn't match the entry's sessionId (data corruption)
1521
1530
  for (const [key, val] of Object.entries(data)) {
1522
1531
  if (val && typeof val === 'object' && 'sessionId' in val && val.sessionId !== key) {
@@ -2632,6 +2641,7 @@ function argValues(args, ...flags) {
2632
2641
  // daemon's bridge fallback path can produce identical cards. cmdSend
2633
2642
  // keeps using `buildCardBodyElements` and `hasMarkdown` from there.
2634
2643
  import { buildCardBodyElements, hasMarkdown, brandFooterSegment } from './im/lark/md-card.js';
2644
+ import { claimPendingResponseCard, isPendingResponseCardOpen, markPendingResponseCardPatchedIfCurrent, mergePendingResponseState, shouldUseCardForSend } from './core/pending-response.js';
2635
2645
  import { resolveBrandLabel } from './bot-registry.js';
2636
2646
  import { config } from './config.js';
2637
2647
  import { resolveQuoteTarget, validateMentionDecision } from './services/send-policy.js';
@@ -2757,7 +2767,7 @@ async function cmdSend(rest) {
2757
2767
  registerBot(cfg);
2758
2768
  }
2759
2769
  catch { /* */ }
2760
- const { sendMessage, replyMessage, uploadImage, uploadFile, MessageWithdrawnError } = await import('./im/lark/client.js');
2770
+ const { sendMessage, replyMessage, uploadImage, uploadFile, deleteMessage, MessageWithdrawnError } = await import('./im/lark/client.js');
2761
2771
  const appId = s.larkAppId;
2762
2772
  // Effective target chat for top-level mode (defaults to session's chat)
2763
2773
  const targetChatId = overrideChatId ?? s.chatId;
@@ -2818,6 +2828,28 @@ async function cmdSend(rest) {
2818
2828
  const dispatch = (content, msgType) => (sendTopLevel || isChatScope)
2819
2829
  ? sendMessage(appId, targetChatId, content, msgType)
2820
2830
  : replyMessage(appId, s.rootMessageId, content, msgType, true);
2831
+ const recordBridgeSendMarker = (sentAtMs, messageId) => {
2832
+ try {
2833
+ const markerDir = join(resolveDataDir(), 'turn-sends');
2834
+ if (!existsSync(markerDir))
2835
+ mkdirSync(markerDir, { recursive: true });
2836
+ const line = JSON.stringify({ sentAtMs, messageId }) + '\n';
2837
+ appendFileSync(join(markerDir, `${sid}.jsonl`), line);
2838
+ }
2839
+ catch { /* best-effort: marker miss only causes a redundant fallback message */ }
2840
+ };
2841
+ const shouldRecordBridgeMarker = !sendTopLevel && !overrideChatId;
2842
+ const dispatchOrPatchPending = async (content, msgType) => {
2843
+ const pendingCardId = msgType === 'interactive' ? claimPendingResponseCard(s) : undefined;
2844
+ const sentId = await dispatchPrimary(content, msgType);
2845
+ const latest = pendingCardId ? loadSessionFresh(s) : undefined;
2846
+ if (pendingCardId && latest?.pendingResponseCardId === pendingCardId) {
2847
+ deleteMessage(appId, pendingCardId)
2848
+ .then(() => { markPendingResponseCardPatchedIfCurrent(latest, pendingCardId); saveSession(latest); })
2849
+ .catch((err) => logger.warn(`[send:${sid.substring(0, 8)}] failed to withdraw pending card after explicit send: ${err?.message ?? err}`));
2850
+ }
2851
+ return sentId;
2852
+ };
2821
2853
  // Quote chain (普通群): the primary message replies to the turn's target so
2822
2854
  // Lark renders a 引用 chain. --quote overrides, --no-quote opts out. Thread
2823
2855
  // scope and --top-level never quote. Withdrawn target → fall back to plain.
@@ -2978,8 +3010,14 @@ async function cmdSend(rest) {
2978
3010
  knownBotOpenIds,
2979
3011
  });
2980
3012
  // Decide: interactive card (renders markdown) vs. post (plain text).
2981
- // Explicit --card / --text wins; otherwise auto-detect markdown syntax.
2982
- const useCard = forceCard || (!forceText && hasMarkdown(text));
3013
+ // An open pending response card takes precedence over --text so the
3014
+ // placeholder can close cleanly; otherwise explicit --card / --text wins.
3015
+ const useCard = shouldUseCardForSend({
3016
+ forceCard,
3017
+ forceText,
3018
+ hasMarkdown: hasMarkdown(text),
3019
+ hasOpenPendingResponseCard: isPendingResponseCardOpen(s),
3020
+ });
2983
3021
  const mentionMap = new Map();
2984
3022
  for (const m of mentions)
2985
3023
  if (m.name)
@@ -3073,7 +3111,7 @@ async function cmdSend(rest) {
3073
3111
  config: { update_multi: true },
3074
3112
  body: { direction: 'vertical', elements },
3075
3113
  });
3076
- messageId = await dispatchPrimary(cardJson, 'interactive');
3114
+ messageId = await dispatchOrPatchPending(cardJson, 'interactive');
3077
3115
  }
3078
3116
  else {
3079
3117
  // Plain-text path: build post content, paragraph per line.
@@ -3123,23 +3161,11 @@ async function cmdSend(rest) {
3123
3161
  const postJson = JSON.stringify({ zh_cn: { title: '', content: postContent } });
3124
3162
  messageId = await dispatchPrimary(postJson, 'post');
3125
3163
  }
3126
- // Bridge fallback marker — append-only jsonl per session. The worker
3127
- // gates its non-adopt transcript-driven fallback on whether any send
3128
- // happened within the current Lark turn's window. Only when this send
3129
- // landed in the session's own thread (not --top-level, not --chat-id
3130
- // override) does it cancel that turn's fallback.
3131
- if (!sendTopLevel && !overrideChatId) {
3132
- try {
3133
- const markerDir = join(resolveDataDir(), 'turn-sends');
3134
- if (!existsSync(markerDir))
3135
- mkdirSync(markerDir, { recursive: true });
3136
- // sentAtMs was captured pre-dispatch (see above). messageId is the
3137
- // confirmed Lark message id from the now-successful dispatch.
3138
- const line = JSON.stringify({ sentAtMs, messageId }) + '\n';
3139
- appendFileSync(join(markerDir, `${sid}.jsonl`), line);
3140
- }
3141
- catch { /* best-effort: marker miss only causes a redundant fallback message */ }
3142
- }
3164
+ // Bridge fallback marker — append-only jsonl per session. Same-thread
3165
+ // sends always suppress transcript fallback; detoured sends suppress only
3166
+ // when they closed a pending response card for this turn.
3167
+ if (shouldRecordBridgeMarker)
3168
+ recordBridgeSendMarker(sentAtMs, messageId);
3143
3169
  // Send file attachments as separate messages
3144
3170
  const fileIds = [];
3145
3171
  for (const fp of files) {
@@ -3430,8 +3456,12 @@ async function cmdReport(rest) {
3430
3456
  console.error(`session ${sid} 缺少 larkAppId`);
3431
3457
  process.exit(1);
3432
3458
  }
3433
- // Resolve the orchestrator coords: its thread/chat from the dispatch registry
3434
- // (keyed by this sub-bot's thread root), its open_id from this session.
3459
+ // Resolve where the report goes + who to @. Same-machine: the dispatch registry
3460
+ // (keyed by this sub-bot's thread root) carries the orchestrator's exact coords.
3461
+ // CROSS-MACHINE: the orchestrator is on another machine, so its registry isn't
3462
+ // on THIS one — resolveReportTarget falls back to this sub-bot's own session
3463
+ // (report top-level into its chat, @ the dispatcher via creatorOpenId). See
3464
+ // resolveReportTarget / Session.creatorOpenId.
3435
3465
  const regPath = join(resolveDataDir(), 'orchestrate-dispatch.json');
3436
3466
  let reg = {};
3437
3467
  try {
@@ -3440,17 +3470,15 @@ async function cmdReport(rest) {
3440
3470
  }
3441
3471
  catch { /* */ }
3442
3472
  const entry = s.rootMessageId ? reg[s.rootMessageId] : undefined;
3443
- // The orchestrator's open_id (sub-bot-app-scoped) is whoever created this
3444
- // session = the dispatcher. Prefer `creatorOpenId` (set on EVERY creation path,
3445
- // incl. a no-`/repo` foreign-bot kickoff auto-create where ownerOpenId is
3446
- // nulled), then `ownerOpenId` (older sessions / `/repo` prime). NEVER
3447
- // quoteTargetSenderOpenId alone: it tracks the *last* sender who @-ed this
3448
- // sub-bot, so in a coder+reviewer topic it drifts to the reviewer (observed
3449
- // live: the coder's report @-ed the reviewer, not the orchestrator). Keep it as
3450
- // a last-ditch fallback only for pre-existing sessions that predate both fields.
3451
- const orchOpenId = s.creatorOpenId ?? s.ownerOpenId ?? s.quoteTargetSenderOpenId;
3452
- if (!entry || !orchOpenId) {
3453
- console.error('当前会话不是被 botmux dispatch 派活的子项目会话(缺少主编排坐标)。\n' +
3473
+ const tgt = resolveReportTarget({
3474
+ registryEntry: entry,
3475
+ sessionChatId: s.chatId,
3476
+ creatorOpenId: s.creatorOpenId,
3477
+ ownerOpenId: s.ownerOpenId,
3478
+ quoteTargetSenderOpenId: s.quoteTargetSenderOpenId,
3479
+ });
3480
+ if (!tgt.orchOpenId || !tgt.orchChatId) {
3481
+ console.error('找不到主编排坐标:本会话没记录派活者(creatorOpenId/ownerOpenId 都空)或缺 chatId——大概不是被 botmux dispatch 派活的会话。\n' +
3454
3482
  '若确需回报,请改用 `botmux send` 或显式 @ 对应的人/ bot。');
3455
3483
  process.exit(1);
3456
3484
  }
@@ -3462,23 +3490,25 @@ async function cmdReport(rest) {
3462
3490
  catch { /* */ }
3463
3491
  const { sendMessage, replyMessage } = await import('./im/lark/client.js');
3464
3492
  const appId = s.larkAppId;
3465
- const paras = buildReportContent({ orchOpenId, content });
3493
+ const paras = buildReportContent({ orchOpenId: tgt.orchOpenId, content });
3466
3494
  const postJson = JSON.stringify({ zh_cn: { title: '', content: paras } });
3467
3495
  try {
3468
3496
  let msgId;
3469
- if (entry.orchScope === 'chat' || !entry.orchRoot) {
3470
- // Orchestrator runs at chat scope (普通群整群一个会话) → post to the chat.
3471
- msgId = await sendMessage(appId, entry.orchChatId, postJson, 'post');
3497
+ if (tgt.orchScope === 'chat' || !tgt.orchRoot) {
3498
+ // Orchestrator at chat scope, or cross-machine fallback → post top-level
3499
+ // into the chat (the sub-topic's chat = the orchestrator's chat).
3500
+ msgId = await sendMessage(appId, tgt.orchChatId, postJson, 'post');
3472
3501
  }
3473
3502
  else {
3474
- // Orchestrator lives in its own thread → reply into it so its existing
3475
- // session (anchored on orchRoot) is the one that receives the report.
3476
- msgId = await replyMessage(appId, entry.orchRoot, postJson, 'post', true);
3503
+ // Same-machine thread-scope orchestrator → reply into its thread so its
3504
+ // existing context-rich session (anchored on orchRoot) receives the report.
3505
+ msgId = await replyMessage(appId, tgt.orchRoot, postJson, 'post', true);
3477
3506
  }
3478
3507
  console.log(JSON.stringify({
3479
3508
  success: true,
3480
- reportedTo: entry.orchRoot || entry.orchChatId,
3481
- orchestrator: orchOpenId,
3509
+ reportedTo: tgt.orchRoot || tgt.orchChatId,
3510
+ orchestrator: tgt.orchOpenId,
3511
+ viaRegistry: !!entry,
3482
3512
  messageId: msgId,
3483
3513
  }));
3484
3514
  }