labgate 0.5.32 → 0.5.34

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/README.md CHANGED
@@ -38,7 +38,7 @@ LabGate runs your AI coding agent inside a sandboxed container with:
38
38
  - **Scoped filesystem** — only your working directory and configured paths are visible
39
39
  - **Credential blocking** — `.ssh`, `.aws`, `.env`, `.gnupg`, and other sensitive paths are hidden by default
40
40
  - **Network policy** — configurable network modes (`host`, `filtered`, `none`)
41
- - **Command blocking** — `ssh`, `curl`, `wget`, and other commands are blocked by default
41
+ - **Command blocking** — high-risk system commands (for example `mount`, `umount`, `mkfs`, `reboot`) are blocked by default
42
42
  - **Audit logging** — session start/stop and mount configuration logged to `~/.labgate/logs/`
43
43
  - **Dashboard instructions editor** — view and update per-session `AGENTS.md` / `CLAUDE.md` from the UI
44
44
  - **Session context injection** — LabGate prepends a temporary sandbox-mapping instruction block during active sessions
@@ -74,8 +74,9 @@ labgate config reset image
74
74
  | `filesystem.blocked_patterns` | `.ssh, .aws, .env, ...` | Hidden from sandbox |
75
75
  | `filesystem.extra_paths` | `[]` | Additional mounts |
76
76
  | `network.mode` | `host` | `none`, `filtered`, or `host` |
77
- | `commands.blacklist` | `ssh, curl, wget, ...` | Blocked commands |
77
+ | `commands.blacklist` | `mount, umount, mkfs, reboot, shutdown` | Blocked commands |
78
78
  | `slurm.enabled` | `true` | Enable SLURM CLI passthrough (`sbatch`, `squeue`, etc.) and job tracking |
79
+ | `headless.claude_run_with_allowed_permissions` | `true` | In Claude headless mode, auto-allow tool use via `--dangerously-skip-permissions` |
79
80
 
80
81
  ## Commands
81
82
 
@@ -66,6 +66,14 @@ export interface LabgateConfig {
66
66
  enabled: boolean;
67
67
  log_dir: string;
68
68
  };
69
+ /** Headless mode defaults for non-interactive agent runs */
70
+ headless?: {
71
+ /**
72
+ * For Claude headless runs, pass --dangerously-skip-permissions because
73
+ * per-tool approval prompts are not interactive in this mode.
74
+ */
75
+ claude_run_with_allowed_permissions?: boolean;
76
+ };
69
77
  }
70
78
  export declare const DEFAULT_CONFIG: LabgateConfig;
71
79
  export declare const LABGATE_DIR: string;
@@ -94,6 +102,7 @@ export declare function getExplorerArtifactDir(experimentId: string, runId: stri
94
102
  export declare function getExplorerCompareArtifactDir(experimentId: string): string;
95
103
  export declare function getExplorerLockDir(experimentId: string): string;
96
104
  export declare function getExplorerWorktreesDir(experimentId: string): string;
105
+ export declare function shouldClaudeHeadlessRunWithAllowedPermissions(config: LabgateConfig): boolean;
97
106
  export declare function validateConfig(config: LabgateConfig): string[];
98
107
  export declare function loadConfig(): LabgateConfig;
99
108
  export interface EffectiveConfig {
@@ -23,6 +23,7 @@ exports.getExplorerArtifactDir = getExplorerArtifactDir;
23
23
  exports.getExplorerCompareArtifactDir = getExplorerCompareArtifactDir;
24
24
  exports.getExplorerLockDir = getExplorerLockDir;
25
25
  exports.getExplorerWorktreesDir = getExplorerWorktreesDir;
26
+ exports.shouldClaudeHeadlessRunWithAllowedPermissions = shouldClaudeHeadlessRunWithAllowedPermissions;
26
27
  exports.validateConfig = validateConfig;
27
28
  exports.loadConfig = loadConfig;
28
29
  exports.findLockedFieldConflicts = findLockedFieldConflicts;
@@ -60,11 +61,8 @@ exports.DEFAULT_CONFIG = {
60
61
  datasets: [],
61
62
  commands: {
62
63
  blacklist: [
63
- 'ssh', 'scp', 'rsync',
64
- 'curl', 'wget',
65
64
  'mount', 'umount',
66
- 'dd', 'mkfs',
67
- 'passwd', 'chown',
65
+ 'mkfs',
68
66
  'reboot', 'shutdown',
69
67
  ],
70
68
  },
@@ -90,6 +88,9 @@ exports.DEFAULT_CONFIG = {
90
88
  enabled: true,
91
89
  log_dir: '~/.labgate/logs',
92
90
  },
91
+ headless: {
92
+ claude_run_with_allowed_permissions: true,
93
+ },
93
94
  };
94
95
  // ── Paths ─────────────────────────────────────────────────
95
96
  exports.LABGATE_DIR = process.env.LABGATE_DIR ?? (0, path_1.join)((0, os_1.homedir)(), '.labgate');
@@ -173,6 +174,9 @@ function getExplorerLockDir(experimentId) {
173
174
  function getExplorerWorktreesDir(experimentId) {
174
175
  return (0, path_1.join)(getExplorerWorktreesRootDir(), experimentId);
175
176
  }
177
+ function shouldClaudeHeadlessRunWithAllowedPermissions(config) {
178
+ return config.headless?.claude_run_with_allowed_permissions !== false;
179
+ }
176
180
  // ── Deep clone helper ──────────────────────────────────────
177
181
  function cloneConfig(config) {
178
182
  return JSON.parse(JSON.stringify(config));
@@ -188,6 +192,7 @@ function validateConfig(config) {
188
192
  const blockedPatterns = config.filesystem?.blocked_patterns;
189
193
  const extraPaths = config.filesystem?.extra_paths;
190
194
  const blacklist = config.commands?.blacklist;
195
+ const headless = config.headless;
191
196
  if (!VALID_RUNTIMES.includes(config.runtime)) {
192
197
  errors.push(`Invalid runtime: "${config.runtime}". Must be one of: ${VALID_RUNTIMES.join(', ')}`);
193
198
  }
@@ -212,6 +217,15 @@ function validateConfig(config) {
212
217
  if (!Array.isArray(blacklist)) {
213
218
  errors.push('commands.blacklist must be an array');
214
219
  }
220
+ if (headless !== undefined) {
221
+ if (!headless || typeof headless !== 'object' || Array.isArray(headless)) {
222
+ errors.push('headless must be an object');
223
+ }
224
+ else if (headless.claude_run_with_allowed_permissions !== undefined &&
225
+ typeof headless.claude_run_with_allowed_permissions !== 'boolean') {
226
+ errors.push('headless.claude_run_with_allowed_permissions must be a boolean');
227
+ }
228
+ }
215
229
  const mounts = Array.isArray(extraPaths) ? extraPaths : [];
216
230
  for (const mount of mounts) {
217
231
  if (!mount || typeof mount !== 'object') {
@@ -324,6 +338,11 @@ function loadConfig() {
324
338
  enabled: raw.audit?.enabled ?? exports.DEFAULT_CONFIG.audit.enabled,
325
339
  log_dir: raw.audit?.log_dir ?? exports.DEFAULT_CONFIG.audit.log_dir,
326
340
  },
341
+ headless: {
342
+ claude_run_with_allowed_permissions: raw.headless?.claude_run_with_allowed_permissions ??
343
+ exports.DEFAULT_CONFIG.headless?.claude_run_with_allowed_permissions ??
344
+ true,
345
+ },
327
346
  };
328
347
  const errors = validateConfig(config);
329
348
  if (errors.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -1279,13 +1279,14 @@ function buildEntrypoint(agent) {
1279
1279
  '}',
1280
1280
  '',
1281
1281
  ];
1282
+ const preLaunchLines = [];
1282
1283
  if (agent === 'claude') {
1284
+ preLaunchLines.push('labgate_ensure_git() {', ' if command -v git >/dev/null 2>&1; then', ' return 0', ' fi', ' if [ "$(id -u)" != "0" ]; then', ' echo "[labgate] Warning: git is missing in this container. Claude marketplace requires git." >&2', ' echo "[labgate] Configure an image with git installed (for example docker.io/library/node:20-bookworm)." >&2', ' return 0', ' fi', ' echo "[labgate] Installing git for Claude marketplace support..."', ' if command -v apt-get >/dev/null 2>&1; then', ' export DEBIAN_FRONTEND=noninteractive', ' apt-get update >/dev/null 2>&1 || return 0', ' apt-get install -y git >/dev/null 2>&1 || return 0', ' elif command -v apk >/dev/null 2>&1; then', ' apk add --no-cache git >/dev/null 2>&1 || return 0', ' elif command -v dnf >/dev/null 2>&1; then', ' dnf install -y git >/dev/null 2>&1 || return 0', ' elif command -v yum >/dev/null 2>&1; then', ' yum install -y git >/dev/null 2>&1 || return 0', ' elif command -v microdnf >/dev/null 2>&1; then', ' microdnf install -y git >/dev/null 2>&1 || return 0', ' fi', ' if ! command -v git >/dev/null 2>&1; then', ' echo "[labgate] Warning: git is still unavailable; Claude marketplace may stay disabled." >&2', ' fi', '}', 'labgate_ensure_git', '');
1283
1285
  // Configure a LabGate status line in Claude Code with a dashboard URL.
1284
1286
  lines.push('mkdir -p "$HOME/.claude"', 'cat > "$HOME/.claude/labgate-statusline.sh" <<\'EOF\'', '#!/usr/bin/env bash', 'status_input="$(cat || true)"', 'url="${LABGATE_DASHBOARD_URL:-}"', 'if [ -z "$url" ]; then', ' dashboard_link_file="${LABGATE_DASHBOARD_LINK_FILE:-$HOME/.labgate-dashboard-url}"', ' if [ -f "$dashboard_link_file" ]; then', ' url="$(cat "$dashboard_link_file" 2>/dev/null || true)"', ' fi', 'fi', 'if [ -z "$url" ]; then', ' url="http://localhost:7700"', 'fi', 'dataset_count="${LABGATE_DATASET_COUNT:-0}"', 'result_count="${LABGATE_RESULT_COUNT:-0}"', 'status_meta="$(printf "%s" "$status_input" | node -e \'', ' const fs = require("fs");', ' let raw = "";', ' try { raw = fs.readFileSync(0, "utf8"); } catch {}', ' let model = "Unknown";', ' let remaining = "";', ' try {', ' const parsed = JSON.parse(raw || "{}");', ' const modelObj = parsed && parsed.model ? parsed.model : null;', ' if (modelObj) model = modelObj.display_name || modelObj.id || model;', ' const ctx = parsed && parsed.context_window ? parsed.context_window : null;', ' if (ctx && Number.isFinite(ctx.remaining_percentage)) {', ' remaining = String(Math.max(0, Math.min(100, Math.round(ctx.remaining_percentage))));', ' } else if (ctx && Number.isFinite(ctx.used_percentage)) {', ' remaining = String(Math.max(0, Math.min(100, Math.round(100 - ctx.used_percentage))));', ' }', ' } catch {}', ' process.stdout.write(String(model) + "\\t" + String(remaining));', '\' 2>/dev/null || true)"', 'model_display="Unknown"', 'context_remaining=""', 'if [ -n "$status_meta" ]; then', ' IFS=$\'\\t\' read -r model_display context_remaining <<< "$status_meta"', 'fi', 'if [ -z "$model_display" ]; then', ' model_display="Unknown"', 'fi', 'context_note="context availability unknown"', 'if [[ "$context_remaining" =~ ^[0-9]+$ ]]; then', ' context_note="${context_remaining}% context available"', 'fi', 'results_file="${LABGATE_RESULTS_DB_PATH:-$HOME/.labgate/results.json}"', 'baseline_file="$HOME/.claude/labgate-statusline.results-baseline.${LABGATE_SESSION:-default}"', 'read_results_count() {', ' local path="${1:-}"', ' [ -n "$path" ] || return 0', ' [ -f "$path" ] || return 0', ' node -e \'', ' const fs = require("fs");', ' const p = process.argv[1];', ' try {', ' const parsed = JSON.parse(fs.readFileSync(p, "utf8"));', ' const rows = Array.isArray(parsed?.results) ? parsed.results : [];', ' process.stdout.write(String(rows.length));', ' } catch {}', ' \' "$path" 2>/dev/null || true', '}', 'current_result_count="$(read_results_count "$results_file")"', 'if ! [[ "$current_result_count" =~ ^[0-9]+$ ]]; then', ' current_result_count="$result_count"', 'fi', 'baseline_result_count=""', 'if [ -f "$baseline_file" ]; then', ' baseline_result_count="$(cat "$baseline_file" 2>/dev/null || true)"', 'fi', 'if ! [[ "$baseline_result_count" =~ ^[0-9]+$ ]]; then', ' baseline_result_count="$current_result_count"', ' printf "%s\\n" "$baseline_result_count" > "$baseline_file" 2>/dev/null || true', 'fi', 'result_delta=$(( current_result_count - baseline_result_count ))', 'if [ "$result_delta" -lt 0 ]; then', ' result_delta=0', 'fi', 'dataset_suffix="s"', 'result_suffix="s"', 'delta_suffix="s"', '[ "$dataset_count" = "1" ] && dataset_suffix=""', '[ "$current_result_count" = "1" ] && result_suffix=""', '[ "$result_delta" = "1" ] && delta_suffix=""', 'delta_note=""', 'if [ "$result_delta" -gt 0 ]; then', ' delta_note=" (${result_delta} new result${delta_suffix} since this session)"', 'fi', 'summary="model ${model_display} | ${context_note} | ${dataset_count} dataset${dataset_suffix} registered | ${current_result_count} result${result_suffix} registered${delta_note}"', 'if [[ "$url" =~ ^https?:// ]]; then', ' echo "LabGate | ${url} -- ${summary}"', 'else', ' echo "LabGate -- ${summary}"', 'fi', 'EOF', 'chmod +x "$HOME/.claude/labgate-statusline.sh"', 'node -e \'', ' const fs = require("fs");', ' const path = process.env.HOME + "/.claude/settings.json";', ' let settings = {};', ' try {', ' if (fs.existsSync(path)) settings = JSON.parse(fs.readFileSync(path, "utf8"));', ' } catch {}', ' settings.statusLine = {', ' type: "command",', ' command: "~/.claude/labgate-statusline.sh",', ' padding: 1,', ' };', ' fs.writeFileSync(path, JSON.stringify(settings, null, 2));', '\'', '');
1285
1287
  }
1286
- const preLaunchLines = [];
1287
1288
  if (agent === 'codex') {
1288
- preLaunchLines.push('labgate_ensure_ca_certificates() {', ' if [ -s /etc/ssl/certs/ca-certificates.crt ] || [ -s /etc/ssl/cert.pem ]; then', ' return 0', ' fi', ' if [ "$(id -u)" != "0" ]; then', ' echo "[labgate] Warning: missing CA certificates and no root access to install them; Codex login may fail." >&2', ' return 0', ' fi', ' echo "[labgate] Installing ca-certificates for Codex TLS..."', ' if command -v apt-get >/dev/null 2>&1; then', ' export DEBIAN_FRONTEND=noninteractive', ' apt-get update >/dev/null 2>&1 || return 0', ' apt-get install -y ca-certificates >/dev/null 2>&1 || return 0', ' update-ca-certificates >/dev/null 2>&1 || true', ' return 0', ' fi', ' if command -v apk >/dev/null 2>&1; then', ' apk add --no-cache ca-certificates >/dev/null 2>&1 || return 0', ' update-ca-certificates >/dev/null 2>&1 || true', ' return 0', ' fi', ' if command -v dnf >/dev/null 2>&1; then', ' dnf install -y ca-certificates >/dev/null 2>&1 || return 0', ' return 0', ' fi', ' if command -v yum >/dev/null 2>&1; then', ' yum install -y ca-certificates >/dev/null 2>&1 || return 0', ' return 0', ' fi', ' if command -v microdnf >/dev/null 2>&1; then', ' microdnf install -y ca-certificates >/dev/null 2>&1 || return 0', ' fi', '}', 'labgate_ensure_ca_certificates', 'if [ "${LABGATE_CODEX_PODMAN_DARWIN_WORKAROUND:-}" = "1" ]; then', ' if ! codex login status >/dev/null 2>&1; then', ' echo "[labgate] Starting Codex device-code login (Podman macOS callback workaround)..."', ' codex login --device-auth', ' fi', 'fi');
1289
+ preLaunchLines.push('labgate_ensure_ca_certificates() {', ' if [ -s /etc/ssl/certs/ca-certificates.crt ] || [ -s /etc/ssl/cert.pem ]; then', ' return 0', ' fi', ' if [ "$(id -u)" != "0" ]; then', ' echo "[labgate] Warning: missing CA certificates and no root access to install them; Codex login may fail." >&2', ' return 0', ' fi', ' echo "[labgate] Installing ca-certificates for Codex TLS..."', ' if command -v apt-get >/dev/null 2>&1; then', ' export DEBIAN_FRONTEND=noninteractive', ' apt-get update >/dev/null 2>&1 || return 0', ' apt-get install -y ca-certificates >/dev/null 2>&1 || return 0', ' update-ca-certificates >/dev/null 2>&1 || true', ' return 0', ' fi', ' if command -v apk >/dev/null 2>&1; then', ' apk add --no-cache ca-certificates >/dev/null 2>&1 || return 0', ' update-ca-certificates >/dev/null 2>&1 || true', ' return 0', ' fi', ' if command -v dnf >/dev/null 2>&1; then', ' dnf install -y ca-certificates >/dev/null 2>&1 || return 0', ' return 0', ' fi', ' if command -v yum >/dev/null 2>&1; then', ' yum install -y ca-certificates >/dev/null 2>&1 || return 0', ' return 0', ' fi', ' if command -v microdnf >/dev/null 2>&1; then', ' microdnf install -y ca-certificates >/dev/null 2>&1 || return 0', ' fi', '}', 'labgate_ensure_ca_certificates', 'if [ "${LABGATE_CODEX_PODMAN_DARWIN_WORKAROUND:-}" = "1" ] || [ "${LABGATE_CODEX_APPTAINER_REMOTE_DEVICE_AUTH:-}" = "1" ]; then', ' if ! codex login status >/dev/null 2>&1; then', ' if [ "${LABGATE_CODEX_PODMAN_DARWIN_WORKAROUND:-}" = "1" ]; then', ' echo "[labgate] Starting Codex device-code login (Podman macOS callback workaround)..."', ' else', ' echo "[labgate] Starting Codex device-code login (Apptainer remote login flow)..."', ' fi', ' if ! codex login --device-auth; then', ' echo "[labgate] Warning: Codex device-code login preflight failed; continuing with normal Codex startup." >&2', ' fi', ' fi', 'fi');
1289
1290
  }
1290
1291
  lines.push(`if ! command -v ${setup.bin} >/dev/null 2>&1; then`, ` ${setup.installer}`, 'fi', ...preLaunchLines, `echo "[labgate] Starting ${setup.bin} in /work"`, `exec ${setup.bin}`);
1291
1292
  return lines.join('\n');
@@ -1315,6 +1316,21 @@ function osc52Copy(text) {
1315
1316
  const tty = process.stderr.isTTY ? process.stderr : process.stdout;
1316
1317
  tty.write(`\x1b]52;c;${encoded}\x07`);
1317
1318
  }
1319
+ function supportsTerminalHyperlinks() {
1320
+ if (!(process.stderr.isTTY ?? false))
1321
+ return false;
1322
+ if (process.env.LABGATE_HYPERLINKS === '0')
1323
+ return false;
1324
+ if ((process.env.TERM || '').toLowerCase() === 'dumb')
1325
+ return false;
1326
+ return true;
1327
+ }
1328
+ function formatTerminalHyperlink(url) {
1329
+ if (!supportsTerminalHyperlinks())
1330
+ return url;
1331
+ const safe = String(url || '').replace(/[\u001b\u0007]/g, '');
1332
+ return `\u001b]8;;${safe}\u0007${url}\u001b]8;;\u0007`;
1333
+ }
1318
1334
  const OAUTH_URL_DEDUPE_WINDOW_MS = 20_000;
1319
1335
  let lastHandledOAuthUrl = '';
1320
1336
  let lastHandledOAuthAt = 0;
@@ -1387,6 +1403,7 @@ function handleOAuthUrl(url, options) {
1387
1403
  const normalizedUrl = normalizeClaudeOAuthUrl(url);
1388
1404
  if (!normalizedUrl)
1389
1405
  return;
1406
+ const displayUrl = formatTerminalHyperlink(normalizedUrl);
1390
1407
  const now = Date.now();
1391
1408
  if (normalizedUrl === lastHandledOAuthUrl && (now - lastHandledOAuthAt) < OAUTH_URL_DEDUPE_WINDOW_MS) {
1392
1409
  return;
@@ -1396,7 +1413,7 @@ function handleOAuthUrl(url, options) {
1396
1413
  if (options.isRemote) {
1397
1414
  // SSH / headless: push URL to local clipboard via OSC 52 if supported.
1398
1415
  osc52Copy(normalizedUrl);
1399
- log.info(`Login URL:\n${normalizedUrl}`);
1416
+ log.info(`Login URL:\n${displayUrl}`);
1400
1417
  log.info('Tried to copy URL via terminal clipboard (OSC 52).');
1401
1418
  log.info('Open it in your local browser, then paste the code back here.');
1402
1419
  return;
@@ -1412,7 +1429,7 @@ function handleOAuthUrl(url, options) {
1412
1429
  }
1413
1430
  catch {
1414
1431
  log.warn('Could not auto-open browser. URL copied to clipboard (if available).');
1415
- log.info(`Login URL:\n${normalizedUrl}`);
1432
+ log.info(`Login URL:\n${displayUrl}`);
1416
1433
  }
1417
1434
  return;
1418
1435
  }
@@ -1424,7 +1441,7 @@ function handleOAuthUrl(url, options) {
1424
1441
  catch {
1425
1442
  osc52Copy(normalizedUrl);
1426
1443
  log.warn('Could not auto-open browser. Tried clipboard copy via terminal.');
1427
- log.info(`Login URL:\n${normalizedUrl}`);
1444
+ log.info(`Login URL:\n${displayUrl}`);
1428
1445
  }
1429
1446
  }
1430
1447
  /**
@@ -1756,9 +1773,16 @@ async function startSession(session) {
1756
1773
  (0, os_1.platform)() === 'darwin')
1757
1774
  ? ['--env', 'LABGATE_CODEX_PODMAN_DARWIN_WORKAROUND=1']
1758
1775
  : [];
1776
+ const codexApptainerRemoteDeviceAuth = (runtime === 'apptainer' &&
1777
+ session.agent === 'codex' &&
1778
+ tokenEnv.length === 0 &&
1779
+ !canOpenBrowser())
1780
+ ? ['--env', 'LABGATE_CODEX_APPTAINER_REMOTE_DEVICE_AUTH=1']
1781
+ : [];
1759
1782
  const runtimeEnvArgs = [
1760
1783
  ...claudeEnvGuard,
1761
1784
  ...codexPodmanDarwinLoginWorkaround,
1785
+ ...codexApptainerRemoteDeviceAuth,
1762
1786
  ...tokenEnv,
1763
1787
  ...(browserHook?.env ?? []),
1764
1788
  ];