proofscan 0.4.2 → 0.5.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 +11 -3
- 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/summary.d.ts +61 -0
- package/dist/commands/summary.d.ts.map +1 -0
- package/dist/commands/summary.js +389 -0
- package/dist/commands/summary.js.map +1 -0
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -18,9 +18,14 @@
|
|
|
18
18
|
* st = status, a = archive, c = config
|
|
19
19
|
*/
|
|
20
20
|
import { Command } from 'commander';
|
|
21
|
+
import { createRequire } from 'module';
|
|
21
22
|
import { resolveConfigPath } from './utils/config-path.js';
|
|
22
23
|
import { setOutputOptions } from './utils/output.js';
|
|
23
|
-
|
|
24
|
+
// Read version from package.json
|
|
25
|
+
const require = createRequire(import.meta.url);
|
|
26
|
+
const packageJson = require('../package.json');
|
|
27
|
+
const VERSION = packageJson.version;
|
|
28
|
+
import { createConfigCommand, createConnectorsCommand, createScanCommand, createMonitorCommand, createSessionsCommand, createArchiveCommand, createViewCommand, createTreeCommand, createExploreCommand, createStatusCommand, createEventsCommand, createRpcCommand, createSummaryCommand, } from './commands/index.js';
|
|
24
29
|
const program = new Command();
|
|
25
30
|
// Global state for config path
|
|
26
31
|
let globalConfigPath;
|
|
@@ -39,6 +44,7 @@ Common Commands:
|
|
|
39
44
|
scan, s Run a new scan
|
|
40
45
|
status, st Show system status
|
|
41
46
|
rpc View RPC call details (list, show)
|
|
47
|
+
summary Show session summary (Phase 3)
|
|
42
48
|
|
|
43
49
|
Management:
|
|
44
50
|
archive, a Archive and prune old data
|
|
@@ -60,7 +66,7 @@ Examples:
|
|
|
60
66
|
program
|
|
61
67
|
.name('pfscan')
|
|
62
68
|
.description('MCP Server scanner - eliminate black boxes by capturing JSON-RPC')
|
|
63
|
-
.version(
|
|
69
|
+
.version(VERSION)
|
|
64
70
|
.option('-c, --config <path>', 'Path to config file')
|
|
65
71
|
.option('--json', 'Output in JSON format')
|
|
66
72
|
.option('-v, --verbose', 'Verbose output')
|
|
@@ -138,6 +144,8 @@ program.addCommand(createMonitorCommand(getConfigPath));
|
|
|
138
144
|
program.addCommand(createEventsCommand(getConfigPath));
|
|
139
145
|
// rpc (Phase 2.2: rpc list, rpc show)
|
|
140
146
|
program.addCommand(createRpcCommand(getConfigPath));
|
|
147
|
+
// summary (Phase 3: capabilities, tool calls, concerns)
|
|
148
|
+
program.addCommand(createSummaryCommand(getConfigPath));
|
|
141
149
|
// ============================================================
|
|
142
150
|
// Default action: pfscan → pfscan view
|
|
143
151
|
// ============================================================
|
|
@@ -150,7 +158,7 @@ function hasSubcommand() {
|
|
|
150
158
|
const knownCommands = new Set([
|
|
151
159
|
'view', 'v', 'tree', 't', 'explore', 'e', 'status', 'st',
|
|
152
160
|
'scan', 's', 'archive', 'a', 'config', 'c',
|
|
153
|
-
'connectors', 'sessions', 'monitor', 'events', 'rpc', 'help'
|
|
161
|
+
'connectors', 'sessions', 'monitor', 'events', 'rpc', 'summary', 'help'
|
|
154
162
|
]);
|
|
155
163
|
for (let i = 2; i < process.argv.length; i++) {
|
|
156
164
|
const arg = process.argv[i];
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAG7B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAG5B,cAAc,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAG7B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAG5B,cAAc,UAAU,CAAC;AAGzB,cAAc,cAAc,CAAC"}
|
package/dist/commands/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAE7B,yBAAyB;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAE5B,yBAAyB;AACzB,cAAc,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAE7B,yBAAyB;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAE5B,yBAAyB;AACzB,cAAc,UAAU,CAAC;AAEzB,uBAAuB;AACvB,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Summary command - Phase 3
|
|
3
|
+
*
|
|
4
|
+
* pfscan summary [--session <sid>] [--latest] [--connector <id>]
|
|
5
|
+
*
|
|
6
|
+
* Shows:
|
|
7
|
+
* - できること(capability): tools from tools/list
|
|
8
|
+
* - やったこと(tool call): tools/call invocations
|
|
9
|
+
* - 注意点: security concerns (max 3 lines)
|
|
10
|
+
*
|
|
11
|
+
* Categories:
|
|
12
|
+
* - 読み取り (read)
|
|
13
|
+
* - 書き込み (write)
|
|
14
|
+
* - ネット接続 (network)
|
|
15
|
+
* - コマンド実行 (exec)
|
|
16
|
+
* - その他操作 (other)
|
|
17
|
+
*/
|
|
18
|
+
import { Command } from 'commander';
|
|
19
|
+
/** Operation category */
|
|
20
|
+
export type OperationCategory = 'read' | 'write' | 'network' | 'exec' | 'other';
|
|
21
|
+
/** Tool info extracted from tools/list response */
|
|
22
|
+
export interface ToolInfo {
|
|
23
|
+
name: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
category: OperationCategory;
|
|
26
|
+
}
|
|
27
|
+
/** Tool call record */
|
|
28
|
+
export interface ToolCallRecord {
|
|
29
|
+
name: string;
|
|
30
|
+
count: number;
|
|
31
|
+
category: OperationCategory;
|
|
32
|
+
}
|
|
33
|
+
/** Summary data structure */
|
|
34
|
+
export interface SummaryData {
|
|
35
|
+
schema_version: string;
|
|
36
|
+
session_id: string;
|
|
37
|
+
connector_id: string;
|
|
38
|
+
resolved_by: 'option' | 'latest' | 'current';
|
|
39
|
+
/** Capabilities from tools/list */
|
|
40
|
+
capabilities: {
|
|
41
|
+
tools: ToolInfo[];
|
|
42
|
+
by_category: Record<OperationCategory, string[]>;
|
|
43
|
+
};
|
|
44
|
+
/** Tool calls from tools/call */
|
|
45
|
+
tool_calls: {
|
|
46
|
+
records: ToolCallRecord[];
|
|
47
|
+
by_category: Record<OperationCategory, {
|
|
48
|
+
name: string;
|
|
49
|
+
count: number;
|
|
50
|
+
}[]>;
|
|
51
|
+
total_count: number;
|
|
52
|
+
};
|
|
53
|
+
/** Security concerns (max 3) */
|
|
54
|
+
concerns: string[];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Classify a tool into a category based on name and description
|
|
58
|
+
*/
|
|
59
|
+
export declare function classifyTool(name: string, description?: string): OperationCategory;
|
|
60
|
+
export declare function createSummaryCommand(getConfigPath: () => string): Command;
|
|
61
|
+
//# sourceMappingURL=summary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../src/commands/summary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,yBAAyB;AACzB,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAWhF,mDAAmD;AACnD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED,uBAAuB;AACvB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED,6BAA6B;AAC7B,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAE7C,mCAAmC;IACnC,YAAY,EAAE;QACZ,KAAK,EAAE,QAAQ,EAAE,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC,CAAC;KAClD,CAAC;IAEF,iCAAiC;IACjC,UAAU,EAAE;QACV,OAAO,EAAE,cAAc,EAAE,CAAC;QAC1B,WAAW,EAAE,MAAM,CAAC,iBAAiB,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC,CAAC;QAC1E,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF,gCAAgC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAyED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAwBlF;AAwRD,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,MAAM,GAAG,OAAO,CAkDzE"}
|
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Summary command - Phase 3
|
|
3
|
+
*
|
|
4
|
+
* pfscan summary [--session <sid>] [--latest] [--connector <id>]
|
|
5
|
+
*
|
|
6
|
+
* Shows:
|
|
7
|
+
* - できること(capability): tools from tools/list
|
|
8
|
+
* - やったこと(tool call): tools/call invocations
|
|
9
|
+
* - 注意点: security concerns (max 3 lines)
|
|
10
|
+
*
|
|
11
|
+
* Categories:
|
|
12
|
+
* - 読み取り (read)
|
|
13
|
+
* - 書き込み (write)
|
|
14
|
+
* - ネット接続 (network)
|
|
15
|
+
* - コマンド実行 (exec)
|
|
16
|
+
* - その他操作 (other)
|
|
17
|
+
*/
|
|
18
|
+
import { Command } from 'commander';
|
|
19
|
+
import { ConfigManager } from '../config/index.js';
|
|
20
|
+
import { getEventsDb } from '../db/connection.js';
|
|
21
|
+
import { output, getOutputOptions } from '../utils/output.js';
|
|
22
|
+
import { resolveSession, isSessionError, formatSessionError, } from '../utils/session-resolver.js';
|
|
23
|
+
import { shortenId } from '../eventline/types.js';
|
|
24
|
+
/** Japanese labels for categories */
|
|
25
|
+
const CATEGORY_LABELS = {
|
|
26
|
+
read: '読み取り (read)',
|
|
27
|
+
write: '書き込み (write)',
|
|
28
|
+
network: 'ネット接続 (network)',
|
|
29
|
+
exec: 'コマンド実行 (exec)',
|
|
30
|
+
other: 'その他操作 (other)',
|
|
31
|
+
};
|
|
32
|
+
// ============================================================
|
|
33
|
+
// Category Classification
|
|
34
|
+
// ============================================================
|
|
35
|
+
/** Keywords for category classification */
|
|
36
|
+
const CATEGORY_KEYWORDS = {
|
|
37
|
+
read: [
|
|
38
|
+
/read/i,
|
|
39
|
+
/get/i,
|
|
40
|
+
/list/i,
|
|
41
|
+
/search/i,
|
|
42
|
+
/query/i,
|
|
43
|
+
/fetch/i,
|
|
44
|
+
/find/i,
|
|
45
|
+
/show/i,
|
|
46
|
+
/view/i,
|
|
47
|
+
/cat/i,
|
|
48
|
+
/head/i,
|
|
49
|
+
/tail/i,
|
|
50
|
+
/ls/i,
|
|
51
|
+
/dir/i,
|
|
52
|
+
],
|
|
53
|
+
write: [
|
|
54
|
+
/write/i,
|
|
55
|
+
/create/i,
|
|
56
|
+
/update/i,
|
|
57
|
+
/delete/i,
|
|
58
|
+
/remove/i,
|
|
59
|
+
/edit/i,
|
|
60
|
+
/modify/i,
|
|
61
|
+
/set/i,
|
|
62
|
+
/put/i,
|
|
63
|
+
/post/i,
|
|
64
|
+
/save/i,
|
|
65
|
+
/mkdir/i,
|
|
66
|
+
/touch/i,
|
|
67
|
+
/mv/i,
|
|
68
|
+
/cp/i,
|
|
69
|
+
/rm/i,
|
|
70
|
+
],
|
|
71
|
+
network: [
|
|
72
|
+
/http/i,
|
|
73
|
+
/https/i,
|
|
74
|
+
/fetch/i,
|
|
75
|
+
/request/i,
|
|
76
|
+
/api/i,
|
|
77
|
+
/url/i,
|
|
78
|
+
/web/i,
|
|
79
|
+
/net/i,
|
|
80
|
+
/socket/i,
|
|
81
|
+
/connect/i,
|
|
82
|
+
/download/i,
|
|
83
|
+
/upload/i,
|
|
84
|
+
/curl/i,
|
|
85
|
+
/wget/i,
|
|
86
|
+
],
|
|
87
|
+
exec: [
|
|
88
|
+
/exec/i,
|
|
89
|
+
/run/i,
|
|
90
|
+
/shell/i,
|
|
91
|
+
/bash/i,
|
|
92
|
+
/cmd/i,
|
|
93
|
+
/command/i,
|
|
94
|
+
/spawn/i,
|
|
95
|
+
/process/i,
|
|
96
|
+
/script/i,
|
|
97
|
+
/terminal/i,
|
|
98
|
+
],
|
|
99
|
+
other: [],
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Classify a tool into a category based on name and description
|
|
103
|
+
*/
|
|
104
|
+
export function classifyTool(name, description) {
|
|
105
|
+
const text = `${name} ${description || ''}`.toLowerCase();
|
|
106
|
+
// Check exec first (highest risk)
|
|
107
|
+
for (const pattern of CATEGORY_KEYWORDS.exec) {
|
|
108
|
+
if (pattern.test(text))
|
|
109
|
+
return 'exec';
|
|
110
|
+
}
|
|
111
|
+
// Check network
|
|
112
|
+
for (const pattern of CATEGORY_KEYWORDS.network) {
|
|
113
|
+
if (pattern.test(text))
|
|
114
|
+
return 'network';
|
|
115
|
+
}
|
|
116
|
+
// Check write
|
|
117
|
+
for (const pattern of CATEGORY_KEYWORDS.write) {
|
|
118
|
+
if (pattern.test(text))
|
|
119
|
+
return 'write';
|
|
120
|
+
}
|
|
121
|
+
// Check read
|
|
122
|
+
for (const pattern of CATEGORY_KEYWORDS.read) {
|
|
123
|
+
if (pattern.test(text))
|
|
124
|
+
return 'read';
|
|
125
|
+
}
|
|
126
|
+
return 'other';
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Extract tools from tools/list response
|
|
130
|
+
*/
|
|
131
|
+
function extractToolsFromSession(configDir, sessionId) {
|
|
132
|
+
const db = getEventsDb(configDir);
|
|
133
|
+
// Find tools/list response
|
|
134
|
+
const toolsListRpc = db.prepare(`
|
|
135
|
+
SELECT rpc_id FROM rpc_calls
|
|
136
|
+
WHERE session_id = ? AND method = 'tools/list'
|
|
137
|
+
ORDER BY request_ts ASC
|
|
138
|
+
LIMIT 1
|
|
139
|
+
`).get(sessionId);
|
|
140
|
+
if (!toolsListRpc) {
|
|
141
|
+
return [];
|
|
142
|
+
}
|
|
143
|
+
// Get the response event
|
|
144
|
+
const responseEvent = db.prepare(`
|
|
145
|
+
SELECT raw_json FROM events
|
|
146
|
+
WHERE session_id = ? AND rpc_id = ? AND kind = 'response'
|
|
147
|
+
LIMIT 1
|
|
148
|
+
`).get(sessionId, toolsListRpc.rpc_id);
|
|
149
|
+
if (!responseEvent?.raw_json) {
|
|
150
|
+
return [];
|
|
151
|
+
}
|
|
152
|
+
try {
|
|
153
|
+
const response = JSON.parse(responseEvent.raw_json);
|
|
154
|
+
const result = response.result;
|
|
155
|
+
if (!result?.tools || !Array.isArray(result.tools)) {
|
|
156
|
+
return [];
|
|
157
|
+
}
|
|
158
|
+
return result.tools.map(tool => ({
|
|
159
|
+
name: tool.name,
|
|
160
|
+
description: tool.description,
|
|
161
|
+
category: classifyTool(tool.name, tool.description),
|
|
162
|
+
}));
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
return [];
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Extract tool calls from tools/call requests
|
|
170
|
+
*/
|
|
171
|
+
function extractToolCalls(configDir, sessionId) {
|
|
172
|
+
const db = getEventsDb(configDir);
|
|
173
|
+
// Find all tools/call requests
|
|
174
|
+
const toolCalls = db.prepare(`
|
|
175
|
+
SELECT rc.rpc_id, e.raw_json
|
|
176
|
+
FROM rpc_calls rc
|
|
177
|
+
JOIN events e ON rc.session_id = e.session_id AND rc.rpc_id = e.rpc_id
|
|
178
|
+
WHERE rc.session_id = ? AND rc.method = 'tools/call' AND e.kind = 'request'
|
|
179
|
+
`).all(sessionId);
|
|
180
|
+
// Count by tool name
|
|
181
|
+
const counts = new Map();
|
|
182
|
+
for (const call of toolCalls) {
|
|
183
|
+
if (!call.raw_json)
|
|
184
|
+
continue;
|
|
185
|
+
try {
|
|
186
|
+
const request = JSON.parse(call.raw_json);
|
|
187
|
+
const params = request.params;
|
|
188
|
+
const toolName = params?.name || 'unknown';
|
|
189
|
+
counts.set(toolName, (counts.get(toolName) || 0) + 1);
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
// Ignore parse errors
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Convert to records
|
|
196
|
+
return Array.from(counts.entries()).map(([name, count]) => ({
|
|
197
|
+
name,
|
|
198
|
+
count,
|
|
199
|
+
category: classifyTool(name),
|
|
200
|
+
}));
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Generate concerns based on capabilities and tool calls
|
|
204
|
+
*/
|
|
205
|
+
function generateConcerns(capabilities, toolCalls) {
|
|
206
|
+
const concerns = [];
|
|
207
|
+
// Check for exec capability
|
|
208
|
+
const hasExecCapability = capabilities.some(t => t.category === 'exec');
|
|
209
|
+
const hasExecCall = toolCalls.some(t => t.category === 'exec');
|
|
210
|
+
if (hasExecCall) {
|
|
211
|
+
concerns.push('コマンド実行が行われました');
|
|
212
|
+
}
|
|
213
|
+
else if (hasExecCapability) {
|
|
214
|
+
concerns.push('コマンド実行可能');
|
|
215
|
+
}
|
|
216
|
+
// Check for write
|
|
217
|
+
const hasWriteCall = toolCalls.some(t => t.category === 'write');
|
|
218
|
+
if (hasWriteCall) {
|
|
219
|
+
concerns.push('書き込み操作あり');
|
|
220
|
+
}
|
|
221
|
+
// Check for network
|
|
222
|
+
const hasNetworkCall = toolCalls.some(t => t.category === 'network');
|
|
223
|
+
if (hasNetworkCall) {
|
|
224
|
+
concerns.push('外部ネットワーク接続あり');
|
|
225
|
+
}
|
|
226
|
+
// Limit to 3 concerns
|
|
227
|
+
return concerns.slice(0, 3);
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Group items by category
|
|
231
|
+
*/
|
|
232
|
+
function groupByCategory(items) {
|
|
233
|
+
const result = {
|
|
234
|
+
read: [],
|
|
235
|
+
write: [],
|
|
236
|
+
network: [],
|
|
237
|
+
exec: [],
|
|
238
|
+
other: [],
|
|
239
|
+
};
|
|
240
|
+
for (const item of items) {
|
|
241
|
+
result[item.category].push(item);
|
|
242
|
+
}
|
|
243
|
+
return result;
|
|
244
|
+
}
|
|
245
|
+
// ============================================================
|
|
246
|
+
// Summary Generation
|
|
247
|
+
// ============================================================
|
|
248
|
+
/**
|
|
249
|
+
* Generate summary data for a session
|
|
250
|
+
*/
|
|
251
|
+
function generateSummary(configDir, sessionId, connectorId, resolvedBy) {
|
|
252
|
+
const capabilities = extractToolsFromSession(configDir, sessionId);
|
|
253
|
+
const toolCalls = extractToolCalls(configDir, sessionId);
|
|
254
|
+
const concerns = generateConcerns(capabilities, toolCalls);
|
|
255
|
+
// Group capabilities by category
|
|
256
|
+
const capabilitiesByCategory = groupByCategory(capabilities);
|
|
257
|
+
const capabilitiesSimple = {
|
|
258
|
+
read: capabilitiesByCategory.read.map(t => t.name),
|
|
259
|
+
write: capabilitiesByCategory.write.map(t => t.name),
|
|
260
|
+
network: capabilitiesByCategory.network.map(t => t.name),
|
|
261
|
+
exec: capabilitiesByCategory.exec.map(t => t.name),
|
|
262
|
+
other: capabilitiesByCategory.other.map(t => t.name),
|
|
263
|
+
};
|
|
264
|
+
// Group tool calls by category
|
|
265
|
+
const toolCallsByCategory = groupByCategory(toolCalls);
|
|
266
|
+
const toolCallsSimple = {
|
|
267
|
+
read: toolCallsByCategory.read.map(t => ({ name: t.name, count: t.count })),
|
|
268
|
+
write: toolCallsByCategory.write.map(t => ({ name: t.name, count: t.count })),
|
|
269
|
+
network: toolCallsByCategory.network.map(t => ({ name: t.name, count: t.count })),
|
|
270
|
+
exec: toolCallsByCategory.exec.map(t => ({ name: t.name, count: t.count })),
|
|
271
|
+
other: toolCallsByCategory.other.map(t => ({ name: t.name, count: t.count })),
|
|
272
|
+
};
|
|
273
|
+
return {
|
|
274
|
+
schema_version: 'phase3.summary.v1',
|
|
275
|
+
session_id: sessionId,
|
|
276
|
+
connector_id: connectorId,
|
|
277
|
+
resolved_by: resolvedBy,
|
|
278
|
+
capabilities: {
|
|
279
|
+
tools: capabilities,
|
|
280
|
+
by_category: capabilitiesSimple,
|
|
281
|
+
},
|
|
282
|
+
tool_calls: {
|
|
283
|
+
records: toolCalls,
|
|
284
|
+
by_category: toolCallsSimple,
|
|
285
|
+
total_count: toolCalls.reduce((sum, t) => sum + t.count, 0),
|
|
286
|
+
},
|
|
287
|
+
concerns,
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
// ============================================================
|
|
291
|
+
// Rendering
|
|
292
|
+
// ============================================================
|
|
293
|
+
/**
|
|
294
|
+
* Render summary to terminal
|
|
295
|
+
*/
|
|
296
|
+
function renderSummary(data) {
|
|
297
|
+
console.log(`${data.connector_id} (session: ${shortenId(data.session_id, 8)}...)`);
|
|
298
|
+
console.log();
|
|
299
|
+
// できること (capabilities)
|
|
300
|
+
console.log('├── できること(capability):');
|
|
301
|
+
const capabilityNames = data.capabilities.tools.map(t => t.name);
|
|
302
|
+
if (capabilityNames.length > 0) {
|
|
303
|
+
// Show up to 5 tools, then "..." if more
|
|
304
|
+
const shown = capabilityNames.slice(0, 5);
|
|
305
|
+
const extra = capabilityNames.length - shown.length;
|
|
306
|
+
const suffix = extra > 0 ? ` (+${extra} more)` : '';
|
|
307
|
+
console.log(`│ ${shown.join(', ')}${suffix}`);
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
console.log('│ (なし)');
|
|
311
|
+
}
|
|
312
|
+
// Show by category if verbose or many tools
|
|
313
|
+
if (data.capabilities.tools.length > 3) {
|
|
314
|
+
for (const [cat, label] of Object.entries(CATEGORY_LABELS)) {
|
|
315
|
+
const tools = data.capabilities.by_category[cat];
|
|
316
|
+
if (tools.length > 0) {
|
|
317
|
+
console.log(`│ - ${label}: ${tools.join(', ')}`);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
// やったこと (tool calls)
|
|
322
|
+
console.log('├── やったこと(tool call):');
|
|
323
|
+
if (data.tool_calls.total_count > 0) {
|
|
324
|
+
const callStrings = data.tool_calls.records.map(t => t.count > 1 ? `${t.name} (${t.count}回)` : t.name);
|
|
325
|
+
// Show up to 5 calls, then "..." if more
|
|
326
|
+
const shown = callStrings.slice(0, 5);
|
|
327
|
+
const extra = callStrings.length - shown.length;
|
|
328
|
+
const suffix = extra > 0 ? ` (+${extra} more)` : '';
|
|
329
|
+
console.log(`│ ${shown.join(', ')}${suffix}`);
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
console.log('│ (なし)');
|
|
333
|
+
}
|
|
334
|
+
// 注意点 (concerns)
|
|
335
|
+
if (data.concerns.length > 0) {
|
|
336
|
+
console.log('└── 注意点:');
|
|
337
|
+
for (let i = 0; i < data.concerns.length; i++) {
|
|
338
|
+
const prefix = i === data.concerns.length - 1 ? ' ' : '│ ';
|
|
339
|
+
console.log(`${prefix}⚠ ${data.concerns[i]}`);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
console.log('└── 注意点: (なし)');
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
// ============================================================
|
|
347
|
+
// Command
|
|
348
|
+
// ============================================================
|
|
349
|
+
export function createSummaryCommand(getConfigPath) {
|
|
350
|
+
const cmd = new Command('summary')
|
|
351
|
+
.description('Show session summary with capabilities and tool calls')
|
|
352
|
+
.option('--session <id>', 'Session ID (partial match supported)')
|
|
353
|
+
.option('--latest', 'Use the latest session')
|
|
354
|
+
.option('--connector <id>', 'Filter by connector (with --latest)')
|
|
355
|
+
.action(async (options) => {
|
|
356
|
+
try {
|
|
357
|
+
const manager = new ConfigManager(getConfigPath());
|
|
358
|
+
const configDir = manager.getConfigDir();
|
|
359
|
+
// Resolve session
|
|
360
|
+
const result = resolveSession({
|
|
361
|
+
sessionId: options.session,
|
|
362
|
+
latest: options.latest,
|
|
363
|
+
connectorId: options.connector,
|
|
364
|
+
configDir,
|
|
365
|
+
});
|
|
366
|
+
if (isSessionError(result)) {
|
|
367
|
+
console.error(formatSessionError(result));
|
|
368
|
+
process.exit(1);
|
|
369
|
+
}
|
|
370
|
+
// Generate summary
|
|
371
|
+
const summary = generateSummary(configDir, result.sessionId, result.connectorId, result.resolvedBy);
|
|
372
|
+
if (getOutputOptions().json) {
|
|
373
|
+
output(summary);
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
renderSummary(summary);
|
|
377
|
+
}
|
|
378
|
+
catch (error) {
|
|
379
|
+
if (error instanceof Error && error.message.includes('no such table')) {
|
|
380
|
+
console.log('No data yet. Run a scan first:');
|
|
381
|
+
console.log(' pfscan scan start --id <connector>');
|
|
382
|
+
return;
|
|
383
|
+
}
|
|
384
|
+
throw error;
|
|
385
|
+
}
|
|
386
|
+
});
|
|
387
|
+
return cmd;
|
|
388
|
+
}
|
|
389
|
+
//# sourceMappingURL=summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary.js","sourceRoot":"","sources":["../../src/commands/summary.ts"],"names":[],"mappings":"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"}
|