proofscan 0.4.1 → 0.5.0

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/README.ja.md ADDED
@@ -0,0 +1,167 @@
1
+ # ProofScan(日本語)
2
+
3
+ > **Languages:** [English](README.md) | 日本語
4
+
5
+ MCPサーバースキャナー - JSON-RPC通信を記録し、ブラックボックスを可視化します。
6
+
7
+ ## 概要
8
+
9
+ proofscanは、MCP(Model Context Protocol)サーバーとの通信を可視化するツールです。
10
+
11
+ - MCPサーバーへのstdio接続を確立
12
+ - すべてのJSON-RPCメッセージ(リクエスト、レスポンス、通知)を記録
13
+ - SQLiteに保存し、効率的なクエリと分析が可能
14
+ - mcp.so / Claude Desktop形式からの設定インポートに対応
15
+ - 直感的なCLIコマンドでデータを確認・探索
16
+
17
+ ## インストール
18
+
19
+ ```bash
20
+ npm install -g proofscan
21
+ ```
22
+
23
+ またはインストールせずに実行:
24
+
25
+ ```bash
26
+ npx proofscan --help
27
+ ```
28
+
29
+ ## クイックスタート
30
+
31
+ ```bash
32
+ # 1. 設定を初期化
33
+ pfscan config init
34
+
35
+ # 2. MCPサーバーをインポート
36
+ echo '{"mcpServers":{"time":{"command":"uvx","args":["mcp-server-time"]}}}' \
37
+ | pfscan connectors import --from mcpServers --stdin
38
+
39
+ # 3. スキャンして確認
40
+ pfscan scan start --id time # スキャン実行
41
+ pfscan # 最近のイベントを表示
42
+ pfscan tree # 構造を表示
43
+ ```
44
+
45
+ ## Phase 3 コンセプト
46
+
47
+ ### 設計思想:すべてを残す → 意味のあるものを残す
48
+
49
+ Phase 3では、「すべてのJSON-RPCを記録する」から「セキュリティ上意味のあるものを効率的に残す」へと進化します。
50
+
51
+ ### 用語定義
52
+
53
+ | 日本語 | 英語 | 意味 |
54
+ |--------|------|------|
55
+ | **できること** | capability | サーバーが提供する機能(tools/list で取得) |
56
+ | **やったこと** | tool call | 実際に実行されたツール呼び出し(tools/call) |
57
+
58
+ ### 操作カテゴリ
59
+
60
+ ツールの操作は以下のカテゴリに分類されます:
61
+
62
+ - **読み取り** - ファイルやデータの読み込み
63
+ - **書き込み** - ファイルやデータの変更
64
+ - **ネット接続** - 外部ネットワークへのアクセス
65
+ - **コマンド実行** - シェルコマンドの実行
66
+ - **その他操作** - 上記以外の操作
67
+
68
+ ### CLIコマンド
69
+
70
+ #### pfscan summary
71
+
72
+ サマリー表示。**注意点**(セキュリティ上の懸念)も含めて表示します。
73
+
74
+ ```bash
75
+ $ pfscan summary --session abc123
76
+
77
+ time (1 session)
78
+ ├── できること: read_file, write_file, execute_command
79
+ ├── やったこと: read_file (3回), write_file (1回)
80
+ └── 注意点: コマンド実行可能、書き込み操作あり
81
+ ```
82
+
83
+ #### pfscan permissions
84
+
85
+ 詳細なパーミッション情報を表示します。**注意点は表示しません**(詳細確認用のため)。
86
+
87
+ ```bash
88
+ $ pfscan permissions --session abc123
89
+
90
+ time
91
+ ├── 読み取り: read_file
92
+ ├── 書き込み: write_file
93
+ ├── コマンド実行: execute_command
94
+ └── その他操作: (なし)
95
+ ```
96
+
97
+ ### record dry-run
98
+
99
+ スキャン候補の記録をプレビューします。
100
+
101
+ ```bash
102
+ # デフォルト: tools/call のみ候補化
103
+ $ pfscan record dry-run --session abc123
104
+
105
+ 記録候補:
106
+ [1] tools/call: read_file (2025-12-28 12:00:00)
107
+ [2] tools/call: write_file (2025-12-28 12:00:05)
108
+
109
+ # --include-capabilities: tools/list も候補に追加
110
+ $ pfscan record dry-run --session abc123 --include-capabilities
111
+
112
+ 記録候補:
113
+ [0] tools/list (2025-12-28 11:59:55) ← 1回のみ
114
+ [1] tools/call: read_file (2025-12-28 12:00:00)
115
+ [2] tools/call: write_file (2025-12-28 12:00:05)
116
+ ```
117
+
118
+ ### セキュリティデフォルト
119
+
120
+ 安全を優先した設計:
121
+
122
+ | 設定 | デフォルト | 説明 |
123
+ |------|-----------|------|
124
+ | input/output | `digest_only` | 生データではなくハッシュのみ保存 |
125
+ | canonicalize | `sha256` | 正規化後にSHA-256ハッシュ化 |
126
+
127
+ これにより、機密データの漏洩リスクを最小化しながら、操作の証跡を残すことができます。
128
+
129
+ ## 主要コマンド
130
+
131
+ ```
132
+ 共通コマンド:
133
+ view, v 最近のイベントタイムラインを表示(デフォルト)
134
+ tree, t connector → session → rpc の構造を表示
135
+ explore, e インタラクティブなデータブラウザ
136
+ scan, s 新しいスキャンを実行
137
+ status, st システム状態を表示
138
+ rpc RPC呼び出しの詳細を表示
139
+
140
+ 管理:
141
+ archive, a 古いデータのアーカイブと削除
142
+ config, c 設定管理
143
+ connectors コネクタ管理
144
+
145
+ ショートカット:
146
+ v=view t=tree e=explore s=scan st=status a=archive c=config
147
+ ```
148
+
149
+ ## 設定ファイルの場所
150
+
151
+ OSごとの標準的な場所に保存されます:
152
+
153
+ - **Windows**: `%APPDATA%\proofscan\config.json`
154
+ - **macOS**: `~/Library/Application Support/proofscan/config.json`
155
+ - **Linux**: `~/.config/proofscan/config.json`
156
+
157
+ ## グローバルオプション
158
+
159
+ ```
160
+ -c, --config <path> 設定ファイルのパス
161
+ --json JSON形式で出力
162
+ -v, --verbose 詳細出力
163
+ ```
164
+
165
+ ## ライセンス
166
+
167
+ MIT
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # proofscan
2
2
 
3
+ > **Languages:** English | [日本語](README.ja.md)
4
+
3
5
  MCP Server scanner - eliminate black boxes by capturing JSON-RPC from connection to tools/list.
4
6
 
5
7
  ## Overview
package/dist/cli.js CHANGED
@@ -20,7 +20,7 @@
20
20
  import { Command } from 'commander';
21
21
  import { resolveConfigPath } from './utils/config-path.js';
22
22
  import { setOutputOptions } from './utils/output.js';
23
- import { createConfigCommand, createConnectorsCommand, createScanCommand, createMonitorCommand, createSessionsCommand, createArchiveCommand, createViewCommand, createTreeCommand, createExploreCommand, createStatusCommand, createEventsCommand, createRpcCommand, } from './commands/index.js';
23
+ import { createConfigCommand, createConnectorsCommand, createScanCommand, createMonitorCommand, createSessionsCommand, createArchiveCommand, createViewCommand, createTreeCommand, createExploreCommand, createStatusCommand, createEventsCommand, createRpcCommand, createSummaryCommand, } from './commands/index.js';
24
24
  const program = new Command();
25
25
  // Global state for config path
26
26
  let globalConfigPath;
@@ -39,6 +39,7 @@ Common Commands:
39
39
  scan, s Run a new scan
40
40
  status, st Show system status
41
41
  rpc View RPC call details (list, show)
42
+ summary Show session summary (Phase 3)
42
43
 
43
44
  Management:
44
45
  archive, a Archive and prune old data
@@ -138,6 +139,8 @@ program.addCommand(createMonitorCommand(getConfigPath));
138
139
  program.addCommand(createEventsCommand(getConfigPath));
139
140
  // rpc (Phase 2.2: rpc list, rpc show)
140
141
  program.addCommand(createRpcCommand(getConfigPath));
142
+ // summary (Phase 3: capabilities, tool calls, concerns)
143
+ program.addCommand(createSummaryCommand(getConfigPath));
141
144
  // ============================================================
142
145
  // Default action: pfscan → pfscan view
143
146
  // ============================================================
@@ -150,7 +153,7 @@ function hasSubcommand() {
150
153
  const knownCommands = new Set([
151
154
  'view', 'v', 'tree', 't', 'explore', 'e', 'status', 'st',
152
155
  'scan', 's', 'archive', 'a', 'config', 'c',
153
- 'connectors', 'sessions', 'monitor', 'events', 'rpc', 'help'
156
+ 'connectors', 'sessions', 'monitor', 'events', 'rpc', 'summary', 'help'
154
157
  ]);
155
158
  for (let i = 2; i < process.argv.length; i++) {
156
159
  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":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -10,4 +10,5 @@ export * from './explore.js';
10
10
  export * from './status.js';
11
11
  export * from './events.js';
12
12
  export * from './rpc.js';
13
+ export * from './summary.js';
13
14
  //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -13,4 +13,6 @@ export * from './status.js';
13
13
  export * from './events.js';
14
14
  // Phase 2.2 new commands
15
15
  export * from './rpc.js';
16
+ // Phase 3 new commands
17
+ export * from './summary.js';
16
18
  //# sourceMappingURL=index.js.map
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "proofscan",
3
- "version": "0.4.1",
3
+ "version": "0.5.0",
4
4
  "description": "MCP Server scanner - eliminate black boxes by capturing JSON-RPC from connection to tools/list",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",