@threadbase-sh/streamer 1.65.0 → 1.67.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"misc.routes.d.ts","sourceRoot":"","sources":["../../../src/api/routes/misc.routes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAa5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAiDjD;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,YAAY,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB,yFAAyF;IACzF,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,mBAAmB,EAAE,OAAO,EAC5B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,cAAc,CAahB;AAED,sFAAsF;AACtF,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAkBvC;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,OAAO,GAAG,cAAc,CAmB3E;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,GAAG,SAAS,CAe9D;AAYD,eAAO,MAAM,gBAAgB,SACrB,IAAI,CACR,OAAO,EACL,WAAW,GACX,cAAc,GACd,gBAAgB,GAChB,cAAc,GACd,aAAa,GACb,UAAU,GACV,yBAAyB,GACzB,oBAAoB,CACvB,wDA2NF,CAAC"}
1
+ {"version":3,"file":"misc.routes.d.ts","sourceRoot":"","sources":["../../../src/api/routes/misc.routes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAa5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAiDjD;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,YAAY,EAAE,OAAO,CAAC;IACtB;;;;;OAKG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB,yFAAyF;IACzF,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,mBAAmB,EAAE,OAAO,EAC5B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,cAAc,CAahB;AAED,sFAAsF;AACtF,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAkBvC;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,OAAO,GAAG,cAAc,CAmB3E;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,GAAG,SAAS,CAe9D;AAYD,eAAO,MAAM,gBAAgB,SACrB,IAAI,CACR,OAAO,EACL,WAAW,GACX,cAAc,GACd,gBAAgB,GAChB,cAAc,GACd,aAAa,GACb,UAAU,GACV,yBAAyB,GACzB,oBAAoB,CACvB,wDAgOF,CAAC"}
@@ -16,6 +16,7 @@ import type { RuntimeStore } from "../../db/runtime-store";
16
16
  import type { FeatureFlagDefinition, FeatureFlagId, FeatureFlagSource, ResolvedFeatureFlags } from "../../feature-flags";
17
17
  import type { LiveSessionManager } from "../../live-session-manager";
18
18
  import type { CacheIntegrityMonitor } from "../../services/cache-integrity/cacheIntegrityMonitor";
19
+ import type { HostPressureMonitor } from "../../services/host-pressure/hostPressure";
19
20
  import type { Principal } from "../../services/security/capabilities";
20
21
  import type { ReconcileVerdict } from "../../services/sessions/reconcileSessions";
21
22
  import type { SessionStore } from "../../session-store";
@@ -52,6 +53,7 @@ export type ApiDeps = {
52
53
  wsHub: WSHub;
53
54
  cache: () => ConversationCache | null;
54
55
  cacheMonitor: () => CacheIntegrityMonitor | null;
56
+ hostPressureMonitor: () => HostPressureMonitor | null;
55
57
  /** Push registration + delivery state (C7). Null when the cache DB is unavailable. */
56
58
  pushRepo: () => PushRepository | null;
57
59
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"api-deps.d.ts","sourceRoot":"","sources":["../../../src/api/types/api-deps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-deps.d.ts","sourceRoot":"","sources":["../../../src/api/types/api-deps.ts"],"names":[],"mappings":"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"}
package/dist/cli.cjs CHANGED
@@ -132336,7 +132336,7 @@ var import_events2 = require("events");
132336
132336
  var import_fs39 = require("fs");
132337
132337
  var import_promises16 = require("fs/promises");
132338
132338
  var import_http = require("http");
132339
- var import_os17 = require("os");
132339
+ var import_os18 = require("os");
132340
132340
  var import_path35 = require("path");
132341
132341
 
132342
132342
  // src/agent/agent-client.ts
@@ -135120,7 +135120,7 @@ function redactPath(path2) {
135120
135120
  function worstStatus(checks) {
135121
135121
  const rank = { ok: 0, unknown: 1, degraded: 2, failed: 3 };
135122
135122
  return checks.reduce(
135123
- (worst, c) => rank[c.status] > rank[worst] ? c.status : worst,
135123
+ (worst2, c) => rank[c.status] > rank[worst2] ? c.status : worst2,
135124
135124
  "ok"
135125
135125
  );
135126
135126
  }
@@ -136034,7 +136034,12 @@ var createMiscRoutes = (deps) => {
136034
136034
  // Whether to encrypt to this server. Additive, same contract as `push`:
136035
136035
  // absent means an older server, which a client must read as "unknown" and
136036
136036
  // resolve as today's plaintext path — never as a reason to fail.
136037
- e2ee: describeE2eeCapability(deps.featureFlagsConfig().values.e2ee)
136037
+ e2ee: describeE2eeCapability(deps.featureFlagsConfig().values.e2ee),
136038
+ // This build samples cheap host signals and pushes `host_pressure` when
136039
+ // the box is starved. Additive capability flag only — live readings stay
136040
+ // off this polled endpoint. Absent means an older server that never
136041
+ // samples. Informational: pressure never holds, kills, or refuses sessions.
136042
+ hostPressure: true
136038
136043
  });
136039
136044
  });
136040
136045
  app.get("/api/profiles", (c) => c.json([]));
@@ -151155,6 +151160,7 @@ function createApiDeps(deps) {
151155
151160
  wsHub: deps.wsHub,
151156
151161
  cache: () => deps.cache(),
151157
151162
  cacheMonitor: () => deps.cacheMonitor(),
151163
+ hostPressureMonitor: () => deps.hostPressureMonitor(),
151158
151164
  pushRepo: () => deps.pushRepo(),
151159
151165
  liveActivityPushEnabled: () => deps.liveActivityPushEnabled(),
151160
151166
  devicesRepo: () => deps.devicesRepo(),
@@ -151205,6 +151211,8 @@ function createApiDeps(deps) {
151205
151211
  }
151206
151212
  const alertMsg = deps.cacheMonitor()?.wsMessage();
151207
151213
  if (alertMsg) deps.wsHub.unicast(ws2, alertMsg);
151214
+ const pressureMsg = deps.hostPressureMonitor()?.wsMessage();
151215
+ if (pressureMsg) deps.wsHub.unicast(ws2, pressureMsg);
151208
151216
  },
151209
151217
  handleWsMessage: async (ws2, raw2, principal) => {
151210
151218
  const deny = (type, required2) => {
@@ -151275,6 +151283,13 @@ function createApiDeps(deps) {
151275
151283
  );
151276
151284
  }
151277
151285
  }
151286
+ if (msg.type === "unsubscribe_session" && typeof msg.sessionId === "string") {
151287
+ if (!wsAllows(principal, "history:read")) {
151288
+ deny(msg.type, "history:read");
151289
+ return;
151290
+ }
151291
+ deps.removeSessionSubscriber(msg.sessionId, ws2);
151292
+ }
151278
151293
  if (msg.type === "hold_session" && typeof msg.sessionId === "string") {
151279
151294
  if (!wsAllows(principal, "session:control")) {
151280
151295
  deny(msg.type, "session:control");
@@ -151829,6 +151844,221 @@ function pruneAgentConversations(cache) {
151829
151844
  return { scanned: rows.length, pruned, missing };
151830
151845
  }
151831
151846
 
151847
+ // src/services/host-pressure/hostPressure.ts
151848
+ var import_os16 = require("os");
151849
+ var import_perf_hooks = require("perf_hooks");
151850
+ var HOST_PRESSURE_SAMPLE_MS = 5e3;
151851
+ var HOST_PRESSURE_BARS = {
151852
+ memFreeRatio: {
151853
+ enterElevated: 0.15,
151854
+ leaveElevated: 0.17,
151855
+ enterCritical: 0.08,
151856
+ leaveCritical: 0.15
151857
+ },
151858
+ eventLoopP99Ms: {
151859
+ enterElevated: 100,
151860
+ leaveElevated: 80,
151861
+ enterCritical: 250,
151862
+ leaveCritical: 100
151863
+ },
151864
+ loadPerCpu: {
151865
+ enterElevated: 1.25,
151866
+ leaveElevated: 1.05,
151867
+ enterCritical: 2,
151868
+ leaveCritical: 1.25
151869
+ },
151870
+ // win32 has no loadavg. Busy ratio from os.cpus()[].times deltas is 0–1, so
151871
+ // it cannot reuse loadPerCpu's 2.0 critical bar. Reason on the wire stays `load`.
151872
+ cpuBusy: {
151873
+ enterElevated: 0.85,
151874
+ leaveElevated: 0.7,
151875
+ enterCritical: 0.97,
151876
+ leaveCritical: 0.85
151877
+ },
151878
+ liveAgentsPair: 4
151879
+ };
151880
+ var REASON_ORDER = ["memory", "event_loop", "load", "agents"];
151881
+ var RANK = { ok: 0, elevated: 1, critical: 2 };
151882
+ function worst(levels) {
151883
+ return levels.reduce(
151884
+ (acc, level) => RANK[level] > RANK[acc] ? level : acc,
151885
+ "ok"
151886
+ );
151887
+ }
151888
+ function schmittLowIsWorse(value, previous, enterElevated, leaveElevated, enterCritical, leaveCritical) {
151889
+ if (previous === "critical") {
151890
+ if (value < leaveCritical) return "critical";
151891
+ if (value < leaveElevated) return "elevated";
151892
+ return "ok";
151893
+ }
151894
+ if (previous === "elevated") {
151895
+ if (value < enterCritical) return "critical";
151896
+ if (value < leaveElevated) return "elevated";
151897
+ return "ok";
151898
+ }
151899
+ if (value < enterCritical) return "critical";
151900
+ if (value < enterElevated) return "elevated";
151901
+ return "ok";
151902
+ }
151903
+ function schmittHighIsWorse(value, previous, enterElevated, leaveElevated, enterCritical, leaveCritical) {
151904
+ if (previous === "critical") {
151905
+ if (value > leaveCritical) return "critical";
151906
+ if (value > leaveElevated) return "elevated";
151907
+ return "ok";
151908
+ }
151909
+ if (previous === "elevated") {
151910
+ if (value > enterCritical) return "critical";
151911
+ if (value > leaveElevated) return "elevated";
151912
+ return "ok";
151913
+ }
151914
+ if (value > enterCritical) return "critical";
151915
+ if (value > enterElevated) return "elevated";
151916
+ return "ok";
151917
+ }
151918
+ function timesTotal(times) {
151919
+ return times.user + times.nice + times.sys + times.idle + times.irq;
151920
+ }
151921
+ function hostPressureOs(platform3) {
151922
+ if (platform3 === "darwin" || platform3 === "linux" || platform3 === "win32") return platform3;
151923
+ return void 0;
151924
+ }
151925
+ function cpuBusyRatio(previous, next) {
151926
+ if (!previous || previous.length === 0 || next.length === 0 || previous.length !== next.length) {
151927
+ return 0;
151928
+ }
151929
+ let idle = 0;
151930
+ let total = 0;
151931
+ for (let i = 0; i < next.length; i++) {
151932
+ const dt2 = timesTotal(next[i]) - timesTotal(previous[i]);
151933
+ if (dt2 <= 0) continue;
151934
+ total += dt2;
151935
+ idle += Math.max(0, next[i].idle - previous[i].idle);
151936
+ }
151937
+ if (total <= 0) return 0;
151938
+ return 1 - idle / total;
151939
+ }
151940
+ function classifyHostPressure(sample, previous, platform3) {
151941
+ const memRaw = schmittLowIsWorse(
151942
+ sample.memFreeRatio,
151943
+ previous,
151944
+ HOST_PRESSURE_BARS.memFreeRatio.enterElevated,
151945
+ HOST_PRESSURE_BARS.memFreeRatio.leaveElevated,
151946
+ HOST_PRESSURE_BARS.memFreeRatio.enterCritical,
151947
+ HOST_PRESSURE_BARS.memFreeRatio.leaveCritical
151948
+ );
151949
+ const mem = platform3 === "darwin" && memRaw === "critical" ? "elevated" : memRaw;
151950
+ const eventLoop = schmittHighIsWorse(
151951
+ sample.eventLoopP99Ms,
151952
+ previous,
151953
+ HOST_PRESSURE_BARS.eventLoopP99Ms.enterElevated,
151954
+ HOST_PRESSURE_BARS.eventLoopP99Ms.leaveElevated,
151955
+ HOST_PRESSURE_BARS.eventLoopP99Ms.enterCritical,
151956
+ HOST_PRESSURE_BARS.eventLoopP99Ms.leaveCritical
151957
+ );
151958
+ const ncpu = sample.ncpu > 0 ? sample.ncpu : 1;
151959
+ const windows = platform3 === "win32";
151960
+ const loadValue = windows ? sample.cpuBusyRatio ?? 0 : sample.load1 / ncpu;
151961
+ const loadBars = windows ? HOST_PRESSURE_BARS.cpuBusy : HOST_PRESSURE_BARS.loadPerCpu;
151962
+ const load = schmittHighIsWorse(
151963
+ loadValue,
151964
+ previous,
151965
+ loadBars.enterElevated,
151966
+ loadBars.leaveElevated,
151967
+ loadBars.enterCritical,
151968
+ loadBars.leaveCritical
151969
+ );
151970
+ const resourceLevel = worst([mem, eventLoop, load]);
151971
+ const agentsPair = sample.liveAgents >= HOST_PRESSURE_BARS.liveAgentsPair && resourceLevel !== "ok";
151972
+ const level = resourceLevel;
151973
+ const firing = [];
151974
+ if (mem !== "ok") firing.push("memory");
151975
+ if (eventLoop !== "ok") firing.push("event_loop");
151976
+ if (load !== "ok") firing.push("load");
151977
+ if (agentsPair) firing.push("agents");
151978
+ const reasons = REASON_ORDER.filter((reason) => firing.includes(reason));
151979
+ return { level, reasons };
151980
+ }
151981
+ var HostPressureMonitor = class {
151982
+ constructor(opts) {
151983
+ this.opts = opts;
151984
+ }
151985
+ opts;
151986
+ timer = null;
151987
+ level = "ok";
151988
+ lastWarning = null;
151989
+ start() {
151990
+ this.opts.histogram?.enable();
151991
+ if (this.timer) return;
151992
+ const intervalMs = this.opts.intervalMs ?? HOST_PRESSURE_SAMPLE_MS;
151993
+ this.timer = setInterval(() => this.tick(), intervalMs);
151994
+ this.timer.unref?.();
151995
+ }
151996
+ tick() {
151997
+ const sample = this.opts.readSample();
151998
+ const platform3 = this.opts.platform ?? process.platform;
151999
+ const classified = classifyHostPressure(sample, this.level, platform3);
152000
+ if (classified.level === this.level) return;
152001
+ this.level = classified.level;
152002
+ const updatedAt = (this.opts.now ?? (() => /* @__PURE__ */ new Date()))().toISOString();
152003
+ if (classified.level === "ok") {
152004
+ this.lastWarning = null;
152005
+ this.opts.wsHub.broadcast({ type: "host_pressure_cleared", updatedAt });
152006
+ return;
152007
+ }
152008
+ const os3 = hostPressureOs(platform3);
152009
+ const message = {
152010
+ type: "host_pressure",
152011
+ level: classified.level,
152012
+ reasons: classified.reasons,
152013
+ liveAgents: sample.liveAgents,
152014
+ updatedAt,
152015
+ ...os3 ? { os: os3 } : {}
152016
+ };
152017
+ this.lastWarning = message;
152018
+ this.opts.wsHub.broadcast(message);
152019
+ }
152020
+ wsMessage() {
152021
+ return this.lastWarning;
152022
+ }
152023
+ dispose() {
152024
+ if (this.timer) {
152025
+ clearInterval(this.timer);
152026
+ this.timer = null;
152027
+ }
152028
+ this.opts.histogram?.disable();
152029
+ }
152030
+ };
152031
+ function createHostPressureMonitor(wsHub, liveAgents) {
152032
+ const histogram = (0, import_perf_hooks.monitorEventLoopDelay)({ resolution: 20 });
152033
+ const windows = process.platform === "win32";
152034
+ let prevCpuTimes = null;
152035
+ const monitor = new HostPressureMonitor({
152036
+ wsHub,
152037
+ histogram,
152038
+ readSample: () => {
152039
+ const eventLoopP99Ms = histogram.percentile(99) / 1e6;
152040
+ histogram.reset();
152041
+ const total = (0, import_os16.totalmem)();
152042
+ const cpuList = (0, import_os16.cpus)();
152043
+ const sample = {
152044
+ liveAgents: liveAgents(),
152045
+ memFreeRatio: total > 0 ? (0, import_os16.freemem)() / total : 1,
152046
+ eventLoopP99Ms,
152047
+ load1: (0, import_os16.loadavg)()[0],
152048
+ ncpu: cpuList.length
152049
+ };
152050
+ if (windows) {
152051
+ const cpuTimes = cpuList.map((cpu) => cpu.times);
152052
+ sample.cpuBusyRatio = cpuBusyRatio(prevCpuTimes, cpuTimes);
152053
+ prevCpuTimes = cpuTimes;
152054
+ }
152055
+ return sample;
152056
+ }
152057
+ });
152058
+ monitor.start();
152059
+ return monitor;
152060
+ }
152061
+
151832
152062
  // src/services/push/expoPushSender.ts
151833
152063
  init_logger();
151834
152064
  var log5 = getLogger("expo-push");
@@ -153372,7 +153602,7 @@ function discoveredToResponse(d, conversationId) {
153372
153602
 
153373
153603
  // src/session-watchers.ts
153374
153604
  var import_fs38 = require("fs");
153375
- var import_os16 = require("os");
153605
+ var import_os17 = require("os");
153376
153606
  var import_path34 = require("path");
153377
153607
  init_logger();
153378
153608
  var SessionWatchers = class {
@@ -153455,7 +153685,7 @@ var SessionWatchers = class {
153455
153685
  // was passed to Claude via --session-id so the filename matches from the start.
153456
153686
  watchForJsonl(sessionId, projectPath) {
153457
153687
  const encoded = projectPath.replace(/[/\\:.]/g, "-");
153458
- const projectsDir = (0, import_path34.join)((0, import_os16.homedir)(), ".claude", "projects", encoded);
153688
+ const projectsDir = (0, import_path34.join)((0, import_os17.homedir)(), ".claude", "projects", encoded);
153459
153689
  const expectedFile = `${sessionId}.jsonl`;
153460
153690
  const filePath = (0, import_path34.join)(projectsDir, expectedFile);
153461
153691
  const deadline = Date.now() + 12e4;
@@ -153922,6 +154152,7 @@ var StreamerServer = class {
153922
154152
  wsToClientId = /* @__PURE__ */ new Map();
153923
154153
  cache = null;
153924
154154
  cacheMonitor = null;
154155
+ hostPressureMonitor = null;
153925
154156
  projectsRepo = null;
153926
154157
  conversationsRepo = null;
153927
154158
  sessionsRepo = null;
@@ -153986,7 +154217,7 @@ var StreamerServer = class {
153986
154217
  this.skipStartupWarmup = config2.skipStartupWarmup ?? false;
153987
154218
  this.autoResumeOnBoot = config2.autoResumeOnBoot ?? false;
153988
154219
  this.scanProfiles = config2.scanProfiles;
153989
- this.codexRoots = config2.codexRoots ?? [(0, import_path35.join)((0, import_os17.homedir)(), ".codex", "sessions")];
154220
+ this.codexRoots = config2.codexRoots ?? [(0, import_path35.join)((0, import_os18.homedir)(), ".codex", "sessions")];
153990
154221
  this.ptyGracePeriodMs = config2.ptyGracePeriodMs ?? DEFAULT_PTY_GRACE_PERIOD_MS;
153991
154222
  this.defaultSystemPrompt = config2.defaultSystemPrompt ?? DEFAULT_SYSTEM_PROMPT;
153992
154223
  const flagResolution = resolveFeatureFlags({
@@ -154003,7 +154234,7 @@ var StreamerServer = class {
154003
154234
  this.claudeFlagsPersistable = config2.claudeFlags === void 0;
154004
154235
  this.claudeFlags = config2.claudeFlags ?? loadClaudeFlags();
154005
154236
  this.claudeExtraArgs = config2.claudeExtraArgs ?? loadClaudeExtraArgs();
154006
- this.cacheDir = config2.cacheDir ?? loadCacheDir() ?? (0, import_path35.join)((0, import_os17.homedir)(), ".threadbase", "cache");
154237
+ this.cacheDir = config2.cacheDir ?? loadCacheDir() ?? (0, import_path35.join)((0, import_os18.homedir)(), ".threadbase", "cache");
154007
154238
  this.runtimeDbPath = resolveRuntimeDbPath(config2.runtimeDbPath);
154008
154239
  this.tailSize = config2.tailSize ?? loadTailSize() ?? 10;
154009
154240
  this.directoryDebounceMs = parseDirScanDebounceEnv(process.env.THREADBASE_DIR_SCAN_DEBOUNCE_MS) ?? config2.directoryScanDebounceMs ?? 1e3;
@@ -154272,6 +154503,7 @@ var StreamerServer = class {
154272
154503
  // reset-and-rescan, and tests swap methods on the server instance.
154273
154504
  cache: () => this.cache,
154274
154505
  cacheMonitor: () => this.cacheMonitor,
154506
+ hostPressureMonitor: () => this.hostPressureMonitor,
154275
154507
  pushRepo: () => this.pushRepo,
154276
154508
  liveActivityPushEnabled: () => this.liveActivityNotifier !== null,
154277
154509
  devicesRepo: () => this.devicesRepo,
@@ -154287,6 +154519,7 @@ var StreamerServer = class {
154287
154519
  withReconciledLifecycle: (sessions) => this.withReconciledLifecycle(sessions),
154288
154520
  currentWarmupState: () => this.currentWarmupState(),
154289
154521
  addSessionSubscriber: (sessionId, ws2) => this.addSessionSubscriber(sessionId, ws2),
154522
+ removeSessionSubscriber: (sessionId, ws2) => this.removeSessionSubscriber(sessionId, ws2),
154290
154523
  startGraceTimer: (sessionId, delayMs) => this.startGraceTimer(sessionId, delayMs),
154291
154524
  armHoldWhenIdle: (sessionId) => this.armHoldWhenIdle(sessionId),
154292
154525
  handleSessionsCount: (res) => this.handleSessionsCount(res),
@@ -154416,6 +154649,12 @@ var StreamerServer = class {
154416
154649
  );
154417
154650
  }
154418
154651
  }
154652
+ removeSessionSubscriber(sessionId, ws2) {
154653
+ const subs = this.sessionSubscribers.get(sessionId);
154654
+ if (!subs) return;
154655
+ subs.delete(ws2);
154656
+ if (subs.size === 0) this.sessionSubscribers.delete(sessionId);
154657
+ }
154419
154658
  /**
154420
154659
  * Bring up Live Activity push, if credentials are present (Feature 12).
154421
154660
  *
@@ -154442,14 +154681,14 @@ var StreamerServer = class {
154442
154681
  }
154443
154682
  this.apnsClient = new ApnsClient(creds);
154444
154683
  const sender = new LiveActivitySender(this.apnsClient, pushRepo);
154445
- const serverId = process.env.THREADBASE_INSTANCE_ID ?? (0, import_os17.hostname)();
154446
- this.liveActivityNotifier = new LiveActivityNotifier(sender, serverId, (0, import_os17.hostname)());
154684
+ const serverId = process.env.THREADBASE_INSTANCE_ID ?? (0, import_os18.hostname)();
154685
+ this.liveActivityNotifier = new LiveActivityNotifier(sender, serverId, (0, import_os18.hostname)());
154447
154686
  this.liveActivityRenewal = new LiveActivityRenewalScheduler({
154448
154687
  repo: pushRepo,
154449
154688
  sender,
154450
154689
  sessionStore: this.sessionStore,
154451
154690
  serverId,
154452
- serverLabel: (0, import_os17.hostname)()
154691
+ serverLabel: (0, import_os18.hostname)()
154453
154692
  });
154454
154693
  this.liveActivityRenewal.start();
154455
154694
  this.log.info("Live Activity push enabled", {
@@ -154469,7 +154708,7 @@ var StreamerServer = class {
154469
154708
  */
154470
154709
  initWaitingInputPush(pushRepo) {
154471
154710
  const sender = new ExpoPushSender(pushRepo, process.env.THREADBASE_EXPO_ACCESS_TOKEN);
154472
- const serverId = process.env.THREADBASE_INSTANCE_ID ?? (0, import_os17.hostname)();
154711
+ const serverId = process.env.THREADBASE_INSTANCE_ID ?? (0, import_os18.hostname)();
154473
154712
  this.waitingInputNotifier = new WaitingInputNotifier(
154474
154713
  sender,
154475
154714
  serverId,
@@ -154699,7 +154938,7 @@ var StreamerServer = class {
154699
154938
  let sessions = null;
154700
154939
  for (let attempt = 0; attempt < 2; attempt += 1) {
154701
154940
  const transport = await connectOrSpawnHost({
154702
- instanceId: process.env.THREADBASE_INSTANCE_ID ?? (0, import_os17.hostname)()
154941
+ instanceId: process.env.THREADBASE_INSTANCE_ID ?? (0, import_os18.hostname)()
154703
154942
  });
154704
154943
  try {
154705
154944
  sessions = await this.ptyManager.useRemoteRunner(transport);
@@ -154746,6 +154985,10 @@ var StreamerServer = class {
154746
154985
  this.idleReaperTimer = setInterval(() => this.reapIdleSessions(), IDLE_REAP_SWEEP_MS);
154747
154986
  this.idleReaperTimer.unref?.();
154748
154987
  }
154988
+ this.hostPressureMonitor = createHostPressureMonitor(
154989
+ this.wsHub,
154990
+ () => this.ptyAttachedIds().size
154991
+ );
154749
154992
  const warmUp = new Promise((resolveWarm) => {
154750
154993
  {
154751
154994
  this.log.info(`Streamer server listening on port ${port}`, {
@@ -155058,6 +155301,8 @@ var StreamerServer = class {
155058
155301
  clearInterval(this.idleReaperTimer);
155059
155302
  this.idleReaperTimer = null;
155060
155303
  }
155304
+ this.hostPressureMonitor?.dispose();
155305
+ this.hostPressureMonitor = null;
155061
155306
  this.lastAgentChunkAt.clear();
155062
155307
  this.terminalSeq.clear();
155063
155308
  if (this.ptyManager.isRemote()) this.ptyManager.dispose();
@@ -155251,7 +155496,7 @@ var StreamerServer = class {
155251
155496
  deviceToken: device.deviceToken,
155252
155497
  capabilities: device.capabilities,
155253
155498
  publicUrl: this.publicUrl,
155254
- machineName: (0, import_os17.hostname)(),
155499
+ machineName: (0, import_os18.hostname)(),
155255
155500
  serverVersion: getVersion()
155256
155501
  })
155257
155502
  );
@@ -155285,7 +155530,7 @@ var StreamerServer = class {
155285
155530
  // Released builds that predate that fix DO still adopt it, so changing
155286
155531
  // this value moves where old devices talk. It is not a free field.
155287
155532
  publicUrl: this.publicUrl,
155288
- machineName: (0, import_os17.hostname)(),
155533
+ machineName: (0, import_os18.hostname)(),
155289
155534
  ...device && {
155290
155535
  deviceId: device.deviceId,
155291
155536
  deviceToken: device.deviceToken,