proofscan 0.5.11 → 0.6.1
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/dist/cli.js +9 -7
- package/dist/cli.js.map +1 -1
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +2 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/shell.d.ts +6 -0
- package/dist/commands/shell.d.ts.map +1 -0
- package/dist/commands/shell.js +33 -0
- package/dist/commands/shell.js.map +1 -0
- package/dist/shell/completer.d.ts +18 -0
- package/dist/shell/completer.d.ts.map +1 -0
- package/dist/shell/completer.js +136 -0
- package/dist/shell/completer.js.map +1 -0
- package/dist/shell/history.d.ts +20 -0
- package/dist/shell/history.d.ts.map +1 -0
- package/dist/shell/history.js +75 -0
- package/dist/shell/history.js.map +1 -0
- package/dist/shell/index.d.ts +11 -0
- package/dist/shell/index.d.ts.map +1 -0
- package/dist/shell/index.js +10 -0
- package/dist/shell/index.js.map +1 -0
- package/dist/shell/prompt.d.ts +34 -0
- package/dist/shell/prompt.d.ts.map +1 -0
- package/dist/shell/prompt.js +87 -0
- package/dist/shell/prompt.js.map +1 -0
- package/dist/shell/repl.d.ts +76 -0
- package/dist/shell/repl.d.ts.map +1 -0
- package/dist/shell/repl.js +486 -0
- package/dist/shell/repl.js.map +1 -0
- package/dist/shell/selector.d.ts +23 -0
- package/dist/shell/selector.d.ts.map +1 -0
- package/dist/shell/selector.js +86 -0
- package/dist/shell/selector.js.map +1 -0
- package/dist/shell/types.d.ts +47 -0
- package/dist/shell/types.d.ts.map +1 -0
- package/dist/shell/types.js +71 -0
- package/dist/shell/types.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive selector for missing arguments
|
|
3
|
+
*/
|
|
4
|
+
import * as readline from 'readline';
|
|
5
|
+
import { supportsColor, printInfo, printError } from './prompt.js';
|
|
6
|
+
const COLORS = {
|
|
7
|
+
reset: '\x1b[0m',
|
|
8
|
+
cyan: '\x1b[36m',
|
|
9
|
+
dim: '\x1b[2m',
|
|
10
|
+
reverse: '\x1b[7m',
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Check if interactive selection is available
|
|
14
|
+
*/
|
|
15
|
+
export function canInteract() {
|
|
16
|
+
return process.stdin.isTTY === true && process.stdout.isTTY === true;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Show a simple numbered list and get selection
|
|
20
|
+
*/
|
|
21
|
+
export async function selectFromList(items, prompt) {
|
|
22
|
+
if (!canInteract()) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
if (items.length === 0) {
|
|
26
|
+
printError('No items available to select');
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
// Show numbered list
|
|
30
|
+
console.log();
|
|
31
|
+
printInfo(prompt);
|
|
32
|
+
console.log();
|
|
33
|
+
const useColors = supportsColor();
|
|
34
|
+
items.forEach((item, index) => {
|
|
35
|
+
const num = `[${index + 1}]`;
|
|
36
|
+
if (useColors) {
|
|
37
|
+
console.log(` ${COLORS.cyan}${num}${COLORS.reset} ${item}`);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
console.log(` ${num} ${item}`);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
console.log();
|
|
44
|
+
// Get user input
|
|
45
|
+
const rl = readline.createInterface({
|
|
46
|
+
input: process.stdin,
|
|
47
|
+
output: process.stdout,
|
|
48
|
+
});
|
|
49
|
+
return new Promise((resolve) => {
|
|
50
|
+
rl.question('Enter number (or q to cancel): ', (answer) => {
|
|
51
|
+
rl.close();
|
|
52
|
+
const trimmed = answer.trim().toLowerCase();
|
|
53
|
+
if (trimmed === 'q' || trimmed === '') {
|
|
54
|
+
resolve(null);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const num = parseInt(trimmed, 10);
|
|
58
|
+
if (isNaN(num) || num < 1 || num > items.length) {
|
|
59
|
+
printError(`Invalid selection: ${trimmed}`);
|
|
60
|
+
resolve(null);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
resolve(items[num - 1]);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Show connector selection UI
|
|
69
|
+
*/
|
|
70
|
+
export async function selectConnector(connectors) {
|
|
71
|
+
return selectFromList(connectors, 'Select a connector:');
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Show session selection UI
|
|
75
|
+
*/
|
|
76
|
+
export async function selectSession(sessions) {
|
|
77
|
+
const items = sessions.map(s => `${s.id.slice(0, 8)} (${s.connector_id})`);
|
|
78
|
+
const selected = await selectFromList(items, 'Select a session:');
|
|
79
|
+
if (!selected) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
// Extract session ID from selection
|
|
83
|
+
const match = selected.match(/^([a-f0-9]+)/);
|
|
84
|
+
return match ? sessions.find(s => s.id.startsWith(match[1]))?.id || null : null;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector.js","sourceRoot":"","sources":["../../src/shell/selector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell types and interfaces
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Shell context - current connector/session state
|
|
6
|
+
*/
|
|
7
|
+
export interface ShellContext {
|
|
8
|
+
connector?: string;
|
|
9
|
+
session?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Shell completion result
|
|
13
|
+
*/
|
|
14
|
+
export interface CompletionResult {
|
|
15
|
+
completions: string[];
|
|
16
|
+
prefix: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Shell command definition for internal commands
|
|
20
|
+
*/
|
|
21
|
+
export interface ShellCommand {
|
|
22
|
+
name: string;
|
|
23
|
+
aliases?: string[];
|
|
24
|
+
description: string;
|
|
25
|
+
action: (args: string[], context: ShellContext) => Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Top-level commands available in shell
|
|
29
|
+
*/
|
|
30
|
+
export declare const TOP_LEVEL_COMMANDS: string[];
|
|
31
|
+
/**
|
|
32
|
+
* Commands with subcommands
|
|
33
|
+
*/
|
|
34
|
+
export declare const COMMAND_SUBCOMMANDS: Record<string, string[]>;
|
|
35
|
+
/**
|
|
36
|
+
* Common options for commands
|
|
37
|
+
*/
|
|
38
|
+
export declare const COMMON_OPTIONS: string[];
|
|
39
|
+
/**
|
|
40
|
+
* Command-specific options
|
|
41
|
+
*/
|
|
42
|
+
export declare const COMMAND_OPTIONS: Record<string, string[]>;
|
|
43
|
+
/**
|
|
44
|
+
* Shell built-in commands
|
|
45
|
+
*/
|
|
46
|
+
export declare const SHELL_BUILTINS: string[];
|
|
47
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shell/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,UAiB9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAUxD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,UAM1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAcpD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,UAA2D,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell types and interfaces
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Top-level commands available in shell
|
|
6
|
+
*/
|
|
7
|
+
export const TOP_LEVEL_COMMANDS = [
|
|
8
|
+
'view', 'v',
|
|
9
|
+
'tree', 't',
|
|
10
|
+
'explore', 'e',
|
|
11
|
+
'scan', 's',
|
|
12
|
+
'status', 'st',
|
|
13
|
+
'archive', 'a',
|
|
14
|
+
'config', 'c',
|
|
15
|
+
'connectors', 'connector',
|
|
16
|
+
'sessions',
|
|
17
|
+
'monitor',
|
|
18
|
+
'events',
|
|
19
|
+
'rpc',
|
|
20
|
+
'summary',
|
|
21
|
+
'permissions',
|
|
22
|
+
'record',
|
|
23
|
+
'doctor',
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* Commands with subcommands
|
|
27
|
+
*/
|
|
28
|
+
export const COMMAND_SUBCOMMANDS = {
|
|
29
|
+
scan: ['start'],
|
|
30
|
+
config: ['init', 'show', 'validate', 'path', 'ls', 'list', 'snapshot', 'restore'],
|
|
31
|
+
connectors: ['list', 'show', 'add', 'enable', 'disable', 'remove', 'import'],
|
|
32
|
+
connector: ['list', 'show', 'add', 'enable', 'disable', 'remove', 'import'],
|
|
33
|
+
sessions: ['list', 'use', 'current', 'clear'],
|
|
34
|
+
archive: ['run', 'status'],
|
|
35
|
+
events: ['ls', 'export'],
|
|
36
|
+
rpc: ['list', 'show'],
|
|
37
|
+
record: ['dry-run'],
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Common options for commands
|
|
41
|
+
*/
|
|
42
|
+
export const COMMON_OPTIONS = [
|
|
43
|
+
'--json',
|
|
44
|
+
'--verbose',
|
|
45
|
+
'-v',
|
|
46
|
+
'--help',
|
|
47
|
+
'-h',
|
|
48
|
+
];
|
|
49
|
+
/**
|
|
50
|
+
* Command-specific options
|
|
51
|
+
*/
|
|
52
|
+
export const COMMAND_OPTIONS = {
|
|
53
|
+
view: ['--limit', '--since', '--errors', '--method', '--connector', '--session', '--fulltime', '--full-time', '--time-full', '--with-sessions', '--pairs', '--pair'],
|
|
54
|
+
tree: ['--sessions', '--rpc', '--session', '--rpc-all', '--method', '--status', '--compact', '--ids-only', '--since'],
|
|
55
|
+
scan: ['--id', '--timeout', '--dry-run'],
|
|
56
|
+
'scan start': ['--id', '--timeout', '--dry-run'],
|
|
57
|
+
rpc: ['--session', '--id', '--format', '--copy'],
|
|
58
|
+
'rpc list': ['--session', '--format'],
|
|
59
|
+
'rpc show': ['--session', '--id', '--format', '--copy'],
|
|
60
|
+
summary: ['--session', '--format'],
|
|
61
|
+
permissions: ['--session', '--category'],
|
|
62
|
+
connectors: ['--id', '--from', '--file', '--stdin', '--name'],
|
|
63
|
+
sessions: ['--limit'],
|
|
64
|
+
archive: ['--older-than', '--dry-run'],
|
|
65
|
+
record: ['--output'],
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Shell built-in commands
|
|
69
|
+
*/
|
|
70
|
+
export const SHELL_BUILTINS = ['use', 'reset', 'pwd', 'help', 'exit', 'quit', 'clear'];
|
|
71
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shell/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AA4BH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,GAAG;IACX,SAAS,EAAE,GAAG;IACd,MAAM,EAAE,GAAG;IACX,QAAQ,EAAE,IAAI;IACd,SAAS,EAAE,GAAG;IACd,QAAQ,EAAE,GAAG;IACb,YAAY,EAAE,WAAW;IACzB,UAAU;IACV,SAAS;IACT,QAAQ;IACR,KAAK;IACL,SAAS;IACT,aAAa;IACb,QAAQ;IACR,QAAQ;CACT,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA6B;IAC3D,IAAI,EAAE,CAAC,OAAO,CAAC;IACf,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC;IACjF,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAC5E,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAC3E,QAAQ,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC;IAC7C,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC;IAC1B,MAAM,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,CAAC,SAAS,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,QAAQ;IACR,WAAW;IACX,IAAI;IACJ,QAAQ;IACR,IAAI;CACL,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAA6B;IACvD,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,CAAC;IACpK,IAAI,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,CAAC;IACrH,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC;IACxC,YAAY,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC;IAChD,GAAG,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC;IAChD,UAAU,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC;IACrC,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC;IACvD,OAAO,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC;IAClC,WAAW,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC;IACxC,UAAU,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;IAC7D,QAAQ,EAAE,CAAC,SAAS,CAAC;IACrB,OAAO,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC;IACtC,MAAM,EAAE,CAAC,UAAU,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC"}
|