oasis_test 0.1.122 → 0.1.124

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 (2) hide show
  1. package/dist/index.js +34 -8
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -203422,6 +203422,10 @@ var SessionProcessState = class {
203422
203422
  this.spec = spec;
203423
203423
  this.adapter = adapter;
203424
203424
  this.lock = lock;
203425
+ const o = spec.limits ?? {};
203426
+ this.hardTtlMs = o.hardTtlMs ?? SESSION_LIMITS.hardTtlMs;
203427
+ this.suicideAfterUnreachableMs = o.suicideAfterUnreachableMs ?? SESSION_LIMITS.suicideAfterUnreachableMs;
203428
+ this.watchdogIntervalMs = o.watchdogIntervalMs ?? 3e4;
203425
203429
  }
203426
203430
  ws = null;
203427
203431
  connected = false;
@@ -203431,6 +203435,9 @@ var SessionProcessState = class {
203431
203435
  reconnectMs = RECONNECT_MIN_MS;
203432
203436
  lastConnectedAt = Date.now();
203433
203437
  startedAt = Date.now();
203438
+ hardTtlMs;
203439
+ suicideAfterUnreachableMs;
203440
+ watchdogIntervalMs;
203434
203441
  watchdog = null;
203435
203442
  exitAckResolve = null;
203436
203443
  /** 整个会话进程「可以退了」的信号:会话正常退出、或被 evict / TTL / 失联自尽。 */
@@ -203571,16 +203578,16 @@ var SessionProcessState = class {
203571
203578
  startWatchdog() {
203572
203579
  this.watchdog = setInterval(() => {
203573
203580
  const now = Date.now();
203574
- if (now - this.startedAt >= SESSION_LIMITS.hardTtlMs) {
203581
+ if (now - this.startedAt >= this.hardTtlMs) {
203575
203582
  log2("[session]", `${this.spec.dispatchId}: \u8FBE\u786C\u4E0A\u9650 TTL\uFF0C\u81EA\u9000`);
203576
203583
  void this.selfTerminate("ttl");
203577
203584
  return;
203578
203585
  }
203579
- if (!this.connected && now - this.lastConnectedAt >= SESSION_LIMITS.suicideAfterUnreachableMs) {
203580
- log2("[session]", `${this.spec.dispatchId}: \u5931\u8054\u8D85\u8FC7 ${SESSION_LIMITS.suicideAfterUnreachableMs}ms\uFF0C\u81EA\u5C3D\uFF08\u9632\u53CC\u8DD1\uFF09`);
203586
+ if (!this.connected && now - this.lastConnectedAt >= this.suicideAfterUnreachableMs) {
203587
+ log2("[session]", `${this.spec.dispatchId}: \u5931\u8054\u8D85\u8FC7 ${this.suicideAfterUnreachableMs}ms\uFF0C\u81EA\u5C3D\uFF08\u9632\u53CC\u8DD1\uFF09`);
203581
203588
  void this.selfTerminate("unreachable");
203582
203589
  }
203583
- }, 3e4);
203590
+ }, this.watchdogIntervalMs);
203584
203591
  this.watchdog.unref?.();
203585
203592
  }
203586
203593
  async selfTerminate(reason) {
@@ -203955,6 +203962,7 @@ var DaemonWsClient = class {
203955
203962
  this.onUpdate = onUpdate;
203956
203963
  this.daemonVersion = daemonVersion;
203957
203964
  this.spawnSessionProcess = opts.spawnSessionProcess;
203965
+ this.countDetachedSessions = opts.countDetachedSessions;
203958
203966
  this.pingIntervalMs = opts.pingIntervalMs ?? PING_INTERVAL_MS;
203959
203967
  this.silenceTimeoutMs = opts.silenceTimeoutMs ?? SILENCE_TIMEOUT_MS;
203960
203968
  this.reconnectDelayMs = opts.reconnectDelayMs ?? RECONNECT_DELAY_MS;
@@ -203989,6 +203997,7 @@ var DaemonWsClient = class {
203989
203997
  /** setup 期间收到 kill 的派发。spawn 返回后先杀句柄,不得再宣告 session_started。 */
203990
203998
  cancelledPendingDispatchIds = /* @__PURE__ */ new Set();
203991
203999
  spawnSessionProcess;
204000
+ countDetachedSessions;
203992
204001
  /**
203993
204002
  * 回执 outbox(proposal run-ledger §4.2):**服务端据以判决的帧**发出后先留一份,收到
203994
204003
  * 服务端 ack 才删;ws 抖动坏窗口发失败/丢失的帧,在重连时全量重发——投递升级 at-least-once,
@@ -204306,7 +204315,8 @@ var DaemonWsClient = class {
204306
204315
  this.pendingUpdateSince = null;
204307
204316
  this.onUpdate();
204308
204317
  } else {
204309
- log2("[node-cli]", "\u2190 update\uFF1A\u7A7A\u95F2,\u7ACB\u5373\u62C9\u53D6\u6700\u65B0\u7248\u672C\u5E76\u91CD\u542F");
204318
+ const detached = this.countDetachedSessions?.() ?? 0;
204319
+ log2("[node-cli]", detached > 0 ? `\u2190 update\uFF1A\u672C\u8FDB\u7A0B\u5185\u65E0\u4F1A\u8BDD\uFF08\u53E6\u6709 ${detached} \u4E2A\u72EC\u7ACB\u4F1A\u8BDD\u5728\u8DD1\uFF0C**\u4E0D\u53D7\u672C\u6B21\u91CD\u542F\u5F71\u54CD**\uFF09\uFF0C\u7ACB\u5373\u62C9\u53D6\u6700\u65B0\u7248\u672C\u5E76\u91CD\u542F` : "\u2190 update\uFF1A\u7A7A\u95F2,\u7ACB\u5373\u62C9\u53D6\u6700\u65B0\u7248\u672C\u5E76\u91CD\u542F");
204310
204320
  this.onUpdate();
204311
204321
  }
204312
204322
  break;
@@ -204555,7 +204565,8 @@ async function startNode(opts) {
204555
204565
  const client = new DaemonWsClient(opts.serverUrl, opts.nodeId, sessions, adapters, opts.token, runtimes, opts.nodeName, opts.reportRuntimes ?? false, true, opts.onUpdate, opts.daemonVersion, {
204556
204566
  // chat 文件浏览 handler 用它定位会话目录;production 不传 = 与 adapter 同款默认根(~/.oasis/work)。
204557
204567
  ...opts.workRoot !== void 0 ? { workRoot: opts.workRoot } : {},
204558
- ...opts.spawnSessionProcess ? { spawnSessionProcess: opts.spawnSessionProcess } : {}
204568
+ ...opts.spawnSessionProcess ? { spawnSessionProcess: opts.spawnSessionProcess } : {},
204569
+ ...opts.countDetachedSessions ? { countDetachedSessions: opts.countDetachedSessions } : {}
204559
204570
  });
204560
204571
  console.log(`[oasis node] ${opts.nodeId} \u2192 ${opts.serverUrl}`);
204561
204572
  client.start();
@@ -209440,6 +209451,20 @@ function sweepOrphanSessions(sessionRoots2, deps) {
209440
209451
  }
209441
209452
  return removed;
209442
209453
  }
209454
+ function countLiveSessions(sessionRoots2, deps) {
209455
+ if (!deps.flockAvailable) return 0;
209456
+ let n = 0;
209457
+ for (const root of sessionRoots2) {
209458
+ let dirs;
209459
+ try {
209460
+ dirs = fs38.readdirSync(root);
209461
+ } catch {
209462
+ continue;
209463
+ }
209464
+ for (const d of dirs) if (deps.isLocked(path32.join(root, d, "lock"))) n++;
209465
+ }
209466
+ return n;
209467
+ }
209443
209468
 
209444
209469
  // src/index.ts
209445
209470
  init_src8();
@@ -209699,7 +209724,7 @@ function shimScript() {
209699
209724
  }
209700
209725
 
209701
209726
  // src/index.ts
209702
- var PKG_VERSION = true ? "0.1.122" : "dev";
209727
+ var PKG_VERSION = true ? "0.1.124" : "dev";
209703
209728
  var LOCAL_BIN = localBin();
209704
209729
  var NPM_PREFIX = npmPrefix();
209705
209730
  var INSTANCE = DEFAULT_INSTANCE;
@@ -210221,7 +210246,8 @@ void (async () => {
210221
210246
  drainNode = ctl.drain;
210222
210247
  },
210223
210248
  // 服务端下发了数据面通行证时,把会话交给独立进程跑(daemon 重启不再连坐它)。
210224
- spawnSessionProcess
210249
+ spawnSessionProcess,
210250
+ countDetachedSessions: () => countLiveSessions(sessionRoots(), { isLocked: isSessionLocked, flockAvailable: hasFlock() })
210225
210251
  });
210226
210252
  return;
210227
210253
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oasis_test",
3
- "version": "0.1.122",
3
+ "version": "0.1.124",
4
4
  "description": "Oasis node daemon + CLI — background daemon, auto-start, full server CLI",
5
5
  "bin": {
6
6
  "oasis": "./dist/index.js"
@@ -26,6 +26,6 @@
26
26
  "node": ">=20"
27
27
  },
28
28
  "oasisRelease": {
29
- "sourceHead": "f909dea3a3e738d34800aaae2ff21febd2ed9ea3"
29
+ "sourceHead": "3c7ad5a874aa215ba7cee828b8cab4ab0a499e87"
30
30
  }
31
31
  }