@juspay/neurolink 10.8.21 → 10.8.22
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/CHANGELOG.md +6 -0
- package/dist/cli/commands/proxy.js +3 -2
- package/dist/lib/proxy/globalInstaller.d.ts +2 -0
- package/dist/lib/proxy/globalInstaller.js +9 -1
- package/dist/lib/proxy/rollingWorkerSupervisor.js +6 -4
- package/dist/proxy/globalInstaller.d.ts +2 -0
- package/dist/proxy/globalInstaller.js +9 -1
- package/dist/proxy/rollingWorkerSupervisor.js +6 -4
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## [10.8.22](https://github.com/juspay/neurolink/compare/v10.8.21...v10.8.22) (2026-08-05)
|
|
2
|
+
|
|
3
|
+
### Bug Fixes
|
|
4
|
+
|
|
5
|
+
- **(proxy):** close updater and worker review gaps ([2631e23](https://github.com/juspay/neurolink/commit/2631e23dee43b0352e0fff85a462dcb252c013ec))
|
|
6
|
+
|
|
1
7
|
## [10.8.21](https://github.com/juspay/neurolink/compare/v10.8.20...v10.8.21) (2026-08-05)
|
|
2
8
|
|
|
3
9
|
## [10.8.20](https://github.com/juspay/neurolink/compare/v10.8.19...v10.8.20) (2026-08-05)
|
|
@@ -677,8 +677,9 @@ async function getRollingActivationFailure(host, port, expectedVersion) {
|
|
|
677
677
|
failure.workerExitCode === null
|
|
678
678
|
? `exitCode=${failure.workerExitCode ?? "none"}`
|
|
679
679
|
: null,
|
|
680
|
-
typeof failure.workerExitSignal === "string"
|
|
681
|
-
|
|
680
|
+
typeof failure.workerExitSignal === "string" ||
|
|
681
|
+
failure.workerExitSignal === null
|
|
682
|
+
? `exitSignal=${failure.workerExitSignal ?? "none"}`
|
|
682
683
|
: null,
|
|
683
684
|
typeof failure.supervisorAction === "string"
|
|
684
685
|
? `supervisorAction=${failure.supervisorAction}`
|
|
@@ -6,6 +6,8 @@ export declare function getGlobalInstallArgs(kind: GlobalInstallerKind, packageS
|
|
|
6
6
|
* Return whether a global package-manager failure is likely environmental and
|
|
7
7
|
* worth retrying. Configuration and permission failures deliberately return
|
|
8
8
|
* false so the updater does not repeatedly mutate a broken installation.
|
|
9
|
+
*
|
|
10
|
+
* @param error - The package-manager error, including any nested `cause` chain.
|
|
9
11
|
*/
|
|
10
12
|
export declare function isTransientInstallFailure(error: unknown): boolean;
|
|
11
13
|
/**
|
|
@@ -146,17 +146,25 @@ const TRANSIENT_INSTALL_FAILURE_CODES = new Set([
|
|
|
146
146
|
"EPIPE",
|
|
147
147
|
"ETIMEDOUT",
|
|
148
148
|
]);
|
|
149
|
+
const MAX_INSTALL_FAILURE_CAUSE_DEPTH = 10;
|
|
149
150
|
/**
|
|
150
151
|
* Return whether a global package-manager failure is likely environmental and
|
|
151
152
|
* worth retrying. Configuration and permission failures deliberately return
|
|
152
153
|
* false so the updater does not repeatedly mutate a broken installation.
|
|
154
|
+
*
|
|
155
|
+
* @param error - The package-manager error, including any nested `cause` chain.
|
|
153
156
|
*/
|
|
154
157
|
export function isTransientInstallFailure(error) {
|
|
155
158
|
let current = error;
|
|
156
|
-
|
|
159
|
+
const seen = new Set();
|
|
160
|
+
for (let depth = 0; depth < MAX_INSTALL_FAILURE_CAUSE_DEPTH && current; depth++) {
|
|
157
161
|
if (typeof current !== "object") {
|
|
158
162
|
return false;
|
|
159
163
|
}
|
|
164
|
+
if (seen.has(current)) {
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
seen.add(current);
|
|
160
168
|
const candidate = current;
|
|
161
169
|
if (typeof candidate.code === "string" &&
|
|
162
170
|
TRANSIENT_INSTALL_FAILURE_CODES.has(candidate.code)) {
|
|
@@ -424,10 +424,12 @@ export class RollingWorkerSupervisor {
|
|
|
424
424
|
if (this.active?.generation === worker.generation && !this.closed) {
|
|
425
425
|
this.active = null;
|
|
426
426
|
this.draining.set(worker.generation, worker);
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
427
|
+
if (!lifecycle.observedExit) {
|
|
428
|
+
// The child may own a duplicate of an incompletely transferred socket.
|
|
429
|
+
// SIGKILL closes its descriptor without worker-side shutdown(2), after
|
|
430
|
+
// which the parent rejects its copy rather than attempting unsafe replay.
|
|
431
|
+
worker.handle.terminate("SIGKILL");
|
|
432
|
+
}
|
|
431
433
|
this.publishState();
|
|
432
434
|
}
|
|
433
435
|
this.rejectSocket(socket);
|
|
@@ -6,6 +6,8 @@ export declare function getGlobalInstallArgs(kind: GlobalInstallerKind, packageS
|
|
|
6
6
|
* Return whether a global package-manager failure is likely environmental and
|
|
7
7
|
* worth retrying. Configuration and permission failures deliberately return
|
|
8
8
|
* false so the updater does not repeatedly mutate a broken installation.
|
|
9
|
+
*
|
|
10
|
+
* @param error - The package-manager error, including any nested `cause` chain.
|
|
9
11
|
*/
|
|
10
12
|
export declare function isTransientInstallFailure(error: unknown): boolean;
|
|
11
13
|
/**
|
|
@@ -146,17 +146,25 @@ const TRANSIENT_INSTALL_FAILURE_CODES = new Set([
|
|
|
146
146
|
"EPIPE",
|
|
147
147
|
"ETIMEDOUT",
|
|
148
148
|
]);
|
|
149
|
+
const MAX_INSTALL_FAILURE_CAUSE_DEPTH = 10;
|
|
149
150
|
/**
|
|
150
151
|
* Return whether a global package-manager failure is likely environmental and
|
|
151
152
|
* worth retrying. Configuration and permission failures deliberately return
|
|
152
153
|
* false so the updater does not repeatedly mutate a broken installation.
|
|
154
|
+
*
|
|
155
|
+
* @param error - The package-manager error, including any nested `cause` chain.
|
|
153
156
|
*/
|
|
154
157
|
export function isTransientInstallFailure(error) {
|
|
155
158
|
let current = error;
|
|
156
|
-
|
|
159
|
+
const seen = new Set();
|
|
160
|
+
for (let depth = 0; depth < MAX_INSTALL_FAILURE_CAUSE_DEPTH && current; depth++) {
|
|
157
161
|
if (typeof current !== "object") {
|
|
158
162
|
return false;
|
|
159
163
|
}
|
|
164
|
+
if (seen.has(current)) {
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
seen.add(current);
|
|
160
168
|
const candidate = current;
|
|
161
169
|
if (typeof candidate.code === "string" &&
|
|
162
170
|
TRANSIENT_INSTALL_FAILURE_CODES.has(candidate.code)) {
|
|
@@ -424,10 +424,12 @@ export class RollingWorkerSupervisor {
|
|
|
424
424
|
if (this.active?.generation === worker.generation && !this.closed) {
|
|
425
425
|
this.active = null;
|
|
426
426
|
this.draining.set(worker.generation, worker);
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
427
|
+
if (!lifecycle.observedExit) {
|
|
428
|
+
// The child may own a duplicate of an incompletely transferred socket.
|
|
429
|
+
// SIGKILL closes its descriptor without worker-side shutdown(2), after
|
|
430
|
+
// which the parent rejects its copy rather than attempting unsafe replay.
|
|
431
|
+
worker.handle.terminate("SIGKILL");
|
|
432
|
+
}
|
|
431
433
|
this.publishState();
|
|
432
434
|
}
|
|
433
435
|
this.rejectSocket(socket);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@juspay/neurolink",
|
|
3
|
-
"version": "10.8.
|
|
3
|
+
"version": "10.8.22",
|
|
4
4
|
"packageManager": "pnpm@10.15.1",
|
|
5
5
|
"description": "TypeScript AI SDK with 24+ LLM providers behind one consistent API. MCP-native (connect any MCP server), voice TTS/STT/realtime, RAG, agents, memory, context compaction. OpenAI · Anthropic · Gemini · Bedrock · Azure · Ollama · DeepSeek · NVIDIA NIM and more.",
|
|
6
6
|
"author": {
|