botmux 3.18.2 → 3.18.3

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 (42) hide show
  1. package/dist/.runtime-build-id +1 -1
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +28 -3
  4. package/dist/cli.js.map +1 -1
  5. package/dist/core/fleet-state-store.d.ts.map +1 -1
  6. package/dist/core/fleet-state-store.js +6 -0
  7. package/dist/core/fleet-state-store.js.map +1 -1
  8. package/dist/core/fleet-supervisor-policy.d.ts +38 -6
  9. package/dist/core/fleet-supervisor-policy.d.ts.map +1 -1
  10. package/dist/core/fleet-supervisor-policy.js +32 -9
  11. package/dist/core/fleet-supervisor-policy.js.map +1 -1
  12. package/dist/core/fleet-supervisor.d.ts +39 -0
  13. package/dist/core/fleet-supervisor.d.ts.map +1 -1
  14. package/dist/core/fleet-supervisor.js +61 -9
  15. package/dist/core/fleet-supervisor.js.map +1 -1
  16. package/dist/core/reply-target.d.ts +27 -0
  17. package/dist/core/reply-target.d.ts.map +1 -1
  18. package/dist/core/reply-target.js +58 -0
  19. package/dist/core/reply-target.js.map +1 -1
  20. package/dist/daemon.d.ts +3 -0
  21. package/dist/daemon.d.ts.map +1 -1
  22. package/dist/daemon.js +19 -5
  23. package/dist/daemon.js.map +1 -1
  24. package/dist/im/lark/event-dispatcher.d.ts +13 -0
  25. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  26. package/dist/im/lark/event-dispatcher.js +22 -1
  27. package/dist/im/lark/event-dispatcher.js.map +1 -1
  28. package/dist/platform/tunnel-client.d.ts +27 -0
  29. package/dist/platform/tunnel-client.d.ts.map +1 -1
  30. package/dist/platform/tunnel-client.js +205 -22
  31. package/dist/platform/tunnel-client.js.map +1 -1
  32. package/dist/services/send-policy.d.ts +38 -0
  33. package/dist/services/send-policy.d.ts.map +1 -1
  34. package/dist/services/send-policy.js +33 -0
  35. package/dist/services/send-policy.js.map +1 -1
  36. package/dist/types.d.ts +16 -0
  37. package/dist/types.d.ts.map +1 -1
  38. package/dist/utils/child-env.d.ts +41 -0
  39. package/dist/utils/child-env.d.ts.map +1 -1
  40. package/dist/utils/child-env.js +53 -0
  41. package/dist/utils/child-env.js.map +1 -1
  42. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"fleet-state-store.d.ts","sourceRoot":"","sources":["../../src/core/fleet-state-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,EAA4B,KAAK,UAAU,EAAuB,MAAM,8BAA8B,CAAC;AA+B9G,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAOnE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,UAAU,GAC3C,UAAU,CAQZ;AAED,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,UAAU,CAEhF"}
1
+ {"version":3,"file":"fleet-state-store.d.ts","sourceRoot":"","sources":["../../src/core/fleet-state-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,EAA4B,KAAK,UAAU,EAAuB,MAAM,8BAA8B,CAAC;AAqC9G,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAOnE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,UAAU,GAC3C,UAAU,CAQZ;AAED,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,UAAU,CAEhF"}
@@ -37,6 +37,12 @@ function coerceState(raw) {
37
37
  restarts: Number.isSafeInteger(q.restarts) ? q.restarts : 0,
38
38
  lastExitCode: typeof q.lastExitCode === 'number' ? q.lastExitCode : null,
39
39
  startedAt: typeof q.startedAt === 'string' ? q.startedAt : null,
40
+ // Optional, external members only. This normalizer is a WHITELIST — any
41
+ // field not copied here is silently dropped on the next read, so a new
42
+ // FleetProcState field has to be added in both places or it never
43
+ // round-trips. Kept absent (rather than `undefined`) when missing so bot
44
+ // and dashboard entries serialize byte-identically to before.
45
+ ...(typeof q.configHash === 'string' ? { configHash: q.configHash } : {}),
40
46
  });
41
47
  }
42
48
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"fleet-state-store.js","sourceRoot":"","sources":["../../src/core/fleet-state-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fleet-state-store.js","sourceRoot":"","sources":["../../src/core/fleet-state-store.ts"],"names":[],"mappings":"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"}
@@ -46,6 +46,20 @@ export interface FleetProcState {
46
46
  lastExitCode: number | null;
47
47
  /** ISO timestamp of the last (re)spawn. */
48
48
  startedAt: string | null;
49
+ /**
50
+ * For an EXTERNAL member (a plugin service): a hash of the configuration this
51
+ * process was actually started from. Absent for bot daemons and the dashboard,
52
+ * whose configuration is not per-member.
53
+ *
54
+ * WHY IT IS PERSISTED HERE: the caller compares it against the hash of the
55
+ * CURRENT definition to decide "was this started from a stale config, and does
56
+ * it therefore need a restart to pick up the change?". That question can only
57
+ * be answered by something that outlives the spawn, so it has to live in
58
+ * fleet-state next to the pid. pm2 answered it by stashing the hash in its own
59
+ * app metadata (`pm2_env`); fleet-state has no such bag, hence this field —
60
+ * same semantics, different storage.
61
+ */
62
+ configHash?: string;
49
63
  }
50
64
  export interface FleetState {
51
65
  supervisorPid: number;
@@ -63,10 +77,24 @@ export interface ChildExit {
63
77
  code: number | null;
64
78
  signal: NodeJS.Signals | null;
65
79
  }
66
- /** True when this exit is a clean, operator-intended shutdown (do NOT restart).
67
- * ONLY a code === 90 qualifies; a signal death (code null) is always a crash,
68
- * matching pm2's rule that signal-only death is never a graceful sentinel. */
69
- export declare function isGracefulExit(exit: ChildExit): boolean;
80
+ /**
81
+ * True when this exit is a clean, operator-intended shutdown (do NOT restart).
82
+ * ONLY a code === 90 qualifies; a signal death (code null) is always a crash,
83
+ * matching pm2's rule that signal-only death is never a graceful sentinel.
84
+ *
85
+ * `honoursSentinel` is false for a member whose code is NOT ours (an external
86
+ * command / plugin service). 90 is a PRIVATE handshake between botmux's own two
87
+ * managed cores and this policy — a third-party program has never heard of it and
88
+ * may use 90 as an ordinary failure code. Honouring it there means a plugin that
89
+ * dies with 90 is read as "it asked not to be restarted" and silently vanishes,
90
+ * with state showing a bland 'stopped' — defeating the crash-restart machinery
91
+ * that is the whole reason such a service is supervised at all. Under pm2 this
92
+ * could not happen: plugin apps were never given stop_exit_codes, so 90 was just
93
+ * a crash and restarted. Operator-intended stops do NOT rely on the exit code
94
+ * (the live layer marks them via explicitStop/stopping before the exit arrives),
95
+ * so external members lose nothing by refusing the sentinel.
96
+ */
97
+ export declare function isGracefulExit(exit: ChildExit, honoursSentinel?: boolean): boolean;
70
98
  export type ExitDecision = {
71
99
  action: 'stop';
72
100
  reason: 'graceful';
@@ -84,8 +112,12 @@ export type ExitDecision = {
84
112
  * • graceful (code 90) → stop, never restart
85
113
  * • crash & under the cap → restart (restarts+1)
86
114
  * • crash & at/over the cap → park errored, stop restarting
115
+ *
116
+ * `honoursSentinel: false` (an external/plugin member) makes 90 an ordinary crash
117
+ * code — see isGracefulExit for why a third-party program must not be taken at
118
+ * its word about our private sentinel.
87
119
  */
88
- export declare function decideOnExit(proc: Pick<FleetProcState, 'restarts'>, exit: ChildExit, policy?: RestartPolicy): ExitDecision;
120
+ export declare function decideOnExit(proc: Pick<FleetProcState, 'restarts'>, exit: ChildExit, policy?: RestartPolicy, honoursSentinel?: boolean): ExitDecision;
89
121
  /**
90
122
  * Validate the projection identity invariant over a proc set: names unique,
91
123
  * and no two RUNNING procs (pid > 1) share a pid. Throws on violation — the
@@ -102,5 +134,5 @@ export declare function assertProjectionIdentity(procs: readonly FleetProcState[
102
134
  */
103
135
  export declare function planStart(configuredNames: readonly string[], current: readonly FleetProcState[], isAlive?: (proc: FleetProcState) => boolean): string[];
104
136
  /** Fresh state entry for a newly-spawned proc (generation 1, online). */
105
- export declare function freshProc(name: string, appId: string, pid: number, now: string): FleetProcState;
137
+ export declare function freshProc(name: string, appId: string, pid: number, now: string, configHash?: string): FleetProcState;
106
138
  //# sourceMappingURL=fleet-supervisor-policy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fleet-supervisor-policy.d.ts","sourceRoot":"","sources":["../../src/core/fleet-supervisor-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;8EAC8E;AAC9E,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;AAE7E,yDAAyD;AACzD,MAAM,WAAW,cAAc;IAC7B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC;IACZ;+EAC2E;IAC3E,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,eAAe,CAAC;IACxB,gFAAgF;IAChF,QAAQ,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,2CAA2C;IAC3C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,sBAAsB,EAAE,aAAwD,CAAC;AAE9F,uEAAuE;AACvE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;CAC/B;AAED;;+EAE+E;AAC/E,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAEvD;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,EACtC,IAAI,EAAE,SAAS,EACf,MAAM,GAAE,aAAsC,GAC7C,YAAY,CAOd;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI,CAe/E;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,eAAe,EAAE,SAAS,MAAM,EAAE,EAClC,OAAO,EAAE,SAAS,cAAc,EAAE,EAClC,OAAO,GAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAmD,GACrF,MAAM,EAAE,CAQV;AAED,yEAAyE;AACzE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,cAAc,CAE/F"}
1
+ {"version":3,"file":"fleet-supervisor-policy.d.ts","sourceRoot":"","sources":["../../src/core/fleet-supervisor-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;8EAC8E;AAC9E,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;AAE7E,yDAAyD;AACzD,MAAM,WAAW,cAAc;IAC7B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC;IACZ;+EAC2E;IAC3E,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,eAAe,CAAC;IACxB,gFAAgF;IAChF,QAAQ,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,2CAA2C;IAC3C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,sBAAsB,EAAE,aAAwD,CAAC;AAE9F,uEAAuE;AACvE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,UAAO,GAAG,OAAO,CAE/E;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,EACtC,IAAI,EAAE,SAAS,EACf,MAAM,GAAE,aAAsC,EAC9C,eAAe,UAAO,GACrB,YAAY,CAOd;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI,CAe/E;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,eAAe,EAAE,SAAS,MAAM,EAAE,EAClC,OAAO,EAAE,SAAS,cAAc,EAAE,EAClC,OAAO,GAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAmD,GACrF,MAAM,EAAE,CAQV;AAED,yEAAyE;AACzE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,cAAc,CAMpH"}
@@ -28,11 +28,25 @@
28
28
  * Mirrors pm2's stop_exit_codes:[90] contract (see pm2-graceful-exit.ts). */
29
29
  export const FLEET_GRACEFUL_EXIT_CODE = 90;
30
30
  export const DEFAULT_RESTART_POLICY = { maxRestarts: 10, restartDelayMs: 200 };
31
- /** True when this exit is a clean, operator-intended shutdown (do NOT restart).
32
- * ONLY a code === 90 qualifies; a signal death (code null) is always a crash,
33
- * matching pm2's rule that signal-only death is never a graceful sentinel. */
34
- export function isGracefulExit(exit) {
35
- return exit.signal === null && exit.code === FLEET_GRACEFUL_EXIT_CODE;
31
+ /**
32
+ * True when this exit is a clean, operator-intended shutdown (do NOT restart).
33
+ * ONLY a code === 90 qualifies; a signal death (code null) is always a crash,
34
+ * matching pm2's rule that signal-only death is never a graceful sentinel.
35
+ *
36
+ * `honoursSentinel` is false for a member whose code is NOT ours (an external
37
+ * command / plugin service). 90 is a PRIVATE handshake between botmux's own two
38
+ * managed cores and this policy — a third-party program has never heard of it and
39
+ * may use 90 as an ordinary failure code. Honouring it there means a plugin that
40
+ * dies with 90 is read as "it asked not to be restarted" and silently vanishes,
41
+ * with state showing a bland 'stopped' — defeating the crash-restart machinery
42
+ * that is the whole reason such a service is supervised at all. Under pm2 this
43
+ * could not happen: plugin apps were never given stop_exit_codes, so 90 was just
44
+ * a crash and restarted. Operator-intended stops do NOT rely on the exit code
45
+ * (the live layer marks them via explicitStop/stopping before the exit arrives),
46
+ * so external members lose nothing by refusing the sentinel.
47
+ */
48
+ export function isGracefulExit(exit, honoursSentinel = true) {
49
+ return honoursSentinel && exit.signal === null && exit.code === FLEET_GRACEFUL_EXIT_CODE;
36
50
  }
37
51
  /**
38
52
  * Decide what to do when a supervised proc exits. Pure: the live layer applies
@@ -40,9 +54,13 @@ export function isGracefulExit(exit) {
40
54
  * • graceful (code 90) → stop, never restart
41
55
  * • crash & under the cap → restart (restarts+1)
42
56
  * • crash & at/over the cap → park errored, stop restarting
57
+ *
58
+ * `honoursSentinel: false` (an external/plugin member) makes 90 an ordinary crash
59
+ * code — see isGracefulExit for why a third-party program must not be taken at
60
+ * its word about our private sentinel.
43
61
  */
44
- export function decideOnExit(proc, exit, policy = DEFAULT_RESTART_POLICY) {
45
- if (isGracefulExit(exit))
62
+ export function decideOnExit(proc, exit, policy = DEFAULT_RESTART_POLICY, honoursSentinel = true) {
63
+ if (isGracefulExit(exit, honoursSentinel))
46
64
  return { action: 'stop', reason: 'graceful' };
47
65
  const nextRestarts = proc.restarts + 1;
48
66
  if (nextRestarts > policy.maxRestarts) {
@@ -92,7 +110,12 @@ export function planStart(configuredNames, current, isAlive = (p) => p.status ==
92
110
  return toStart;
93
111
  }
94
112
  /** Fresh state entry for a newly-spawned proc (generation 1, online). */
95
- export function freshProc(name, appId, pid, now) {
96
- return { name, appId, pid, generation: 1, status: 'online', restarts: 0, lastExitCode: null, startedAt: now };
113
+ export function freshProc(name, appId, pid, now, configHash) {
114
+ const proc = { name, appId, pid, generation: 1, status: 'online', restarts: 0, lastExitCode: null, startedAt: now };
115
+ // Only external members carry one; keep the key absent otherwise so existing
116
+ // state files and their assertions stay byte-identical.
117
+ if (configHash !== undefined)
118
+ proc.configHash = configHash;
119
+ return proc;
97
120
  }
98
121
  //# sourceMappingURL=fleet-supervisor-policy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fleet-supervisor-policy.js","sourceRoot":"","sources":["../../src/core/fleet-supervisor-policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fleet-supervisor-policy.js","sourceRoot":"","sources":["../../src/core/fleet-supervisor-policy.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,45 @@ export interface FleetBotSpec {
30
30
  * write `dashboard-out.log` / `dashboard-err.log` instead of a bot-indexed
31
31
  * name. */
32
32
  logBaseName?: string;
33
+ /**
34
+ * A member that is NOT one of botmux's own entry modules — an arbitrary
35
+ * long-lived command (today: a plugin service). Set this INSTEAD of `entry`.
36
+ *
37
+ * WHY THE SUPERVISOR AND NOT pm2: plugin services used to run under a pm2 God
38
+ * at `PLUGIN_PM2_HOME`, which does not work in the shipped build at all —
39
+ * MEASURED in a real compiled binary, `require.resolve('pm2/bin/pm2')` throws
40
+ * (the module graph lives in the virtual `/$bunfs/`), so `pm2Bin()` fell back
41
+ * to a bare `'pm2'` that is not on a user's PATH. The supervisor already gives
42
+ * the dashboard — also not a bot — the same crash-restart / graceful-exit /
43
+ * stop machinery a plugin service needs, and it re-execs `process.execPath`,
44
+ * so it works in the compiled binary by construction.
45
+ *
46
+ * ENV IS SCRUBBED HARDER THAN FOR OUR OWN MEMBERS, deliberately. A bot daemon
47
+ * and the dashboard scrub the full set of session-scoped keys in their OWN
48
+ * boot (index-daemon.ts / index-dashboard.ts) — they are our code, so they can
49
+ * be asked to. An external command will NOT do that for us, and the keys it
50
+ * would inherit are exactly the ones that turn one session's private state
51
+ * into fleet-wide state (a sibling bot's CLI home, the dashboard's H5 app
52
+ * secret, one turn's session identity). So `spawnBot` runs the same scrub the
53
+ * pm2 path used to run (`scrubExternalMemberEnv`) before handing env over.
54
+ */
55
+ external?: {
56
+ /** Executable to run. Resolved by the OS (PATH) unless absolute. */
57
+ command: string;
58
+ args?: string[];
59
+ /** Working directory for the child. Defaults to the supervisor's own cwd. */
60
+ cwd?: string;
61
+ /** Extra env merged UNDER the scrub: it is applied first and the scrub runs
62
+ * after it, so a manifest cannot revive a key we deliberately strip. Same
63
+ * order (and same reason) as the pm2 path it replaces — a service needing
64
+ * its own data root must resolve it internally, not via CLAUDE_CONFIG_DIR /
65
+ * CODEX_HOME. Anything outside the scrubbed families passes through. */
66
+ env?: Record<string, string>;
67
+ /** Hash of the definition this member is being started from; persisted into
68
+ * fleet-state so a later reconcile can detect "running from a stale config"
69
+ * and restart it. See FleetProcState.configHash. */
70
+ configHash?: string;
71
+ };
33
72
  }
34
73
  export interface FleetSupervisorOptions {
35
74
  statePath: string;
@@ -1 +1 @@
1
- {"version":3,"file":"fleet-supervisor.d.ts","sourceRoot":"","sources":["../../src/core/fleet-supervisor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAML,KAAK,aAAa,EAEnB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,WAAW,YAAY;IAC3B,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd;iEAC6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB;;;iDAG6C;IAC7C,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;gBAGY;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iFAAiF;IACjF,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;;4DAGwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,iFAAiF;AACjF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAG7C;AAED,qBAAa,eAAe;IAiBd,OAAO,CAAC,QAAQ,CAAC,IAAI;IAhBjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,gFAAgF;IAChF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAC5D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoD;IAClF;;mFAE+E;IAC/E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD;uFACmF;IACnF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmC;IAC9D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAwB;gBAEf,IAAI,EAAE,sBAAsB;IAMzD;;iEAE6D;IAC7D,KAAK,CAAC,IAAI,EAAE,SAAS,YAAY,EAAE,GAAG,IAAI;IAiE1C;;;oFAGgF;IAChF,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAuBrC;;;kFAG8E;IACxE,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB7C;;+DAE2D;IACrD,aAAa,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrE,OAAO,CAAC,QAAQ;IAmFhB,OAAO,CAAC,WAAW;IAgDnB,OAAO,CAAC,WAAW;IASnB;;;;qFAIiF;IAC3E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB9B,OAAO,CAAC,OAAO;CAUhB"}
1
+ {"version":3,"file":"fleet-supervisor.d.ts","sourceRoot":"","sources":["../../src/core/fleet-supervisor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEtE,OAAO,EAML,KAAK,aAAa,EAEnB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,WAAW,YAAY;IAC3B,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd;iEAC6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB;;;iDAG6C;IAC7C,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;gBAGY;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,QAAQ,CAAC,EAAE;QACT,oEAAoE;QACpE,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,6EAA6E;QAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;QACb;;;;iFAIyE;QACzE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B;;6DAEqD;QACrD,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iFAAiF;IACjF,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;;4DAGwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,iFAAiF;AACjF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAG7C;AAED,qBAAa,eAAe;IAiBd,OAAO,CAAC,QAAQ,CAAC,IAAI;IAhBjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,gFAAgF;IAChF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAC5D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoD;IAClF;;mFAE+E;IAC/E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD;uFACmF;IACnF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmC;IAC9D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAwB;gBAEf,IAAI,EAAE,sBAAsB;IAMzD;;iEAE6D;IAC7D,KAAK,CAAC,IAAI,EAAE,SAAS,YAAY,EAAE,GAAG,IAAI;IAiE1C;;;oFAGgF;IAChF,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAuBrC;;;kFAG8E;IACxE,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB7C;;+DAE2D;IACrD,aAAa,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBrE,OAAO,CAAC,QAAQ;IAqHhB,OAAO,CAAC,WAAW;IAqDnB,OAAO,CAAC,WAAW;IASnB;;;;qFAIiF;IAC3E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB9B,OAAO,CAAC,OAAO;CAUhB"}
@@ -14,6 +14,7 @@ import { spawn } from 'node:child_process';
14
14
  import { openSync, closeSync, mkdirSync } from 'node:fs';
15
15
  import { join } from 'node:path';
16
16
  import { resolveEntrySpawn } from './self-spawn.js';
17
+ import { scrubExternalMemberEnv } from '../utils/child-env.js';
17
18
  import { decideOnExit, freshProc, planStart, DEFAULT_RESTART_POLICY, } from './fleet-supervisor-policy.js';
18
19
  import { mutateFleetState, readFleetState } from './fleet-state-store.js';
19
20
  /** True if a pid is alive (kill -0). pid<=1 is never a real supervised child. */
@@ -188,7 +189,15 @@ export class FleetSupervisor {
188
189
  * is required) and applied via startOneBot/stopOneBot. */
189
190
  async drainCommands(commands) {
190
191
  for (const cmd of commands) {
191
- const spec = { name: cmd.name, appId: cmd.appId, botIndex: cmd.botIndex };
192
+ // PREFER THE KNOWN SPEC over the command payload. The queue carries only
193
+ // (name, appId, botIndex) — enough to respawn a bot daemon, but it cannot
194
+ // describe an EXTERNAL member, whose command/args/cwd/env live in the spec.
195
+ // Rebuilding from the payload alone would spawn a plugin service as if it
196
+ // were a bot daemon (resolveEntrySpawn + no scrub). start() records every
197
+ // member in knownSpecs, so use that and fall back to the payload only for
198
+ // a name we have never seen.
199
+ const known = this.knownSpecs.get(cmd.name);
200
+ const spec = known ?? { name: cmd.name, appId: cmd.appId, botIndex: cmd.botIndex };
192
201
  if (cmd.op === 'start-bot') {
193
202
  this.startOneBot(spec);
194
203
  }
@@ -201,12 +210,21 @@ export class FleetSupervisor {
201
210
  if (this.stopping)
202
211
  return;
203
212
  const entry = spec.entry ?? 'daemon';
204
- const { command, args } = resolveEntrySpawn(entry, this.opts.distDir);
213
+ // An external member (a plugin service) runs an arbitrary command instead of
214
+ // one of our entry modules. Everything BELOW this point — logs, state,
215
+ // restart budget, graceful stop — is shared verbatim; only the command and
216
+ // the env differ, which is the whole reason this is a spec variant rather
217
+ // than a second spawn path.
218
+ const { command, args } = spec.external
219
+ ? { command: spec.external.command, args: spec.external.args ?? [] }
220
+ : resolveEntrySpawn(entry, this.opts.distDir);
205
221
  // node_args (heap/diag) apply only to the Node path; a compiled binary has
206
222
  // no separate interpreter args. resolveEntrySpawn already picks the shape;
207
223
  // we prepend node_args only when the command is a node/JS invocation.
224
+ // An external command is neither: its argv is the plugin's own, so our
225
+ // interpreter flags would be nonsense (or worse, consumed as its args).
208
226
  const isStandalone = args.length > 0 && args[0].startsWith('__');
209
- const nodeArgs = isStandalone ? [] : (this.opts.daemonNodeArgs ?? []);
227
+ const nodeArgs = (spec.external || isStandalone) ? [] : (this.opts.daemonNodeArgs ?? []);
210
228
  // Per-member log files (mirrors pm2 out_file/error_file → `botmux logs`).
211
229
  // Bot daemons write daemon-<index>-{out,err}.log; the dashboard writes
212
230
  // dashboard-{out,err}.log (spec.logBaseName). Opened in append mode so a
@@ -247,11 +265,33 @@ export class FleetSupervisor {
247
265
  // ~/.botmux/.env H5 family in index-dashboard.ts). Injecting a bot index
248
266
  // into the dashboard would be meaningless and misleading, so gate it on the
249
267
  // 'daemon' entry.
250
- const childEnv = entry === 'daemon'
251
- ? { ...this.opts.daemonEnv, BOTMUX_BOT_INDEX: String(spec.botIndex) }
252
- : { ...this.opts.daemonEnv };
268
+ //
269
+ // An EXTERNAL member takes neither: it is not a bot (no index) and it is not
270
+ // our code, so it gets the base env with the session-scoped families removed.
271
+ // See scrubExternalMemberEnv for why our own members do not need this (they
272
+ // scrub in their own boot) and why an external command does.
273
+ //
274
+ // ORDER IS LOAD-BEARING: the spec's own `env` is merged BEFORE the scrub, so
275
+ // the scrub has the last word and a plugin manifest cannot revive a key we
276
+ // deliberately strip. This is the order the pm2 path used and stated outright
277
+ // ("applies it AFTER the manifest env merge, so a plugin manifest cannot
278
+ // revive a scrubbed key" — plugins/pm2.ts), with a test pinning it. Merging
279
+ // after the scrub would silently undo it for exactly the keys that matter
280
+ // (a sibling's CLI home, the dashboard app secret, the graceful sentinel).
281
+ // A service needing its own data root must resolve it internally.
282
+ let childEnv;
283
+ if (spec.external) {
284
+ childEnv = { ...this.opts.daemonEnv, ...(spec.external.env ?? {}) };
285
+ scrubExternalMemberEnv(childEnv);
286
+ }
287
+ else if (entry === 'daemon') {
288
+ childEnv = { ...this.opts.daemonEnv, BOTMUX_BOT_INDEX: String(spec.botIndex) };
289
+ }
290
+ else {
291
+ childEnv = { ...this.opts.daemonEnv };
292
+ }
253
293
  const child = spawn(command, [...nodeArgs, ...args], {
254
- cwd: this.opts.cwd,
294
+ cwd: spec.external?.cwd ?? this.opts.cwd,
255
295
  stdio,
256
296
  env: childEnv,
257
297
  windowsHide: true,
@@ -287,9 +327,16 @@ export class FleetSupervisor {
287
327
  // count and be parked one crash later instead of getting a full budget.
288
328
  if (!isRestart)
289
329
  existing.restarts = 0;
330
+ // Record which config this generation was actually started from, so the
331
+ // caller can later tell "running, but from a stale definition" apart from
332
+ // "running and current". Only external members have one.
333
+ if (spec.external?.configHash !== undefined)
334
+ existing.configHash = spec.external.configHash;
335
+ else
336
+ delete existing.configHash;
290
337
  }
291
338
  else {
292
- cur.procs.push({ ...freshProc(spec.name, spec.appId, child.pid ?? 0, now) });
339
+ cur.procs.push({ ...freshProc(spec.name, spec.appId, child.pid ?? 0, now, spec.external?.configHash) });
293
340
  }
294
341
  return cur;
295
342
  }).procs.find((p) => p.name === spec.name).generation;
@@ -320,7 +367,12 @@ export class FleetSupervisor {
320
367
  return;
321
368
  }
322
369
  const current = readFleetState(this.opts.statePath)?.procs.find((p) => p.name === spec.name);
323
- const decision = decideOnExit({ restarts: current?.restarts ?? 0 }, exit, this.policy);
370
+ // An external member does not get the 90-is-graceful sentinel: it is not our
371
+ // code and may use 90 as an ordinary failure code, in which case honouring it
372
+ // would silently retire the service instead of restarting it (see
373
+ // isGracefulExit). Operator stops are already handled above via explicitStop,
374
+ // which does not depend on the exit code at all.
375
+ const decision = decideOnExit({ restarts: current?.restarts ?? 0 }, exit, this.policy, !spec.external);
324
376
  if (decision.action === 'stop') {
325
377
  this.log(`${spec.name} exited cleanly (graceful); not restarting`);
326
378
  this.markStopped(spec.name, exit, 'stopped');
@@ -1 +1 @@
1
- {"version":3,"file":"fleet-supervisor.js","sourceRoot":"","sources":["../../src/core/fleet-supervisor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fleet-supervisor.js","sourceRoot":"","sources":["../../src/core/fleet-supervisor.ts"],"names":[],"mappings":"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"}
@@ -95,6 +95,8 @@ export declare function beginReplyTargetTurn(ds: DaemonSession, replyRootId: str
95
95
  senderOpenId?: string;
96
96
  participants?: TurnParticipant[];
97
97
  participantsIncomplete?: boolean;
98
+ inThread?: boolean;
99
+ foldedRootId?: string;
98
100
  }): void;
99
101
  /** Resolve a turn's immutable inbound destination, falling back only for
100
102
  * legacy/non-Lark turns that predate the bounded registry. */
@@ -148,4 +150,29 @@ export declare function syncReplyTargetState(ds: DaemonSession, s?: Session): vo
148
150
  * persisted destination key is cleared as part of the same lifecycle boundary.
149
151
  */
150
152
  export declare function rehomeReplyTargetState(ds: DaemonSession): void;
153
+ /**
154
+ * True when `rootId` is a message this chat-scope session ALREADY answered as a
155
+ * flat turn **that arrived at the group's top level** — its frozen per-turn
156
+ * record is `{ target.mode: 'plain', inThread: false }`.
157
+ *
158
+ * Lives beside `beginReplyTargetTurn`, the sole writer of the record it reads:
159
+ * the two halves of this contract must not drift apart, and a predicate defined
160
+ * next to its producer can be unit-tested against real records instead of being
161
+ * re-implemented (and silently diverging) at the call site.
162
+ *
163
+ * Used by the regular-group fold to tell apart:
164
+ * • 顶层 @ 之后用户才在那条消息上「开启话题」 — Lark then delivers that topic's
165
+ * messages as root_id=<原顶层消息> + thread_id=<新建 omt_>. The turn still
166
+ * folds into the group chat-scope session, but the visible reply must NOT be
167
+ * anchored into a topic the user never @'d the bot in.
168
+ * • 用户真正开的原生话题 — must keep its existing topic anchoring.
169
+ *
170
+ * `mode === 'plain'` alone cannot separate the two: a native-topic seed is
171
+ * recorded `plain` as well (its opening message carries thread_id but no
172
+ * root_id, so neither the fold nor the shared-topic seeder supplies a
173
+ * replyRootId). `inThread` is the load-bearing half. A record written before
174
+ * `inThread` existed leaves it undefined — not `false` — so it reads as
175
+ * "unknown" and keeps the pre-existing behavior rather than guessing.
176
+ */
177
+ export declare function chatSessionAnsweredRootAtTopLevel(s: Pick<Session, 'scope' | 'turnReplyContexts'>, rootId: string): boolean;
151
178
  //# sourceMappingURL=reply-target.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reply-target.d.ts","sourceRoot":"","sources":["../../src/core/reply-target.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reply-target.d.ts","sourceRoot":"","sources":["../../src/core/reply-target.ts"],"names":[],"mappings":"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"}
@@ -239,6 +239,13 @@ export function beginReplyTargetTurn(ds, replyRootId, turnId, nowIso = new Date(
239
239
  ...(ds.session.quoteTargetSenderIsBot !== undefined
240
240
  ? { replyTargetSenderIsBot: ds.session.quoteTargetSenderIsBot }
241
241
  : {}),
242
+ // Chat-scope only: distinguishes "answered flat AT TOP LEVEL" from
243
+ // "answered flat but the inbound was already inside a topic" (a native
244
+ // topic seed). Thread-scope turns route off session.rootMessageId and
245
+ // never consult this, so recording it there would only be dead metadata.
246
+ ...(ds.scope === 'chat' && opts?.inThread !== undefined
247
+ ? { inThread: opts.inThread }
248
+ : {}),
242
249
  };
243
250
  const overflow = Object.keys(exactContexts).length - 256;
244
251
  if (overflow > 0) {
@@ -286,6 +293,23 @@ export function beginReplyTargetTurn(ds, replyRootId, turnId, nowIso = new Date(
286
293
  ds.session.currentReplyTarget = target;
287
294
  return;
288
295
  }
296
+ // The turn folded into this chat-scope session from a Lark thread whose root
297
+ // we deliberately did NOT anchor the visible reply to (an after-the-fact
298
+ // topic — see chatSessionAnsweredRootAtTopLevel). Routing and display are
299
+ // separate contracts: the reply stays flat, but this session must still be
300
+ // discoverable by that root, or a later NON-@ message inside that topic
301
+ // misses `findChatReplyAlias` and forks a brand-new thread-scope session
302
+ // instead of folding back here (reachable under the never/topic/ambient
303
+ // mention modes, which answer un-@'d messages).
304
+ if (opts?.foldedRootId) {
305
+ const aliases = { ...(ds.replyThreadAliases ?? ds.session.replyThreadAliases ?? {}) };
306
+ aliases[opts.foldedRootId] = {
307
+ createdAt: aliases[opts.foldedRootId]?.createdAt ?? nowIso,
308
+ lastUsedAt: nowIso,
309
+ };
310
+ ds.replyThreadAliases = aliases;
311
+ ds.session.replyThreadAliases = aliases;
312
+ }
289
313
  ds.currentReplyTarget = undefined;
290
314
  ds.session.currentReplyTarget = undefined;
291
315
  }
@@ -404,6 +428,10 @@ export function rehomeReplyTargetState(ds) {
404
428
  ...(context.replyTargetSenderIsBot !== undefined
405
429
  ? { replyTargetSenderIsBot: context.replyTargetSenderIsBot }
406
430
  : {}),
431
+ // `inThread` is deliberately NOT carried over: it describes the shape of
432
+ // the inbound message in the SOURCE chat, which says nothing about the
433
+ // new destination. Readers treat its absence as "unknown" and fall back
434
+ // to pre-existing behavior, which is the safe direction here.
407
435
  };
408
436
  }
409
437
  ds.session.turnReplyContexts = contexts;
@@ -430,4 +458,34 @@ export function rehomeReplyTargetState(ds) {
430
458
  ds.streamCardReplyTargetKey = undefined;
431
459
  ds.session.streamCardReplyTargetKey = undefined;
432
460
  }
461
+ /**
462
+ * True when `rootId` is a message this chat-scope session ALREADY answered as a
463
+ * flat turn **that arrived at the group's top level** — its frozen per-turn
464
+ * record is `{ target.mode: 'plain', inThread: false }`.
465
+ *
466
+ * Lives beside `beginReplyTargetTurn`, the sole writer of the record it reads:
467
+ * the two halves of this contract must not drift apart, and a predicate defined
468
+ * next to its producer can be unit-tested against real records instead of being
469
+ * re-implemented (and silently diverging) at the call site.
470
+ *
471
+ * Used by the regular-group fold to tell apart:
472
+ * • 顶层 @ 之后用户才在那条消息上「开启话题」 — Lark then delivers that topic's
473
+ * messages as root_id=<原顶层消息> + thread_id=<新建 omt_>. The turn still
474
+ * folds into the group chat-scope session, but the visible reply must NOT be
475
+ * anchored into a topic the user never @'d the bot in.
476
+ * • 用户真正开的原生话题 — must keep its existing topic anchoring.
477
+ *
478
+ * `mode === 'plain'` alone cannot separate the two: a native-topic seed is
479
+ * recorded `plain` as well (its opening message carries thread_id but no
480
+ * root_id, so neither the fold nor the shared-topic seeder supplies a
481
+ * replyRootId). `inThread` is the load-bearing half. A record written before
482
+ * `inThread` existed leaves it undefined — not `false` — so it reads as
483
+ * "unknown" and keeps the pre-existing behavior rather than guessing.
484
+ */
485
+ export function chatSessionAnsweredRootAtTopLevel(s, rootId) {
486
+ if (s.scope !== 'chat')
487
+ return false;
488
+ const context = s.turnReplyContexts?.[rootId];
489
+ return context?.target?.mode === 'plain' && context.inThread === false;
490
+ }
433
491
  //# sourceMappingURL=reply-target.js.map