botmux 2.9.0 → 2.10.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.
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/claude-code.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AAExD;4EAC4E;AAC5E,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGhF;AAsCD,wBAAgB,uBAAuB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,UAAU,CAoGzE;AAED,eAAO,MAAM,MAAM,gCAA0B,CAAC"}
1
+ {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/claude-code.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AAExD;4EAC4E;AAC5E,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGhF;AAsCD,wBAAgB,uBAAuB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,UAAU,CAoIzE;AAED,eAAO,MAAM,MAAM,gCAA0B,CAAC"}
@@ -70,12 +70,13 @@ export function createClaudeCodeAdapter(pathOverride) {
70
70
  }
71
71
  args.push('--dangerously-skip-permissions');
72
72
  args.push('--disallowed-tools', 'EnterPlanMode,ExitPlanMode');
73
- const identityLines = botName || botOpenId
73
+ const identityBlock = botName || botOpenId
74
74
  ? [
75
75
  '',
76
- '你的身份:',
77
- `- 名字:${botName ?? '(未知)'}`,
78
- `- open_id:${botOpenId ?? '(未知)'}`,
76
+ '<identity>',
77
+ ` <name>${botName ?? '(未知)'}</name>`,
78
+ ` <open_id>${botOpenId ?? '(未知)'}</open_id>`,
79
+ '</identity>',
79
80
  '同一群里可能有多个机器人同时被 @,消息里会以 `@名字` 和 `open_id` 区分。',
80
81
  '判断本条消息是不是分派给你:对照上面的名字和 open_id。',
81
82
  '- 只执行明确分给自己的那部分,别抢别的机器人的活',
@@ -84,6 +85,7 @@ export function createClaudeCodeAdapter(pathOverride) {
84
85
  ]
85
86
  : [];
86
87
  args.push('--append-system-prompt', [
88
+ '<botmux_routing>',
87
89
  '你连接到了飞书(Lark)话题群。用户在飞书上阅读,看不到你的终端输出。',
88
90
  '想让用户看到的内容必须通过 `botmux send` 命令发送,终端输出不会到达聊天。',
89
91
  '',
@@ -94,22 +96,35 @@ export function createClaudeCodeAdapter(pathOverride) {
94
96
  '- 附带文件:`botmux send --files /path/to/file.pdf "请查收"`',
95
97
  '- 需要上下文时用 `botmux thread messages` 读取之前的对话。',
96
98
  '- 查看可协作的机器人:`botmux bots list`',
97
- ...identityLines,
99
+ '</botmux_routing>',
100
+ ...identityBlock,
98
101
  ].join('\n'));
99
102
  return args;
100
103
  },
101
104
  injectsSessionContext: true,
102
105
  async writeInput(pty, content) {
103
- // Always use bracketed paste: Claude Code's paste-burst heuristic can
104
- // swallow a trailing Enter sent via send-keys -l + send-keys Enter,
105
- // leaving content in the input box. Bracketed paste marks an explicit
106
- // \x1b[201~ boundary so the post-paste Enter is unambiguously submit.
107
- // Past that, we still can't trust fixed-delay timing (slow disk, big
108
- // paste, image loading). The robust signal is Claude Code's session
109
- // JSONL: each real user submit appends a line if no new line appears,
110
- // Enter was swallowed and we re-send it.
106
+ // Type content like a human: literal text via send-keys -l, and each
107
+ // newline replaced by `\` + Enter (Claude Code's documented soft-newline
108
+ // idiom — keeps content in the input box without submitting). The final
109
+ // Enter at the bottom is the unambiguous submit. This sidesteps tmux
110
+ // bracketed-paste mode entirely, which was unreliable: Claude Code can
111
+ // toggle bracketed-paste off mid-session (after slash commands etc.),
112
+ // making tmux's paste-buffer drop the markers and turning embedded \r
113
+ // into Enters that fragment the message into multiple submits.
114
+ //
115
+ // Each tmux send-keys is throttled so the cumulative input rate stays
116
+ // below Claude Code's paste-burst threshold — otherwise on long messages
117
+ // (~1300+ chars / ~25+ lines) Ink flips into paste mode mid-stream and
118
+ // subsequent `\` + Enter pairs are kept as literal `\\\r` in the
119
+ // submitted content instead of being consumed as soft-newline markers.
120
+ //
121
+ // Trailing Enter is still subject to Claude Code's paste-burst heuristic
122
+ // (rapid input followed by Enter can be coalesced as paste), so we keep
123
+ // the JSONL retry loop below as the source of truth for "did it submit".
111
124
  const hasImagePath = /\.(jpe?g|png|gif|webp|svg|bmp)\b/i.test(content);
112
125
  const submitDelay = hasImagePath ? 800 : 500;
126
+ const TYPING_THROTTLE_MS = 30;
127
+ const tick = () => new Promise(r => setTimeout(r, TYPING_THROTTLE_MS));
113
128
  const sendEnter = () => {
114
129
  if (pty.sendSpecialKeys)
115
130
  pty.sendSpecialKeys('Enter');
@@ -117,10 +132,26 @@ export function createClaudeCodeAdapter(pathOverride) {
117
132
  pty.write('\r');
118
133
  };
119
134
  const baseByte = pty.claudeJsonlPath ? currentFileSize(pty.claudeJsonlPath) : 0;
120
- if (pty.pasteText && pty.sendSpecialKeys) {
121
- pty.pasteText(content);
135
+ if (pty.sendText && pty.sendSpecialKeys) {
136
+ const lines = content.split('\n');
137
+ for (let i = 0; i < lines.length; i++) {
138
+ if (lines[i].length > 0) {
139
+ pty.sendText(lines[i]);
140
+ await tick();
141
+ }
142
+ if (i < lines.length - 1) {
143
+ // Soft-newline: backslash + Enter inserts a newline in Claude
144
+ // Code's input box without submitting.
145
+ pty.sendText('\\');
146
+ await tick();
147
+ pty.sendSpecialKeys('Enter');
148
+ await tick();
149
+ }
150
+ }
122
151
  }
123
152
  else {
153
+ // Non-tmux fallback (raw PTY): bracketed paste is reliable here since
154
+ // we control the markers directly.
124
155
  pty.write('\x1b[200~' + content + '\x1b[201~');
125
156
  }
126
157
  await new Promise(r => setTimeout(r, submitDelay));
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/adapters/cli/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C;4EAC4E;AAC5E,MAAM,UAAU,yBAAyB,CAAC,SAAiB,EAAE,GAAW;IACtE,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,SAAS,QAAQ,CAAC,CAAC;AACnF,CAAC;AAED;6DAC6D;AAC7D,MAAM,kBAAkB,GAAG,2BAA2B,CAAC;AAEvD,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAChC,IAAI,CAAC;QAAC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,CAAC,CAAC;IAAC,CAAC;AACzD,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY,EAAE,QAAgB;IACxD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;IAC3D,IAAI,IAAI,IAAI,QAAQ;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,GAAG,QAAQ,CAAC;IAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/B,IAAI,CAAC;QACH,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;YAAS,CAAC;QACT,SAAS,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,IAAY,EAAE,QAAgB,EAAE,SAAiB;IAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QACpD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,aAAa,GAAG,+EAA+E,CAAC;AAEtG,MAAM,UAAU,uBAAuB,CAAC,YAAqB;IAC3D,MAAM,GAAG,GAAG,cAAc,CAAC,YAAY,IAAI,QAAQ,CAAC,CAAC;IACrD,OAAO;QACL,EAAE,EAAE,aAAa;QACjB,WAAW,EAAE,GAAG;QAChB,iBAAiB,EAAE,IAAI;QAEvB,SAAS,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;YACjD,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;YACvC,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YAC5C,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,4BAA4B,CAAC,CAAC;YAC9D,MAAM,aAAa,GACjB,OAAO,IAAI,SAAS;gBAClB,CAAC,CAAC;oBACE,EAAE;oBACF,OAAO;oBACP,QAAQ,OAAO,IAAI,MAAM,EAAE;oBAC3B,aAAa,SAAS,IAAI,MAAM,EAAE;oBAClC,+CAA+C;oBAC/C,iCAAiC;oBACjC,2BAA2B;oBAC3B,2BAA2B;oBAC3B,qFAAqF;iBACtF;gBACH,CAAC,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;gBAClC,sCAAsC;gBACtC,8CAA8C;gBAC9C,EAAE;gBACF,OAAO;gBACP,mDAAmD;gBACnD,qDAAqD;gBACrD,uDAAuD;gBACvD,sDAAsD;gBACtD,6CAA6C;gBAC7C,gCAAgC;gBAChC,GAAG,aAAa;aACjB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QAED,qBAAqB,EAAE,IAAI;QAE3B,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO;YAC3B,sEAAsE;YACtE,oEAAoE;YACpE,sEAAsE;YACtE,sEAAsE;YACtE,qEAAqE;YACrE,oEAAoE;YACpE,wEAAwE;YACxE,yCAAyC;YACzC,MAAM,YAAY,GAAG,mCAAmC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvE,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAE7C,MAAM,SAAS,GAAG,GAAG,EAAE;gBACrB,IAAI,GAAG,CAAC,eAAe;oBAAE,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;;oBACjD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC,CAAC;YAEF,MAAM,QAAQ,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEhF,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;gBACzC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,OAAO,GAAG,WAAW,CAAC,CAAC;YACjD,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;YACnD,SAAS,EAAE,CAAC;YAEZ,2EAA2E;YAC3E,IAAI,CAAC,GAAG,CAAC,eAAe;gBAAE,OAAO;YAEjC,uEAAuE;YACvE,yEAAyE;YACzE,wEAAwE;YACxE,sEAAsE;YACtE,2DAA2D;YAC3D,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;gBAC7C,IAAI,MAAM,iBAAiB,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,EAAE,GAAG,CAAC;oBAAE,OAAO;gBACxE,SAAS,EAAE,CAAC;YACd,CAAC;YACD,qBAAqB;YACrB,IAAI,MAAM,iBAAiB,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,EAAE,GAAG,CAAC;gBAAE,OAAO;YACxE,wEAAwE;YACxE,0EAA0E;YAC1E,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC9B,CAAC;QAED,iBAAiB,EAAE,aAAa;QAChC,YAAY,EAAE,GAAG;QACjB,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,kBAAkB;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,uBAAuB,CAAC"}
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/adapters/cli/claude-code.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,8 @@
5
5
  * `claude-code.ts`; this constant is only consumed by CLIs that don't expose
6
6
  * a system-prompt flag (coco / codex / gemini / opencode / aiden).
7
7
  *
8
- * Each array element becomes one bullet line when rendered by
9
- * `buildNewTopicPrompt` in `session-manager.ts`.
8
+ * Each array element becomes one line inside the `<botmux_routing>` XML block
9
+ * rendered by `buildNewTopicPrompt` in `session-manager.ts`.
10
10
  *
11
11
  * The phrasing emphasises that `botmux send` is a shell command (not an MCP
12
12
  * tool) to stop models — particularly CoCo — from searching the tool list,
@@ -5,8 +5,8 @@
5
5
  * `claude-code.ts`; this constant is only consumed by CLIs that don't expose
6
6
  * a system-prompt flag (coco / codex / gemini / opencode / aiden).
7
7
  *
8
- * Each array element becomes one bullet line when rendered by
9
- * `buildNewTopicPrompt` in `session-manager.ts`.
8
+ * Each array element becomes one line inside the `<botmux_routing>` XML block
9
+ * rendered by `buildNewTopicPrompt` in `session-manager.ts`.
10
10
  *
11
11
  * The phrasing emphasises that `botmux send` is a shell command (not an MCP
12
12
  * tool) to stop models — particularly CoCo — from searching the tool list,
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/core/session-manager.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,oBAAoB,CAAC,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,CAQ/D;AAED,wBAAgB,iBAAiB,CAAC,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,CAO5D;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,EAAE,CA2B/D;AAID,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAAE,WAAW,EAAE,cAAc,EAAE,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAoB1K;AAID;;8EAE8E;AAC9E,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAiBvE;AAED,wBAAgB,qBAAqB,CAAC,WAAW,CAAC,EAAE,cAAc,EAAE,GAAG,MAAM,CAQ5E;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,KAAK,EACZ,eAAe,CAAC,EAAE,MAAM,EACxB,WAAW,CAAC,EAAE,cAAc,EAAE,EAC9B,QAAQ,CAAC,EAAE,WAAW,EAAE,EACxB,aAAa,CAAC,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EAC5E,SAAS,CAAC,EAAE,MAAM,EAAE,EACpB,WAAW,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C,MAAM,CA+DR;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,GAClI,MAAM,CAoCR;AAOD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI,CAmB9D;AAID,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,IAAI,CAsGtF;AAID,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,aAAa,EACnB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC1C,iBAAiB,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,GAC7C,OAAO,CAAC,IAAI,CAAC,CAkFf"}
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/core/session-manager.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,oBAAoB,CAAC,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,CAQ/D;AAED,wBAAgB,iBAAiB,CAAC,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,CAO5D;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,EAAE,CA2B/D;AAID,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAAE,WAAW,EAAE,cAAc,EAAE,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAoB1K;AAID;;8EAE8E;AAC9E,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAiBvE;AAeD,wBAAgB,qBAAqB,CAAC,WAAW,CAAC,EAAE,cAAc,EAAE,GAAG,MAAM,CAS5E;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,KAAK,EACZ,eAAe,CAAC,EAAE,MAAM,EACxB,WAAW,CAAC,EAAE,cAAc,EAAE,EAC9B,QAAQ,CAAC,EAAE,WAAW,EAAE,EACxB,aAAa,CAAC,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EAC5E,SAAS,CAAC,EAAE,MAAM,EAAE,EACpB,WAAW,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C,MAAM,CA+DR;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,GAClI,MAAM,CAqCR;AAOD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI,CAmB9D;AAID,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,IAAI,CAsGtF;AAID,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,aAAa,EACnB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC1C,iBAAiB,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,GAC7C,OAAO,CAAC,IAAI,CAAC,CAkFf"}
@@ -109,74 +109,85 @@ export async function getAvailableBots(currentAppId, chatId) {
109
109
  return [];
110
110
  }
111
111
  }
112
+ /** XML-escape a string for use as element text content or attribute value.
113
+ * Covers the five XML-mandated entities; sufficient for our use case
114
+ * (paths, names, open_ids, bot identifiers) since we never embed raw user
115
+ * input in attribute values. */
116
+ function xmlEscape(s) {
117
+ return s
118
+ .replace(/&/g, '&amp;')
119
+ .replace(/</g, '&lt;')
120
+ .replace(/>/g, '&gt;')
121
+ .replace(/"/g, '&quot;')
122
+ .replace(/'/g, '&apos;');
123
+ }
112
124
  export function formatAttachmentsHint(attachments) {
113
125
  if (!attachments || attachments.length === 0)
114
126
  return '';
115
127
  let imgN = 0, fileN = 0;
116
- const lines = attachments.map(a => {
117
- const label = a.type === 'image' ? `[图片 ${++imgN}]` : `[文件 ${++fileN}]`;
118
- return `- ${label} (${a.path})`;
128
+ const items = attachments.map(a => {
129
+ const tag = a.type === 'image' ? 'image' : 'file';
130
+ const n = a.type === 'image' ? ++imgN : ++fileN;
131
+ return ` <${tag} n="${n}" path="${xmlEscape(a.path)}" />`;
119
132
  });
120
- return `\n\n附件(使用 Read 工具查看,序号与正文中的 [图片 N] / [文件 N] 占位符对应):\n${lines.join('\n')}`;
133
+ return `<attachments hint="使用 Read 工具查看,序号与正文中的 [图片 N] / [文件 N] 占位符对应">\n${items.join('\n')}\n</attachments>`;
121
134
  }
122
135
  export function buildNewTopicPrompt(userMessage, sessionId, cliId, cliPathOverride, attachments, mentions, availableBots, followUps, botIdentity) {
123
136
  const adapter = createCliAdapterSync(cliId, cliPathOverride);
124
137
  const hints = adapter.systemHints;
125
- const noteLines = hints.map(h => `- ${h}`);
126
- // Bot identity section — tells the bot who it is so it can distinguish
127
- // itself when multiple bots are @mentioned in the same message.
128
- let identitySection = '';
138
+ const routingBlock = hints.length > 0
139
+ ? `<botmux_routing>\n${hints.join('\n')}\n</botmux_routing>`
140
+ : '';
141
+ let identityBlock = '';
129
142
  if (botIdentity && (botIdentity.name || botIdentity.openId)) {
130
- const lines = [
131
- `- 名字:${botIdentity.name ?? '(未知)'}`,
132
- `- open_id:${botIdentity.openId ?? '(未知)'}`,
133
- '- 同一群里可能有多个机器人同时被 @,消息里会以 `@名字` 和 `open_id` 区分',
134
- '- 只执行明确分给自己的那部分,整条消息都指派给别的机器人时保持沉默',
135
- ];
136
- identitySection = `\n\n你的身份:\n${lines.join('\n')}`;
143
+ identityBlock = [
144
+ '<identity>',
145
+ ` <name>${xmlEscape(botIdentity.name ?? '(未知)')}</name>`,
146
+ ` <open_id>${xmlEscape(botIdentity.openId ?? '(未知)')}</open_id>`,
147
+ '</identity>',
148
+ '同一群里可能有多个机器人同时被 @,消息里会以 `@名字` 和 `open_id` 区分。只执行明确分给自己的那部分,整条消息都指派给别的机器人时保持沉默。',
149
+ ].join('\n');
137
150
  }
138
- // Mention metadata section
139
- let mentionSection = '';
151
+ let mentionBlock = '';
140
152
  if (mentions && mentions.length > 0) {
141
- const mentionLines = mentions.map(m => {
142
- const idPart = m.openId ? ` open_id: ${m.openId}` : '';
143
- return `- @${m.name}${idPart}`;
153
+ const items = mentions.map(m => {
154
+ const oid = m.openId ? ` open_id="${xmlEscape(m.openId)}"` : '';
155
+ return ` <mention name="${xmlEscape(m.name)}"${oid} />`;
144
156
  });
145
- mentionSection = `\n\n消息中的 @mention:\n${mentionLines.join('\n')}`;
157
+ mentionBlock = `<mentions>\n${items.join('\n')}\n</mentions>`;
146
158
  }
147
- // Available bots section — only show bots NOT already in @mentions
148
- let botSection = '';
159
+ let botBlock = '';
149
160
  if (availableBots && availableBots.length > 0) {
150
161
  const mentionedOpenIds = new Set(mentions?.map(m => m.openId).filter(Boolean));
151
162
  const unmentionedBots = availableBots.filter(b => !mentionedOpenIds.has(b.openId));
152
163
  if (unmentionedBots.length > 0) {
153
- const botLines = unmentionedBots.map(b => `- ${b.displayName} (open_id: ${b.openId})`);
154
- botSection = `\n\n当前群聊中的其他机器人:\n${botLines.join('\n')}\n可通过 botmux send --mention 参数 @mention 它们协作,也可用 botmux bots list 查询。`;
164
+ const items = unmentionedBots.map(b => ` <bot name="${xmlEscape(b.displayName)}" open_id="${xmlEscape(b.openId)}" />`);
165
+ botBlock = `<available_bots hint="可通过 botmux send --mention 参数 @ 它们协作,也可用 botmux bots list 查询">\n${items.join('\n')}\n</available_bots>`;
155
166
  }
156
167
  }
157
- // CLIs with injectsSessionContext get Lark context via system prompt,
158
- // so pass user messages cleanly without wrapper — same format as follow-ups.
159
- const attachHint = formatAttachmentsHint(attachments);
160
- const parts = adapter.injectsSessionContext
161
- ? [`${userMessage}${attachHint}`]
162
- : [`用户发送了:\n---\n${userMessage}${attachHint}\n---`];
163
- // Append follow-up messages buffered during repo selection
168
+ const userBlock = `<user_message>\n${userMessage}\n</user_message>`;
169
+ const parts = [userBlock];
164
170
  if (followUps && followUps.length > 0) {
165
171
  for (const fu of followUps) {
166
- parts.push(adapter.injectsSessionContext ? fu : `用户追加了:\n---\n${fu}\n---`);
172
+ parts.push(`<follow_up_message>\n${fu}\n</follow_up_message>`);
167
173
  }
168
174
  }
175
+ const attachHint = formatAttachmentsHint(attachments);
176
+ if (attachHint)
177
+ parts.push(attachHint);
178
+ // CLIs with injectsSessionContext (Claude Code) get Lark routing/identity
179
+ // and session ID via system prompt, so skip those blocks here.
169
180
  if (!adapter.injectsSessionContext) {
170
- parts.push(`Session ID: ${sessionId}`);
181
+ parts.push(`<session_id>${xmlEscape(sessionId)}</session_id>`);
182
+ if (routingBlock)
183
+ parts.push(routingBlock);
184
+ if (identityBlock)
185
+ parts.push(identityBlock);
171
186
  }
172
- if (noteLines.length > 0)
173
- parts.push(noteLines.join('\n'));
174
- if (identitySection)
175
- parts.push(identitySection.trim());
176
- if (mentionSection)
177
- parts.push(mentionSection.trim());
178
- if (botSection)
179
- parts.push(botSection.trim());
187
+ if (mentionBlock)
188
+ parts.push(mentionBlock);
189
+ if (botBlock)
190
+ parts.push(botBlock);
180
191
  return parts.join('\n\n');
181
192
  }
182
193
  /**
@@ -185,26 +196,27 @@ export function buildNewTopicPrompt(userMessage, sessionId, cliId, cliPathOverri
185
196
  * Session ID is omitted for adopt mode and CLIs with injectsSessionContext.
186
197
  */
187
198
  export function buildFollowUpContent(content, sessionId, opts) {
188
- const parts = [
189
- opts?.attachments && opts.attachments.length > 0
190
- ? `${content}${formatAttachmentsHint(opts.attachments)}`
191
- : content,
192
- ];
199
+ const parts = [`<user_message>\n${content}\n</user_message>`];
200
+ const attachHint = opts?.attachments && opts.attachments.length > 0
201
+ ? formatAttachmentsHint(opts.attachments)
202
+ : '';
203
+ if (attachHint)
204
+ parts.push(attachHint);
193
205
  if (!opts?.isAdoptMode) {
194
206
  // CLIs with injectsSessionContext get session ID via system prompt + MCP auto-detection
195
207
  const skipSessionId = opts?.cliId
196
208
  ? createCliAdapterSync(opts.cliId, opts.cliPathOverride).injectsSessionContext
197
209
  : false;
198
210
  if (!skipSessionId) {
199
- parts.push(`Session ID: ${sessionId}`);
211
+ parts.push(`<session_id>${xmlEscape(sessionId)}</session_id>`);
200
212
  }
201
213
  }
202
214
  if (opts?.mentions && opts.mentions.length > 0) {
203
- const mentionLines = opts.mentions.map(m => {
204
- const idPart = m.openId ? ` open_id: ${m.openId}` : '';
205
- return `- @${m.name}${idPart}`;
215
+ const items = opts.mentions.map(m => {
216
+ const oid = m.openId ? ` open_id="${xmlEscape(m.openId)}"` : '';
217
+ return ` <mention name="${xmlEscape(m.name)}"${oid} />`;
206
218
  });
207
- parts.push(`消息中的 @mention:\n${mentionLines.join('\n')}`);
219
+ parts.push(`<mentions>\n${items.join('\n')}\n</mentions>`);
208
220
  }
209
221
  // Per-message routing hint — only for CLIs without system prompt context.
210
222
  // CLIs with injectsSessionContext (e.g. Claude Code) already have the
@@ -213,7 +225,7 @@ export function buildFollowUpContent(content, sessionId, opts) {
213
225
  ? createCliAdapterSync(opts.cliId, opts.cliPathOverride).injectsSessionContext
214
226
  : false;
215
227
  if (!skipHint) {
216
- parts.push('[请用 botmux send "消息" - 这个shell工具回复飞书用户,终端输出用户看不到]');
228
+ parts.push('<botmux_reminder>请用 `botmux send "消息"` 这个 shell 命令回复飞书用户,终端输出用户看不到。</botmux_reminder>');
217
229
  }
218
230
  return parts.join('\n\n');
219
231
  }
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/core/session-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/core/session-manager.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAiBA,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AA0uBrD,wBAAsB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoHlE"}
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AAiBA,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAixBrD,wBAAsB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoHlE"}
package/dist/daemon.js CHANGED
@@ -25,6 +25,7 @@ import { isCallbackUrl, handleCallbackUrl } from './utils/user-token.js';
25
25
  import { getSessionWorkingDir, getProjectScanDirs, downloadResources, formatAttachmentsHint, buildNewTopicPrompt, buildFollowUpContent, getAvailableBots, restoreActiveSessions, executeScheduledTask, persistStreamCardState, } from './core/session-manager.js';
26
26
  import { handleCardAction } from './im/lark/card-handler.js';
27
27
  import { isBotMentioned, probeBotOpenId, startLarkEventDispatcher, writeBotInfoFile, canOperate } from './im/lark/event-dispatcher.js';
28
+ import { renderForwardedXml } from './im/lark/forwarded-renderer.js';
28
29
  // ─── State ───────────────────────────────────────────────────────────────────
29
30
  const activeSessions = new Map();
30
31
  // Cache last /repo scan results per chat for /repo <number> fallback
@@ -164,35 +165,53 @@ const cardDeps = {
164
165
  lastRepoScan,
165
166
  };
166
167
  // ─── Merge-forward expansion ────────────────────────────────────────────────
168
+ /** Extract a useful one-liner from an AxiosError / generic error.
169
+ * Lark's SDK rethrows AxiosError whose default toString just says
170
+ * "Request failed with status code 400" — hiding the actual server reason. */
171
+ function describeAxiosErr(err) {
172
+ const detail = err?.response?.data ?? err?.message ?? String(err);
173
+ return typeof detail === 'string' ? detail : JSON.stringify(detail);
174
+ }
167
175
  /**
168
- * Expand a merge_forward message by fetching sub-messages via Lark API.
169
- * Replaces parsed.content with readable text and collects additional resources.
176
+ * Build a tree of ForwardedNode + collect attachment resources from a
177
+ * merge_forward message. Lark's im.v1.message.get returns ALL descendants
178
+ * in one shot via the `items` array, each with `upper_message_id` pointing
179
+ * to its parent — so we make exactly one API call per top-level expand and
180
+ * walk the tree purely in memory. Recursing per nested merge_forward via
181
+ * separate API calls fails (Lark 230002 "Bot/User can NOT be out of the chat")
182
+ * because the bot may be in the outer chat but not in the original chat the
183
+ * nested merge_forward came from. The single-call design sidesteps that.
170
184
  */
171
- async function expandMergeForward(larkAppId, messageId, parsed, depth = 0, numberer = createImgNumberer()) {
172
- const MAX_DEPTH = 5;
185
+ async function buildForwardedTree(larkAppId, rootMessageId, numberer, maxDepth) {
186
+ // user_card_content combined with merge_forward triggers HTTP 500 — keep
187
+ // it off. Sub-messages come back in the simplified "Format A" card shape
188
+ // which extractCardContent already handles.
189
+ const detail = await getMessageDetail(larkAppId, rootMessageId, { userCardContent: false });
190
+ const allItems = detail?.items ?? [];
173
191
  const extraResources = [];
174
- try {
175
- // Lark returns HTTP 500 if user_card_content is combined with a
176
- // merge_forward message_id, so explicitly disable it here. Interactive
177
- // sub-messages come back in the simplified "Format A" shape which our
178
- // card extractor already handles.
179
- const detail = await getMessageDetail(larkAppId, messageId, { userCardContent: false });
180
- const subMessages = (detail?.items ?? []).filter((m) => m.upper_message_id === messageId);
181
- if (subMessages.length === 0)
182
- return { extraResources };
183
- const parts = ['[转发消息]'];
184
- for (const msg of subMessages) {
185
- const senderLabel = msg.sender?.sender_type === 'app' ? '机器人' : (msg.sender?.id ?? '未知');
186
- parts.push(`--- ${senderLabel} ---`);
187
- // Interactive sub-messages may still carry the simplified "upgrade your
188
- // client" fallback; unwrap user_dsl before any extraction so both the
189
- // resource pass and text pass see the real v2 body.
192
+ // Index children by upper_message_id for O(1) lookup during the walk.
193
+ const childrenByParent = new Map();
194
+ for (const msg of allItems) {
195
+ const parent = msg.upper_message_id ?? '';
196
+ if (!parent)
197
+ continue;
198
+ const list = childrenByParent.get(parent) ?? [];
199
+ list.push(msg);
200
+ childrenByParent.set(parent, list);
201
+ }
202
+ function walk(parentId, depth) {
203
+ const children = childrenByParent.get(parentId) ?? [];
204
+ const nodes = [];
205
+ for (const msg of children) {
206
+ const senderType = msg.sender?.sender_type === 'app' ? 'app'
207
+ : msg.sender?.sender_type === 'user' ? 'user'
208
+ : 'unknown';
209
+ const senderOpenId = msg.sender?.id ?? '';
190
210
  // Interactive sub-messages arrive via REST as a simplified fallback.
191
211
  // Lark's im.message.get never returns user_dsl (even for the bot's own
192
- // messages, even via direct id lookup), so we can only unwrap when a
193
- // user_dsl somehow got through. For third-party cards whose simplified
194
- // form is the "请升级至最新版本客户端" fallback, the real body is
195
- // unrecoverable from REST.
212
+ // messages), so we can only unwrap when a user_dsl somehow got through.
213
+ // For third-party cards whose simplified form is the "请升级至最新版本"
214
+ // fallback, the real body is unrecoverable from REST.
196
215
  if (msg.msg_type === 'interactive') {
197
216
  const unwrapped = unwrapUserDslContent(msg.body?.content ?? '');
198
217
  if (unwrapped !== null) {
@@ -205,26 +224,38 @@ async function expandMergeForward(larkAppId, messageId, parsed, depth = 0, numbe
205
224
  // resources (error 234003 if sub-message ID is used).
206
225
  const subResources = extractResources(msg.msg_type ?? 'text', msg.body?.content ?? '', numberer);
207
226
  extraResources.push(...subResources);
208
- // Recursively expand nested merge_forward
209
- if (msg.msg_type === 'merge_forward' && depth < MAX_DEPTH) {
210
- const nested = { content: '[合并转发消息]', msgType: 'merge_forward', messageId: msg.message_id, rootId: '', senderId: msg.sender?.id ?? '', senderType: msg.sender?.sender_type ?? '', createTime: msg.create_time ?? '', mentions: [] };
211
- const { extraResources: nestedResources } = await expandMergeForward(larkAppId, msg.message_id, nested, depth + 1, numberer);
212
- parts.push(nested.content);
213
- extraResources.push(...nestedResources);
227
+ if (msg.msg_type === 'merge_forward' && depth < maxDepth) {
228
+ const inner = walk(msg.message_id, depth + 1);
229
+ nodes.push({ senderOpenId, senderType, children: inner });
214
230
  }
215
231
  else {
216
232
  const sub = parseApiMessage(msg, numberer);
217
- parts.push(sub.content);
233
+ nodes.push({ senderOpenId, senderType, content: sub.content });
218
234
  }
219
235
  }
220
- parsed.content = parts.join('\n');
236
+ return nodes;
237
+ }
238
+ return { nodes: walk(rootMessageId, 0), extraResources };
239
+ }
240
+ /**
241
+ * Expand a merge_forward message by fetching sub-messages via Lark API.
242
+ * Replaces parsed.content with an XML-rendered forward tree (deduplicated
243
+ * participants, alias-referenced messages) and collects additional resources.
244
+ */
245
+ async function expandMergeForward(larkAppId, messageId, parsed, numberer = createImgNumberer()) {
246
+ const MAX_DEPTH = 5;
247
+ try {
248
+ const { nodes, extraResources } = await buildForwardedTree(larkAppId, messageId, numberer, MAX_DEPTH);
249
+ if (nodes.length === 0)
250
+ return { extraResources };
251
+ parsed.content = renderForwardedXml(nodes);
221
252
  parsed.msgType = 'merge_forward_expanded';
253
+ return { extraResources };
222
254
  }
223
255
  catch (err) {
224
- logger.warn(`Failed to expand merge_forward ${messageId}: ${err}`);
225
- // Keep original placeholder content
256
+ logger.warn(`Failed to expand merge_forward ${messageId}: ${describeAxiosErr(err)}`);
257
+ return { extraResources: [] };
226
258
  }
227
- return { extraResources };
228
259
  }
229
260
  // ─── Event handling ──────────────────────────────────────────────────────────
230
261
  async function handleNewTopic(data, chatId, messageId, chatType = 'group', larkAppId) {