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.
- package/dist/.runtime-build-id +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +28 -3
- package/dist/cli.js.map +1 -1
- package/dist/core/fleet-state-store.d.ts.map +1 -1
- package/dist/core/fleet-state-store.js +6 -0
- package/dist/core/fleet-state-store.js.map +1 -1
- package/dist/core/fleet-supervisor-policy.d.ts +38 -6
- package/dist/core/fleet-supervisor-policy.d.ts.map +1 -1
- package/dist/core/fleet-supervisor-policy.js +32 -9
- package/dist/core/fleet-supervisor-policy.js.map +1 -1
- package/dist/core/fleet-supervisor.d.ts +39 -0
- package/dist/core/fleet-supervisor.d.ts.map +1 -1
- package/dist/core/fleet-supervisor.js +61 -9
- package/dist/core/fleet-supervisor.js.map +1 -1
- package/dist/core/reply-target.d.ts +27 -0
- package/dist/core/reply-target.d.ts.map +1 -1
- package/dist/core/reply-target.js +58 -0
- package/dist/core/reply-target.js.map +1 -1
- package/dist/daemon.d.ts +3 -0
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +19 -5
- package/dist/daemon.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts +13 -0
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +22 -1
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/platform/tunnel-client.d.ts +27 -0
- package/dist/platform/tunnel-client.d.ts.map +1 -1
- package/dist/platform/tunnel-client.js +205 -22
- package/dist/platform/tunnel-client.js.map +1 -1
- package/dist/services/send-policy.d.ts +38 -0
- package/dist/services/send-policy.d.ts.map +1 -1
- package/dist/services/send-policy.js +33 -0
- package/dist/services/send-policy.js.map +1 -1
- package/dist/types.d.ts +16 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/child-env.d.ts +41 -0
- package/dist/utils/child-env.d.ts.map +1 -1
- package/dist/utils/child-env.js +53 -0
- package/dist/utils/child-env.js.map +1 -1
- 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;
|
|
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":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAwC,MAAM,8BAA8B,CAAC;AAE9G,gFAAgF;AAChF,SAAS,WAAW,CAAC,GAAY;IAC/B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,SAAS;QAC1C,MAAM,CAAC,GAAG,CAA4B,CAAC;QACvC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;YAAE,SAAS;QACxE,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,GAAG,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,GAAc,CAAC,CAAC,CAAC,CAAC;YACxD,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,UAAqB,CAAC,CAAC,CAAC,CAAC;YAC7E,MAAM,EAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,CAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAe,CAAC;gBAC1F,CAAC,CAAE,CAAC,CAAC,MAAmC,CAAC,CAAC,CAAC,SAAS;YACtD,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,QAAmB,CAAC,CAAC,CAAC,CAAC;YACvE,YAAY,EAAE,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;YACxE,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;
|
|
1
|
+
{"version":3,"file":"fleet-state-store.js","sourceRoot":"","sources":["../../src/core/fleet-state-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAwC,MAAM,8BAA8B,CAAC;AAE9G,gFAAgF;AAChF,SAAS,WAAW,CAAC,GAAY;IAC/B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,SAAS;QAC1C,MAAM,CAAC,GAAG,CAA4B,CAAC;QACvC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;YAAE,SAAS;QACxE,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,GAAG,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,GAAc,CAAC,CAAC,CAAC,CAAC;YACxD,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,UAAqB,CAAC,CAAC,CAAC,CAAC;YAC7E,MAAM,EAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,CAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAe,CAAC;gBAC1F,CAAC,CAAE,CAAC,CAAC,MAAmC,CAAC,CAAC,CAAC,SAAS;YACtD,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,QAAmB,CAAC,CAAC,CAAC,CAAC;YACvE,YAAY,EAAE,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;YACxE,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;YAC/D,wEAAwE;YACxE,uEAAuE;YACvE,kEAAkE;YAClE,yEAAyE;YACzE,8DAA8D;YAC9D,GAAG,CAAC,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1E,CAAC,CAAC;IACL,CAAC;IACD,OAAO;QACL,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,aAAwB,CAAC,CAAC,CAAC,CAAC;QACtF,mBAAmB,EAAE,OAAO,CAAC,CAAC,mBAAmB,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE;QAC3F,KAAK;KACN,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAiB,EACjB,OAA4C;IAE5C,OAAO,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE;QACtC,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,mBAAmB,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACtG,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,KAAiB;IAClE,OAAO,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -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
|
-
/**
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
|
|
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;
|
|
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
|
-
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;8EAC8E;AAC9E,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;
|
|
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;
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
251
|
-
|
|
252
|
-
|
|
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
|
-
|
|
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
|