proofscan 0.10.20 → 0.10.22
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 +30 -21
- package/README.md +31 -22
- package/dist/cli.d.ts +3 -3
- package/dist/cli.js +22 -59
- package/dist/cli.js.map +1 -1
- package/dist/commands/analyze.d.ts +72 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +382 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/archive.d.ts.map +1 -1
- package/dist/commands/archive.js +85 -103
- package/dist/commands/archive.js.map +1 -1
- package/dist/commands/connectors.d.ts.map +1 -1
- package/dist/commands/connectors.js +11 -5
- package/dist/commands/connectors.js.map +1 -1
- package/dist/commands/i18n.d.ts +10 -0
- package/dist/commands/i18n.d.ts.map +1 -0
- package/dist/commands/i18n.js +49 -0
- package/dist/commands/i18n.js.map +1 -0
- package/dist/commands/index.d.ts +1 -4
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +3 -5
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/popl.js +3 -3
- package/dist/commands/popl.js.map +1 -1
- package/dist/commands/record.d.ts.map +1 -1
- package/dist/commands/record.js +21 -18
- package/dist/commands/record.js.map +1 -1
- package/dist/commands/rpc.d.ts.map +1 -1
- package/dist/commands/rpc.js +21 -11
- package/dist/commands/rpc.js.map +1 -1
- package/dist/commands/secrets.d.ts.map +1 -1
- package/dist/commands/secrets.js +15 -8
- package/dist/commands/secrets.js.map +1 -1
- package/dist/commands/summary.d.ts.map +1 -1
- package/dist/commands/summary.js +19 -29
- package/dist/commands/summary.js.map +1 -1
- package/dist/commands/tool.d.ts.map +1 -1
- package/dist/commands/tool.js +1 -0
- package/dist/commands/tool.js.map +1 -1
- package/dist/commands/view.d.ts +5 -0
- package/dist/commands/view.d.ts.map +1 -1
- package/dist/commands/view.js +242 -11
- package/dist/commands/view.js.map +1 -1
- package/dist/db/tool-analysis.d.ts +117 -0
- package/dist/db/tool-analysis.d.ts.map +1 -0
- package/dist/db/tool-analysis.js +474 -0
- package/dist/db/tool-analysis.js.map +1 -0
- package/dist/help/categories.d.ts +39 -0
- package/dist/help/categories.d.ts.map +1 -0
- package/dist/help/categories.js +219 -0
- package/dist/help/categories.js.map +1 -0
- package/dist/help/index.d.ts +39 -0
- package/dist/help/index.d.ts.map +1 -0
- package/dist/help/index.js +138 -0
- package/dist/help/index.js.map +1 -0
- package/dist/i18n/index.d.ts +52 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +165 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/locales/en.d.ts +238 -0
- package/dist/i18n/locales/en.d.ts.map +1 -0
- package/dist/i18n/locales/en.js +245 -0
- package/dist/i18n/locales/en.js.map +1 -0
- package/dist/i18n/locales/ja.d.ts +8 -0
- package/dist/i18n/locales/ja.d.ts.map +1 -0
- package/dist/i18n/locales/ja.js +243 -0
- package/dist/i18n/locales/ja.js.map +1 -0
- package/dist/shell/completer.d.ts.map +1 -1
- package/dist/shell/completer.js +4 -15
- package/dist/shell/completer.js.map +1 -1
- package/dist/shell/repl.d.ts +5 -5
- package/dist/shell/repl.d.ts.map +1 -1
- package/dist/shell/repl.js +73 -152
- package/dist/shell/repl.js.map +1 -1
- package/dist/shell/router-commands.d.ts +1 -1
- package/dist/shell/router-commands.js +1 -1
- package/dist/shell/types.d.ts +0 -1
- package/dist/shell/types.d.ts.map +1 -1
- package/dist/shell/types.js +5 -9
- package/dist/shell/types.js.map +1 -1
- package/package.json +1 -1
- package/dist/commands/events.d.ts +0 -7
- package/dist/commands/events.d.ts.map +0 -1
- package/dist/commands/events.js +0 -185
- package/dist/commands/events.js.map +0 -1
- package/dist/commands/explore.d.ts +0 -9
- package/dist/commands/explore.d.ts.map +0 -1
- package/dist/commands/explore.js +0 -346
- package/dist/commands/explore.js.map +0 -1
- package/dist/commands/monitor.d.ts +0 -7
- package/dist/commands/monitor.d.ts.map +0 -1
- package/dist/commands/monitor.js +0 -109
- package/dist/commands/monitor.js.map +0 -1
- package/dist/commands/permissions.d.ts +0 -44
- package/dist/commands/permissions.d.ts.map +0 -1
- package/dist/commands/permissions.js +0 -256
- package/dist/commands/permissions.js.map +0 -1
package/README.ja.md
CHANGED
|
@@ -80,6 +80,12 @@ Time Sym Dir St Method Session Extra
|
|
|
80
80
|
21:01:59.025 • → notifications/initi... f2442c...
|
|
81
81
|
21:01:59.037 → → ✓ tools/list f2442c...
|
|
82
82
|
21:01:59.049 ← ← ✓ tools/list f2442c... lat=12ms size=1.0KB
|
|
83
|
+
|
|
84
|
+
# リアルタイム監視
|
|
85
|
+
$ pfscan view -f --connector time
|
|
86
|
+
|
|
87
|
+
# ファイルへエクスポート
|
|
88
|
+
$ pfscan view --export events.csv
|
|
83
89
|
```
|
|
84
90
|
|
|
85
91
|
### 🌳 階層ツリー
|
|
@@ -140,35 +146,37 @@ pfscan tool call time get_current_time --args '{}'
|
|
|
140
146
|
## コマンド概要
|
|
141
147
|
|
|
142
148
|
```
|
|
143
|
-
|
|
149
|
+
観察・調査:
|
|
144
150
|
view, v 最近のイベントタイムライン表示(デフォルト)
|
|
145
151
|
tree, t コネクタ → セッション → RPC 構造表示
|
|
146
|
-
explore, e 対話的データブラウザ
|
|
147
|
-
scan, s 新規スキャン実行
|
|
148
|
-
status, st システムステータス表示
|
|
149
|
-
shell 対話型シェル(REPL)TAB 補完付き
|
|
150
152
|
rpc RPC 呼び出し詳細表示(list, show)
|
|
151
153
|
summary セッションサマリ表示
|
|
152
|
-
|
|
154
|
+
analyze セッション横断のツール使用状況分析
|
|
155
|
+
|
|
156
|
+
実行・キャプチャ:
|
|
157
|
+
scan, s 新規スキャン実行
|
|
158
|
+
proxy MCP プロキシサーバー
|
|
159
|
+
|
|
160
|
+
対話的探索:
|
|
161
|
+
shell 対話型シェル(REPL)TAB 補完付き
|
|
162
|
+
|
|
163
|
+
MCP ツール操作:
|
|
153
164
|
tool MCP ツール操作(ls, show, call)
|
|
165
|
+
catalog レジストリから MCP サーバーを検索・表示
|
|
166
|
+
runners パッケージランナー管理(npx, uvx)
|
|
154
167
|
|
|
155
|
-
|
|
156
|
-
archive, a 古いデータのアーカイブと削減
|
|
157
|
-
config, c 設定管理
|
|
168
|
+
設定・データ管理:
|
|
158
169
|
connectors コネクタ管理
|
|
170
|
+
config, c 設定管理
|
|
159
171
|
secrets シークレット管理
|
|
172
|
+
archive, a データ保持とクリーンアップ
|
|
160
173
|
doctor データベース診断と修復
|
|
161
|
-
popl 公開可能証明台帳
|
|
162
174
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
log プロキシログ表示
|
|
166
|
-
monitor スキャンイベント監視
|
|
167
|
-
sessions セッション管理
|
|
168
|
-
events イベントエクスポート
|
|
175
|
+
証明・台帳:
|
|
176
|
+
popl 公開可能証明台帳
|
|
169
177
|
|
|
170
178
|
ショートカット:
|
|
171
|
-
v=view t=tree
|
|
179
|
+
v=view t=tree s=scan st=status a=archive c=config
|
|
172
180
|
```
|
|
173
181
|
|
|
174
182
|
## ドキュメント
|
|
@@ -264,12 +272,13 @@ pfscan rpc list --session abc # RPC 詳細
|
|
|
264
272
|
```bash
|
|
265
273
|
pfscan shell
|
|
266
274
|
|
|
267
|
-
#
|
|
268
|
-
proofscan>
|
|
269
|
-
proofscan> pwd
|
|
275
|
+
# cd コマンドでナビゲーション
|
|
276
|
+
proofscan> cd time
|
|
277
|
+
proofscan:/time > pwd
|
|
270
278
|
Context: connector=time
|
|
271
279
|
|
|
272
|
-
proofscan>
|
|
280
|
+
proofscan:/time > cd abc123
|
|
281
|
+
proofscan:/time/abc123 > pwd
|
|
273
282
|
Context: session=abc123 (connector=time)
|
|
274
283
|
|
|
275
284
|
# 参照を保存して後で使用
|
package/README.md
CHANGED
|
@@ -80,6 +80,12 @@ Time Sym Dir St Method Session Extra
|
|
|
80
80
|
21:01:59.025 • → notifications/initi... f2442c...
|
|
81
81
|
21:01:59.037 → → ✓ tools/list f2442c...
|
|
82
82
|
21:01:59.049 ← ← ✓ tools/list f2442c... lat=12ms size=1.0KB
|
|
83
|
+
|
|
84
|
+
# Real-time monitoring
|
|
85
|
+
$ pfscan view -f --connector time
|
|
86
|
+
|
|
87
|
+
# Export to file
|
|
88
|
+
$ pfscan view --export events.csv
|
|
83
89
|
```
|
|
84
90
|
|
|
85
91
|
### 🌳 Hierarchical Tree
|
|
@@ -140,35 +146,37 @@ pfscan tool call time get_current_time --args '{}'
|
|
|
140
146
|
## Command Overview
|
|
141
147
|
|
|
142
148
|
```
|
|
143
|
-
|
|
149
|
+
Observe & Inspect:
|
|
144
150
|
view, v View recent events timeline (default)
|
|
145
|
-
tree, t Show connector → session →
|
|
146
|
-
explore, e Interactive data browser
|
|
147
|
-
scan, s Run a new scan
|
|
148
|
-
status, st Show system status
|
|
149
|
-
shell Interactive shell (REPL) with TAB completion
|
|
151
|
+
tree, t Show connector → session → RPC structure
|
|
150
152
|
rpc View RPC call details (list, show)
|
|
151
153
|
summary Show session summary
|
|
152
|
-
|
|
154
|
+
analyze Analyze tool usage across sessions
|
|
155
|
+
|
|
156
|
+
Run & Capture:
|
|
157
|
+
scan, s Run a new scan
|
|
158
|
+
proxy MCP proxy server
|
|
159
|
+
|
|
160
|
+
Explore Interactively:
|
|
161
|
+
shell Interactive shell (REPL) with TAB completion
|
|
162
|
+
|
|
163
|
+
Work with MCP Tools:
|
|
153
164
|
tool MCP tool operations (ls, show, call)
|
|
165
|
+
catalog Search and inspect MCP servers from registry
|
|
166
|
+
runners Manage package runners (npx, uvx)
|
|
154
167
|
|
|
155
|
-
|
|
156
|
-
archive, a Archive and prune old data
|
|
157
|
-
config, c Configuration management
|
|
168
|
+
Manage Configuration & Data:
|
|
158
169
|
connectors Connector management
|
|
170
|
+
config, c Configuration management
|
|
159
171
|
secrets Secret management
|
|
172
|
+
archive, a Data retention and cleanup
|
|
160
173
|
doctor Diagnose and fix database issues
|
|
161
|
-
popl Public Observable Proof Ledger
|
|
162
174
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
log View proxy logs
|
|
166
|
-
monitor Monitor scan events
|
|
167
|
-
sessions Session management
|
|
168
|
-
events Event export
|
|
175
|
+
Proof & Ledger:
|
|
176
|
+
popl Public Observable Proof Ledger
|
|
169
177
|
|
|
170
178
|
Shortcuts:
|
|
171
|
-
v=view t=tree
|
|
179
|
+
v=view t=tree s=scan st=status a=archive c=config
|
|
172
180
|
```
|
|
173
181
|
|
|
174
182
|
## Documentation
|
|
@@ -264,12 +272,13 @@ pfscan rpc list --session abc # RPC details
|
|
|
264
272
|
```bash
|
|
265
273
|
pfscan shell
|
|
266
274
|
|
|
267
|
-
# Navigate
|
|
268
|
-
proofscan>
|
|
269
|
-
proofscan> pwd
|
|
275
|
+
# Navigate using cd command
|
|
276
|
+
proofscan> cd time
|
|
277
|
+
proofscan:/time > pwd
|
|
270
278
|
Context: connector=time
|
|
271
279
|
|
|
272
|
-
proofscan>
|
|
280
|
+
proofscan:/time > cd abc123
|
|
281
|
+
proofscan:/time/abc123 > pwd
|
|
273
282
|
Context: session=abc123 (connector=time)
|
|
274
283
|
|
|
275
284
|
# Save reference and use later
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* proofscan CLI
|
|
3
|
+
* proofscan CLI
|
|
4
4
|
* MCP Server scanner - eliminate black boxes
|
|
5
5
|
*
|
|
6
6
|
* Command structure (git-style flat):
|
|
7
7
|
* pfscan view # View events (default)
|
|
8
8
|
* pfscan tree # Structure overview
|
|
9
|
-
* pfscan
|
|
9
|
+
* pfscan shell # Interactive REPL
|
|
10
10
|
* pfscan scan # Run scan
|
|
11
11
|
* pfscan status # System status
|
|
12
12
|
* pfscan archive # Archive/prune data
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* pfscan connectors # Connector management
|
|
15
15
|
*
|
|
16
16
|
* Shortcuts:
|
|
17
|
-
* v = view, t = tree,
|
|
17
|
+
* v = view, t = tree, s = scan
|
|
18
18
|
* st = status, a = archive, c = config
|
|
19
19
|
*/
|
|
20
20
|
export {};
|
package/dist/cli.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* proofscan CLI
|
|
3
|
+
* proofscan CLI
|
|
4
4
|
* MCP Server scanner - eliminate black boxes
|
|
5
5
|
*
|
|
6
6
|
* Command structure (git-style flat):
|
|
7
7
|
* pfscan view # View events (default)
|
|
8
8
|
* pfscan tree # Structure overview
|
|
9
|
-
* pfscan
|
|
9
|
+
* pfscan shell # Interactive REPL
|
|
10
10
|
* pfscan scan # Run scan
|
|
11
11
|
* pfscan status # System status
|
|
12
12
|
* pfscan archive # Archive/prune data
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* pfscan connectors # Connector management
|
|
15
15
|
*
|
|
16
16
|
* Shortcuts:
|
|
17
|
-
* v = view, t = tree,
|
|
17
|
+
* v = view, t = tree, s = scan
|
|
18
18
|
* st = status, a = archive, c = config
|
|
19
19
|
*/
|
|
20
20
|
import { Command } from 'commander';
|
|
@@ -25,50 +25,14 @@ import { setOutputOptions } from './utils/output.js';
|
|
|
25
25
|
const require = createRequire(import.meta.url);
|
|
26
26
|
const packageJson = require('../package.json');
|
|
27
27
|
const VERSION = packageJson.version;
|
|
28
|
-
import { createConfigCommand, createConnectorsCommand, createScanCommand,
|
|
28
|
+
import { createConfigCommand, createConnectorsCommand, createScanCommand, createSessionsCommand, createArchiveCommand, createViewCommand, createTreeCommand, createStatusCommand, createRpcCommand, createSummaryCommand, createAnalyzeCommand, createRecordCommand, createDoctorCommand, createShellCommand, createSecretsCommand, createToolCommand, createProxyCommand, createLogCommand, createPoplCommand, createCatalogCommand, createRunnersCommand, } from './commands/index.js';
|
|
29
|
+
import { createHelpCommand, generateGuideHelp } from './help/index.js';
|
|
29
30
|
const program = new Command();
|
|
30
31
|
// Global state for config path
|
|
31
32
|
let globalConfigPath;
|
|
32
33
|
function getConfigPath() {
|
|
33
34
|
return resolveConfigPath({ configPath: globalConfigPath });
|
|
34
35
|
}
|
|
35
|
-
// Custom help formatting
|
|
36
|
-
const HELP_HEADER = `
|
|
37
|
-
proofscan - MCP Server scanner
|
|
38
|
-
Eliminate black boxes by capturing JSON-RPC communication.
|
|
39
|
-
|
|
40
|
-
Common Commands:
|
|
41
|
-
view, v View recent events timeline (default)
|
|
42
|
-
tree, t Show connector → session → rpc structure
|
|
43
|
-
explore, e Interactive data browser
|
|
44
|
-
scan, s Run a new scan
|
|
45
|
-
status, st Show system status
|
|
46
|
-
shell Interactive shell (REPL) with TAB completion
|
|
47
|
-
rpc View RPC call details (list, show)
|
|
48
|
-
summary Show session summary
|
|
49
|
-
permissions Show permission stats per category
|
|
50
|
-
tool MCP tool operations (ls, show, call)
|
|
51
|
-
|
|
52
|
-
Management:
|
|
53
|
-
archive, a Archive and prune old data
|
|
54
|
-
config, c Configuration management
|
|
55
|
-
connectors Connector management
|
|
56
|
-
secrets Secret management (list, set, edit, prune, export, import)
|
|
57
|
-
doctor Diagnose and fix database issues
|
|
58
|
-
|
|
59
|
-
Shortcuts:
|
|
60
|
-
v=view t=tree e=explore s=scan st=status a=archive c=config
|
|
61
|
-
|
|
62
|
-
Examples:
|
|
63
|
-
pfscan # View recent events (default)
|
|
64
|
-
pfscan shell # Start interactive shell
|
|
65
|
-
pfscan view --limit 50 # View last 50 events
|
|
66
|
-
pfscan view --pairs # View request/response pairs
|
|
67
|
-
pfscan tree # Show structure overview
|
|
68
|
-
pfscan scan start mcp # Start scanning connector 'mcp'
|
|
69
|
-
pfscan tool ls mcp # List tools on connector
|
|
70
|
-
pfscan tool call mcp echo --args '{"msg":"hi"}'
|
|
71
|
-
`;
|
|
72
36
|
program
|
|
73
37
|
.name('pfscan')
|
|
74
38
|
.description('MCP Server scanner - eliminate black boxes by capturing JSON-RPC')
|
|
@@ -76,7 +40,7 @@ program
|
|
|
76
40
|
.option('-c, --config <path>', 'Path to config file')
|
|
77
41
|
.option('--json', 'Output in JSON format')
|
|
78
42
|
.option('-v, --verbose', 'Verbose output')
|
|
79
|
-
.
|
|
43
|
+
.helpOption(false) // Disable default help, use custom help command
|
|
80
44
|
.hook('preAction', (thisCommand) => {
|
|
81
45
|
const opts = thisCommand.opts();
|
|
82
46
|
globalConfigPath = opts.config;
|
|
@@ -102,13 +66,6 @@ program.addCommand(treeCmd);
|
|
|
102
66
|
const tCmd = createTreeCommand(getConfigPath);
|
|
103
67
|
tCmd.name('t').description('Alias for tree');
|
|
104
68
|
program.addCommand(tCmd);
|
|
105
|
-
// explore
|
|
106
|
-
const exploreCmd = createExploreCommand(getConfigPath);
|
|
107
|
-
program.addCommand(exploreCmd);
|
|
108
|
-
// Alias: e = explore
|
|
109
|
-
const eCmd = createExploreCommand(getConfigPath);
|
|
110
|
-
eCmd.name('e').description('Alias for explore');
|
|
111
|
-
program.addCommand(eCmd);
|
|
112
69
|
// status
|
|
113
70
|
const statusCmd = createStatusCommand(getConfigPath);
|
|
114
71
|
program.addCommand(statusCmd);
|
|
@@ -146,18 +103,14 @@ program.addCommand(createConnectorsCommand(getConfigPath));
|
|
|
146
103
|
const connectorCmd = createConnectorsCommand(getConfigPath);
|
|
147
104
|
connectorCmd.name('connector').description('Alias for connectors');
|
|
148
105
|
program.addCommand(connectorCmd);
|
|
149
|
-
// sessions (kept for compatibility
|
|
106
|
+
// sessions (kept for compatibility)
|
|
150
107
|
program.addCommand(createSessionsCommand(getConfigPath));
|
|
151
|
-
//
|
|
152
|
-
program.addCommand(createMonitorCommand(getConfigPath));
|
|
153
|
-
// events (Phase 2.1: events ls, export events)
|
|
154
|
-
program.addCommand(createEventsCommand(getConfigPath));
|
|
155
|
-
// rpc (Phase 2.2: rpc list, rpc show)
|
|
108
|
+
// rpc
|
|
156
109
|
program.addCommand(createRpcCommand(getConfigPath));
|
|
157
110
|
// summary (Phase 3: capabilities, tool calls, concerns)
|
|
158
111
|
program.addCommand(createSummaryCommand(getConfigPath));
|
|
159
|
-
//
|
|
160
|
-
program.addCommand(
|
|
112
|
+
// analyze (replaces permissions - cross-session tool analysis)
|
|
113
|
+
program.addCommand(createAnalyzeCommand(getConfigPath));
|
|
161
114
|
// record (Phase 3: record dry-run)
|
|
162
115
|
program.addCommand(createRecordCommand(getConfigPath));
|
|
163
116
|
// doctor (Phase 3.4: diagnostics and repair)
|
|
@@ -186,6 +139,11 @@ catCmd.name('cat').description('Alias for catalog');
|
|
|
186
139
|
program.addCommand(catCmd);
|
|
187
140
|
// runners (Phase 7.x: Package runners)
|
|
188
141
|
program.addCommand(createRunnersCommand(getConfigPath));
|
|
142
|
+
// i18n (Issue #47: Internationalization utilities)
|
|
143
|
+
import { createI18nCommand } from './commands/i18n.js';
|
|
144
|
+
program.addCommand(createI18nCommand());
|
|
145
|
+
// help (custom help command)
|
|
146
|
+
program.addCommand(createHelpCommand(program));
|
|
189
147
|
// ============================================================
|
|
190
148
|
// Default action: pfscan → pfscan view
|
|
191
149
|
// ============================================================
|
|
@@ -195,9 +153,9 @@ function hasHelpFlag() {
|
|
|
195
153
|
}
|
|
196
154
|
// Known CLI commands (registered with commander)
|
|
197
155
|
const KNOWN_COMMANDS = new Set([
|
|
198
|
-
'view', 'v', 'tree', 't', '
|
|
156
|
+
'view', 'v', 'tree', 't', 'status', 'st',
|
|
199
157
|
'scan', 's', 'archive', 'a', 'config', 'c',
|
|
200
|
-
'connectors', 'connector', 'sessions', '
|
|
158
|
+
'connectors', 'connector', 'sessions', 'rpc', 'summary', 'analyze', 'record', 'doctor', 'shell', 'secrets', 'secret', 'tool', 'proxy', 'log', 'popl', 'catalog', 'cat', 'runners', 'i18n', 'help'
|
|
201
159
|
]);
|
|
202
160
|
// Shell-only commands (not available as CLI commands)
|
|
203
161
|
const SHELL_ONLY_COMMANDS = new Set(['send']);
|
|
@@ -240,6 +198,11 @@ if (subcommandCheck.unknownCommand) {
|
|
|
240
198
|
console.error(` Run 'pfscan --help' for available commands.`);
|
|
241
199
|
process.exit(1);
|
|
242
200
|
}
|
|
201
|
+
// Handle -h / --help at root level
|
|
202
|
+
if (!subcommandCheck.hasCommand && hasHelpFlag()) {
|
|
203
|
+
console.log(generateGuideHelp());
|
|
204
|
+
process.exit(0);
|
|
205
|
+
}
|
|
243
206
|
if (!subcommandCheck.hasCommand && !hasHelpFlag()) {
|
|
244
207
|
process.argv.splice(2, 0, 'view');
|
|
245
208
|
}
|
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,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,iCAAiC;AACjC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC/C,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;AACpC,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analyze command
|
|
3
|
+
*
|
|
4
|
+
* Cross-session and cross-connector analysis of tool usage.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* pfscan analyze # Overall analysis
|
|
8
|
+
* pfscan analyze <connector> # Connector-level analysis
|
|
9
|
+
* pfscan analyze --session <id> # Session-level analysis (replaces permissions)
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from 'commander';
|
|
12
|
+
import { OperationCategory, ToolInfo, CategoryStats } from '../db/tool-analysis.js';
|
|
13
|
+
/** Overall analysis data */
|
|
14
|
+
export interface OverallAnalysisData {
|
|
15
|
+
schema_version: string;
|
|
16
|
+
period: {
|
|
17
|
+
start: string | null;
|
|
18
|
+
end: string | null;
|
|
19
|
+
};
|
|
20
|
+
overview: {
|
|
21
|
+
connector_count: number;
|
|
22
|
+
session_count: number;
|
|
23
|
+
rpc_count: number;
|
|
24
|
+
};
|
|
25
|
+
by_connector: Array<{
|
|
26
|
+
connector_id: string;
|
|
27
|
+
session_count: number;
|
|
28
|
+
rpc_count: number;
|
|
29
|
+
}>;
|
|
30
|
+
methods: Array<{
|
|
31
|
+
method: string;
|
|
32
|
+
count: number;
|
|
33
|
+
}>;
|
|
34
|
+
tools_called: Array<{
|
|
35
|
+
name: string;
|
|
36
|
+
call_count: number;
|
|
37
|
+
connector_id: string;
|
|
38
|
+
category: OperationCategory;
|
|
39
|
+
}>;
|
|
40
|
+
by_category: Record<OperationCategory, number>;
|
|
41
|
+
}
|
|
42
|
+
/** Connector analysis data */
|
|
43
|
+
export interface ConnectorAnalysisData {
|
|
44
|
+
schema_version: string;
|
|
45
|
+
connector_id: string;
|
|
46
|
+
period: {
|
|
47
|
+
start: string | null;
|
|
48
|
+
end: string | null;
|
|
49
|
+
};
|
|
50
|
+
session_count: number;
|
|
51
|
+
available_tools: ToolInfo[];
|
|
52
|
+
tool_usage: Array<{
|
|
53
|
+
name: string;
|
|
54
|
+
call_count: number;
|
|
55
|
+
category: OperationCategory;
|
|
56
|
+
}>;
|
|
57
|
+
by_category: Record<OperationCategory, number>;
|
|
58
|
+
}
|
|
59
|
+
/** Session analysis data (replaces permissions) */
|
|
60
|
+
export interface SessionAnalysisData {
|
|
61
|
+
schema_version: string;
|
|
62
|
+
session_id: string;
|
|
63
|
+
connector_id: string;
|
|
64
|
+
resolved_by: 'option' | 'latest' | 'current';
|
|
65
|
+
categories: Record<OperationCategory, CategoryStats>;
|
|
66
|
+
totals: {
|
|
67
|
+
allowed_tool_count: number;
|
|
68
|
+
called_count: number;
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export declare function createAnalyzeCommand(getConfigPath: () => string): Command;
|
|
72
|
+
//# sourceMappingURL=analyze.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,OAAO,EACL,iBAAiB,EAIjB,QAAQ,EACR,aAAa,EAad,MAAM,wBAAwB,CAAC;AAOhC,4BAA4B;AAC5B,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;KACpB,CAAC;IACF,QAAQ,EAAE;QACR,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,YAAY,EAAE,KAAK,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,YAAY,EAAE,KAAK,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,iBAAiB,CAAC;KAC7B,CAAC,CAAC;IACH,WAAW,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;CAChD;AAED,8BAA8B;AAC9B,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;KACpB,CAAC;IACF,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,QAAQ,EAAE,CAAC;IAC5B,UAAU,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,iBAAiB,CAAC;KAC7B,CAAC,CAAC;IACH,WAAW,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;CAChD;AAED,mDAAmD;AACnD,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;IACrD,MAAM,EAAE;QACN,kBAAkB,EAAE,MAAM,CAAC;QAC3B,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAkVD,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,MAAM,GAAG,OAAO,CAgFzE"}
|