procsi 0.4.0 → 0.5.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 +47 -469
- package/dist/cli/commands/daemon.d.ts.map +1 -1
- package/dist/cli/commands/daemon.js +1 -0
- package/dist/cli/commands/daemon.js.map +1 -1
- package/dist/cli/commands/off.d.ts.map +1 -1
- package/dist/cli/commands/off.js +11 -2
- package/dist/cli/commands/off.js.map +1 -1
- package/dist/cli/commands/on.d.ts +33 -0
- package/dist/cli/commands/on.d.ts.map +1 -1
- package/dist/cli/commands/on.js +91 -3
- package/dist/cli/commands/on.js.map +1 -1
- package/dist/cli/commands/requests.d.ts +25 -0
- package/dist/cli/commands/requests.d.ts.map +1 -1
- package/dist/cli/commands/requests.js +35 -4
- 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 +6 -0
- 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 +47 -2
- 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 +2 -1
- package/dist/cli/tui/components/AccordionPanel.js.map +1 -1
- package/dist/cli/tui/components/FilterBar.d.ts +10 -2
- package/dist/cli/tui/components/FilterBar.d.ts.map +1 -1
- package/dist/cli/tui/components/FilterBar.js +100 -12
- 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 -1
- package/dist/cli/tui/components/HelpModal.js.map +1 -1
- package/dist/cli/tui/components/RequestListItem.d.ts +8 -0
- package/dist/cli/tui/components/RequestListItem.d.ts.map +1 -1
- package/dist/cli/tui/components/RequestListItem.js +14 -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 +1 -0
- package/dist/cli/tui/components/StatusBar.js.map +1 -1
- package/dist/cli/tui/hooks/useRequests.d.ts +4 -1
- package/dist/cli/tui/hooks/useRequests.d.ts.map +1 -1
- package/dist/cli/tui/hooks/useRequests.js +36 -9
- 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 +1 -0
- package/dist/cli/tui/utils/filters.js.map +1 -1
- package/dist/daemon/control.d.ts +3 -0
- package/dist/daemon/control.d.ts.map +1 -1
- package/dist/daemon/control.js +150 -1
- package/dist/daemon/control.js.map +1 -1
- package/dist/daemon/index.js +41 -2
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/procsi-client.d.ts.map +1 -1
- package/dist/daemon/procsi-client.js +1 -0
- package/dist/daemon/procsi-client.js.map +1 -1
- package/dist/daemon/proxy.d.ts +3 -0
- package/dist/daemon/proxy.d.ts.map +1 -1
- package/dist/daemon/proxy.js +19 -6
- package/dist/daemon/proxy.js.map +1 -1
- package/dist/daemon/replay-tracker.d.ts +11 -0
- package/dist/daemon/replay-tracker.d.ts.map +1 -0
- package/dist/daemon/replay-tracker.js +47 -0
- package/dist/daemon/replay-tracker.js.map +1 -0
- package/dist/daemon/replay.d.ts +20 -0
- package/dist/daemon/replay.d.ts.map +1 -0
- package/dist/daemon/replay.js +113 -0
- package/dist/daemon/replay.js.map +1 -0
- package/dist/daemon/storage.d.ts +12 -2
- package/dist/daemon/storage.d.ts.map +1 -1
- package/dist/daemon/storage.js +84 -7
- 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 +167 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/overrides/php.d.ts +15 -0
- package/dist/overrides/php.d.ts.map +1 -0
- package/dist/overrides/php.js +29 -0
- package/dist/overrides/php.js.map +1 -0
- package/dist/overrides/python.d.ts +19 -0
- package/dist/overrides/python.d.ts.map +1 -0
- package/dist/overrides/python.js +74 -0
- package/dist/overrides/python.js.map +1 -0
- package/dist/overrides/ruby.d.ts +17 -0
- package/dist/overrides/ruby.d.ts.map +1 -0
- package/dist/overrides/ruby.js +55 -0
- package/dist/overrides/ruby.js.map +1 -0
- package/dist/shared/body-search.d.ts +28 -0
- package/dist/shared/body-search.d.ts.map +1 -0
- package/dist/shared/body-search.js +64 -0
- package/dist/shared/body-search.js.map +1 -0
- package/dist/shared/constants.d.ts +2 -0
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/constants.js +2 -0
- package/dist/shared/constants.js.map +1 -1
- package/dist/shared/control-client.d.ts +23 -2
- package/dist/shared/control-client.d.ts.map +1 -1
- package/dist/shared/control-client.js +15 -2
- package/dist/shared/control-client.js.map +1 -1
- package/dist/shared/daemon.js +1 -0
- package/dist/shared/daemon.js.map +1 -1
- package/dist/shared/project.d.ts +4 -0
- package/dist/shared/project.d.ts.map +1 -1
- package/dist/shared/project.js +4 -0
- package/dist/shared/project.js.map +1 -1
- package/dist/shared/proxy-info.d.ts.map +1 -1
- package/dist/shared/proxy-info.js +5 -0
- package/dist/shared/proxy-info.js.map +1 -1
- package/dist/shared/regex-filter.d.ts +35 -0
- package/dist/shared/regex-filter.d.ts.map +1 -0
- package/dist/shared/regex-filter.js +81 -0
- package/dist/shared/regex-filter.js.map +1 -0
- package/dist/shared/types.d.ts +13 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/skills/procsi/SKILL.md +9 -4
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for parsing and validating regex-based URL filters.
|
|
3
|
+
*/
|
|
4
|
+
export interface RegexFilterSpec {
|
|
5
|
+
pattern: string;
|
|
6
|
+
flags: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ParsedUrlSearchInput {
|
|
9
|
+
search?: string;
|
|
10
|
+
regex?: RegexFilterSpec;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Validate a regex pattern and flags, throwing a descriptive error on failure.
|
|
14
|
+
*/
|
|
15
|
+
export declare function validateRegexFilter(pattern: string, flags?: string): RegexFilterSpec;
|
|
16
|
+
/**
|
|
17
|
+
* Parse a slash-delimited regex literal (`/pattern/flags`).
|
|
18
|
+
* Returns undefined when the input is not a regex literal.
|
|
19
|
+
* Throws when literal syntax is present but invalid.
|
|
20
|
+
*/
|
|
21
|
+
export declare function parseRegexLiteral(input: string): RegexFilterSpec | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* Parse TUI/CLI URL search input.
|
|
24
|
+
* - `/.../flags` => regex mode
|
|
25
|
+
* - otherwise => plain text search
|
|
26
|
+
*/
|
|
27
|
+
export declare function parseUrlSearchInput(input: string): ParsedUrlSearchInput;
|
|
28
|
+
/**
|
|
29
|
+
* Normalise regex filter input from external callers.
|
|
30
|
+
*
|
|
31
|
+
* - If flags are provided, treat `regex` as the raw pattern.
|
|
32
|
+
* - If flags are omitted, accept either a raw pattern or `/pattern/flags` literal.
|
|
33
|
+
*/
|
|
34
|
+
export declare function normaliseRegexFilterInput(regex: string, flags?: string): RegexFilterSpec;
|
|
35
|
+
//# sourceMappingURL=regex-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-filter.d.ts","sourceRoot":"","sources":["../../src/shared/regex-filter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB;AAsBD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,eAAe,CAWhF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAQ5E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,oBAAoB,CAYvE;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,eAAe,CAaxF"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for parsing and validating regex-based URL filters.
|
|
3
|
+
*/
|
|
4
|
+
const REGEX_LITERAL_PATTERN = /^\/((?:\\.|[^\\/])*)\/([dgimsuvy]*)$/;
|
|
5
|
+
const VALID_REGEX_FLAGS = new Set(["d", "g", "i", "m", "s", "u", "v", "y"]);
|
|
6
|
+
function getErrorMessage(err) {
|
|
7
|
+
return err instanceof Error ? err.message : String(err);
|
|
8
|
+
}
|
|
9
|
+
function validateRegexFlags(flags) {
|
|
10
|
+
const seen = new Set();
|
|
11
|
+
for (const flag of flags) {
|
|
12
|
+
if (!VALID_REGEX_FLAGS.has(flag)) {
|
|
13
|
+
throw new Error(`Unsupported regex flag "${flag}".`);
|
|
14
|
+
}
|
|
15
|
+
if (seen.has(flag)) {
|
|
16
|
+
throw new Error(`Duplicate regex flag "${flag}".`);
|
|
17
|
+
}
|
|
18
|
+
seen.add(flag);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Validate a regex pattern and flags, throwing a descriptive error on failure.
|
|
23
|
+
*/
|
|
24
|
+
export function validateRegexFilter(pattern, flags = "") {
|
|
25
|
+
validateRegexFlags(flags);
|
|
26
|
+
try {
|
|
27
|
+
// Validate by constructing a RegExp instance.
|
|
28
|
+
new RegExp(pattern, flags);
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
throw new Error(`Invalid regex pattern "${pattern}": ${getErrorMessage(err)}`);
|
|
32
|
+
}
|
|
33
|
+
return { pattern, flags };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Parse a slash-delimited regex literal (`/pattern/flags`).
|
|
37
|
+
* Returns undefined when the input is not a regex literal.
|
|
38
|
+
* Throws when literal syntax is present but invalid.
|
|
39
|
+
*/
|
|
40
|
+
export function parseRegexLiteral(input) {
|
|
41
|
+
const match = input.match(REGEX_LITERAL_PATTERN);
|
|
42
|
+
if (!match)
|
|
43
|
+
return undefined;
|
|
44
|
+
const pattern = match[1] ?? "";
|
|
45
|
+
const flags = match[2] ?? "";
|
|
46
|
+
return validateRegexFilter(pattern, flags);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Parse TUI/CLI URL search input.
|
|
50
|
+
* - `/.../flags` => regex mode
|
|
51
|
+
* - otherwise => plain text search
|
|
52
|
+
*/
|
|
53
|
+
export function parseUrlSearchInput(input) {
|
|
54
|
+
const trimmed = input.trim();
|
|
55
|
+
if (!trimmed) {
|
|
56
|
+
return {};
|
|
57
|
+
}
|
|
58
|
+
const parsedRegex = parseRegexLiteral(trimmed);
|
|
59
|
+
if (parsedRegex) {
|
|
60
|
+
return { regex: parsedRegex };
|
|
61
|
+
}
|
|
62
|
+
return { search: trimmed };
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Normalise regex filter input from external callers.
|
|
66
|
+
*
|
|
67
|
+
* - If flags are provided, treat `regex` as the raw pattern.
|
|
68
|
+
* - If flags are omitted, accept either a raw pattern or `/pattern/flags` literal.
|
|
69
|
+
*/
|
|
70
|
+
export function normaliseRegexFilterInput(regex, flags) {
|
|
71
|
+
const providedFlags = flags ?? "";
|
|
72
|
+
if (providedFlags.length > 0) {
|
|
73
|
+
return validateRegexFilter(regex, providedFlags);
|
|
74
|
+
}
|
|
75
|
+
const literal = parseRegexLiteral(regex);
|
|
76
|
+
if (literal) {
|
|
77
|
+
return literal;
|
|
78
|
+
}
|
|
79
|
+
return validateRegexFilter(regex, "");
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=regex-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-filter.js","sourceRoot":"","sources":["../../src/shared/regex-filter.ts"],"names":[],"mappings":"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"}
|
package/dist/shared/types.d.ts
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
* Core types for procsi
|
|
3
3
|
*/
|
|
4
4
|
export type InterceptionType = "modified" | "mocked";
|
|
5
|
+
export type BodySearchTarget = "request" | "response" | "both";
|
|
6
|
+
export type ReplayInitiator = "mcp" | "tui";
|
|
7
|
+
export interface BodySearchOptions {
|
|
8
|
+
query: string;
|
|
9
|
+
target: BodySearchTarget;
|
|
10
|
+
}
|
|
5
11
|
export interface CapturedRequest {
|
|
6
12
|
id: string;
|
|
7
13
|
sessionId: string;
|
|
@@ -22,6 +28,8 @@ export interface CapturedRequest {
|
|
|
22
28
|
durationMs?: number;
|
|
23
29
|
interceptedBy?: string;
|
|
24
30
|
interceptionType?: InterceptionType;
|
|
31
|
+
replayedFromId?: string;
|
|
32
|
+
replayInitiator?: ReplayInitiator;
|
|
25
33
|
saved?: boolean;
|
|
26
34
|
}
|
|
27
35
|
/**
|
|
@@ -46,6 +54,8 @@ export interface CapturedRequestSummary {
|
|
|
46
54
|
responseBodySize: number;
|
|
47
55
|
interceptedBy?: string;
|
|
48
56
|
interceptionType?: InterceptionType;
|
|
57
|
+
replayedFromId?: string;
|
|
58
|
+
replayInitiator?: ReplayInitiator;
|
|
49
59
|
saved?: boolean;
|
|
50
60
|
}
|
|
51
61
|
export interface Session {
|
|
@@ -70,6 +80,8 @@ export interface RequestFilter {
|
|
|
70
80
|
methods?: string[];
|
|
71
81
|
statusRange?: string;
|
|
72
82
|
search?: string;
|
|
83
|
+
regex?: string;
|
|
84
|
+
regexFlags?: string;
|
|
73
85
|
host?: string;
|
|
74
86
|
pathPrefix?: string;
|
|
75
87
|
since?: number;
|
|
@@ -121,6 +133,7 @@ export interface ProcsiClient {
|
|
|
121
133
|
getRequest(id: string): Promise<CapturedRequest | null>;
|
|
122
134
|
searchBodies(options: {
|
|
123
135
|
query: string;
|
|
136
|
+
target?: BodySearchTarget;
|
|
124
137
|
filter?: RequestFilter;
|
|
125
138
|
limit?: number;
|
|
126
139
|
}): Promise<CapturedRequestSummary[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/skills/procsi/SKILL.md
CHANGED
|
@@ -39,9 +39,9 @@ Always call `procsi_get_status` first to confirm the daemon is running. If it is
|
|
|
39
39
|
| Tool | Purpose | Key Parameters |
|
|
40
40
|
|------|---------|----------------|
|
|
41
41
|
| `procsi_get_status` | Check daemon is running, get proxy port and request count | -- |
|
|
42
|
-
| `procsi_list_requests` | Browse/filter captured traffic (returns summaries) | `method`, `status_range`, `search`, `host`, `path`, `source`, `header_name`, `header_value`, `header_target`, `intercepted_by`, `since`, `before`, `limit`, `offset`, `format` |
|
|
42
|
+
| `procsi_list_requests` | Browse/filter captured traffic (returns summaries) | `method`, `status_range`, `search`, `regex`, `host`, `path`, `saved`, `source`, `header_name`, `header_value`, `header_target`, `intercepted_by`, `since`, `before`, `limit`, `offset`, `format` |
|
|
43
43
|
| `procsi_get_request` | Full request details -- headers, bodies, timing | `id` (single or comma-separated IDs), `format` |
|
|
44
|
-
| `procsi_search_bodies` | Full-text search in request/response bodies | `query`, `
|
|
44
|
+
| `procsi_search_bodies` | Full-text search in request/response bodies | `query`, `target` (`request`/`response`/`both`), plus all request filter params (`regex`, `saved`, `source`, etc.) |
|
|
45
45
|
| `procsi_query_json` | Extract JSON values with JSONPath (SQLite `json_extract`) | `json_path`, `value`, `target` (`request`/`response`/`both`), `source`, plus filters |
|
|
46
46
|
| `procsi_count_requests` | Count matching requests | All filter params (incl. `source`), `format` |
|
|
47
47
|
| `procsi_clear_requests` | Delete all captured traffic (irreversible) | -- |
|
|
@@ -69,12 +69,16 @@ host: ".api.example.com" # Suffix match (note leading dot)
|
|
|
69
69
|
host: "api.example.com" # Exact match
|
|
70
70
|
path: "/api/v2" # Path prefix match
|
|
71
71
|
search: "api/users" # URL substring match
|
|
72
|
+
regex: "users/\\d+$" # URL regex match
|
|
73
|
+
saved: true # Only saved/bookmarked requests
|
|
72
74
|
header_name: "authorization" # Requests with this header
|
|
73
75
|
header_name: "content-type", header_value: "application/json" # Exact header match
|
|
74
76
|
header_target: "request" # Only search request headers
|
|
75
77
|
intercepted_by: "my-mock" # Requests handled by a specific interceptor
|
|
76
78
|
source: "node" # Filter by request source
|
|
77
79
|
since: "2024-01-15T10:30:00Z" # Time-bounded queries
|
|
80
|
+
# procsi_search_bodies only:
|
|
81
|
+
target: "request" # Search request body only (or "response" / "both")
|
|
78
82
|
```
|
|
79
83
|
|
|
80
84
|
Filters can be combined freely. All are optional.
|
|
@@ -199,7 +203,7 @@ Calls `ctx.forward()` and returns the response unchanged. Useful for debugging.
|
|
|
199
203
|
ctx.procsi.countRequests(filter?) // Promise<number>
|
|
200
204
|
ctx.procsi.listRequests({ filter, limit, offset }) // Promise<CapturedRequestSummary[]>
|
|
201
205
|
ctx.procsi.getRequest(id) // Promise<CapturedRequest | null>
|
|
202
|
-
ctx.procsi.searchBodies({ query, filter, limit }) // Promise<CapturedRequestSummary[]>
|
|
206
|
+
ctx.procsi.searchBodies({ query, target, filter, limit }) // Promise<CapturedRequestSummary[]>
|
|
203
207
|
ctx.procsi.queryJsonBodies({ jsonPath, filter }) // Promise<JsonQueryResult[]>
|
|
204
208
|
```
|
|
205
209
|
|
|
@@ -220,7 +224,8 @@ This allows interceptors to make decisions based on previously captured traffic.
|
|
|
220
224
|
## Tips
|
|
221
225
|
|
|
222
226
|
- After writing an interceptor, always `procsi_reload_interceptors` then `procsi_list_interceptors` to verify it loaded without errors
|
|
223
|
-
-
|
|
227
|
+
- Use `search` for URL substring matching, or `regex` for full JavaScript regex URL matching (e.g. `users/\\d+$`)
|
|
228
|
+
- `procsi_search_bodies` supports `target: "request" | "response" | "both"` (default `both`)
|
|
224
229
|
- `procsi_query_json` uses SQLite `json_extract` syntax (e.g. `$.user.name`, `$.items[0].id`)
|
|
225
230
|
- Use `limit` and `offset` for pagination when there are many results (default limit: 50, max: 500)
|
|
226
231
|
- `procsi_get_request` accepts comma-separated IDs for batch fetching (e.g. `id: "id1,id2,id3"`)
|