llm-cli-gateway 1.5.13 → 1.5.14

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 CHANGED
@@ -2,6 +2,17 @@
2
2
 
3
3
  All notable changes to the llm-cli-gateway project.
4
4
 
5
+ ## [1.5.14] - 2026-05-24
6
+
7
+ ### Fixed
8
+
9
+ - Remove the Redis Lua `eval` lock-release path from production source and replace it with Redis `WATCH`/`MULTI` compare-and-delete semantics.
10
+ - Add exact direct production dependencies for `content-type@1.0.5` and `type-is@2.0.1` so packed consumer installs do not resolve the Socket-flagged `content-type@2.0.0` / `type-is@2.1.0` versions.
11
+
12
+ ### Added
13
+
14
+ - Add `npm run security:audit` as a CI/release gate covering `npm audit --omit=dev`, production source dynamic-execution scanning, blocked dependency-version checks, and a packed consumer install policy check.
15
+
5
16
  ## [1.5.13] - 2026-05-24
6
17
 
7
18
  ### Fixed
@@ -24,8 +24,9 @@ export declare class PostgreSQLSessionManager {
24
24
  */
25
25
  private acquireLockWithRetry;
26
26
  /**
27
- * Release distributed lock using Lua script for atomic compare-and-delete
28
- * Only releases if lockValue matches (prevents releasing another process's lock)
27
+ * Release distributed lock with optimistic Redis transaction semantics.
28
+ * Only releases if lockValue matches, which prevents releasing another
29
+ * process's lock after expiry/reacquire.
29
30
  */
30
31
  private releaseLock;
31
32
  /**
@@ -52,20 +52,25 @@ export class PostgreSQLSessionManager {
52
52
  }
53
53
  }
54
54
  /**
55
- * Release distributed lock using Lua script for atomic compare-and-delete
56
- * Only releases if lockValue matches (prevents releasing another process's lock)
55
+ * Release distributed lock with optimistic Redis transaction semantics.
56
+ * Only releases if lockValue matches, which prevents releasing another
57
+ * process's lock after expiry/reacquire.
57
58
  */
58
59
  async releaseLock(key, lockValue) {
59
60
  const lockKey = `lock:${key}`;
60
- // Lua script for atomic compare-and-delete
61
- const script = `
62
- if redis.call("get", KEYS[1]) == ARGV[1] then
63
- return redis.call("del", KEYS[1])
64
- else
65
- return 0
66
- end
67
- `;
68
- await this.redis.eval(script, 1, lockKey, lockValue);
61
+ await this.redis.watch(lockKey);
62
+ try {
63
+ const currentValue = await this.redis.get(lockKey);
64
+ if (currentValue !== lockValue) {
65
+ await this.redis.unwatch();
66
+ return;
67
+ }
68
+ await this.redis.multi().del(lockKey).exec();
69
+ }
70
+ catch (error) {
71
+ await this.redis.unwatch().catch(() => undefined);
72
+ throw error;
73
+ }
69
74
  }
70
75
  /**
71
76
  * Invalidate session cache
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "llm-cli-gateway",
3
- "version": "1.5.13",
3
+ "version": "1.5.14",
4
4
  "mcpName": "io.github.verivus-oss/llm-cli-gateway",
5
5
  "description": "MCP server providing unified access to Claude Code, Codex, Gemini, Grok, and Mistral Vibe CLIs with session management, retry logic, async job orchestration, durable job results, and cross-LLM validation.",
6
6
  "license": "MIT",
@@ -76,7 +76,8 @@
76
76
  "lint:fix": "eslint src/**/*.ts --fix",
77
77
  "format": "prettier --write 'src/**/*.ts'",
78
78
  "format:check": "prettier --check 'src/**/*.ts'",
79
- "check": "npm run build && npm run lint && npm test",
79
+ "security:audit": "bash scripts/release-security-audit.sh",
80
+ "check": "npm run build && npm run lint && npm test && npm run security:audit",
80
81
  "release:build": "bash installer/build-release.sh",
81
82
  "release:checksums": "cd installer/dist && sha256sum --check SHA256SUMS",
82
83
  "release:docker": "docker compose -f docker-compose.personal.yml build"
@@ -84,9 +85,11 @@
84
85
  "dependencies": {
85
86
  "@modelcontextprotocol/sdk": "^1.29.0",
86
87
  "better-sqlite3": "^12.10.0",
88
+ "content-type": "1.0.5",
87
89
  "ioredis": "^5.4.1",
88
90
  "pg": "^8.12.0",
89
91
  "toml": "^3.0.0",
92
+ "type-is": "2.0.1",
90
93
  "zod": "^3.23.0"
91
94
  },
92
95
  "devDependencies": {