procsi 0.3.1 → 0.4.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.
- package/README.md +149 -148
- package/dist/cli/commands/off.d.ts.map +1 -1
- package/dist/cli/commands/off.js +1 -0
- package/dist/cli/commands/off.js.map +1 -1
- package/dist/cli/commands/on.d.ts.map +1 -1
- package/dist/cli/commands/on.js +3 -1
- package/dist/cli/commands/on.js.map +1 -1
- package/dist/cli/commands/request.d.ts.map +1 -1
- package/dist/cli/commands/request.js +61 -5
- package/dist/cli/commands/request.js.map +1 -1
- package/dist/cli/commands/requests.d.ts.map +1 -1
- package/dist/cli/commands/requests.js +9 -1
- package/dist/cli/commands/requests.js.map +1 -1
- package/dist/cli/formatters/detail.d.ts.map +1 -1
- package/dist/cli/formatters/detail.js +9 -2
- package/dist/cli/formatters/detail.js.map +1 -1
- package/dist/cli/formatters/table.d.ts.map +1 -1
- package/dist/cli/formatters/table.js +11 -1
- package/dist/cli/formatters/table.js.map +1 -1
- package/dist/cli/tui/App.d.ts.map +1 -1
- package/dist/cli/tui/App.js +43 -1
- package/dist/cli/tui/App.js.map +1 -1
- package/dist/cli/tui/components/AccordionPanel.d.ts.map +1 -1
- package/dist/cli/tui/components/AccordionPanel.js +1 -1
- package/dist/cli/tui/components/AccordionPanel.js.map +1 -1
- package/dist/cli/tui/components/FilterBar.d.ts.map +1 -1
- package/dist/cli/tui/components/FilterBar.js +34 -3
- package/dist/cli/tui/components/FilterBar.js.map +1 -1
- package/dist/cli/tui/components/HelpModal.d.ts.map +1 -1
- package/dist/cli/tui/components/HelpModal.js +2 -0
- package/dist/cli/tui/components/HelpModal.js.map +1 -1
- package/dist/cli/tui/components/RequestListItem.d.ts.map +1 -1
- package/dist/cli/tui/components/RequestListItem.js +3 -2
- package/dist/cli/tui/components/RequestListItem.js.map +1 -1
- package/dist/cli/tui/components/StatusBar.d.ts.map +1 -1
- package/dist/cli/tui/components/StatusBar.js +2 -0
- package/dist/cli/tui/components/StatusBar.js.map +1 -1
- package/dist/cli/tui/hooks/useRequests.d.ts +4 -0
- package/dist/cli/tui/hooks/useRequests.d.ts.map +1 -1
- package/dist/cli/tui/hooks/useRequests.js +36 -0
- package/dist/cli/tui/hooks/useRequests.js.map +1 -1
- package/dist/cli/tui/utils/filters.d.ts.map +1 -1
- package/dist/cli/tui/utils/filters.js +3 -1
- package/dist/cli/tui/utils/filters.js.map +1 -1
- package/dist/daemon/control.d.ts.map +1 -1
- package/dist/daemon/control.js +23 -1
- package/dist/daemon/control.js.map +1 -1
- package/dist/daemon/index.js +1 -1
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/interceptor-loader.d.ts.map +1 -1
- package/dist/daemon/interceptor-loader.js +5 -0
- package/dist/daemon/interceptor-loader.js.map +1 -1
- package/dist/daemon/proxy.d.ts.map +1 -1
- package/dist/daemon/proxy.js +99 -4
- package/dist/daemon/proxy.js.map +1 -1
- package/dist/daemon/storage.d.ts +18 -4
- package/dist/daemon/storage.d.ts.map +1 -1
- package/dist/daemon/storage.js +111 -25
- package/dist/daemon/storage.js.map +1 -1
- package/dist/mcp/server.d.ts +3 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +65 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/overrides/node.d.ts.map +1 -1
- package/dist/overrides/node.js +62 -0
- package/dist/overrides/node.js.map +1 -1
- package/dist/shared/constants.d.ts +10 -0
- package/dist/shared/constants.d.ts.map +1 -0
- package/dist/shared/constants.js +10 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/control-client.d.ts +15 -3
- package/dist/shared/control-client.d.ts.map +1 -1
- package/dist/shared/control-client.js +15 -3
- package/dist/shared/control-client.js.map +1 -1
- package/dist/shared/process-name.d.ts +10 -0
- package/dist/shared/process-name.d.ts.map +1 -0
- package/dist/shared/process-name.js +27 -0
- package/dist/shared/process-name.js.map +1 -0
- package/dist/shared/types.d.ts +10 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/package.json +2 -1
- package/skills/procsi/SKILL.md +5 -4
package/README.md
CHANGED
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
[](https://github.com/mtford90/procsi/actions/workflows/ci.yml)
|
|
5
5
|
[](https://www.gnu.org/licenses/agpl-3.0)
|
|
6
6
|
|
|
7
|
-
Procsi is a terminal-based HTTP proxy with a powerful MCP server. Quickly intercept, inspect & rewrite HTTP traffic.
|
|
7
|
+
Procsi is a terminal-based, project-isolated HTTP proxy with a powerful CLI & MCP server. Quickly intercept, inspect & rewrite HTTP traffic from the comfort of your terminal or favourite AI agent.
|
|
8
8
|
|
|
9
9
|

|
|
10
10
|
|
|
11
11
|
## Feature Highlights
|
|
12
12
|
|
|
13
|
-
- **Project isolation** — each project gets its own `.procsi/` directory with a separate daemon, database, CA cert and interceptors
|
|
13
|
+
- **Project isolation** — each project gets its own `.procsi/` directory with a separate daemon, database, CA cert and interceptors
|
|
14
14
|
- **MCP server** — AI agents get full access to your captured traffic and can write interceptor files for you. Search, filter, inspect, mock — all via tool calls.
|
|
15
15
|
- **Interceptors** — mock, modify or observe traffic with `.ts` files. Match on anything, query past traffic from within handlers, compose complex scenarios.
|
|
16
16
|
|
|
@@ -104,46 +104,47 @@ npx agents export --target claude
|
|
|
104
104
|
|
|
105
105
|
### Available Tools
|
|
106
106
|
|
|
107
|
-
| Tool
|
|
108
|
-
|
|
109
|
-
| `procsi_get_status`
|
|
110
|
-
| `procsi_list_requests`
|
|
111
|
-
| `procsi_get_request`
|
|
112
|
-
| `procsi_search_bodies`
|
|
113
|
-
| `procsi_query_json`
|
|
114
|
-
| `procsi_count_requests`
|
|
115
|
-
| `procsi_clear_requests`
|
|
116
|
-
| `procsi_list_sessions`
|
|
117
|
-
| `procsi_list_interceptors`
|
|
118
|
-
| `procsi_reload_interceptors` | Reload interceptors from disk
|
|
107
|
+
| Tool | Description |
|
|
108
|
+
| ---------------------------- | ---------------------------------------------------- |
|
|
109
|
+
| `procsi_get_status` | Daemon status, proxy port, request count |
|
|
110
|
+
| `procsi_list_requests` | Search and filter captured requests |
|
|
111
|
+
| `procsi_get_request` | Full request details by ID (headers, bodies, timing) |
|
|
112
|
+
| `procsi_search_bodies` | Full-text search through body content |
|
|
113
|
+
| `procsi_query_json` | Extract values from JSON bodies via JSONPath |
|
|
114
|
+
| `procsi_count_requests` | Count matching requests |
|
|
115
|
+
| `procsi_clear_requests` | Delete all captured requests |
|
|
116
|
+
| `procsi_list_sessions` | List active proxy sessions |
|
|
117
|
+
| `procsi_list_interceptors` | List loaded interceptors with status and errors |
|
|
118
|
+
| `procsi_reload_interceptors` | Reload interceptors from disk |
|
|
119
119
|
|
|
120
120
|
### Filtering
|
|
121
121
|
|
|
122
122
|
Most tools accept these filters:
|
|
123
123
|
|
|
124
|
-
| Parameter
|
|
125
|
-
|
|
126
|
-
| `method`
|
|
127
|
-
| `status_range`
|
|
128
|
-
| `search`
|
|
129
|
-
| `host`
|
|
130
|
-
| `path`
|
|
131
|
-
| `since` / `before` | Time window (ISO 8601)
|
|
132
|
-
| `header_name`
|
|
133
|
-
| `header_value`
|
|
134
|
-
| `header_target`
|
|
135
|
-
| `
|
|
136
|
-
| `
|
|
137
|
-
| `
|
|
124
|
+
| Parameter | Description | Example |
|
|
125
|
+
| ------------------ | ------------------------------------------- | ------------------------------------- |
|
|
126
|
+
| `method` | HTTP method(s), comma-separated | `"GET,POST"` |
|
|
127
|
+
| `status_range` | Status code, Nxx pattern, or range | `"4xx"`, `"401"`, `"500-503"` |
|
|
128
|
+
| `search` | Substring match on URL/path | `"api/users"` |
|
|
129
|
+
| `host` | Exact or suffix match (prefix with `.`) | `"api.example.com"`, `".example.com"` |
|
|
130
|
+
| `path` | Path prefix match | `"/api/v2"` |
|
|
131
|
+
| `since` / `before` | Time window (ISO 8601) | `"2024-01-15T10:30:00Z"` |
|
|
132
|
+
| `header_name` | Filter by header existence or value | `"content-type"` |
|
|
133
|
+
| `header_value` | Exact header value (requires `header_name`) | `"application/json"` |
|
|
134
|
+
| `header_target` | Which headers to search | `"request"`, `"response"`, `"both"` |
|
|
135
|
+
| `source` | Filter by request source | `"node"`, `"python"` |
|
|
136
|
+
| `intercepted_by` | Filter by interceptor name | `"mock-users"` |
|
|
137
|
+
| `offset` | Pagination offset (0-based) | `0` |
|
|
138
|
+
| `limit` | Max results (default 50, max 500) | `100` |
|
|
138
139
|
|
|
139
140
|
`procsi_get_request` accepts comma-separated IDs for batch fetching (e.g. `"id1,id2,id3"`).
|
|
140
141
|
|
|
141
142
|
`procsi_query_json` also takes:
|
|
142
143
|
|
|
143
|
-
| Parameter | Description
|
|
144
|
-
|
|
145
|
-
| `target`
|
|
146
|
-
| `value`
|
|
144
|
+
| Parameter | Description | Example |
|
|
145
|
+
| --------- | --------------------------------------------------------------------- | ------------ |
|
|
146
|
+
| `target` | Which body to query: `"request"`, `"response"`, or `"both"` (default) | `"response"` |
|
|
147
|
+
| `value` | Exact value match after JSONPath extraction | `"active"` |
|
|
147
148
|
|
|
148
149
|
### Output Formats
|
|
149
150
|
|
|
@@ -257,21 +258,21 @@ export default {
|
|
|
257
258
|
|
|
258
259
|
### Handler Context
|
|
259
260
|
|
|
260
|
-
| Property
|
|
261
|
-
|
|
262
|
-
| `ctx.request`
|
|
261
|
+
| Property | Description |
|
|
262
|
+
| --------------- | ----------------------------------------- |
|
|
263
|
+
| `ctx.request` | The incoming request (frozen, read-only) |
|
|
263
264
|
| `ctx.forward()` | Forward to upstream, returns the response |
|
|
264
|
-
| `ctx.procsi`
|
|
265
|
-
| `ctx.log(msg)`
|
|
265
|
+
| `ctx.procsi` | Query captured traffic (see below) |
|
|
266
|
+
| `ctx.log(msg)` | Write to `.procsi/procsi.log` |
|
|
266
267
|
|
|
267
268
|
#### `ctx.procsi`
|
|
268
269
|
|
|
269
|
-
| Method
|
|
270
|
-
|
|
271
|
-
| `countRequests(filter?)`
|
|
272
|
-
| `listRequests({ filter?, limit?, offset? })` | List request summaries
|
|
273
|
-
| `getRequest(id)`
|
|
274
|
-
| `searchBodies({ query, ...filter? })`
|
|
270
|
+
| Method | Description |
|
|
271
|
+
| -------------------------------------------- | -------------------------------------------- |
|
|
272
|
+
| `countRequests(filter?)` | Count matching requests |
|
|
273
|
+
| `listRequests({ filter?, limit?, offset? })` | List request summaries |
|
|
274
|
+
| `getRequest(id)` | Full request details by ID |
|
|
275
|
+
| `searchBodies({ query, ...filter? })` | Full-text search through bodies |
|
|
275
276
|
| `queryJsonBodies({ json_path, ...filter? })` | Extract values from JSON bodies via JSONPath |
|
|
276
277
|
|
|
277
278
|
### How Interceptors Work
|
|
@@ -326,15 +327,15 @@ export default {
|
|
|
326
327
|
|
|
327
328
|
`eval "$(procsi on)"` sets these in your shell (`eval "$(procsi off)"` unsets them):
|
|
328
329
|
|
|
329
|
-
| Variable
|
|
330
|
-
|
|
331
|
-
| `HTTP_PROXY`
|
|
332
|
-
| `HTTPS_PROXY`
|
|
333
|
-
| `SSL_CERT_FILE`
|
|
334
|
-
| `REQUESTS_CA_BUNDLE`
|
|
335
|
-
| `NODE_EXTRA_CA_CERTS` | CA cert path (Node.js)
|
|
336
|
-
| `PROCSI_SESSION_ID`
|
|
337
|
-
| `PROCSI_LABEL`
|
|
330
|
+
| Variable | Purpose |
|
|
331
|
+
| --------------------- | ------------------------------------ |
|
|
332
|
+
| `HTTP_PROXY` | Proxy URL for HTTP clients |
|
|
333
|
+
| `HTTPS_PROXY` | Proxy URL for HTTPS clients |
|
|
334
|
+
| `SSL_CERT_FILE` | CA cert path (curl, git, etc.) |
|
|
335
|
+
| `REQUESTS_CA_BUNDLE` | CA cert path (Python requests) |
|
|
336
|
+
| `NODE_EXTRA_CA_CERTS` | CA cert path (Node.js) |
|
|
337
|
+
| `PROCSI_SESSION_ID` | UUID identifying the current session |
|
|
338
|
+
| `PROCSI_LABEL` | Session label (when `-l` flag used) |
|
|
338
339
|
|
|
339
340
|
## Configuration
|
|
340
341
|
|
|
@@ -349,12 +350,12 @@ Create `.procsi/config.json` to override defaults. All fields are optional:
|
|
|
349
350
|
}
|
|
350
351
|
```
|
|
351
352
|
|
|
352
|
-
| Setting
|
|
353
|
-
|
|
354
|
-
| `maxStoredRequests` | `5000`
|
|
355
|
-
| `maxBodySize`
|
|
356
|
-
| `maxLogSize`
|
|
357
|
-
| `pollInterval`
|
|
353
|
+
| Setting | Default | Description |
|
|
354
|
+
| ------------------- | ------------------ | --------------------------------------------------------------------- |
|
|
355
|
+
| `maxStoredRequests` | `5000` | Max requests in the database. Oldest evicted automatically. |
|
|
356
|
+
| `maxBodySize` | `10485760` (10 MB) | Max body size to capture. Larger bodies are proxied but not stored. |
|
|
357
|
+
| `maxLogSize` | `10485760` (10 MB) | Max log file size before rotation. |
|
|
358
|
+
| `pollInterval` | `2000` | TUI polling interval in ms. Lower = faster updates, more IPC traffic. |
|
|
358
359
|
|
|
359
360
|
Missing or invalid values fall back to defaults.
|
|
360
361
|
|
|
@@ -362,14 +363,14 @@ Missing or invalid values fall back to defaults.
|
|
|
362
363
|
|
|
363
364
|
Anything that respects `HTTP_PROXY` works:
|
|
364
365
|
|
|
365
|
-
| Client
|
|
366
|
-
|
|
367
|
-
| curl
|
|
368
|
-
| wget
|
|
366
|
+
| Client | Support |
|
|
367
|
+
| ---------------------------- | -------------------------- |
|
|
368
|
+
| curl | Automatic |
|
|
369
|
+
| wget | Automatic |
|
|
369
370
|
| Node.js (fetch, axios, etc.) | With `NODE_EXTRA_CA_CERTS` |
|
|
370
|
-
| Python (requests, httpx)
|
|
371
|
-
| Go
|
|
372
|
-
| Rust (reqwest)
|
|
371
|
+
| Python (requests, httpx) | With `REQUESTS_CA_BUNDLE` |
|
|
372
|
+
| Go | Automatic |
|
|
373
|
+
| Rust (reqwest) | Automatic |
|
|
373
374
|
|
|
374
375
|
## Export
|
|
375
376
|
|
|
@@ -397,59 +398,59 @@ Mouse support: click to select, scroll to navigate, click panels to focus.
|
|
|
397
398
|
|
|
398
399
|
### Main View
|
|
399
400
|
|
|
400
|
-
| Key
|
|
401
|
-
|
|
402
|
-
| `j`/`k` or `↑`/`↓`
|
|
403
|
-
| `g` / `G`
|
|
404
|
-
| `Ctrl+u` / `Ctrl+d` | Half-page up / down
|
|
405
|
-
| `Ctrl+f` / `Ctrl+b` | Full-page down / up
|
|
406
|
-
| `Tab` / `Shift+Tab` | Next / previous panel
|
|
407
|
-
| `1`-`5`
|
|
408
|
-
| `Enter`
|
|
409
|
-
| `/`
|
|
410
|
-
| `u`
|
|
411
|
-
| `c`
|
|
412
|
-
| `y`
|
|
413
|
-
| `s`
|
|
414
|
-
| `H`
|
|
415
|
-
| `r`
|
|
416
|
-
| `?`
|
|
417
|
-
| `i`
|
|
418
|
-
| `q`
|
|
401
|
+
| Key | Action |
|
|
402
|
+
| ------------------- | -------------------------------------------------------------------------- |
|
|
403
|
+
| `j`/`k` or `↑`/`↓` | Navigate up/down |
|
|
404
|
+
| `g` / `G` | Jump to first / last item |
|
|
405
|
+
| `Ctrl+u` / `Ctrl+d` | Half-page up / down |
|
|
406
|
+
| `Ctrl+f` / `Ctrl+b` | Full-page down / up |
|
|
407
|
+
| `Tab` / `Shift+Tab` | Next / previous panel |
|
|
408
|
+
| `1`-`5` | Jump to section (list / request / request body / response / response body) |
|
|
409
|
+
| `Enter` | Open body in full-screen viewer |
|
|
410
|
+
| `/` | Open filter bar |
|
|
411
|
+
| `u` | Toggle full URL display |
|
|
412
|
+
| `c` | Copy request as curl |
|
|
413
|
+
| `y` | Copy body to clipboard |
|
|
414
|
+
| `s` | Export body (opens export modal) |
|
|
415
|
+
| `H` | Export all as HAR |
|
|
416
|
+
| `r` | Refresh |
|
|
417
|
+
| `?` | Help |
|
|
418
|
+
| `i` | Proxy connection info |
|
|
419
|
+
| `q` | Quit |
|
|
419
420
|
|
|
420
421
|
### Filter Bar (`/`)
|
|
421
422
|
|
|
422
|
-
| Key
|
|
423
|
-
|
|
424
|
-
| `Tab` / `Shift+Tab` | Cycle between search, method, status fields
|
|
425
|
-
| `←` / `→`
|
|
426
|
-
| `Return`
|
|
427
|
-
| `Esc`
|
|
423
|
+
| Key | Action |
|
|
424
|
+
| ------------------- | -------------------------------------------------------------------- |
|
|
425
|
+
| `Tab` / `Shift+Tab` | Cycle between search, method, status fields |
|
|
426
|
+
| `←` / `→` | Cycle method (ALL/GET/POST/PUT/PATCH/DELETE) or status (ALL/2xx-5xx) |
|
|
427
|
+
| `Return` | Apply filter |
|
|
428
|
+
| `Esc` | Cancel and revert |
|
|
428
429
|
|
|
429
430
|
### JSON Explorer (Enter on a JSON body)
|
|
430
431
|
|
|
431
|
-
| Key
|
|
432
|
-
|
|
433
|
-
| `j`/`k`
|
|
434
|
-
| `Enter`/`l` | Expand/collapse node
|
|
435
|
-
| `h`
|
|
436
|
-
| `e` / `c`
|
|
437
|
-
| `/`
|
|
438
|
-
| `n` / `N`
|
|
439
|
-
| `y`
|
|
440
|
-
| `q` / `Esc` | Close
|
|
432
|
+
| Key | Action |
|
|
433
|
+
| ----------- | --------------------- |
|
|
434
|
+
| `j`/`k` | Navigate nodes |
|
|
435
|
+
| `Enter`/`l` | Expand/collapse node |
|
|
436
|
+
| `h` | Collapse node |
|
|
437
|
+
| `e` / `c` | Expand / collapse all |
|
|
438
|
+
| `/` | Filter by path |
|
|
439
|
+
| `n` / `N` | Next / previous match |
|
|
440
|
+
| `y` | Copy value |
|
|
441
|
+
| `q` / `Esc` | Close |
|
|
441
442
|
|
|
442
443
|
### Text Viewer (Enter on a non-JSON body)
|
|
443
444
|
|
|
444
|
-
| Key
|
|
445
|
-
|
|
446
|
-
| `j`/`k`
|
|
447
|
-
| `Space`
|
|
448
|
-
| `g` / `G`
|
|
449
|
-
| `/`
|
|
450
|
-
| `n` / `N`
|
|
451
|
-
| `y`
|
|
452
|
-
| `q` / `Esc` | Close
|
|
445
|
+
| Key | Action |
|
|
446
|
+
| ----------- | --------------------- |
|
|
447
|
+
| `j`/`k` | Scroll line by line |
|
|
448
|
+
| `Space` | Page down |
|
|
449
|
+
| `g` / `G` | Top / bottom |
|
|
450
|
+
| `/` | Search text |
|
|
451
|
+
| `n` / `N` | Next / previous match |
|
|
452
|
+
| `y` | Copy to clipboard |
|
|
453
|
+
| `q` / `Esc` | Close |
|
|
453
454
|
|
|
454
455
|
</details>
|
|
455
456
|
|
|
@@ -457,10 +458,10 @@ Mouse support: click to select, scroll to navigate, click panels to focus.
|
|
|
457
458
|
|
|
458
459
|
### Global Options
|
|
459
460
|
|
|
460
|
-
| Flag
|
|
461
|
-
|
|
462
|
-
| `-v, --verbose`
|
|
463
|
-
| `-d, --dir <path>` | Override project root directory
|
|
461
|
+
| Flag | Description |
|
|
462
|
+
| ------------------ | ------------------------------------------------- |
|
|
463
|
+
| `-v, --verbose` | Increase log verbosity (stackable: `-vv`, `-vvv`) |
|
|
464
|
+
| `-d, --dir <path>` | Override project root directory |
|
|
464
465
|
|
|
465
466
|
### `procsi on`
|
|
466
467
|
|
|
@@ -472,10 +473,11 @@ eval "$(procsi on)"
|
|
|
472
473
|
|
|
473
474
|
If run directly in a TTY (without `eval`), shows usage instructions.
|
|
474
475
|
|
|
475
|
-
| Flag
|
|
476
|
-
|
|
477
|
-
| `-l, --label <label>`
|
|
478
|
-
|
|
|
476
|
+
| Flag | Description |
|
|
477
|
+
| --------------------- | --------------------------------------------- |
|
|
478
|
+
| `-l, --label <label>` | Label this session (visible in TUI and MCP) |
|
|
479
|
+
| `-s, --source <name>` | Label the source process (auto-detected from PID if omitted) |
|
|
480
|
+
| `--no-restart` | Don't auto-restart daemon on version mismatch |
|
|
479
481
|
|
|
480
482
|
### `procsi off`
|
|
481
483
|
|
|
@@ -489,8 +491,8 @@ eval "$(procsi off)"
|
|
|
489
491
|
|
|
490
492
|
Open the interactive TUI.
|
|
491
493
|
|
|
492
|
-
| Flag
|
|
493
|
-
|
|
494
|
+
| Flag | Description |
|
|
495
|
+
| ------ | ------------------------------------------- |
|
|
494
496
|
| `--ci` | CI mode: render once and exit (for testing) |
|
|
495
497
|
|
|
496
498
|
### `procsi status`
|
|
@@ -525,21 +527,22 @@ procsi requests --limit 100 --offset 50 # pagination
|
|
|
525
527
|
procsi requests --json # JSON output
|
|
526
528
|
```
|
|
527
529
|
|
|
528
|
-
| Flag
|
|
529
|
-
|
|
530
|
-
| `--method <methods>`
|
|
531
|
-
| `--status <range>`
|
|
532
|
-
| `--host <host>`
|
|
533
|
-
| `--path <prefix>`
|
|
534
|
-
| `--search <text>`
|
|
535
|
-
| `--since <time>`
|
|
536
|
-
| `--before <time>`
|
|
537
|
-
| `--header <spec>`
|
|
538
|
-
| `--header-target <target>` | `request`, `response`, or `both` (default)
|
|
539
|
-
| `--
|
|
540
|
-
| `--
|
|
541
|
-
| `--
|
|
542
|
-
| `--
|
|
530
|
+
| Flag | Description |
|
|
531
|
+
| -------------------------- | -------------------------------------------------------- |
|
|
532
|
+
| `--method <methods>` | Filter by HTTP method (comma-separated) |
|
|
533
|
+
| `--status <range>` | Status range: `2xx`, `4xx`, exact `401`, etc. |
|
|
534
|
+
| `--host <host>` | Filter by hostname |
|
|
535
|
+
| `--path <prefix>` | Filter by path prefix |
|
|
536
|
+
| `--search <text>` | Substring match on URL |
|
|
537
|
+
| `--since <time>` | Since time (5m, 2h, 10am, yesterday, monday, 2024-01-01) |
|
|
538
|
+
| `--before <time>` | Before time (same formats as --since) |
|
|
539
|
+
| `--header <spec>` | Header name or name:value |
|
|
540
|
+
| `--header-target <target>` | `request`, `response`, or `both` (default) |
|
|
541
|
+
| `--source <name>` | Filter by request source (e.g. node, python) |
|
|
542
|
+
| `--intercepted-by <name>` | Filter by interceptor name |
|
|
543
|
+
| `--limit <n>` | Max results (default 50) |
|
|
544
|
+
| `--offset <n>` | Skip results (default 0) |
|
|
545
|
+
| `--json` | JSON output |
|
|
543
546
|
|
|
544
547
|
#### `procsi requests search <query>`
|
|
545
548
|
|
|
@@ -589,8 +592,8 @@ procsi request a1b2c3d export har
|
|
|
589
592
|
|
|
590
593
|
List active proxy sessions.
|
|
591
594
|
|
|
592
|
-
| Flag
|
|
593
|
-
|
|
595
|
+
| Flag | Description |
|
|
596
|
+
| -------- | ----------- |
|
|
594
597
|
| `--json` | JSON output |
|
|
595
598
|
|
|
596
599
|
### `procsi clear`
|
|
@@ -634,13 +637,13 @@ procsi interceptors logs --follow # live tail (Ctrl+C to stop)
|
|
|
634
637
|
procsi interceptors logs --follow --json # live tail as NDJSON
|
|
635
638
|
```
|
|
636
639
|
|
|
637
|
-
| Flag
|
|
638
|
-
|
|
639
|
-
| `--name <interceptor>` | Filter by interceptor name
|
|
640
|
-
| `--level <level>`
|
|
641
|
-
| `--limit <n>`
|
|
642
|
-
| `--follow`
|
|
643
|
-
| `--json`
|
|
640
|
+
| Flag | Description |
|
|
641
|
+
| ---------------------- | ----------------------------------- |
|
|
642
|
+
| `--name <interceptor>` | Filter by interceptor name |
|
|
643
|
+
| `--level <level>` | Filter by level (info, warn, error) |
|
|
644
|
+
| `--limit <n>` | Max events (default 50) |
|
|
645
|
+
| `--follow` | Live tail — poll for new events |
|
|
646
|
+
| `--json` | JSON output |
|
|
644
647
|
|
|
645
648
|
#### `procsi interceptors logs clear`
|
|
646
649
|
|
|
@@ -690,13 +693,11 @@ procsi daemon stop
|
|
|
690
693
|
eval "$(procsi on)"
|
|
691
694
|
```
|
|
692
695
|
|
|
693
|
-
### Terminal too small
|
|
694
|
-
|
|
695
|
-
The TUI needs at least 60 columns by 10 rows.
|
|
696
|
-
|
|
697
696
|
### Requests not appearing
|
|
698
697
|
|
|
699
|
-
Your HTTP client needs to respect proxy environment variables.
|
|
698
|
+
Your HTTP client needs to respect proxy environment variables.
|
|
699
|
+
|
|
700
|
+
There are workarounds implemented for node - e.g. fetch override. Other libraries in different environments may need a similar treatment.
|
|
700
701
|
|
|
701
702
|
## Licence
|
|
702
703
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"off.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/off.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"off.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/off.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,eAAO,MAAM,UAAU,SAmBnB,CAAC"}
|
package/dist/cli/commands/off.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"off.js","sourceRoot":"","sources":["../../../src/cli/commands/off.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAEpE,0CAA0C;AAC1C,MAAM,eAAe,GAAG;IACtB,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,aAAa;IACb,eAAe;IACf,oBAAoB;IACpB,qBAAqB;IACrB,yBAAyB;IACzB,0BAA0B;IAC1B,oBAAoB;IACpB,mBAAmB;IACnB,cAAc;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACzC,WAAW,CAAC,iEAAiE,CAAC;KAC9E,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,oEAAoE;IACpE,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IAED,8CAA8C;IAC9C,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAExC,mCAAmC;IACnC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC;IAE9C,4DAA4D;IAC5D,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"off.js","sourceRoot":"","sources":["../../../src/cli/commands/off.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAEpE,0CAA0C;AAC1C,MAAM,eAAe,GAAG;IACtB,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,aAAa;IACb,eAAe;IACf,oBAAoB;IACpB,qBAAqB;IACrB,yBAAyB;IACzB,0BAA0B;IAC1B,oBAAoB;IACpB,mBAAmB;IACnB,sBAAsB;IACtB,cAAc;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACzC,WAAW,CAAC,iEAAiE,CAAC;KAC9E,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,oEAAoE;IACpE,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IAED,8CAA8C;IAC9C,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAExC,mCAAmC;IACnC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC;IAE9C,4DAA4D;IAC5D,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"on.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/on.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAIlE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAEtD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CASnE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAMjD;AAED,eAAO,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"on.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/on.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAIlE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAEtD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CASnE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAMjD;AAED,eAAO,MAAM,SAAS,SAmHnB,CAAC"}
|
package/dist/cli/commands/on.js
CHANGED
|
@@ -74,6 +74,7 @@ export function formatNodeOptionsRestore() {
|
|
|
74
74
|
export const onCommand = new Command("on")
|
|
75
75
|
.description("Output shell export statements to start intercepting HTTP traffic")
|
|
76
76
|
.option("-l, --label <label>", "Label for this session")
|
|
77
|
+
.option("-s, --source <name>", "Label the source process (auto-detected from PID if omitted)")
|
|
77
78
|
.option("--no-restart", "Do not auto-restart daemon on version mismatch")
|
|
78
79
|
.action(async (options, command) => {
|
|
79
80
|
// If stdout is a TTY, user ran directly — show instructions instead
|
|
@@ -115,7 +116,7 @@ export const onCommand = new Command("on")
|
|
|
115
116
|
// Register session with daemon
|
|
116
117
|
const client = new ControlClient(paths.controlSocketFile);
|
|
117
118
|
try {
|
|
118
|
-
const session = await client.registerSession(label, process.ppid);
|
|
119
|
+
const session = await client.registerSession(label, process.ppid, options.source);
|
|
119
120
|
// Build environment variables
|
|
120
121
|
const envVars = {
|
|
121
122
|
HTTP_PROXY: proxyUrl,
|
|
@@ -132,6 +133,7 @@ export const onCommand = new Command("on")
|
|
|
132
133
|
...getNodeEnvVars(proxyUrl),
|
|
133
134
|
// procsi session tracking
|
|
134
135
|
PROCSI_SESSION_ID: session.id,
|
|
136
|
+
PROCSI_SESSION_TOKEN: session.token,
|
|
135
137
|
};
|
|
136
138
|
if (label) {
|
|
137
139
|
envVars["PROCSI_LABEL"] = label;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"on.js","sourceRoot":"","sources":["../../../src/cli/commands/on.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACnG,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEjF;;;GAGG;AACH,SAAS,kBAAkB,CAAC,GAAW;IACrC,OAAO,GAAG;SACP,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAA4B;IACxD,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,UAAU,GAAG,KAAK,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC;SACrE,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAc;IAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,uBAAuB,CAAC,WAAmB;IACzD,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChD,OAAO;QACL,oGAAoG;QACpG,mFAAmF;QACnF,kEAAkE;QAClE,yFAAyF;QACzF,6FAA6F,OAAO,GAAG;KACxG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,0DAA0D;QAC1D,kIAAkI;QAClI,4CAA4C;KAC7C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;KACvC,WAAW,CAAC,mEAAmE,CAAC;KAChF,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC;KACvD,MAAM,CAAC,cAAc,EAAE,gDAAgD,CAAC;KACxE,MAAM,
|
|
1
|
+
{"version":3,"file":"on.js","sourceRoot":"","sources":["../../../src/cli/commands/on.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/request.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/request.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkMpC,eAAO,MAAM,cAAc,SA+BvB,CAAC"}
|
|
@@ -123,6 +123,64 @@ const exportSubcommand = new Command("export")
|
|
|
123
123
|
client.close();
|
|
124
124
|
}
|
|
125
125
|
});
|
|
126
|
+
const saveSubcommand = new Command("save")
|
|
127
|
+
.description("Save (bookmark) a request so it persists across clear operations")
|
|
128
|
+
.action(async (_opts, command) => {
|
|
129
|
+
const parentOpts = command.parent?.args ?? [];
|
|
130
|
+
const idPrefix = parentOpts[0];
|
|
131
|
+
if (!idPrefix || typeof idPrefix !== "string") {
|
|
132
|
+
console.error("Usage: procsi request <id> save");
|
|
133
|
+
process.exit(1);
|
|
134
|
+
}
|
|
135
|
+
const { client } = await connectToDaemon(command);
|
|
136
|
+
try {
|
|
137
|
+
const request = await resolveRequest(client, idPrefix);
|
|
138
|
+
const result = await client.saveRequest(request.id);
|
|
139
|
+
if (result.success) {
|
|
140
|
+
console.log(` Request ${request.id.slice(0, SHORT_ID_LENGTH)} saved`);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
console.error(` Failed to save request`);
|
|
144
|
+
process.exit(1);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
console.error(`Error: ${getErrorMessage(err)}`);
|
|
149
|
+
process.exit(1);
|
|
150
|
+
}
|
|
151
|
+
finally {
|
|
152
|
+
client.close();
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
const unsaveSubcommand = new Command("unsave")
|
|
156
|
+
.description("Remove the saved/bookmark flag from a request")
|
|
157
|
+
.action(async (_opts, command) => {
|
|
158
|
+
const parentOpts = command.parent?.args ?? [];
|
|
159
|
+
const idPrefix = parentOpts[0];
|
|
160
|
+
if (!idPrefix || typeof idPrefix !== "string") {
|
|
161
|
+
console.error("Usage: procsi request <id> unsave");
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
const { client } = await connectToDaemon(command);
|
|
165
|
+
try {
|
|
166
|
+
const request = await resolveRequest(client, idPrefix);
|
|
167
|
+
const result = await client.unsaveRequest(request.id);
|
|
168
|
+
if (result.success) {
|
|
169
|
+
console.log(` Request ${request.id.slice(0, SHORT_ID_LENGTH)} unsaved`);
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
console.error(` Failed to unsave request`);
|
|
173
|
+
process.exit(1);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
console.error(`Error: ${getErrorMessage(err)}`);
|
|
178
|
+
process.exit(1);
|
|
179
|
+
}
|
|
180
|
+
finally {
|
|
181
|
+
client.close();
|
|
182
|
+
}
|
|
183
|
+
});
|
|
126
184
|
// --- Main `request` command ---
|
|
127
185
|
export const requestCommand = new Command("request")
|
|
128
186
|
.description("View a single request in detail")
|
|
@@ -130,6 +188,8 @@ export const requestCommand = new Command("request")
|
|
|
130
188
|
.option("--json", "JSON output")
|
|
131
189
|
.addCommand(bodySubcommand)
|
|
132
190
|
.addCommand(exportSubcommand)
|
|
191
|
+
.addCommand(saveSubcommand)
|
|
192
|
+
.addCommand(unsaveSubcommand)
|
|
133
193
|
.action(async (id, opts, command) => {
|
|
134
194
|
const { client } = await connectToDaemon(command);
|
|
135
195
|
try {
|
|
@@ -139,11 +199,7 @@ export const requestCommand = new Command("request")
|
|
|
139
199
|
return;
|
|
140
200
|
}
|
|
141
201
|
console.log(formatRequestDetail(request));
|
|
142
|
-
const hint = formatHint([
|
|
143
|
-
"body for full body",
|
|
144
|
-
"export curl|har",
|
|
145
|
-
"body --request for request body",
|
|
146
|
-
]);
|
|
202
|
+
const hint = formatHint(["body for full body", "export curl|har", "save|unsave to bookmark"]);
|
|
147
203
|
if (hint) {
|
|
148
204
|
console.log("");
|
|
149
205
|
console.log(hint);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/cli/commands/request.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/cli/commands/request.ts"],"names":[],"mappings":"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"}
|