proofscan 0.6.2 → 0.6.4
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/shell/context-applicator.d.ts +26 -0
- package/dist/shell/context-applicator.d.ts.map +1 -0
- package/dist/shell/context-applicator.js +222 -0
- package/dist/shell/context-applicator.js.map +1 -0
- package/dist/shell/index.d.ts +4 -2
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +3 -1
- package/dist/shell/index.js.map +1 -1
- package/dist/shell/prompt.d.ts +8 -1
- package/dist/shell/prompt.d.ts.map +1 -1
- package/dist/shell/prompt.js +57 -13
- package/dist/shell/prompt.js.map +1 -1
- package/dist/shell/repl.d.ts +4 -8
- package/dist/shell/repl.d.ts.map +1 -1
- package/dist/shell/repl.js +49 -52
- package/dist/shell/repl.js.map +1 -1
- package/dist/shell/router-commands.d.ts +74 -0
- package/dist/shell/router-commands.d.ts.map +1 -0
- package/dist/shell/router-commands.js +622 -0
- package/dist/shell/router-commands.js.map +1 -0
- package/dist/shell/types.d.ts +13 -0
- package/dist/shell/types.d.ts.map +1 -1
- package/dist/shell/types.js +5 -0
- package/dist/shell/types.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/time.d.ts +17 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +34 -0
- package/dist/utils/time.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Applicator - applies shell context to command arguments
|
|
3
|
+
*
|
|
4
|
+
* This module ensures that the current connector/session context
|
|
5
|
+
* is correctly injected into command arguments before execution.
|
|
6
|
+
*/
|
|
7
|
+
import type { ShellContext } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Result of applying context to command arguments
|
|
10
|
+
*/
|
|
11
|
+
export interface ApplyContextResult {
|
|
12
|
+
args: string[];
|
|
13
|
+
warnings: string[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Apply context to command arguments
|
|
17
|
+
*
|
|
18
|
+
* This function injects --connector, --session, --id options based on
|
|
19
|
+
* the current shell context and the command being executed.
|
|
20
|
+
*/
|
|
21
|
+
export declare function applyContext(tokens: string[], context: ShellContext): ApplyContextResult;
|
|
22
|
+
/**
|
|
23
|
+
* Generate context-aware hint message
|
|
24
|
+
*/
|
|
25
|
+
export declare function getContextHint(context: ShellContext): string;
|
|
26
|
+
//# sourceMappingURL=context-applicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-applicator.d.ts","sourceRoot":"","sources":["../../src/shell/context-applicator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AA0FD;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,YAAY,GACpB,kBAAkB,CA0HpB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAQ5D"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Applicator - applies shell context to command arguments
|
|
3
|
+
*
|
|
4
|
+
* This module ensures that the current connector/session context
|
|
5
|
+
* is correctly injected into command arguments before execution.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Boolean flags that don't take values
|
|
9
|
+
*/
|
|
10
|
+
const BOOLEAN_FLAGS = new Set([
|
|
11
|
+
'--json',
|
|
12
|
+
'--verbose',
|
|
13
|
+
'-v',
|
|
14
|
+
'--help',
|
|
15
|
+
'-h',
|
|
16
|
+
'--errors',
|
|
17
|
+
'--fulltime',
|
|
18
|
+
'--full-time',
|
|
19
|
+
'--time-full',
|
|
20
|
+
'--with-sessions',
|
|
21
|
+
'--pairs',
|
|
22
|
+
'--pair',
|
|
23
|
+
'--sessions',
|
|
24
|
+
'--rpc',
|
|
25
|
+
'--rpc-all',
|
|
26
|
+
'--compact',
|
|
27
|
+
'--ids-only',
|
|
28
|
+
'--dry-run',
|
|
29
|
+
'--stdin',
|
|
30
|
+
'-f',
|
|
31
|
+
'--follow',
|
|
32
|
+
'-l',
|
|
33
|
+
]);
|
|
34
|
+
/**
|
|
35
|
+
* Check if a flag is a boolean flag (doesn't take a value)
|
|
36
|
+
*/
|
|
37
|
+
function isBooleanFlag(flag) {
|
|
38
|
+
return BOOLEAN_FLAGS.has(flag);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Check if args already contain a specific option
|
|
42
|
+
*/
|
|
43
|
+
function hasOption(args, ...optionNames) {
|
|
44
|
+
return optionNames.some(opt => args.includes(opt));
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Check if args have a positional argument at given position (0-indexed from command)
|
|
48
|
+
* Positional = non-option argument (doesn't start with -)
|
|
49
|
+
*/
|
|
50
|
+
function hasPositionalAt(args, position) {
|
|
51
|
+
let positionalCount = 0;
|
|
52
|
+
for (let i = 1; i < args.length; i++) {
|
|
53
|
+
if (!args[i].startsWith('-')) {
|
|
54
|
+
if (positionalCount === position) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
positionalCount++;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// Only skip next arg if this is a value-taking option
|
|
61
|
+
// Boolean flags don't consume the next argument
|
|
62
|
+
// Also check bounds before incrementing to avoid accessing past array end
|
|
63
|
+
if (!isBooleanFlag(args[i]) && i + 1 < args.length) {
|
|
64
|
+
i++;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get positional argument at given position
|
|
72
|
+
*/
|
|
73
|
+
function getPositionalAt(args, position) {
|
|
74
|
+
let positionalCount = 0;
|
|
75
|
+
for (let i = 1; i < args.length; i++) {
|
|
76
|
+
if (!args[i].startsWith('-')) {
|
|
77
|
+
if (positionalCount === position) {
|
|
78
|
+
return args[i];
|
|
79
|
+
}
|
|
80
|
+
positionalCount++;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
// Only skip next arg if this is a value-taking option
|
|
84
|
+
// Also check bounds before incrementing to avoid accessing past array end
|
|
85
|
+
if (!isBooleanFlag(args[i]) && i + 1 < args.length) {
|
|
86
|
+
i++;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Apply context to command arguments
|
|
94
|
+
*
|
|
95
|
+
* This function injects --connector, --session, --id options based on
|
|
96
|
+
* the current shell context and the command being executed.
|
|
97
|
+
*/
|
|
98
|
+
export function applyContext(tokens, context) {
|
|
99
|
+
const args = [...tokens];
|
|
100
|
+
const warnings = [];
|
|
101
|
+
const command = tokens[0];
|
|
102
|
+
const subcommand = tokens[1];
|
|
103
|
+
// === VIEW / V ===
|
|
104
|
+
// - `view <connector>` -> `view --connector <connector>`
|
|
105
|
+
// - Add --connector from context if not specified
|
|
106
|
+
// - Add --session from context if not specified
|
|
107
|
+
if (command === 'view' || command === 'v') {
|
|
108
|
+
// Handle positional connector: `view yfinance` -> `view --connector yfinance`
|
|
109
|
+
const positional = getPositionalAt(args, 0);
|
|
110
|
+
if (positional && !hasOption(args, '--connector')) {
|
|
111
|
+
// Remove positional and add as --connector
|
|
112
|
+
const idx = args.indexOf(positional);
|
|
113
|
+
args.splice(idx, 1);
|
|
114
|
+
args.push('--connector', positional);
|
|
115
|
+
}
|
|
116
|
+
// Add --connector from context if not specified
|
|
117
|
+
if (context.connector && !hasOption(args, '--connector')) {
|
|
118
|
+
args.push('--connector', context.connector);
|
|
119
|
+
}
|
|
120
|
+
// Add --session from context if not specified
|
|
121
|
+
if (context.session && !hasOption(args, '--session')) {
|
|
122
|
+
args.push('--session', context.session);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// === TREE / T ===
|
|
126
|
+
// - Add --connector from context (tree uses positional connector)
|
|
127
|
+
if (command === 'tree' || command === 't') {
|
|
128
|
+
// tree takes positional connector, but we can also set context
|
|
129
|
+
// Only add if no positional argument
|
|
130
|
+
if (context.connector && !hasPositionalAt(args, 0) && !hasOption(args, '--connector')) {
|
|
131
|
+
// Insert connector as positional argument after command
|
|
132
|
+
args.splice(1, 0, context.connector);
|
|
133
|
+
}
|
|
134
|
+
// Add --session from context for tree
|
|
135
|
+
if (context.session && !hasOption(args, '--session')) {
|
|
136
|
+
args.push('--session', context.session);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// === SCAN / S ===
|
|
140
|
+
// - `scan start` needs --id from context
|
|
141
|
+
// - `scan start <connector>` is positional
|
|
142
|
+
if (command === 'scan' || command === 's') {
|
|
143
|
+
if (subcommand === 'start' || (!subcommand?.startsWith('-') && tokens.length === 1)) {
|
|
144
|
+
// `scan start` or just `scan` (which becomes `scan start`)
|
|
145
|
+
const hasStartSubcmd = subcommand === 'start';
|
|
146
|
+
const positionalIdx = hasStartSubcmd ? 1 : 0;
|
|
147
|
+
// Check for positional connector after 'start'
|
|
148
|
+
const hasPositionalConnector = hasPositionalAt(args, positionalIdx);
|
|
149
|
+
if (!hasPositionalConnector && !hasOption(args, '--id') && context.connector) {
|
|
150
|
+
args.push('--id', context.connector);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// === SESSIONS SHOW ===
|
|
155
|
+
// - `sessions show` needs --id from context.session
|
|
156
|
+
if (command === 'sessions' && subcommand === 'show') {
|
|
157
|
+
if (!hasOption(args, '--id') && context.session) {
|
|
158
|
+
args.push('--id', context.session);
|
|
159
|
+
}
|
|
160
|
+
else if (!hasOption(args, '--id') && !context.session) {
|
|
161
|
+
warnings.push('No session in context. Try: cc <connector>|<session>');
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// === RPC LIST / RPC SHOW ===
|
|
165
|
+
// - Both need --session from context
|
|
166
|
+
if (command === 'rpc') {
|
|
167
|
+
if (!hasOption(args, '--session') && context.session) {
|
|
168
|
+
args.push('--session', context.session);
|
|
169
|
+
}
|
|
170
|
+
else if (!hasOption(args, '--session') && !context.session) {
|
|
171
|
+
warnings.push('No session in context. Try: cc <connector>|<session>');
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// === SUMMARY ===
|
|
175
|
+
// - Needs --session from context
|
|
176
|
+
if (command === 'summary') {
|
|
177
|
+
if (!hasOption(args, '--session') && context.session) {
|
|
178
|
+
args.push('--session', context.session);
|
|
179
|
+
}
|
|
180
|
+
else if (!hasOption(args, '--session') && !context.session) {
|
|
181
|
+
warnings.push('No session in context. Try: cc <connector>|<session>');
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// === PERMISSIONS ===
|
|
185
|
+
// - Needs --session from context
|
|
186
|
+
if (command === 'permissions') {
|
|
187
|
+
if (!hasOption(args, '--session') && context.session) {
|
|
188
|
+
args.push('--session', context.session);
|
|
189
|
+
}
|
|
190
|
+
else if (!hasOption(args, '--session') && !context.session) {
|
|
191
|
+
warnings.push('No session in context. Try: cc <connector>|<session>');
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// === EVENTS ===
|
|
195
|
+
// - Can use --session from context
|
|
196
|
+
if (command === 'events') {
|
|
197
|
+
if (!hasOption(args, '--session') && context.session) {
|
|
198
|
+
args.push('--session', context.session);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
// === CONNECTORS SHOW ===
|
|
202
|
+
// - `connectors show` needs --id from context.connector
|
|
203
|
+
if ((command === 'connectors' || command === 'connector') && subcommand === 'show') {
|
|
204
|
+
if (!hasOption(args, '--id') && context.connector) {
|
|
205
|
+
args.push('--id', context.connector);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return { args, warnings };
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Generate context-aware hint message
|
|
212
|
+
*/
|
|
213
|
+
export function getContextHint(context) {
|
|
214
|
+
if (!context.connector && !context.session) {
|
|
215
|
+
return 'Try: cc <connector> or cc <connector>|<session>';
|
|
216
|
+
}
|
|
217
|
+
if (context.connector && !context.session) {
|
|
218
|
+
return `Try: cc <session> or ls (list sessions for ${context.connector})`;
|
|
219
|
+
}
|
|
220
|
+
return '';
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=context-applicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-applicator.js","sourceRoot":"","sources":["../../src/shell/context-applicator.ts"],"names":[],"mappings":"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"}
|
package/dist/shell/index.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export { generatePrompt, supportsColor } from './prompt.js';
|
|
|
6
6
|
export { getHistoryPath, loadHistory, saveHistory } from './history.js';
|
|
7
7
|
export { createCompleter, getCompletions, type DynamicDataProvider } from './completer.js';
|
|
8
8
|
export { selectConnector, selectSession, canInteract } from './selector.js';
|
|
9
|
-
export type { ShellContext, CompletionResult } from './types.js';
|
|
10
|
-
export { TOP_LEVEL_COMMANDS, COMMAND_SUBCOMMANDS, SHELL_BUILTINS } from './types.js';
|
|
9
|
+
export type { ShellContext, CompletionResult, ProtoType } from './types.js';
|
|
10
|
+
export { TOP_LEVEL_COMMANDS, COMMAND_SUBCOMMANDS, SHELL_BUILTINS, ROUTER_COMMANDS } from './types.js';
|
|
11
|
+
export { applyContext } from './context-applicator.js';
|
|
12
|
+
export { handleCc, handleUp, handlePwd, handleLs, handleShow, detectProto, detectConnectorProto, getContextLevel, } from './router-commands.js';
|
|
11
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shell/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5E,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shell/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5E,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACtG,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,UAAU,EACV,WAAW,EACX,oBAAoB,EACpB,eAAe,GAChB,MAAM,sBAAsB,CAAC"}
|
package/dist/shell/index.js
CHANGED
|
@@ -6,5 +6,7 @@ export { generatePrompt, supportsColor } from './prompt.js';
|
|
|
6
6
|
export { getHistoryPath, loadHistory, saveHistory } from './history.js';
|
|
7
7
|
export { createCompleter, getCompletions } from './completer.js';
|
|
8
8
|
export { selectConnector, selectSession, canInteract } from './selector.js';
|
|
9
|
-
export { TOP_LEVEL_COMMANDS, COMMAND_SUBCOMMANDS, SHELL_BUILTINS } from './types.js';
|
|
9
|
+
export { TOP_LEVEL_COMMANDS, COMMAND_SUBCOMMANDS, SHELL_BUILTINS, ROUTER_COMMANDS } from './types.js';
|
|
10
|
+
export { applyContext } from './context-applicator.js';
|
|
11
|
+
export { handleCc, handleUp, handlePwd, handleLs, handleShow, detectProto, detectConnectorProto, getContextLevel, } from './router-commands.js';
|
|
10
12
|
//# sourceMappingURL=index.js.map
|
package/dist/shell/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shell/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,cAAc,EAA4B,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5E,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shell/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,cAAc,EAA4B,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5E,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACtG,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,UAAU,EACV,WAAW,EACX,oBAAoB,EACpB,eAAe,GAChB,MAAM,sBAAsB,CAAC"}
|
package/dist/shell/prompt.d.ts
CHANGED
|
@@ -12,11 +12,18 @@ export declare function supportsColor(): boolean;
|
|
|
12
12
|
export declare function shortenSessionId(sessionId: string, length?: number): string;
|
|
13
13
|
/**
|
|
14
14
|
* Generate the shell prompt string
|
|
15
|
-
* Format: proofscan
|
|
15
|
+
* Format: proofscan:/path (proto) >
|
|
16
|
+
*
|
|
17
|
+
* Examples:
|
|
18
|
+
* proofscan:/ > (root)
|
|
19
|
+
* proofscan:/time > (connector)
|
|
20
|
+
* proofscan:/time (mcp) > (connector with detected proto)
|
|
21
|
+
* proofscan:/time/47676704 (mcp) > (session)
|
|
16
22
|
*/
|
|
17
23
|
export declare function generatePrompt(context: ShellContext): string;
|
|
18
24
|
/**
|
|
19
25
|
* Generate a plain prompt (no colors)
|
|
26
|
+
* Format: proofscan:/path (proto) >
|
|
20
27
|
*/
|
|
21
28
|
export declare function generatePlainPrompt(context: ShellContext): string;
|
|
22
29
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/shell/prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAc/C;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAQvC;AAYD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,GAAE,MAAU,GAAG,MAAM,CAE9E;
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/shell/prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAc/C;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAQvC;AAYD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,GAAE,MAAU,GAAG,MAAM,CAE9E;AAgBD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAgC5D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAiBjE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C"}
|
package/dist/shell/prompt.js
CHANGED
|
@@ -38,33 +38,77 @@ function color(text, colorCode) {
|
|
|
38
38
|
export function shortenSessionId(sessionId, length = 8) {
|
|
39
39
|
return sessionId.slice(0, length);
|
|
40
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Get color for proto type
|
|
43
|
+
*/
|
|
44
|
+
function getProtoColor(proto) {
|
|
45
|
+
switch (proto) {
|
|
46
|
+
case 'mcp':
|
|
47
|
+
return COLORS.green;
|
|
48
|
+
case 'a2a':
|
|
49
|
+
return COLORS.cyan;
|
|
50
|
+
default:
|
|
51
|
+
return COLORS.dim;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
41
54
|
/**
|
|
42
55
|
* Generate the shell prompt string
|
|
43
|
-
* Format: proofscan
|
|
56
|
+
* Format: proofscan:/path (proto) >
|
|
57
|
+
*
|
|
58
|
+
* Examples:
|
|
59
|
+
* proofscan:/ > (root)
|
|
60
|
+
* proofscan:/time > (connector)
|
|
61
|
+
* proofscan:/time (mcp) > (connector with detected proto)
|
|
62
|
+
* proofscan:/time/47676704 (mcp) > (session)
|
|
44
63
|
*/
|
|
45
64
|
export function generatePrompt(context) {
|
|
46
65
|
const parts = [];
|
|
47
|
-
// proofscan (dim)
|
|
66
|
+
// proofscan prefix (dim)
|
|
48
67
|
parts.push(color('proofscan', COLORS.dim));
|
|
49
|
-
//
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
68
|
+
// Build path
|
|
69
|
+
let path = '/';
|
|
70
|
+
if (context.connector) {
|
|
71
|
+
path = `/${context.connector}`;
|
|
72
|
+
if (context.session) {
|
|
73
|
+
path += `/${shortenSessionId(context.session)}`;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Path (cyan for connector, yellow for session)
|
|
53
77
|
if (context.session) {
|
|
54
|
-
|
|
78
|
+
const connectorPart = color(`/${context.connector}`, COLORS.cyan);
|
|
79
|
+
const sessionPart = color(`/${shortenSessionId(context.session)}`, COLORS.yellow);
|
|
80
|
+
parts.push(connectorPart + sessionPart);
|
|
55
81
|
}
|
|
56
|
-
|
|
82
|
+
else if (context.connector) {
|
|
83
|
+
parts.push(color(`/${context.connector}`, COLORS.cyan));
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
parts.push(color('/', COLORS.dim));
|
|
87
|
+
}
|
|
88
|
+
// Proto suffix (only if detected and not '?')
|
|
89
|
+
if (context.proto && context.proto !== '?') {
|
|
90
|
+
parts.push(' ' + color(`(${context.proto})`, getProtoColor(context.proto)));
|
|
91
|
+
}
|
|
92
|
+
return parts.join(':') + ' > ';
|
|
57
93
|
}
|
|
58
94
|
/**
|
|
59
95
|
* Generate a plain prompt (no colors)
|
|
96
|
+
* Format: proofscan:/path (proto) >
|
|
60
97
|
*/
|
|
61
98
|
export function generatePlainPrompt(context) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
99
|
+
let path = '/';
|
|
100
|
+
if (context.connector) {
|
|
101
|
+
path = `/${context.connector}`;
|
|
102
|
+
if (context.session) {
|
|
103
|
+
path += `/${shortenSessionId(context.session)}`;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
let prompt = `proofscan:${path}`;
|
|
107
|
+
// Proto suffix (only if detected and not '?')
|
|
108
|
+
if (context.proto && context.proto !== '?') {
|
|
109
|
+
prompt += ` (${context.proto})`;
|
|
66
110
|
}
|
|
67
|
-
return
|
|
111
|
+
return prompt + ' > ';
|
|
68
112
|
}
|
|
69
113
|
/**
|
|
70
114
|
* Print success message
|
package/dist/shell/prompt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/shell/prompt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,MAAM,GAAG;IACb,KAAK,EAAE,SAAS;IAChB,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,UAAU;IAClB,KAAK,EAAE,UAAU;IACjB,GAAG,EAAE,UAAU;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,wCAAwC;IACxC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,2BAA2B;IAC3B,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,SAAS,KAAK,CAAC,IAAY,EAAE,SAAiB;IAC5C,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,SAAiB,CAAC;IACpE,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/shell/prompt.ts"],"names":[],"mappings":"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"}
|
package/dist/shell/repl.d.ts
CHANGED
|
@@ -40,6 +40,10 @@ export declare class ShellRepl {
|
|
|
40
40
|
* Process a line of input
|
|
41
41
|
*/
|
|
42
42
|
private processLine;
|
|
43
|
+
/**
|
|
44
|
+
* Handle router-style commands (cc, cd, ls, show, ..)
|
|
45
|
+
*/
|
|
46
|
+
private handleRouterCommand;
|
|
43
47
|
/**
|
|
44
48
|
* Handle built-in shell commands
|
|
45
49
|
*/
|
|
@@ -64,13 +68,5 @@ export declare class ShellRepl {
|
|
|
64
68
|
* Execute a pfscan command
|
|
65
69
|
*/
|
|
66
70
|
private executeCommand;
|
|
67
|
-
/**
|
|
68
|
-
* Build command arguments with context applied
|
|
69
|
-
*/
|
|
70
|
-
private buildCommandArgs;
|
|
71
|
-
/**
|
|
72
|
-
* Check if command has a positional connector argument
|
|
73
|
-
*/
|
|
74
|
-
private hasPositionalConnector;
|
|
75
71
|
}
|
|
76
72
|
//# sourceMappingURL=repl.d.ts.map
|
package/dist/shell/repl.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../src/shell/repl.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../src/shell/repl.ts"],"names":[],"mappings":"AAAA;;GAEG;AA6BH;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAG/C;AAUD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,EAAE,CAAmC;IAC7C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAS;IAGxB,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,aAAa,CAAgD;IACrE,OAAO,CAAC,SAAS,CAAgD;gBAErD,UAAU,EAAE,MAAM;IAY9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAwDvB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA4D5B;;OAEG;YACW,WAAW;IA8BzB;;OAEG;YACW,mBAAmB;IAkBjC;;OAEG;YACW,aAAa;IAiC3B;;OAEG;IACH,OAAO,CAAC,QAAQ;IAmChB;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;YACW,SAAS;IA+IvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;YACW,cAAc;CAiD7B"}
|
package/dist/shell/repl.js
CHANGED
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import * as readline from 'readline';
|
|
5
5
|
import { spawn } from 'child_process';
|
|
6
|
-
import { SHELL_BUILTINS, TOP_LEVEL_COMMANDS } from './types.js';
|
|
6
|
+
import { SHELL_BUILTINS, TOP_LEVEL_COMMANDS, ROUTER_COMMANDS } from './types.js';
|
|
7
|
+
import { applyContext } from './context-applicator.js';
|
|
8
|
+
import { handleCc, handleUp, handlePwd, handleLs, handleShow, } from './router-commands.js';
|
|
7
9
|
import { generatePrompt, printSuccess, printError, printInfo, shortenSessionId } from './prompt.js';
|
|
8
10
|
import { loadHistory, saveHistory, addToHistory } from './history.js';
|
|
9
11
|
import { createCompleter } from './completer.js';
|
|
@@ -179,6 +181,11 @@ export class ShellRepl {
|
|
|
179
181
|
return;
|
|
180
182
|
const command = tokens[0];
|
|
181
183
|
const args = tokens.slice(1);
|
|
184
|
+
// Handle router-style commands first
|
|
185
|
+
if (ROUTER_COMMANDS.includes(command)) {
|
|
186
|
+
await this.handleRouterCommand(command, args);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
182
189
|
// Handle built-in commands
|
|
183
190
|
if (SHELL_BUILTINS.includes(command)) {
|
|
184
191
|
await this.handleBuiltin(command, args);
|
|
@@ -193,6 +200,26 @@ export class ShellRepl {
|
|
|
193
200
|
printError(`Unknown command: ${command}`);
|
|
194
201
|
printInfo('Type "help" for available commands');
|
|
195
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* Handle router-style commands (cc, cd, ls, show, ..)
|
|
205
|
+
*/
|
|
206
|
+
async handleRouterCommand(command, args) {
|
|
207
|
+
switch (command) {
|
|
208
|
+
case 'cc':
|
|
209
|
+
case 'cd':
|
|
210
|
+
await handleCc(args, this.context, this.configPath);
|
|
211
|
+
break;
|
|
212
|
+
case '..':
|
|
213
|
+
handleUp(this.context);
|
|
214
|
+
break;
|
|
215
|
+
case 'ls':
|
|
216
|
+
await handleLs(args, this.context, this.configPath, (tokens) => this.executeCommand(tokens));
|
|
217
|
+
break;
|
|
218
|
+
case 'show':
|
|
219
|
+
await handleShow(args, this.context, this.configPath, (tokens) => this.executeCommand(tokens));
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
196
223
|
/**
|
|
197
224
|
* Handle built-in shell commands
|
|
198
225
|
*/
|
|
@@ -210,7 +237,7 @@ export class ShellRepl {
|
|
|
210
237
|
console.clear();
|
|
211
238
|
break;
|
|
212
239
|
case 'pwd':
|
|
213
|
-
this.
|
|
240
|
+
handlePwd(this.context, this.configPath);
|
|
214
241
|
break;
|
|
215
242
|
case 'use':
|
|
216
243
|
await this.handleUse(args);
|
|
@@ -231,22 +258,31 @@ export class ShellRepl {
|
|
|
231
258
|
return;
|
|
232
259
|
}
|
|
233
260
|
console.log(`
|
|
261
|
+
Navigation:
|
|
262
|
+
cd, cc Change context (alias for each other)
|
|
263
|
+
cd / Go to root
|
|
264
|
+
cd <connector> Enter connector context
|
|
265
|
+
cd <session> Enter session (in connector context)
|
|
266
|
+
cd <conn>/<sess> Enter session directly
|
|
267
|
+
cd .. Go up one level
|
|
268
|
+
cd ../.. Go up two levels
|
|
269
|
+
cd - Go to previous location
|
|
270
|
+
ls [-l] [--json] List items at current level
|
|
271
|
+
show [target] [--json] Show details
|
|
272
|
+
pwd Show current context path
|
|
273
|
+
|
|
234
274
|
Shell Commands:
|
|
235
|
-
use <connector> Set current connector context
|
|
236
|
-
use session <prefix> Set current session context
|
|
237
|
-
reset Clear context (connector and session)
|
|
238
|
-
pwd Show current context
|
|
239
275
|
help [command] Show help
|
|
240
276
|
clear Clear screen
|
|
241
277
|
exit, quit Exit shell
|
|
242
278
|
|
|
243
|
-
|
|
279
|
+
ProofScan Commands:
|
|
244
280
|
${TOP_LEVEL_COMMANDS.join(', ')}
|
|
245
281
|
|
|
246
282
|
Tips:
|
|
247
283
|
- Press TAB for auto-completion
|
|
248
|
-
-
|
|
249
|
-
- Commands
|
|
284
|
+
- Prompt shows: proofscan:/connector/session (proto)
|
|
285
|
+
- Commands auto-apply current context
|
|
250
286
|
`);
|
|
251
287
|
}
|
|
252
288
|
/**
|
|
@@ -400,9 +436,11 @@ Tips:
|
|
|
400
436
|
* Execute a pfscan command
|
|
401
437
|
*/
|
|
402
438
|
async executeCommand(tokens) {
|
|
403
|
-
//
|
|
404
|
-
const cmdArgs = this.
|
|
439
|
+
// Apply context to command arguments
|
|
440
|
+
const { args: cmdArgs, warnings } = applyContext(tokens, this.context);
|
|
405
441
|
const command = tokens[0];
|
|
442
|
+
// Show context-aware warnings
|
|
443
|
+
warnings.forEach(w => printInfo(w));
|
|
406
444
|
// Validate all arguments for safety (defense-in-depth with shell: false)
|
|
407
445
|
const invalidArgs = cmdArgs.filter(arg => !isValidArg(arg));
|
|
408
446
|
if (invalidArgs.length > 0) {
|
|
@@ -441,46 +479,5 @@ Tips:
|
|
|
441
479
|
});
|
|
442
480
|
});
|
|
443
481
|
}
|
|
444
|
-
/**
|
|
445
|
-
* Build command arguments with context applied
|
|
446
|
-
*/
|
|
447
|
-
buildCommandArgs(tokens) {
|
|
448
|
-
const args = [...tokens];
|
|
449
|
-
const command = tokens[0];
|
|
450
|
-
// Add --connector if context has connector and command supports it
|
|
451
|
-
const connectorCommands = ['view', 'v', 'tree', 't'];
|
|
452
|
-
if (this.context.connector && connectorCommands.includes(command)) {
|
|
453
|
-
if (!args.includes('--connector') && !this.hasPositionalConnector(args)) {
|
|
454
|
-
args.push('--connector', this.context.connector);
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
// Add --session if context has session and command supports it
|
|
458
|
-
const sessionCommands = ['rpc', 'summary', 'permissions', 'view', 'v'];
|
|
459
|
-
if (this.context.session && sessionCommands.includes(command)) {
|
|
460
|
-
if (!args.includes('--session')) {
|
|
461
|
-
args.push('--session', this.context.session);
|
|
462
|
-
}
|
|
463
|
-
}
|
|
464
|
-
// Add --id for scan start if context has connector
|
|
465
|
-
if (command === 'scan' || command === 's') {
|
|
466
|
-
if (args.includes('start') && !args.includes('--id') && this.context.connector) {
|
|
467
|
-
const hasPositional = args.length > 2 && !args[2].startsWith('-');
|
|
468
|
-
if (!hasPositional) {
|
|
469
|
-
args.push('--id', this.context.connector);
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
return args;
|
|
474
|
-
}
|
|
475
|
-
/**
|
|
476
|
-
* Check if command has a positional connector argument
|
|
477
|
-
*/
|
|
478
|
-
hasPositionalConnector(args) {
|
|
479
|
-
// For tree command, check if there's a positional argument
|
|
480
|
-
if (args[0] === 'tree' || args[0] === 't') {
|
|
481
|
-
return args.length > 1 && !args[1].startsWith('-');
|
|
482
|
-
}
|
|
483
|
-
return false;
|
|
484
|
-
}
|
|
485
482
|
}
|
|
486
483
|
//# sourceMappingURL=repl.js.map
|