procsi 0.2.7 → 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 +341 -214
- package/dist/cli/commands/completions.d.ts +9 -0
- package/dist/cli/commands/completions.d.ts.map +1 -0
- package/dist/cli/commands/completions.js +170 -0
- package/dist/cli/commands/completions.js.map +1 -0
- package/dist/cli/commands/helpers.d.ts +9 -0
- package/dist/cli/commands/helpers.d.ts.map +1 -1
- package/dist/cli/commands/helpers.js +19 -1
- package/dist/cli/commands/helpers.js.map +1 -1
- package/dist/cli/commands/interceptors.d.ts.map +1 -1
- package/dist/cli/commands/interceptors.js +142 -0
- package/dist/cli/commands/interceptors.js.map +1 -1
- 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 +6 -0
- package/dist/cli/commands/request.d.ts.map +1 -0
- package/dist/cli/commands/request.js +216 -0
- package/dist/cli/commands/request.js.map +1 -0
- package/dist/cli/commands/requests.d.ts +6 -0
- package/dist/cli/commands/requests.d.ts.map +1 -0
- package/dist/cli/commands/requests.js +290 -0
- package/dist/cli/commands/requests.js.map +1 -0
- package/dist/cli/commands/sessions.d.ts +6 -0
- package/dist/cli/commands/sessions.d.ts.map +1 -0
- package/dist/cli/commands/sessions.js +39 -0
- package/dist/cli/commands/sessions.js.map +1 -0
- package/dist/cli/formatters/colour.d.ts +17 -0
- package/dist/cli/formatters/colour.d.ts.map +1 -0
- package/dist/cli/formatters/colour.js +23 -0
- package/dist/cli/formatters/colour.js.map +1 -0
- package/dist/cli/formatters/detail.d.ts +17 -0
- package/dist/cli/formatters/detail.d.ts.map +1 -0
- package/dist/cli/formatters/detail.js +135 -0
- package/dist/cli/formatters/detail.js.map +1 -0
- package/dist/cli/formatters/hints.d.ts +17 -0
- package/dist/cli/formatters/hints.d.ts.map +1 -0
- package/dist/cli/formatters/hints.js +29 -0
- package/dist/cli/formatters/hints.js.map +1 -0
- package/dist/cli/formatters/table.d.ts +17 -0
- package/dist/cli/formatters/table.d.ts.map +1 -0
- package/dist/cli/formatters/table.js +85 -0
- package/dist/cli/formatters/table.js.map +1 -0
- package/dist/cli/index.js +8 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/tui/App.d.ts.map +1 -1
- package/dist/cli/tui/App.js +67 -6
- 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/EventFilterBar.d.ts +27 -0
- package/dist/cli/tui/components/EventFilterBar.d.ts.map +1 -0
- package/dist/cli/tui/components/EventFilterBar.js +145 -0
- package/dist/cli/tui/components/EventFilterBar.js.map +1 -0
- 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 +3 -0
- package/dist/cli/tui/components/HelpModal.js.map +1 -1
- package/dist/cli/tui/components/InfoBar.d.ts +15 -0
- package/dist/cli/tui/components/InfoBar.d.ts.map +1 -0
- package/dist/cli/tui/components/InfoBar.js +45 -0
- package/dist/cli/tui/components/InfoBar.js.map +1 -0
- package/dist/cli/tui/components/InterceptorLogModal.d.ts +16 -0
- package/dist/cli/tui/components/InterceptorLogModal.d.ts.map +1 -0
- package/dist/cli/tui/components/InterceptorLogModal.js +229 -0
- package/dist/cli/tui/components/InterceptorLogModal.js.map +1 -0
- 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 +7 -2
- package/dist/cli/tui/components/StatusBar.d.ts.map +1 -1
- package/dist/cli/tui/components/StatusBar.js +13 -6
- package/dist/cli/tui/components/StatusBar.js.map +1 -1
- package/dist/cli/tui/hooks/useInterceptorEvents.d.ts +33 -0
- package/dist/cli/tui/hooks/useInterceptorEvents.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useInterceptorEvents.js +88 -0
- package/dist/cli/tui/hooks/useInterceptorEvents.js.map +1 -0
- 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/cli/utils/parse-time.d.ts +22 -0
- package/dist/cli/utils/parse-time.d.ts.map +1 -0
- package/dist/cli/utils/parse-time.js +160 -0
- package/dist/cli/utils/parse-time.js.map +1 -0
- package/dist/daemon/control.d.ts +2 -0
- package/dist/daemon/control.d.ts.map +1 -1
- package/dist/daemon/control.js +64 -2
- package/dist/daemon/control.js.map +1 -1
- package/dist/daemon/index.js +6 -1
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/interceptor-event-log.d.ts +37 -0
- package/dist/daemon/interceptor-event-log.d.ts.map +1 -0
- package/dist/daemon/interceptor-event-log.js +163 -0
- package/dist/daemon/interceptor-event-log.js.map +1 -0
- package/dist/daemon/interceptor-loader.d.ts +3 -0
- package/dist/daemon/interceptor-loader.d.ts.map +1 -1
- package/dist/daemon/interceptor-loader.js +34 -2
- package/dist/daemon/interceptor-loader.js.map +1 -1
- package/dist/daemon/interceptor-runner.d.ts +3 -0
- package/dist/daemon/interceptor-runner.d.ts.map +1 -1
- package/dist/daemon/interceptor-runner.js +112 -8
- package/dist/daemon/interceptor-runner.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 +116 -3
- 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 +36 -3
- package/dist/shared/control-client.d.ts.map +1 -1
- package/dist/shared/control-client.js +27 -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 +24 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/package.json +2 -1
- package/skills/procsi/SKILL.md +5 -4
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Full-screen modal for viewing interceptor runtime events.
|
|
3
|
+
* Shows a reverse-chronological, scrollable, filterable event log.
|
|
4
|
+
* Replaces the main TUI when active (terminals don't support true overlays).
|
|
5
|
+
*/
|
|
6
|
+
import React from "react";
|
|
7
|
+
import type { InterceptorEvent } from "../../../shared/types.js";
|
|
8
|
+
export interface InterceptorLogModalProps {
|
|
9
|
+
events: InterceptorEvent[];
|
|
10
|
+
width: number;
|
|
11
|
+
height: number;
|
|
12
|
+
onClose: () => void;
|
|
13
|
+
isActive?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function InterceptorLogModal({ events, width, height, onClose, isActive, }: InterceptorLogModalProps): React.ReactElement;
|
|
16
|
+
//# sourceMappingURL=InterceptorLogModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InterceptorLogModal.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/InterceptorLogModal.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAiD,MAAM,OAAO,CAAC;AAEtE,OAAO,KAAK,EAAE,gBAAgB,EAAyB,MAAM,0BAA0B,CAAC;AAYxF,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAkGD,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,QAAe,GAChB,EAAE,wBAAwB,GAAG,KAAK,CAAC,YAAY,CAoM/C"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Full-screen modal for viewing interceptor runtime events.
|
|
4
|
+
* Shows a reverse-chronological, scrollable, filterable event log.
|
|
5
|
+
* Replaces the main TUI when active (terminals don't support true overlays).
|
|
6
|
+
*/
|
|
7
|
+
import React, { useState, useMemo, useCallback, useRef } from "react";
|
|
8
|
+
import { Box, Text, useInput } from "ink";
|
|
9
|
+
import { HintContent } from "./HintContent.js";
|
|
10
|
+
import { EventFilterBar } from "./EventFilterBar.js";
|
|
11
|
+
const LOG_MODAL_HINTS = [
|
|
12
|
+
{ key: "j/k", action: "nav" },
|
|
13
|
+
{ key: "^u/^d", action: "half-page" },
|
|
14
|
+
{ key: "g/G", action: "top/bottom" },
|
|
15
|
+
{ key: "/", action: "filter" },
|
|
16
|
+
{ key: "q/Esc", action: "close" },
|
|
17
|
+
];
|
|
18
|
+
/** Rows reserved for header (title + info + divider) */
|
|
19
|
+
const HEADER_ROWS = 3;
|
|
20
|
+
/** Rows reserved for footer (divider + hint bar + bottom border) */
|
|
21
|
+
const FOOTER_ROWS = 3;
|
|
22
|
+
/** Rows consumed by the filter bar when open */
|
|
23
|
+
const FILTER_BAR_ROWS = 2;
|
|
24
|
+
/**
|
|
25
|
+
* Format a timestamp as HH:MM:SS.
|
|
26
|
+
*/
|
|
27
|
+
function formatTime(timestamp) {
|
|
28
|
+
const d = new Date(timestamp);
|
|
29
|
+
const hh = String(d.getHours()).padStart(2, "0");
|
|
30
|
+
const mm = String(d.getMinutes()).padStart(2, "0");
|
|
31
|
+
const ss = String(d.getSeconds()).padStart(2, "0");
|
|
32
|
+
return `${hh}:${mm}:${ss}`;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get the display colour for a given event level.
|
|
36
|
+
*/
|
|
37
|
+
function levelColour(level) {
|
|
38
|
+
switch (level) {
|
|
39
|
+
case "error":
|
|
40
|
+
return "red";
|
|
41
|
+
case "warn":
|
|
42
|
+
return "yellow";
|
|
43
|
+
case "info":
|
|
44
|
+
return undefined; // dim instead
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get a human label for the current filter state (shown in the header).
|
|
49
|
+
*/
|
|
50
|
+
function filterSummary(filter) {
|
|
51
|
+
const parts = [];
|
|
52
|
+
if (filter.level === "error")
|
|
53
|
+
parts.push("errors");
|
|
54
|
+
else if (filter.level === "warn")
|
|
55
|
+
parts.push("warn+");
|
|
56
|
+
else
|
|
57
|
+
parts.push("all");
|
|
58
|
+
if (filter.interceptor)
|
|
59
|
+
parts.push(filter.interceptor);
|
|
60
|
+
if (filter.search)
|
|
61
|
+
parts.push(`"${filter.search}"`);
|
|
62
|
+
return parts.join(" ");
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Check whether an event passes the combined filter.
|
|
66
|
+
*/
|
|
67
|
+
function passesFilter(event, filter) {
|
|
68
|
+
// Level filter
|
|
69
|
+
if (filter.level === "error" && event.level !== "error")
|
|
70
|
+
return false;
|
|
71
|
+
if (filter.level === "warn" && event.level !== "warn" && event.level !== "error")
|
|
72
|
+
return false;
|
|
73
|
+
// Interceptor filter
|
|
74
|
+
if (filter.interceptor && event.interceptor !== filter.interceptor)
|
|
75
|
+
return false;
|
|
76
|
+
// Search filter — case-insensitive substring match on message
|
|
77
|
+
if (filter.search) {
|
|
78
|
+
const needle = filter.search.toLowerCase();
|
|
79
|
+
if (!event.message.toLowerCase().includes(needle))
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Build display lines for a single event.
|
|
86
|
+
* Returns one or more lines: the main line and optionally multiple error detail lines
|
|
87
|
+
* (e.g. stack trace frames).
|
|
88
|
+
*/
|
|
89
|
+
function eventLines(event, maxWidth) {
|
|
90
|
+
const time = formatTime(event.timestamp);
|
|
91
|
+
const level = event.level.toUpperCase().padEnd(5);
|
|
92
|
+
const prefix = `[${time}] [${level}] [${event.interceptor}] `;
|
|
93
|
+
const remaining = Math.max(0, maxWidth - prefix.length);
|
|
94
|
+
const message = event.message.length > remaining
|
|
95
|
+
? event.message.slice(0, remaining - 1) + "\u2026"
|
|
96
|
+
: event.message;
|
|
97
|
+
const main = `${prefix}${message}`;
|
|
98
|
+
const details = [];
|
|
99
|
+
if (event.error) {
|
|
100
|
+
const indent = " ";
|
|
101
|
+
const errorRemaining = Math.max(0, maxWidth - indent.length);
|
|
102
|
+
const errorLines = event.error.split("\n");
|
|
103
|
+
for (const line of errorLines) {
|
|
104
|
+
const trimmed = line.length > errorRemaining
|
|
105
|
+
? line.slice(0, errorRemaining - 1) + "\u2026"
|
|
106
|
+
: line;
|
|
107
|
+
details.push(`${indent}${trimmed}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return { main, details };
|
|
111
|
+
}
|
|
112
|
+
export function InterceptorLogModal({ events, width, height, onClose, isActive = true, }) {
|
|
113
|
+
const [scrollOffset, setScrollOffset] = useState(0);
|
|
114
|
+
const [filter, setFilter] = useState({});
|
|
115
|
+
const [showFilter, setShowFilter] = useState(false);
|
|
116
|
+
// Stores the filter state when the filter bar opens, so Escape can revert
|
|
117
|
+
const preOpenFilterRef = useRef({});
|
|
118
|
+
// Refs to avoid stale closures in useInput callback
|
|
119
|
+
const maxScrollOffsetRef = useRef(0);
|
|
120
|
+
const availableHeightRef = useRef(0);
|
|
121
|
+
// Unique interceptor names across all events (not just filtered ones)
|
|
122
|
+
const interceptorNames = useMemo(() => {
|
|
123
|
+
const names = new Set();
|
|
124
|
+
for (const event of events) {
|
|
125
|
+
names.add(event.interceptor);
|
|
126
|
+
}
|
|
127
|
+
return [...names].sort();
|
|
128
|
+
}, [events]);
|
|
129
|
+
// Filter events, then reverse to newest-first
|
|
130
|
+
const filteredEvents = useMemo(() => {
|
|
131
|
+
const filtered = events.filter((e) => passesFilter(e, filter));
|
|
132
|
+
return [...filtered].reverse();
|
|
133
|
+
}, [events, filter]);
|
|
134
|
+
// Build all display rows (each event may produce 1+ rows)
|
|
135
|
+
const contentWidth = width - 4; // padding + borders
|
|
136
|
+
const displayRows = useMemo(() => {
|
|
137
|
+
const rows = [];
|
|
138
|
+
for (const event of filteredEvents) {
|
|
139
|
+
const { main, details } = eventLines(event, contentWidth);
|
|
140
|
+
rows.push({ event, text: main, isDetail: false, key: `${event.seq}-m` });
|
|
141
|
+
for (let i = 0; i < details.length; i++) {
|
|
142
|
+
rows.push({ event, text: details[i] ?? "", isDetail: true, key: `${event.seq}-d${i}` });
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return rows;
|
|
146
|
+
}, [filteredEvents, contentWidth]);
|
|
147
|
+
const filterBarHeight = showFilter ? FILTER_BAR_ROWS : 0;
|
|
148
|
+
const availableHeight = height - HEADER_ROWS - FOOTER_ROWS - filterBarHeight;
|
|
149
|
+
const maxScrollOffset = Math.max(0, displayRows.length - availableHeight);
|
|
150
|
+
// Sync refs for useInput callback to avoid stale closures
|
|
151
|
+
maxScrollOffsetRef.current = maxScrollOffset;
|
|
152
|
+
availableHeightRef.current = availableHeight;
|
|
153
|
+
const handleFilterChange = useCallback((newFilter) => {
|
|
154
|
+
setFilter(newFilter);
|
|
155
|
+
setScrollOffset(0);
|
|
156
|
+
}, []);
|
|
157
|
+
const handleFilterCancel = useCallback(() => {
|
|
158
|
+
setFilter(preOpenFilterRef.current);
|
|
159
|
+
setScrollOffset(0);
|
|
160
|
+
setShowFilter(false);
|
|
161
|
+
}, []);
|
|
162
|
+
useInput((input, key) => {
|
|
163
|
+
if (key.escape || input === "q") {
|
|
164
|
+
onClose();
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
if (input === "/") {
|
|
168
|
+
preOpenFilterRef.current = filter;
|
|
169
|
+
setShowFilter(true);
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
if (input === "j" || key.downArrow) {
|
|
173
|
+
setScrollOffset((prev) => Math.min(prev + 1, maxScrollOffsetRef.current));
|
|
174
|
+
}
|
|
175
|
+
else if (input === "k" || key.upArrow) {
|
|
176
|
+
setScrollOffset((prev) => Math.max(prev - 1, 0));
|
|
177
|
+
}
|
|
178
|
+
else if (input === "d" && key.ctrl) {
|
|
179
|
+
const halfPage = Math.floor(availableHeightRef.current / 2);
|
|
180
|
+
setScrollOffset((prev) => Math.min(prev + halfPage, maxScrollOffsetRef.current));
|
|
181
|
+
}
|
|
182
|
+
else if (input === "u" && key.ctrl) {
|
|
183
|
+
const halfPage = Math.floor(availableHeightRef.current / 2);
|
|
184
|
+
setScrollOffset((prev) => Math.max(prev - halfPage, 0));
|
|
185
|
+
}
|
|
186
|
+
else if (input === "g" && !key.shift) {
|
|
187
|
+
setScrollOffset(0);
|
|
188
|
+
}
|
|
189
|
+
else if (input === "G") {
|
|
190
|
+
setScrollOffset(maxScrollOffsetRef.current);
|
|
191
|
+
}
|
|
192
|
+
}, { isActive: isActive && !showFilter });
|
|
193
|
+
// Header border
|
|
194
|
+
const titlePart = " Interceptor Log ";
|
|
195
|
+
const filterPart = ` ${filterSummary(filter)} `;
|
|
196
|
+
const countPart = ` ${filteredEvents.length} event${filteredEvents.length === 1 ? "" : "s"} `;
|
|
197
|
+
const headerBorderWidth = width - titlePart.length - filterPart.length - countPart.length - 4;
|
|
198
|
+
const headerBorder = `\u250C\u2500${titlePart}${"\u2500".repeat(Math.max(0, headerBorderWidth))}${countPart}${filterPart}\u2500\u2510`;
|
|
199
|
+
// Divider
|
|
200
|
+
const divider = `\u251C${"\u2500".repeat(width - 2)}\u2524`;
|
|
201
|
+
// Footer border
|
|
202
|
+
const footerBorder = `\u2514${"\u2500".repeat(width - 2)}\u2518`;
|
|
203
|
+
// Visible rows
|
|
204
|
+
const visibleSlice = displayRows.slice(scrollOffset, scrollOffset + availableHeight);
|
|
205
|
+
// Empty state
|
|
206
|
+
if (filteredEvents.length === 0) {
|
|
207
|
+
const hasActiveFilter = filter.level !== undefined || filter.interceptor !== undefined || (filter.search !== undefined && filter.search.length > 0);
|
|
208
|
+
return (_jsxs(Box, { flexDirection: "column", width: width, height: height, children: [_jsx(Text, { color: "cyan", children: headerBorder }), _jsx(Box, { paddingX: 1, height: 1, children: _jsx(Text, { dimColor: true, children: hasActiveFilter
|
|
209
|
+
? `No matching events | Press / to change filter`
|
|
210
|
+
: "Waiting for interceptor events..." }) }), _jsx(Text, { color: "cyan", children: divider }), showFilter && (_jsx(EventFilterBar, { isActive: isActive, filter: filter, onFilterChange: handleFilterChange, onClose: () => setShowFilter(false), onCancel: handleFilterCancel, interceptorNames: interceptorNames, width: width })), _jsx(Box, { flexDirection: "column", flexGrow: 1, alignItems: "center", justifyContent: "center", children: _jsx(Text, { dimColor: true, children: "No interceptor events" }) }), _jsx(Text, { color: "cyan", children: divider }), _jsx(Box, { paddingX: 1, height: 1, children: _jsx(HintContent, { hints: LOG_MODAL_HINTS, availableWidth: width - 4 }) }), _jsx(Text, { color: "cyan", children: footerBorder })] }));
|
|
211
|
+
}
|
|
212
|
+
return (_jsxs(Box, { flexDirection: "column", width: width, height: height, children: [_jsx(Text, { color: "cyan", children: headerBorder }), _jsx(Box, { paddingX: 1, height: 1, children: _jsx(Text, { dimColor: true, children: displayRows.length > availableHeight
|
|
213
|
+
? `Showing ${scrollOffset + 1}\u2013${Math.min(scrollOffset + availableHeight, displayRows.length)} of ${displayRows.length} rows`
|
|
214
|
+
: `${displayRows.length} row${displayRows.length === 1 ? "" : "s"}` }) }), _jsx(Text, { color: "cyan", children: divider }), showFilter && (_jsx(EventFilterBar, { isActive: isActive, filter: filter, onFilterChange: handleFilterChange, onClose: () => setShowFilter(false), onCancel: handleFilterCancel, interceptorNames: interceptorNames, width: width })), _jsxs(Box, { flexDirection: "column", flexGrow: 1, paddingX: 1, children: [visibleSlice.map((row) => (_jsx(EventRow, { text: row.text, level: row.event.level, isDetail: row.isDetail }, row.key))), visibleSlice.length < availableHeight && _jsx(Box, { flexGrow: 1 })] }), _jsx(Text, { color: "cyan", children: divider }), _jsx(Box, { paddingX: 1, height: 1, children: _jsx(HintContent, { hints: LOG_MODAL_HINTS, availableWidth: width - 4 }) }), _jsx(Text, { color: "cyan", children: footerBorder })] }));
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Single row in the event log. Memoised to avoid re-renders in the list.
|
|
218
|
+
*/
|
|
219
|
+
const EventRow = React.memo(function EventRow({ text, level, isDetail, }) {
|
|
220
|
+
const colour = levelColour(level);
|
|
221
|
+
if (isDetail) {
|
|
222
|
+
return _jsx(Text, { color: "red", dimColor: true, children: text });
|
|
223
|
+
}
|
|
224
|
+
if (level === "info") {
|
|
225
|
+
return _jsx(Text, { dimColor: true, children: text });
|
|
226
|
+
}
|
|
227
|
+
return _jsx(Text, { color: colour, children: text });
|
|
228
|
+
});
|
|
229
|
+
//# sourceMappingURL=InterceptorLogModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InterceptorLogModal.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/InterceptorLogModal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RequestListItem.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/RequestListItem.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAuB,MAAM,OAAO,CAAC;AAG5C,OAAO,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAGzF;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,CAAC,EAAE,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CASnG;AAED,UAAU,oBAAoB;IAC5B,OAAO,EAAE,sBAAsB,CAAC;IAChC,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAclE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAWrE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAetD;AA8BD,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"RequestListItem.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/RequestListItem.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAuB,MAAM,OAAO,CAAC;AAG5C,OAAO,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAGzF;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,CAAC,EAAE,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CASnG;AAED,UAAU,oBAAoB;IAC5B,OAAO,EAAE,sBAAsB,CAAC;IAChC,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAclE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAWrE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAetD;AA8BD,eAAO,MAAM,eAAe,kDAsE1B,CAAC"}
|
|
@@ -116,8 +116,9 @@ export const RequestListItem = memo(function RequestListItem({ request, isSelect
|
|
|
116
116
|
const statusText = request.responseStatus?.toString() ?? "...";
|
|
117
117
|
const statusIndicator = getStatusIndicator(request.responseStatus);
|
|
118
118
|
const duration = formatDuration(request.durationMs);
|
|
119
|
-
const
|
|
120
|
-
const
|
|
119
|
+
const savedChar = request.saved ? "*" : " ";
|
|
120
|
+
const indicator = isSelected ? `❯${savedChar}` : ` ${savedChar}`;
|
|
121
|
+
const indicatorColour = isSelected ? "cyan" : request.saved ? "yellow" : undefined;
|
|
121
122
|
const interception = getInterceptionIndicator(request.interceptionType);
|
|
122
123
|
return (_jsx(Box, { ref: ref, width: width, children: _jsxs(Text, { wrap: "truncate", children: [_jsx(Text, { color: indicatorColour, children: indicator }), _jsx(Text, { color: interception.colour, children: interception.text }), _jsx(Text, { color: getMethodColour(request.method), children: formatMethod(request.method) }), _jsx(Text, { children: " " }), _jsxs(Text, { color: getStatusColour(request.responseStatus), children: [statusIndicator, statusText.padStart(3)] }), _jsx(Text, { children: " " }), searchTerm ? (_jsx(Text, { dimColor: !isSelected, children: splitByMatch(paddedPath, searchTerm).map((seg, i) => seg.isMatch ? (_jsx(Text, { color: "yellow", bold: true, children: seg.text }, i)) : (_jsx(Text, { children: seg.text }, i))) })) : (_jsx(Text, { dimColor: !isSelected, children: paddedPath })), _jsx(Text, { dimColor: true, children: duration.padStart(durationWidth) })] }) }));
|
|
123
124
|
}, (prevProps, nextProps) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RequestListItem.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/RequestListItem.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"RequestListItem.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/RequestListItem.tsx"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ interface StatusBarContext {
|
|
|
10
10
|
hasRequests: boolean;
|
|
11
11
|
onBodySection: boolean;
|
|
12
12
|
onViewableBodySection: boolean;
|
|
13
|
+
hasEvents: boolean;
|
|
13
14
|
}
|
|
14
15
|
interface KeyHint extends HintItem {
|
|
15
16
|
visible?: (ctx: StatusBarContext) => boolean;
|
|
@@ -26,6 +27,10 @@ export interface StatusBarProps {
|
|
|
26
27
|
onViewableBodySection?: boolean;
|
|
27
28
|
/** Number of active interceptors; shown as a badge when > 0. */
|
|
28
29
|
interceptorCount?: number;
|
|
30
|
+
/** Number of interceptor error events; shown as a red badge when > 0. */
|
|
31
|
+
interceptorErrorCount?: number;
|
|
32
|
+
/** Whether any interceptor events exist (gates L hint visibility). */
|
|
33
|
+
hasEvents?: boolean;
|
|
29
34
|
/** Terminal width in columns — used to constrain the hint bar. */
|
|
30
35
|
width?: number;
|
|
31
36
|
}
|
|
@@ -33,7 +38,7 @@ export interface StatusBarProps {
|
|
|
33
38
|
* Returns hints visible for the given context. All new props default to true
|
|
34
39
|
* so the component remains backwards-compatible when no context is passed.
|
|
35
40
|
*/
|
|
36
|
-
export declare function getVisibleHints({ activePanel, hasSelection, hasRequests, onBodySection, onViewableBodySection, }: Pick<StatusBarProps, "activePanel" | "hasSelection" | "hasRequests" | "onBodySection" | "onViewableBodySection">): KeyHint[];
|
|
37
|
-
export declare function StatusBar({ message, filterActive, filterOpen, activePanel, hasSelection, hasRequests, onBodySection, onViewableBodySection, interceptorCount, width, }: StatusBarProps): React.ReactElement;
|
|
41
|
+
export declare function getVisibleHints({ activePanel, hasSelection, hasRequests, onBodySection, onViewableBodySection, hasEvents, }: Pick<StatusBarProps, "activePanel" | "hasSelection" | "hasRequests" | "onBodySection" | "onViewableBodySection" | "hasEvents">): KeyHint[];
|
|
42
|
+
export declare function StatusBar({ message, filterActive, filterOpen, activePanel, hasSelection, hasRequests, onBodySection, onViewableBodySection, interceptorCount, interceptorErrorCount, hasEvents, width, }: StatusBarProps): React.ReactElement;
|
|
38
43
|
export {};
|
|
39
44
|
//# sourceMappingURL=StatusBar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/StatusBar.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE9D,UAAU,gBAAgB;IACxB,WAAW,EAAE,MAAM,GAAG,WAAW,CAAC;IAClC,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,qBAAqB,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/components/StatusBar.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE9D,UAAU,gBAAgB;IACxB,WAAW,EAAE,MAAM,GAAG,WAAW,CAAC;IAClC,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,OAAQ,SAAQ,QAAQ;IAChC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC;CAC9C;AAsBD,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,+FAA+F;IAC/F,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IACnC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,gEAAgE;IAChE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yEAAyE;IACzE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAC9B,WAAoB,EACpB,YAAmB,EACnB,WAAkB,EAClB,aAAoB,EACpB,qBAA6B,EAC7B,SAAiB,GAClB,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,GAAG,cAAc,GAAG,aAAa,GAAG,eAAe,GAAG,uBAAuB,GAAG,WAAW,CAAC,GAAG,OAAO,EAAE,CAG5I;AAKD,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,YAAY,EACZ,UAAU,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,EACrB,SAAS,EACT,KAAK,GACN,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,CAoErC"}
|
|
@@ -16,8 +16,11 @@ const KEY_HINTS = [
|
|
|
16
16
|
{ key: "H", action: "HAR", visible: (ctx) => ctx.hasRequests },
|
|
17
17
|
{ key: "y", action: "yank", visible: (ctx) => ctx.onBodySection },
|
|
18
18
|
{ key: "s", action: "export", visible: (ctx) => ctx.onBodySection },
|
|
19
|
+
{ key: "b", action: "bookmark", visible: (ctx) => ctx.hasSelection },
|
|
20
|
+
{ key: "x", action: "clear", visible: (ctx) => ctx.hasRequests },
|
|
19
21
|
{ key: "u", action: "URL" },
|
|
20
22
|
{ key: "/", action: "filter" },
|
|
23
|
+
{ key: "L", action: "events", visible: (ctx) => ctx.hasEvents },
|
|
21
24
|
{ key: "i", action: "info" },
|
|
22
25
|
{ key: "?", action: "help" },
|
|
23
26
|
{ key: "q", action: "quit" },
|
|
@@ -26,19 +29,23 @@ const KEY_HINTS = [
|
|
|
26
29
|
* Returns hints visible for the given context. All new props default to true
|
|
27
30
|
* so the component remains backwards-compatible when no context is passed.
|
|
28
31
|
*/
|
|
29
|
-
export function getVisibleHints({ activePanel = "list", hasSelection = true, hasRequests = true, onBodySection = true, onViewableBodySection = false, }) {
|
|
30
|
-
const ctx = { activePanel, hasSelection, hasRequests, onBodySection, onViewableBodySection };
|
|
32
|
+
export function getVisibleHints({ activePanel = "list", hasSelection = true, hasRequests = true, onBodySection = true, onViewableBodySection = false, hasEvents = false, }) {
|
|
33
|
+
const ctx = { activePanel, hasSelection, hasRequests, onBodySection, onViewableBodySection, hasEvents };
|
|
31
34
|
return KEY_HINTS.filter((hint) => !hint.visible || hint.visible(ctx));
|
|
32
35
|
}
|
|
33
36
|
const SEPARATOR_WIDTH = 3; // " │ "
|
|
34
37
|
const PADDING_WIDTH = 2; // paddingX={1} each side
|
|
35
|
-
export function StatusBar({ message, filterActive, filterOpen, activePanel, hasSelection, hasRequests, onBodySection, onViewableBodySection, interceptorCount, width, }) {
|
|
36
|
-
const visibleHints = useMemo(() => getVisibleHints({ activePanel, hasSelection, hasRequests, onBodySection, onViewableBodySection }), [activePanel, hasSelection, hasRequests, onBodySection, onViewableBodySection]);
|
|
38
|
+
export function StatusBar({ message, filterActive, filterOpen, activePanel, hasSelection, hasRequests, onBodySection, onViewableBodySection, interceptorCount, interceptorErrorCount, hasEvents, width, }) {
|
|
39
|
+
const visibleHints = useMemo(() => getVisibleHints({ activePanel, hasSelection, hasRequests, onBodySection, onViewableBodySection, hasEvents }), [activePanel, hasSelection, hasRequests, onBodySection, onViewableBodySection, hasEvents]);
|
|
37
40
|
// Calculate available width for hints, accounting for prefix badges
|
|
38
41
|
const hintsAvailableWidth = useMemo(() => {
|
|
39
42
|
if (!width)
|
|
40
43
|
return undefined;
|
|
41
44
|
let prefixWidth = 0;
|
|
45
|
+
if (interceptorErrorCount !== undefined && interceptorErrorCount > 0) {
|
|
46
|
+
const errorBadge = `[${interceptorErrorCount} error${interceptorErrorCount === 1 ? "" : "s"}]`;
|
|
47
|
+
prefixWidth += errorBadge.length + SEPARATOR_WIDTH;
|
|
48
|
+
}
|
|
42
49
|
if (interceptorCount !== undefined && interceptorCount > 0) {
|
|
43
50
|
const badge = `[${interceptorCount} interceptor${interceptorCount === 1 ? "" : "s"}]`;
|
|
44
51
|
prefixWidth += badge.length + SEPARATOR_WIDTH;
|
|
@@ -47,7 +54,7 @@ export function StatusBar({ message, filterActive, filterOpen, activePanel, hasS
|
|
|
47
54
|
prefixWidth += "[FILTERED]".length + SEPARATOR_WIDTH;
|
|
48
55
|
}
|
|
49
56
|
return width - PADDING_WIDTH - prefixWidth;
|
|
50
|
-
}, [width, interceptorCount, filterActive]);
|
|
51
|
-
return (_jsx(Box, { borderStyle: "single", borderTop: true, borderBottom: false, borderLeft: false, borderRight: false, paddingX: 1, height: 2, children: message ? (_jsx(Text, { color: "yellow", children: message })) : filterOpen ? (_jsxs(_Fragment, { children: [_jsx(Text, { color: "cyan", bold: true, children: "Esc" }), _jsx(Text, { dimColor: true, children: " close filter" })] })) : (_jsxs(Text, { children: [interceptorCount !== undefined && interceptorCount > 0 && (_jsxs(_Fragment, { children: [_jsxs(Text, { color: "magenta", bold: true, children: ["[", interceptorCount, " interceptor", interceptorCount === 1 ? "" : "s", "]"] }), _jsx(Text, { dimColor: true, children: " \u2502 " })] })), filterActive && (_jsxs(_Fragment, { children: [_jsx(Text, { color: "yellow", bold: true, children: "[FILTERED]" }), _jsx(Text, { dimColor: true, children: " \u2502 " })] })), _jsx(HintContent, { hints: visibleHints, availableWidth: hintsAvailableWidth })] })) }));
|
|
57
|
+
}, [width, interceptorCount, interceptorErrorCount, filterActive]);
|
|
58
|
+
return (_jsx(Box, { borderStyle: "single", borderTop: true, borderBottom: false, borderLeft: false, borderRight: false, paddingX: 1, height: 2, children: message ? (_jsx(Text, { color: "yellow", children: message })) : filterOpen ? (_jsxs(_Fragment, { children: [_jsx(Text, { color: "cyan", bold: true, children: "Esc" }), _jsx(Text, { dimColor: true, children: " close filter" })] })) : (_jsxs(Text, { children: [interceptorErrorCount !== undefined && interceptorErrorCount > 0 && (_jsxs(_Fragment, { children: [_jsxs(Text, { color: "red", bold: true, children: ["[", interceptorErrorCount, " error", interceptorErrorCount === 1 ? "" : "s", "]"] }), _jsx(Text, { dimColor: true, children: " \u2502 " })] })), interceptorCount !== undefined && interceptorCount > 0 && (_jsxs(_Fragment, { children: [_jsxs(Text, { color: "magenta", bold: true, children: ["[", interceptorCount, " interceptor", interceptorCount === 1 ? "" : "s", "]"] }), _jsx(Text, { dimColor: true, children: " \u2502 " })] })), filterActive && (_jsxs(_Fragment, { children: [_jsx(Text, { color: "yellow", bold: true, children: "[FILTERED]" }), _jsx(Text, { dimColor: true, children: " \u2502 " })] })), _jsx(HintContent, { hints: visibleHints, availableWidth: hintsAvailableWidth })] })) }));
|
|
52
59
|
}
|
|
53
60
|
//# sourceMappingURL=StatusBar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/StatusBar.tsx"],"names":[],"mappings":";AAAA;;;GAGG;AAEH,OAAc,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,WAAW,EAAiB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../../../src/cli/tui/components/StatusBar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook for polling interceptor runtime events from the daemon.
|
|
3
|
+
* Follows the same ControlClient pattern as useRequests.
|
|
4
|
+
*/
|
|
5
|
+
import type { InterceptorEvent } from "../../../shared/types.js";
|
|
6
|
+
interface UseInterceptorEventsOptions {
|
|
7
|
+
projectRoot?: string;
|
|
8
|
+
pollInterval?: number;
|
|
9
|
+
}
|
|
10
|
+
interface InterceptorEventCounts {
|
|
11
|
+
info: number;
|
|
12
|
+
warn: number;
|
|
13
|
+
error: number;
|
|
14
|
+
}
|
|
15
|
+
interface UseInterceptorEventsResult {
|
|
16
|
+
/** All accumulated interceptor events, ordered by seq. */
|
|
17
|
+
events: InterceptorEvent[];
|
|
18
|
+
/** Aggregate counts by level across all events. */
|
|
19
|
+
counts: InterceptorEventCounts;
|
|
20
|
+
/** Total event count across all levels. */
|
|
21
|
+
totalEventCount: number;
|
|
22
|
+
/** Number of currently loaded interceptors. */
|
|
23
|
+
interceptorCount: number;
|
|
24
|
+
/** Force a full re-fetch (resets lastSeenSeq). */
|
|
25
|
+
refresh: () => void;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Hook to poll for interceptor events from the daemon.
|
|
29
|
+
* Accumulates events using delta fetching via afterSeq.
|
|
30
|
+
*/
|
|
31
|
+
export declare function useInterceptorEvents(options?: UseInterceptorEventsOptions): UseInterceptorEventsResult;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=useInterceptorEvents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInterceptorEvents.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/hooks/useInterceptorEvents.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAMjE,UAAU,2BAA2B;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,sBAAsB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,0BAA0B;IAClC,0DAA0D;IAC1D,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,mDAAmD;IACnD,MAAM,EAAE,sBAAsB,CAAC;IAC/B,2CAA2C;IAC3C,eAAe,EAAE,MAAM,CAAC;IACxB,+CAA+C;IAC/C,gBAAgB,EAAE,MAAM,CAAC;IACzB,kDAAkD;IAClD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAID;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,GAAE,2BAAgC,GACxC,0BAA0B,CAuF5B"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook for polling interceptor runtime events from the daemon.
|
|
3
|
+
* Follows the same ControlClient pattern as useRequests.
|
|
4
|
+
*/
|
|
5
|
+
import { useState, useEffect, useCallback, useRef } from "react";
|
|
6
|
+
import { ControlClient } from "../../../shared/control-client.js";
|
|
7
|
+
import { findProjectRoot, getProcsiPaths } from "../../../shared/project.js";
|
|
8
|
+
const DEFAULT_POLL_INTERVAL_MS = 2000;
|
|
9
|
+
const EMPTY_COUNTS = { info: 0, warn: 0, error: 0 };
|
|
10
|
+
/**
|
|
11
|
+
* Hook to poll for interceptor events from the daemon.
|
|
12
|
+
* Accumulates events using delta fetching via afterSeq.
|
|
13
|
+
*/
|
|
14
|
+
export function useInterceptorEvents(options = {}) {
|
|
15
|
+
const { pollInterval = DEFAULT_POLL_INTERVAL_MS, projectRoot } = options;
|
|
16
|
+
const [events, setEvents] = useState([]);
|
|
17
|
+
const [counts, setCounts] = useState(EMPTY_COUNTS);
|
|
18
|
+
const [interceptorCount, setInterceptorCount] = useState(0);
|
|
19
|
+
const clientRef = useRef(null);
|
|
20
|
+
const lastSeenSeqRef = useRef(0);
|
|
21
|
+
// Initialise control client
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
const resolvedRoot = projectRoot ?? findProjectRoot();
|
|
24
|
+
if (!resolvedRoot) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const paths = getProcsiPaths(resolvedRoot);
|
|
28
|
+
clientRef.current = new ControlClient(paths.controlSocketFile);
|
|
29
|
+
return () => {
|
|
30
|
+
clientRef.current?.close();
|
|
31
|
+
};
|
|
32
|
+
}, [projectRoot]);
|
|
33
|
+
// Fetch new events since lastSeenSeq
|
|
34
|
+
const fetchEvents = useCallback(async () => {
|
|
35
|
+
const client = clientRef.current;
|
|
36
|
+
if (!client) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
const [result, status] = await Promise.all([
|
|
41
|
+
client.getInterceptorEvents({
|
|
42
|
+
afterSeq: lastSeenSeqRef.current,
|
|
43
|
+
}),
|
|
44
|
+
client.status(),
|
|
45
|
+
]);
|
|
46
|
+
if (result.events.length > 0) {
|
|
47
|
+
// Update lastSeenSeq to the highest seq we've seen
|
|
48
|
+
const lastEvent = result.events[result.events.length - 1];
|
|
49
|
+
if (lastEvent) {
|
|
50
|
+
lastSeenSeqRef.current = lastEvent.seq;
|
|
51
|
+
}
|
|
52
|
+
setEvents((prev) => [...prev, ...result.events]);
|
|
53
|
+
}
|
|
54
|
+
setCounts(result.counts);
|
|
55
|
+
setInterceptorCount(status.interceptorCount ?? 0);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Daemon may not be running or may not support interceptor events yet
|
|
59
|
+
}
|
|
60
|
+
}, []);
|
|
61
|
+
// Full refresh: reset accumulated state and re-fetch everything
|
|
62
|
+
const refresh = useCallback(() => {
|
|
63
|
+
lastSeenSeqRef.current = 0;
|
|
64
|
+
setEvents([]);
|
|
65
|
+
setCounts(EMPTY_COUNTS);
|
|
66
|
+
void fetchEvents();
|
|
67
|
+
}, [fetchEvents]);
|
|
68
|
+
// Initial fetch
|
|
69
|
+
useEffect(() => {
|
|
70
|
+
void fetchEvents();
|
|
71
|
+
}, [fetchEvents]);
|
|
72
|
+
// Polling
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
const interval = setInterval(() => {
|
|
75
|
+
void fetchEvents();
|
|
76
|
+
}, pollInterval);
|
|
77
|
+
return () => clearInterval(interval);
|
|
78
|
+
}, [fetchEvents, pollInterval]);
|
|
79
|
+
const totalEventCount = counts.info + counts.warn + counts.error;
|
|
80
|
+
return {
|
|
81
|
+
events,
|
|
82
|
+
counts,
|
|
83
|
+
totalEventCount,
|
|
84
|
+
interceptorCount,
|
|
85
|
+
refresh,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=useInterceptorEvents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInterceptorEvents.js","sourceRoot":"","sources":["../../../../src/cli/tui/hooks/useInterceptorEvents.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,10 @@ interface UseRequestsResult {
|
|
|
17
17
|
getFullRequest: (id: string) => Promise<CapturedRequest | null>;
|
|
18
18
|
/** Fetch all requests with full data (for exports) */
|
|
19
19
|
getAllFullRequests: () => Promise<CapturedRequest[]>;
|
|
20
|
+
/** Toggle the saved/bookmark state of a request */
|
|
21
|
+
toggleSaved: (id: string, currentlySaved: boolean) => Promise<boolean>;
|
|
22
|
+
/** Clear all unsaved requests */
|
|
23
|
+
clearRequests: () => Promise<boolean>;
|
|
20
24
|
}
|
|
21
25
|
/**
|
|
22
26
|
* Hook to fetch and poll for captured requests.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRequests.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/hooks/useRequests.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EACV,eAAe,EACf,sBAAsB,EACtB,aAAa,EACd,MAAM,0BAA0B,CAAC;AAOlC,UAAU,kBAAkB;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,iBAAiB;IACzB,qEAAqE;IACrE,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,qDAAqD;IACrD,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAChE,sDAAsD;IACtD,kBAAkB,EAAE,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"useRequests.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/hooks/useRequests.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EACV,eAAe,EACf,sBAAsB,EACtB,aAAa,EACd,MAAM,0BAA0B,CAAC;AAOlC,UAAU,kBAAkB;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,iBAAiB;IACzB,qEAAqE;IACrE,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,qDAAqD;IACrD,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAChE,sDAAsD;IACtD,kBAAkB,EAAE,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACrD,mDAAmD;IACnD,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvE,iCAAiC;IACjC,aAAa,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACvC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,iBAAiB,CAwK/E"}
|