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.
- package/dist/index.js +34 -8
- 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 >=
|
|
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 >=
|
|
203580
|
-
log2("[session]", `${this.spec.dispatchId}: \u5931\u8054\u8D85\u8FC7 ${
|
|
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
|
-
},
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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": "
|
|
29
|
+
"sourceHead": "3c7ad5a874aa215ba7cee828b8cab4ab0a499e87"
|
|
30
30
|
}
|
|
31
31
|
}
|