proofscan 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/README.md +205 -281
  2. package/dist/analyzers/IAnalyzer.d.ts +87 -0
  3. package/dist/analyzers/IAnalyzer.d.ts.map +1 -0
  4. package/dist/analyzers/IAnalyzer.js +48 -0
  5. package/dist/analyzers/IAnalyzer.js.map +1 -0
  6. package/dist/analyzers/NoopAnalyzer.d.ts +24 -0
  7. package/dist/analyzers/NoopAnalyzer.d.ts.map +1 -0
  8. package/dist/analyzers/NoopAnalyzer.js +50 -0
  9. package/dist/analyzers/NoopAnalyzer.js.map +1 -0
  10. package/dist/analyzers/index.d.ts +13 -0
  11. package/dist/analyzers/index.d.ts.map +1 -0
  12. package/dist/analyzers/index.js +23 -0
  13. package/dist/analyzers/index.js.map +1 -0
  14. package/dist/cli.d.ts +15 -1
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +131 -9
  17. package/dist/cli.js.map +1 -1
  18. package/dist/commands/events.d.ts +7 -0
  19. package/dist/commands/events.d.ts.map +1 -0
  20. package/dist/commands/events.js +185 -0
  21. package/dist/commands/events.js.map +1 -0
  22. package/dist/commands/explore.d.ts +9 -0
  23. package/dist/commands/explore.d.ts.map +1 -0
  24. package/dist/commands/explore.js +345 -0
  25. package/dist/commands/explore.js.map +1 -0
  26. package/dist/commands/index.d.ts +5 -0
  27. package/dist/commands/index.d.ts.map +1 -1
  28. package/dist/commands/index.js +7 -0
  29. package/dist/commands/index.js.map +1 -1
  30. package/dist/commands/monitor.d.ts +1 -0
  31. package/dist/commands/monitor.d.ts.map +1 -1
  32. package/dist/commands/monitor.js +70 -12
  33. package/dist/commands/monitor.js.map +1 -1
  34. package/dist/commands/scan.d.ts.map +1 -1
  35. package/dist/commands/scan.js +12 -7
  36. package/dist/commands/scan.js.map +1 -1
  37. package/dist/commands/status.d.ts +7 -0
  38. package/dist/commands/status.d.ts.map +1 -0
  39. package/dist/commands/status.js +108 -0
  40. package/dist/commands/status.js.map +1 -0
  41. package/dist/commands/tree.d.ts +7 -0
  42. package/dist/commands/tree.d.ts.map +1 -0
  43. package/dist/commands/tree.js +184 -0
  44. package/dist/commands/tree.js.map +1 -0
  45. package/dist/commands/view.d.ts +9 -0
  46. package/dist/commands/view.d.ts.map +1 -0
  47. package/dist/commands/view.js +210 -0
  48. package/dist/commands/view.js.map +1 -0
  49. package/dist/db/connection.d.ts.map +1 -1
  50. package/dist/db/connection.js +45 -4
  51. package/dist/db/connection.js.map +1 -1
  52. package/dist/db/events-store.d.ts +3 -0
  53. package/dist/db/events-store.d.ts.map +1 -1
  54. package/dist/db/events-store.js +6 -3
  55. package/dist/db/events-store.js.map +1 -1
  56. package/dist/db/schema.d.ts +8 -2
  57. package/dist/db/schema.d.ts.map +1 -1
  58. package/dist/db/schema.js +29 -3
  59. package/dist/db/schema.js.map +1 -1
  60. package/dist/db/types.d.ts +3 -0
  61. package/dist/db/types.d.ts.map +1 -1
  62. package/dist/eventline/index.d.ts +8 -0
  63. package/dist/eventline/index.d.ts.map +1 -0
  64. package/dist/eventline/index.js +8 -0
  65. package/dist/eventline/index.js.map +1 -0
  66. package/dist/eventline/normalizer.d.ts +79 -0
  67. package/dist/eventline/normalizer.d.ts.map +1 -0
  68. package/dist/eventline/normalizer.js +418 -0
  69. package/dist/eventline/normalizer.js.map +1 -0
  70. package/dist/eventline/schema-discovery.d.ts +79 -0
  71. package/dist/eventline/schema-discovery.d.ts.map +1 -0
  72. package/dist/eventline/schema-discovery.js +154 -0
  73. package/dist/eventline/schema-discovery.js.map +1 -0
  74. package/dist/eventline/store.d.ts +88 -0
  75. package/dist/eventline/store.d.ts.map +1 -0
  76. package/dist/eventline/store.js +358 -0
  77. package/dist/eventline/store.js.map +1 -0
  78. package/dist/eventline/types.d.ts +112 -0
  79. package/dist/eventline/types.d.ts.map +1 -0
  80. package/dist/eventline/types.js +67 -0
  81. package/dist/eventline/types.js.map +1 -0
  82. package/dist/protocols/A2aAdapter.d.ts +39 -0
  83. package/dist/protocols/A2aAdapter.d.ts.map +1 -0
  84. package/dist/protocols/A2aAdapter.js +48 -0
  85. package/dist/protocols/A2aAdapter.js.map +1 -0
  86. package/dist/protocols/IProtocolAdapter.d.ts +106 -0
  87. package/dist/protocols/IProtocolAdapter.d.ts.map +1 -0
  88. package/dist/protocols/IProtocolAdapter.js +57 -0
  89. package/dist/protocols/IProtocolAdapter.js.map +1 -0
  90. package/dist/protocols/McpAdapter.d.ts +23 -0
  91. package/dist/protocols/McpAdapter.d.ts.map +1 -0
  92. package/dist/protocols/McpAdapter.js +162 -0
  93. package/dist/protocols/McpAdapter.js.map +1 -0
  94. package/dist/protocols/index.d.ts +14 -0
  95. package/dist/protocols/index.d.ts.map +1 -0
  96. package/dist/protocols/index.js +24 -0
  97. package/dist/protocols/index.js.map +1 -0
  98. package/dist/scanner/index.d.ts +1 -0
  99. package/dist/scanner/index.d.ts.map +1 -1
  100. package/dist/scanner/index.js +97 -60
  101. package/dist/scanner/index.js.map +1 -1
  102. package/package.json +1 -1
@@ -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.d.ts CHANGED
@@ -1,7 +1,21 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * proofscan CLI
3
+ * proofscan CLI - Phase 2.1
4
4
  * MCP Server scanner - eliminate black boxes
5
+ *
6
+ * Command structure (git-style flat):
7
+ * pfscan view # View events (default)
8
+ * pfscan tree # Structure overview
9
+ * pfscan explore # Interactive browse
10
+ * pfscan scan # Run scan
11
+ * pfscan status # System status
12
+ * pfscan archive # Archive/prune data
13
+ * pfscan config # Configuration
14
+ * pfscan connectors # Connector management
15
+ *
16
+ * Shortcuts:
17
+ * v = view, t = tree, e = explore, s = scan
18
+ * st = status, a = archive, c = config
5
19
  */
6
20
  export {};
7
21
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;GAGG"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;GAiBG"}
package/dist/cli.js CHANGED
@@ -1,25 +1,60 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * proofscan CLI
3
+ * proofscan CLI - Phase 2.1
4
4
  * MCP Server scanner - eliminate black boxes
5
+ *
6
+ * Command structure (git-style flat):
7
+ * pfscan view # View events (default)
8
+ * pfscan tree # Structure overview
9
+ * pfscan explore # Interactive browse
10
+ * pfscan scan # Run scan
11
+ * pfscan status # System status
12
+ * pfscan archive # Archive/prune data
13
+ * pfscan config # Configuration
14
+ * pfscan connectors # Connector management
15
+ *
16
+ * Shortcuts:
17
+ * v = view, t = tree, e = explore, s = scan
18
+ * st = status, a = archive, c = config
5
19
  */
6
20
  import { Command } from 'commander';
7
21
  import { resolveConfigPath } from './utils/config-path.js';
8
22
  import { setOutputOptions } from './utils/output.js';
9
- import { createConfigCommand, createConnectorsCommand, createScanCommand, createMonitorCommand, createSessionsCommand, createArchiveCommand, } from './commands/index.js';
23
+ import { createConfigCommand, createConnectorsCommand, createScanCommand, createMonitorCommand, createSessionsCommand, createArchiveCommand, createViewCommand, createTreeCommand, createExploreCommand, createStatusCommand, createEventsCommand, } from './commands/index.js';
10
24
  const program = new Command();
11
25
  // Global state for config path
12
26
  let globalConfigPath;
13
27
  function getConfigPath() {
14
28
  return resolveConfigPath({ configPath: globalConfigPath });
15
29
  }
30
+ // Custom help formatting
31
+ const HELP_HEADER = `
32
+ proofscan - MCP Server scanner
33
+ Eliminate black boxes by capturing JSON-RPC communication.
34
+
35
+ Common Commands:
36
+ view, v View recent events timeline (default)
37
+ tree, t Show connector → session → rpc structure
38
+ explore, e Interactive data browser
39
+ scan, s Run a new scan
40
+ status, st Show system status
41
+
42
+ Management:
43
+ archive, a Archive and prune old data
44
+ config, c Configuration management
45
+ connectors Connector management
46
+
47
+ Shortcuts:
48
+ v=view t=tree e=explore s=scan st=status a=archive c=config
49
+ `;
16
50
  program
17
51
  .name('pfscan')
18
- .description('MCP Server scanner - eliminate black boxes by capturing JSON-RPC from connection to tools/list')
19
- .version('0.2.0')
52
+ .description('MCP Server scanner - eliminate black boxes by capturing JSON-RPC')
53
+ .version('0.3.1')
20
54
  .option('-c, --config <path>', 'Path to config file')
21
55
  .option('--json', 'Output in JSON format')
22
56
  .option('-v, --verbose', 'Verbose output')
57
+ .addHelpText('before', HELP_HEADER)
23
58
  .hook('preAction', (thisCommand) => {
24
59
  const opts = thisCommand.opts();
25
60
  globalConfigPath = opts.config;
@@ -28,13 +63,100 @@ program
28
63
  verbose: opts.verbose,
29
64
  });
30
65
  });
31
- // Add subcommands
32
- program.addCommand(createConfigCommand(getConfigPath));
66
+ // ============================================================
67
+ // Primary commands (Phase 2.1 - git style)
68
+ // ============================================================
69
+ // view (default command)
70
+ const viewCmd = createViewCommand(getConfigPath);
71
+ program.addCommand(viewCmd);
72
+ // Alias: v = view
73
+ const vCmd = createViewCommand(getConfigPath);
74
+ vCmd.name('v').description('Alias for view');
75
+ program.addCommand(vCmd);
76
+ // tree
77
+ const treeCmd = createTreeCommand(getConfigPath);
78
+ program.addCommand(treeCmd);
79
+ // Alias: t = tree
80
+ const tCmd = createTreeCommand(getConfigPath);
81
+ tCmd.name('t').description('Alias for tree');
82
+ program.addCommand(tCmd);
83
+ // explore
84
+ const exploreCmd = createExploreCommand(getConfigPath);
85
+ program.addCommand(exploreCmd);
86
+ // Alias: e = explore
87
+ const eCmd = createExploreCommand(getConfigPath);
88
+ eCmd.name('e').description('Alias for explore');
89
+ program.addCommand(eCmd);
90
+ // status
91
+ const statusCmd = createStatusCommand(getConfigPath);
92
+ program.addCommand(statusCmd);
93
+ // Alias: st = status
94
+ const stCmd = createStatusCommand(getConfigPath);
95
+ stCmd.name('st').description('Alias for status');
96
+ program.addCommand(stCmd);
97
+ // ============================================================
98
+ // Existing commands (maintained for compatibility)
99
+ // ============================================================
100
+ // scan
101
+ const scanCmd = createScanCommand(getConfigPath);
102
+ program.addCommand(scanCmd);
103
+ // Alias: s = scan
104
+ const sCmd = createScanCommand(getConfigPath);
105
+ sCmd.name('s').description('Alias for scan');
106
+ program.addCommand(sCmd);
107
+ // archive
108
+ const archiveCmd = createArchiveCommand(getConfigPath);
109
+ program.addCommand(archiveCmd);
110
+ // Alias: a = archive
111
+ const aCmd = createArchiveCommand(getConfigPath);
112
+ aCmd.name('a').description('Alias for archive');
113
+ program.addCommand(aCmd);
114
+ // config
115
+ const configCmd = createConfigCommand(getConfigPath);
116
+ program.addCommand(configCmd);
117
+ // Alias: c = config
118
+ const cCmd = createConfigCommand(getConfigPath);
119
+ cCmd.name('c').description('Alias for config');
120
+ program.addCommand(cCmd);
121
+ // connectors (no short alias - too long)
33
122
  program.addCommand(createConnectorsCommand(getConfigPath));
34
- program.addCommand(createScanCommand(getConfigPath));
35
- program.addCommand(createMonitorCommand(getConfigPath));
123
+ // sessions (kept for compatibility, but sessions list → view --with-sessions)
36
124
  program.addCommand(createSessionsCommand(getConfigPath));
37
- program.addCommand(createArchiveCommand(getConfigPath));
125
+ // monitor (kept for compatibility, but monitor tail → view)
126
+ program.addCommand(createMonitorCommand(getConfigPath));
127
+ // events (Phase 2.1: events ls, export events)
128
+ program.addCommand(createEventsCommand(getConfigPath));
129
+ // ============================================================
130
+ // Default action: pfscan → pfscan view
131
+ // ============================================================
132
+ // Check if no subcommand is provided (only options like --config, --json)
133
+ function hasSubcommand() {
134
+ const knownCommands = new Set([
135
+ 'view', 'v', 'tree', 't', 'explore', 'e', 'status', 'st',
136
+ 'scan', 's', 'archive', 'a', 'config', 'c',
137
+ 'connectors', 'sessions', 'monitor', 'events', 'help'
138
+ ]);
139
+ for (let i = 2; i < process.argv.length; i++) {
140
+ const arg = process.argv[i];
141
+ // Skip option flags and their values
142
+ if (arg.startsWith('-')) {
143
+ // If it's --config, skip the next arg too
144
+ if (arg === '-c' || arg === '--config') {
145
+ i++;
146
+ }
147
+ continue;
148
+ }
149
+ // This is a positional argument - check if it's a command
150
+ if (knownCommands.has(arg)) {
151
+ return true;
152
+ }
153
+ }
154
+ return false;
155
+ }
156
+ // If no subcommand, insert 'view' right after program name (before any options)
157
+ if (!hasSubcommand()) {
158
+ process.argv.splice(2, 0, 'view');
159
+ }
38
160
  // Parse and run
39
161
  program.parse();
40
162
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;GAGG;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,GACrB,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,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,gGAAgG,CAAC;KAC7G,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC;KACzC,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;IACjC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IAChC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC;IAC/B,gBAAgB,CAAC;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,kBAAkB;AAClB,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC;AACvD,OAAO,CAAC,UAAU,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC,CAAC;AAC3D,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC;AACrD,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC,CAAC;AACxD,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC,CAAC;AACzD,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC,CAAC;AAExD,gBAAgB;AAChB,OAAO,CAAC,KAAK,EAAE,CAAC"}
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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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Explore command - interactive navigation through data
3
+ *
4
+ * Simple stdin/stdout TUI for exploring connector → session → rpc → detail
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare function createExploreCommand(getConfigPath: () => string): Command;
8
+ export { createExploreCommand as createECommand };
9
+ //# sourceMappingURL=explore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explore.d.ts","sourceRoot":"","sources":["../../src/commands/explore.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyWpC,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,MAAM,GAAG,OAAO,CA6BzE;AAGD,OAAO,EAAE,oBAAoB,IAAI,cAAc,EAAE,CAAC"}