@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,271 @@
1
+ /**
2
+ * `adit snapshot revert [id]` — Revert working tree to a checkpoint.
3
+ * `adit snapshot undo` — Revert to parent of last checkpoint.
4
+ *
5
+ * When called without an ID, presents an interactive picker listing
6
+ * recent checkpoints for the user to select from.
7
+ */
8
+ import { createInterface } from "node:readline";
9
+ import { loadConfig, openDatabase, closeDatabase, queryEvents } from "@varveai/adit-core";
10
+ import { createTimelineManager, hasUncommittedChanges, runGit, getHeadSha, shaExists, } from "@varveai/adit-engine";
11
+ import { getEventSummary } from "../utils/summary.js";
12
+ /** Lock/dependency files to check for changes between checkpoints */
13
+ export const DEP_FILES = [
14
+ "package.json",
15
+ "package-lock.json",
16
+ "pnpm-lock.yaml",
17
+ "yarn.lock",
18
+ "bun.lockb",
19
+ "requirements.txt",
20
+ "Pipfile.lock",
21
+ "poetry.lock",
22
+ "Gemfile.lock",
23
+ "go.sum",
24
+ "Cargo.lock",
25
+ "composer.lock",
26
+ ];
27
+ /** Check if dependency files changed between two SHAs */
28
+ export async function checkDependencyChanges(cwd, fromSha, toSha) {
29
+ const result = await runGit(["diff", "--name-only", fromSha, toSha, "--", ...DEP_FILES], { cwd });
30
+ if (result.exitCode !== 0 || !result.stdout.trim())
31
+ return [];
32
+ return result.stdout.trim().split("\n").filter(Boolean);
33
+ }
34
+ /** Warn about dependency changes and print the affected files */
35
+ export function printDependencyWarnings(depChanges) {
36
+ if (depChanges.length === 0)
37
+ return;
38
+ console.log("\nWarning: Dependency files changed between current state and target checkpoint:");
39
+ for (const file of depChanges) {
40
+ console.log(` - ${file}`);
41
+ }
42
+ console.log("You may need to re-install dependencies after reverting (e.g., pnpm install).\n");
43
+ }
44
+ // ---------------------------------------------------------------------------
45
+ // Revert by ID
46
+ // ---------------------------------------------------------------------------
47
+ export async function revertCommand(eventId, opts) {
48
+ const config = loadConfig();
49
+ const db = openDatabase(config.dbPath);
50
+ const timeline = createTimelineManager(db, config);
51
+ try {
52
+ const event = await timeline.get(eventId);
53
+ if (!event) {
54
+ console.error(`Event not found: ${eventId}`);
55
+ process.exit(1);
56
+ }
57
+ if (!event.checkpointSha) {
58
+ console.error(`Event ${eventId} has no checkpoint to revert to.`);
59
+ process.exit(1);
60
+ }
61
+ // Warn about dirty working tree
62
+ if (!opts.yes) {
63
+ const dirty = await hasUncommittedChanges(config.projectRoot);
64
+ if (dirty) {
65
+ console.log("Warning: You have uncommitted changes. They will be lost on revert.");
66
+ console.log("Use --yes to skip this warning.");
67
+ }
68
+ }
69
+ // Verify checkpoint SHA is still reachable
70
+ const reachable = await shaExists(config.projectRoot, event.checkpointSha);
71
+ if (!reachable) {
72
+ console.error(`Checkpoint ${event.checkpointSha.substring(0, 8)} is no longer reachable in the git object store.`);
73
+ console.error("The checkpoint ref may have been deleted and the object garbage collected.");
74
+ process.exit(1);
75
+ }
76
+ // Check for dependency file changes
77
+ const headSha = await getHeadSha(config.projectRoot);
78
+ if (headSha) {
79
+ const depChanges = await checkDependencyChanges(config.projectRoot, headSha, event.checkpointSha);
80
+ printDependencyWarnings(depChanges);
81
+ }
82
+ await timeline.revertTo(eventId);
83
+ // Record the revert as an event
84
+ await timeline.recordEvent({
85
+ sessionId: event.sessionId,
86
+ eventType: "revert",
87
+ actor: "user",
88
+ responseText: `Reverted to checkpoint ${event.checkpointSha.substring(0, 8)}`,
89
+ });
90
+ console.log(`Reverted to checkpoint ${event.checkpointSha.substring(0, 8)} (event ${eventId.substring(0, 10)})`);
91
+ }
92
+ finally {
93
+ closeDatabase(db);
94
+ }
95
+ }
96
+ // ---------------------------------------------------------------------------
97
+ // Interactive revert (no ID given)
98
+ // ---------------------------------------------------------------------------
99
+ /** Format a checkpoint event for display in the picker */
100
+ function formatCheckpointLine(event, index) {
101
+ const sha = event.checkpointSha?.substring(0, 8) ?? "????????";
102
+ const time = event.startedAt
103
+ ? new Date(event.startedAt).toLocaleString()
104
+ : "unknown time";
105
+ const summary = getEventSummary(event, 50);
106
+ // Parse file stats for a quick overview
107
+ let fileInfo = "";
108
+ if (event.diffStatJson) {
109
+ try {
110
+ const stats = JSON.parse(event.diffStatJson);
111
+ fileInfo = ` (${stats.length} file${stats.length === 1 ? "" : "s"})`;
112
+ }
113
+ catch {
114
+ // best-effort
115
+ }
116
+ }
117
+ return ` ${String(index + 1).padStart(3)}. [${sha}] ${time}${fileInfo}\n ${summary}`;
118
+ }
119
+ /**
120
+ * Interactive revert: list checkpoints and let the user pick one.
121
+ *
122
+ * Uses a simple numbered-list approach for broad terminal compatibility
123
+ * rather than requiring a TUI framework. Reads from stdin for selection.
124
+ */
125
+ export async function interactiveRevertCommand(opts) {
126
+ const config = loadConfig();
127
+ const db = openDatabase(config.dbPath);
128
+ const timeline = createTimelineManager(db, config);
129
+ try {
130
+ // Fetch recent checkpoints
131
+ const limit = opts.limit ?? 20;
132
+ const checkpoints = queryEvents(db, {
133
+ hasCheckpoint: true,
134
+ limit,
135
+ });
136
+ if (checkpoints.length === 0) {
137
+ console.log("No checkpoints found. Work with your AI agent to create checkpoints.");
138
+ return;
139
+ }
140
+ // Display checkpoint list
141
+ console.log("\nAvailable checkpoints:\n");
142
+ for (let i = 0; i < checkpoints.length; i++) {
143
+ console.log(formatCheckpointLine(checkpoints[i], i));
144
+ if (i < checkpoints.length - 1)
145
+ console.log();
146
+ }
147
+ console.log();
148
+ // Prompt for selection
149
+ const selectedIndex = await promptForSelection(checkpoints.length);
150
+ if (selectedIndex === null) {
151
+ console.log("Revert cancelled.");
152
+ return;
153
+ }
154
+ const selected = checkpoints[selectedIndex];
155
+ // Warn about dirty working tree
156
+ if (!opts.yes) {
157
+ const dirty = await hasUncommittedChanges(config.projectRoot);
158
+ if (dirty) {
159
+ console.log("\nWarning: You have uncommitted changes. They will be lost on revert.");
160
+ const confirmed = await promptConfirm("Continue with revert?");
161
+ if (!confirmed) {
162
+ console.log("Revert cancelled.");
163
+ return;
164
+ }
165
+ }
166
+ }
167
+ // Verify checkpoint SHA is still reachable
168
+ if (selected.checkpointSha) {
169
+ const reachable = await shaExists(config.projectRoot, selected.checkpointSha);
170
+ if (!reachable) {
171
+ console.error(`\nCheckpoint ${selected.checkpointSha.substring(0, 8)} is no longer reachable in the git object store.`);
172
+ console.error("The checkpoint ref may have been deleted and the object garbage collected.");
173
+ return;
174
+ }
175
+ }
176
+ // Check for dependency file changes
177
+ const headSha = await getHeadSha(config.projectRoot);
178
+ if (headSha && selected.checkpointSha) {
179
+ const depChanges = await checkDependencyChanges(config.projectRoot, headSha, selected.checkpointSha);
180
+ printDependencyWarnings(depChanges);
181
+ }
182
+ // Perform the revert
183
+ await timeline.revertTo(selected.id);
184
+ // Record the revert event
185
+ await timeline.recordEvent({
186
+ sessionId: selected.sessionId,
187
+ eventType: "revert",
188
+ actor: "user",
189
+ responseText: `Reverted to checkpoint ${selected.checkpointSha?.substring(0, 8) ?? "unknown"} (interactive)`,
190
+ });
191
+ console.log(`\nReverted to checkpoint ${selected.checkpointSha?.substring(0, 8)} (event ${selected.id.substring(0, 10)})`);
192
+ }
193
+ finally {
194
+ closeDatabase(db);
195
+ }
196
+ }
197
+ // ---------------------------------------------------------------------------
198
+ // Undo (revert to parent of last checkpoint)
199
+ // ---------------------------------------------------------------------------
200
+ export async function undoCommand(opts) {
201
+ const config = loadConfig();
202
+ const db = openDatabase(config.dbPath);
203
+ const timeline = createTimelineManager(db, config);
204
+ try {
205
+ if (!opts.yes) {
206
+ const dirty = await hasUncommittedChanges(config.projectRoot);
207
+ if (dirty) {
208
+ console.log("Warning: You have uncommitted changes. They will be lost on undo.");
209
+ }
210
+ }
211
+ // Check for dependency changes before undo
212
+ const headSha = await getHeadSha(config.projectRoot);
213
+ const latestCheckpoint = await timeline.list({
214
+ hasCheckpoint: true,
215
+ limit: 1,
216
+ });
217
+ if (headSha && latestCheckpoint[0]?.checkpointSha) {
218
+ const reachable = await shaExists(config.projectRoot, latestCheckpoint[0].checkpointSha);
219
+ if (reachable) {
220
+ const depChanges = await checkDependencyChanges(config.projectRoot, headSha, latestCheckpoint[0].checkpointSha);
221
+ printDependencyWarnings(depChanges);
222
+ }
223
+ }
224
+ await timeline.undo();
225
+ console.log("Undone to parent of last checkpoint.");
226
+ }
227
+ finally {
228
+ closeDatabase(db);
229
+ }
230
+ }
231
+ // ---------------------------------------------------------------------------
232
+ // Stdin helpers for interactive mode
233
+ // ---------------------------------------------------------------------------
234
+ /** Read a line from stdin */
235
+ function readLine(prompt) {
236
+ return new Promise((resolve) => {
237
+ process.stdout.write(prompt);
238
+ if (!process.stdin.isTTY) {
239
+ resolve("");
240
+ return;
241
+ }
242
+ const rl = createInterface({
243
+ input: process.stdin,
244
+ output: process.stdout,
245
+ terminal: false,
246
+ });
247
+ rl.question("", (answer) => {
248
+ rl.close();
249
+ resolve(answer.trim());
250
+ });
251
+ });
252
+ }
253
+ /** Prompt the user to select a checkpoint by number (1-based). Returns 0-based index or null. */
254
+ async function promptForSelection(count) {
255
+ const answer = await readLine(`Select checkpoint (1-${count}) or 'q' to cancel: `);
256
+ if (answer === "q" || answer === "Q" || answer === "") {
257
+ return null;
258
+ }
259
+ const num = parseInt(answer, 10);
260
+ if (isNaN(num) || num < 1 || num > count) {
261
+ console.error(`Invalid selection: ${answer}. Enter a number between 1 and ${count}.`);
262
+ return null;
263
+ }
264
+ return num - 1;
265
+ }
266
+ /** Prompt the user for a yes/no confirmation */
267
+ async function promptConfirm(message) {
268
+ const answer = await readLine(`${message} (y/N): `);
269
+ return answer.toLowerCase() === "y" || answer.toLowerCase() === "yes";
270
+ }
271
+ //# sourceMappingURL=revert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revert.js","sourceRoot":"","sources":["../../src/commands/revert.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * `adit search` — Search events with filters.
3
+ */
4
+ /** `adit search <query>` — search events with advanced filters */
5
+ export declare function searchCommand(query: string, opts: {
6
+ limit?: number;
7
+ actor?: string;
8
+ type?: string;
9
+ from?: string;
10
+ to?: string;
11
+ branch?: string;
12
+ hasCheckpoint?: boolean;
13
+ format?: string;
14
+ json?: boolean;
15
+ }): Promise<void>;
16
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,kEAAkE;AAClE,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;IACJ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GACA,OAAO,CAAC,IAAI,CAAC,CAgDf"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * `adit search` — Search events with filters.
3
+ */
4
+ import { loadConfig, openDatabase, closeDatabase, } from "@varveai/adit-core";
5
+ import { getEventSummary } from "../utils/summary.js";
6
+ import { createTimelineManager } from "@varveai/adit-engine";
7
+ /** `adit search <query>` — search events with advanced filters */
8
+ export async function searchCommand(query, opts) {
9
+ const config = loadConfig();
10
+ const db = openDatabase(config.dbPath);
11
+ const timeline = createTimelineManager(db, config);
12
+ try {
13
+ let events = await timeline.search(query, opts.limit ?? 100);
14
+ if (opts.actor) {
15
+ events = events.filter((e) => e.actor === opts.actor);
16
+ }
17
+ if (opts.type) {
18
+ events = events.filter((e) => e.eventType === opts.type);
19
+ }
20
+ if (opts.from) {
21
+ const fromDate = new Date(opts.from).toISOString();
22
+ events = events.filter((e) => e.startedAt >= fromDate);
23
+ }
24
+ if (opts.to) {
25
+ const toDate = new Date(opts.to).toISOString();
26
+ events = events.filter((e) => e.startedAt <= toDate);
27
+ }
28
+ if (opts.branch) {
29
+ events = events.filter((e) => e.gitBranch === opts.branch);
30
+ }
31
+ if (opts.hasCheckpoint) {
32
+ events = events.filter((e) => e.checkpointSha != null);
33
+ }
34
+ events = events.slice(0, opts.limit ?? 20);
35
+ if (opts.format === "json" || opts.json) {
36
+ console.log(JSON.stringify(events.map(formatEventSummary), null, 2));
37
+ return;
38
+ }
39
+ if (events.length === 0) {
40
+ console.log(`No events matching "${query}"`);
41
+ return;
42
+ }
43
+ console.log(`Found ${events.length} events matching "${query}":\n`);
44
+ for (const event of events) {
45
+ printEventLine(event);
46
+ }
47
+ }
48
+ finally {
49
+ closeDatabase(db);
50
+ }
51
+ }
52
+ function printEventLine(event) {
53
+ const idShort = event.id.substring(0, 10);
54
+ const time = event.startedAt.substring(5, 19).replace("T", " ");
55
+ const labels = event.labelsJson ? ` ${JSON.parse(event.labelsJson).map((l) => `[${l}]`).join("")}` : "";
56
+ const checkpoint = event.checkpointSha ? " *" : "";
57
+ const snippet = getEventSummary(event, 80);
58
+ console.log(` ${idShort} ${time} [${event.actor[0].toUpperCase()}]${checkpoint} ${snippet}${labels}`);
59
+ }
60
+ function formatEventSummary(event) {
61
+ return {
62
+ id: event.id,
63
+ eventType: event.eventType,
64
+ actor: event.actor,
65
+ startedAt: event.startedAt,
66
+ gitBranch: event.gitBranch,
67
+ checkpointSha: event.checkpointSha,
68
+ labels: event.labelsJson ? JSON.parse(event.labelsJson) : [],
69
+ snippet: getEventSummary(event, 200),
70
+ };
71
+ }
72
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * `adit self-update` — Update ADIT to the latest version.
3
+ *
4
+ * Detects the installation directory (source-install via git clone),
5
+ * pulls the latest changes, rebuilds, and re-registers commands.
6
+ * Falls back to re-running the install script if the install dir
7
+ * cannot be determined.
8
+ */
9
+ export declare function selfUpdateCommand(opts?: {
10
+ check?: boolean;
11
+ }): Promise<void>;
12
+ //# sourceMappingURL=self-update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-update.d.ts","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA0DH,wBAAsB,iBAAiB,CAAC,IAAI,CAAC,EAAE;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0HhB"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * `adit self-update` — Update ADIT to the latest version.
3
+ *
4
+ * Detects the installation directory (source-install via git clone),
5
+ * pulls the latest changes, rebuilds, and re-registers commands.
6
+ * Falls back to re-running the install script if the install dir
7
+ * cannot be determined.
8
+ */
9
+ import { execSync } from "node:child_process";
10
+ import { existsSync, readFileSync } from "node:fs";
11
+ import { resolve, dirname } from "node:path";
12
+ import { CLI_VERSION } from "../version.js";
13
+ /** Default install location used by install.sh */
14
+ const DEFAULT_INSTALL_DIR = resolve(process.env.ADIT_INSTALL_DIR ?? `${process.env.HOME ?? "~"}/.adit-core`);
15
+ /**
16
+ * Resolve the adit-core install directory by walking up from the
17
+ * running CLI entry point to find the monorepo root.
18
+ */
19
+ function resolveInstallDir() {
20
+ // Method 1: Walk up from the running script to find the monorepo root
21
+ // The CLI runs from <root>/packages/cli/dist/index.js
22
+ try {
23
+ const cliDist = dirname(process.argv[1] ?? "");
24
+ const candidate = resolve(cliDist, "../../..");
25
+ if (existsSync(resolve(candidate, "package.json")) &&
26
+ existsSync(resolve(candidate, ".git"))) {
27
+ return candidate;
28
+ }
29
+ }
30
+ catch {
31
+ /* best-effort */
32
+ }
33
+ // Method 2: Use the default install directory
34
+ if (existsSync(resolve(DEFAULT_INSTALL_DIR, "package.json")) &&
35
+ existsSync(resolve(DEFAULT_INSTALL_DIR, ".git"))) {
36
+ return DEFAULT_INSTALL_DIR;
37
+ }
38
+ return null;
39
+ }
40
+ /**
41
+ * Read the version from a package.json file.
42
+ */
43
+ function readVersionFromPackageJson(rootDir) {
44
+ try {
45
+ const pkgPath = resolve(rootDir, "packages/cli/package.json");
46
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
47
+ return pkg.version ?? null;
48
+ }
49
+ catch {
50
+ return null;
51
+ }
52
+ }
53
+ export async function selfUpdateCommand(opts) {
54
+ const installDir = resolveInstallDir();
55
+ if (!installDir) {
56
+ console.log("Installed via npm. To update:");
57
+ console.log(" npm update -g @varveai/adit-cli");
58
+ return;
59
+ }
60
+ const execOpts = {
61
+ cwd: installDir,
62
+ stdio: "pipe",
63
+ encoding: "utf8",
64
+ };
65
+ // Pull latest changes
66
+ console.log(`Checking for updates in ${installDir} ...`);
67
+ try {
68
+ execSync("git fetch origin", { ...execOpts, stdio: "pipe" });
69
+ }
70
+ catch (e) {
71
+ console.error("Failed to fetch from remote:", e.message);
72
+ process.exitCode = 1;
73
+ return;
74
+ }
75
+ // Check if there are upstream changes
76
+ let behind = 0;
77
+ try {
78
+ const behindStr = execSync("git rev-list --count HEAD..origin/main", execOpts);
79
+ behind = parseInt(String(behindStr).trim(), 10) || 0;
80
+ }
81
+ catch {
82
+ // If we can't determine, proceed with update
83
+ behind = -1;
84
+ }
85
+ if (behind === 0) {
86
+ // Check version in case local changes were made
87
+ const latestVer = readVersionFromPackageJson(installDir);
88
+ if (latestVer === CLI_VERSION) {
89
+ console.log(`Already up to date (v${CLI_VERSION}).`);
90
+ return;
91
+ }
92
+ }
93
+ if (opts?.check) {
94
+ if (behind > 0) {
95
+ const latestVer = readVersionFromPackageJson(installDir);
96
+ console.log(`Update available: v${CLI_VERSION} -> v${latestVer ?? "unknown"} (${behind} commit${behind === 1 ? "" : "s"} behind)`);
97
+ }
98
+ else if (behind === 0) {
99
+ console.log(`Already up to date (v${CLI_VERSION}).`);
100
+ }
101
+ return;
102
+ }
103
+ // Perform the update
104
+ const showExecOpts = {
105
+ ...execOpts,
106
+ stdio: "inherit",
107
+ };
108
+ console.log(`Updating from v${CLI_VERSION} ...`);
109
+ console.log();
110
+ // Step 1: Pull
111
+ try {
112
+ console.log("Pulling latest changes ...");
113
+ execSync("git pull --ff-only origin main", showExecOpts);
114
+ }
115
+ catch {
116
+ console.error("Failed to pull latest changes. You may have local modifications.");
117
+ console.error("Try: git -C " + installDir + " stash && adit self-update");
118
+ process.exitCode = 1;
119
+ return;
120
+ }
121
+ // Step 2: Install dependencies
122
+ try {
123
+ console.log();
124
+ console.log("Installing dependencies ...");
125
+ execSync("pnpm install --frozen-lockfile", {
126
+ ...showExecOpts,
127
+ env: { ...process.env, COREPACK_ENABLE_STRICT: "0" },
128
+ });
129
+ }
130
+ catch {
131
+ // Retry without frozen lockfile
132
+ try {
133
+ execSync("pnpm install", {
134
+ ...showExecOpts,
135
+ env: { ...process.env, COREPACK_ENABLE_STRICT: "0" },
136
+ });
137
+ }
138
+ catch {
139
+ console.error("Failed to install dependencies.");
140
+ process.exitCode = 1;
141
+ return;
142
+ }
143
+ }
144
+ // Step 3: Build
145
+ try {
146
+ console.log();
147
+ console.log("Building ...");
148
+ execSync("pnpm build", showExecOpts);
149
+ }
150
+ catch {
151
+ console.error("Build failed.");
152
+ process.exitCode = 1;
153
+ return;
154
+ }
155
+ // Step 4: Report
156
+ const newVer = readVersionFromPackageJson(installDir);
157
+ console.log();
158
+ console.log(`Updated successfully: v${CLI_VERSION} -> v${newVer ?? "unknown"}`);
159
+ console.log("Run `adit doctor` to verify your installation.");
160
+ }
161
+ //# sourceMappingURL=self-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-update.js","sourceRoot":"","sources":["../../src/commands/self-update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * `adit show <id>` — Show full event details.
3
+ */
4
+ export declare function showCommand(eventId: string): Promise<void>;
5
+ //# sourceMappingURL=show.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../src/commands/show.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyFhE"}