botmux 2.6.1 → 2.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/backend/pty-backend.d.ts +3 -0
- package/dist/adapters/backend/pty-backend.d.ts.map +1 -1
- package/dist/adapters/backend/pty-backend.js +3 -0
- package/dist/adapters/backend/pty-backend.js.map +1 -1
- package/dist/adapters/backend/tmux-backend.d.ts +3 -0
- package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-backend.js +3 -0
- package/dist/adapters/backend/tmux-backend.js.map +1 -1
- package/dist/adapters/cli/claude-code.d.ts +3 -0
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +101 -5
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/adapters/cli/codex.d.ts.map +1 -1
- package/dist/adapters/cli/codex.js +107 -9
- package/dist/adapters/cli/codex.js.map +1 -1
- package/dist/adapters/cli/types.d.ts +15 -2
- package/dist/adapters/cli/types.d.ts.map +1 -1
- package/dist/cli.js +46 -5
- package/dist/cli.js.map +1 -1
- package/dist/config.js +1 -1
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +6 -4
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/session-manager.d.ts +4 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +22 -4
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +14 -0
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +34 -12
- package/dist/daemon.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +6 -4
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts +3 -1
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +10 -1
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/message-parser.d.ts +24 -2
- package/dist/im/lark/message-parser.d.ts.map +1 -1
- package/dist/im/lark/message-parser.js +176 -49
- package/dist/im/lark/message-parser.js.map +1 -1
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +5 -2
- package/dist/skills/definitions.js.map +1 -1
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/screen-analyzer.d.ts.map +1 -1
- package/dist/utils/screen-analyzer.js +7 -6
- package/dist/utils/screen-analyzer.js.map +1 -1
- package/dist/worker.js +21 -1
- package/dist/worker.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { SessionBackend, SpawnOpts } from './types.js';
|
|
2
2
|
export declare class PtyBackend implements SessionBackend {
|
|
3
3
|
private process;
|
|
4
|
+
/** Claude Code session JSONL path — set by worker for claude-code sessions so
|
|
5
|
+
* the claude-code adapter can verify paste+Enter submissions via file growth. */
|
|
6
|
+
claudeJsonlPath?: string;
|
|
4
7
|
spawn(bin: string, args: string[], opts: SpawnOpts): void;
|
|
5
8
|
write(data: string): void;
|
|
6
9
|
resize(cols: number, rows: number): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pty-backend.d.ts","sourceRoot":"","sources":["../../../src/adapters/backend/pty-backend.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAW5D,qBAAa,UAAW,YAAW,cAAc;IAC/C,OAAO,CAAC,OAAO,CAAyB;IAExC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAUzD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIzB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxC,yFAAyF;IACzF,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIxC,yFAAyF;IACzF,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI;IAMtE,WAAW,IAAI,MAAM,GAAG,IAAI;IAI5B,IAAI,IAAI,IAAI;CAMb"}
|
|
1
|
+
{"version":3,"file":"pty-backend.d.ts","sourceRoot":"","sources":["../../../src/adapters/backend/pty-backend.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAW5D,qBAAa,UAAW,YAAW,cAAc;IAC/C,OAAO,CAAC,OAAO,CAAyB;IAExC;sFACkF;IAClF,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAUzD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIzB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxC,yFAAyF;IACzF,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIxC,yFAAyF;IACzF,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI;IAMtE,WAAW,IAAI,MAAM,GAAG,IAAI;IAI5B,IAAI,IAAI,IAAI;CAMb"}
|
|
@@ -13,6 +13,9 @@ try {
|
|
|
13
13
|
catch { /* best effort */ }
|
|
14
14
|
export class PtyBackend {
|
|
15
15
|
process = null;
|
|
16
|
+
/** Claude Code session JSONL path — set by worker for claude-code sessions so
|
|
17
|
+
* the claude-code adapter can verify paste+Enter submissions via file growth. */
|
|
18
|
+
claudeJsonlPath;
|
|
16
19
|
spawn(bin, args, opts) {
|
|
17
20
|
this.process = pty.spawn(bin, args, {
|
|
18
21
|
name: 'xterm-256color',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pty-backend.js","sourceRoot":"","sources":["../../../src/adapters/backend/pty-backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,8EAA8E;AAC9E,IAAI,CAAC;IACH,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,EAC/D,WAAW,EAAE,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;IACnC,IAAI,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC;QAAE,SAAS,CAAC,MAAM,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC;AACvD,CAAC;AAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;AAE7B,MAAM,OAAO,UAAU;IACb,OAAO,GAAoB,IAAI,CAAC;IAExC,KAAK,CAAC,GAAW,EAAE,IAAc,EAAE,IAAe;QAChD,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;YAClC,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAY;QAChB,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,IAAY,EAAE,IAAY;QAC/B,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,yFAAyF;IACzF,MAAM,CAAC,EAA0B;QAC/B,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,yFAAyF;IACzF,MAAM,CAAC,EAAwD;QAC7D,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;YAC5C,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACL,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC;IACnC,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC;gBAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;YACzD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"pty-backend.js","sourceRoot":"","sources":["../../../src/adapters/backend/pty-backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,8EAA8E;AAC9E,IAAI,CAAC;IACH,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,EAC/D,WAAW,EAAE,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;IACnC,IAAI,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC;QAAE,SAAS,CAAC,MAAM,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC;AACvD,CAAC;AAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;AAE7B,MAAM,OAAO,UAAU;IACb,OAAO,GAAoB,IAAI,CAAC;IAExC;sFACkF;IAClF,eAAe,CAAU;IAEzB,KAAK,CAAC,GAAW,EAAE,IAAc,EAAE,IAAe;QAChD,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;YAClC,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAY;QAChB,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,IAAY,EAAE,IAAY;QAC/B,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,yFAAyF;IACzF,MAAM,CAAC,EAA0B;QAC/B,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED,yFAAyF;IACzF,MAAM,CAAC,EAAwD;QAC7D,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;YAC5C,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACL,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC;IACnC,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC;gBAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;YACzD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -31,6 +31,9 @@ export declare class TmuxBackend implements SessionBackend {
|
|
|
31
31
|
spawn(bin: string, args: string[], opts: SpawnOpts): void;
|
|
32
32
|
/** Whether the last spawn() re-attached to an existing tmux session. */
|
|
33
33
|
get isReattach(): boolean;
|
|
34
|
+
/** Claude Code session JSONL path — set by worker for claude-code sessions so
|
|
35
|
+
* the claude-code adapter can verify paste+Enter submissions via file growth. */
|
|
36
|
+
claudeJsonlPath?: string;
|
|
34
37
|
write(data: string): void;
|
|
35
38
|
/**
|
|
36
39
|
* Send text literally to the tmux pane via `tmux send-keys -l`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tmux-backend.d.ts","sourceRoot":"","sources":["../../../src/adapters/backend/tmux-backend.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;;;;;;;GAUG;AACH,qBAAa,WAAY,YAAW,cAAc;IAChD,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE;IAOjE,iDAAiD;IACjD,MAAM,CAAC,WAAW,IAAI,OAAO;IAS7B,oDAAoD;IACpD,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAI7C,4CAA4C;IAC5C,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IASxC,6DAA6D;IAC7D,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMtC,oDAAoD;IACpD,MAAM,CAAC,kBAAkB,IAAI,MAAM,EAAE;IAarC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAgEzD,wEAAwE;IACxE,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIzB;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO5B,qEAAqE;IACrE,eAAe,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAOxC;;;;OAIG;IACH,aAAa,IAAI,IAAI;IAOrB,kFAAkF;IAClF,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAO3C;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAY7B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxC,yFAAyF;IACzF,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIxC,yFAAyF;IACzF,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI;IAMtE,WAAW,IAAI,MAAM,GAAG,IAAI;IAa5B,wEAAwE;IACxE,IAAI,IAAI,IAAI;IAqBZ,oEAAoE;IACpE,cAAc,IAAI,IAAI;IAOtB;;;;;;OAMG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAoB3D,kFAAkF;IAClF,OAAO,CAAC,iBAAiB,CAAuB;IAEhD,aAAa;;;;CAGd"}
|
|
1
|
+
{"version":3,"file":"tmux-backend.d.ts","sourceRoot":"","sources":["../../../src/adapters/backend/tmux-backend.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;;;;;;;GAUG;AACH,qBAAa,WAAY,YAAW,cAAc;IAChD,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE;IAOjE,iDAAiD;IACjD,MAAM,CAAC,WAAW,IAAI,OAAO;IAS7B,oDAAoD;IACpD,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAI7C,4CAA4C;IAC5C,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IASxC,6DAA6D;IAC7D,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMtC,oDAAoD;IACpD,MAAM,CAAC,kBAAkB,IAAI,MAAM,EAAE;IAarC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAgEzD,wEAAwE;IACxE,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;sFACkF;IAClF,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIzB;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO5B,qEAAqE;IACrE,eAAe,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAOxC;;;;OAIG;IACH,aAAa,IAAI,IAAI;IAOrB,kFAAkF;IAClF,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAO3C;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAY7B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxC,yFAAyF;IACzF,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIxC,yFAAyF;IACzF,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI;IAMtE,WAAW,IAAI,MAAM,GAAG,IAAI;IAa5B,wEAAwE;IACxE,IAAI,IAAI,IAAI;IAqBZ,oEAAoE;IACpE,cAAc,IAAI,IAAI;IAOtB;;;;;;OAMG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAoB3D,kFAAkF;IAClF,OAAO,CAAC,iBAAiB,CAAuB;IAEhD,aAAa;;;;CAGd"}
|
|
@@ -131,6 +131,9 @@ export class TmuxBackend {
|
|
|
131
131
|
get isReattach() {
|
|
132
132
|
return this.reattaching;
|
|
133
133
|
}
|
|
134
|
+
/** Claude Code session JSONL path — set by worker for claude-code sessions so
|
|
135
|
+
* the claude-code adapter can verify paste+Enter submissions via file growth. */
|
|
136
|
+
claudeJsonlPath;
|
|
134
137
|
write(data) {
|
|
135
138
|
this.process?.write(data);
|
|
136
139
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tmux-backend.js","sourceRoot":"","sources":["../../../src/adapters/backend/tmux-backend.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tmux-backend.js","sourceRoot":"","sources":["../../../src/adapters/backend/tmux-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { CliAdapter } from './types.js';
|
|
2
|
+
/** Resolve the JSONL transcript path Claude Code writes user/assistant turns to.
|
|
3
|
+
* Claude Code's project-hash scheme replaces both `/` and `.` with `-`. */
|
|
4
|
+
export declare function claudeJsonlPathForSession(sessionId: string, cwd: string): string;
|
|
2
5
|
export declare function createClaudeCodeAdapter(pathOverride?: string): CliAdapter;
|
|
3
6
|
export declare const create: typeof createClaudeCodeAdapter;
|
|
4
7
|
//# sourceMappingURL=claude-code.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/claude-code.ts"],"names":[],"mappings":"
|
|
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,4 +1,58 @@
|
|
|
1
|
+
import { existsSync, statSync, openSync, readSync, closeSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
1
4
|
import { resolveCommand } from './registry.js';
|
|
5
|
+
/** Resolve the JSONL transcript path Claude Code writes user/assistant turns to.
|
|
6
|
+
* Claude Code's project-hash scheme replaces both `/` and `.` with `-`. */
|
|
7
|
+
export function claudeJsonlPathForSession(sessionId, cwd) {
|
|
8
|
+
const projectHash = cwd.replace(/[/.]/g, '-');
|
|
9
|
+
return join(homedir(), '.claude', 'projects', projectHash, `${sessionId}.jsonl`);
|
|
10
|
+
}
|
|
11
|
+
/** Substring that appears on every real user submission line and NOT on tool-result
|
|
12
|
+
* lines (those have array content: `"content":[{...}]`). */
|
|
13
|
+
const USER_SUBMIT_MARKER = '"role":"user","content":"';
|
|
14
|
+
function currentFileSize(path) {
|
|
15
|
+
if (!existsSync(path))
|
|
16
|
+
return 0;
|
|
17
|
+
try {
|
|
18
|
+
return statSync(path).size;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return 0;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function deltaHasUserSubmit(path, fromByte) {
|
|
25
|
+
if (!existsSync(path))
|
|
26
|
+
return false;
|
|
27
|
+
let size;
|
|
28
|
+
try {
|
|
29
|
+
size = statSync(path).size;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
if (size <= fromByte)
|
|
35
|
+
return false;
|
|
36
|
+
const len = size - fromByte;
|
|
37
|
+
const buf = Buffer.alloc(len);
|
|
38
|
+
const fd = openSync(path, 'r');
|
|
39
|
+
try {
|
|
40
|
+
readSync(fd, buf, 0, len, fromByte);
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
closeSync(fd);
|
|
44
|
+
}
|
|
45
|
+
return buf.toString('utf8').includes(USER_SUBMIT_MARKER);
|
|
46
|
+
}
|
|
47
|
+
async function waitForUserSubmit(path, baseByte, timeoutMs) {
|
|
48
|
+
const deadline = Date.now() + timeoutMs;
|
|
49
|
+
while (Date.now() < deadline) {
|
|
50
|
+
if (deltaHasUserSubmit(path, baseByte))
|
|
51
|
+
return true;
|
|
52
|
+
await new Promise(r => setTimeout(r, 100));
|
|
53
|
+
}
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
2
56
|
const COMPLETION_RE = /\u2733\s*(?:Worked|Crunched|Cogitated|Cooked|Churned|Saut[eé]ed) for \d+[smh]/;
|
|
3
57
|
export function createClaudeCodeAdapter(pathOverride) {
|
|
4
58
|
const bin = resolveCommand(pathOverride ?? 'claude');
|
|
@@ -6,7 +60,7 @@ export function createClaudeCodeAdapter(pathOverride) {
|
|
|
6
60
|
id: 'claude-code',
|
|
7
61
|
resolvedBin: bin,
|
|
8
62
|
supportsTypeAhead: true,
|
|
9
|
-
buildArgs({ sessionId, resume }) {
|
|
63
|
+
buildArgs({ sessionId, resume, botName, botOpenId }) {
|
|
10
64
|
const args = [];
|
|
11
65
|
if (resume) {
|
|
12
66
|
args.push('--resume', sessionId);
|
|
@@ -16,6 +70,19 @@ export function createClaudeCodeAdapter(pathOverride) {
|
|
|
16
70
|
}
|
|
17
71
|
args.push('--dangerously-skip-permissions');
|
|
18
72
|
args.push('--disallowed-tools', 'EnterPlanMode,ExitPlanMode');
|
|
73
|
+
const identityLines = botName || botOpenId
|
|
74
|
+
? [
|
|
75
|
+
'',
|
|
76
|
+
'你的身份:',
|
|
77
|
+
`- 名字:${botName ?? '(未知)'}`,
|
|
78
|
+
`- open_id:${botOpenId ?? '(未知)'}`,
|
|
79
|
+
'同一群里可能有多个机器人同时被 @,消息里会以 `@名字` 和 `open_id` 区分。',
|
|
80
|
+
'判断本条消息是不是分派给你:对照上面的名字和 open_id。',
|
|
81
|
+
'- 只执行明确分给自己的那部分,别抢别的机器人的活',
|
|
82
|
+
'- 整条消息都指派给别的机器人时,保持沉默不要回复',
|
|
83
|
+
'- 需要找对端协作时先用 `botmux bots list` 查 open_id,再用 `botmux send --mention <open_id>` @ 对方',
|
|
84
|
+
]
|
|
85
|
+
: [];
|
|
19
86
|
args.push('--append-system-prompt', [
|
|
20
87
|
'你连接到了飞书(Lark)话题群。用户在飞书上阅读,看不到你的终端输出。',
|
|
21
88
|
'想让用户看到的内容必须通过 `botmux send` 命令发送,终端输出不会到达聊天。',
|
|
@@ -27,6 +94,7 @@ export function createClaudeCodeAdapter(pathOverride) {
|
|
|
27
94
|
'- 附带文件:`botmux send --files /path/to/file.pdf "请查收"`',
|
|
28
95
|
'- 需要上下文时用 `botmux thread messages` 读取之前的对话。',
|
|
29
96
|
'- 查看可协作的机器人:`botmux bots list`',
|
|
97
|
+
...identityLines,
|
|
30
98
|
].join('\n'));
|
|
31
99
|
return args;
|
|
32
100
|
},
|
|
@@ -36,18 +104,46 @@ export function createClaudeCodeAdapter(pathOverride) {
|
|
|
36
104
|
// swallow a trailing Enter sent via send-keys -l + send-keys Enter,
|
|
37
105
|
// leaving content in the input box. Bracketed paste marks an explicit
|
|
38
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.
|
|
39
111
|
const hasImagePath = /\.(jpe?g|png|gif|webp|svg|bmp)\b/i.test(content);
|
|
40
112
|
const submitDelay = hasImagePath ? 800 : 500;
|
|
113
|
+
const sendEnter = () => {
|
|
114
|
+
if (pty.sendSpecialKeys)
|
|
115
|
+
pty.sendSpecialKeys('Enter');
|
|
116
|
+
else
|
|
117
|
+
pty.write('\r');
|
|
118
|
+
};
|
|
119
|
+
const baseByte = pty.claudeJsonlPath ? currentFileSize(pty.claudeJsonlPath) : 0;
|
|
41
120
|
if (pty.pasteText && pty.sendSpecialKeys) {
|
|
42
121
|
pty.pasteText(content);
|
|
43
|
-
await new Promise(r => setTimeout(r, submitDelay));
|
|
44
|
-
pty.sendSpecialKeys('Enter');
|
|
45
122
|
}
|
|
46
123
|
else {
|
|
47
124
|
pty.write('\x1b[200~' + content + '\x1b[201~');
|
|
48
|
-
await new Promise(r => setTimeout(r, submitDelay));
|
|
49
|
-
pty.write('\r');
|
|
50
125
|
}
|
|
126
|
+
await new Promise(r => setTimeout(r, submitDelay));
|
|
127
|
+
sendEnter();
|
|
128
|
+
// Without a JSONL path we can't verify — trust the fixed delay and return.
|
|
129
|
+
if (!pty.claudeJsonlPath)
|
|
130
|
+
return;
|
|
131
|
+
// Retry budget: up to 2 extra Enters (3 sends total), each followed by
|
|
132
|
+
// an 800ms wait for the JSONL append. If the user is concurrently typing
|
|
133
|
+
// in the web terminal, a stray Enter may submit their half-typed text —
|
|
134
|
+
// but we only retry when the JSONL is provably unchanged, so the race
|
|
135
|
+
// window is bounded to cases where submit really did fail.
|
|
136
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
137
|
+
if (await waitForUserSubmit(pty.claudeJsonlPath, baseByte, 800))
|
|
138
|
+
return;
|
|
139
|
+
sendEnter();
|
|
140
|
+
}
|
|
141
|
+
// Final grace check.
|
|
142
|
+
if (await waitForUserSubmit(pty.claudeJsonlPath, baseByte, 800))
|
|
143
|
+
return;
|
|
144
|
+
// All retries exhausted and still no user line in JSONL. Signal failure
|
|
145
|
+
// so the worker can notify the user in Lark instead of silently dropping.
|
|
146
|
+
return { submitted: false };
|
|
51
147
|
},
|
|
52
148
|
completionPattern: COMPLETION_RE,
|
|
53
149
|
readyPattern: /❯/,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/adapters/cli/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,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;
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/adapters/cli/claude-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/codex.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/codex.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AAqDxD,wBAAgB,kBAAkB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,UAAU,CAkEpE;AAED,eAAO,MAAM,MAAM,2BAAqB,CAAC"}
|
|
@@ -1,7 +1,65 @@
|
|
|
1
|
+
import { existsSync, statSync, openSync, readSync, closeSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
1
4
|
import { resolveCommand } from './registry.js';
|
|
2
5
|
import { BOTMUX_SHELL_HINTS } from './shared-hints.js';
|
|
6
|
+
/** Global submit log — Codex appends one JSON line here on every successful
|
|
7
|
+
* user submit across all sessions. Far better than the per-session rollout
|
|
8
|
+
* file, which Codex creates lazily at the first submit (chicken-and-egg:
|
|
9
|
+
* you can't use it to verify the *first* submit that we're trying to fix). */
|
|
10
|
+
const HISTORY_PATH = join(homedir(), '.codex', 'history.jsonl');
|
|
3
11
|
function delay(ms) {
|
|
4
|
-
return new Promise(
|
|
12
|
+
return new Promise(r => setTimeout(r, ms));
|
|
13
|
+
}
|
|
14
|
+
function currentFileSize(path) {
|
|
15
|
+
if (!existsSync(path))
|
|
16
|
+
return 0;
|
|
17
|
+
try {
|
|
18
|
+
return statSync(path).size;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return 0;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function deltaContains(path, fromByte, marker) {
|
|
25
|
+
if (!existsSync(path))
|
|
26
|
+
return false;
|
|
27
|
+
let size;
|
|
28
|
+
try {
|
|
29
|
+
size = statSync(path).size;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
if (size <= fromByte)
|
|
35
|
+
return false;
|
|
36
|
+
const len = size - fromByte;
|
|
37
|
+
const buf = Buffer.alloc(len);
|
|
38
|
+
const fd = openSync(path, 'r');
|
|
39
|
+
try {
|
|
40
|
+
readSync(fd, buf, 0, len, fromByte);
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
closeSync(fd);
|
|
44
|
+
}
|
|
45
|
+
return buf.toString('utf8').includes(marker);
|
|
46
|
+
}
|
|
47
|
+
async function waitForHistoryAppend(path, fromByte, marker, timeoutMs) {
|
|
48
|
+
const deadline = Date.now() + timeoutMs;
|
|
49
|
+
while (Date.now() < deadline) {
|
|
50
|
+
if (deltaContains(path, fromByte, marker))
|
|
51
|
+
return true;
|
|
52
|
+
await delay(100);
|
|
53
|
+
}
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
/** Build a JSON-escaped prefix of the content so substring-match against the
|
|
57
|
+
* raw history.jsonl file content (where text fields store \n as the two-char
|
|
58
|
+
* escape `\n`, not a literal newline) finds our line. The prefix length is
|
|
59
|
+
* chosen to be unique-enough even when two bots submit near-identical text. */
|
|
60
|
+
function historyMarker(content) {
|
|
61
|
+
const prefix = content.slice(0, 40);
|
|
62
|
+
return JSON.stringify(prefix).slice(1, -1); // strip surrounding quotes
|
|
5
63
|
}
|
|
6
64
|
export function createCodexAdapter(pathOverride) {
|
|
7
65
|
const bin = resolveCommand(pathOverride ?? 'codex');
|
|
@@ -17,16 +75,56 @@ export function createCodexAdapter(pathOverride) {
|
|
|
17
75
|
];
|
|
18
76
|
},
|
|
19
77
|
async writeInput(pty, content) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
78
|
+
// Codex's TUI in --no-alt-screen mode does NOT handle bracketed paste:
|
|
79
|
+
// wrapping content in \x1b[200~...\x1b[201~ via tmux paste-buffer
|
|
80
|
+
// makes Codex exit cleanly (code 0) — it parses the ESC as an abort.
|
|
81
|
+
// So we stick with the older `send-keys -l` raw-stream path that has
|
|
82
|
+
// worked historically.
|
|
83
|
+
//
|
|
84
|
+
// Known limitation: Codex's input mode treats every \n as Enter, so a
|
|
85
|
+
// multi-line burst submits one-line fragments until Codex's internal
|
|
86
|
+
// paste-detection finally kicks in — visible as e.g. the tail of
|
|
87
|
+
// "Session ID: <uuid>" stranded in the input box. The verification
|
|
88
|
+
// loop below catches that case (the full content prefix never appears
|
|
89
|
+
// in history.jsonl) and surfaces it via user_notify rather than
|
|
90
|
+
// silently dropping the message.
|
|
91
|
+
const trySendEnter = () => {
|
|
92
|
+
try {
|
|
93
|
+
if (pty.sendSpecialKeys)
|
|
94
|
+
pty.sendSpecialKeys('Enter');
|
|
95
|
+
else
|
|
96
|
+
pty.write('\r');
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// tmux session is gone (CLI exited mid-write) — bail out cleanly
|
|
101
|
+
// rather than crashing the worker on an unhandled execFileSync error.
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
const baseByte = currentFileSize(HISTORY_PATH);
|
|
106
|
+
const marker = historyMarker(content);
|
|
107
|
+
try {
|
|
108
|
+
if (pty.sendText)
|
|
109
|
+
pty.sendText(content);
|
|
110
|
+
else
|
|
111
|
+
pty.write(content);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return { submitted: false };
|
|
24
115
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
116
|
+
await delay(200);
|
|
117
|
+
if (!trySendEnter())
|
|
118
|
+
return { submitted: false };
|
|
119
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
120
|
+
if (await waitForHistoryAppend(HISTORY_PATH, baseByte, marker, 800))
|
|
121
|
+
return;
|
|
122
|
+
if (!trySendEnter())
|
|
123
|
+
return { submitted: false };
|
|
29
124
|
}
|
|
125
|
+
if (await waitForHistoryAppend(HISTORY_PATH, baseByte, marker, 800))
|
|
126
|
+
return;
|
|
127
|
+
return { submitted: false };
|
|
30
128
|
},
|
|
31
129
|
completionPattern: undefined,
|
|
32
130
|
readyPattern: /›|\d+% left/, // › for input box, or status bar pattern (e.g. "97% left")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/adapters/cli/codex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGvD,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/adapters/cli/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,10 @@ export interface PtyHandle {
|
|
|
6
6
|
sendSpecialKeys?(...keys: string[]): void;
|
|
7
7
|
/** Paste text via tmux load-buffer + paste-buffer (auto-brackets if terminal supports it). */
|
|
8
8
|
pasteText?(text: string): void;
|
|
9
|
+
/** Absolute path to Claude Code's session JSONL; set by worker for claude-code adapter.
|
|
10
|
+
* Used by writeInput to verify a paste+Enter actually committed (new user-content
|
|
11
|
+
* line appended) and retry Enter if not — rather than trusting fixed sleep timing. */
|
|
12
|
+
claudeJsonlPath?: string;
|
|
9
13
|
}
|
|
10
14
|
export interface CliAdapter {
|
|
11
15
|
/** Unique identifier */
|
|
@@ -21,13 +25,22 @@ export interface CliAdapter {
|
|
|
21
25
|
sessionId: string;
|
|
22
26
|
resume: boolean;
|
|
23
27
|
initialPrompt?: string;
|
|
28
|
+
botName?: string;
|
|
29
|
+
botOpenId?: string;
|
|
24
30
|
}): string[];
|
|
25
31
|
/** When true, the adapter passes the initial prompt via CLI args (e.g. -i).
|
|
26
32
|
* The worker skips queuing the prompt for stdin write. */
|
|
27
33
|
readonly passesInitialPromptViaArgs?: boolean;
|
|
28
34
|
/** Write user input to PTY. May fire writes asynchronously (e.g. Aiden delayed Enter).
|
|
29
|
-
* Resolves when all writes are complete.
|
|
30
|
-
|
|
35
|
+
* Resolves when all writes are complete.
|
|
36
|
+
*
|
|
37
|
+
* Return value is optional: adapters that can verify the submit (e.g. Claude
|
|
38
|
+
* Code via session JSONL) return `{ submitted: false }` when all retries
|
|
39
|
+
* failed, so the worker can surface that to the user. `void` / undefined
|
|
40
|
+
* means "no verification performed, assume OK". */
|
|
41
|
+
writeInput(pty: PtyHandle, content: string): Promise<void | {
|
|
42
|
+
submitted: boolean;
|
|
43
|
+
}>;
|
|
31
44
|
/** Optional: absolute path (with ~ expansion handled by caller) to the CLI's
|
|
32
45
|
* skill directory. When set, `ensureSkills` will write/refresh skill files
|
|
33
46
|
* into `{skillsDir}/<skillName>/SKILL.md`. Undefined = this CLI does not
|
|
@@ -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;
|
|
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;CAC1B;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,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,MAAM,EAAE,CAAC;IAEb;+DAC2D;IAC3D,QAAQ,CAAC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAE9C;;;;;;wDAMoD;IACpD,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAEpF;;;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,UAAU,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -1347,7 +1347,7 @@ async function cmdThreadMessages(rest) {
|
|
|
1347
1347
|
const { parseApiMessage } = await import('./im/lark/message-parser.js');
|
|
1348
1348
|
try {
|
|
1349
1349
|
const raw = await listThreadMessages(s.larkAppId, s.chatId, s.rootMessageId, limit);
|
|
1350
|
-
const messages = raw.map(parseApiMessage);
|
|
1350
|
+
const messages = raw.map(m => parseApiMessage(m));
|
|
1351
1351
|
console.log(JSON.stringify({ sessionId: sid, threadId: s.rootMessageId, messages, total: messages.length }, null, 2));
|
|
1352
1352
|
}
|
|
1353
1353
|
catch (err) {
|
|
@@ -1550,13 +1550,19 @@ async function cmdSend(rest) {
|
|
|
1550
1550
|
console.error('没有内容可发送。用法:\n echo "消息" | botmux send\n botmux send "消息"\n botmux send --content-file /tmp/msg.md --images /tmp/chart.png');
|
|
1551
1551
|
process.exit(1);
|
|
1552
1552
|
}
|
|
1553
|
-
// Parse mentions: "open_id:Display Name"
|
|
1553
|
+
// Parse mentions: "open_id:Display Name" or bare "open_id"
|
|
1554
|
+
// Bare form appends a trailing <at id=...> to the message and still writes
|
|
1555
|
+
// a bot-mention signal — useful when the sender doesn't know the target's
|
|
1556
|
+
// display name or just wants to notify without inline substitution.
|
|
1554
1557
|
const mentions = [];
|
|
1555
1558
|
for (const m of mentionArgs) {
|
|
1556
1559
|
const idx = m.indexOf(':');
|
|
1557
1560
|
if (idx > 0) {
|
|
1558
1561
|
mentions.push({ open_id: m.slice(0, idx), name: m.slice(idx + 1) });
|
|
1559
1562
|
}
|
|
1563
|
+
else if (m.trim()) {
|
|
1564
|
+
mentions.push({ open_id: m.trim(), name: '' });
|
|
1565
|
+
}
|
|
1560
1566
|
}
|
|
1561
1567
|
// Validate file paths
|
|
1562
1568
|
for (const p of [...images, ...files]) {
|
|
@@ -1597,14 +1603,49 @@ async function cmdSend(rest) {
|
|
|
1597
1603
|
}
|
|
1598
1604
|
}
|
|
1599
1605
|
catch { /* not JSON, use as-is */ }
|
|
1606
|
+
// Auto-detect @BotName in text and inject as mentions, using the sender
|
|
1607
|
+
// app's cross-ref file for per-app-scoped open_ids. Without this, a plain
|
|
1608
|
+
// "@Claude" in text only triggers IPC routing but Lark UI shows it as
|
|
1609
|
+
// plain text — confusing the user who thinks the @ didn't fire.
|
|
1610
|
+
try {
|
|
1611
|
+
const dataDir = resolveDataDir();
|
|
1612
|
+
const botInfoPath = join(dataDir, 'bots-info.json');
|
|
1613
|
+
const botEntries = existsSync(botInfoPath) ? JSON.parse(readFileSync(botInfoPath, 'utf-8')) : [];
|
|
1614
|
+
const crossRefPath = join(dataDir, `bot-openids-${appId}.json`);
|
|
1615
|
+
const crossRef = existsSync(crossRefPath)
|
|
1616
|
+
? JSON.parse(readFileSync(crossRefPath, 'utf-8'))
|
|
1617
|
+
: {};
|
|
1618
|
+
const alreadyMentioned = new Set(mentions.map(m => m.open_id));
|
|
1619
|
+
for (const entry of botEntries) {
|
|
1620
|
+
if (!entry.botName || entry.larkAppId === appId)
|
|
1621
|
+
continue;
|
|
1622
|
+
const names = [entry.botName, entry.cliId].filter(Boolean);
|
|
1623
|
+
for (const name of names) {
|
|
1624
|
+
const re = new RegExp(`@${name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\b`, 'i');
|
|
1625
|
+
if (!re.test(text))
|
|
1626
|
+
continue;
|
|
1627
|
+
// Prefer sender-scoped open_id from cross-ref (what Lark's sender app
|
|
1628
|
+
// has seen for the target bot); fall back to target's own open_id.
|
|
1629
|
+
const senderScopedId = crossRef[entry.botName] ?? entry.botOpenId;
|
|
1630
|
+
if (!senderScopedId || alreadyMentioned.has(senderScopedId))
|
|
1631
|
+
break;
|
|
1632
|
+
mentions.push({ open_id: senderScopedId, name: entry.botName });
|
|
1633
|
+
alreadyMentioned.add(senderScopedId);
|
|
1634
|
+
break;
|
|
1635
|
+
}
|
|
1636
|
+
}
|
|
1637
|
+
}
|
|
1638
|
+
catch { /* best-effort */ }
|
|
1600
1639
|
// Decide: interactive card (renders markdown) vs. post (plain text).
|
|
1601
1640
|
// Explicit --card / --text wins; otherwise auto-detect markdown syntax.
|
|
1602
1641
|
const useCard = forceCard || (!forceText && hasMarkdown(text));
|
|
1603
1642
|
const mentionMap = new Map();
|
|
1604
1643
|
for (const m of mentions)
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1644
|
+
if (m.name)
|
|
1645
|
+
mentionMap.set(m.name.toLowerCase(), m.open_id);
|
|
1646
|
+
const namedMentions = mentions.filter(m => m.name);
|
|
1647
|
+
const mentionPattern = namedMentions.length > 0
|
|
1648
|
+
? new RegExp(`@(${namedMentions.map(m => m.name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('|')})\\b`, 'gi')
|
|
1608
1649
|
: null;
|
|
1609
1650
|
let messageId;
|
|
1610
1651
|
if (useCard) {
|