@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.
Files changed (146) hide show
  1. package/LICENSE +21 -0
  2. package/dist/commands/cloud.d.ts +51 -0
  3. package/dist/commands/cloud.d.ts.map +1 -0
  4. package/dist/commands/cloud.js +430 -0
  5. package/dist/commands/cloud.js.map +1 -0
  6. package/dist/commands/config.d.ts +8 -0
  7. package/dist/commands/config.d.ts.map +1 -0
  8. package/dist/commands/config.js +30 -0
  9. package/dist/commands/config.js.map +1 -0
  10. package/dist/commands/db.d.ts +17 -0
  11. package/dist/commands/db.d.ts.map +1 -0
  12. package/dist/commands/db.js +48 -0
  13. package/dist/commands/db.js.map +1 -0
  14. package/dist/commands/diff.d.ts +30 -0
  15. package/dist/commands/diff.d.ts.map +1 -0
  16. package/dist/commands/diff.js +265 -0
  17. package/dist/commands/diff.js.map +1 -0
  18. package/dist/commands/doctor.d.ts +15 -0
  19. package/dist/commands/doctor.d.ts.map +1 -0
  20. package/dist/commands/doctor.js +265 -0
  21. package/dist/commands/doctor.js.map +1 -0
  22. package/dist/commands/export.d.ts +24 -0
  23. package/dist/commands/export.d.ts.map +1 -0
  24. package/dist/commands/export.js +219 -0
  25. package/dist/commands/export.js.map +1 -0
  26. package/dist/commands/init.d.ts +12 -0
  27. package/dist/commands/init.d.ts.map +1 -0
  28. package/dist/commands/init.js +137 -0
  29. package/dist/commands/init.js.map +1 -0
  30. package/dist/commands/list.d.ts +20 -0
  31. package/dist/commands/list.d.ts.map +1 -0
  32. package/dist/commands/list.js +110 -0
  33. package/dist/commands/list.js.map +1 -0
  34. package/dist/commands/perf.d.ts +19 -0
  35. package/dist/commands/perf.d.ts.map +1 -0
  36. package/dist/commands/perf.js +102 -0
  37. package/dist/commands/perf.js.map +1 -0
  38. package/dist/commands/plugin.d.ts +28 -0
  39. package/dist/commands/plugin.d.ts.map +1 -0
  40. package/dist/commands/plugin.js +516 -0
  41. package/dist/commands/plugin.js.map +1 -0
  42. package/dist/commands/project-link.d.ts +16 -0
  43. package/dist/commands/project-link.d.ts.map +1 -0
  44. package/dist/commands/project-link.js +143 -0
  45. package/dist/commands/project-link.js.map +1 -0
  46. package/dist/commands/resume.d.ts +28 -0
  47. package/dist/commands/resume.d.ts.map +1 -0
  48. package/dist/commands/resume.js +229 -0
  49. package/dist/commands/resume.js.map +1 -0
  50. package/dist/commands/revert.d.ts +30 -0
  51. package/dist/commands/revert.d.ts.map +1 -0
  52. package/dist/commands/revert.js +271 -0
  53. package/dist/commands/revert.js.map +1 -0
  54. package/dist/commands/search.d.ts +16 -0
  55. package/dist/commands/search.d.ts.map +1 -0
  56. package/dist/commands/search.js +72 -0
  57. package/dist/commands/search.js.map +1 -0
  58. package/dist/commands/self-update.d.ts +12 -0
  59. package/dist/commands/self-update.d.ts.map +1 -0
  60. package/dist/commands/self-update.js +161 -0
  61. package/dist/commands/self-update.js.map +1 -0
  62. package/dist/commands/show.d.ts +5 -0
  63. package/dist/commands/show.d.ts.map +1 -0
  64. package/dist/commands/show.js +86 -0
  65. package/dist/commands/show.js.map +1 -0
  66. package/dist/commands/status.d.ts +11 -0
  67. package/dist/commands/status.d.ts.map +1 -0
  68. package/dist/commands/status.js +237 -0
  69. package/dist/commands/status.js.map +1 -0
  70. package/dist/commands/task.d.ts +18 -0
  71. package/dist/commands/task.d.ts.map +1 -0
  72. package/dist/commands/task.js +131 -0
  73. package/dist/commands/task.js.map +1 -0
  74. package/dist/commands/transcript.d.ts +40 -0
  75. package/dist/commands/transcript.d.ts.map +1 -0
  76. package/dist/commands/transcript.js +275 -0
  77. package/dist/commands/transcript.js.map +1 -0
  78. package/dist/index.d.ts +9 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +385 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/tui/App.d.ts +8 -0
  83. package/dist/tui/App.d.ts.map +1 -0
  84. package/dist/tui/App.js +132 -0
  85. package/dist/tui/App.js.map +1 -0
  86. package/dist/tui/components/DiffView.d.ts +11 -0
  87. package/dist/tui/components/DiffView.d.ts.map +1 -0
  88. package/dist/tui/components/DiffView.js +29 -0
  89. package/dist/tui/components/DiffView.js.map +1 -0
  90. package/dist/tui/components/EventDetail.d.ts +11 -0
  91. package/dist/tui/components/EventDetail.d.ts.map +1 -0
  92. package/dist/tui/components/EventDetail.js +36 -0
  93. package/dist/tui/components/EventDetail.js.map +1 -0
  94. package/dist/tui/components/EventList.d.ts +15 -0
  95. package/dist/tui/components/EventList.d.ts.map +1 -0
  96. package/dist/tui/components/EventList.js +77 -0
  97. package/dist/tui/components/EventList.js.map +1 -0
  98. package/dist/tui/components/FilterBar.d.ts +12 -0
  99. package/dist/tui/components/FilterBar.d.ts.map +1 -0
  100. package/dist/tui/components/FilterBar.js +20 -0
  101. package/dist/tui/components/FilterBar.js.map +1 -0
  102. package/dist/tui/components/StatusBar.d.ts +16 -0
  103. package/dist/tui/components/StatusBar.d.ts.map +1 -0
  104. package/dist/tui/components/StatusBar.js +13 -0
  105. package/dist/tui/components/StatusBar.js.map +1 -0
  106. package/dist/tui/hooks/useKeyboard.d.ts +22 -0
  107. package/dist/tui/hooks/useKeyboard.d.ts.map +1 -0
  108. package/dist/tui/hooks/useKeyboard.js +64 -0
  109. package/dist/tui/hooks/useKeyboard.js.map +1 -0
  110. package/dist/tui/hooks/useTimeline.d.ts +31 -0
  111. package/dist/tui/hooks/useTimeline.d.ts.map +1 -0
  112. package/dist/tui/hooks/useTimeline.js +136 -0
  113. package/dist/tui/hooks/useTimeline.js.map +1 -0
  114. package/dist/tui/index.d.ts +5 -0
  115. package/dist/tui/index.d.ts.map +1 -0
  116. package/dist/tui/index.js +10 -0
  117. package/dist/tui/index.js.map +1 -0
  118. package/dist/tui/screens/DiffScreen.d.ts +12 -0
  119. package/dist/tui/screens/DiffScreen.d.ts.map +1 -0
  120. package/dist/tui/screens/DiffScreen.js +25 -0
  121. package/dist/tui/screens/DiffScreen.js.map +1 -0
  122. package/dist/tui/screens/EnvScreen.d.ts +11 -0
  123. package/dist/tui/screens/EnvScreen.d.ts.map +1 -0
  124. package/dist/tui/screens/EnvScreen.js +25 -0
  125. package/dist/tui/screens/EnvScreen.js.map +1 -0
  126. package/dist/tui/screens/SearchScreen.d.ts +13 -0
  127. package/dist/tui/screens/SearchScreen.d.ts.map +1 -0
  128. package/dist/tui/screens/SearchScreen.js +56 -0
  129. package/dist/tui/screens/SearchScreen.js.map +1 -0
  130. package/dist/tui/screens/TimelineScreen.d.ts +19 -0
  131. package/dist/tui/screens/TimelineScreen.d.ts.map +1 -0
  132. package/dist/tui/screens/TimelineScreen.js +10 -0
  133. package/dist/tui/screens/TimelineScreen.js.map +1 -0
  134. package/dist/utils/format.d.ts +23 -0
  135. package/dist/utils/format.d.ts.map +1 -0
  136. package/dist/utils/format.js +65 -0
  137. package/dist/utils/format.js.map +1 -0
  138. package/dist/utils/summary.d.ts +26 -0
  139. package/dist/utils/summary.d.ts.map +1 -0
  140. package/dist/utils/summary.js +87 -0
  141. package/dist/utils/summary.js.map +1 -0
  142. package/dist/version.d.ts +8 -0
  143. package/dist/version.d.ts.map +1 -0
  144. package/dist/version.js +11 -0
  145. package/dist/version.js.map +1 -0
  146. package/package.json +48 -0
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ function parseJsonSafe(json) {
4
+ if (!json)
5
+ return null;
6
+ try {
7
+ return JSON.parse(json);
8
+ }
9
+ catch {
10
+ return null;
11
+ }
12
+ }
13
+ export function EnvScreen({ snapshot, }) {
14
+ if (!snapshot) {
15
+ return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsx(Text, { bold: true, children: "Environment Snapshot" }), _jsx(Text, { dimColor: true, children: "No environment snapshot available." }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "[Esc] back" }) })] }));
16
+ }
17
+ const runtimes = parseJsonSafe(snapshot.runtimeVersionsJson);
18
+ const system = parseJsonSafe(snapshot.systemResourcesJson);
19
+ const container = parseJsonSafe(snapshot.containerInfo);
20
+ const shell = parseJsonSafe(snapshot.shellInfo);
21
+ const pkgMgr = parseJsonSafe(snapshot.packageManagerJson);
22
+ return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsx(Text, { bold: true, children: "Environment Snapshot" }), _jsx(Text, { dimColor: true, children: "─".repeat(40) }), _jsx(Text, { bold: true, dimColor: true, children: "Git" }), _jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Branch:", " "] }), _jsx(Text, { children: snapshot.gitBranch ?? "unknown" })] }), _jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["HEAD:", " "] }), _jsx(Text, { children: snapshot.gitHeadSha?.substring(0, 10) ?? "unknown" })] }), _jsxs(Text, { bold: true, dimColor: true, children: ["", "Runtimes"] }), _jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Node:", " "] }), _jsx(Text, { children: snapshot.nodeVersion ?? "not found" })] }), _jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Python:", " "] }), _jsx(Text, { children: snapshot.pythonVersion ?? "not found" })] }), runtimes &&
23
+ Object.entries(runtimes).map(([k, v]) => (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: [k, ":", " ".repeat(Math.max(1, 5 - k.length))] }), _jsx(Text, { children: String(v) })] }, k))), _jsxs(Text, { bold: true, dimColor: true, children: ["", "Dependencies"] }), _jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Lock file:", " "] }), _jsx(Text, { children: snapshot.depLockPath ?? "none" })] }), _jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Lock hash:", " "] }), _jsx(Text, { children: snapshot.depLockHash ?? "n/a" })] }), pkgMgr && (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Pkg mgr:", " "] }), _jsxs(Text, { children: [String(pkgMgr.name), " ", String(pkgMgr.version ?? "")] })] })), _jsxs(Text, { bold: true, dimColor: true, children: ["", "System"] }), _jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["OS:", " "] }), _jsx(Text, { children: snapshot.osInfo ?? "unknown" })] }), system && (_jsxs(_Fragment, { children: [_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Arch:", " "] }), _jsx(Text, { children: String(system.arch ?? "unknown") })] }), _jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["CPU:", " "] }), _jsx(Text, { children: String(system.cpuModel ?? "unknown") })] })] })), container && (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Container:", " "] }), _jsx(Text, { color: container.inDocker ? "yellow" : undefined, children: container.inDocker ? "Docker" : "None" })] })), shell && (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { dimColor: true, children: ["Shell:", " "] }), _jsxs(Text, { children: [String(shell.shell ?? "unknown"), " ", String(shell.version ?? "")] })] })), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: true, children: ["Captured: ", snapshot.capturedAt, " | [Esc] back"] }) })] }));
24
+ }
25
+ //# sourceMappingURL=EnvScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnvScreen.js","sourceRoot":"","sources":["../../../src/tui/screens/EnvScreen.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Search screen — text search with highlighted results.
3
+ */
4
+ import React from "react";
5
+ import type { AditEvent } from "@varveai/adit-core";
6
+ interface SearchScreenProps {
7
+ onSearch: (query: string) => void;
8
+ events: AditEvent[];
9
+ selectedIndex: number;
10
+ }
11
+ export declare function SearchScreen({ onSearch, events, selectedIndex, }: SearchScreenProps): React.ReactElement;
12
+ export {};
13
+ //# sourceMappingURL=SearchScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchScreen.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/SearchScreen.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD,UAAU,iBAAiB;IACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAiCD,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,MAAM,EACN,aAAa,GACd,EAAE,iBAAiB,GAAG,KAAK,CAAC,YAAY,CA2DxC"}
@@ -0,0 +1,56 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Search screen — text search with highlighted results.
4
+ */
5
+ import { useState } from "react";
6
+ import { Box, Text, useInput } from "ink";
7
+ import { getEventSummary } from "../../utils/summary.js";
8
+ function formatTime(iso) {
9
+ try {
10
+ const d = new Date(iso);
11
+ const month = String(d.getMonth() + 1).padStart(2, "0");
12
+ const day = String(d.getDate()).padStart(2, "0");
13
+ const time = d.toLocaleTimeString("en-US", { hour12: false });
14
+ return `${month}/${day} ${time}`;
15
+ }
16
+ catch {
17
+ return iso.substring(5, 19).replace("T", " ");
18
+ }
19
+ }
20
+ function actorSymbol(actor) {
21
+ switch (actor) {
22
+ case "assistant":
23
+ return "[A]";
24
+ case "user":
25
+ return "[U]";
26
+ case "tool":
27
+ return "[T]";
28
+ case "system":
29
+ return "[S]";
30
+ default:
31
+ return "[?]";
32
+ }
33
+ }
34
+ function getSummary(event) {
35
+ return getEventSummary(event, 60);
36
+ }
37
+ export function SearchScreen({ onSearch, events, selectedIndex, }) {
38
+ const [query, setQuery] = useState("");
39
+ const [submitted, setSubmitted] = useState(false);
40
+ useInput((input, key) => {
41
+ if (key.return && !submitted) {
42
+ setSubmitted(true);
43
+ onSearch(query);
44
+ return;
45
+ }
46
+ if (key.backspace || key.delete) {
47
+ setQuery((q) => q.slice(0, -1));
48
+ return;
49
+ }
50
+ if (!key.ctrl && !key.meta && input && !key.escape) {
51
+ setQuery((q) => q + input);
52
+ }
53
+ }, { isActive: !submitted });
54
+ return (_jsxs(Box, { flexDirection: "column", width: "100%", paddingX: 1, children: [_jsxs(Box, { flexDirection: "row", marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Search: " }), _jsx(Text, { color: "cyan", children: query }), !submitted && _jsx(Text, { dimColor: true, children: "_" })] }), submitted && events.length === 0 && (_jsxs(Text, { dimColor: true, children: ["No results found for \"", query, "\""] })), submitted && events.length > 0 && (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { dimColor: true, children: [events.length, " result", events.length !== 1 ? "s" : "", ":"] }), events.map((event, idx) => (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { inverse: idx === selectedIndex, children: [idx === selectedIndex ? ">" : " ", " "] }), _jsxs(Text, { dimColor: true, children: [formatTime(event.startedAt), " "] }), _jsxs(Text, { color: "cyan", children: [actorSymbol(event.actor), " "] }), _jsx(Text, { children: getSummary(event) })] }, event.id)))] })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: submitted ? "[Esc] back" : "Type query and press [Enter]" }) })] }));
55
+ }
56
+ //# sourceMappingURL=SearchScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchScreen.js","sourceRoot":"","sources":["../../../src/tui/screens/SearchScreen.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Main timeline screen — event list + detail panel side by side.
3
+ */
4
+ import React from "react";
5
+ import type { AditEvent } from "@varveai/adit-core";
6
+ import type { TimelineFilters } from "../hooks/useTimeline.js";
7
+ import type { SortField } from "../../commands/list.js";
8
+ interface TimelineScreenProps {
9
+ events: AditEvent[];
10
+ selectedIndex: number;
11
+ selectedEvent: AditEvent | null;
12
+ filters: TimelineFilters;
13
+ showFilters: boolean;
14
+ sortField: SortField;
15
+ height: number;
16
+ }
17
+ export declare function TimelineScreen({ events, selectedIndex, selectedEvent, filters, showFilters, sortField, height, }: TimelineScreenProps): React.ReactElement;
18
+ export {};
19
+ //# sourceMappingURL=TimelineScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimelineScreen.d.ts","sourceRoot":"","sources":["../../../src/tui/screens/TimelineScreen.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,UAAU,mBAAmB;IAC3B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,SAAS,GAAG,IAAI,CAAC;IAChC,OAAO,EAAE,eAAe,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,aAAa,EACb,aAAa,EACb,OAAO,EACP,WAAW,EACX,SAAS,EACT,MAAM,GACP,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,CAqB1C"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box } from "ink";
3
+ import { EventList } from "../components/EventList.js";
4
+ import { EventDetail } from "../components/EventDetail.js";
5
+ import { FilterBar } from "../components/FilterBar.js";
6
+ export function TimelineScreen({ events, selectedIndex, selectedEvent, filters, showFilters, sortField, height, }) {
7
+ const listHeight = showFilters ? height - 4 : height - 1;
8
+ return (_jsxs(Box, { flexDirection: "column", width: "100%", children: [_jsx(FilterBar, { filters: filters, visible: showFilters }), _jsxs(Box, { flexDirection: "row", width: "100%", children: [_jsx(Box, { width: "55%", flexDirection: "column", children: _jsx(EventList, { events: events, selectedIndex: selectedIndex, height: listHeight, sortField: sortField }) }), _jsx(Box, { width: "45%", flexDirection: "column", borderStyle: "single", borderLeft: true, borderTop: false, borderRight: false, borderBottom: false, children: _jsx(EventDetail, { event: selectedEvent }) })] })] }));
9
+ }
10
+ //# sourceMappingURL=TimelineScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimelineScreen.js","sourceRoot":"","sources":["../../../src/tui/screens/TimelineScreen.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAevD,MAAM,UAAU,cAAc,CAAC,EAC7B,MAAM,EACN,aAAa,EACb,aAAa,EACb,OAAO,EACP,WAAW,EACX,SAAS,EACT,MAAM,GACc;IACpB,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAEzD,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,KAAK,EAAC,MAAM,aACtC,KAAC,SAAS,IAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,GAAI,EACrD,MAAC,GAAG,IAAC,aAAa,EAAC,KAAK,EAAC,KAAK,EAAC,MAAM,aACnC,KAAC,GAAG,IAAC,KAAK,EAAC,KAAK,EAAC,aAAa,EAAC,QAAQ,YACrC,KAAC,SAAS,IACR,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,SAAS,GACpB,GACE,EACN,KAAC,GAAG,IAAC,KAAK,EAAC,KAAK,EAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,QAAQ,EAAC,UAAU,QAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,YAC/H,KAAC,WAAW,IAAC,KAAK,EAAE,aAAa,GAAI,GACjC,IACF,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Shared terminal formatting utilities.
3
+ *
4
+ * Provides consistent styled output primitives for CLI commands:
5
+ * padding, time formatting, horizontal rules, and section headers.
6
+ */
7
+ /** Pad a string to the right with spaces */
8
+ export declare function padRight(s: string, len: number): string;
9
+ /** Pad a string to the left with spaces */
10
+ export declare function padLeft(s: string, len: number): string;
11
+ /** Format a duration into a human-readable "time ago" string */
12
+ export declare function timeAgo(isoOrDate: string | Date): string;
13
+ /** Format a date as a compact date-time string (e.g., "03/08 14:32:01") */
14
+ export declare function formatDateTime(iso: string): string;
15
+ /** Render a dimmed horizontal rule */
16
+ export declare function horizontalRule(width?: number): string;
17
+ /** Render a dimmed section header with trailing rule fill */
18
+ export declare function sectionHeader(label: string, width?: number): string;
19
+ /** Render a styled status dot: green filled when active, red outline when inactive */
20
+ export declare function statusDot(active: boolean): string;
21
+ /** Join non-empty segments with a dimmed separator */
22
+ export declare function joinDim(parts: (string | null | undefined | false)[], separator?: string): string;
23
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,4CAA4C;AAC5C,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,2CAA2C;AAC3C,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,gEAAgE;AAChE,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAYxD;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUlD;AAED,sCAAsC;AACtC,wBAAgB,cAAc,CAAC,KAAK,SAAK,GAAG,MAAM,CAEjD;AAED,6DAA6D;AAC7D,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,CAM/D;AAED,sFAAsF;AACtF,wBAAgB,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAEjD;AAED,sDAAsD;AACtD,wBAAgB,OAAO,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,EAAE,EAAE,SAAS,SAAa,GAAG,MAAM,CAEpG"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Shared terminal formatting utilities.
3
+ *
4
+ * Provides consistent styled output primitives for CLI commands:
5
+ * padding, time formatting, horizontal rules, and section headers.
6
+ */
7
+ import pc from "picocolors";
8
+ /** Pad a string to the right with spaces */
9
+ export function padRight(s, len) {
10
+ return s.length >= len ? s.substring(0, len) : s + " ".repeat(len - s.length);
11
+ }
12
+ /** Pad a string to the left with spaces */
13
+ export function padLeft(s, len) {
14
+ return s.length >= len ? s : " ".repeat(len - s.length) + s;
15
+ }
16
+ /** Format a duration into a human-readable "time ago" string */
17
+ export function timeAgo(isoOrDate) {
18
+ const date = typeof isoOrDate === "string" ? new Date(isoOrDate) : isoOrDate;
19
+ const diffMs = Date.now() - date.getTime();
20
+ const diffSec = Math.floor(diffMs / 1000);
21
+ const diffMin = Math.floor(diffSec / 60);
22
+ const diffHour = Math.floor(diffMin / 60);
23
+ const diffDay = Math.floor(diffHour / 24);
24
+ if (diffMin < 1)
25
+ return "just now";
26
+ if (diffHour < 1)
27
+ return `${diffMin}m ago`;
28
+ if (diffDay < 1)
29
+ return `${diffHour}h ago`;
30
+ return `${diffDay}d ago`;
31
+ }
32
+ /** Format a date as a compact date-time string (e.g., "03/08 14:32:01") */
33
+ export function formatDateTime(iso) {
34
+ try {
35
+ const d = new Date(iso);
36
+ const month = String(d.getMonth() + 1).padStart(2, "0");
37
+ const day = String(d.getDate()).padStart(2, "0");
38
+ const time = d.toLocaleTimeString("en-US", { hour12: false });
39
+ return `${month}/${day} ${time}`;
40
+ }
41
+ catch {
42
+ return iso.substring(5, 19).replace("T", " ");
43
+ }
44
+ }
45
+ /** Render a dimmed horizontal rule */
46
+ export function horizontalRule(width = 50) {
47
+ return pc.dim("\u2500".repeat(width));
48
+ }
49
+ /** Render a dimmed section header with trailing rule fill */
50
+ export function sectionHeader(label, width = 50) {
51
+ const prefix = "\u2500\u2500 ";
52
+ const suffix = " ";
53
+ const remaining = width - prefix.length - label.length - suffix.length;
54
+ const fill = remaining > 0 ? "\u2500".repeat(remaining) : "";
55
+ return pc.dim(`${prefix}${label}${suffix}${fill}`);
56
+ }
57
+ /** Render a styled status dot: green filled when active, red outline when inactive */
58
+ export function statusDot(active) {
59
+ return active ? pc.green("\u25cf") : pc.red("\u25cb");
60
+ }
61
+ /** Join non-empty segments with a dimmed separator */
62
+ export function joinDim(parts, separator = " \u00b7 ") {
63
+ return parts.filter(Boolean).join(pc.dim(separator));
64
+ }
65
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Shared event summary generation.
3
+ *
4
+ * Produces a short one-line message for each event type,
5
+ * following per-type rules for which field to display.
6
+ */
7
+ import type { AditEvent } from "@varveai/adit-core";
8
+ /**
9
+ * Generate a short summary string for an event based on its type.
10
+ *
11
+ * Rules per event type:
12
+ * subagent_stop → lastAssistantMessage (from toolOutputJson)
13
+ * prompt_submit → prompt (promptText)
14
+ * user_edit → response (responseText)
15
+ * notification → response (responseText)
16
+ * task_completed → response (responseText)
17
+ * env_drift → changes.newValue (from toolInputJson)
18
+ * subagent_start → agentType (toolName)
19
+ * tool_call → description (from toolInputJson)
20
+ * checkpoint → source + model (from toolInputJson)
21
+ * subagent_call → description (from toolInputJson)
22
+ * assistant_response → response (responseText)
23
+ */
24
+ export declare function getEventSummary(event: AditEvent, maxLen?: number): string;
25
+ export declare function truncate(s: string, max: number): string;
26
+ //# sourceMappingURL=summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../src/utils/summary.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,SAAK,GAAG,MAAM,CAyDrE;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEvD"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Shared event summary generation.
3
+ *
4
+ * Produces a short one-line message for each event type,
5
+ * following per-type rules for which field to display.
6
+ */
7
+ /**
8
+ * Generate a short summary string for an event based on its type.
9
+ *
10
+ * Rules per event type:
11
+ * subagent_stop → lastAssistantMessage (from toolOutputJson)
12
+ * prompt_submit → prompt (promptText)
13
+ * user_edit → response (responseText)
14
+ * notification → response (responseText)
15
+ * task_completed → response (responseText)
16
+ * env_drift → changes.newValue (from toolInputJson)
17
+ * subagent_start → agentType (toolName)
18
+ * tool_call → description (from toolInputJson)
19
+ * checkpoint → source + model (from toolInputJson)
20
+ * subagent_call → description (from toolInputJson)
21
+ * assistant_response → response (responseText)
22
+ */
23
+ export function getEventSummary(event, maxLen = 60) {
24
+ let text = null;
25
+ switch (event.eventType) {
26
+ case "prompt_submit":
27
+ text = event.promptText;
28
+ break;
29
+ case "assistant_response":
30
+ case "user_edit":
31
+ case "notification":
32
+ case "task_completed":
33
+ text = event.responseText;
34
+ break;
35
+ case "subagent_stop":
36
+ text = parseJson(event.toolOutputJson)?.lastAssistantMessage ?? null;
37
+ break;
38
+ case "env_drift": {
39
+ const drift = parseJson(event.toolInputJson);
40
+ if (drift?.changes?.length) {
41
+ text = drift.changes
42
+ .map((c) => c.newValue ?? "")
43
+ .filter(Boolean)
44
+ .join(", ");
45
+ }
46
+ break;
47
+ }
48
+ case "subagent_start":
49
+ text = event.toolName;
50
+ break;
51
+ case "tool_call":
52
+ case "subagent_call":
53
+ text = parseJson(event.toolInputJson)?.description
54
+ ?? event.toolName;
55
+ break;
56
+ case "checkpoint": {
57
+ const meta = parseJson(event.toolInputJson);
58
+ if (meta?.source || meta?.model) {
59
+ text = [meta.source, meta.model].filter(Boolean).join(" ");
60
+ }
61
+ else if (event.checkpointSha) {
62
+ text = `checkpoint ${event.checkpointSha.substring(0, 8)}`;
63
+ }
64
+ break;
65
+ }
66
+ default:
67
+ text = event.responseText ?? event.promptText ?? event.toolName;
68
+ break;
69
+ }
70
+ if (!text)
71
+ return event.eventType;
72
+ return truncate(text.replace(/\n/g, " ").trim(), maxLen);
73
+ }
74
+ export function truncate(s, max) {
75
+ return s.length > max ? s.substring(0, max - 3) + "..." : s;
76
+ }
77
+ function parseJson(json) {
78
+ if (!json)
79
+ return null;
80
+ try {
81
+ return JSON.parse(json);
82
+ }
83
+ catch {
84
+ return null;
85
+ }
86
+ }
87
+ //# sourceMappingURL=summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.js","sourceRoot":"","sources":["../../src/utils/summary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * CLI version — single source of truth.
3
+ *
4
+ * Reads the version string from the CLI package.json so it is never
5
+ * hardcoded or duplicated across the codebase.
6
+ */
7
+ export declare const CLI_VERSION: string;
8
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,eAAO,MAAM,WAAW,EAAE,MAAoB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * CLI version — single source of truth.
3
+ *
4
+ * Reads the version string from the CLI package.json so it is never
5
+ * hardcoded or duplicated across the codebase.
6
+ */
7
+ import { createRequire } from "node:module";
8
+ const require = createRequire(import.meta.url);
9
+ const pkg = require("../package.json");
10
+ export const CLI_VERSION = pkg.version;
11
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAE9D,MAAM,CAAC,MAAM,WAAW,GAAW,GAAG,CAAC,OAAO,CAAC"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@varveai/adit-cli",
3
+ "version": "0.2.1",
4
+ "description": "AI Development Intent Tracker — Transparent Time Machine for your codebase",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "bin": {
12
+ "adit": "./dist/index.js"
13
+ },
14
+ "exports": {
15
+ ".": {
16
+ "types": "./dist/index.d.ts",
17
+ "import": "./dist/index.js"
18
+ }
19
+ },
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "https://github.com/vkenliu/adit-core"
26
+ },
27
+ "homepage": "https://github.com/vkenliu/adit-core",
28
+ "dependencies": {
29
+ "commander": "^13.0.0",
30
+ "ink": "^5.2.1",
31
+ "ink-spinner": "^5.0.0",
32
+ "picocolors": "^1.1.1",
33
+ "react": "^18.3.1",
34
+ "@varveai/adit-core": "0.2.1",
35
+ "@varveai/adit-engine": "0.2.1",
36
+ "@varveai/adit-cloud": "0.2.1",
37
+ "@varveai/adit-hooks": "0.2.1",
38
+ "@varveai/adit-plans": "0.2.1"
39
+ },
40
+ "devDependencies": {
41
+ "@types/react": "^18.3.28",
42
+ "typescript": "^5.7.2"
43
+ },
44
+ "scripts": {
45
+ "build": "tsc",
46
+ "typecheck": "tsc --noEmit"
47
+ }
48
+ }