botmux 3.18.2 → 3.18.4

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 (97) hide show
  1. package/dist/.runtime-build-id +1 -1
  2. package/dist/adapters/hook-installer.d.ts.map +1 -1
  3. package/dist/adapters/hook-installer.js +75 -2
  4. package/dist/adapters/hook-installer.js.map +1 -1
  5. package/dist/cli/current-actor.d.ts.map +1 -1
  6. package/dist/cli/current-actor.js +2 -1
  7. package/dist/cli/current-actor.js.map +1 -1
  8. package/dist/cli/dashboard-endpoint.d.ts.map +1 -1
  9. package/dist/cli/dashboard-endpoint.js +5 -2
  10. package/dist/cli/dashboard-endpoint.js.map +1 -1
  11. package/dist/cli/exact-chat-grant-client.d.ts.map +1 -1
  12. package/dist/cli/exact-chat-grant-client.js +2 -1
  13. package/dist/cli/exact-chat-grant-client.js.map +1 -1
  14. package/dist/cli/vc-agent.d.ts.map +1 -1
  15. package/dist/cli/vc-agent.js +2 -1
  16. package/dist/cli/vc-agent.js.map +1 -1
  17. package/dist/cli.d.ts.map +1 -1
  18. package/dist/cli.js +35 -9
  19. package/dist/cli.js.map +1 -1
  20. package/dist/core/daemon-ipc-auth.d.ts +9 -1
  21. package/dist/core/daemon-ipc-auth.d.ts.map +1 -1
  22. package/dist/core/daemon-ipc-auth.js +14 -3
  23. package/dist/core/daemon-ipc-auth.js.map +1 -1
  24. package/dist/core/fleet-state-store.d.ts.map +1 -1
  25. package/dist/core/fleet-state-store.js +6 -0
  26. package/dist/core/fleet-state-store.js.map +1 -1
  27. package/dist/core/fleet-supervisor-policy.d.ts +38 -6
  28. package/dist/core/fleet-supervisor-policy.d.ts.map +1 -1
  29. package/dist/core/fleet-supervisor-policy.js +32 -9
  30. package/dist/core/fleet-supervisor-policy.js.map +1 -1
  31. package/dist/core/fleet-supervisor.d.ts +39 -0
  32. package/dist/core/fleet-supervisor.d.ts.map +1 -1
  33. package/dist/core/fleet-supervisor.js +61 -9
  34. package/dist/core/fleet-supervisor.js.map +1 -1
  35. package/dist/core/loopback-fetch.d.ts +59 -0
  36. package/dist/core/loopback-fetch.d.ts.map +1 -0
  37. package/dist/core/loopback-fetch.js +347 -0
  38. package/dist/core/loopback-fetch.js.map +1 -0
  39. package/dist/core/managed-origin-attestation.d.ts.map +1 -1
  40. package/dist/core/managed-origin-attestation.js +2 -1
  41. package/dist/core/managed-origin-attestation.js.map +1 -1
  42. package/dist/core/reply-target.d.ts +27 -0
  43. package/dist/core/reply-target.d.ts.map +1 -1
  44. package/dist/core/reply-target.js +58 -0
  45. package/dist/core/reply-target.js.map +1 -1
  46. package/dist/daemon.d.ts +3 -0
  47. package/dist/daemon.d.ts.map +1 -1
  48. package/dist/daemon.js +21 -6
  49. package/dist/daemon.js.map +1 -1
  50. package/dist/dashboard/aggregator.d.ts.map +1 -1
  51. package/dist/dashboard/aggregator.js +2 -1
  52. package/dist/dashboard/aggregator.js.map +1 -1
  53. package/dist/dashboard/daemon-internal-client.d.ts.map +1 -1
  54. package/dist/dashboard/daemon-internal-client.js +6 -1
  55. package/dist/dashboard/daemon-internal-client.js.map +1 -1
  56. package/dist/dashboard/groups-action-helpers.d.ts +0 -10
  57. package/dist/dashboard/groups-action-helpers.d.ts.map +1 -1
  58. package/dist/dashboard/groups-action-helpers.js +3 -2
  59. package/dist/dashboard/groups-action-helpers.js.map +1 -1
  60. package/dist/dashboard.js +2 -1
  61. package/dist/dashboard.js.map +1 -1
  62. package/dist/im/lark/event-dispatcher.d.ts +13 -0
  63. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  64. package/dist/im/lark/event-dispatcher.js +22 -1
  65. package/dist/im/lark/event-dispatcher.js.map +1 -1
  66. package/dist/platform/tunnel-client.d.ts +27 -0
  67. package/dist/platform/tunnel-client.d.ts.map +1 -1
  68. package/dist/platform/tunnel-client.js +205 -22
  69. package/dist/platform/tunnel-client.js.map +1 -1
  70. package/dist/services/hook-runner.d.ts.map +1 -1
  71. package/dist/services/hook-runner.js +2 -1
  72. package/dist/services/hook-runner.js.map +1 -1
  73. package/dist/services/send-policy.d.ts +38 -0
  74. package/dist/services/send-policy.d.ts.map +1 -1
  75. package/dist/services/send-policy.js +33 -0
  76. package/dist/services/send-policy.js.map +1 -1
  77. package/dist/services/voice/openai.d.ts.map +1 -1
  78. package/dist/services/voice/openai.js +10 -1
  79. package/dist/services/voice/openai.js.map +1 -1
  80. package/dist/services/worktree-slug-ai.d.ts.map +1 -1
  81. package/dist/services/worktree-slug-ai.js +8 -1
  82. package/dist/services/worktree-slug-ai.js.map +1 -1
  83. package/dist/types.d.ts +16 -0
  84. package/dist/types.d.ts.map +1 -1
  85. package/dist/utils/child-env.d.ts +41 -0
  86. package/dist/utils/child-env.d.ts.map +1 -1
  87. package/dist/utils/child-env.js +53 -0
  88. package/dist/utils/child-env.js.map +1 -1
  89. package/dist/workflows/v3/daemon-ipc-client.d.ts.map +1 -1
  90. package/dist/workflows/v3/daemon-ipc-client.js +2 -1
  91. package/dist/workflows/v3/daemon-ipc-client.js.map +1 -1
  92. package/dist/workflows/v3/session-relay-client.d.ts.map +1 -1
  93. package/dist/workflows/v3/session-relay-client.js +2 -1
  94. package/dist/workflows/v3/session-relay-client.js.map +1 -1
  95. package/package.json +8 -7
  96. package/scripts/install-path-entry.mjs +263 -0
  97. package/scripts/postinstall-bin.mjs +41 -7
@@ -15,6 +15,14 @@ export declare function daemonIpcAuthHeaders(input: {
15
15
  /** Read the host-only daemon IPC secret. Sandboxed callers fail closed because
16
16
  * ~/.botmux is masked by the bwrap plan. */
17
17
  export declare function loadDaemonIpcSecret(secretPath?: string): string;
18
- /** Trusted-host fetch wrapper for daemon IPC. */
18
+ /** Trusted-host fetch wrapper for daemon IPC.
19
+ *
20
+ * ⚠️ Uses {@link loopbackFetch}, never the global `fetch`: under Bun the global
21
+ * one routes 127.0.0.1 through `$http_proxy` whenever `no_proxy` does not name
22
+ * that literal address (CIDR and `localhost` do not count), and the corporate
23
+ * proxy answers an nginx HTML 403. Verified against this wrapper with a real Bun
24
+ * process and a stand-in proxy: global fetch → 403 from the proxy;
25
+ * `loopbackFetch` → straight to the daemon. See src/core/loopback-fetch.ts.
26
+ */
19
27
  export declare function fetchDaemonIpc(port: number, path: string, init?: RequestInit, secret?: string): Promise<Response>;
20
28
  //# sourceMappingURL=daemon-ipc-auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"daemon-ipc-auth.d.ts","sourceRoot":"","sources":["../../src/core/daemon-ipc-auth.ts"],"names":[],"mappings":"AAUA;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB,GAAG,OAAO,CAWV;AAED;4CAC4C;AAC5C,wBAAgB,mBAAmB,CAAC,UAAU,SAAsB,GAAG,MAAM,CAI5E;AAED,iDAAiD;AACjD,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,WAAgB,EACtB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,QAAQ,CAAC,CAanB"}
1
+ {"version":3,"file":"daemon-ipc-auth.d.ts","sourceRoot":"","sources":["../../src/core/daemon-ipc-auth.ts"],"names":[],"mappings":"AAWA;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB,GAAG,OAAO,CAWV;AAED;4CAC4C;AAC5C,wBAAgB,mBAAmB,CAAC,UAAU,SAAsB,GAAG,MAAM,CAI5E;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,WAAgB,EACtB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,QAAQ,CAAC,CAenB"}
@@ -1,6 +1,7 @@
1
1
  import { homedir } from 'node:os';
2
2
  import { join } from 'node:path';
3
3
  import { cliAuthBind, loadDashboardSecret, signCliAuth, } from '../dashboard/auth.js';
4
+ import { loopbackFetch } from './loopback-fetch.js';
4
5
  const DEFAULT_SECRET_PATH = join(homedir(), '.botmux', '.dashboard-secret');
5
6
  /**
6
7
  * Build a route- and port-bound authorization header for the daemon's
@@ -26,12 +27,22 @@ export function loadDaemonIpcSecret(secretPath = DEFAULT_SECRET_PATH) {
26
27
  throw new Error(`daemon IPC secret is missing or empty: ${secretPath}`);
27
28
  return secret;
28
29
  }
29
- /** Trusted-host fetch wrapper for daemon IPC. */
30
+ /** Trusted-host fetch wrapper for daemon IPC.
31
+ *
32
+ * ⚠️ Uses {@link loopbackFetch}, never the global `fetch`: under Bun the global
33
+ * one routes 127.0.0.1 through `$http_proxy` whenever `no_proxy` does not name
34
+ * that literal address (CIDR and `localhost` do not count), and the corporate
35
+ * proxy answers an nginx HTML 403. Verified against this wrapper with a real Bun
36
+ * process and a stand-in proxy: global fetch → 403 from the proxy;
37
+ * `loopbackFetch` → straight to the daemon. See src/core/loopback-fetch.ts.
38
+ */
30
39
  export async function fetchDaemonIpc(port, path, init = {}, secret) {
31
40
  const resolvedSecret = secret ?? loadDaemonIpcSecret();
32
41
  const method = init.method ?? 'GET';
33
- return fetch(`http://127.0.0.1:${port}${path}`, {
34
- ...init,
42
+ return loopbackFetch(`http://127.0.0.1:${port}${path}`, {
43
+ method,
44
+ body: init.body,
45
+ signal: init.signal ?? undefined,
35
46
  headers: daemonIpcAuthHeaders({
36
47
  secret: resolvedSecret,
37
48
  port,
@@ -1 +1 @@
1
- {"version":3,"file":"daemon-ipc-auth.js","sourceRoot":"","sources":["../../src/core/daemon-ipc-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAE9B,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;AAE5E;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAMpC;IACC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,oBAAoB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC;IAChF,MAAM,IAAI,GAAG,WAAW,CACtB,KAAK,CAAC,MAAM,EACZ,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAChD,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;4CAC4C;AAC5C,MAAM,UAAU,mBAAmB,CAAC,UAAU,GAAG,mBAAmB;IAClE,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,UAAU,EAAE,CAAC,CAAC;IACrF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,iDAAiD;AACjD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAY,EACZ,IAAY,EACZ,OAAoB,EAAE,EACtB,MAAe;IAEf,MAAM,cAAc,GAAG,MAAM,IAAI,mBAAmB,EAAE,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;IACpC,OAAO,KAAK,CAAC,oBAAoB,IAAI,GAAG,IAAI,EAAE,EAAE;QAC9C,GAAG,IAAI;QACP,OAAO,EAAE,oBAAoB,CAAC;YAC5B,MAAM,EAAE,cAAc;YACtB,IAAI;YACJ,MAAM;YACN,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;KACH,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"daemon-ipc-auth.js","sourceRoot":"","sources":["../../src/core/daemon-ipc-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAA0B,MAAM,qBAAqB,CAAC;AAE5E,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;AAE5E;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAMpC;IACC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,oBAAoB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC;IAChF,MAAM,IAAI,GAAG,WAAW,CACtB,KAAK,CAAC,MAAM,EACZ,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAChD,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;4CAC4C;AAC5C,MAAM,UAAU,mBAAmB,CAAC,UAAU,GAAG,mBAAmB;IAClE,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,UAAU,EAAE,CAAC,CAAC;IACrF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAY,EACZ,IAAY,EACZ,OAAoB,EAAE,EACtB,MAAe;IAEf,MAAM,cAAc,GAAG,MAAM,IAAI,mBAAmB,EAAE,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;IACpC,OAAO,aAAa,CAAC,oBAAoB,IAAI,GAAG,IAAI,EAAE,EAAE;QACtD,MAAM;QACN,IAAI,EAAE,IAAI,CAAC,IAAiC;QAC5C,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS;QAChC,OAAO,EAAE,oBAAoB,CAAC;YAC5B,MAAM,EAAE,cAAc;YACtB,IAAI;YACJ,MAAM;YACN,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;KACH,CAAC,CAAC;AACL,CAAC"}
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;8EAC8E;AAC9E,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAkD3C,MAAM,CAAC,MAAM,sBAAsB,GAAkB,EAAE,WAAW,EAAE,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC;AAQ9F;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,cAAc,CAAC,IAAe,EAAE,eAAe,GAAG,IAAI;IACpE,OAAO,eAAe,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,wBAAwB,CAAC;AAC3F,CAAC;AAOD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAsC,EACtC,IAAe,EACf,SAAwB,sBAAsB,EAC9C,eAAe,GAAG,IAAI;IAEtB,IAAI,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACzF,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvC,IAAI,YAAY,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACtC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC/E,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AAC7C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAgC;IACvE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC9D,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/E,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,GAAG,WAAW,KAAK,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACtF,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CACvB,eAAkC,EAClC,OAAkC,EAClC,UAA6C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;IAEtF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,KAAa,EAAE,GAAW,EAAE,GAAW,EAAE,UAAmB;IAClG,MAAM,IAAI,GAAmB,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACpI,6EAA6E;IAC7E,wDAAwD;IACxD,IAAI,UAAU,KAAK,SAAS;QAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC3D,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -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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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * `fetch`-shaped client for **loopback-only** HTTP, built on `node:http`.
3
+ *
4
+ * ⚠️ WHY THIS EXISTS — DO NOT "SIMPLIFY" ANY CALLER BACK TO THE GLOBAL `fetch`.
5
+ *
6
+ * Bun's `fetch` automatically routes through `$http_proxy`, and its `no_proxy`
7
+ * handling is **literal-match only**: it does not parse CIDR notation and does
8
+ * not treat `localhost` as covering `127.0.0.1`. Corporate dev machines commonly
9
+ * export exactly that shape (`http_proxy=…` plus `no_proxy=…,127.0.0.0/8,…`), so
10
+ * a request to our OWN loopback port gets handed to the corporate proxy, which
11
+ * refuses to forward an internal address and answers with an nginx HTML
12
+ * `403 Forbidden`. The user sees a failure naming a service that is running
13
+ * perfectly well two ports away.
14
+ *
15
+ * Measured on Bun 1.4.0 (source AND `bun build --compile`), one fresh process per
16
+ * row because Bun snapshots proxy configuration at startup:
17
+ *
18
+ * no_proxy unset / "" → proxied
19
+ * no_proxy=127.0.0.0/8 → proxied ← the common corporate shape
20
+ * no_proxy=localhost → proxied ← does NOT cover 127.0.0.1
21
+ * no_proxy=127.0.0.1 → direct
22
+ * no_proxy=* → direct
23
+ *
24
+ * And the obvious escapes do not work:
25
+ *
26
+ * fetch(…, {proxy: ''|undefined|null}) → still proxied (option exists ≠ works)
27
+ * delete process.env.http_proxy at run → still proxied (startup snapshot)
28
+ * setting process.env.http_proxy later → still direct (same reason)
29
+ *
30
+ * `node:http` ignores proxy environment variables entirely, in both Node and Bun,
31
+ * which is the only reliable way to guarantee a loopback dial stays loopback.
32
+ * Related precedent: `platform/platform-http.ts` (deliberately avoids undici) and
33
+ * `dashboard/hd2d-assets.ts` (the reverse case — it WANTS the proxy).
34
+ */
35
+ /** The subset of RequestInit our loopback callers use. */
36
+ export interface LoopbackFetchInit {
37
+ method?: string;
38
+ headers?: HeadersInit;
39
+ /** Accepts what `fetch` accepts; streams are the one thing we cannot forward. */
40
+ body?: BodyInit | null;
41
+ signal?: AbortSignal | null;
42
+ }
43
+ /** Install (or clear, with `undefined`) the test transport. Returns the previous one. */
44
+ export declare function __setLoopbackTransportForTests(next: ((url: string, init: LoopbackFetchInit) => Promise<Response>) | undefined): ((url: string, init: LoopbackFetchInit) => Promise<Response>) | undefined;
45
+ export declare function loopbackFetch(url: string, init?: LoopbackFetchInit): Promise<Response>;
46
+ /** `typeof fetch`-compatible view, for defaulting an injectable `fetchImpl`. */
47
+ export declare const loopbackFetchImpl: typeof fetch;
48
+ /**
49
+ * Is this URL a literal loopback target, i.e. safe (and necessary) to send through
50
+ * {@link loopbackFetch}? For call sites whose base URL is configurable and may
51
+ * legitimately point at a remote host — those must keep using the global fetch,
52
+ * which handles TLS, redirects and real proxying.
53
+ *
54
+ * Literal only, deliberately: a DNS name that currently resolves to 127.0.0.1
55
+ * is not a loopback guarantee (it can be re-pointed), and `loopbackFetch`'s own
56
+ * guard would reject it anyway.
57
+ */
58
+ export declare function isLoopbackUrl(url: string): boolean;
59
+ //# sourceMappingURL=loopback-fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loopback-fetch.d.ts","sourceRoot":"","sources":["../../src/core/loopback-fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAKH,0DAA0D;AAC1D,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,iFAAiF;IACjF,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B;AA4FD,yFAAyF;AACzF,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,GAC9E,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,CAI3E;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,QAAQ,CAAC,CAyJnB;AAED,gFAAgF;AAChF,eAAO,MAAM,iBAAiB,EAA+B,OAAO,KAAK,CAAC;AAE1E;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAWlD"}