@thinkrun/cli 0.1.30 → 0.1.31

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.
@@ -18,6 +18,7 @@ import { createInstallCommand } from '../src/commands/install.js';
18
18
  import { createSessionDebugCommand } from '../src/commands/session-debug.js';
19
19
  import { createSetupCommand } from '../src/commands/setup.js';
20
20
  import { createAnalyzeCommand } from '../src/commands/analyze.js';
21
+ import { createSessionsCommand } from '../src/commands/sessions.js';
21
22
  import { createReleaseCommand } from '../src/commands/release.js';
22
23
  import { createAgentInitCommand } from '../src/commands/agent-init.js';
23
24
  import { createNavigateCommand, createClickCommand, createClickAtCommand, createTypeCommand, createFillCommand, createScrollCommand, createWaitCommand, createWaitForTextCommand, createHoverCommand, createSelectCommand, createPressCommand, createBackCommand, createForwardCommand, createResumeCommand, createSnapshotCommand, createScreenshotCommand, createExtractCommand, createEvaluateCommand, createDialogCommand, createConsoleCommand, createNetworkCommand, createTabsCommand, createNewTabCommand, createCloseTabCommand, createAttachCommand, createUrlCommand, createTitleCommand, createHtmlCommand, createClearLogsCommand, createSwitchTabCommand, createFocusCommand, createNewWindowCommand, createTaskCommand, createTaskStatusCommand, createTaskCancelCommand, } from '../src/commands/actions.js';
@@ -111,6 +112,8 @@ program.addCommand(createTaskStatusCommand());
111
112
  program.addCommand(createTaskCancelCommand());
112
113
  // Recording analysis
113
114
  program.addCommand(createAnalyzeCommand());
115
+ // Session + recording listing
116
+ program.addCommand(createSessionsCommand());
114
117
  // On SIGINT (Ctrl-C) or SIGTERM (kill/Docker/systemd), send a best-effort
115
118
  // local-close to the activity feed so the session is marked failed rather
116
119
  // than left in a running/orphaned state. Uses synchronous spawnSync inside
@@ -1 +1 @@
1
- {"version":3,"file":"thinkrun.js","sourceRoot":"","sources":["../../bin/thinkrun.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"thinkrun.js","sourceRoot":"","sources":["../../bin/thinkrun.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ export interface TabAuditState {
2
+ tabId: string;
3
+ enabled: boolean;
4
+ updatedAt: string;
5
+ explicit?: boolean;
6
+ }
7
+
8
+ export type AuditStateSource = 'flag' | 'env' | 'stored' | 'default';
9
+
10
+ export interface ResolveTabAuditStateArgs {
11
+ tabId?: string | number;
12
+ flagEnabled?: boolean;
13
+ envValue?: string | undefined;
14
+ }
15
+
16
+ export interface ResolvedTabAuditState {
17
+ enabled: boolean;
18
+ source: AuditStateSource;
19
+ stored?: TabAuditState | undefined;
20
+ }
21
+
22
+ export function getTabAuditStateFilePath(tabId: string | number): string;
23
+ export function parseAuditPreference(value: string | undefined): boolean | undefined;
24
+ export function readTabAuditState(tabId: string | number): TabAuditState | undefined;
25
+ export function writeTabAuditState(
26
+ tabId: string | number,
27
+ enabled: boolean,
28
+ updatedAt?: string,
29
+ options?: { explicit?: boolean },
30
+ ): TabAuditState;
31
+ export function clearTabAuditState(tabId: string | number): void;
32
+ export function resolveTabAuditState(args?: ResolveTabAuditStateArgs): ResolvedTabAuditState;
@@ -0,0 +1,99 @@
1
+ import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { join } from 'node:path';
4
+
5
+ function getLockDir() {
6
+ const configuredDir = process.env.THINKRUN_LOCK_DIR ?? process.env.THINKBROWSE_LOCK_DIR;
7
+ if (configuredDir) return configuredDir;
8
+
9
+ const thinkrunDir = join(homedir(), '.thinkrun');
10
+ const thinkbrowseDir = join(homedir(), '.thinkbrowse');
11
+ if (!existsSync(thinkrunDir) && existsSync(thinkbrowseDir)) {
12
+ return thinkbrowseDir;
13
+ }
14
+ return thinkrunDir;
15
+ }
16
+
17
+ function sanitizeTabId(tabId) {
18
+ return String(tabId).replace(/[^a-zA-Z0-9_-]/g, '_') || 'unknown';
19
+ }
20
+
21
+ export function getTabAuditStateFilePath(tabId) {
22
+ return join(getLockDir(), 'audit-states', `${sanitizeTabId(tabId)}.json`);
23
+ }
24
+
25
+ export function parseAuditPreference(value) {
26
+ if (typeof value !== 'string') return undefined;
27
+ const normalized = value.trim().toLowerCase();
28
+ if (!normalized) return undefined;
29
+ if (['1', 'true', 'on', 'yes'].includes(normalized)) return true;
30
+ if (['0', 'false', 'off', 'no'].includes(normalized)) return false;
31
+ return undefined;
32
+ }
33
+
34
+ export function readTabAuditState(tabId) {
35
+ try {
36
+ const filePath = getTabAuditStateFilePath(tabId);
37
+ if (!existsSync(filePath)) return undefined;
38
+ const data = JSON.parse(readFileSync(filePath, 'utf-8'));
39
+ if (
40
+ !data
41
+ || typeof data !== 'object'
42
+ || typeof data.enabled !== 'boolean'
43
+ || typeof data.updatedAt !== 'string'
44
+ ) {
45
+ return undefined;
46
+ }
47
+ return {
48
+ tabId: String(tabId),
49
+ enabled: data.enabled,
50
+ updatedAt: data.updatedAt,
51
+ explicit: data.explicit === true,
52
+ };
53
+ } catch {
54
+ return undefined;
55
+ }
56
+ }
57
+
58
+ export function writeTabAuditState(tabId, enabled, updatedAt = new Date().toISOString(), options = {}) {
59
+ const state = {
60
+ tabId: String(tabId),
61
+ enabled: Boolean(enabled),
62
+ updatedAt,
63
+ ...(options.explicit === true ? { explicit: true } : {}),
64
+ };
65
+ const filePath = getTabAuditStateFilePath(tabId);
66
+ mkdirSync(join(getLockDir(), 'audit-states'), { recursive: true });
67
+ writeFileSync(filePath, JSON.stringify(state, null, 2), 'utf-8');
68
+ return state;
69
+ }
70
+
71
+ export function clearTabAuditState(tabId) {
72
+ try {
73
+ rmSync(getTabAuditStateFilePath(tabId), { force: true });
74
+ } catch {
75
+ // best-effort cleanup
76
+ }
77
+ }
78
+
79
+ export function resolveTabAuditState({
80
+ tabId,
81
+ flagEnabled = false,
82
+ envValue = process.env.THINKRUN_AUDIT,
83
+ } = {}) {
84
+ const stored = tabId !== undefined && tabId !== null ? readTabAuditState(tabId) : undefined;
85
+ if (flagEnabled) {
86
+ return { enabled: true, source: 'flag', stored };
87
+ }
88
+
89
+ const envEnabled = parseAuditPreference(envValue);
90
+ if (envEnabled !== undefined) {
91
+ return { enabled: envEnabled, source: 'env', stored };
92
+ }
93
+
94
+ if (stored) {
95
+ return { enabled: stored.enabled, source: 'stored', stored };
96
+ }
97
+
98
+ return { enabled: false, source: 'default', stored };
99
+ }
@@ -0,0 +1,12 @@
1
+ export interface PatchLocalAuditStateArgs {
2
+ sessionId: string;
3
+ enabled: boolean;
4
+ updatedAt?: string | undefined;
5
+ apiKey: string;
6
+ apiUrl?: string | undefined;
7
+ fetchFn?: typeof fetch | undefined;
8
+ timeoutMs?: number | undefined;
9
+ }
10
+
11
+ export function unrefAbortSignal(ms: number): AbortSignal;
12
+ export function patchLocalAuditState(args: PatchLocalAuditStateArgs): Promise<boolean>;
@@ -0,0 +1,38 @@
1
+ export function unrefAbortSignal(ms) {
2
+ const controller = new AbortController();
3
+ const timer = setTimeout(() => controller.abort(), ms);
4
+ if (typeof timer?.unref === 'function') timer.unref();
5
+ return controller.signal;
6
+ }
7
+
8
+ export function patchLocalAuditState({
9
+ sessionId,
10
+ enabled,
11
+ updatedAt,
12
+ apiKey,
13
+ apiUrl = 'https://api.thinkrun.ai',
14
+ fetchFn = globalThis.fetch,
15
+ timeoutMs = 10_000,
16
+ } = {}) {
17
+ if (typeof sessionId !== 'string' || sessionId.length === 0) return Promise.resolve(false);
18
+ if (typeof apiKey !== 'string' || apiKey.length === 0) return Promise.resolve(false);
19
+ if (typeof apiUrl !== 'string' || !apiUrl.startsWith('https://')) return Promise.resolve(false);
20
+
21
+ try {
22
+ return fetchFn(`${apiUrl}/api/sessions/${sessionId}/local-audit`, {
23
+ method: 'PATCH',
24
+ headers: { 'Content-Type': 'application/json', 'x-api-key': apiKey },
25
+ body: JSON.stringify({
26
+ enabled: Boolean(enabled),
27
+ ...(typeof updatedAt === 'string' ? { updatedAt } : {}),
28
+ }),
29
+ signal: unrefAbortSignal(timeoutMs),
30
+ }).then((res) => {
31
+ const delivered = res.ok;
32
+ res.body?.cancel?.().catch(() => {});
33
+ return delivered;
34
+ }).catch(() => false);
35
+ } catch {
36
+ return Promise.resolve(false);
37
+ }
38
+ }
@@ -0,0 +1 @@
1
+ export declare function redactSensitiveResult(value: unknown): unknown;
@@ -0,0 +1,112 @@
1
+ const SENSITIVE_RESULT_PATTERNS = [
2
+ {
3
+ key: /^pass(?:word)?$/i,
4
+ json: /("pass(?:word)?"\s*:\s*)"[^"]*"/gi,
5
+ quotedDouble: /(pass(?:word)?\s*[=:]\s*)"[^"]*"/gi,
6
+ quotedSingle: /(pass(?:word)?\s*[=:]\s*)'[^']*'/gi,
7
+ plain: /(pass(?:word)?\s*[=:]\s*)(?!["'])([^,;&\n]+?)(?=(?:\s+[a-z0-9_-]+\s*[=:])|[,;&]|$)/gi,
8
+ },
9
+ {
10
+ key: /^[a-z0-9_-]*token$/i,
11
+ json: /("[a-z0-9_-]*token"\s*:\s*)"[^"]*"/gi,
12
+ quotedDouble: /([a-z0-9_-]*token\s*[=:]\s*)"[^"]*"/gi,
13
+ quotedSingle: /([a-z0-9_-]*token\s*[=:]\s*)'[^']*'/gi,
14
+ plain: /([a-z0-9_-]*token\s*[=:]\s*)(?!["'])([^,;&\n]+?)(?=(?:\s+[a-z0-9_-]+\s*[=:])|[,;&]|$)/gi,
15
+ },
16
+ {
17
+ key: /^[a-z0-9_-]*secret$/i,
18
+ json: /("[a-z0-9_-]*secret"\s*:\s*)"[^"]*"/gi,
19
+ quotedDouble: /([a-z0-9_-]*secret\s*[=:]\s*)"[^"]*"/gi,
20
+ quotedSingle: /([a-z0-9_-]*secret\s*[=:]\s*)'[^']*'/gi,
21
+ plain: /([a-z0-9_-]*secret\s*[=:]\s*)(?!["'])([^,;&\n]+?)(?=(?:\s+[a-z0-9_-]+\s*[=:])|[,;&]|$)/gi,
22
+ },
23
+ {
24
+ key: /^[a-z0-9_-]*credential$/i,
25
+ json: /("[a-z0-9_-]*credential"\s*:\s*)"[^"]*"/gi,
26
+ quotedDouble: /([a-z0-9_-]*credential\s*[=:]\s*)"[^"]*"/gi,
27
+ quotedSingle: /([a-z0-9_-]*credential\s*[=:]\s*)'[^']*'/gi,
28
+ plain: /([a-z0-9_-]*credential\s*[=:]\s*)(?!["'])([^,;&\n]+?)(?=(?:\s+[a-z0-9_-]+\s*[=:])|[,;&]|$)/gi,
29
+ },
30
+ {
31
+ key: /^[a-z0-9_-]*api[-_]?key$/i,
32
+ json: /("[a-z0-9_-]*api[-_]?key"\s*:\s*)"[^"]*"/gi,
33
+ quotedDouble: /([a-z0-9_-]*api[-_]?key\s*[=:]\s*)"[^"]*"/gi,
34
+ quotedSingle: /([a-z0-9_-]*api[-_]?key\s*[=:]\s*)'[^']*'/gi,
35
+ plain: /([a-z0-9_-]*api[-_]?key\s*[=:]\s*)(?!["'])([^,;&\n]+?)(?=(?:\s+[a-z0-9_-]+\s*[=:])|[,;&]|$)/gi,
36
+ },
37
+ {
38
+ key: /^auth(?:orization)?$/i,
39
+ json: /("auth(?:orization)?"\s*:\s*)"[^"]*"/gi,
40
+ quotedDouble: /(auth(?:orization)?\s*[=:]\s*)"[^"]*"/gi,
41
+ quotedSingle: /(auth(?:orization)?\s*[=:]\s*)'[^']*'/gi,
42
+ plain: /(auth(?:orization)?\s*[=:]\s*)(?!["'])([^,;&\n]+?)(?=(?:\s+[a-z0-9_-]+\s*[=:])|[,;&]|$)/gi,
43
+ },
44
+ {
45
+ key: /^set-cookie$/i,
46
+ json: /("set-cookie"\s*:\s*)"[^"]*"/gi,
47
+ quotedDouble: /(set-cookie\s*[=:]\s*)"[^"]*"/gi,
48
+ quotedSingle: /(set-cookie\s*[=:]\s*)'[^']*'/gi,
49
+ plain: /(set-cookie\s*[=:]\s*)(?!["'])([^,;&\n]+?)(?=(?:\s+[a-z0-9_-]+\s*[=:])|[,;&]|$)/gi,
50
+ },
51
+ {
52
+ key: /^cookie$/i,
53
+ json: /("cookie"\s*:\s*)"[^"]*"/gi,
54
+ quotedDouble: /(cookie\s*[=:]\s*)"[^"]*"/gi,
55
+ quotedSingle: /(cookie\s*[=:]\s*)'[^']*'/gi,
56
+ plain: /(cookie\s*[=:]\s*)(?!["'])([^,;&\n]+?)(?=(?:\s+[a-z0-9_-]+\s*[=:])|[,;&]|$)/gi,
57
+ },
58
+ ];
59
+
60
+ function isSensitiveResultKey(key) {
61
+ return SENSITIVE_RESULT_PATTERNS.some((pattern) => pattern.key.test(key));
62
+ }
63
+
64
+ function isPlainObject(value) {
65
+ if (!value || typeof value !== 'object') return false;
66
+ const prototype = Object.getPrototypeOf(value);
67
+ return prototype === Object.prototype || prototype === null;
68
+ }
69
+
70
+ export function redactSensitiveResult(value) {
71
+ if (typeof value === 'string') {
72
+ let redacted = value;
73
+ for (const pattern of SENSITIVE_RESULT_PATTERNS) {
74
+ redacted = redacted
75
+ .replace(pattern.json, '$1"[REDACTED]"')
76
+ .replace(pattern.quotedDouble, '$1"[REDACTED]"')
77
+ .replace(pattern.quotedSingle, "$1'[REDACTED]'")
78
+ .replace(pattern.plain, '$1[REDACTED]');
79
+ }
80
+ return redacted;
81
+ }
82
+
83
+ if (Array.isArray(value)) {
84
+ return value.map((entry) => redactSensitiveResult(entry));
85
+ }
86
+
87
+ if (isPlainObject(value)) {
88
+ const hasSensitiveHeaderName = ['name', 'key', 'header'].some((field) => (
89
+ typeof value[field] === 'string' && isSensitiveResultKey(value[field])
90
+ ));
91
+ return Object.fromEntries(
92
+ Object.entries(value).map(([key, entry]) => {
93
+ const lowerKey = key.toLowerCase();
94
+ const redactByContext = hasSensitiveHeaderName && ['value', 'text', 'content'].includes(lowerKey);
95
+ return [
96
+ key,
97
+ isSensitiveResultKey(key) || redactByContext ? '[REDACTED]' : redactSensitiveResult(entry),
98
+ ];
99
+ }),
100
+ );
101
+ }
102
+
103
+ if (value && typeof value === 'object' && typeof value.toJSON === 'function') {
104
+ try {
105
+ return redactSensitiveResult(value.toJSON());
106
+ } catch {
107
+ return value;
108
+ }
109
+ }
110
+
111
+ return value;
112
+ }
@@ -9,7 +9,7 @@ import { join } from 'path';
9
9
  import { randomUUID } from 'crypto';
10
10
  import { ApiError, SessionError } from '../errors.js';
11
11
  import { config } from '../config/store.js';
12
- import { resolveTabAuditState } from '@thinkrun/shared/audit-state';
12
+ import { resolveTabAuditState } from '../../shared/audit-state.js';
13
13
  import { readBridgePort, DEFAULT_BRIDGE_PORT, BRIDGE_HEALTH_PROBE_TIMEOUT_MS, BRIDGE_REQUEST_TIMEOUT_MS, unwrapEvaluatePayload, } from '../utils.js';
14
14
  import { clearLocalSessionContext, getLocalSessionContext, setLocalSessionContext } from '../session/context.js';
15
15
  import { initCliSession, syncBrowserAction, syncScreenshotAction, closeCliSession, readCliSessionId, readCliNetworkCursor, readCliAuditScreenshotState, writeCliNetworkCursor, writeCliAuditScreenshotState, unrefAbortSignal, } from '../session/cli-session-sync.js';
@@ -23,7 +23,7 @@ import { captureFingerprint, compareFingerprints } from '../obstacle-recovery/st
23
23
  import { classifyElementFailure } from '../obstacle-recovery/obstacle-classifier.js';
24
24
  import { getLocalCommandRetryProfileFromPath, } from './local-command-retry.js';
25
25
  import { LOCAL_BRIDGE_TYPED_TRANSPORT_RECOVERY_ATTEMPTS, LOCAL_BRIDGE_TYPED_EXTENSION_REVALIDATION_DELAYS_MS, LOCAL_BRIDGE_TYPED_RECENT_DISCONNECT_GRACE_MS, } from '../local-bridge-timing.js';
26
- import { redactSensitiveResult } from '@thinkrun/shared/sensitive-result-redaction';
26
+ import { redactSensitiveResult } from '../../shared/sensitive-result-redaction.js';
27
27
  /** Tunable post-action settle delay (ms). React batches setState updates
28
28
  * (~16ms); 50ms gives margin for async DOM mutations to settle. */
29
29
  const POST_ACTION_SETTLE_MS = 50;
@@ -12,7 +12,7 @@ import { handleError, readBridgePort, BRIDGE_HEALTH_PROBE_TIMEOUT_MS, BRIDGE_REQ
12
12
  import { isJsonMode } from '../output/mode.js';
13
13
  import { emitJson, createSpinner } from '../output/formatter.js';
14
14
  import { config } from '../config/store.js';
15
- import { resolveTabAuditState, writeTabAuditState } from '@thinkrun/shared/audit-state';
15
+ import { resolveTabAuditState, writeTabAuditState } from '../../shared/audit-state.js';
16
16
  import { clearLocalSessionContext, getCloudSessionContext, getLocalSessionContext, setLocalSessionContext, } from '../session/context.js';
17
17
  import { isBlockedOutcome } from '../protected-flow/types.js';
18
18
  import { setWorkingLocation, releaseWorkingLocation, getLockedBy } from '../working-location.js';
@@ -6,6 +6,5 @@
6
6
  * thinkrun analyze <recording-id> [--output json|markdown|stdout] [--save]
7
7
  */
8
8
  import { Command } from 'commander';
9
- export declare function buildHeadersForApiKey(apiKey?: string): Record<string, string>;
10
9
  export declare function createAnalyzeCommand(): Command;
11
10
  //# sourceMappingURL=analyze.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/commands/analyze.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAS7E;AAkID,wBAAgB,oBAAoB,IAAI,OAAO,CAwF9C"}
1
+ {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/commands/analyze.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmJpC,wBAAgB,oBAAoB,IAAI,OAAO,CAwF9C"}
@@ -11,6 +11,7 @@ import { writeFileSync } from 'fs';
11
11
  import { config } from '../config/store.js';
12
12
  import { isJsonMode } from '../output/mode.js';
13
13
  import { emitJson, createSpinner } from '../output/formatter.js';
14
+ import { buildHeadersForApiKey } from '../shared/api-helpers.js';
14
15
  const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
15
16
  const ANALYZE_TIMEOUT_MS = 120_000; // 2 minutes
16
17
  function getApiBase() {
@@ -19,16 +20,6 @@ function getApiBase() {
19
20
  function getApiKey() {
20
21
  return config.get('apiKey');
21
22
  }
22
- export function buildHeadersForApiKey(apiKey) {
23
- const headers = { 'Content-Type': 'application/json' };
24
- const key = apiKey?.trim();
25
- if (key) {
26
- // Transitional: send both shapes so older gateways that only read one header still authenticate.
27
- headers['X-API-Key'] = key;
28
- headers['Authorization'] = `Bearer ${key}`;
29
- }
30
- return headers;
31
- }
32
23
  function buildHeaders() {
33
24
  return buildHeadersForApiKey(getApiKey());
34
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/commands/analyze.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/commands/analyze.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Command } from 'commander';
2
2
  import chalk from 'chalk';
3
- import { readTabAuditState, resolveTabAuditState, writeTabAuditState, } from '@thinkrun/shared/audit-state';
3
+ import { readTabAuditState, resolveTabAuditState, writeTabAuditState, } from '../../shared/audit-state.js';
4
4
  import { getLocalSessionContext } from '../session/context.js';
5
5
  import { syncCliAuditState } from '../session/cli-session-sync.js';
6
6
  import { emitJson } from '../output/formatter.js';
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import { Command } from 'commander';
6
6
  import chalk from 'chalk';
7
- import { resolveTabAuditState } from '@thinkrun/shared/audit-state';
7
+ import { resolveTabAuditState } from '../../shared/audit-state.js';
8
8
  import { config } from '../config/store.js';
9
9
  import { resolveRegistrationExtensionIdFromSources } from './install.js';
10
10
  import { isLocalApiUrl, readBridgePort as _readBridgePort, DEFAULT_BRIDGE_PORT as _DEFAULT_BRIDGE_PORT, getBridgePortFileMtimeMs, getStaleBridgePortFileAgeMs, } from '../utils.js';
@@ -0,0 +1,93 @@
1
+ /**
2
+ * sessions command
3
+ * List the two kinds of "sessions" an agent works with:
4
+ * - browser sessions (live cloud automation sessions, /api/sessions)
5
+ * - recording sessions (human feedback recordings, /api/feedback/recordings)
6
+ *
7
+ * Both views are surfaced together so an autonomous loop can see live automation
8
+ * and the recordings it should act on in one call. JSON mode (default for non-TTY)
9
+ * returns a structured envelope; TTY mode renders two grouped sections.
10
+ *
11
+ * Usage:
12
+ * thinkrun sessions [list] [--recordings] [--browsers] [--limit <n>]
13
+ * [--status <s>] [--intent <i>] [--source <src>]
14
+ */
15
+ import { Command } from 'commander';
16
+ import type { Session } from '../types.js';
17
+ /**
18
+ * Clamp a raw --limit value into [1, MAX]; fall back to the default when not a clean number.
19
+ * Uses Number() (not parseInt) so typo'd input like '3z' is rejected to the default rather
20
+ * than silently truncated to 3; Math.trunc drops any fractional part of a valid number.
21
+ */
22
+ export declare function clampLimit(raw: unknown): number;
23
+ /** A trimmed recording-summary row, mirroring GET /api/feedback/recordings list fields. */
24
+ export interface RecordingRow {
25
+ id: string;
26
+ createdAt?: string;
27
+ status?: string;
28
+ source?: string;
29
+ intent?: string;
30
+ title?: string;
31
+ url?: string;
32
+ hasAnalysis?: boolean;
33
+ useCase?: string;
34
+ }
35
+ /**
36
+ * Decide which views to render from the -r/-b flags. Both default to shown; a single
37
+ * flag narrows to that view; passing both is equivalent to passing neither (show both).
38
+ */
39
+ export declare function resolveViews(opts: {
40
+ recordings?: boolean;
41
+ browsers?: boolean;
42
+ }): {
43
+ showRecordings: boolean;
44
+ showBrowsers: boolean;
45
+ };
46
+ /**
47
+ * Decide whether the command failed outright. True only when every view that was
48
+ * REQUESTED ended in error (and at least one error actually occurred). If a requested
49
+ * view succeeded — even with zero rows — the command is a success and exits 0.
50
+ */
51
+ export declare function computeAllFailed(state: {
52
+ showBrowsers: boolean;
53
+ showRecordings: boolean;
54
+ browserError?: string;
55
+ recordingError?: string;
56
+ }): boolean;
57
+ /**
58
+ * Build the JSON-envelope `data` payload. A view's fields are set to `undefined` when
59
+ * that view wasn't requested; `emitJson`/`JSON.stringify` then drops them, so the
60
+ * envelope only carries the views the caller asked for.
61
+ */
62
+ export declare function buildEnvelopeData(state: {
63
+ showBrowsers: boolean;
64
+ showRecordings: boolean;
65
+ browserSessions: Session[];
66
+ browserError?: string;
67
+ recordings: RecordingRow[];
68
+ recordingError?: string;
69
+ recordingsTruncatedByScan?: boolean;
70
+ recordingsScanned?: number;
71
+ }): Record<string, unknown>;
72
+ /** Shape raw list-endpoint summaries into trimmed rows, applying an optional client-side source filter. */
73
+ export declare function mapRecordingRows(raw: Array<Record<string, any>> | null | undefined, sourceFilter?: string): RecordingRow[];
74
+ /**
75
+ * Collect up to `limit` rows matching `source` by paging the source-fetcher. The list
76
+ * endpoint can't filter by `source` server-side, so a naive "fetch limit then filter"
77
+ * would drop valid matches that sit past the first page. We page (bounded by `maxScan`
78
+ * to avoid runaway) until we have `limit` matches or the source is exhausted.
79
+ * `scanned` reports how many raw rows were examined so callers can detect a cap hit.
80
+ * Pure except for the injected `fetchPage` — unit-tested with a fake fetcher.
81
+ */
82
+ export declare function collectSourceMatches(fetchPage: (offset: number, pageSize: number) => Promise<any[]>, opts: {
83
+ limit: number;
84
+ source: string;
85
+ pageSize?: number;
86
+ maxScan?: number;
87
+ }): Promise<{
88
+ rows: RecordingRow[];
89
+ scanned: number;
90
+ exhausted: boolean;
91
+ }>;
92
+ export declare function createSessionsCommand(): Command;
93
+ //# sourceMappingURL=sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/commands/sessions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAY3C;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAI/C;AAUD,2FAA2F;AAC3F,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAoBD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG;IAChF,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;CACvB,CAOA;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAKV;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyB1B;AAED,2GAA2G;AAC3G,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,EAClD,YAAY,CAAC,EAAE,MAAM,GACpB,YAAY,EAAE,CAiBhB;AAwCD;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC,EAC/D,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3E,OAAO,CAAC;IAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAiCxE;AAyBD,wBAAgB,qBAAqB,IAAI,OAAO,CA+J/C"}
@@ -0,0 +1,354 @@
1
+ /**
2
+ * sessions command
3
+ * List the two kinds of "sessions" an agent works with:
4
+ * - browser sessions (live cloud automation sessions, /api/sessions)
5
+ * - recording sessions (human feedback recordings, /api/feedback/recordings)
6
+ *
7
+ * Both views are surfaced together so an autonomous loop can see live automation
8
+ * and the recordings it should act on in one call. JSON mode (default for non-TTY)
9
+ * returns a structured envelope; TTY mode renders two grouped sections.
10
+ *
11
+ * Usage:
12
+ * thinkrun sessions [list] [--recordings] [--browsers] [--limit <n>]
13
+ * [--status <s>] [--intent <i>] [--source <src>]
14
+ */
15
+ import { Command } from 'commander';
16
+ import chalk from 'chalk';
17
+ import { config } from '../config/store.js';
18
+ import { isJsonMode } from '../output/mode.js';
19
+ import { emitJson, createSpinner } from '../output/formatter.js';
20
+ import { CloudAdapter } from '../adapters/cloud.js';
21
+ import { buildHeadersForApiKey } from '../shared/api-helpers.js';
22
+ const RECORDINGS_TIMEOUT_MS = 30_000;
23
+ const DEFAULT_RECORDINGS_LIMIT = 20;
24
+ const MAX_RECORDINGS_LIMIT = 200;
25
+ // Upper bound on raw rows scanned when paging for a client-side --source filter, so a
26
+ // rare source can't trigger unbounded paging. Results past this are reported, not silently dropped.
27
+ const MAX_SOURCE_SCAN = 1000;
28
+ // Cap on browser sessions materialized into the render/JSON payload. listSessions() returns
29
+ // every active session; a leaked accumulation of orphaned ones shouldn't blow up the output.
30
+ const MAX_BROWSER_SESSIONS = 100;
31
+ /**
32
+ * Clamp a raw --limit value into [1, MAX]; fall back to the default when not a clean number.
33
+ * Uses Number() (not parseInt) so typo'd input like '3z' is rejected to the default rather
34
+ * than silently truncated to 3; Math.trunc drops any fractional part of a valid number.
35
+ */
36
+ export function clampLimit(raw) {
37
+ const n = Number(raw);
38
+ if (!Number.isFinite(n))
39
+ return DEFAULT_RECORDINGS_LIMIT;
40
+ return Math.min(MAX_RECORDINGS_LIMIT, Math.max(1, Math.trunc(n)));
41
+ }
42
+ function getApiBase() {
43
+ return config.get('apiUrl') || 'https://api.thinkrun.ai';
44
+ }
45
+ function buildHeaders() {
46
+ return buildHeadersForApiKey(config.get('apiKey'));
47
+ }
48
+ /** Short, human-friendly timestamp (UTC). Falls back to the raw value if unparseable. */
49
+ function fmtTime(iso) {
50
+ if (!iso)
51
+ return '—';
52
+ const d = new Date(iso);
53
+ if (Number.isNaN(d.getTime()))
54
+ return iso;
55
+ return d.toISOString().slice(0, 16).replace('T', ' ');
56
+ }
57
+ function shortId(id) {
58
+ return id.length > 8 ? id.slice(0, 8) + '…' : id;
59
+ }
60
+ /** Normalize an error into a one-line message for partial-failure reporting. */
61
+ function errMessage(error) {
62
+ if (error instanceof Error)
63
+ return error.message;
64
+ return String(error);
65
+ }
66
+ /**
67
+ * Decide which views to render from the -r/-b flags. Both default to shown; a single
68
+ * flag narrows to that view; passing both is equivalent to passing neither (show both).
69
+ */
70
+ export function resolveViews(opts) {
71
+ // When neither flag is given, show both. A single flag narrows to that view.
72
+ const neitherSpecified = !opts.recordings && !opts.browsers;
73
+ return {
74
+ showRecordings: Boolean(opts.recordings) || neitherSpecified,
75
+ showBrowsers: Boolean(opts.browsers) || neitherSpecified,
76
+ };
77
+ }
78
+ /**
79
+ * Decide whether the command failed outright. True only when every view that was
80
+ * REQUESTED ended in error (and at least one error actually occurred). If a requested
81
+ * view succeeded — even with zero rows — the command is a success and exits 0.
82
+ */
83
+ export function computeAllFailed(state) {
84
+ const browserDown = !state.showBrowsers || Boolean(state.browserError);
85
+ const recordingDown = !state.showRecordings || Boolean(state.recordingError);
86
+ const anyError = Boolean(state.browserError || state.recordingError);
87
+ return browserDown && recordingDown && anyError;
88
+ }
89
+ /**
90
+ * Build the JSON-envelope `data` payload. A view's fields are set to `undefined` when
91
+ * that view wasn't requested; `emitJson`/`JSON.stringify` then drops them, so the
92
+ * envelope only carries the views the caller asked for.
93
+ */
94
+ export function buildEnvelopeData(state) {
95
+ // Bound the browser-session payload; report the true total + a flag when truncated so a
96
+ // consumer isn't misled by the capped array length.
97
+ const browserTotal = state.browserSessions.length;
98
+ const browserTruncated = state.showBrowsers && browserTotal > MAX_BROWSER_SESSIONS;
99
+ const browserSessionsOut = state.showBrowsers
100
+ ? state.browserSessions.slice(0, MAX_BROWSER_SESSIONS)
101
+ : undefined;
102
+ return {
103
+ browserSessions: browserSessionsOut,
104
+ browserSessionCount: state.showBrowsers ? browserTotal : undefined,
105
+ browserSessionsTruncated: browserTruncated ? true : undefined,
106
+ browserError: state.browserError,
107
+ recordings: state.showRecordings ? state.recordings : undefined,
108
+ recordingCount: state.showRecordings ? state.recordings.length : undefined,
109
+ recordingError: state.recordingError,
110
+ // Only emitted (true) when a --source scan hit its cap before filling --limit, so a
111
+ // consumer can tell "fewer than limit" apart from "scan truncated, more may exist".
112
+ recordingsTruncatedByScan: state.showRecordings && state.recordingsTruncatedByScan ? true : undefined,
113
+ // Raw rows examined during a --source scan (only meaningful when a source filter ran).
114
+ recordingsScanned: state.showRecordings && state.recordingsScanned !== undefined ? state.recordingsScanned : undefined,
115
+ };
116
+ }
117
+ /** Shape raw list-endpoint summaries into trimmed rows, applying an optional client-side source filter. */
118
+ export function mapRecordingRows(raw, sourceFilter) {
119
+ let rows = (raw || []).map((r) => ({
120
+ id: r.id,
121
+ createdAt: r.createdAt,
122
+ status: r.status,
123
+ source: r.source,
124
+ intent: r.metadata?.intent,
125
+ title: r.metadata?.title,
126
+ url: r.metadata?.url,
127
+ hasAnalysis: !!r.hasAnalysis,
128
+ useCase: r.analysisUseCase?.key ?? r.analysisUseCase,
129
+ }));
130
+ if (sourceFilter) {
131
+ const want = sourceFilter.toLowerCase();
132
+ rows = rows.filter((r) => (r.source || '').toLowerCase() === want);
133
+ }
134
+ return rows;
135
+ }
136
+ async function fetchBrowserSessions() {
137
+ const adapter = new CloudAdapter();
138
+ // No explicit timeout here because CloudAdapter.request wraps every fetch in
139
+ // AbortSignal.timeout(defaultTimeout) (60s), so listSessions can't hang indefinitely
140
+ // even though it doesn't take a per-call timeout like the recordings path does.
141
+ return adapter.listSessions();
142
+ }
143
+ /** Fetch one raw page of recording summaries from the list endpoint. */
144
+ async function fetchRecordingsPage(opts) {
145
+ const params = new URLSearchParams();
146
+ params.set('limit', String(opts.limit));
147
+ if (opts.offset > 0)
148
+ params.set('offset', String(opts.offset));
149
+ if (opts.status)
150
+ params.set('status', opts.status);
151
+ if (opts.intent)
152
+ params.set('intent', opts.intent);
153
+ const url = `${getApiBase()}/api/feedback/recordings?${params.toString()}`;
154
+ const res = await fetch(url, {
155
+ method: 'GET',
156
+ headers: buildHeaders(),
157
+ signal: AbortSignal.timeout(RECORDINGS_TIMEOUT_MS),
158
+ });
159
+ if (!res.ok) {
160
+ const body = (await res.json().catch(() => ({})));
161
+ const msg = body?.error || body?.message || `HTTP ${res.status}`;
162
+ throw new Error(msg);
163
+ }
164
+ const data = (await res.json());
165
+ return data.recordings || [];
166
+ }
167
+ /**
168
+ * Collect up to `limit` rows matching `source` by paging the source-fetcher. The list
169
+ * endpoint can't filter by `source` server-side, so a naive "fetch limit then filter"
170
+ * would drop valid matches that sit past the first page. We page (bounded by `maxScan`
171
+ * to avoid runaway) until we have `limit` matches or the source is exhausted.
172
+ * `scanned` reports how many raw rows were examined so callers can detect a cap hit.
173
+ * Pure except for the injected `fetchPage` — unit-tested with a fake fetcher.
174
+ */
175
+ export async function collectSourceMatches(fetchPage, opts) {
176
+ const pageSize = opts.pageSize ?? Math.min(MAX_RECORDINGS_LIMIT, Math.max(opts.limit, 50));
177
+ const maxScan = opts.maxScan ?? MAX_SOURCE_SCAN;
178
+ const matches = [];
179
+ let offset = 0;
180
+ let scanned = 0;
181
+ let exhausted = false;
182
+ while (matches.length < opts.limit && scanned < maxScan) {
183
+ // Cap the request to the remaining scan budget so `scanned` never exceeds `maxScan`
184
+ // (a full page past the budget would otherwise overshoot by up to pageSize-1).
185
+ const requested = Math.min(pageSize, maxScan - scanned);
186
+ const page = await fetchPage(offset, requested);
187
+ if (page.length === 0) {
188
+ exhausted = true;
189
+ break;
190
+ }
191
+ scanned += page.length;
192
+ // Cap what we take from this page to the remaining slots so `matches` never balloons
193
+ // past `limit` on a page full of matches.
194
+ const remaining = opts.limit - matches.length;
195
+ matches.push(...mapRecordingRows(page, opts.source).slice(0, remaining));
196
+ // A short page means the server ran out of data — but only when we asked for a FULL
197
+ // page. If we deliberately capped the request (budget-limited), a short page is just the
198
+ // budget, not exhaustion, and the loop guard will stop us with exhausted=false.
199
+ if (page.length < requested) {
200
+ exhausted = true;
201
+ break;
202
+ }
203
+ offset += page.length;
204
+ }
205
+ return { rows: matches, scanned, exhausted };
206
+ }
207
+ async function fetchRecordings(opts) {
208
+ // No source filter: a single server-side page is exact (no scan to report).
209
+ if (!opts.source) {
210
+ const page = await fetchRecordingsPage({ limit: opts.limit, offset: 0, status: opts.status, intent: opts.intent });
211
+ return { rows: mapRecordingRows(page, undefined), truncatedByScan: false };
212
+ }
213
+ // Source filter: page through (bounded) because the server can't filter by source.
214
+ const { rows, exhausted, scanned } = await collectSourceMatches((offset, pageSize) => fetchRecordingsPage({ limit: pageSize, offset, status: opts.status, intent: opts.intent }), { limit: opts.limit, source: opts.source });
215
+ // We stopped before filling `limit` AND didn't exhaust the data ⇒ the scan cap truncated results.
216
+ const truncatedByScan = rows.length < opts.limit && !exhausted;
217
+ // `scanned` lets a consumer tell "found 0 after scanning 5" from "found 0 after scanning 950".
218
+ return { rows, truncatedByScan, scanned };
219
+ }
220
+ export function createSessionsCommand() {
221
+ const sessionsCmd = new Command('sessions').description('List browser sessions (live automation) and recording sessions (human recordings)');
222
+ const listCmd = new Command('list')
223
+ .description('List active browser sessions and recent recordings')
224
+ .option('-r, --recordings', 'Show only recording sessions')
225
+ .option('-b, --browsers', 'Show only browser sessions')
226
+ .option('-n, --limit <n>', 'Max recordings to list', String(DEFAULT_RECORDINGS_LIMIT))
227
+ .option('--status <status>', 'Filter recordings by status')
228
+ .option('--intent <intent>', 'Filter recordings by intent')
229
+ .option('--source <source>', `Filter recordings by source (cli, extension, web, web-upload). Pages through results to find up to --limit matches (scans at most ${MAX_SOURCE_SCAN} recordings).`)
230
+ .action(async (opts) => {
231
+ const startMs = Date.now();
232
+ // Default to showing both; a single -r/-b narrows to that view.
233
+ const { showRecordings, showBrowsers } = resolveViews(opts);
234
+ const limit = clampLimit(opts.limit);
235
+ const spinner = createSpinner('Fetching sessions...');
236
+ let browserSessions = [];
237
+ let recordings = [];
238
+ let recordingsTruncatedByScan = false;
239
+ let recordingsScanned;
240
+ let browserError;
241
+ let recordingError;
242
+ // Fetch independently so one source failing (e.g. no live sessions vs. auth)
243
+ // still lets the other render.
244
+ await Promise.all([
245
+ showBrowsers
246
+ ? fetchBrowserSessions()
247
+ .then((s) => {
248
+ browserSessions = s;
249
+ })
250
+ .catch((e) => {
251
+ browserError = errMessage(e);
252
+ })
253
+ : Promise.resolve(),
254
+ showRecordings
255
+ ? fetchRecordings({ limit, status: opts.status, intent: opts.intent, source: opts.source })
256
+ .then((r) => {
257
+ recordings = r.rows;
258
+ recordingsTruncatedByScan = r.truncatedByScan;
259
+ recordingsScanned = r.scanned;
260
+ })
261
+ .catch((e) => {
262
+ recordingError = errMessage(e);
263
+ })
264
+ : Promise.resolve(),
265
+ ]);
266
+ // If everything we asked for failed, treat it as a hard error.
267
+ const allFailed = computeAllFailed({ showBrowsers, showRecordings, browserError, recordingError });
268
+ // Stop the spinner before branching so neither the JSON early-return nor the TTY path
269
+ // can leave it spinning.
270
+ spinner.stop();
271
+ if (isJsonMode()) {
272
+ emitJson({
273
+ success: !allFailed,
274
+ command: 'sessions list',
275
+ durationMs: Date.now() - startMs,
276
+ data: buildEnvelopeData({
277
+ showBrowsers,
278
+ showRecordings,
279
+ browserSessions,
280
+ browserError,
281
+ recordings,
282
+ recordingError,
283
+ recordingsTruncatedByScan,
284
+ recordingsScanned,
285
+ }),
286
+ });
287
+ if (allFailed)
288
+ process.exit(1);
289
+ return;
290
+ }
291
+ if (showBrowsers) {
292
+ console.log('');
293
+ if (browserError) {
294
+ console.log(chalk.bold('Browser Sessions:'), chalk.red(`error — ${browserError}`));
295
+ }
296
+ else if (browserSessions.length === 0) {
297
+ console.log(chalk.bold('Browser Sessions (0):'), chalk.gray('none active'));
298
+ console.log(chalk.gray(' Start one with:'), chalk.cyan('thinkrun cloud start'));
299
+ }
300
+ else {
301
+ console.log(chalk.bold(`Browser Sessions (${browserSessions.length}):`));
302
+ const browserShown = browserSessions.slice(0, MAX_BROWSER_SESSIONS);
303
+ for (const s of browserShown) {
304
+ console.log(` ${chalk.gray('○')} ${chalk.cyan(shortId(s.sessionId))} ` +
305
+ `${(s.status || '').padEnd(11)} ${s.currentUrl || s.title || chalk.gray('(no URL)')}`);
306
+ }
307
+ if (browserSessions.length > MAX_BROWSER_SESSIONS) {
308
+ console.log(chalk.yellow(` Note: showing first ${MAX_BROWSER_SESSIONS} of ${browserSessions.length} sessions.`));
309
+ }
310
+ }
311
+ }
312
+ if (showRecordings) {
313
+ console.log('');
314
+ if (recordingError) {
315
+ console.log(chalk.bold('Recording Sessions:'), chalk.red(`error — ${recordingError}`));
316
+ }
317
+ else if (recordings.length === 0) {
318
+ console.log(chalk.bold('Recording Sessions (0):'), chalk.gray('none found'));
319
+ }
320
+ else {
321
+ console.log(chalk.bold(`Recording Sessions (${recordings.length}):`));
322
+ for (const r of recordings) {
323
+ const label = r.title || r.url || chalk.gray('(untitled)');
324
+ const tags = [r.source, r.intent].filter(Boolean).join('/') || '—';
325
+ const analyzed = r.hasAnalysis ? chalk.green('✓analyzed') : chalk.gray('·');
326
+ console.log(` ${chalk.gray('○')} ${chalk.cyan(shortId(r.id))} ` +
327
+ `${fmtTime(r.createdAt)} ${(r.status || '—').padEnd(10)} ` +
328
+ `${tags.padEnd(20)} ${analyzed} ${label}`);
329
+ }
330
+ if (recordingsTruncatedByScan) {
331
+ console.log(chalk.yellow(` Note: stopped after scanning ${recordingsScanned ?? MAX_SOURCE_SCAN} recordings; more --source matches may exist.`));
332
+ }
333
+ console.log('');
334
+ console.log(chalk.gray(' Analyze one with:'), chalk.cyan('thinkrun analyze <recording-id>'));
335
+ }
336
+ }
337
+ console.log('');
338
+ if (allFailed)
339
+ process.exit(1);
340
+ });
341
+ listCmd.addHelpText('after', [
342
+ '',
343
+ 'Notes:',
344
+ " Browser sessions are the same set shown by 'thinkrun cloud list'.",
345
+ ' Partial failure is non-fatal: if one source errors while the other succeeds,',
346
+ " the command still exits 0 with success:true and reports the failure in the",
347
+ " 'browserError' / 'recordingError' field. Consumers must check those fields,",
348
+ ' not just the exit code. Exit is non-zero only when every requested view fails.',
349
+ ].join('\n'));
350
+ // `list` is the default, so `thinkrun sessions` and `thinkrun sessions list` behave alike.
351
+ sessionsCmd.addCommand(listCmd, { isDefault: true });
352
+ return sessionsCmd;
353
+ }
354
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/commands/sessions.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@
14
14
  * (same directory as working-location.json; THINKRUN_LOCK_DIR for
15
15
  * test isolation).
16
16
  */
17
- import { unrefAbortSignal } from '@thinkrun/shared/local-audit-sync';
17
+ import { unrefAbortSignal } from '../../shared/local-audit-sync.js';
18
18
  export { unrefAbortSignal };
19
19
  interface PersistedNetworkCursor {
20
20
  requestId?: string;
@@ -16,8 +16,8 @@
16
16
  */
17
17
  import { existsSync, writeFileSync, readFileSync, unlinkSync } from 'node:fs';
18
18
  import { spawnSync } from 'node:child_process';
19
- import { patchLocalAuditState, unrefAbortSignal } from '@thinkrun/shared/local-audit-sync';
20
- import { resolveTabAuditState } from '@thinkrun/shared/audit-state';
19
+ import { patchLocalAuditState, unrefAbortSignal } from '../../shared/local-audit-sync.js';
20
+ import { resolveTabAuditState } from '../../shared/audit-state.js';
21
21
  import { config } from '../config/store.js';
22
22
  import { getCliSessionFilePath } from '../working-location.js';
23
23
  import { resolveAgentId } from './agent-identity.js';
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Shared helpers for talking to the ThinkRun cloud API. Kept out of any single command
3
+ * module so multiple commands (analyze, sessions, …) can depend on the same auth shape
4
+ * without cross-command imports.
5
+ */
6
+ /**
7
+ * Build request headers for an API key. Sends both `X-API-Key` and `Authorization: Bearer`
8
+ * so older gateways that read only one shape still authenticate. Returns just the
9
+ * Content-Type header when no key is provided.
10
+ */
11
+ export declare function buildHeadersForApiKey(apiKey?: string): Record<string, string>;
12
+ //# sourceMappingURL=api-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-helpers.d.ts","sourceRoot":"","sources":["../../../src/shared/api-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQ7E"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Shared helpers for talking to the ThinkRun cloud API. Kept out of any single command
3
+ * module so multiple commands (analyze, sessions, …) can depend on the same auth shape
4
+ * without cross-command imports.
5
+ */
6
+ /**
7
+ * Build request headers for an API key. Sends both `X-API-Key` and `Authorization: Bearer`
8
+ * so older gateways that read only one shape still authenticate. Returns just the
9
+ * Content-Type header when no key is provided.
10
+ */
11
+ export function buildHeadersForApiKey(apiKey) {
12
+ const headers = { 'Content-Type': 'application/json' };
13
+ const key = apiKey?.trim();
14
+ if (key) {
15
+ headers['X-API-Key'] = key;
16
+ headers['Authorization'] = `Bearer ${key}`;
17
+ }
18
+ return headers;
19
+ }
20
+ //# sourceMappingURL=api-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-helpers.js","sourceRoot":"","sources":["../../../src/shared/api-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAe;IACnD,MAAM,OAAO,GAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;IAC/E,MAAM,GAAG,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC;IAC3B,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;QAC3B,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,GAAG,EAAE,CAAC;IAC7C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thinkrun/cli",
3
- "version": "0.1.30",
3
+ "version": "0.1.31",
4
4
  "description": "CLI for controlling browsers via ThinkRun cloud and local infrastructure",
5
5
  "type": "module",
6
6
  "bin": {
@@ -11,7 +11,7 @@
11
11
  "README.md"
12
12
  ],
13
13
  "scripts": {
14
- "build": "rm -rf dist && tsc && mkdir -p dist/scripts && cp scripts/browse.sh dist/scripts/browse.sh && chmod +x dist/scripts/browse.sh",
14
+ "build": "rm -rf dist && tsc && mkdir -p dist/scripts && cp scripts/browse.sh dist/scripts/browse.sh && chmod +x dist/scripts/browse.sh && node scripts/inline-shared.mjs",
15
15
  "dev": "tsc --watch",
16
16
  "prepare": "bun run build",
17
17
  "test": "bun test",
@@ -27,7 +27,8 @@
27
27
  "smoke:local-diagnostics:continuity": "bun run build && THINKRUN_SMOKE_MODE=continuity bun run scripts/smoke-local-diagnostics.ts",
28
28
  "smoke:local-diagnostics:recovery": "bun run build && THINKRUN_SMOKE_MODE=recovery bun run scripts/smoke-local-diagnostics.ts",
29
29
  "smoke:local-review": "bun run build && THINKRUN_SMOKE_MODE=thinkrun-review bun run scripts/smoke-local-diagnostics.ts",
30
- "lint": "eslint src/**/*.ts"
30
+ "lint": "eslint src/**/*.ts",
31
+ "smoke:pack": "node scripts/smoke-pack.mjs"
31
32
  },
32
33
  "keywords": [
33
34
  "browser",
@@ -49,18 +50,15 @@
49
50
  "url": "https://github.com/dundas/thinkrun/issues"
50
51
  },
51
52
  "dependencies": {
52
- "@thinkrun/shared": "file:../shared",
53
53
  "commander": "^12.1.0",
54
54
  "conf": "^13.0.1",
55
55
  "chalk": "^5.3.0",
56
56
  "ora": "^8.1.0"
57
57
  },
58
- "bundleDependencies": [
59
- "@thinkrun/shared"
60
- ],
61
58
  "devDependencies": {
62
59
  "@types/node": "^20.11.16",
63
- "typescript": "^5.3.3"
60
+ "typescript": "^5.3.3",
61
+ "@thinkrun/shared": "file:../shared"
64
62
  },
65
63
  "engines": {
66
64
  "node": ">=18.0.0"