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.
Files changed (73) hide show
  1. package/dist/analyzers/IAnalyzer.d.ts +87 -0
  2. package/dist/analyzers/IAnalyzer.d.ts.map +1 -0
  3. package/dist/analyzers/IAnalyzer.js +48 -0
  4. package/dist/analyzers/IAnalyzer.js.map +1 -0
  5. package/dist/analyzers/NoopAnalyzer.d.ts +24 -0
  6. package/dist/analyzers/NoopAnalyzer.d.ts.map +1 -0
  7. package/dist/analyzers/NoopAnalyzer.js +50 -0
  8. package/dist/analyzers/NoopAnalyzer.js.map +1 -0
  9. package/dist/analyzers/index.d.ts +13 -0
  10. package/dist/analyzers/index.d.ts.map +1 -0
  11. package/dist/analyzers/index.js +23 -0
  12. package/dist/analyzers/index.js.map +1 -0
  13. package/dist/cli.js +20 -5
  14. package/dist/cli.js.map +1 -1
  15. package/dist/commands/events.d.ts +7 -0
  16. package/dist/commands/events.d.ts.map +1 -0
  17. package/dist/commands/events.js +185 -0
  18. package/dist/commands/events.js.map +1 -0
  19. package/dist/commands/index.d.ts +1 -0
  20. package/dist/commands/index.d.ts.map +1 -1
  21. package/dist/commands/index.js +1 -0
  22. package/dist/commands/index.js.map +1 -1
  23. package/dist/commands/monitor.d.ts +1 -0
  24. package/dist/commands/monitor.d.ts.map +1 -1
  25. package/dist/commands/monitor.js +70 -12
  26. package/dist/commands/monitor.js.map +1 -1
  27. package/dist/commands/scan.d.ts.map +1 -1
  28. package/dist/commands/scan.js +12 -7
  29. package/dist/commands/scan.js.map +1 -1
  30. package/dist/commands/view.d.ts.map +1 -1
  31. package/dist/commands/view.js +69 -2
  32. package/dist/commands/view.js.map +1 -1
  33. package/dist/db/connection.d.ts.map +1 -1
  34. package/dist/db/connection.js +45 -4
  35. package/dist/db/connection.js.map +1 -1
  36. package/dist/db/events-store.d.ts +3 -0
  37. package/dist/db/events-store.d.ts.map +1 -1
  38. package/dist/db/events-store.js +6 -3
  39. package/dist/db/events-store.js.map +1 -1
  40. package/dist/db/schema.d.ts +8 -2
  41. package/dist/db/schema.d.ts.map +1 -1
  42. package/dist/db/schema.js +29 -3
  43. package/dist/db/schema.js.map +1 -1
  44. package/dist/db/types.d.ts +3 -0
  45. package/dist/db/types.d.ts.map +1 -1
  46. package/dist/eventline/normalizer.d.ts +19 -1
  47. package/dist/eventline/normalizer.d.ts.map +1 -1
  48. package/dist/eventline/normalizer.js +120 -0
  49. package/dist/eventline/normalizer.js.map +1 -1
  50. package/dist/eventline/types.d.ts +24 -0
  51. package/dist/eventline/types.d.ts.map +1 -1
  52. package/dist/eventline/types.js.map +1 -1
  53. package/dist/protocols/A2aAdapter.d.ts +39 -0
  54. package/dist/protocols/A2aAdapter.d.ts.map +1 -0
  55. package/dist/protocols/A2aAdapter.js +48 -0
  56. package/dist/protocols/A2aAdapter.js.map +1 -0
  57. package/dist/protocols/IProtocolAdapter.d.ts +106 -0
  58. package/dist/protocols/IProtocolAdapter.d.ts.map +1 -0
  59. package/dist/protocols/IProtocolAdapter.js +57 -0
  60. package/dist/protocols/IProtocolAdapter.js.map +1 -0
  61. package/dist/protocols/McpAdapter.d.ts +23 -0
  62. package/dist/protocols/McpAdapter.d.ts.map +1 -0
  63. package/dist/protocols/McpAdapter.js +162 -0
  64. package/dist/protocols/McpAdapter.js.map +1 -0
  65. package/dist/protocols/index.d.ts +14 -0
  66. package/dist/protocols/index.d.ts.map +1 -0
  67. package/dist/protocols/index.js +24 -0
  68. package/dist/protocols/index.js.map +1 -0
  69. package/dist/scanner/index.d.ts +1 -0
  70. package/dist/scanner/index.d.ts.map +1 -1
  71. package/dist/scanner/index.js +97 -60
  72. package/dist/scanner/index.js.map +1 -1
  73. 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.0')
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 (before any options)
155
- if (!hasSubcommand()) {
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":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
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
+ export declare function createEventsCommand(getConfigPath: () => string): Command;
7
+ //# sourceMappingURL=events.d.ts.map
@@ -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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"}
@@ -8,4 +8,5 @@ export * from './view.js';
8
8
  export * from './tree.js';
9
9
  export * from './explore.js';
10
10
  export * from './status.js';
11
+ export * from './events.js';
11
12
  //# 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"}
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"}
@@ -10,4 +10,5 @@ export * from './view.js';
10
10
  export * from './tree.js';
11
11
  export * from './explore.js';
12
12
  export * from './status.js';
13
+ export * from './events.js';
13
14
  //# 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"}
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,5 +1,6 @@
1
1
  /**
2
2
  * Monitor commands - reads from SQLite
3
+ * Phase 2.1: Added --follow mode for live event streaming
3
4
  */
4
5
  import { Command } from 'commander';
5
6
  export declare function createMonitorCommand(getConfigPath: () => string): Command;
@@ -1 +1 @@
1
- {"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../src/commands/monitor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0CpC,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,MAAM,GAAG,OAAO,CA6CzE"}
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"}