sweteam 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +587 -0
  3. package/dist/adapters/adapter.d.ts +19 -0
  4. package/dist/adapters/adapter.d.ts.map +1 -0
  5. package/dist/adapters/adapter.js +20 -0
  6. package/dist/adapters/adapter.js.map +1 -0
  7. package/dist/adapters/claude-code.d.ts +13 -0
  8. package/dist/adapters/claude-code.d.ts.map +1 -0
  9. package/dist/adapters/claude-code.js +150 -0
  10. package/dist/adapters/claude-code.js.map +1 -0
  11. package/dist/adapters/codex.d.ts +13 -0
  12. package/dist/adapters/codex.d.ts.map +1 -0
  13. package/dist/adapters/codex.js +100 -0
  14. package/dist/adapters/codex.js.map +1 -0
  15. package/dist/adapters/custom.d.ts +16 -0
  16. package/dist/adapters/custom.d.ts.map +1 -0
  17. package/dist/adapters/custom.js +167 -0
  18. package/dist/adapters/custom.js.map +1 -0
  19. package/dist/adapters/opencode.d.ts +13 -0
  20. package/dist/adapters/opencode.d.ts.map +1 -0
  21. package/dist/adapters/opencode.js +100 -0
  22. package/dist/adapters/opencode.js.map +1 -0
  23. package/dist/adapters/prompt-detection.d.ts +14 -0
  24. package/dist/adapters/prompt-detection.d.ts.map +1 -0
  25. package/dist/adapters/prompt-detection.js +74 -0
  26. package/dist/adapters/prompt-detection.js.map +1 -0
  27. package/dist/commands/create.d.ts +8 -0
  28. package/dist/commands/create.d.ts.map +1 -0
  29. package/dist/commands/create.js +38 -0
  30. package/dist/commands/create.js.map +1 -0
  31. package/dist/commands/delete.d.ts +2 -0
  32. package/dist/commands/delete.d.ts.map +1 -0
  33. package/dist/commands/delete.js +22 -0
  34. package/dist/commands/delete.js.map +1 -0
  35. package/dist/commands/enter.d.ts +19 -0
  36. package/dist/commands/enter.d.ts.map +1 -0
  37. package/dist/commands/enter.js +73 -0
  38. package/dist/commands/enter.js.map +1 -0
  39. package/dist/commands/init.d.ts +14 -0
  40. package/dist/commands/init.d.ts.map +1 -0
  41. package/dist/commands/init.js +52 -0
  42. package/dist/commands/init.js.map +1 -0
  43. package/dist/commands/list.d.ts +8 -0
  44. package/dist/commands/list.d.ts.map +1 -0
  45. package/dist/commands/list.js +98 -0
  46. package/dist/commands/list.js.map +1 -0
  47. package/dist/commands/show.d.ts +33 -0
  48. package/dist/commands/show.d.ts.map +1 -0
  49. package/dist/commands/show.js +142 -0
  50. package/dist/commands/show.js.map +1 -0
  51. package/dist/commands/stop.d.ts +2 -0
  52. package/dist/commands/stop.d.ts.map +1 -0
  53. package/dist/commands/stop.js +10 -0
  54. package/dist/commands/stop.js.map +1 -0
  55. package/dist/config/discovery.d.ts +12 -0
  56. package/dist/config/discovery.d.ts.map +1 -0
  57. package/dist/config/discovery.js +62 -0
  58. package/dist/config/discovery.js.map +1 -0
  59. package/dist/config/gh-auth.d.ts +5 -0
  60. package/dist/config/gh-auth.d.ts.map +1 -0
  61. package/dist/config/gh-auth.js +18 -0
  62. package/dist/config/gh-auth.js.map +1 -0
  63. package/dist/config/loader.d.ts +38 -0
  64. package/dist/config/loader.d.ts.map +1 -0
  65. package/dist/config/loader.js +72 -0
  66. package/dist/config/loader.js.map +1 -0
  67. package/dist/db/client.d.ts +10 -0
  68. package/dist/db/client.d.ts.map +1 -0
  69. package/dist/db/client.js +84 -0
  70. package/dist/db/client.js.map +1 -0
  71. package/dist/db/schema.d.ts +805 -0
  72. package/dist/db/schema.d.ts.map +1 -0
  73. package/dist/db/schema.js +66 -0
  74. package/dist/db/schema.js.map +1 -0
  75. package/dist/git/git.d.ts +29 -0
  76. package/dist/git/git.d.ts.map +1 -0
  77. package/dist/git/git.js +200 -0
  78. package/dist/git/git.js.map +1 -0
  79. package/dist/index.d.ts +3 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +154 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/lifecycle.d.ts +5 -0
  84. package/dist/lifecycle.d.ts.map +1 -0
  85. package/dist/lifecycle.js +63 -0
  86. package/dist/lifecycle.js.map +1 -0
  87. package/dist/orchestrator/build-handler.d.ts +20 -0
  88. package/dist/orchestrator/build-handler.d.ts.map +1 -0
  89. package/dist/orchestrator/build-handler.js +212 -0
  90. package/dist/orchestrator/build-handler.js.map +1 -0
  91. package/dist/orchestrator/dag.d.ts +10 -0
  92. package/dist/orchestrator/dag.d.ts.map +1 -0
  93. package/dist/orchestrator/dag.js +70 -0
  94. package/dist/orchestrator/dag.js.map +1 -0
  95. package/dist/orchestrator/error-handling.d.ts +21 -0
  96. package/dist/orchestrator/error-handling.d.ts.map +1 -0
  97. package/dist/orchestrator/error-handling.js +124 -0
  98. package/dist/orchestrator/error-handling.js.map +1 -0
  99. package/dist/orchestrator/feedback-handler.d.ts +36 -0
  100. package/dist/orchestrator/feedback-handler.d.ts.map +1 -0
  101. package/dist/orchestrator/feedback-handler.js +316 -0
  102. package/dist/orchestrator/feedback-handler.js.map +1 -0
  103. package/dist/orchestrator/orchestrator.d.ts +21 -0
  104. package/dist/orchestrator/orchestrator.d.ts.map +1 -0
  105. package/dist/orchestrator/orchestrator.js +188 -0
  106. package/dist/orchestrator/orchestrator.js.map +1 -0
  107. package/dist/orchestrator/parallel-runner.d.ts +3 -0
  108. package/dist/orchestrator/parallel-runner.d.ts.map +1 -0
  109. package/dist/orchestrator/parallel-runner.js +111 -0
  110. package/dist/orchestrator/parallel-runner.js.map +1 -0
  111. package/dist/orchestrator/reviewer.d.ts +20 -0
  112. package/dist/orchestrator/reviewer.d.ts.map +1 -0
  113. package/dist/orchestrator/reviewer.js +175 -0
  114. package/dist/orchestrator/reviewer.js.map +1 -0
  115. package/dist/orchestrator/task-runner.d.ts +20 -0
  116. package/dist/orchestrator/task-runner.d.ts.map +1 -0
  117. package/dist/orchestrator/task-runner.js +122 -0
  118. package/dist/orchestrator/task-runner.js.map +1 -0
  119. package/dist/orchestrator/test-runner.d.ts +8 -0
  120. package/dist/orchestrator/test-runner.d.ts.map +1 -0
  121. package/dist/orchestrator/test-runner.js +81 -0
  122. package/dist/orchestrator/test-runner.js.map +1 -0
  123. package/dist/planner/plan-parser.d.ts +14 -0
  124. package/dist/planner/plan-parser.d.ts.map +1 -0
  125. package/dist/planner/plan-parser.js +182 -0
  126. package/dist/planner/plan-parser.js.map +1 -0
  127. package/dist/planner/planner.d.ts +9 -0
  128. package/dist/planner/planner.d.ts.map +1 -0
  129. package/dist/planner/planner.js +151 -0
  130. package/dist/planner/planner.js.map +1 -0
  131. package/dist/repl/repl.d.ts +19 -0
  132. package/dist/repl/repl.d.ts.map +1 -0
  133. package/dist/repl/repl.js +505 -0
  134. package/dist/repl/repl.js.map +1 -0
  135. package/dist/session/agent-log.d.ts +35 -0
  136. package/dist/session/agent-log.d.ts.map +1 -0
  137. package/dist/session/agent-log.js +120 -0
  138. package/dist/session/agent-log.js.map +1 -0
  139. package/dist/session/chat.d.ts +38 -0
  140. package/dist/session/chat.d.ts.map +1 -0
  141. package/dist/session/chat.js +106 -0
  142. package/dist/session/chat.js.map +1 -0
  143. package/dist/session/cost-tracker.d.ts +14 -0
  144. package/dist/session/cost-tracker.d.ts.map +1 -0
  145. package/dist/session/cost-tracker.js +61 -0
  146. package/dist/session/cost-tracker.js.map +1 -0
  147. package/dist/session/export.d.ts +2 -0
  148. package/dist/session/export.d.ts.map +1 -0
  149. package/dist/session/export.js +105 -0
  150. package/dist/session/export.js.map +1 -0
  151. package/dist/session/in-session-commands.d.ts +7 -0
  152. package/dist/session/in-session-commands.d.ts.map +1 -0
  153. package/dist/session/in-session-commands.js +227 -0
  154. package/dist/session/in-session-commands.js.map +1 -0
  155. package/dist/session/interactive.d.ts +37 -0
  156. package/dist/session/interactive.d.ts.map +1 -0
  157. package/dist/session/interactive.js +226 -0
  158. package/dist/session/interactive.js.map +1 -0
  159. package/dist/session/manager.d.ts +63 -0
  160. package/dist/session/manager.d.ts.map +1 -0
  161. package/dist/session/manager.js +229 -0
  162. package/dist/session/manager.js.map +1 -0
  163. package/dist/session/resume.d.ts +7 -0
  164. package/dist/session/resume.d.ts.map +1 -0
  165. package/dist/session/resume.js +53 -0
  166. package/dist/session/resume.js.map +1 -0
  167. package/dist/session/state-machine.d.ts +4 -0
  168. package/dist/session/state-machine.d.ts.map +1 -0
  169. package/dist/session/state-machine.js +47 -0
  170. package/dist/session/state-machine.js.map +1 -0
  171. package/dist/tui/chat-ui.d.ts +16 -0
  172. package/dist/tui/chat-ui.d.ts.map +1 -0
  173. package/dist/tui/chat-ui.js +19 -0
  174. package/dist/tui/chat-ui.js.map +1 -0
  175. package/dist/tui/dashboard.d.ts +17 -0
  176. package/dist/tui/dashboard.d.ts.map +1 -0
  177. package/dist/tui/dashboard.js +57 -0
  178. package/dist/tui/dashboard.js.map +1 -0
  179. package/dist/tui/session-list.d.ts +18 -0
  180. package/dist/tui/session-list.d.ts.map +1 -0
  181. package/dist/tui/session-list.js +26 -0
  182. package/dist/tui/session-list.js.map +1 -0
  183. package/dist/ui/agent-panel.d.ts +9 -0
  184. package/dist/ui/agent-panel.d.ts.map +1 -0
  185. package/dist/ui/agent-panel.js +100 -0
  186. package/dist/ui/agent-panel.js.map +1 -0
  187. package/dist/ui/banner.d.ts +10 -0
  188. package/dist/ui/banner.d.ts.map +1 -0
  189. package/dist/ui/banner.js +100 -0
  190. package/dist/ui/banner.js.map +1 -0
  191. package/dist/ui/markdown.d.ts +19 -0
  192. package/dist/ui/markdown.d.ts.map +1 -0
  193. package/dist/ui/markdown.js +174 -0
  194. package/dist/ui/markdown.js.map +1 -0
  195. package/dist/ui/prompt.d.ts +24 -0
  196. package/dist/ui/prompt.d.ts.map +1 -0
  197. package/dist/ui/prompt.js +226 -0
  198. package/dist/ui/prompt.js.map +1 -0
  199. package/dist/utils/time.d.ts +3 -0
  200. package/dist/utils/time.d.ts.map +1 -0
  201. package/dist/utils/time.js +29 -0
  202. package/dist/utils/time.js.map +1 -0
  203. package/drizzle/migrations/0000_naive_human_fly.sql +56 -0
  204. package/drizzle/migrations/meta/0000_snapshot.json +395 -0
  205. package/drizzle/migrations/meta/_journal.json +13 -0
  206. package/package.json +70 -0
@@ -0,0 +1,505 @@
1
+ import { listSessions, getSession } from "../session/manager.js";
2
+ import { renderBanner } from "../ui/banner.js";
3
+ import { promptLine, ESCAPE_SIGNAL } from "../ui/prompt.js";
4
+ import { createSessionHandlers, handleSessionCommand, } from "../session/interactive.js";
5
+ import { getStatusDisplay, getHelpDisplay } from "../session/in-session-commands.js";
6
+ import { watchLog, isLogActive, writeEvent } from "../session/agent-log.js";
7
+ import { AgentPanel } from "../ui/agent-panel.js";
8
+ import { friendlyError } from "../orchestrator/error-handling.js";
9
+ let activeSession = null;
10
+ // ── Commands & completions ──────────────────────────────────────────
11
+ const COMMANDS = [
12
+ "/list",
13
+ "/create",
14
+ "/enter",
15
+ "/show",
16
+ "/stop",
17
+ "/delete",
18
+ "/init",
19
+ "/help",
20
+ "/exit",
21
+ "/quit",
22
+ ];
23
+ const SESSION_ID_COMMANDS = new Set(["/enter", "/show", "/stop", "/delete"]);
24
+ const HELP_TEXT_ROOT = `Commands:
25
+ /create [repo] Create a new session (defaults to current directory)
26
+ /list List all sessions
27
+ /enter <session_id> Re-enter an existing session
28
+ /show <session_id> Show detailed session view
29
+ /stop <session_id> Stop a session
30
+ /delete <session_id> Delete a session
31
+ /init Auto-discover CLIs and generate config
32
+ /help Show this help
33
+ /exit, /quit Quit sweteam`;
34
+ export function parseReplInput(input) {
35
+ const trimmed = input.trim();
36
+ if (!trimmed)
37
+ return { command: "", args: [] };
38
+ const parts = trimmed.split(/\s+/);
39
+ const command = parts[0];
40
+ const args = parts.slice(1);
41
+ return { command, args };
42
+ }
43
+ /** readline-style completer (kept for tests & potential reuse). */
44
+ export function completer(line) {
45
+ const trimmed = line.trimStart();
46
+ if (!trimmed.startsWith("/")) {
47
+ return [[], line];
48
+ }
49
+ const parts = trimmed.split(/\s+/);
50
+ if (parts.length === 1) {
51
+ const hits = COMMANDS.filter((c) => c.startsWith(parts[0]));
52
+ return [hits, parts[0]];
53
+ }
54
+ const cmd = parts[0];
55
+ if (SESSION_ID_COMMANDS.has(cmd) && parts.length === 2) {
56
+ try {
57
+ const sessions = listSessions();
58
+ const partial = parts[1];
59
+ const ids = sessions
60
+ .map((s) => s.id)
61
+ .filter((id) => id.startsWith(partial));
62
+ return [ids, partial];
63
+ }
64
+ catch {
65
+ return [[], parts[1]];
66
+ }
67
+ }
68
+ return [[], line];
69
+ }
70
+ /** Return completions for the live autocomplete dropdown. */
71
+ export function getCompletions(line) {
72
+ const trimmed = line.trimStart();
73
+ if (!trimmed.startsWith("/"))
74
+ return [];
75
+ const parts = trimmed.split(/\s+/);
76
+ if (parts.length === 1) {
77
+ return COMMANDS.filter((c) => c.startsWith(parts[0]) && c !== parts[0]);
78
+ }
79
+ const cmd = parts[0];
80
+ if (SESSION_ID_COMMANDS.has(cmd) && parts.length === 2) {
81
+ try {
82
+ const sessions = listSessions();
83
+ const partial = parts[1];
84
+ return sessions
85
+ .map((s) => s.id)
86
+ .filter((id) => id.startsWith(partial) && id !== partial)
87
+ .map((id) => cmd + " " + id);
88
+ }
89
+ catch {
90
+ return [];
91
+ }
92
+ }
93
+ return [];
94
+ }
95
+ // ── Live build output watcher ────────────────────────────────────────
96
+ /**
97
+ * Attach to a running build's agent log and display output via AgentPanel.
98
+ * Blocks until the build completes, the log goes stale, or the user presses
99
+ * Enter/Ctrl-C/Escape.
100
+ */
101
+ function watchBuildLive(sessionId) {
102
+ return new Promise((resolve) => {
103
+ const panel = new AgentPanel();
104
+ let resolved = false;
105
+ let lastEventTime = Date.now();
106
+ // Input mode state
107
+ let inputMode = false;
108
+ let inputBuffer = "";
109
+ let pendingRequestId = null;
110
+ function finish(reason) {
111
+ if (resolved)
112
+ return;
113
+ resolved = true;
114
+ if (inputMode) {
115
+ exitInputMode();
116
+ }
117
+ if (staleTimer)
118
+ clearInterval(staleTimer);
119
+ watcher.stop();
120
+ panel.destroy();
121
+ process.stdin.removeListener("data", onKey);
122
+ if (process.stdin.isTTY) {
123
+ process.stdin.setRawMode(false);
124
+ }
125
+ process.stdin.pause();
126
+ if (reason)
127
+ console.log(reason);
128
+ resolve();
129
+ }
130
+ function enterInputMode(promptText, requestId) {
131
+ inputMode = true;
132
+ inputBuffer = "";
133
+ pendingRequestId = requestId;
134
+ panel.destroy(); // Temporarily clear panel so prompt is visible
135
+ process.stdout.write(`\nInput needed: ${promptText}\n> `);
136
+ }
137
+ function exitInputMode() {
138
+ inputMode = false;
139
+ inputBuffer = "";
140
+ pendingRequestId = null;
141
+ }
142
+ function submitInput() {
143
+ if (!pendingRequestId)
144
+ return;
145
+ const response = inputBuffer.trim();
146
+ writeEvent(sessionId, {
147
+ type: "input-response",
148
+ id: pendingRequestId,
149
+ requestId: pendingRequestId,
150
+ response,
151
+ });
152
+ process.stdout.write("\n");
153
+ exitInputMode();
154
+ }
155
+ const watcher = watchLog(sessionId, (event) => {
156
+ lastEventTime = Date.now();
157
+ switch (event.type) {
158
+ case "agent-start":
159
+ panel.addAgent(event.id, event.role, event.taskId, event.title);
160
+ break;
161
+ case "output":
162
+ panel.appendOutput(event.id, event.chunk);
163
+ break;
164
+ case "agent-end":
165
+ panel.completeAgent(event.id, event.success);
166
+ break;
167
+ case "build-complete":
168
+ finish();
169
+ break;
170
+ case "input-needed":
171
+ enterInputMode(event.promptText ?? "(input needed)", event.requestId);
172
+ break;
173
+ // input-response is handled by the build process, not the REPL watcher
174
+ }
175
+ });
176
+ // Auto-detach if no new events arrive for 30 seconds (build is dead)
177
+ const staleTimer = setInterval(() => {
178
+ if (Date.now() - lastEventTime > 30_000) {
179
+ finish("\nNo build activity for 30s. Build may still be running — type @status to check.\n");
180
+ }
181
+ }, 1000);
182
+ function onKey(data) {
183
+ const key = data.toString();
184
+ if (inputMode) {
185
+ // In input mode: collect typed text
186
+ if (key === "\x1b") {
187
+ // Escape: cancel input and detach
188
+ process.stdout.write("\n(input cancelled)\n");
189
+ exitInputMode();
190
+ finish("\nDetached from build output.\n");
191
+ }
192
+ else if (key === "\r" || key === "\n") {
193
+ // Enter: submit the response
194
+ submitInput();
195
+ }
196
+ else if (key === "\x7f" || key === "\b") {
197
+ // Backspace
198
+ if (inputBuffer.length > 0) {
199
+ inputBuffer = inputBuffer.slice(0, -1);
200
+ process.stdout.write("\b \b");
201
+ }
202
+ }
203
+ else if (key === "\x03") {
204
+ // Ctrl-C: cancel input and detach
205
+ process.stdout.write("\n(input cancelled)\n");
206
+ exitInputMode();
207
+ finish("\nDetached from build output.\n");
208
+ }
209
+ else if (key.charCodeAt(0) >= 32) {
210
+ // Printable character
211
+ inputBuffer += key;
212
+ process.stdout.write(key);
213
+ }
214
+ return;
215
+ }
216
+ // Normal watch mode: Enter/Ctrl-C/Escape to detach
217
+ if (key === "\r" || key === "\n" || key === "\x03" || key === "\x1b") {
218
+ finish("\nDetached from build output.\n");
219
+ }
220
+ }
221
+ if (process.stdin.isTTY) {
222
+ process.stdin.setRawMode(true);
223
+ }
224
+ process.stdin.resume();
225
+ process.stdin.on("data", onKey);
226
+ });
227
+ }
228
+ // ── Dispatch (/ commands) ───────────────────────────────────────────
229
+ async function dispatch(command, args) {
230
+ switch (command) {
231
+ case "/list": {
232
+ const { handleList } = await import("../commands/list.js");
233
+ await handleList();
234
+ break;
235
+ }
236
+ case "/create": {
237
+ const repo = args.length > 0 ? args[0] : undefined;
238
+ const { handleCreate } = await import("../commands/create.js");
239
+ const result = await handleCreate(repo);
240
+ if (result) {
241
+ activeSession = {
242
+ id: result.id,
243
+ repo: result.repo,
244
+ repoPath: result.repoLocalPath,
245
+ handlers: createSessionHandlers(result.id, result.repo, "", result.repoLocalPath),
246
+ };
247
+ console.log("Type your goal or describe what you want to build.\n");
248
+ }
249
+ break;
250
+ }
251
+ case "/enter": {
252
+ if (args.length < 1) {
253
+ console.log("Usage: /enter <session_id>");
254
+ break;
255
+ }
256
+ const { getSession } = await import("../session/manager.js");
257
+ const session = getSession(args[0]);
258
+ if (!session) {
259
+ console.log(`Session not found: ${args[0]}`);
260
+ break;
261
+ }
262
+ const repoPath = session.repoLocalPath ?? ".";
263
+ activeSession = {
264
+ id: session.id,
265
+ repo: session.repo,
266
+ repoPath,
267
+ handlers: createSessionHandlers(session.id, session.repo, session.goal, repoPath),
268
+ };
269
+ console.log(`\nEntered session ${session.id} (${session.repo})`);
270
+ console.log(` Goal: ${session.goal || "(not set yet)"}`);
271
+ console.log(` Status: ${session.status}\n`);
272
+ // Status-aware guidance on re-entry
273
+ if (session.status === "building" || session.status === "iterating") {
274
+ // Check if a build is actually running (log has recent writes)
275
+ if (isLogActive(session.id)) {
276
+ console.log("Attaching to live build output... (press Enter or Escape to detach)\n");
277
+ await watchBuildLive(session.id);
278
+ // Re-check status after watching — build may have completed
279
+ const updated = getSession(session.id);
280
+ if (updated && updated.status === "awaiting_feedback") {
281
+ console.log("Build complete. Send feedback or @feedback <text>.\n");
282
+ }
283
+ else if (updated && updated.status === "building") {
284
+ console.log(getStatusDisplay(session.id));
285
+ console.log("\nBuild still in progress. Re-enter to reattach, or type @build to restart.\n");
286
+ }
287
+ }
288
+ else {
289
+ console.log(getStatusDisplay(session.id));
290
+ console.log("Build was interrupted. Type @build to restart.\n");
291
+ }
292
+ }
293
+ else if (session.status === "awaiting_feedback") {
294
+ console.log(getStatusDisplay(session.id));
295
+ // Check if build actually completed or was interrupted (all tasks still queued)
296
+ const { getTasksForSession: getTasks } = await import("../orchestrator/orchestrator.js");
297
+ const sessionTasks = getTasks(session.id);
298
+ const allQueued = sessionTasks.length > 0 && sessionTasks.every((t) => t.status === "queued");
299
+ if (allQueued) {
300
+ console.log("Build was interrupted before any tasks ran. Type @build to retry.\n");
301
+ }
302
+ else {
303
+ console.log("Send feedback or @feedback <text>.\n");
304
+ }
305
+ }
306
+ else if (session.status === "stopped") {
307
+ if (session.planJson) {
308
+ console.log("Session stopped. Type @build to rebuild, or chat to refine the plan.\n");
309
+ }
310
+ else {
311
+ console.log("Session stopped. Send a message to resume planning.\n");
312
+ }
313
+ }
314
+ else if (session.status === "planning" && session.planJson) {
315
+ console.log("A plan exists. Type @build or continue chatting.\n");
316
+ }
317
+ else if (session.status === "planning") {
318
+ console.log("Describe what you want to build.\n");
319
+ }
320
+ break;
321
+ }
322
+ case "/show": {
323
+ if (args.length < 1) {
324
+ console.log("Usage: /show <session_id>");
325
+ break;
326
+ }
327
+ const { handleShow } = await import("../commands/show.js");
328
+ await handleShow(args[0]);
329
+ break;
330
+ }
331
+ case "/stop": {
332
+ if (args.length < 1) {
333
+ console.log("Usage: /stop <session_id>");
334
+ break;
335
+ }
336
+ const { handleStop } = await import("../commands/stop.js");
337
+ await handleStop(args[0]);
338
+ // If we stopped the active session, clear it
339
+ if (activeSession && activeSession.id === args[0]) {
340
+ activeSession = null;
341
+ }
342
+ break;
343
+ }
344
+ case "/delete": {
345
+ if (args.length < 1) {
346
+ console.log("Usage: /delete <session_id> or /delete --all");
347
+ break;
348
+ }
349
+ const { handleDelete } = await import("../commands/delete.js");
350
+ await handleDelete(args[0]);
351
+ // Clear active session if it was deleted
352
+ if (activeSession && (args[0] === "--all" || activeSession.id === args[0])) {
353
+ activeSession = null;
354
+ }
355
+ break;
356
+ }
357
+ case "/init": {
358
+ const { runInit, formatInitOutput } = await import("../commands/init.js");
359
+ const result = runInit();
360
+ console.log(formatInitOutput(result));
361
+ break;
362
+ }
363
+ case "/help": {
364
+ if (activeSession) {
365
+ console.log(getHelpDisplay(activeSession.id));
366
+ console.log();
367
+ }
368
+ console.log(HELP_TEXT_ROOT);
369
+ break;
370
+ }
371
+ default: {
372
+ console.log(`Unknown command: ${command}. Type /help for available commands.`);
373
+ }
374
+ }
375
+ }
376
+ // ── Prompt string ───────────────────────────────────────────────────
377
+ const PROMPT_STATE_LABELS = {
378
+ planning: "planning",
379
+ building: "building",
380
+ awaiting_feedback: "feedback",
381
+ iterating: "iterating",
382
+ stopped: "stopped",
383
+ };
384
+ function getPrompt() {
385
+ if (activeSession) {
386
+ const short = activeSession.repo.split("/").pop() || activeSession.id;
387
+ let stateTag = "";
388
+ try {
389
+ const session = getSession(activeSession.id);
390
+ if (session?.status) {
391
+ const label = PROMPT_STATE_LABELS[session.status] ?? session.status;
392
+ stateTag = ` (${label})`;
393
+ }
394
+ }
395
+ catch {
396
+ // DB may be unavailable
397
+ }
398
+ return `${short}${stateTag}> `;
399
+ }
400
+ return "sweteam> ";
401
+ }
402
+ export async function runRepl(opts) {
403
+ // Banner
404
+ let recent = [];
405
+ try {
406
+ recent = listSessions()
407
+ .slice(0, 3)
408
+ .map((s) => ({ id: s.id, goal: s.goal }));
409
+ }
410
+ catch {
411
+ // DB may not exist yet on first run
412
+ }
413
+ console.log(renderBanner(recent));
414
+ console.log();
415
+ // Pre-activate session if provided
416
+ if (opts?.initialSession) {
417
+ const s = opts.initialSession;
418
+ activeSession = {
419
+ id: s.id,
420
+ repo: s.repo,
421
+ repoPath: s.repoLocalPath,
422
+ handlers: createSessionHandlers(s.id, s.repo, s.goal, s.repoLocalPath),
423
+ };
424
+ console.log(`Session ${s.id} active. Describe what you want to build.\n`);
425
+ }
426
+ while (true) {
427
+ const line = await promptLine({
428
+ prompt: getPrompt(),
429
+ getCompletions,
430
+ });
431
+ // ── Escape: leave session, go back to sweteam> ──
432
+ if (line === ESCAPE_SIGNAL) {
433
+ if (activeSession) {
434
+ const short = activeSession.repo.split("/").pop() || activeSession.id;
435
+ console.log(`Left session ${activeSession.id} (${short})`);
436
+ activeSession = null;
437
+ }
438
+ continue;
439
+ }
440
+ const trimmed = line.trim();
441
+ if (!trimmed)
442
+ continue;
443
+ // ── / commands always work ──
444
+ if (trimmed.startsWith("/")) {
445
+ const { command, args } = parseReplInput(trimmed);
446
+ if (command === "/exit" || command === "/quit")
447
+ break;
448
+ try {
449
+ await dispatch(command, args);
450
+ }
451
+ catch (err) {
452
+ console.error(friendlyError(err instanceof Error ? err.message : String(err)));
453
+ }
454
+ continue;
455
+ }
456
+ // ── @ commands: only in an active session ──
457
+ if (trimmed.startsWith("@")) {
458
+ if (!activeSession) {
459
+ console.log("No active session. Use /create or /enter first.");
460
+ continue;
461
+ }
462
+ try {
463
+ const stopped = await handleSessionCommand(trimmed, activeSession.handlers);
464
+ if (stopped) {
465
+ activeSession = null;
466
+ }
467
+ // After @build, auto-attach to the live build output
468
+ if (trimmed === "@build" && activeSession) {
469
+ if (isLogActive(activeSession.id)) {
470
+ console.log("Watching build output... (press Enter or Escape to detach)\n");
471
+ await watchBuildLive(activeSession.id);
472
+ // Re-check session status after watching
473
+ const { getSession: gs } = await import("../session/manager.js");
474
+ const updated = gs(activeSession.id);
475
+ if (updated?.status === "awaiting_feedback") {
476
+ console.log("Build complete. Send feedback or @feedback <text>.\n");
477
+ }
478
+ else if (updated?.status === "building") {
479
+ console.log(getStatusDisplay(activeSession.id));
480
+ console.log("\nBuild running in background. Type @status to check progress.\n");
481
+ }
482
+ }
483
+ }
484
+ }
485
+ catch (err) {
486
+ console.error(friendlyError(err instanceof Error ? err.message : String(err)));
487
+ }
488
+ continue;
489
+ }
490
+ // ── Plain text: send to planner if session is active ──
491
+ if (activeSession) {
492
+ try {
493
+ await activeSession.handlers.onMessage(trimmed);
494
+ }
495
+ catch (err) {
496
+ console.error(friendlyError(err instanceof Error ? err.message : String(err)));
497
+ }
498
+ }
499
+ else {
500
+ console.log("No active session. Use /create or /enter to start one.");
501
+ }
502
+ }
503
+ process.exit(0);
504
+ }
505
+ //# sourceMappingURL=repl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.js","sourceRoot":"","sources":["../../src/repl/repl.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAsB,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GAErB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAc,WAAW,EAAE,UAAU,EAAmB,MAAM,yBAAyB,CAAC;AACzG,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAWlE,IAAI,aAAa,GAAyB,IAAI,CAAC;AAE/C,uEAAuE;AAEvE,MAAM,QAAQ,GAAG;IACf,OAAO;IACP,SAAS;IACT,QAAQ;IACR,OAAO;IACP,OAAO;IACP,SAAS;IACT,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;CACC,CAAC;AAEX,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;AAE7E,MAAM,cAAc,GAAG;;;;;;;;;uCASgB,CAAC;AAExC,MAAM,UAAU,cAAc,CAAC,KAAa;IAI1C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAE/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAEjC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,IAA2B,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,GAAG,GAAG,QAAQ;iBACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAChB,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAExC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAQ,QAAgC,CAAC,MAAM,CAC7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAChD,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,OAAO,QAAQ;iBACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAChB,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC;iBACxD,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,wEAAwE;AAExE;;;;GAIG;AACH,SAAS,cAAc,CAAC,SAAiB;IACvC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QACnC,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE/B,mBAAmB;QACnB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,gBAAgB,GAAkB,IAAI,CAAC;QAE3C,SAAS,MAAM,CAAC,MAAe;YAC7B,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,SAAS,EAAE,CAAC;gBACd,aAAa,EAAE,CAAC;YAClB,CAAC;YACD,IAAI,UAAU;gBAAE,aAAa,CAAC,UAAU,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,CAAC,OAAO,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC5C,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,UAAW,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACtB,IAAI,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAChC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,SAAS,cAAc,CAAC,UAAkB,EAAE,SAAiB;YAC3D,SAAS,GAAG,IAAI,CAAC;YACjB,WAAW,GAAG,EAAE,CAAC;YACjB,gBAAgB,GAAG,SAAS,CAAC;YAC7B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,+CAA+C;YAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,UAAU,MAAM,CAAC,CAAC;QAC5D,CAAC;QAED,SAAS,aAAa;YACpB,SAAS,GAAG,KAAK,CAAC;YAClB,WAAW,GAAG,EAAE,CAAC;YACjB,gBAAgB,GAAG,IAAI,CAAC;QAC1B,CAAC;QAED,SAAS,WAAW;YAClB,IAAI,CAAC,gBAAgB;gBAAE,OAAO;YAC9B,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;YACpC,UAAU,CAAC,SAAS,EAAE;gBACpB,IAAI,EAAE,gBAAgB;gBACtB,EAAE,EAAE,gBAAgB;gBACpB,SAAS,EAAE,gBAAgB;gBAC3B,QAAQ;aACT,CAAC,CAAC;YACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,aAAa,EAAE,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAiB,EAAE,EAAE;YACxD,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,KAAK,aAAa;oBAChB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAK,EAAE,KAAK,CAAC,MAAO,EAAE,KAAK,CAAC,KAAM,CAAC,CAAC;oBACnE,MAAM;gBACR,KAAK,QAAQ;oBACX,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,KAAM,CAAC,CAAC;oBAC3C,MAAM;gBACR,KAAK,WAAW;oBACd,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,OAAQ,CAAC,CAAC;oBAC9C,MAAM;gBACR,KAAK,gBAAgB;oBACnB,MAAM,EAAE,CAAC;oBACT,MAAM;gBACR,KAAK,cAAc;oBACjB,cAAc,CAAC,KAAK,CAAC,UAAU,IAAI,gBAAgB,EAAE,KAAK,CAAC,SAAU,CAAC,CAAC;oBACvE,MAAM;gBACR,uEAAuE;YACzE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,qEAAqE;QACrE,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;YAClC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,GAAG,MAAM,EAAE,CAAC;gBACxC,MAAM,CAAC,oFAAoF,CAAC,CAAC;YAC/F,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,SAAS,KAAK,CAAC,IAAY;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAE5B,IAAI,SAAS,EAAE,CAAC;gBACd,oCAAoC;gBACpC,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;oBACnB,kCAAkC;oBAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;oBAC9C,aAAa,EAAE,CAAC;oBAChB,MAAM,CAAC,iCAAiC,CAAC,CAAC;gBAC5C,CAAC;qBAAM,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;oBACxC,6BAA6B;oBAC7B,WAAW,EAAE,CAAC;gBAChB,CAAC;qBAAM,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;oBAC1C,YAAY;oBACZ,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC3B,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAChC,CAAC;gBACH,CAAC;qBAAM,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;oBAC1B,kCAAkC;oBAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;oBAC9C,aAAa,EAAE,CAAC;oBAChB,MAAM,CAAC,iCAAiC,CAAC,CAAC;gBAC5C,CAAC;qBAAM,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;oBACnC,sBAAsB;oBACtB,WAAW,IAAI,GAAG,CAAC;oBACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC5B,CAAC;gBACD,OAAO;YACT,CAAC;YAED,mDAAmD;YACnD,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;gBACrE,MAAM,CAAC,iCAAiC,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,UAAW,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,uEAAuE;AAEvE,KAAK,UAAU,QAAQ,CAAC,OAAe,EAAE,IAAc;IACrD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAC3D,MAAM,UAAU,EAAE,CAAC;YACnB,MAAM;QACR,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACnD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,MAAM,EAAE,CAAC;gBACX,aAAa,GAAG;oBACd,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,QAAQ,EAAE,MAAM,CAAC,aAAa;oBAC9B,QAAQ,EAAE,qBAAqB,CAC7B,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,IAAI,EACX,EAAE,EACF,MAAM,CAAC,aAAa,CACrB;iBACF,CAAC;gBACF,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;YACtE,CAAC;YACD,MAAM;QACR,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;gBAC1C,MAAM;YACR,CAAC;YACD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC7C,MAAM;YACR,CAAC;YACD,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC;YAC9C,aAAa,GAAG;gBACd,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ;gBACR,QAAQ,EAAE,qBAAqB,CAC7B,OAAO,CAAC,EAAE,EACV,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,IAAI,EACZ,QAAQ,CACT;aACF,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,IAAI,IAAI,eAAe,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;YAE7C,oCAAoC;YACpC,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBACpE,+DAA+D;gBAC/D,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC5B,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;oBACrF,MAAM,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBACjC,4DAA4D;oBAC5D,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBACvC,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,mBAAmB,EAAE,CAAC;wBACtD,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;oBACtE,CAAC;yBAAM,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;wBACpD,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;wBAC1C,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC;oBAC/F,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC1C,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;iBAAM,IAAI,OAAO,CAAC,MAAM,KAAK,mBAAmB,EAAE,CAAC;gBAClD,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC1C,gFAAgF;gBAChF,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;gBACzF,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC1C,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;gBAC9F,IAAI,SAAS,EAAE,CAAC;oBACd,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;gBACrF,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;iBAAM,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACxC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACrB,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;gBACxF,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;gBACvE,CAAC;YACH,CAAC;iBAAM,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC7D,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;YACpE,CAAC;iBAAM,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;YACpD,CAAC;YACD,MAAM;QACR,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;gBACzC,MAAM;YACR,CAAC;YACD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAC3D,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM;QACR,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;gBACzC,MAAM;YACR,CAAC;YACD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAC3D,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,6CAA6C;YAC7C,IAAI,aAAa,IAAI,aAAa,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,aAAa,GAAG,IAAI,CAAC;YACvB,CAAC;YACD,MAAM;QACR,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;gBAC9D,MAAM;YACR,CAAC;YACD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAC/D,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,yCAAyC;YACzC,IAAI,aAAa,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,aAAa,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3E,aAAa,GAAG,IAAI,CAAC;YACvB,CAAC;YACD,MAAM;QACR,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAC1E,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;YACtC,MAAM;QACR,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,IAAI,aAAa,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9C,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5B,MAAM;QACR,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,OAAO,CAAC,GAAG,CACT,oBAAoB,OAAO,sCAAsC,CAClE,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,uEAAuE;AAEvE,MAAM,mBAAmB,GAA2B;IAClD,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,iBAAiB,EAAE,UAAU;IAC7B,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,SAAS,SAAS;IAChB,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,KAAK,GACT,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,aAAa,CAAC,EAAE,CAAC;QAC1D,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAC7C,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;gBACpB,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC;gBACpE,QAAQ,GAAG,KAAK,KAAK,GAAG,CAAC;YAC3B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;QACD,OAAO,GAAG,KAAK,GAAG,QAAQ,IAAI,CAAC;IACjC,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAcD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAkB;IAC9C,SAAS;IACT,IAAI,MAAM,GAAoB,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,YAAY,EAAE;aACpB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;IACtC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,mCAAmC;IACnC,IAAI,IAAI,EAAE,cAAc,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;QAC9B,aAAa,GAAG;YACd,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,CAAC,CAAC,aAAa;YACzB,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC;SACvE,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,6CAA6C,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC;YAC5B,MAAM,EAAE,SAAS,EAAE;YACnB,cAAc;SACf,CAAC,CAAC;QAEH,mDAAmD;QACnD,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;YAC3B,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,aAAa,CAAC,EAAE,CAAC;gBACtE,OAAO,CAAC,GAAG,CAAC,gBAAgB,aAAa,CAAC,EAAE,KAAK,KAAK,GAAG,CAAC,CAAC;gBAC3D,aAAa,GAAG,IAAI,CAAC;YACvB,CAAC;YACD,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,+BAA+B;QAC/B,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,OAAO;gBAAE,MAAM;YACtD,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAChC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjF,CAAC;YACD,SAAS;QACX,CAAC;QAED,8CAA8C;QAC9C,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;gBAC/D,SAAS;YACX,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,oBAAoB,CACxC,OAAO,EACP,aAAa,CAAC,QAAQ,CACvB,CAAC;gBACF,IAAI,OAAO,EAAE,CAAC;oBACZ,aAAa,GAAG,IAAI,CAAC;gBACvB,CAAC;gBACD,qDAAqD;gBACrD,IAAI,OAAO,KAAK,QAAQ,IAAI,aAAa,EAAE,CAAC;oBAC1C,IAAI,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC;wBAClC,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;wBAC5E,MAAM,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;wBACvC,yCAAyC;wBACzC,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;wBACjE,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;wBACrC,IAAI,OAAO,EAAE,MAAM,KAAK,mBAAmB,EAAE,CAAC;4BAC5C,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;wBACtE,CAAC;6BAAM,IAAI,OAAO,EAAE,MAAM,KAAK,UAAU,EAAE,CAAC;4BAC1C,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;4BAChD,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;wBAClF,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjF,CAAC;YACD,SAAS;QACX,CAAC;QAED,yDAAyD;QACzD,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC;gBACH,MAAM,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAClD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,wDAAwD,CACzD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,35 @@
1
+ export interface AgentEvent {
2
+ type: "agent-start" | "output" | "agent-end" | "build-complete" | "input-needed" | "input-response";
3
+ id: string;
4
+ role?: string;
5
+ taskId?: string;
6
+ title?: string;
7
+ chunk?: string;
8
+ success?: boolean;
9
+ promptText?: string;
10
+ requestId?: string;
11
+ response?: string;
12
+ ts: number;
13
+ }
14
+ export declare function getLogPath(sessionId: string): string;
15
+ export declare function clearLog(sessionId: string): void;
16
+ export declare function writeEvent(sessionId: string, event: Omit<AgentEvent, "ts">): void;
17
+ export interface LogWatcher {
18
+ stop(): void;
19
+ }
20
+ /**
21
+ * Watch a session's agent log file for new events. Replays existing events
22
+ * from the beginning, then polls for new content every 200ms.
23
+ */
24
+ /**
25
+ * Check whether a session's log file has recent activity, indicating a build
26
+ * is actively running (not a stale leftover from a crashed build).
27
+ */
28
+ export declare function isLogActive(sessionId: string, staleThresholdMs?: number): boolean;
29
+ export declare function watchLog(sessionId: string, onEvent: (event: AgentEvent) => void): LogWatcher;
30
+ /**
31
+ * Wait for an `input-response` event matching the given requestId.
32
+ * Polls the log file every 200ms. Times out after `timeoutMs` (default 5 min).
33
+ */
34
+ export declare function waitForResponse(sessionId: string, requestId: string, timeoutMs?: number): Promise<string | null>;
35
+ //# sourceMappingURL=agent-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-log.d.ts","sourceRoot":"","sources":["../../src/session/agent-log.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,aAAa,GAAG,QAAQ,GAAG,WAAW,GAAG,gBAAgB,GAAG,cAAc,GAAG,gBAAgB,CAAC;IACpG,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAC5B,IAAI,CAGN;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,IAAI,IAAI,CAAC;CACd;AAED;;;GAGG;AACH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAE,MAAe,GAAG,OAAO,CAsBzF;AAED,wBAAgB,QAAQ,CACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GACnC,UAAU,CAyCZ;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,MAAsB,GAChC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA4BxB"}