labgate 0.5.42 → 0.5.44

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.
@@ -0,0 +1,33 @@
1
+ import { type ExecFileOptions } from 'child_process';
2
+ export declare const LABGATE_NPM_PACKAGE = "labgate";
3
+ export declare const DEFAULT_UPDATE_CHECK_TIMEOUT_MS = 2500;
4
+ export declare const DEFAULT_UPDATE_CHECK_MAX_BUFFER: number;
5
+ export declare const DEFAULT_UPDATE_CHECK_TTL_MS: number;
6
+ export declare const DEFAULT_UPDATE_CHECK_CACHE_PATH: string;
7
+ export interface PublishedNpmVersionResult {
8
+ latestVersion: string | null;
9
+ checkedAt: string;
10
+ error: string | null;
11
+ }
12
+ type ExecFileLike = (file: string, args: readonly string[], options: ExecFileOptions) => Promise<{
13
+ stdout?: string | Buffer;
14
+ stderr?: string | Buffer;
15
+ }>;
16
+ export declare function stripVersionPrefix(raw: string): string;
17
+ export declare function compareSemverStrings(a: string, b: string): number | null;
18
+ export declare function parseNpmVersionOutput(rawOutput: string): string | null;
19
+ export declare function summarizeCommandError(err: any): string;
20
+ export declare function isVersionNewer(latestVersion: string | null, currentVersion: string): boolean;
21
+ export declare function getUpdateCommand(packageName?: string): string;
22
+ export declare function fetchPublishedNpmVersion(packageName?: string, options?: {
23
+ timeoutMs?: number;
24
+ maxBuffer?: number;
25
+ execFileImpl?: ExecFileLike;
26
+ }): Promise<PublishedNpmVersionResult>;
27
+ export declare function getCachedPublishedNpmVersion(packageName?: string, options?: {
28
+ cachePath?: string;
29
+ ttlMs?: number;
30
+ nowMs?: number;
31
+ execFileImpl?: ExecFileLike;
32
+ }): Promise<PublishedNpmVersionResult>;
33
+ export {};
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_UPDATE_CHECK_CACHE_PATH = exports.DEFAULT_UPDATE_CHECK_TTL_MS = exports.DEFAULT_UPDATE_CHECK_MAX_BUFFER = exports.DEFAULT_UPDATE_CHECK_TIMEOUT_MS = exports.LABGATE_NPM_PACKAGE = void 0;
4
+ exports.stripVersionPrefix = stripVersionPrefix;
5
+ exports.compareSemverStrings = compareSemverStrings;
6
+ exports.parseNpmVersionOutput = parseNpmVersionOutput;
7
+ exports.summarizeCommandError = summarizeCommandError;
8
+ exports.isVersionNewer = isVersionNewer;
9
+ exports.getUpdateCommand = getUpdateCommand;
10
+ exports.fetchPublishedNpmVersion = fetchPublishedNpmVersion;
11
+ exports.getCachedPublishedNpmVersion = getCachedPublishedNpmVersion;
12
+ const child_process_1 = require("child_process");
13
+ const fs_1 = require("fs");
14
+ const path_1 = require("path");
15
+ const util_1 = require("util");
16
+ const config_js_1 = require("./config.js");
17
+ const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
18
+ exports.LABGATE_NPM_PACKAGE = 'labgate';
19
+ exports.DEFAULT_UPDATE_CHECK_TIMEOUT_MS = 2_500;
20
+ exports.DEFAULT_UPDATE_CHECK_MAX_BUFFER = 256 * 1024;
21
+ exports.DEFAULT_UPDATE_CHECK_TTL_MS = 6 * 60 * 60 * 1000;
22
+ exports.DEFAULT_UPDATE_CHECK_CACHE_PATH = (0, path_1.join)(config_js_1.LABGATE_DIR, 'update-check.json');
23
+ function commandErrorDetail(err) {
24
+ return [
25
+ err?.stderr,
26
+ err?.stdout,
27
+ err?.message,
28
+ err?.cause?.stderr,
29
+ err?.cause?.stdout,
30
+ err?.cause?.message,
31
+ ]
32
+ .filter((part) => typeof part === 'string' && part.trim().length > 0)
33
+ .map((part) => String(part).trim())
34
+ .join('\n');
35
+ }
36
+ function stripVersionPrefix(raw) {
37
+ return String(raw || '').trim().replace(/^v/i, '');
38
+ }
39
+ function parseSemverTriplet(version) {
40
+ const normalized = stripVersionPrefix(version).split('-', 1)[0];
41
+ const match = normalized.match(/^(\d+)\.(\d+)\.(\d+)$/);
42
+ if (!match)
43
+ return null;
44
+ return [Number(match[1]), Number(match[2]), Number(match[3])];
45
+ }
46
+ function compareSemverStrings(a, b) {
47
+ const left = parseSemverTriplet(a);
48
+ const right = parseSemverTriplet(b);
49
+ if (!left || !right)
50
+ return null;
51
+ for (let i = 0; i < 3; i += 1) {
52
+ if (left[i] > right[i])
53
+ return 1;
54
+ if (left[i] < right[i])
55
+ return -1;
56
+ }
57
+ return 0;
58
+ }
59
+ function normalizeNpmVersionValue(raw) {
60
+ if (typeof raw === 'string') {
61
+ const cleaned = stripVersionPrefix(raw).trim();
62
+ return cleaned || null;
63
+ }
64
+ if (Array.isArray(raw)) {
65
+ const versions = raw
66
+ .map((entry) => normalizeNpmVersionValue(entry))
67
+ .filter((entry) => !!entry);
68
+ if (versions.length === 0)
69
+ return null;
70
+ const sorted = [...versions].sort((a, b) => {
71
+ const cmp = compareSemverStrings(a, b);
72
+ if (cmp !== null)
73
+ return cmp;
74
+ return a.localeCompare(b);
75
+ });
76
+ return sorted[sorted.length - 1] || null;
77
+ }
78
+ return null;
79
+ }
80
+ function parseNpmVersionOutput(rawOutput) {
81
+ const text = String(rawOutput || '').trim();
82
+ if (!text)
83
+ return null;
84
+ try {
85
+ return normalizeNpmVersionValue(JSON.parse(text));
86
+ }
87
+ catch {
88
+ const cleaned = stripVersionPrefix(text.replace(/^"+|"+$/g, '').trim());
89
+ return cleaned || null;
90
+ }
91
+ }
92
+ function summarizeCommandError(err) {
93
+ const detail = commandErrorDetail(err);
94
+ const firstLine = detail
95
+ .split('\n')
96
+ .map((line) => line.trim())
97
+ .find((line) => line.length > 0);
98
+ if (!firstLine)
99
+ return 'Could not reach npm registry.';
100
+ return firstLine.length > 180 ? `${firstLine.slice(0, 177)}...` : firstLine;
101
+ }
102
+ function isVersionNewer(latestVersion, currentVersion) {
103
+ if (!latestVersion)
104
+ return false;
105
+ const cmp = compareSemverStrings(latestVersion, currentVersion);
106
+ return cmp === null
107
+ ? stripVersionPrefix(latestVersion) !== stripVersionPrefix(currentVersion)
108
+ : cmp > 0;
109
+ }
110
+ function getUpdateCommand(packageName = exports.LABGATE_NPM_PACKAGE) {
111
+ return `npm install -g ${packageName}@latest`;
112
+ }
113
+ async function fetchPublishedNpmVersion(packageName = exports.LABGATE_NPM_PACKAGE, options) {
114
+ const checkedAt = new Date().toISOString();
115
+ const execImpl = options?.execFileImpl ?? execFileAsync;
116
+ try {
117
+ const result = await execImpl('npm', ['view', packageName, 'version', '--json'], {
118
+ timeout: options?.timeoutMs ?? exports.DEFAULT_UPDATE_CHECK_TIMEOUT_MS,
119
+ maxBuffer: options?.maxBuffer ?? exports.DEFAULT_UPDATE_CHECK_MAX_BUFFER,
120
+ });
121
+ const latestVersion = parseNpmVersionOutput(String(result?.stdout || ''));
122
+ if (!latestVersion) {
123
+ return {
124
+ latestVersion: null,
125
+ checkedAt,
126
+ error: 'npm returned an unreadable version.',
127
+ };
128
+ }
129
+ return {
130
+ latestVersion,
131
+ checkedAt,
132
+ error: null,
133
+ };
134
+ }
135
+ catch (err) {
136
+ return {
137
+ latestVersion: null,
138
+ checkedAt,
139
+ error: summarizeCommandError(err),
140
+ };
141
+ }
142
+ }
143
+ function readCachedResult(cachePath, packageName) {
144
+ if (!(0, fs_1.existsSync)(cachePath))
145
+ return null;
146
+ try {
147
+ const parsed = JSON.parse((0, fs_1.readFileSync)(cachePath, 'utf-8'));
148
+ if (parsed.packageName !== packageName)
149
+ return null;
150
+ if (typeof parsed.checkedAt !== 'string' || !parsed.checkedAt.trim())
151
+ return null;
152
+ return {
153
+ latestVersion: typeof parsed.latestVersion === 'string' ? parsed.latestVersion : null,
154
+ checkedAt: parsed.checkedAt,
155
+ error: typeof parsed.error === 'string' ? parsed.error : null,
156
+ };
157
+ }
158
+ catch {
159
+ return null;
160
+ }
161
+ }
162
+ function writeCachedResult(cachePath, packageName, result) {
163
+ try {
164
+ (0, config_js_1.ensurePrivateDir)((0, path_1.dirname)(cachePath) || config_js_1.LABGATE_DIR);
165
+ (0, fs_1.writeFileSync)(cachePath, JSON.stringify({
166
+ packageName,
167
+ latestVersion: result.latestVersion,
168
+ checkedAt: result.checkedAt,
169
+ error: result.error,
170
+ }, null, 2) + '\n', 'utf-8');
171
+ }
172
+ catch {
173
+ // Best effort cache only.
174
+ }
175
+ }
176
+ function isFresh(result, ttlMs, nowMs) {
177
+ if (!result?.checkedAt)
178
+ return false;
179
+ const checkedAtMs = Date.parse(result.checkedAt);
180
+ if (!Number.isFinite(checkedAtMs))
181
+ return false;
182
+ return (nowMs - checkedAtMs) < ttlMs;
183
+ }
184
+ async function getCachedPublishedNpmVersion(packageName = exports.LABGATE_NPM_PACKAGE, options) {
185
+ const cachePath = options?.cachePath ?? exports.DEFAULT_UPDATE_CHECK_CACHE_PATH;
186
+ const ttlMs = options?.ttlMs ?? exports.DEFAULT_UPDATE_CHECK_TTL_MS;
187
+ const nowMs = options?.nowMs ?? Date.now();
188
+ const cached = readCachedResult(cachePath, packageName);
189
+ if (isFresh(cached, ttlMs, nowMs)) {
190
+ return cached;
191
+ }
192
+ const fetched = await fetchPublishedNpmVersion(packageName, {
193
+ execFileImpl: options?.execFileImpl,
194
+ });
195
+ if (fetched.latestVersion || fetched.error) {
196
+ writeCachedResult(cachePath, packageName, fetched);
197
+ }
198
+ if (fetched.latestVersion || !cached) {
199
+ return fetched;
200
+ }
201
+ return cached;
202
+ }
203
+ //# sourceMappingURL=update-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../src/lib/update-check.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "labgate",
3
- "version": "0.5.42",
4
- "description": "Secure HPC wrapper for AI coding agents (Claude-first): policy controls, Apptainer sandboxes, and SLURM workflows — https://labgate.dev",
3
+ "version": "0.5.44",
4
+ "description": "Policy-controlled sandboxes for AI coding agents on HPC (Claude-first, Apptainer, SLURM).",
5
5
  "homepage": "https://labgate.dev",
6
6
  "keywords": [
7
7
  "sandbox",
@@ -23,6 +23,7 @@
23
23
  "dev": "tsc --watch",
24
24
  "dev:ui": "npm run build && LABGATE_UI_PREWARM_ON_START=1 node dist/cli.js ui --port 7700",
25
25
  "dev:claude": "./scripts/dev-claude.sh",
26
+ "postinstall": "node bin/postinstall.js",
26
27
  "start": "node bin/labgate.js",
27
28
  "verify:quick": "npm run build && npm run test:unit",
28
29
  "verify": "npm run build && npm test",
@@ -53,7 +54,7 @@
53
54
  },
54
55
  "optionalDependencies": {
55
56
  "better-sqlite3": "^12.6.2",
56
- "node-pty": "^1.2.0-beta.11"
57
+ "node-pty": "^1.1.0"
57
58
  },
58
59
  "devDependencies": {
59
60
  "@types/better-sqlite3": "^7.6.13",