proofscan 0.10.53 → 0.10.55
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/filter-mappers.d.ts +23 -0
- package/dist/shell/filter-mappers.d.ts.map +1 -0
- package/dist/shell/filter-mappers.js +36 -0
- package/dist/shell/filter-mappers.js.map +1 -0
- package/dist/shell/find-command.d.ts +54 -0
- package/dist/shell/find-command.d.ts.map +1 -0
- package/dist/shell/find-command.js +330 -0
- package/dist/shell/find-command.js.map +1 -0
- package/dist/shell/pager/index.d.ts +9 -0
- package/dist/shell/pager/index.d.ts.map +1 -0
- package/dist/shell/pager/index.js +8 -0
- package/dist/shell/pager/index.js.map +1 -0
- package/dist/shell/pager/less-pager.d.ts +31 -0
- package/dist/shell/pager/less-pager.d.ts.map +1 -0
- package/dist/shell/pager/less-pager.js +196 -0
- package/dist/shell/pager/less-pager.js.map +1 -0
- package/dist/shell/pager/more-pager.d.ts +31 -0
- package/dist/shell/pager/more-pager.d.ts.map +1 -0
- package/dist/shell/pager/more-pager.js +108 -0
- package/dist/shell/pager/more-pager.js.map +1 -0
- package/dist/shell/pager/renderer.d.ts +17 -0
- package/dist/shell/pager/renderer.d.ts.map +1 -0
- package/dist/shell/pager/renderer.js +125 -0
- package/dist/shell/pager/renderer.js.map +1 -0
- package/dist/shell/pager/types.d.ts +19 -0
- package/dist/shell/pager/types.d.ts.map +1 -0
- package/dist/shell/pager/types.js +7 -0
- package/dist/shell/pager/types.js.map +1 -0
- package/dist/shell/pager/utils.d.ts +28 -0
- package/dist/shell/pager/utils.d.ts.map +1 -0
- package/dist/shell/pager/utils.js +53 -0
- package/dist/shell/pager/utils.js.map +1 -0
- package/dist/shell/pipeline-types.d.ts +51 -0
- package/dist/shell/pipeline-types.d.ts.map +1 -0
- package/dist/shell/pipeline-types.js +8 -0
- package/dist/shell/pipeline-types.js.map +1 -0
- package/dist/shell/repl.d.ts +36 -0
- package/dist/shell/repl.d.ts.map +1 -1
- package/dist/shell/repl.js +408 -5
- package/dist/shell/repl.js.map +1 -1
- package/dist/shell/router-commands.d.ts +7 -0
- package/dist/shell/router-commands.d.ts.map +1 -1
- package/dist/shell/router-commands.js +121 -0
- package/dist/shell/router-commands.js.map +1 -1
- package/dist/shell/types.d.ts +14 -0
- package/dist/shell/types.d.ts.map +1 -1
- package/dist/shell/types.js +16 -1
- package/dist/shell/types.js.map +1 -1
- package/dist/shell/where-command.d.ts +31 -0
- package/dist/shell/where-command.d.ts.map +1 -0
- package/dist/shell/where-command.js +96 -0
- package/dist/shell/where-command.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filter Context Mappers for psh Shell
|
|
3
|
+
*
|
|
4
|
+
* Convert pipeline rows to FilterContext for evaluation.
|
|
5
|
+
* Reuses the existing Filter DSL types from src/filter/.
|
|
6
|
+
*/
|
|
7
|
+
import type { FilterContext } from '../filter/types.js';
|
|
8
|
+
import type { RpcRow, SessionRow } from './pipeline-types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Convert RPC row to FilterContext
|
|
11
|
+
*
|
|
12
|
+
* Field mapping (Option A adopted):
|
|
13
|
+
* tools.method = rpc.method ("tools/call", "tools/list", etc.)
|
|
14
|
+
* tools.name = tool_name (the actual tool being called, e.g., "convert_time")
|
|
15
|
+
*
|
|
16
|
+
* Status normalization: Row status (OK|ERR|pending) → lowercase (ok|err|pending)
|
|
17
|
+
*/
|
|
18
|
+
export declare function rpcRowToFilterContext(row: RpcRow): FilterContext;
|
|
19
|
+
/**
|
|
20
|
+
* Convert Session row to FilterContext
|
|
21
|
+
*/
|
|
22
|
+
export declare function sessionRowToFilterContext(row: SessionRow): FilterContext;
|
|
23
|
+
//# sourceMappingURL=filter-mappers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-mappers.d.ts","sourceRoot":"","sources":["../../src/shell/filter-mappers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE9D;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAUhE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,UAAU,GAAG,aAAa,CAKxE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filter Context Mappers for psh Shell
|
|
3
|
+
*
|
|
4
|
+
* Convert pipeline rows to FilterContext for evaluation.
|
|
5
|
+
* Reuses the existing Filter DSL types from src/filter/.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Convert RPC row to FilterContext
|
|
9
|
+
*
|
|
10
|
+
* Field mapping (Option A adopted):
|
|
11
|
+
* tools.method = rpc.method ("tools/call", "tools/list", etc.)
|
|
12
|
+
* tools.name = tool_name (the actual tool being called, e.g., "convert_time")
|
|
13
|
+
*
|
|
14
|
+
* Status normalization: Row status (OK|ERR|pending) → lowercase (ok|err|pending)
|
|
15
|
+
*/
|
|
16
|
+
export function rpcRowToFilterContext(row) {
|
|
17
|
+
return {
|
|
18
|
+
'rpc.id': row.rpc_id,
|
|
19
|
+
'rpc.method': row.method,
|
|
20
|
+
'rpc.status': row.status?.toLowerCase() ?? 'pending', // OK|ERR|pending → ok|err|pending
|
|
21
|
+
'rpc.latency': row.latency_ms,
|
|
22
|
+
'session.id': row.session_id,
|
|
23
|
+
'tools.name': row.tool_name ?? null, // Tool name for tools/call
|
|
24
|
+
'tools.method': row.method, // "tools/call", "tools/list", etc.
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Convert Session row to FilterContext
|
|
29
|
+
*/
|
|
30
|
+
export function sessionRowToFilterContext(row) {
|
|
31
|
+
return {
|
|
32
|
+
'session.id': row.session_id,
|
|
33
|
+
'session.latency': row.total_latency_ms ?? null,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=filter-mappers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-mappers.js","sourceRoot":"","sources":["../../src/shell/filter-mappers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,MAAM;QACpB,YAAY,EAAE,GAAG,CAAC,MAAM;QACxB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,SAAS,EAAE,kCAAkC;QACxF,aAAa,EAAE,GAAG,CAAC,UAAU;QAC7B,YAAY,EAAE,GAAG,CAAC,UAAU;QAC5B,YAAY,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI,EAAE,2BAA2B;QAChE,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,mCAAmC;KAChE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,GAAe;IACvD,OAAO;QACL,YAAY,EAAE,GAAG,CAAC,UAAU;QAC5B,iBAAiB,EAAE,GAAG,CAAC,gBAAgB,IAAI,IAAI;KAChD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Find Command for psh Shell
|
|
3
|
+
*
|
|
4
|
+
* Cross-session search without changing `ls` semantics.
|
|
5
|
+
* Scope derived from cwd:
|
|
6
|
+
* / => all connectors
|
|
7
|
+
* /<cid>: => that connector's sessions
|
|
8
|
+
* /<cid>/<sid>: => that session only
|
|
9
|
+
*/
|
|
10
|
+
import type { ShellContext } from './types.js';
|
|
11
|
+
import type { PipelineValue } from './pipeline-types.js';
|
|
12
|
+
/** Find command options */
|
|
13
|
+
export interface FindOptions {
|
|
14
|
+
kind: 'session' | 'rpc' | 'event';
|
|
15
|
+
limit: number;
|
|
16
|
+
sessions: number;
|
|
17
|
+
errorsOnly: boolean;
|
|
18
|
+
}
|
|
19
|
+
/** Find result type */
|
|
20
|
+
export type FindResult = {
|
|
21
|
+
ok: true;
|
|
22
|
+
result: PipelineValue;
|
|
23
|
+
stats: {
|
|
24
|
+
count: number;
|
|
25
|
+
sessions: number;
|
|
26
|
+
};
|
|
27
|
+
} | {
|
|
28
|
+
ok: false;
|
|
29
|
+
error: string;
|
|
30
|
+
} | {
|
|
31
|
+
ok: false;
|
|
32
|
+
error: string;
|
|
33
|
+
help: true;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Parse find command arguments
|
|
37
|
+
*
|
|
38
|
+
* Usage: find <kind> [--limit N] [--sessions N] [--errors-only]
|
|
39
|
+
*/
|
|
40
|
+
export declare function parseFindArgs(args: string[]): {
|
|
41
|
+
ok: true;
|
|
42
|
+
options: FindOptions;
|
|
43
|
+
} | {
|
|
44
|
+
ok: false;
|
|
45
|
+
error: string;
|
|
46
|
+
help?: true;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Execute find command
|
|
50
|
+
*
|
|
51
|
+
* Loads rows from multiple sessions based on scope and options.
|
|
52
|
+
*/
|
|
53
|
+
export declare function executeFind(context: ShellContext, configPath: string, options: FindOptions): FindResult;
|
|
54
|
+
//# sourceMappingURL=find-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-command.d.ts","sourceRoot":"","sources":["../../src/shell/find-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,qBAAqB,CAAC;AAK7E,2BAA2B;AAC3B,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,OAAO,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB;AAUD,uBAAuB;AACvB,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC/E;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC5B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC;AA8B7C;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,IAAI,CAAA;CAAE,CAmD5H;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,WAAW,GACnB,UAAU,CAoBZ"}
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Find Command for psh Shell
|
|
3
|
+
*
|
|
4
|
+
* Cross-session search without changing `ls` semantics.
|
|
5
|
+
* Scope derived from cwd:
|
|
6
|
+
* / => all connectors
|
|
7
|
+
* /<cid>: => that connector's sessions
|
|
8
|
+
* /<cid>/<sid>: => that session only
|
|
9
|
+
*/
|
|
10
|
+
import { getContextLevel } from './router-commands.js';
|
|
11
|
+
import { EventLineStore } from '../eventline/store.js';
|
|
12
|
+
import { ConfigManager } from '../config/index.js';
|
|
13
|
+
/** Default options */
|
|
14
|
+
const DEFAULT_OPTIONS = {
|
|
15
|
+
kind: 'rpc',
|
|
16
|
+
limit: 200,
|
|
17
|
+
sessions: 50,
|
|
18
|
+
errorsOnly: false,
|
|
19
|
+
};
|
|
20
|
+
/** Help text for find command */
|
|
21
|
+
const FIND_HELP = `find - cross-session search
|
|
22
|
+
|
|
23
|
+
Usage: find <kind> [options]
|
|
24
|
+
|
|
25
|
+
Kinds:
|
|
26
|
+
session List sessions across scope
|
|
27
|
+
rpc List RPC calls across sessions
|
|
28
|
+
event List events (not yet implemented)
|
|
29
|
+
|
|
30
|
+
Options:
|
|
31
|
+
--limit N Max rows to return (default: 200)
|
|
32
|
+
--sessions N Max sessions to search (default: 50)
|
|
33
|
+
--errors-only Only return error RPCs
|
|
34
|
+
-h, --help Show this help
|
|
35
|
+
|
|
36
|
+
Scope (derived from cwd):
|
|
37
|
+
/ All connectors
|
|
38
|
+
/<connector>: That connector's sessions
|
|
39
|
+
/<conn>/<sess>: That session only
|
|
40
|
+
|
|
41
|
+
Examples:
|
|
42
|
+
find rpc All RPCs in current scope
|
|
43
|
+
find rpc --errors-only Only errors
|
|
44
|
+
find rpc --limit 50 --sessions 10 Limit results
|
|
45
|
+
find rpc | where tools.name ~= "read" Chain with filter
|
|
46
|
+
find session --limit 10 Latest sessions`;
|
|
47
|
+
/**
|
|
48
|
+
* Parse find command arguments
|
|
49
|
+
*
|
|
50
|
+
* Usage: find <kind> [--limit N] [--sessions N] [--errors-only]
|
|
51
|
+
*/
|
|
52
|
+
export function parseFindArgs(args) {
|
|
53
|
+
const options = { ...DEFAULT_OPTIONS };
|
|
54
|
+
// Handle help flags first
|
|
55
|
+
if (args.length === 0 || args.includes('-h') || args.includes('--help')) {
|
|
56
|
+
return { ok: false, error: FIND_HELP, help: true };
|
|
57
|
+
}
|
|
58
|
+
let i = 0;
|
|
59
|
+
const kindArg = args[0].toLowerCase();
|
|
60
|
+
if (!['session', 'rpc', 'event'].includes(kindArg)) {
|
|
61
|
+
return { ok: false, error: `Invalid kind: ${args[0]}. Must be one of: session, rpc, event` };
|
|
62
|
+
}
|
|
63
|
+
options.kind = kindArg;
|
|
64
|
+
i++;
|
|
65
|
+
// Parse optional flags
|
|
66
|
+
while (i < args.length) {
|
|
67
|
+
const arg = args[i];
|
|
68
|
+
if (arg === '--limit') {
|
|
69
|
+
const val = args[++i];
|
|
70
|
+
if (!val || isNaN(parseInt(val, 10))) {
|
|
71
|
+
return { ok: false, error: '--limit requires a number' };
|
|
72
|
+
}
|
|
73
|
+
const limitVal = parseInt(val, 10);
|
|
74
|
+
if (limitVal <= 0) {
|
|
75
|
+
return { ok: false, error: '--limit must be a positive number' };
|
|
76
|
+
}
|
|
77
|
+
options.limit = limitVal;
|
|
78
|
+
}
|
|
79
|
+
else if (arg === '--sessions') {
|
|
80
|
+
const val = args[++i];
|
|
81
|
+
if (!val || isNaN(parseInt(val, 10))) {
|
|
82
|
+
return { ok: false, error: '--sessions requires a number' };
|
|
83
|
+
}
|
|
84
|
+
const sessionsVal = parseInt(val, 10);
|
|
85
|
+
if (sessionsVal <= 0) {
|
|
86
|
+
return { ok: false, error: '--sessions must be a positive number' };
|
|
87
|
+
}
|
|
88
|
+
options.sessions = sessionsVal;
|
|
89
|
+
}
|
|
90
|
+
else if (arg === '--errors-only') {
|
|
91
|
+
options.errorsOnly = true;
|
|
92
|
+
}
|
|
93
|
+
else if (arg.startsWith('-')) {
|
|
94
|
+
return { ok: false, error: `Unknown option: ${arg}` };
|
|
95
|
+
}
|
|
96
|
+
i++;
|
|
97
|
+
}
|
|
98
|
+
return { ok: true, options };
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Execute find command
|
|
102
|
+
*
|
|
103
|
+
* Loads rows from multiple sessions based on scope and options.
|
|
104
|
+
*/
|
|
105
|
+
export function executeFind(context, configPath, options) {
|
|
106
|
+
const manager = new ConfigManager(configPath);
|
|
107
|
+
const store = new EventLineStore(manager.getConfigDir());
|
|
108
|
+
const level = getContextLevel(context);
|
|
109
|
+
// Determine scope
|
|
110
|
+
const scope = determineScope(level, context);
|
|
111
|
+
// Load rows based on kind
|
|
112
|
+
switch (options.kind) {
|
|
113
|
+
case 'session':
|
|
114
|
+
return findSessions(store, scope, options);
|
|
115
|
+
case 'rpc':
|
|
116
|
+
return findRpcs(store, scope, options);
|
|
117
|
+
case 'event':
|
|
118
|
+
// Event kind is reserved for future implementation
|
|
119
|
+
return { ok: false, error: 'Event kind is not yet implemented' };
|
|
120
|
+
default:
|
|
121
|
+
return { ok: false, error: `Unknown kind: ${options.kind}` };
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Determine search scope from context
|
|
126
|
+
*/
|
|
127
|
+
function determineScope(level, context) {
|
|
128
|
+
return {
|
|
129
|
+
level,
|
|
130
|
+
connectorId: context.connector,
|
|
131
|
+
sessionId: context.session,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Find sessions across scope
|
|
136
|
+
*/
|
|
137
|
+
function findSessions(store, scope, options) {
|
|
138
|
+
const rows = [];
|
|
139
|
+
let sessionCount = 0;
|
|
140
|
+
if (scope.level === 'session' && scope.sessionId) {
|
|
141
|
+
// Session level - return just this session info
|
|
142
|
+
const sessions = store.getSessions(scope.connectorId, options.sessions);
|
|
143
|
+
const session = sessions.find(s => s.session_id === scope.sessionId);
|
|
144
|
+
if (session) {
|
|
145
|
+
rows.push({
|
|
146
|
+
session_id: session.session_id,
|
|
147
|
+
connector_id: scope.connectorId,
|
|
148
|
+
started_at: session.started_at ?? '',
|
|
149
|
+
ended_at: session.ended_at ?? null,
|
|
150
|
+
event_count: session.event_count ?? 0,
|
|
151
|
+
rpc_count: session.rpc_count ?? 0,
|
|
152
|
+
});
|
|
153
|
+
sessionCount = 1;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
else if (scope.level === 'connector' && scope.connectorId) {
|
|
157
|
+
// Connector level - return sessions for this connector
|
|
158
|
+
const sessions = store.getSessions(scope.connectorId, options.sessions);
|
|
159
|
+
for (const session of sessions) {
|
|
160
|
+
if (rows.length >= options.limit)
|
|
161
|
+
break;
|
|
162
|
+
rows.push({
|
|
163
|
+
session_id: session.session_id,
|
|
164
|
+
connector_id: scope.connectorId,
|
|
165
|
+
started_at: session.started_at ?? '',
|
|
166
|
+
ended_at: session.ended_at ?? null,
|
|
167
|
+
event_count: session.event_count ?? 0,
|
|
168
|
+
rpc_count: session.rpc_count ?? 0,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
sessionCount = sessions.length;
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
// Root level - return sessions across all connectors
|
|
175
|
+
const connectors = store.getConnectors();
|
|
176
|
+
for (const connector of connectors) {
|
|
177
|
+
if (rows.length >= options.limit)
|
|
178
|
+
break;
|
|
179
|
+
const sessions = store.getSessions(connector.id, options.sessions);
|
|
180
|
+
for (const session of sessions) {
|
|
181
|
+
if (rows.length >= options.limit)
|
|
182
|
+
break;
|
|
183
|
+
rows.push({
|
|
184
|
+
session_id: session.session_id,
|
|
185
|
+
connector_id: connector.id,
|
|
186
|
+
started_at: session.started_at ?? '',
|
|
187
|
+
ended_at: session.ended_at ?? null,
|
|
188
|
+
event_count: session.event_count ?? 0,
|
|
189
|
+
rpc_count: session.rpc_count ?? 0,
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
sessionCount += sessions.length;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return {
|
|
196
|
+
ok: true,
|
|
197
|
+
result: { kind: 'rows', rows, rowType: 'session' },
|
|
198
|
+
stats: { count: rows.length, sessions: sessionCount },
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Extract tool name from request JSON.
|
|
203
|
+
* Fallback chain: params.name ?? params.tool ?? params.toolName
|
|
204
|
+
*/
|
|
205
|
+
function extractToolName(rawJson) {
|
|
206
|
+
if (!rawJson)
|
|
207
|
+
return undefined;
|
|
208
|
+
try {
|
|
209
|
+
const parsed = JSON.parse(rawJson);
|
|
210
|
+
const params = parsed?.params;
|
|
211
|
+
if (!params || typeof params !== 'object')
|
|
212
|
+
return undefined;
|
|
213
|
+
if (typeof params.name === 'string' && params.name.length > 0) {
|
|
214
|
+
return params.name;
|
|
215
|
+
}
|
|
216
|
+
if (typeof params.tool === 'string' && params.tool.length > 0) {
|
|
217
|
+
return params.tool;
|
|
218
|
+
}
|
|
219
|
+
if (typeof params.toolName === 'string' && params.toolName.length > 0) {
|
|
220
|
+
return params.toolName;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
// JSON parse error
|
|
225
|
+
}
|
|
226
|
+
return undefined;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Find RPCs across scope
|
|
230
|
+
*/
|
|
231
|
+
function findRpcs(store, scope, options) {
|
|
232
|
+
const rows = [];
|
|
233
|
+
let sessionCount = 0;
|
|
234
|
+
// Collect session IDs to search
|
|
235
|
+
const sessionIds = [];
|
|
236
|
+
if (scope.level === 'session' && scope.sessionId && scope.connectorId) {
|
|
237
|
+
// Session level - search only this session
|
|
238
|
+
sessionIds.push({ sessionId: scope.sessionId, connectorId: scope.connectorId });
|
|
239
|
+
}
|
|
240
|
+
else if (scope.level === 'connector' && scope.connectorId) {
|
|
241
|
+
// Connector level - search sessions for this connector
|
|
242
|
+
const sessions = store.getSessions(scope.connectorId, options.sessions);
|
|
243
|
+
for (const session of sessions) {
|
|
244
|
+
sessionIds.push({ sessionId: session.session_id, connectorId: scope.connectorId });
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
// Root level - search across all connectors
|
|
249
|
+
const connectors = store.getConnectors();
|
|
250
|
+
for (const connector of connectors) {
|
|
251
|
+
const sessions = store.getSessions(connector.id, options.sessions);
|
|
252
|
+
for (const session of sessions) {
|
|
253
|
+
sessionIds.push({ sessionId: session.session_id, connectorId: connector.id });
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
sessionCount = sessionIds.length;
|
|
258
|
+
// Load RPCs from each session
|
|
259
|
+
for (const { sessionId, connectorId } of sessionIds) {
|
|
260
|
+
if (rows.length >= options.limit)
|
|
261
|
+
break;
|
|
262
|
+
const rpcs = store.getRpcCalls(sessionId);
|
|
263
|
+
// Build tool name map for tools/call RPCs in this session (batch lookup)
|
|
264
|
+
// This avoids N+1 query pattern by fetching raw events once per session
|
|
265
|
+
const toolsCallRpcIds = rpcs
|
|
266
|
+
.filter(rpc => rpc.method === 'tools/call')
|
|
267
|
+
.map(rpc => rpc.rpc_id);
|
|
268
|
+
const toolNameMap = new Map();
|
|
269
|
+
if (toolsCallRpcIds.length > 0) {
|
|
270
|
+
// Build tool name map for all tools/call RPCs in this session
|
|
271
|
+
// Note: getRawEvent internally fetches all session events, so subsequent
|
|
272
|
+
// calls for the same session benefit from SQLite's page cache
|
|
273
|
+
for (const rpcId of toolsCallRpcIds) {
|
|
274
|
+
const event = store.getRawEvent(sessionId, rpcId);
|
|
275
|
+
if (event?.request?.raw_json) {
|
|
276
|
+
const toolName = extractToolName(event.request.raw_json);
|
|
277
|
+
if (toolName) {
|
|
278
|
+
toolNameMap.set(rpcId, toolName);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
for (const rpc of rpcs) {
|
|
284
|
+
if (rows.length >= options.limit)
|
|
285
|
+
break;
|
|
286
|
+
// Determine status
|
|
287
|
+
let status;
|
|
288
|
+
if (rpc.success === 1) {
|
|
289
|
+
status = 'OK';
|
|
290
|
+
}
|
|
291
|
+
else if (rpc.success === 0) {
|
|
292
|
+
status = 'ERR';
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
status = 'pending';
|
|
296
|
+
}
|
|
297
|
+
// Filter errors only
|
|
298
|
+
if (options.errorsOnly && status !== 'ERR') {
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
// Calculate latency
|
|
302
|
+
let latency_ms = null;
|
|
303
|
+
if (rpc.request_ts && rpc.response_ts) {
|
|
304
|
+
const requestTime = new Date(rpc.request_ts).getTime();
|
|
305
|
+
const responseTime = new Date(rpc.response_ts).getTime();
|
|
306
|
+
latency_ms = responseTime - requestTime;
|
|
307
|
+
}
|
|
308
|
+
// Get tool_name from pre-built map (avoids N+1 query)
|
|
309
|
+
const tool_name = toolNameMap.get(rpc.rpc_id);
|
|
310
|
+
rows.push({
|
|
311
|
+
rpc_id: rpc.rpc_id,
|
|
312
|
+
session_id: rpc.session_id,
|
|
313
|
+
connector_id: connectorId,
|
|
314
|
+
method: rpc.method,
|
|
315
|
+
status,
|
|
316
|
+
latency_ms,
|
|
317
|
+
request_ts: rpc.request_ts,
|
|
318
|
+
response_ts: rpc.response_ts ?? null,
|
|
319
|
+
error_code: rpc.error_code ?? null,
|
|
320
|
+
tool_name,
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
return {
|
|
325
|
+
ok: true,
|
|
326
|
+
result: { kind: 'rows', rows, rowType: 'rpc' },
|
|
327
|
+
stats: { count: rows.length, sessions: sessionCount },
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
//# sourceMappingURL=find-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-command.js","sourceRoot":"","sources":["../../src/shell/find-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pager module exports
|
|
3
|
+
*/
|
|
4
|
+
export { LessPager } from './less-pager.js';
|
|
5
|
+
export { MorePager } from './more-pager.js';
|
|
6
|
+
export { renderRowsToLines } from './renderer.js';
|
|
7
|
+
export { commandExists, parsePagerCommand, runPager, FOOTER_RESERVE_LINES } from './utils.js';
|
|
8
|
+
export type { Pager, PagerOptions } from './types.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shell/pager/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAC9F,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pager module exports
|
|
3
|
+
*/
|
|
4
|
+
export { LessPager } from './less-pager.js';
|
|
5
|
+
export { MorePager } from './more-pager.js';
|
|
6
|
+
export { renderRowsToLines } from './renderer.js';
|
|
7
|
+
export { commandExists, parsePagerCommand, runPager, FOOTER_RESERVE_LINES } from './utils.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shell/pager/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Less Pager for psh Shell
|
|
3
|
+
*
|
|
4
|
+
* Delegates to external pager for reliable TTY handling.
|
|
5
|
+
* Pager selection priority:
|
|
6
|
+
* 1. $PAGER environment variable (user preference)
|
|
7
|
+
* 2. 'less' command
|
|
8
|
+
* 3. Built-in pager (fallback)
|
|
9
|
+
*
|
|
10
|
+
* Note: When using external pager, standard pager key bindings apply.
|
|
11
|
+
* The built-in fallback provides vim-style navigation (j/k/space/b/g/G/q).
|
|
12
|
+
*/
|
|
13
|
+
import type { Pager, PagerOptions } from './types.js';
|
|
14
|
+
import type { PipelineValue } from '../pipeline-types.js';
|
|
15
|
+
export declare class LessPager implements Pager {
|
|
16
|
+
private options;
|
|
17
|
+
constructor(options?: PagerOptions);
|
|
18
|
+
run(input: PipelineValue): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Try external pager in priority order
|
|
21
|
+
* Returns true if successful, false if all failed
|
|
22
|
+
*/
|
|
23
|
+
private tryExternalPager;
|
|
24
|
+
/**
|
|
25
|
+
* Built-in pager fallback
|
|
26
|
+
* Provides vim-style navigation when no external pager is available
|
|
27
|
+
*/
|
|
28
|
+
private runBuiltIn;
|
|
29
|
+
private runLoop;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=less-pager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"less-pager.d.ts","sourceRoot":"","sources":["../../../src/shell/pager/less-pager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI1D,qBAAa,SAAU,YAAW,KAAK;IACrC,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,CAAC,EAAE,YAAY;IAI5B,GAAG,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B9C;;;OAGG;YACW,gBAAgB;IAmC9B;;;OAGG;YACW,UAAU;YAmBV,OAAO;CAyGtB"}
|