proofscan 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +210 -60
  2. package/dist/cli.js +5 -3
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/archive.d.ts +6 -0
  5. package/dist/commands/archive.d.ts.map +1 -0
  6. package/dist/commands/archive.js +245 -0
  7. package/dist/commands/archive.js.map +1 -0
  8. package/dist/commands/index.d.ts +2 -0
  9. package/dist/commands/index.d.ts.map +1 -1
  10. package/dist/commands/index.js +2 -0
  11. package/dist/commands/index.js.map +1 -1
  12. package/dist/commands/monitor.d.ts +1 -1
  13. package/dist/commands/monitor.d.ts.map +1 -1
  14. package/dist/commands/monitor.js +33 -21
  15. package/dist/commands/monitor.js.map +1 -1
  16. package/dist/commands/scan.d.ts.map +1 -1
  17. package/dist/commands/scan.js +4 -0
  18. package/dist/commands/scan.js.map +1 -1
  19. package/dist/commands/sessions.d.ts +6 -0
  20. package/dist/commands/sessions.d.ts.map +1 -0
  21. package/dist/commands/sessions.js +203 -0
  22. package/dist/commands/sessions.js.map +1 -0
  23. package/dist/db/connection.d.ts +28 -0
  24. package/dist/db/connection.d.ts.map +1 -0
  25. package/dist/db/connection.js +123 -0
  26. package/dist/db/connection.js.map +1 -0
  27. package/dist/db/events-store.d.ts +56 -0
  28. package/dist/db/events-store.d.ts.map +1 -0
  29. package/dist/db/events-store.js +269 -0
  30. package/dist/db/events-store.js.map +1 -0
  31. package/dist/db/index.d.ts +6 -0
  32. package/dist/db/index.d.ts.map +1 -0
  33. package/dist/db/index.js +6 -0
  34. package/dist/db/index.js.map +1 -0
  35. package/dist/db/proofs-store.d.ts +56 -0
  36. package/dist/db/proofs-store.d.ts.map +1 -0
  37. package/dist/db/proofs-store.js +116 -0
  38. package/dist/db/proofs-store.js.map +1 -0
  39. package/dist/db/schema.d.ts +8 -0
  40. package/dist/db/schema.d.ts.map +1 -0
  41. package/dist/db/schema.js +76 -0
  42. package/dist/db/schema.js.map +1 -0
  43. package/dist/db/types.d.ts +64 -0
  44. package/dist/db/types.d.ts.map +1 -0
  45. package/dist/db/types.js +5 -0
  46. package/dist/db/types.js.map +1 -0
  47. package/dist/index.d.ts +14 -6
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +15 -6
  50. package/dist/index.js.map +1 -1
  51. package/dist/scanner/index.d.ts +3 -2
  52. package/dist/scanner/index.d.ts.map +1 -1
  53. package/dist/scanner/index.js +66 -51
  54. package/dist/scanner/index.js.map +1 -1
  55. package/dist/types/config.d.ts +7 -0
  56. package/dist/types/config.d.ts.map +1 -1
  57. package/dist/types/config.js +5 -0
  58. package/dist/types/config.js.map +1 -1
  59. package/dist/types/events.d.ts +1 -17
  60. package/dist/types/events.d.ts.map +1 -1
  61. package/dist/types/events.js +1 -0
  62. package/dist/types/events.js.map +1 -1
  63. package/package.json +5 -2
  64. package/dist/events/index.d.ts +0 -2
  65. package/dist/events/index.d.ts.map +0 -1
  66. package/dist/events/index.js +0 -2
  67. package/dist/events/index.js.map +0 -1
  68. package/dist/events/store.d.ts +0 -25
  69. package/dist/events/store.d.ts.map +0 -1
  70. package/dist/events/store.js +0 -91
  71. package/dist/events/store.js.map +0 -1
package/README.md CHANGED
@@ -8,33 +8,36 @@ proofscan provides visibility into MCP (Model Context Protocol) server communica
8
8
 
9
9
  - Connects to MCP servers via stdio transport
10
10
  - Captures all JSON-RPC messages (requests, responses, notifications)
11
- - Stores events in JSONL format for later analysis
11
+ - Stores events in SQLite for efficient querying and analysis
12
12
  - Supports importing server configurations from mcp.so / Claude Desktop format
13
+ - Manages session history with retention policies and archival
13
14
 
14
15
  ## Installation
15
16
 
16
17
  ```bash
17
- npm install
18
- npm run build
19
- npm link # Makes 'proofscan' available globally
18
+ npm install -g proofscan
20
19
  ```
21
20
 
22
- Or run directly:
21
+ Or run without installing:
23
22
 
24
23
  ```bash
25
- node dist/cli.js --help
24
+ npx proofscan --help
26
25
  ```
27
26
 
27
+ ## CLI Commands
28
+
29
+ The CLI is available as both `pfscan` (short) and `proofscan` (full).
30
+
28
31
  ## Quickstart
29
32
 
30
33
  ### 1. Initialize Configuration
31
34
 
32
35
  ```bash
33
36
  # Create config in OS-standard location
34
- proofscan config init
37
+ pfscan config init
35
38
 
36
39
  # Check where config is stored
37
- proofscan config path
40
+ pfscan config path
38
41
  ```
39
42
 
40
43
  ### 2. Import MCP Server from mcp.so / Claude Desktop
@@ -43,31 +46,38 @@ Copy the `mcpServers` JSON from mcp.so or Claude Desktop settings and import via
43
46
 
44
47
  ```bash
45
48
  # Full mcpServers format
46
- echo '{ "mcpServers": { "time": { "command": "uvx", "args": ["mcp-server-time"] } } }' | proofscan connectors import --from mcpServers --stdin
49
+ echo '{ "mcpServers": { "time": { "command": "uvx", "args": ["mcp-server-time"] } } }' | pfscan connectors import --from mcpServers --stdin
47
50
 
48
51
  # Or just the server definition (requires --name)
49
- echo '{ "command": "uvx", "args": ["mcp-server-time"] }' | proofscan connectors import --from mcpServers --stdin --name time
52
+ echo '{ "command": "uvx", "args": ["mcp-server-time"] }' | pfscan connectors import --from mcpServers --stdin --name time
50
53
 
51
54
  # Import from file
52
- proofscan connectors import --from mcpServers --file ./servers.json
55
+ pfscan connectors import --from mcpServers --file ./servers.json
53
56
  ```
54
57
 
55
58
  ### 3. List Connectors
56
59
 
57
60
  ```bash
58
- proofscan connectors list
61
+ pfscan connectors list
59
62
  ```
60
63
 
61
64
  ### 4. Scan a Connector
62
65
 
63
66
  ```bash
64
- proofscan scan start --id time
67
+ pfscan scan start --id time
65
68
  ```
66
69
 
67
- ### 5. View Events
70
+ ### 5. View Sessions and Events
68
71
 
69
72
  ```bash
70
- proofscan monitor tail --id time --last 20
73
+ # List all sessions
74
+ pfscan sessions list
75
+
76
+ # Show session details
77
+ pfscan sessions show --id <session_id>
78
+
79
+ # View recent events
80
+ pfscan monitor tail --id time --last 20
71
81
  ```
72
82
 
73
83
  ## Commands
@@ -83,37 +93,53 @@ proofscan monitor tail --id time --last 20
83
93
  ### Config
84
94
 
85
95
  ```bash
86
- proofscan config path # Show config file path
87
- proofscan config init [--force] # Initialize config
88
- proofscan config show # Show config (secrets masked)
89
- proofscan config validate # Validate config
96
+ pfscan config path # Show config file path
97
+ pfscan config init [--force] # Initialize config
98
+ pfscan config show # Show config (secrets masked)
99
+ pfscan config validate # Validate config
90
100
  ```
91
101
 
92
102
  ### Connectors
93
103
 
94
104
  ```bash
95
- proofscan connectors list # List all connectors
96
- proofscan connectors show --id <id> # Show connector details
97
- proofscan connectors add --id <id> --stdio "cmd" # Add stdio connector
98
- proofscan connectors enable --id <id> # Enable connector
99
- proofscan connectors disable --id <id> # Disable connector
100
- proofscan connectors remove --id <id> # Remove connector
105
+ pfscan connectors list # List all connectors
106
+ pfscan connectors show --id <id> # Show connector details
107
+ pfscan connectors add --id <id> --stdio "cmd" # Add stdio connector
108
+ pfscan connectors enable --id <id> # Enable connector
109
+ pfscan connectors disable --id <id> # Disable connector
110
+ pfscan connectors remove --id <id> # Remove connector
101
111
 
102
112
  # Import from mcpServers format
103
- proofscan connectors import --from mcpServers --stdin
104
- proofscan connectors import --from mcpServers --file <path> [--name <id>]
113
+ pfscan connectors import --from mcpServers --stdin
114
+ pfscan connectors import --from mcpServers --file <path> [--name <id>]
105
115
  ```
106
116
 
107
117
  ### Scan
108
118
 
109
119
  ```bash
110
- proofscan scan start --id <id> [--timeout <sec>]
120
+ pfscan scan start --id <id> [--timeout <sec>]
111
121
  ```
112
122
 
113
123
  ### Monitor
114
124
 
115
125
  ```bash
116
- proofscan monitor tail --id <id> [--last <N>]
126
+ pfscan monitor tail --id <id> [--last <N>]
127
+ ```
128
+
129
+ ### Sessions (Phase 2)
130
+
131
+ ```bash
132
+ pfscan sessions list [--connector <id>] [--limit <N>] # List sessions
133
+ pfscan sessions show --id <session_id> # Show session details
134
+ pfscan sessions prune [--before <date>] [--keep-last <N>] [--yes] # Prune old sessions
135
+ ```
136
+
137
+ ### Archive (Phase 2)
138
+
139
+ ```bash
140
+ pfscan archive status # Show database status
141
+ pfscan archive plan # Show what would be archived
142
+ pfscan archive run [--yes] [--vacuum] # Execute archive based on retention
117
143
  ```
118
144
 
119
145
  ## Config File Format
@@ -137,63 +163,99 @@ Config is stored in the OS-standard location:
137
163
  "args": ["mcp-server-time", "--local-timezone=America/New_York"]
138
164
  }
139
165
  }
140
- ]
166
+ ],
167
+ "retention": {
168
+ "keep_last_sessions": 50,
169
+ "raw_days": 7,
170
+ "max_db_mb": 500
171
+ }
141
172
  }
142
173
  ```
143
174
 
144
- ## Event Storage
175
+ ### Retention Settings
176
+
177
+ | Setting | Default | Description |
178
+ |---------|---------|-------------|
179
+ | `keep_last_sessions` | 50 | Keep last N sessions per connector |
180
+ | `raw_days` | 7 | Clear raw JSON after N days |
181
+ | `max_db_mb` | 500 | Target database size limit |
145
182
 
146
- Events are stored in JSONL format:
183
+ ## Data Storage (Phase 2)
184
+
185
+ proofscan uses a 2-file SQLite structure:
147
186
 
148
187
  ```
149
- ~/.config/proofscan/events/<connector_id>/<YYYYMMDD>.jsonl
188
+ ~/.config/proofscan/
189
+ ├── config.json
190
+ ├── events.db # Sessions, events, RPC calls (can be pruned)
191
+ └── proofs.db # Immutable proof records (never pruned)
150
192
  ```
151
193
 
152
- Each event contains:
194
+ ### events.db Schema
153
195
 
154
- ```json
155
- {
156
- "event_id": "uuid",
157
- "ts": "2024-01-15T10:30:00.000Z",
158
- "connector_id": "time",
159
- "direction": "client_to_server",
160
- "kind": "request",
161
- "method": "tools/list",
162
- "rpc_id": 1,
163
- "ok": true,
164
- "raw": "{...}"
165
- }
166
- ```
196
+ - **sessions**: Scan session records with connector, timestamps, exit status
197
+ - **events**: Individual JSON-RPC messages with direction, kind, timestamps
198
+ - **rpc_calls**: Request/response pairs with timing and success status
199
+
200
+ ### proofs.db Schema
201
+
202
+ - **proofs**: Immutable proof records with hashes, references, and artifact URIs
203
+
204
+ Sessions linked to proofs are automatically protected from pruning.
167
205
 
168
206
  ## Example Session
169
207
 
170
208
  ```bash
171
209
  # Initialize
172
- $ proofscan config init
210
+ $ pfscan config init
173
211
  ✓ Config created at: /home/user/.config/proofscan/config.json
174
212
 
175
213
  # Import a server
176
214
  $ echo '{"mcpServers":{"time":{"command":"uvx","args":["mcp-server-time"]}}}' \
177
- | proofscan connectors import --from mcpServers --stdin
215
+ | pfscan connectors import --from mcpServers --stdin
178
216
  ✓ Imported 1 connector(s): time
179
217
 
180
218
  # List connectors
181
- $ proofscan connectors list
219
+ $ pfscan connectors list
182
220
  ID Enabled Type Command/URL
183
221
  -----------------------------------
184
222
  time yes stdio uvx mcp-server-time
185
223
 
186
224
  # Scan the server
187
- $ proofscan scan start --id time
225
+ $ pfscan scan start --id time
188
226
  Scanning connector: time...
189
227
  ✓ Scan successful!
190
228
  Connector: time
191
- Tools found: 1
192
- Tool names: get_current_time
229
+ Session: dcaa519e-e14b-41ea-ac7c-7f2066cc8020
230
+ Tools found: 2
231
+ Tool names: get_current_time, convert_time
193
232
  Events recorded: 8
194
233
 
234
+ # List sessions
235
+ $ pfscan sessions list
236
+ Session ID Connector Started Duration Status Events Protected
237
+ --------------------------------------------------------------------------------
238
+ dcaa519e... time 2025/01/15 10:30:00 450ms normal 8 no
239
+
240
+ # Show session details
241
+ $ pfscan sessions show --id dcaa519e-e14b-41ea-ac7c-7f2066cc8020
242
+ Session: dcaa519e-e14b-41ea-ac7c-7f2066cc8020
243
+ Connector: time
244
+ Started: 2025/01/15 10:30:00
245
+ Ended: 2025/01/15 10:30:00
246
+ Duration: 450ms
247
+ Status: normal
248
+ Protected: no
249
+ Events: 8
250
+ RPC Calls: 2
251
+ Proofs: 0
252
+
253
+ RPC Calls:
254
+ ✓ initialize (id: 1)
255
+ ✓ tools/list (id: 2)
256
+
195
257
  # View events
196
- $ proofscan monitor tail --id time --last 5
258
+ $ pfscan monitor tail --id time --last 5
197
259
  Recent events for 'time' (last 5):
198
260
 
199
261
  Time Dir Status Kind Summary
@@ -205,12 +267,88 @@ Time Dir Status Kind Summary
205
267
  10:30:01 ← response
206
268
  ```
207
269
 
270
+ ## Archive Example (Phase 2)
271
+
272
+ ```bash
273
+ # Check current database status
274
+ $ pfscan archive status
275
+ Database Status
276
+ ===============
277
+
278
+ events.db size: 80.0 KB
279
+ proofs.db size: 24.0 KB
280
+
281
+ Total sessions: 6
282
+ Protected sessions: 0
283
+ Total proofs: 0
284
+ raw_json storage: 4.8 KB
285
+
286
+ # View archive plan (based on retention settings)
287
+ $ pfscan archive plan
288
+ Archive Plan
289
+ ============
290
+
291
+ Retention Settings:
292
+ keep_last_sessions: 3
293
+ raw_days: 7
294
+ max_db_mb: 500
295
+
296
+ Current Status:
297
+ events.db size: 80.0 KB
298
+ proofs.db size: 24.0 KB
299
+
300
+ Planned Actions:
301
+
302
+ Sessions to delete: 3
303
+ Session ID Connector Events Reason
304
+ --------------------------------------------------------------
305
+ c3f3ee9a... time 8 Exceeds keep_last_sessions (3)
306
+ 050212d2... time 8 Exceeds keep_last_sessions (3)
307
+ dcaa519e... time 8 Exceeds keep_last_sessions (3)
308
+
309
+ raw_json to clear: 0 events
310
+ Estimated savings: ~0.0 MB
311
+
312
+ Run "pfscan archive run" to execute (or "pfscan archive run --yes" to confirm).
313
+
314
+ # Dry run (shows what would happen)
315
+ $ pfscan archive run
316
+ Archive Run (DRY RUN)
317
+ =====================
318
+
319
+ Sessions to delete: 3
320
+ raw_json to clear: 0 events
321
+ Estimated savings: ~0.0 MB
322
+
323
+ Run with --yes to actually execute.
324
+
325
+ # Execute archive with vacuum
326
+ $ pfscan archive run --yes --vacuum
327
+ Archive Run Complete
328
+ ====================
329
+
330
+ Sessions deleted: 3
331
+ raw_json cleared: 0 events
332
+ Database vacuumed
333
+
334
+ Final events.db size: 72.0 KB
335
+ ✓ Archive complete
336
+
337
+ # Verify sessions after archive
338
+ $ pfscan sessions list
339
+ Session ID Connector Started Duration Status Events Protected
340
+ --------------------------------------------------------------------------------
341
+ f2442c9b... time 2025/01/15 11:01:58 454ms normal 8 no
342
+ f641b379... time 2025/01/15 11:01:58 467ms normal 8 no
343
+ 3cf5a66e... time 2025/01/15 11:01:57 449ms normal 8 no
344
+ ```
345
+
208
346
  ## JSON Output
209
347
 
210
348
  Add `--json` for machine-readable output:
211
349
 
212
350
  ```bash
213
- $ proofscan connectors list --json
351
+ $ pfscan connectors list --json
214
352
  [
215
353
  {
216
354
  "ID": "time",
@@ -220,14 +358,25 @@ $ proofscan connectors list --json
220
358
  }
221
359
  ]
222
360
 
223
- $ proofscan scan start --id time --json
361
+ $ pfscan scan start --id time --json
224
362
  {
225
363
  "success": true,
226
364
  "connector_id": "time",
227
- "tools_count": 1,
228
- "tools": ["get_current_time"],
365
+ "session_id": "dcaa519e-e14b-41ea-ac7c-7f2066cc8020",
366
+ "tools_count": 2,
367
+ "tools": ["get_current_time", "convert_time"],
229
368
  "event_count": 8
230
369
  }
370
+
371
+ $ pfscan archive status --json
372
+ {
373
+ "events_db_size": 81920,
374
+ "proofs_db_size": 24576,
375
+ "total_sessions": 6,
376
+ "protected_sessions": 0,
377
+ "total_proofs": 0,
378
+ "raw_json_size": 4896
379
+ }
231
380
  ```
232
381
 
233
382
  ## Supported mcpServers Input Formats
@@ -266,14 +415,15 @@ proofscan accepts several JSON formats for import:
266
415
  Failures are always recorded as events. Even if a scan fails, you can inspect what happened:
267
416
 
268
417
  ```bash
269
- $ proofscan scan start --id broken-server
418
+ $ pfscan scan start --id broken-server
270
419
  Scanning connector: broken-server...
271
420
  ✗ Scan failed!
272
421
  Connector: broken-server
422
+ Session: abc123...
273
423
  Error: Initialize failed: Request timeout for method: initialize
274
424
  Events recorded: 3
275
425
 
276
- $ proofscan monitor tail --id broken-server --last 5
426
+ $ pfscan monitor tail --id broken-server --last 5
277
427
  Time Dir Status Kind Summary
278
428
  ----------------------------------------------------------------------
279
429
  10:35:01 → transport [connect_attempt]
package/dist/cli.js CHANGED
@@ -6,7 +6,7 @@
6
6
  import { Command } from 'commander';
7
7
  import { resolveConfigPath } from './utils/config-path.js';
8
8
  import { setOutputOptions } from './utils/output.js';
9
- import { createConfigCommand, createConnectorsCommand, createScanCommand, createMonitorCommand, } from './commands/index.js';
9
+ import { createConfigCommand, createConnectorsCommand, createScanCommand, createMonitorCommand, createSessionsCommand, createArchiveCommand, } from './commands/index.js';
10
10
  const program = new Command();
11
11
  // Global state for config path
12
12
  let globalConfigPath;
@@ -14,9 +14,9 @@ function getConfigPath() {
14
14
  return resolveConfigPath({ configPath: globalConfigPath });
15
15
  }
16
16
  program
17
- .name('proofscan')
17
+ .name('pfscan')
18
18
  .description('MCP Server scanner - eliminate black boxes by capturing JSON-RPC from connection to tools/list')
19
- .version('0.1.0')
19
+ .version('0.2.0')
20
20
  .option('-c, --config <path>', 'Path to config file')
21
21
  .option('--json', 'Output in JSON format')
22
22
  .option('-v, --verbose', 'Verbose output')
@@ -33,6 +33,8 @@ program.addCommand(createConfigCommand(getConfigPath));
33
33
  program.addCommand(createConnectorsCommand(getConfigPath));
34
34
  program.addCommand(createScanCommand(getConfigPath));
35
35
  program.addCommand(createMonitorCommand(getConfigPath));
36
+ program.addCommand(createSessionsCommand(getConfigPath));
37
+ program.addCommand(createArchiveCommand(getConfigPath));
36
38
  // Parse and run
37
39
  program.parse();
38
40
  //# 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,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,WAAW,CAAC;KACjB,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;AAExD,gBAAgB;AAChB,OAAO,CAAC,KAAK,EAAE,CAAC"}
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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Archive commands - plan and run cleanup based on retention settings
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare function createArchiveCommand(getConfigPath: () => string): Command;
6
+ //# sourceMappingURL=archive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4DpC,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,MAAM,GAAG,OAAO,CAwNzE"}