proofscan 0.3.0 → 0.3.2
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/analyzers/IAnalyzer.d.ts +87 -0
- package/dist/analyzers/IAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/IAnalyzer.js +48 -0
- package/dist/analyzers/IAnalyzer.js.map +1 -0
- package/dist/analyzers/NoopAnalyzer.d.ts +24 -0
- package/dist/analyzers/NoopAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/NoopAnalyzer.js +50 -0
- package/dist/analyzers/NoopAnalyzer.js.map +1 -0
- package/dist/analyzers/index.d.ts +13 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +23 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/cli.js +20 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/events.d.ts +7 -0
- package/dist/commands/events.d.ts.map +1 -0
- package/dist/commands/events.js +185 -0
- package/dist/commands/events.js.map +1 -0
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +1 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/monitor.d.ts +1 -0
- package/dist/commands/monitor.d.ts.map +1 -1
- package/dist/commands/monitor.js +70 -12
- package/dist/commands/monitor.js.map +1 -1
- package/dist/commands/scan.d.ts.map +1 -1
- package/dist/commands/scan.js +12 -7
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/view.d.ts.map +1 -1
- package/dist/commands/view.js +69 -2
- package/dist/commands/view.js.map +1 -1
- package/dist/db/connection.d.ts.map +1 -1
- package/dist/db/connection.js +45 -4
- package/dist/db/connection.js.map +1 -1
- package/dist/db/events-store.d.ts +3 -0
- package/dist/db/events-store.d.ts.map +1 -1
- package/dist/db/events-store.js +6 -3
- package/dist/db/events-store.js.map +1 -1
- package/dist/db/schema.d.ts +8 -2
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +29 -3
- package/dist/db/schema.js.map +1 -1
- package/dist/db/types.d.ts +3 -0
- package/dist/db/types.d.ts.map +1 -1
- package/dist/eventline/normalizer.d.ts +19 -1
- package/dist/eventline/normalizer.d.ts.map +1 -1
- package/dist/eventline/normalizer.js +120 -0
- package/dist/eventline/normalizer.js.map +1 -1
- package/dist/eventline/types.d.ts +24 -0
- package/dist/eventline/types.d.ts.map +1 -1
- package/dist/eventline/types.js.map +1 -1
- package/dist/protocols/A2aAdapter.d.ts +39 -0
- package/dist/protocols/A2aAdapter.d.ts.map +1 -0
- package/dist/protocols/A2aAdapter.js +48 -0
- package/dist/protocols/A2aAdapter.js.map +1 -0
- package/dist/protocols/IProtocolAdapter.d.ts +106 -0
- package/dist/protocols/IProtocolAdapter.d.ts.map +1 -0
- package/dist/protocols/IProtocolAdapter.js +57 -0
- package/dist/protocols/IProtocolAdapter.js.map +1 -0
- package/dist/protocols/McpAdapter.d.ts +23 -0
- package/dist/protocols/McpAdapter.d.ts.map +1 -0
- package/dist/protocols/McpAdapter.js +162 -0
- package/dist/protocols/McpAdapter.js.map +1 -0
- package/dist/protocols/index.d.ts +14 -0
- package/dist/protocols/index.d.ts.map +1 -0
- package/dist/protocols/index.js +24 -0
- package/dist/protocols/index.js.map +1 -0
- package/dist/scanner/index.d.ts +1 -0
- package/dist/scanner/index.d.ts.map +1 -1
- package/dist/scanner/index.js +97 -60
- package/dist/scanner/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analyzer Interface
|
|
3
|
+
*
|
|
4
|
+
* Phase 2.1: Skeleton for event analysis hooks
|
|
5
|
+
* Full implementation in Phase 3
|
|
6
|
+
*/
|
|
7
|
+
import type { EventLine, EventLinePair } from '../eventline/types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Analysis result
|
|
10
|
+
*/
|
|
11
|
+
export interface AnalysisResult {
|
|
12
|
+
/** Analyzer identifier */
|
|
13
|
+
analyzer: string;
|
|
14
|
+
/** Analysis timestamp */
|
|
15
|
+
ts_ms: number;
|
|
16
|
+
/** Findings from analysis */
|
|
17
|
+
findings: AnalysisFinding[];
|
|
18
|
+
/** Statistics */
|
|
19
|
+
stats?: Record<string, unknown>;
|
|
20
|
+
/** Metadata */
|
|
21
|
+
meta?: Record<string, unknown>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Individual finding from analysis
|
|
25
|
+
*/
|
|
26
|
+
export interface AnalysisFinding {
|
|
27
|
+
/** Finding type */
|
|
28
|
+
type: 'info' | 'warning' | 'error' | 'suggestion';
|
|
29
|
+
/** Finding category */
|
|
30
|
+
category: string;
|
|
31
|
+
/** Human-readable message */
|
|
32
|
+
message: string;
|
|
33
|
+
/** Related event(s) */
|
|
34
|
+
events?: EventLine[];
|
|
35
|
+
/** Related pair(s) */
|
|
36
|
+
pairs?: EventLinePair[];
|
|
37
|
+
/** Additional context */
|
|
38
|
+
context?: Record<string, unknown>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Analyzer interface
|
|
42
|
+
*
|
|
43
|
+
* Analyzers process events and produce findings
|
|
44
|
+
*/
|
|
45
|
+
export interface IAnalyzer {
|
|
46
|
+
/** Analyzer name */
|
|
47
|
+
readonly name: string;
|
|
48
|
+
/** Analyzer version */
|
|
49
|
+
readonly version: string;
|
|
50
|
+
/** Description */
|
|
51
|
+
readonly description: string;
|
|
52
|
+
/**
|
|
53
|
+
* Analyze a batch of events
|
|
54
|
+
* @param events - Events to analyze
|
|
55
|
+
* @returns Analysis result
|
|
56
|
+
*/
|
|
57
|
+
analyze(events: EventLine[]): Promise<AnalysisResult>;
|
|
58
|
+
/**
|
|
59
|
+
* Analyze RPC pairs
|
|
60
|
+
* @param pairs - RPC pairs to analyze
|
|
61
|
+
* @returns Analysis result
|
|
62
|
+
*/
|
|
63
|
+
analyzePairs(pairs: EventLinePair[]): Promise<AnalysisResult>;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Analyzer registry
|
|
67
|
+
*/
|
|
68
|
+
export declare class AnalyzerRegistry {
|
|
69
|
+
private analyzers;
|
|
70
|
+
/**
|
|
71
|
+
* Register an analyzer
|
|
72
|
+
*/
|
|
73
|
+
register(analyzer: IAnalyzer): void;
|
|
74
|
+
/**
|
|
75
|
+
* Get analyzer by name
|
|
76
|
+
*/
|
|
77
|
+
get(name: string): IAnalyzer | undefined;
|
|
78
|
+
/**
|
|
79
|
+
* Get all registered analyzers
|
|
80
|
+
*/
|
|
81
|
+
getAll(): IAnalyzer[];
|
|
82
|
+
/**
|
|
83
|
+
* Run all analyzers on events
|
|
84
|
+
*/
|
|
85
|
+
analyzeAll(events: EventLine[]): Promise<AnalysisResult[]>;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=IAnalyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IAnalyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/IAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;IAEjB,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IAEd,6BAA6B;IAC7B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAE5B,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEhC,eAAe;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mBAAmB;IACnB,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,YAAY,CAAC;IAElD,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC;IAEjB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,uBAAuB;IACvB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IAErB,sBAAsB;IACtB,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IAExB,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,oBAAoB;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,uBAAuB;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,kBAAkB;IAClB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B;;;;OAIG;IACH,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAEtD;;;;OAIG;IACH,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CAC/D;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAqC;IAEtD;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI;IAInC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAIxC;;OAEG;IACH,MAAM,IAAI,SAAS,EAAE;IAIrB;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAejE"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analyzer Interface
|
|
3
|
+
*
|
|
4
|
+
* Phase 2.1: Skeleton for event analysis hooks
|
|
5
|
+
* Full implementation in Phase 3
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Analyzer registry
|
|
9
|
+
*/
|
|
10
|
+
export class AnalyzerRegistry {
|
|
11
|
+
analyzers = new Map();
|
|
12
|
+
/**
|
|
13
|
+
* Register an analyzer
|
|
14
|
+
*/
|
|
15
|
+
register(analyzer) {
|
|
16
|
+
this.analyzers.set(analyzer.name, analyzer);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get analyzer by name
|
|
20
|
+
*/
|
|
21
|
+
get(name) {
|
|
22
|
+
return this.analyzers.get(name);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get all registered analyzers
|
|
26
|
+
*/
|
|
27
|
+
getAll() {
|
|
28
|
+
return Array.from(this.analyzers.values());
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Run all analyzers on events
|
|
32
|
+
*/
|
|
33
|
+
async analyzeAll(events) {
|
|
34
|
+
const results = [];
|
|
35
|
+
for (const analyzer of this.analyzers.values()) {
|
|
36
|
+
try {
|
|
37
|
+
const result = await analyzer.analyze(events);
|
|
38
|
+
results.push(result);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
// Log error but continue with other analyzers
|
|
42
|
+
console.error(`Analyzer ${analyzer.name} failed:`, error);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return results;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=IAnalyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IAnalyzer.js","sourceRoot":"","sources":["../../src/analyzers/IAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6EH;;GAEG;AACH,MAAM,OAAO,gBAAgB;IACnB,SAAS,GAA2B,IAAI,GAAG,EAAE,CAAC;IAEtD;;OAEG;IACH,QAAQ,CAAC,QAAmB;QAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,MAAmB;QAClC,MAAM,OAAO,GAAqB,EAAE,CAAC;QAErC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC9C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,8CAA8C;gBAC9C,OAAO,CAAC,KAAK,CAAC,YAAY,QAAQ,CAAC,IAAI,UAAU,EAAE,KAAK,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Noop Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Phase 2.1: Placeholder analyzer that does nothing
|
|
5
|
+
* Used as a template and for testing the analyzer infrastructure
|
|
6
|
+
*/
|
|
7
|
+
import type { IAnalyzer, AnalysisResult } from './IAnalyzer.js';
|
|
8
|
+
import type { EventLine, EventLinePair } from '../eventline/types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Noop Analyzer - does nothing, returns empty results
|
|
11
|
+
*
|
|
12
|
+
* This serves as:
|
|
13
|
+
* 1. A template for creating new analyzers
|
|
14
|
+
* 2. A test fixture for the analyzer infrastructure
|
|
15
|
+
* 3. A way to verify the hook system works
|
|
16
|
+
*/
|
|
17
|
+
export declare class NoopAnalyzer implements IAnalyzer {
|
|
18
|
+
readonly name = "noop";
|
|
19
|
+
readonly version = "1.0.0";
|
|
20
|
+
readonly description = "No-operation analyzer (placeholder)";
|
|
21
|
+
analyze(events: EventLine[]): Promise<AnalysisResult>;
|
|
22
|
+
analyzePairs(pairs: EventLinePair[]): Promise<AnalysisResult>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=NoopAnalyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NoopAnalyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/NoopAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtE;;;;;;;GAOG;AACH,qBAAa,YAAa,YAAW,SAAS;IAC5C,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,WAAW,yCAAyC;IAEvD,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAgBrD,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;CAepE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Noop Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Phase 2.1: Placeholder analyzer that does nothing
|
|
5
|
+
* Used as a template and for testing the analyzer infrastructure
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Noop Analyzer - does nothing, returns empty results
|
|
9
|
+
*
|
|
10
|
+
* This serves as:
|
|
11
|
+
* 1. A template for creating new analyzers
|
|
12
|
+
* 2. A test fixture for the analyzer infrastructure
|
|
13
|
+
* 3. A way to verify the hook system works
|
|
14
|
+
*/
|
|
15
|
+
export class NoopAnalyzer {
|
|
16
|
+
name = 'noop';
|
|
17
|
+
version = '1.0.0';
|
|
18
|
+
description = 'No-operation analyzer (placeholder)';
|
|
19
|
+
async analyze(events) {
|
|
20
|
+
return {
|
|
21
|
+
analyzer: this.name,
|
|
22
|
+
ts_ms: Date.now(),
|
|
23
|
+
findings: [],
|
|
24
|
+
stats: {
|
|
25
|
+
events_processed: events.length,
|
|
26
|
+
findings_count: 0,
|
|
27
|
+
},
|
|
28
|
+
meta: {
|
|
29
|
+
version: this.version,
|
|
30
|
+
description: this.description,
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
async analyzePairs(pairs) {
|
|
35
|
+
return {
|
|
36
|
+
analyzer: this.name,
|
|
37
|
+
ts_ms: Date.now(),
|
|
38
|
+
findings: [],
|
|
39
|
+
stats: {
|
|
40
|
+
pairs_processed: pairs.length,
|
|
41
|
+
findings_count: 0,
|
|
42
|
+
},
|
|
43
|
+
meta: {
|
|
44
|
+
version: this.version,
|
|
45
|
+
description: this.description,
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=NoopAnalyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NoopAnalyzer.js","sourceRoot":"","sources":["../../src/analyzers/NoopAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;;;;;;GAOG;AACH,MAAM,OAAO,YAAY;IACd,IAAI,GAAG,MAAM,CAAC;IACd,OAAO,GAAG,OAAO,CAAC;IAClB,WAAW,GAAG,qCAAqC,CAAC;IAE7D,KAAK,CAAC,OAAO,CAAC,MAAmB;QAC/B,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE;YACjB,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE;gBACL,gBAAgB,EAAE,MAAM,CAAC,MAAM;gBAC/B,cAAc,EAAE,CAAC;aAClB;YACD,IAAI,EAAE;gBACJ,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAsB;QACvC,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE;YACjB,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE;gBACL,eAAe,EAAE,KAAK,CAAC,MAAM;gBAC7B,cAAc,EAAE,CAAC;aAClB;YACD,IAAI,EAAE;gBACJ,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B;SACF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analyzers
|
|
3
|
+
*
|
|
4
|
+
* Export all analyzers and utilities
|
|
5
|
+
*/
|
|
6
|
+
export * from './IAnalyzer.js';
|
|
7
|
+
export * from './NoopAnalyzer.js';
|
|
8
|
+
import { AnalyzerRegistry } from './IAnalyzer.js';
|
|
9
|
+
/**
|
|
10
|
+
* Create a default registry with all built-in analyzers
|
|
11
|
+
*/
|
|
12
|
+
export declare function createDefaultAnalyzerRegistry(): AnalyzerRegistry;
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analyzers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGlD;;GAEG;AACH,wBAAgB,6BAA6B,IAAI,gBAAgB,CAYhE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analyzers
|
|
3
|
+
*
|
|
4
|
+
* Export all analyzers and utilities
|
|
5
|
+
*/
|
|
6
|
+
export * from './IAnalyzer.js';
|
|
7
|
+
export * from './NoopAnalyzer.js';
|
|
8
|
+
import { AnalyzerRegistry } from './IAnalyzer.js';
|
|
9
|
+
import { NoopAnalyzer } from './NoopAnalyzer.js';
|
|
10
|
+
/**
|
|
11
|
+
* Create a default registry with all built-in analyzers
|
|
12
|
+
*/
|
|
13
|
+
export function createDefaultAnalyzerRegistry() {
|
|
14
|
+
const registry = new AnalyzerRegistry();
|
|
15
|
+
// Register built-in analyzers
|
|
16
|
+
registry.register(new NoopAnalyzer());
|
|
17
|
+
// Future analyzers will be registered here:
|
|
18
|
+
// registry.register(new LatencyAnalyzer());
|
|
19
|
+
// registry.register(new ErrorPatternAnalyzer());
|
|
20
|
+
// registry.register(new SecurityAnalyzer());
|
|
21
|
+
return registry;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyzers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;GAEG;AACH,MAAM,UAAU,6BAA6B;IAC3C,MAAM,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAExC,8BAA8B;IAC9B,QAAQ,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;IAEtC,4CAA4C;IAC5C,4CAA4C;IAC5C,iDAAiD;IACjD,6CAA6C;IAE7C,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
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, } from './commands/index.js';
|
|
23
|
+
import { createConfigCommand, createConnectorsCommand, createScanCommand, createMonitorCommand, createSessionsCommand, createArchiveCommand, createViewCommand, createTreeCommand, createExploreCommand, createStatusCommand, createEventsCommand, } from './commands/index.js';
|
|
24
24
|
const program = new Command();
|
|
25
25
|
// Global state for config path
|
|
26
26
|
let globalConfigPath;
|
|
@@ -46,11 +46,19 @@ Management:
|
|
|
46
46
|
|
|
47
47
|
Shortcuts:
|
|
48
48
|
v=view t=tree e=explore s=scan st=status a=archive c=config
|
|
49
|
+
|
|
50
|
+
Examples:
|
|
51
|
+
pfscan # View recent events (default)
|
|
52
|
+
pfscan view --limit 50 # View last 50 events
|
|
53
|
+
pfscan view --pairs # View request/response pairs
|
|
54
|
+
pfscan tree # Show structure overview
|
|
55
|
+
pfscan scan start --id mcp # Start scanning connector 'mcp'
|
|
56
|
+
pfscan status # Show system status
|
|
49
57
|
`;
|
|
50
58
|
program
|
|
51
59
|
.name('pfscan')
|
|
52
60
|
.description('MCP Server scanner - eliminate black boxes by capturing JSON-RPC')
|
|
53
|
-
.version('0.3.
|
|
61
|
+
.version('0.3.2')
|
|
54
62
|
.option('-c, --config <path>', 'Path to config file')
|
|
55
63
|
.option('--json', 'Output in JSON format')
|
|
56
64
|
.option('-v, --verbose', 'Verbose output')
|
|
@@ -124,15 +132,21 @@ program.addCommand(createConnectorsCommand(getConfigPath));
|
|
|
124
132
|
program.addCommand(createSessionsCommand(getConfigPath));
|
|
125
133
|
// monitor (kept for compatibility, but monitor tail → view)
|
|
126
134
|
program.addCommand(createMonitorCommand(getConfigPath));
|
|
135
|
+
// events (Phase 2.1: events ls, export events)
|
|
136
|
+
program.addCommand(createEventsCommand(getConfigPath));
|
|
127
137
|
// ============================================================
|
|
128
138
|
// Default action: pfscan → pfscan view
|
|
129
139
|
// ============================================================
|
|
140
|
+
// Check if help flag is present (should show root help, not view help)
|
|
141
|
+
function hasHelpFlag() {
|
|
142
|
+
return process.argv.includes('--help') || process.argv.includes('-h');
|
|
143
|
+
}
|
|
130
144
|
// Check if no subcommand is provided (only options like --config, --json)
|
|
131
145
|
function hasSubcommand() {
|
|
132
146
|
const knownCommands = new Set([
|
|
133
147
|
'view', 'v', 'tree', 't', 'explore', 'e', 'status', 'st',
|
|
134
148
|
'scan', 's', 'archive', 'a', 'config', 'c',
|
|
135
|
-
'connectors', 'sessions', 'monitor', 'help'
|
|
149
|
+
'connectors', 'sessions', 'monitor', 'events', 'help'
|
|
136
150
|
]);
|
|
137
151
|
for (let i = 2; i < process.argv.length; i++) {
|
|
138
152
|
const arg = process.argv[i];
|
|
@@ -151,8 +165,9 @@ function hasSubcommand() {
|
|
|
151
165
|
}
|
|
152
166
|
return false;
|
|
153
167
|
}
|
|
154
|
-
// If no subcommand, insert 'view' right after program name
|
|
155
|
-
|
|
168
|
+
// If no subcommand and no help flag, insert 'view' right after program name
|
|
169
|
+
// This ensures `pfscan --help` shows root help, not `pfscan view` help
|
|
170
|
+
if (!hasSubcommand() && !hasHelpFlag()) {
|
|
156
171
|
process.argv.splice(2, 0, 'view');
|
|
157
172
|
}
|
|
158
173
|
// Parse and run
|
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;AACrD,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,+BAA+B;AAC/B,IAAI,gBAAoC,CAAC;AAEzC,SAAS,aAAa;IACpB,OAAO,iBAAiB,CAAC,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,yBAAyB;AACzB,MAAM,WAAW,GAAG
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/commands/events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqFpC,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,MAAM,GAAG,OAAO,CA0HxE"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Events command - list and export events
|
|
3
|
+
* Phase 2.1: events ls and export events commands
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import { createWriteStream } from 'fs';
|
|
7
|
+
import { ConfigManager } from '../config/index.js';
|
|
8
|
+
import { EventLineStore } from '../eventline/store.js';
|
|
9
|
+
import { formatTimestamp, formatBytes, getKindSymbol, shortenId, } from '../eventline/types.js';
|
|
10
|
+
import { output, getOutputOptions } from '../utils/output.js';
|
|
11
|
+
/**
|
|
12
|
+
* Format EventLine for terminal display
|
|
13
|
+
*/
|
|
14
|
+
function formatEventLine(event, options = {}) {
|
|
15
|
+
const ts = formatTimestamp(event.ts_ms, options.fulltime);
|
|
16
|
+
const symbol = getKindSymbol(event.kind);
|
|
17
|
+
const status = event.status === 'OK' ? '✓' : event.status === 'ERR' ? '✗' : ' ';
|
|
18
|
+
const dir = event.direction || ' ';
|
|
19
|
+
const method = event.label.slice(0, 30).padEnd(30);
|
|
20
|
+
const session = event.session_id ? `ses=${shortenId(event.session_id, 6)}` : '';
|
|
21
|
+
const parts = [ts, symbol, dir, status, method, session];
|
|
22
|
+
// Add extra info
|
|
23
|
+
if (event.seq) {
|
|
24
|
+
parts.push(`#${event.seq}`);
|
|
25
|
+
}
|
|
26
|
+
if (event.latency_ms !== undefined) {
|
|
27
|
+
parts.push(`${event.latency_ms}ms`);
|
|
28
|
+
}
|
|
29
|
+
if (event.size_bytes !== undefined) {
|
|
30
|
+
parts.push(formatBytes(event.size_bytes));
|
|
31
|
+
}
|
|
32
|
+
return parts.join(' ');
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Convert EventLine to CSV row
|
|
36
|
+
*/
|
|
37
|
+
function eventToCSV(event) {
|
|
38
|
+
const fields = [
|
|
39
|
+
event.ts_ms,
|
|
40
|
+
event.seq || '',
|
|
41
|
+
event.kind,
|
|
42
|
+
event.direction || '',
|
|
43
|
+
event.label,
|
|
44
|
+
event.status,
|
|
45
|
+
event.connector_id || '',
|
|
46
|
+
event.session_id || '',
|
|
47
|
+
event.rpc_id || '',
|
|
48
|
+
event.latency_ms || '',
|
|
49
|
+
event.size_bytes || '',
|
|
50
|
+
event.payload_hash || '',
|
|
51
|
+
event.summary || '',
|
|
52
|
+
event.error_code || '',
|
|
53
|
+
];
|
|
54
|
+
return fields.map(f => {
|
|
55
|
+
const str = String(f);
|
|
56
|
+
// Escape quotes and wrap in quotes if contains comma, quote, or newline
|
|
57
|
+
if (str.includes(',') || str.includes('"') || str.includes('\n')) {
|
|
58
|
+
return `"${str.replace(/"/g, '""')}"`;
|
|
59
|
+
}
|
|
60
|
+
return str;
|
|
61
|
+
}).join(',');
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get CSV header
|
|
65
|
+
*/
|
|
66
|
+
function getCSVHeader() {
|
|
67
|
+
return 'ts_ms,seq,kind,direction,label,status,connector_id,session_id,rpc_id,latency_ms,size_bytes,payload_hash,summary,error_code';
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Convert EventLine to JSONL
|
|
71
|
+
*/
|
|
72
|
+
function eventToJSONL(event) {
|
|
73
|
+
return JSON.stringify(event);
|
|
74
|
+
}
|
|
75
|
+
export function createEventsCommand(getConfigPath) {
|
|
76
|
+
const cmd = new Command('events')
|
|
77
|
+
.description('List and export events');
|
|
78
|
+
// events ls
|
|
79
|
+
cmd
|
|
80
|
+
.command('ls')
|
|
81
|
+
.description('List events across sessions')
|
|
82
|
+
.option('--limit <n>', 'Number of events to show', '50')
|
|
83
|
+
.option('--since <time>', 'Show events since (24h, 7d, YYYY-MM-DD)')
|
|
84
|
+
.option('--connector <id>', 'Filter by connector ID')
|
|
85
|
+
.option('--session <id>', 'Filter by session ID (partial match)')
|
|
86
|
+
.option('--method <pattern>', 'Filter by method name')
|
|
87
|
+
.option('--errors', 'Show only errors')
|
|
88
|
+
.option('--fulltime', 'Show full timestamp')
|
|
89
|
+
.action(async (options) => {
|
|
90
|
+
try {
|
|
91
|
+
const manager = new ConfigManager(getConfigPath());
|
|
92
|
+
const store = new EventLineStore(manager.getConfigDir());
|
|
93
|
+
const events = store.getRecentEvents({
|
|
94
|
+
limit: parseInt(options.limit, 10),
|
|
95
|
+
since: options.since,
|
|
96
|
+
connector: options.connector,
|
|
97
|
+
session: options.session,
|
|
98
|
+
method: options.method,
|
|
99
|
+
errors: options.errors,
|
|
100
|
+
});
|
|
101
|
+
if (events.length === 0) {
|
|
102
|
+
console.log('No events found.');
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (getOutputOptions().json) {
|
|
106
|
+
output(events);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
// Print header
|
|
110
|
+
console.log(`Events (${events.length}):\n`);
|
|
111
|
+
const header = options.fulltime
|
|
112
|
+
? 'Time Sym Dir St Method Session Extra'
|
|
113
|
+
: 'Time Sym Dir St Method Session Extra';
|
|
114
|
+
console.log(header);
|
|
115
|
+
console.log('-'.repeat(header.length));
|
|
116
|
+
// Print events
|
|
117
|
+
for (const event of events) {
|
|
118
|
+
console.log(formatEventLine(event, { fulltime: options.fulltime }));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
if (error instanceof Error && error.message.includes('no such table')) {
|
|
123
|
+
console.log('No data yet. Run a scan first.');
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
// export events
|
|
130
|
+
cmd
|
|
131
|
+
.command('export')
|
|
132
|
+
.description('Export events to file')
|
|
133
|
+
.requiredOption('-o, --output <file>', 'Output file path')
|
|
134
|
+
.option('--format <format>', 'Output format: jsonl, csv', 'jsonl')
|
|
135
|
+
.option('--limit <n>', 'Maximum number of events', '1000')
|
|
136
|
+
.option('--since <time>', 'Export events since (24h, 7d, YYYY-MM-DD)')
|
|
137
|
+
.option('--connector <id>', 'Filter by connector ID')
|
|
138
|
+
.option('--session <id>', 'Filter by session ID')
|
|
139
|
+
.option('--method <pattern>', 'Filter by method name')
|
|
140
|
+
.option('--errors', 'Export only errors')
|
|
141
|
+
.action(async (options) => {
|
|
142
|
+
try {
|
|
143
|
+
const manager = new ConfigManager(getConfigPath());
|
|
144
|
+
const store = new EventLineStore(manager.getConfigDir());
|
|
145
|
+
const events = store.getRecentEvents({
|
|
146
|
+
limit: parseInt(options.limit, 10),
|
|
147
|
+
since: options.since,
|
|
148
|
+
connector: options.connector,
|
|
149
|
+
session: options.session,
|
|
150
|
+
method: options.method,
|
|
151
|
+
errors: options.errors,
|
|
152
|
+
});
|
|
153
|
+
if (events.length === 0) {
|
|
154
|
+
console.log('No events to export.');
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
// Create output stream
|
|
158
|
+
const stream = createWriteStream(options.output);
|
|
159
|
+
// Write based on format
|
|
160
|
+
if (options.format === 'csv') {
|
|
161
|
+
stream.write(getCSVHeader() + '\n');
|
|
162
|
+
for (const event of events) {
|
|
163
|
+
stream.write(eventToCSV(event) + '\n');
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
// Default: JSONL
|
|
168
|
+
for (const event of events) {
|
|
169
|
+
stream.write(eventToJSONL(event) + '\n');
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
stream.end();
|
|
173
|
+
console.log(`Exported ${events.length} events to ${options.output} (${options.format})`);
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
if (error instanceof Error && error.message.includes('no such table')) {
|
|
177
|
+
console.log('No data yet. Run a scan first.');
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
throw error;
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
return cmd;
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/commands/events.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"}
|
|
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"}
|
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"}
|
|
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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../src/commands/monitor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../src/commands/monitor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkDpC,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,MAAM,GAAG,OAAO,CAiGzE"}
|