@varveai/adit-cli 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/commands/cloud.d.ts +51 -0
- package/dist/commands/cloud.d.ts.map +1 -0
- package/dist/commands/cloud.js +430 -0
- package/dist/commands/cloud.js.map +1 -0
- package/dist/commands/config.d.ts +8 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +30 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/db.d.ts +17 -0
- package/dist/commands/db.d.ts.map +1 -0
- package/dist/commands/db.js +48 -0
- package/dist/commands/db.js.map +1 -0
- package/dist/commands/diff.d.ts +30 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +265 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/doctor.d.ts +15 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +265 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/export.d.ts +24 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +219 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/init.d.ts +12 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +137 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +20 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +110 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/perf.d.ts +19 -0
- package/dist/commands/perf.d.ts.map +1 -0
- package/dist/commands/perf.js +102 -0
- package/dist/commands/perf.js.map +1 -0
- package/dist/commands/plugin.d.ts +28 -0
- package/dist/commands/plugin.d.ts.map +1 -0
- package/dist/commands/plugin.js +516 -0
- package/dist/commands/plugin.js.map +1 -0
- package/dist/commands/project-link.d.ts +16 -0
- package/dist/commands/project-link.d.ts.map +1 -0
- package/dist/commands/project-link.js +143 -0
- package/dist/commands/project-link.js.map +1 -0
- package/dist/commands/resume.d.ts +28 -0
- package/dist/commands/resume.d.ts.map +1 -0
- package/dist/commands/resume.js +229 -0
- package/dist/commands/resume.js.map +1 -0
- package/dist/commands/revert.d.ts +30 -0
- package/dist/commands/revert.d.ts.map +1 -0
- package/dist/commands/revert.js +271 -0
- package/dist/commands/revert.js.map +1 -0
- package/dist/commands/search.d.ts +16 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +72 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/self-update.d.ts +12 -0
- package/dist/commands/self-update.d.ts.map +1 -0
- package/dist/commands/self-update.js +161 -0
- package/dist/commands/self-update.js.map +1 -0
- package/dist/commands/show.d.ts +5 -0
- package/dist/commands/show.d.ts.map +1 -0
- package/dist/commands/show.js +86 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/commands/status.d.ts +11 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +237 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/task.d.ts +18 -0
- package/dist/commands/task.d.ts.map +1 -0
- package/dist/commands/task.js +131 -0
- package/dist/commands/task.js.map +1 -0
- package/dist/commands/transcript.d.ts +40 -0
- package/dist/commands/transcript.d.ts.map +1 -0
- package/dist/commands/transcript.js +275 -0
- package/dist/commands/transcript.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +385 -0
- package/dist/index.js.map +1 -0
- package/dist/tui/App.d.ts +8 -0
- package/dist/tui/App.d.ts.map +1 -0
- package/dist/tui/App.js +132 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/components/DiffView.d.ts +11 -0
- package/dist/tui/components/DiffView.d.ts.map +1 -0
- package/dist/tui/components/DiffView.js +29 -0
- package/dist/tui/components/DiffView.js.map +1 -0
- package/dist/tui/components/EventDetail.d.ts +11 -0
- package/dist/tui/components/EventDetail.d.ts.map +1 -0
- package/dist/tui/components/EventDetail.js +36 -0
- package/dist/tui/components/EventDetail.js.map +1 -0
- package/dist/tui/components/EventList.d.ts +15 -0
- package/dist/tui/components/EventList.d.ts.map +1 -0
- package/dist/tui/components/EventList.js +77 -0
- package/dist/tui/components/EventList.js.map +1 -0
- package/dist/tui/components/FilterBar.d.ts +12 -0
- package/dist/tui/components/FilterBar.d.ts.map +1 -0
- package/dist/tui/components/FilterBar.js +20 -0
- package/dist/tui/components/FilterBar.js.map +1 -0
- package/dist/tui/components/StatusBar.d.ts +16 -0
- package/dist/tui/components/StatusBar.d.ts.map +1 -0
- package/dist/tui/components/StatusBar.js +13 -0
- package/dist/tui/components/StatusBar.js.map +1 -0
- package/dist/tui/hooks/useKeyboard.d.ts +22 -0
- package/dist/tui/hooks/useKeyboard.d.ts.map +1 -0
- package/dist/tui/hooks/useKeyboard.js +64 -0
- package/dist/tui/hooks/useKeyboard.js.map +1 -0
- package/dist/tui/hooks/useTimeline.d.ts +31 -0
- package/dist/tui/hooks/useTimeline.d.ts.map +1 -0
- package/dist/tui/hooks/useTimeline.js +136 -0
- package/dist/tui/hooks/useTimeline.js.map +1 -0
- package/dist/tui/index.d.ts +5 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +10 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/screens/DiffScreen.d.ts +12 -0
- package/dist/tui/screens/DiffScreen.d.ts.map +1 -0
- package/dist/tui/screens/DiffScreen.js +25 -0
- package/dist/tui/screens/DiffScreen.js.map +1 -0
- package/dist/tui/screens/EnvScreen.d.ts +11 -0
- package/dist/tui/screens/EnvScreen.d.ts.map +1 -0
- package/dist/tui/screens/EnvScreen.js +25 -0
- package/dist/tui/screens/EnvScreen.js.map +1 -0
- package/dist/tui/screens/SearchScreen.d.ts +13 -0
- package/dist/tui/screens/SearchScreen.d.ts.map +1 -0
- package/dist/tui/screens/SearchScreen.js +56 -0
- package/dist/tui/screens/SearchScreen.js.map +1 -0
- package/dist/tui/screens/TimelineScreen.d.ts +19 -0
- package/dist/tui/screens/TimelineScreen.d.ts.map +1 -0
- package/dist/tui/screens/TimelineScreen.js +10 -0
- package/dist/tui/screens/TimelineScreen.js.map +1 -0
- package/dist/utils/format.d.ts +23 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +65 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/summary.d.ts +26 -0
- package/dist/utils/summary.d.ts.map +1 -0
- package/dist/utils/summary.js +87 -0
- package/dist/utils/summary.js.map +1 -0
- package/dist/version.d.ts +8 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +11 -0
- package/dist/version.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { parseLabels, parseDiffStats, parseError } from "@varveai/adit-core";
|
|
4
|
+
function truncate(s, max) {
|
|
5
|
+
return s.length > max ? s.substring(0, max - 3) + "..." : s;
|
|
6
|
+
}
|
|
7
|
+
function formatDuration(startedAt, endedAt) {
|
|
8
|
+
const ms = new Date(endedAt).getTime() - new Date(startedAt).getTime();
|
|
9
|
+
if (ms < 1000)
|
|
10
|
+
return `${ms}ms`;
|
|
11
|
+
if (ms < 60_000)
|
|
12
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
13
|
+
const mins = Math.floor(ms / 60_000);
|
|
14
|
+
const secs = Math.round((ms % 60_000) / 1000);
|
|
15
|
+
return `${mins}m ${secs}s`;
|
|
16
|
+
}
|
|
17
|
+
function prettyJson(json, maxLen) {
|
|
18
|
+
try {
|
|
19
|
+
const parsed = JSON.parse(json);
|
|
20
|
+
const pretty = JSON.stringify(parsed, null, 2);
|
|
21
|
+
return truncate(pretty.replace(/\n/g, " "), maxLen);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return truncate(json.replace(/\n/g, " "), maxLen);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function EventDetail({ event, }) {
|
|
28
|
+
if (!event) {
|
|
29
|
+
return (_jsx(Box, { flexDirection: "column", paddingX: 1, children: _jsx(Text, { dimColor: true, children: "No event selected" }) }));
|
|
30
|
+
}
|
|
31
|
+
const labels = parseLabels(event.labelsJson);
|
|
32
|
+
const stats = parseDiffStats(event.diffStatJson);
|
|
33
|
+
const error = parseError(event.errorJson);
|
|
34
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsx(Text, { bold: true, children: "Event Detail" }), _jsx(Text, { dimColor: true, children: "─".repeat(30) }), _jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["ID:", " "] }), _jsx(Text, { children: event.id })] }), _jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Type:", " "] }), _jsx(Text, { children: event.eventType })] }), _jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Actor:", " "] }), _jsx(Text, { children: event.actor })] }), _jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Seq:", " "] }), _jsx(Text, { children: String(event.sequence) })] }), _jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Status:", " "] }), _jsx(Text, { color: event.status === "error" ? "red" : "green", children: event.status })] }), _jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Started:", " "] }), _jsx(Text, { children: event.startedAt })] }), event.endedAt && (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Ended:", " "] }), _jsx(Text, { children: event.endedAt }), _jsxs(Text, { dimColor: true, children: [" (", formatDuration(event.startedAt, event.endedAt), ")"] })] })), _jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Session:", " "] }), _jsx(Text, { children: event.sessionId })] }), event.parentEventId && (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Parent:", " "] }), _jsx(Text, { children: event.parentEventId })] })), event.clientId && (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Client:", " "] }), _jsx(Text, { children: event.clientId })] })), event.gitBranch && (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Branch:", " "] }), _jsx(Text, { children: event.gitBranch }), event.gitHeadSha && (_jsxs(Text, { dimColor: true, children: [" @ ", event.gitHeadSha.substring(0, 8)] }))] })), event.checkpointSha && (_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { dimColor: true, children: "Checkpoint:" }), _jsxs(Text, { color: "green", children: [" ", event.checkpointSha.substring(0, 10)] })] })), event.checkpointRef && (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Ref:", " "] }), _jsx(Text, { children: event.checkpointRef })] })), event.envSnapshotId && (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Env Snap:", " "] }), _jsx(Text, { children: event.envSnapshotId })] })), event.planTaskId && (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Plan Task:", " "] }), _jsx(Text, { children: event.planTaskId })] })), event.toolName && (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Tool:", " "] }), _jsx(Text, { color: "yellow", children: event.toolName })] })), event.promptText && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { bold: true, dimColor: true, children: "Prompt:" }), _jsx(Text, { wrap: "truncate", children: truncate(event.promptText.replace(/\n/g, " "), 200) })] })), event.cotText && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { bold: true, dimColor: true, children: "Chain of Thought:" }), _jsx(Text, { wrap: "truncate", children: truncate(event.cotText.replace(/\n/g, " "), 200) })] })), event.responseText && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { bold: true, dimColor: true, children: "Response:" }), _jsx(Text, { wrap: "truncate", children: truncate(event.responseText.replace(/\n/g, " "), 200) })] })), event.toolInputJson && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { bold: true, dimColor: true, children: "Tool Input:" }), _jsx(Text, { wrap: "truncate", children: prettyJson(event.toolInputJson, 200) })] })), event.toolOutputJson && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { bold: true, dimColor: true, children: "Tool Output:" }), _jsx(Text, { wrap: "truncate", children: prettyJson(event.toolOutputJson, 200) })] })), stats.length > 0 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Text, { bold: true, dimColor: true, children: ["Files (", stats.length, "):"] }), stats.slice(0, 8).map((f) => (_jsxs(Text, { children: [_jsx(Text, { color: f.status === "A" ? "green" : f.status === "D" ? "red" : "yellow", children: f.status }), " ", f.path] }, f.path))), stats.length > 8 && (_jsxs(Text, { dimColor: true, children: ["... and ", stats.length - 8, " more"] }))] })), labels.length > 0 && (_jsxs(Box, { flexDirection: "row", marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "Labels: " }), _jsx(Text, { color: "cyan", children: labels.join(", ") })] })), error && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Text, { color: "red", bold: true, children: ["Error: ", error.category] }), _jsx(Text, { color: "red", children: truncate(error.message, 100) })] })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "[d]iff [p]rompt [e]nv [r]evert" }) })] }));
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=EventDetail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventDetail.js","sourceRoot":"","sources":["../../../src/tui/components/EventDetail.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scrollable event list for the timeline.
|
|
3
|
+
*/
|
|
4
|
+
import React from "react";
|
|
5
|
+
import type { AditEvent } from "@varveai/adit-core";
|
|
6
|
+
import type { SortField } from "../../commands/list.js";
|
|
7
|
+
interface EventListProps {
|
|
8
|
+
events: AditEvent[];
|
|
9
|
+
selectedIndex: number;
|
|
10
|
+
height: number;
|
|
11
|
+
sortField?: SortField;
|
|
12
|
+
}
|
|
13
|
+
export declare function EventList({ events, selectedIndex, height, sortField, }: EventListProps): React.ReactElement;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=EventList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventList.d.ts","sourceRoot":"","sources":["../../../src/tui/components/EventList.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGxD,UAAU,cAAc;IACtB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AA6DD,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,aAAa,EACb,MAAM,EACN,SAAS,GACV,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,CA0DrC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { getEventSummary } from "../../utils/summary.js";
|
|
4
|
+
function actorSymbol(actor) {
|
|
5
|
+
switch (actor) {
|
|
6
|
+
case "assistant":
|
|
7
|
+
return "[A]";
|
|
8
|
+
case "user":
|
|
9
|
+
return "[U]";
|
|
10
|
+
case "tool":
|
|
11
|
+
return "[T]";
|
|
12
|
+
case "system":
|
|
13
|
+
return "[S]";
|
|
14
|
+
default:
|
|
15
|
+
return "[?]";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function actorColor(actor) {
|
|
19
|
+
switch (actor) {
|
|
20
|
+
case "assistant":
|
|
21
|
+
return "green";
|
|
22
|
+
case "user":
|
|
23
|
+
return "cyan";
|
|
24
|
+
case "tool":
|
|
25
|
+
return "yellow";
|
|
26
|
+
case "system":
|
|
27
|
+
return "magenta";
|
|
28
|
+
default:
|
|
29
|
+
return "white";
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function formatTime(iso) {
|
|
33
|
+
try {
|
|
34
|
+
const d = new Date(iso);
|
|
35
|
+
const month = String(d.getMonth() + 1).padStart(2, "0");
|
|
36
|
+
const day = String(d.getDate()).padStart(2, "0");
|
|
37
|
+
const time = d.toLocaleTimeString("en-US", { hour12: false });
|
|
38
|
+
return `${month}/${day} ${time}`;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return iso.substring(5, 19).replace("T", " ");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function getSummary(event) {
|
|
45
|
+
return getEventSummary(event, 50);
|
|
46
|
+
}
|
|
47
|
+
function sortIndicator(column, sortField) {
|
|
48
|
+
if (!sortField)
|
|
49
|
+
return "";
|
|
50
|
+
if ((column === "TIME" && sortField === "TIME") ||
|
|
51
|
+
(column === "ACTOR" && sortField === "ACTOR")) {
|
|
52
|
+
return sortField === "ACTOR" ? " ↑" : " ↓";
|
|
53
|
+
}
|
|
54
|
+
return "";
|
|
55
|
+
}
|
|
56
|
+
export function EventList({ events, selectedIndex, height, sortField, }) {
|
|
57
|
+
// Calculate visible window
|
|
58
|
+
const visibleHeight = Math.max(height - 2, 5);
|
|
59
|
+
const halfVisible = Math.floor(visibleHeight / 2);
|
|
60
|
+
let scrollStart = Math.max(0, selectedIndex - halfVisible);
|
|
61
|
+
const scrollEnd = Math.min(events.length, scrollStart + visibleHeight);
|
|
62
|
+
if (scrollEnd === events.length) {
|
|
63
|
+
scrollStart = Math.max(0, scrollEnd - visibleHeight);
|
|
64
|
+
}
|
|
65
|
+
const visible = events.slice(scrollStart, scrollEnd);
|
|
66
|
+
return (_jsxs(Box, { flexDirection: "column", width: "100%", children: [_jsx(Box, { flexDirection: "row", paddingX: 1, children: _jsxs(Text, { bold: true, dimColor: true, children: [" ", "TIME", sortIndicator("TIME", sortField), " ", "ACTOR", sortIndicator("ACTOR", sortField), " ", "SUMMARY"] }) }), visible.map((event, idx) => {
|
|
67
|
+
const actualIndex = scrollStart + idx;
|
|
68
|
+
const isSelected = actualIndex === selectedIndex;
|
|
69
|
+
const time = formatTime(event.startedAt);
|
|
70
|
+
const actor = actorSymbol(event.actor);
|
|
71
|
+
const color = actorColor(event.actor);
|
|
72
|
+
const summary = getSummary(event);
|
|
73
|
+
const hasCheckpoint = !!event.checkpointSha;
|
|
74
|
+
return (_jsxs(Box, { flexDirection: "row", paddingX: 1, children: [_jsxs(Text, { inverse: isSelected, children: [isSelected ? ">" : " ", " "] }), _jsx(Text, { inverse: isSelected, dimColor: !isSelected, children: time }), _jsx(Text, { inverse: isSelected, children: " " }), _jsx(Text, { inverse: isSelected, color: color, children: actor }), _jsx(Text, { inverse: isSelected, children: " " }), _jsx(Text, { inverse: isSelected, bold: hasCheckpoint, children: summary }), hasCheckpoint && !isSelected && (_jsxs(Text, { color: "green", children: [" ", "*"] }))] }, event.id));
|
|
75
|
+
}), events.length > visibleHeight && (_jsx(Box, { paddingX: 1, children: _jsxs(Text, { dimColor: true, children: ["[", scrollStart + 1, "-", scrollEnd, " of ", events.length, "]"] }) }))] }));
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=EventList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventList.js","sourceRoot":"","sources":["../../../src/tui/components/EventList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filter bar — actor/type filter chips.
|
|
3
|
+
*/
|
|
4
|
+
import React from "react";
|
|
5
|
+
import type { TimelineFilters } from "../hooks/useTimeline.js";
|
|
6
|
+
interface FilterBarProps {
|
|
7
|
+
filters: TimelineFilters;
|
|
8
|
+
visible: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function FilterBar({ filters, visible, }: FilterBarProps): React.ReactElement | null;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=FilterBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterBar.d.ts","sourceRoot":"","sources":["../../../src/tui/components/FilterBar.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,UAAU,cAAc;IACtB,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;CAClB;AAeD,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,OAAO,GACR,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAwC5C"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
const ACTORS = ["assistant", "user", "tool", "system"];
|
|
4
|
+
const EVENT_TYPES = [
|
|
5
|
+
"prompt_submit",
|
|
6
|
+
"assistant_response",
|
|
7
|
+
"tool_call",
|
|
8
|
+
"checkpoint",
|
|
9
|
+
"env_snapshot",
|
|
10
|
+
"task_completed",
|
|
11
|
+
"notification",
|
|
12
|
+
"subagent_start",
|
|
13
|
+
"subagent_stop",
|
|
14
|
+
];
|
|
15
|
+
export function FilterBar({ filters, visible, }) {
|
|
16
|
+
if (!visible)
|
|
17
|
+
return null;
|
|
18
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, paddingY: 0, children: [_jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Text, { dimColor: true, children: "Actor: " }), ACTORS.map((a) => (_jsxs(Text, { color: filters.actor === a ? "green" : undefined, bold: filters.actor === a, dimColor: filters.actor !== a && filters.actor !== undefined, children: ["[", a.charAt(0).toUpperCase(), "]", a.slice(1)] }, a)))] }), _jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsxs(Text, { dimColor: true, children: ["Type:", " "] }), EVENT_TYPES.map((t) => (_jsx(Text, { color: filters.eventType === t ? "green" : undefined, bold: filters.eventType === t, dimColor: filters.eventType !== t && filters.eventType !== undefined, children: t }, t)))] }), filters.hasCheckpoint && (_jsx(Text, { color: "green", bold: true, children: "Showing only checkpoint events" }))] }));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=FilterBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterBar.js","sourceRoot":"","sources":["../../../src/tui/components/FilterBar.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAShC,MAAM,MAAM,GAAY,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAChE,MAAM,WAAW,GAAgB;IAC/B,eAAe;IACf,oBAAoB;IACpB,WAAW;IACX,YAAY;IACZ,cAAc;IACd,gBAAgB;IAChB,cAAc;IACd,gBAAgB;IAChB,eAAe;CAChB,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,EACxB,OAAO,EACP,OAAO,GACQ;IACf,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,aAClD,MAAC,GAAG,IAAC,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,aAC7B,KAAC,IAAI,IAAC,QAAQ,8BAAe,EAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACjB,MAAC,IAAI,IAEH,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAChD,IAAI,EAAE,OAAO,CAAC,KAAK,KAAK,CAAC,EACzB,QAAQ,EAAE,OAAO,CAAC,KAAK,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,kBAE1D,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,OAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KALnC,CAAC,CAMD,CACR,CAAC,IACE,EACN,MAAC,GAAG,IAAC,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,aAC7B,MAAC,IAAI,IAAC,QAAQ,4BAAO,IAAI,IAAQ,EAChC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACtB,KAAC,IAAI,IAEH,KAAK,EAAE,OAAO,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EACpD,IAAI,EAAE,OAAO,CAAC,SAAS,KAAK,CAAC,EAC7B,QAAQ,EACN,OAAO,CAAC,SAAS,KAAK,CAAC,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,YAG3D,CAAC,IAPG,CAAC,CAQD,CACR,CAAC,IACE,EACL,OAAO,CAAC,aAAa,IAAI,CACxB,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,qDAEjB,CACR,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bottom status bar showing session info and keybinding hints.
|
|
3
|
+
*/
|
|
4
|
+
import React from "react";
|
|
5
|
+
import type { AditSession } from "@varveai/adit-core";
|
|
6
|
+
import type { Screen } from "../hooks/useKeyboard.js";
|
|
7
|
+
import type { SortField } from "../../commands/list.js";
|
|
8
|
+
interface StatusBarProps {
|
|
9
|
+
session: AditSession | null;
|
|
10
|
+
eventCount: number;
|
|
11
|
+
screen: Screen;
|
|
12
|
+
sortField?: SortField;
|
|
13
|
+
}
|
|
14
|
+
export declare function StatusBar({ session, eventCount, screen, sortField, }: StatusBarProps): React.ReactElement;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=StatusBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../../src/tui/components/StatusBar.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,UAAU,cAAc;IACtB,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,UAAU,EACV,MAAM,EACN,SAAS,GACV,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,CAyBrC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
export function StatusBar({ session, eventCount, screen, sortField, }) {
|
|
4
|
+
const sessionInfo = session
|
|
5
|
+
? `Session: ${session.id.substring(0, 10)} (${session.platform})`
|
|
6
|
+
: "No active session";
|
|
7
|
+
const sortLabel = sortField ? ` | Sort: ${sortField}` : "";
|
|
8
|
+
const hints = screen === "timeline"
|
|
9
|
+
? "[q]uit [/]search [f]ilter [s]ort [d]iff [e]nv [?]help"
|
|
10
|
+
: "[Esc]back [q]uit [?]help";
|
|
11
|
+
return (_jsxs(Box, { flexDirection: "row", justifyContent: "space-between", width: "100%", paddingX: 1, children: [_jsxs(Text, { dimColor: true, children: [sessionInfo, " | Events: ", eventCount, sortLabel] }), _jsx(Text, { dimColor: true, children: hints })] }));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=StatusBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../../src/tui/components/StatusBar.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAYhC,MAAM,UAAU,SAAS,CAAC,EACxB,OAAO,EACP,UAAU,EACV,MAAM,EACN,SAAS,GACM;IACf,MAAM,WAAW,GAAG,OAAO;QACzB,CAAC,CAAC,YAAY,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,QAAQ,GAAG;QACjE,CAAC,CAAC,mBAAmB,CAAC;IAExB,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,YAAY,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE3D,MAAM,KAAK,GACT,MAAM,KAAK,UAAU;QACnB,CAAC,CAAC,6DAA6D;QAC/D,CAAC,CAAC,4BAA4B,CAAC;IAEnC,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,KAAK,EACnB,cAAc,EAAC,eAAe,EAC9B,KAAK,EAAC,MAAM,EACZ,QAAQ,EAAE,CAAC,aAEX,MAAC,IAAI,IAAC,QAAQ,mBACX,WAAW,iBAAa,UAAU,EAAE,SAAS,IACzC,EACP,KAAC,IAAI,IAAC,QAAQ,kBAAE,KAAK,GAAQ,IACzB,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keyboard shortcut handler for TUI.
|
|
3
|
+
*
|
|
4
|
+
* Maps key presses to TUI actions.
|
|
5
|
+
*/
|
|
6
|
+
export type Screen = "timeline" | "diff" | "search" | "env" | "help";
|
|
7
|
+
export interface KeyboardActions {
|
|
8
|
+
onNavigateUp: () => void;
|
|
9
|
+
onNavigateDown: () => void;
|
|
10
|
+
onSelect: () => void;
|
|
11
|
+
onShowDiff: () => void;
|
|
12
|
+
onShowPrompt: () => void;
|
|
13
|
+
onShowEnv: () => void;
|
|
14
|
+
onSearch: () => void;
|
|
15
|
+
onFilter: () => void;
|
|
16
|
+
onSort: () => void;
|
|
17
|
+
onHelp: () => void;
|
|
18
|
+
onBack: () => void;
|
|
19
|
+
onQuit: () => void;
|
|
20
|
+
}
|
|
21
|
+
export declare function useKeyboard(actions: KeyboardActions, enabled?: boolean): void;
|
|
22
|
+
//# sourceMappingURL=useKeyboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useKeyboard.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useKeyboard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAErE,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,UAAO,GAAG,IAAI,CA6D1E"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keyboard shortcut handler for TUI.
|
|
3
|
+
*
|
|
4
|
+
* Maps key presses to TUI actions.
|
|
5
|
+
*/
|
|
6
|
+
import { useInput } from "ink";
|
|
7
|
+
export function useKeyboard(actions, enabled = true) {
|
|
8
|
+
useInput((input, key) => {
|
|
9
|
+
if (!enabled)
|
|
10
|
+
return;
|
|
11
|
+
// Navigation
|
|
12
|
+
if (input === "j" || key.downArrow) {
|
|
13
|
+
actions.onNavigateDown();
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (input === "k" || key.upArrow) {
|
|
17
|
+
actions.onNavigateUp();
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (key.return) {
|
|
21
|
+
actions.onSelect();
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
// Screen switches
|
|
25
|
+
if (input === "d") {
|
|
26
|
+
actions.onShowDiff();
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (input === "p") {
|
|
30
|
+
actions.onShowPrompt();
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (input === "e") {
|
|
34
|
+
actions.onShowEnv();
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (input === "/") {
|
|
38
|
+
actions.onSearch();
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (input === "f") {
|
|
42
|
+
actions.onFilter();
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (input === "s") {
|
|
46
|
+
actions.onSort();
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (input === "?") {
|
|
50
|
+
actions.onHelp();
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
// Back / quit
|
|
54
|
+
if (key.escape || input === "b") {
|
|
55
|
+
actions.onBack();
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (input === "q") {
|
|
59
|
+
actions.onQuit();
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
}, { isActive: enabled });
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=useKeyboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useKeyboard.js","sourceRoot":"","sources":["../../../src/tui/hooks/useKeyboard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAmB/B,MAAM,UAAU,WAAW,CAAC,OAAwB,EAAE,OAAO,GAAG,IAAI;IAClE,QAAQ,CACN,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACb,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,aAAa;QACb,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YACnC,OAAO,CAAC,cAAc,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACjC,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,kBAAkB;QAClB,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,cAAc;QACd,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAChC,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;IACH,CAAC,EACD,EAAE,QAAQ,EAAE,OAAO,EAAE,CACtB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data-fetching hook for TUI timeline.
|
|
3
|
+
*
|
|
4
|
+
* Provides event list, session info, and auto-refresh via polling.
|
|
5
|
+
*/
|
|
6
|
+
import { type AditEvent, type AditSession, type Actor, type EventType, type EnvSnapshot } from "@varveai/adit-core";
|
|
7
|
+
export interface TimelineState {
|
|
8
|
+
events: AditEvent[];
|
|
9
|
+
session: AditSession | null;
|
|
10
|
+
selectedEvent: AditEvent | null;
|
|
11
|
+
loading: boolean;
|
|
12
|
+
error: string | null;
|
|
13
|
+
totalCount: number;
|
|
14
|
+
}
|
|
15
|
+
export interface TimelineFilters {
|
|
16
|
+
actor?: Actor;
|
|
17
|
+
eventType?: EventType;
|
|
18
|
+
hasCheckpoint?: boolean;
|
|
19
|
+
searchQuery?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface UseTimelineResult {
|
|
22
|
+
state: TimelineState;
|
|
23
|
+
filters: TimelineFilters;
|
|
24
|
+
setFilters: (f: TimelineFilters) => void;
|
|
25
|
+
selectEvent: (id: string | null) => void;
|
|
26
|
+
refresh: () => void;
|
|
27
|
+
getEventDiff: (eventId: string) => string | null;
|
|
28
|
+
getEnvSnapshot: () => EnvSnapshot | null;
|
|
29
|
+
}
|
|
30
|
+
export declare function useTimeline(): UseTimelineResult;
|
|
31
|
+
//# sourceMappingURL=useTimeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTimeline.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useTimeline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAUL,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,SAAS,GAAG,IAAI,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,eAAe,CAAC;IACzB,UAAU,EAAE,CAAC,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC;IACzC,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACjD,cAAc,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;CAC1C;AAKD,wBAAgB,WAAW,IAAI,iBAAiB,CAyI/C"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data-fetching hook for TUI timeline.
|
|
3
|
+
*
|
|
4
|
+
* Provides event list, session info, and auto-refresh via polling.
|
|
5
|
+
*/
|
|
6
|
+
import { useState, useEffect, useCallback, useRef } from "react";
|
|
7
|
+
import { loadConfig, openDatabase, closeDatabase, queryEvents, getActiveSession, getEventById, searchEvents, getDiffText, getLatestEnvSnapshot, } from "@varveai/adit-core";
|
|
8
|
+
const POLL_INTERVAL = 2000;
|
|
9
|
+
const DEFAULT_LIMIT = 200;
|
|
10
|
+
export function useTimeline() {
|
|
11
|
+
const [state, setState] = useState({
|
|
12
|
+
events: [],
|
|
13
|
+
session: null,
|
|
14
|
+
selectedEvent: null,
|
|
15
|
+
loading: true,
|
|
16
|
+
error: null,
|
|
17
|
+
totalCount: 0,
|
|
18
|
+
});
|
|
19
|
+
const [filters, setFilters] = useState({});
|
|
20
|
+
const dbRef = useRef(null);
|
|
21
|
+
const configRef = useRef(null);
|
|
22
|
+
const intervalRef = useRef(null);
|
|
23
|
+
const getDb = useCallback(() => {
|
|
24
|
+
if (!dbRef.current) {
|
|
25
|
+
const config = loadConfig();
|
|
26
|
+
configRef.current = config;
|
|
27
|
+
dbRef.current = openDatabase(config.dbPath);
|
|
28
|
+
}
|
|
29
|
+
return dbRef.current;
|
|
30
|
+
}, []);
|
|
31
|
+
const fetchData = useCallback(() => {
|
|
32
|
+
try {
|
|
33
|
+
const db = getDb();
|
|
34
|
+
const config = configRef.current;
|
|
35
|
+
const session = getActiveSession(db, config.projectId, config.clientId);
|
|
36
|
+
let events;
|
|
37
|
+
if (filters.searchQuery) {
|
|
38
|
+
events = searchEvents(db, filters.searchQuery, DEFAULT_LIMIT);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
events = queryEvents(db, {
|
|
42
|
+
eventType: filters.eventType,
|
|
43
|
+
actor: filters.actor,
|
|
44
|
+
hasCheckpoint: filters.hasCheckpoint,
|
|
45
|
+
limit: DEFAULT_LIMIT,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
setState((prev) => ({
|
|
49
|
+
...prev,
|
|
50
|
+
events,
|
|
51
|
+
session,
|
|
52
|
+
loading: false,
|
|
53
|
+
error: null,
|
|
54
|
+
totalCount: events.length,
|
|
55
|
+
// Preserve selection if still valid
|
|
56
|
+
selectedEvent: prev.selectedEvent &&
|
|
57
|
+
events.some((e) => e.id === prev.selectedEvent.id)
|
|
58
|
+
? prev.selectedEvent
|
|
59
|
+
: events[0] ?? null,
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
setState((prev) => ({
|
|
64
|
+
...prev,
|
|
65
|
+
loading: false,
|
|
66
|
+
error: err instanceof Error ? err.message : String(err),
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
}, [getDb, filters]);
|
|
70
|
+
const selectEvent = useCallback((id) => {
|
|
71
|
+
if (!id) {
|
|
72
|
+
setState((prev) => ({ ...prev, selectedEvent: null }));
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
const db = getDb();
|
|
77
|
+
const event = getEventById(db, id);
|
|
78
|
+
setState((prev) => ({ ...prev, selectedEvent: event }));
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// ignore
|
|
82
|
+
}
|
|
83
|
+
}, [getDb]);
|
|
84
|
+
const getEventDiff = useCallback((eventId) => {
|
|
85
|
+
try {
|
|
86
|
+
const db = getDb();
|
|
87
|
+
return getDiffText(db, eventId, 200);
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
}, [getDb]);
|
|
93
|
+
const getEnvSnapshot = useCallback(() => {
|
|
94
|
+
try {
|
|
95
|
+
const db = getDb();
|
|
96
|
+
const session = state.session;
|
|
97
|
+
if (!session)
|
|
98
|
+
return null;
|
|
99
|
+
return getLatestEnvSnapshot(db, session.id);
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
}, [getDb, state.session]);
|
|
105
|
+
// Initial fetch
|
|
106
|
+
useEffect(() => {
|
|
107
|
+
fetchData();
|
|
108
|
+
}, [fetchData]);
|
|
109
|
+
// Auto-refresh polling
|
|
110
|
+
useEffect(() => {
|
|
111
|
+
intervalRef.current = setInterval(fetchData, POLL_INTERVAL);
|
|
112
|
+
return () => {
|
|
113
|
+
if (intervalRef.current)
|
|
114
|
+
clearInterval(intervalRef.current);
|
|
115
|
+
};
|
|
116
|
+
}, [fetchData]);
|
|
117
|
+
// Cleanup database on unmount
|
|
118
|
+
useEffect(() => {
|
|
119
|
+
return () => {
|
|
120
|
+
if (dbRef.current) {
|
|
121
|
+
closeDatabase(dbRef.current);
|
|
122
|
+
dbRef.current = null;
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
}, []);
|
|
126
|
+
return {
|
|
127
|
+
state,
|
|
128
|
+
filters,
|
|
129
|
+
setFilters,
|
|
130
|
+
selectEvent,
|
|
131
|
+
refresh: fetchData,
|
|
132
|
+
getEventDiff,
|
|
133
|
+
getEnvSnapshot,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=useTimeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTimeline.js","sourceRoot":"","sources":["../../../src/tui/hooks/useTimeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tui/index.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAMH,wBAAgB,SAAS,IAAI,IAAI,CAEhC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tui/index.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,UAAU,SAAS;IACvB,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diff viewer screen — shows syntax-highlighted diff for a checkpoint event.
|
|
3
|
+
*/
|
|
4
|
+
import React from "react";
|
|
5
|
+
import type { AditEvent } from "@varveai/adit-core";
|
|
6
|
+
interface DiffScreenProps {
|
|
7
|
+
event: AditEvent | null;
|
|
8
|
+
getDiff: (eventId: string) => string | null;
|
|
9
|
+
}
|
|
10
|
+
export declare function DiffScreen({ event, getDiff, }: DiffScreenProps): React.ReactElement;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=DiffScreen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiffScreen.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/DiffScreen.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAA8B,MAAM,OAAO,CAAC;AAGnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,UAAU,eAAe;IACvB,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,OAAO,GACR,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAuCtC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Diff viewer screen — shows syntax-highlighted diff for a checkpoint event.
|
|
4
|
+
*/
|
|
5
|
+
import { useState, useEffect } from "react";
|
|
6
|
+
import { Box, Text } from "ink";
|
|
7
|
+
import { DiffView } from "../components/DiffView.js";
|
|
8
|
+
export function DiffScreen({ event, getDiff, }) {
|
|
9
|
+
const [diffText, setDiffText] = useState(null);
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
if (event?.id) {
|
|
12
|
+
const text = getDiff(event.id);
|
|
13
|
+
setDiffText(text);
|
|
14
|
+
}
|
|
15
|
+
}, [event, getDiff]);
|
|
16
|
+
if (!event) {
|
|
17
|
+
return (_jsx(Box, { flexDirection: "column", paddingX: 1, children: _jsx(Text, { children: "No event selected. Press [Esc] to go back." }) }));
|
|
18
|
+
}
|
|
19
|
+
if (!event.checkpointSha) {
|
|
20
|
+
return (_jsx(Box, { flexDirection: "column", paddingX: 1, children: _jsxs(Text, { children: ["Event ", event.id.substring(0, 10), " has no checkpoint. Press [Esc] to go back."] }) }));
|
|
21
|
+
}
|
|
22
|
+
const title = `Diff for checkpoint ${event.checkpointSha.substring(0, 10)} (event ${event.id.substring(0, 10)})`;
|
|
23
|
+
return (_jsxs(Box, { flexDirection: "column", width: "100%", children: [_jsx(DiffView, { diffText: diffText, title: title }), _jsx(Box, { paddingX: 1, marginTop: 1, children: _jsx(Text, { dimColor: true, children: "[Esc] back to timeline" }) })] }));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=DiffScreen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiffScreen.js","sourceRoot":"","sources":["../../../src/tui/screens/DiffScreen.tsx"],"names":[],"mappings":";AAAA;;GAEG;AAEH,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAQrD,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,OAAO,GACS;IAChB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAE9D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,EAAE,EAAE,EAAE,CAAC;YACd,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC/B,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAErB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,YACrC,KAAC,IAAI,6DAAkD,GACnD,CACP,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACzB,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,YACrC,MAAC,IAAI,yBACI,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,mDAE3B,GACH,CACP,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,uBAAuB,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;IAEjH,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,KAAK,EAAC,MAAM,aACtC,KAAC,QAAQ,IAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAI,EAC9C,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,YAC5B,KAAC,IAAI,IAAC,QAAQ,6CAA8B,GACxC,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment snapshot screen — displays env details + drift indicators.
|
|
3
|
+
*/
|
|
4
|
+
import React from "react";
|
|
5
|
+
import type { EnvSnapshot } from "@varveai/adit-core";
|
|
6
|
+
interface EnvScreenProps {
|
|
7
|
+
snapshot: EnvSnapshot | null;
|
|
8
|
+
}
|
|
9
|
+
export declare function EnvScreen({ snapshot, }: EnvScreenProps): React.ReactElement;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=EnvScreen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnvScreen.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/EnvScreen.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,UAAU,cAAc;IACtB,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC;CAC9B;AAWD,wBAAgB,SAAS,CAAC,EACxB,QAAQ,GACT,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,CA8GrC"}
|