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,227 @@
1
+ import { eq } from "drizzle-orm";
2
+ import { getDb } from "../db/client.js";
3
+ import { sessions, tasks as tasksTable } from "../db/schema.js";
4
+ import { git, getDefaultBranch } from "../git/git.js";
5
+ import { displayTaskId } from "../orchestrator/orchestrator.js";
6
+ // Human-readable labels for session statuses
7
+ const STATE_LABELS = {
8
+ planning: "Planning",
9
+ building: "Building",
10
+ awaiting_feedback: "Awaiting feedback",
11
+ iterating: "Iterating",
12
+ stopped: "Stopped",
13
+ };
14
+ // @status — Task progress with summary
15
+ export function getStatusDisplay(sessionId) {
16
+ const db = getDb();
17
+ // Prepend session state and goal
18
+ const sessionRows = db
19
+ .select({ status: sessions.status, goal: sessions.goal })
20
+ .from(sessions)
21
+ .where(eq(sessions.id, sessionId))
22
+ .all();
23
+ const headerLines = [];
24
+ if (sessionRows.length > 0) {
25
+ const s = sessionRows[0];
26
+ const label = STATE_LABELS[s.status] ?? s.status;
27
+ headerLines.push(`Session: ${label}`);
28
+ if (s.goal) {
29
+ headerLines.push(`Goal: ${s.goal}`);
30
+ }
31
+ headerLines.push("");
32
+ }
33
+ const taskRows = db
34
+ .select({
35
+ id: tasksTable.id,
36
+ title: tasksTable.title,
37
+ status: tasksTable.status,
38
+ })
39
+ .from(tasksTable)
40
+ .where(eq(tasksTable.sessionId, sessionId))
41
+ .orderBy(tasksTable.order)
42
+ .all();
43
+ if (taskRows.length === 0) {
44
+ return headerLines.join("\n") + "No tasks yet. Finalize the plan and type @build.";
45
+ }
46
+ const counts = {
47
+ queued: 0,
48
+ running: 0,
49
+ reviewing: 0,
50
+ fixing: 0,
51
+ done: 0,
52
+ failed: 0,
53
+ blocked: 0,
54
+ };
55
+ const lines = [...headerLines, "Task Status:"];
56
+ for (const task of taskRows) {
57
+ const status = task.status;
58
+ if (status in counts)
59
+ counts[status]++;
60
+ let icon;
61
+ switch (task.status) {
62
+ case "done":
63
+ icon = "✓";
64
+ break;
65
+ case "running":
66
+ icon = "▶";
67
+ break;
68
+ case "reviewing":
69
+ icon = "⟳";
70
+ break;
71
+ case "fixing":
72
+ icon = "🔧";
73
+ break;
74
+ case "failed":
75
+ icon = "✗";
76
+ break;
77
+ case "blocked":
78
+ icon = "⊘";
79
+ break;
80
+ default:
81
+ icon = "○";
82
+ }
83
+ lines.push(` ${icon} ${displayTaskId(task.id)} ${task.title} [${task.status}]`);
84
+ }
85
+ const total = taskRows.length;
86
+ const doneCount = counts.done;
87
+ const pct = total > 0 ? Math.round((doneCount / total) * 100) : 0;
88
+ const bar = "█".repeat(Math.floor(pct / 5)) + "░".repeat(20 - Math.floor(pct / 5));
89
+ lines.push("");
90
+ lines.push(`Progress: [${bar}] ${pct}% (${doneCount}/${total})`);
91
+ lines.push(` Queued: ${counts.queued} | Running: ${counts.running} | Done: ${counts.done} | Failed: ${counts.failed} | Blocked: ${counts.blocked}`);
92
+ return lines.join("\n");
93
+ }
94
+ // @plan — Display current plan
95
+ export function getPlanDisplay(sessionId) {
96
+ const db = getDb();
97
+ const rows = db
98
+ .select({ planJson: sessions.planJson })
99
+ .from(sessions)
100
+ .where(eq(sessions.id, sessionId))
101
+ .all();
102
+ if (rows.length === 0 || !rows[0].planJson) {
103
+ return "No plan finalized yet.";
104
+ }
105
+ try {
106
+ const plan = JSON.parse(rows[0].planJson);
107
+ if (plan.tasks && Array.isArray(plan.tasks)) {
108
+ const lines = ["Current Plan:", ""];
109
+ for (const task of plan.tasks) {
110
+ lines.push(` ${task.id}: ${task.title}`);
111
+ if (task.description) {
112
+ lines.push(` ${task.description}`);
113
+ }
114
+ }
115
+ return lines.join("\n");
116
+ }
117
+ return rows[0].planJson;
118
+ }
119
+ catch {
120
+ return rows[0].planJson;
121
+ }
122
+ }
123
+ // @diff — Cumulative diff
124
+ export function getDiffDisplay(sessionId) {
125
+ const db = getDb();
126
+ const rows = db
127
+ .select({
128
+ workingBranch: sessions.workingBranch,
129
+ repoLocalPath: sessions.repoLocalPath,
130
+ })
131
+ .from(sessions)
132
+ .where(eq(sessions.id, sessionId))
133
+ .all();
134
+ if (rows.length === 0 || !rows[0].repoLocalPath || !rows[0].workingBranch) {
135
+ return "No diff available.";
136
+ }
137
+ try {
138
+ const defaultBranch = getDefaultBranch(rows[0].repoLocalPath);
139
+ const diff = git(["diff", `${defaultBranch}...${rows[0].workingBranch}`], rows[0].repoLocalPath);
140
+ return diff || "No changes yet.";
141
+ }
142
+ catch {
143
+ return "Could not generate diff.";
144
+ }
145
+ }
146
+ // @pr — PR URL
147
+ export function getPrDisplay(sessionId) {
148
+ const db = getDb();
149
+ const rows = db
150
+ .select({ prUrl: sessions.prUrl, prNumber: sessions.prNumber })
151
+ .from(sessions)
152
+ .where(eq(sessions.id, sessionId))
153
+ .all();
154
+ if (rows.length === 0 || !rows[0].prUrl) {
155
+ return "No PR created yet.";
156
+ }
157
+ return `PR #${rows[0].prNumber}: ${rows[0].prUrl}`;
158
+ }
159
+ // @tasks — Detailed task list
160
+ export function getTasksDisplay(sessionId) {
161
+ const db = getDb();
162
+ const taskRows = db
163
+ .select({
164
+ id: tasksTable.id,
165
+ title: tasksTable.title,
166
+ status: tasksTable.status,
167
+ reviewVerdict: tasksTable.reviewVerdict,
168
+ reviewCycles: tasksTable.reviewCycles,
169
+ })
170
+ .from(tasksTable)
171
+ .where(eq(tasksTable.sessionId, sessionId))
172
+ .orderBy(tasksTable.order)
173
+ .all();
174
+ if (taskRows.length === 0) {
175
+ return "No tasks defined.";
176
+ }
177
+ const lines = ["Tasks:"];
178
+ for (const task of taskRows) {
179
+ const review = task.reviewVerdict
180
+ ? ` (review: ${task.reviewVerdict}, cycles: ${task.reviewCycles})`
181
+ : "";
182
+ lines.push(` ${displayTaskId(task.id)}: ${task.title} [${task.status}]${review}`);
183
+ }
184
+ return lines.join("\n");
185
+ }
186
+ // @help
187
+ export function getHelpDisplay(sessionId) {
188
+ let status = null;
189
+ if (sessionId) {
190
+ const db = getDb();
191
+ const rows = db
192
+ .select({ status: sessions.status })
193
+ .from(sessions)
194
+ .where(eq(sessions.id, sessionId))
195
+ .all();
196
+ if (rows.length > 0) {
197
+ status = rows[0].status;
198
+ }
199
+ }
200
+ const na = " (not applicable now)";
201
+ const lines = [];
202
+ if (status) {
203
+ lines.push(`Session state: ${STATE_LABELS[status] ?? status}`);
204
+ lines.push("");
205
+ }
206
+ lines.push("Session commands (@ prefix):");
207
+ lines.push("");
208
+ // @build only relevant during planning
209
+ const buildNote = status && status !== "planning" ? na : "";
210
+ lines.push(` @build Finalize plan and start autonomous coding${buildNote}`);
211
+ lines.push(" @status Show current task progress dashboard");
212
+ lines.push(" @plan Re-display the current plan");
213
+ // @feedback only relevant when awaiting feedback or after build
214
+ const fbNote = status && !["awaiting_feedback", "building"].includes(status) ? na : "";
215
+ lines.push(` @feedback Give feedback on completed work${fbNote}`);
216
+ lines.push(" @diff Show the current cumulative diff");
217
+ lines.push(" @pr Show the PR link");
218
+ lines.push(" @tasks List all tasks and their statuses");
219
+ lines.push(" @stop Stop this session");
220
+ lines.push(" @help Show this help message");
221
+ lines.push("");
222
+ lines.push(" Escape Leave session (back to sweteam>)");
223
+ lines.push("");
224
+ lines.push("Any other text is sent to the planner.");
225
+ return lines.join("\n");
226
+ }
227
+ //# sourceMappingURL=in-session-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-session-commands.js","sourceRoot":"","sources":["../../src/session/in-session-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEhE,6CAA6C;AAC7C,MAAM,YAAY,GAA2B;IAC3C,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,iBAAiB,EAAE,mBAAmB;IACtC,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,uCAAuC;AACvC,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IAEnB,iCAAiC;IACjC,MAAM,WAAW,GAAG,EAAE;SACnB,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;SACxD,IAAI,CAAC,QAAQ,CAAC;SACd,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;SACjC,GAAG,EAAE,CAAC;IAET,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,MAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAC3D,WAAW,CAAC,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACX,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,QAAQ,GAAG,EAAE;SAChB,MAAM,CAAC;QACN,EAAE,EAAE,UAAU,CAAC,EAAE;QACjB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,MAAM,EAAE,UAAU,CAAC,MAAM;KAC1B,CAAC;SACD,IAAI,CAAC,UAAU,CAAC;SAChB,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;SAC1C,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;SACzB,GAAG,EAAE,CAAC;IAET,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,kDAAkD,CAAC;IACrF,CAAC;IAED,MAAM,MAAM,GAAG;QACb,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;QACV,SAAS,EAAE,CAAC;QACZ,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;KACX,CAAC;IAEF,MAAM,KAAK,GAAa,CAAC,GAAG,WAAW,EAAE,cAAc,CAAC,CAAC;IAEzD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,MAA6B,CAAC;QAClD,IAAI,MAAM,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAEvC,IAAI,IAAY,CAAC;QACjB,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,MAAM;gBACT,IAAI,GAAG,GAAG,CAAC;gBACX,MAAM;YACR,KAAK,SAAS;gBACZ,IAAI,GAAG,GAAG,CAAC;gBACX,MAAM;YACR,KAAK,WAAW;gBACd,IAAI,GAAG,GAAG,CAAC;gBACX,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,GAAG,IAAI,CAAC;gBACZ,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,GAAG,GAAG,CAAC;gBACX,MAAM;YACR,KAAK,SAAS;gBACZ,IAAI,GAAG,GAAG,CAAC;gBACX,MAAM;YACR;gBACE,IAAI,GAAG,GAAG,CAAC;QACf,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC;IAC9B,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAEnF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,cAAc,GAAG,KAAK,GAAG,MAAM,SAAS,IAAI,KAAK,GAAG,CAAC,CAAC;IACjE,KAAK,CAAC,IAAI,CACR,aAAa,MAAM,CAAC,MAAM,eAAe,MAAM,CAAC,OAAO,YAAY,MAAM,CAAC,IAAI,cAAc,MAAM,CAAC,MAAM,eAAe,MAAM,CAAC,OAAO,EAAE,CACzI,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,IAAI,GAAG,EAAE;SACZ,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;SACvC,IAAI,CAAC,QAAQ,CAAC;SACd,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;SACjC,GAAG,EAAE,CAAC;IAET,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC3C,OAAO,wBAAwB,CAAC;IAClC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;YACpC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9B,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC1C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACrB,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;YACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,IAAI,GAAG,EAAE;SACZ,MAAM,CAAC;QACN,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,aAAa,EAAE,QAAQ,CAAC,aAAa;KACtC,CAAC;SACD,IAAI,CAAC,QAAQ,CAAC;SACd,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;SACjC,GAAG,EAAE,CAAC;IAET,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAC1E,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,GAAG,CACd,CAAC,MAAM,EAAE,GAAG,aAAa,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,EACvD,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CACtB,CAAC;QACF,OAAO,IAAI,IAAI,iBAAiB,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,0BAA0B,CAAC;IACpC,CAAC;AACH,CAAC;AAED,eAAe;AACf,MAAM,UAAU,YAAY,CAAC,SAAiB;IAC5C,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,IAAI,GAAG,EAAE;SACZ,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;SAC9D,IAAI,CAAC,QAAQ,CAAC;SACd,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;SACjC,GAAG,EAAE,CAAC;IAET,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QACxC,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,OAAO,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AACrD,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,QAAQ,GAAG,EAAE;SAChB,MAAM,CAAC;QACN,EAAE,EAAE,UAAU,CAAC,EAAE;QACjB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,aAAa,EAAE,UAAU,CAAC,aAAa;QACvC,YAAY,EAAE,UAAU,CAAC,YAAY;KACtC,CAAC;SACD,IAAI,CAAC,UAAU,CAAC;SAChB,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;SAC1C,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;SACzB,GAAG,EAAE,CAAC;IAET,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa;YAC/B,CAAC,CAAC,aAAa,IAAI,CAAC,aAAa,aAAa,IAAI,CAAC,YAAY,GAAG;YAClE,CAAC,CAAC,EAAE,CAAC;QACP,KAAK,CAAC,IAAI,CAAC,KAAK,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,QAAQ;AACR,MAAM,UAAU,cAAc,CAAC,SAAkB;IAC/C,IAAI,MAAM,GAAkB,IAAI,CAAC;IAEjC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,EAAE;aACZ,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;aACnC,IAAI,CAAC,QAAQ,CAAC;aACd,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;aACjC,GAAG,EAAE,CAAC;QACT,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAgB,CAAC;QACpC,CAAC;IACH,CAAC;IAED,MAAM,EAAE,GAAG,uBAAuB,CAAC;IAEnC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,CAAC,IAAI,CAAC,kBAAkB,YAAY,CAAC,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC3C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,uCAAuC;IACvC,MAAM,SAAS,GAAG,MAAM,IAAI,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,KAAK,CAAC,IAAI,CAAC,0DAA0D,SAAS,EAAE,CAAC,CAAC;IAElF,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACjE,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAExD,gEAAgE;IAChE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,KAAK,CAAC,IAAI,CAAC,gDAAgD,MAAM,EAAE,CAAC,CAAC;IAErE,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAC7D,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IAC9D,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACnD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAC7D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IAErD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Handlers for an active session.
3
+ * Each method is self-contained (stores messages, streams output, etc.).
4
+ */
5
+ export interface SessionHandlers {
6
+ /** Send a plain-text message to the planner and stream the response. */
7
+ onMessage: (text: string) => Promise<void>;
8
+ /** Finalize the plan and kick off the autonomous build. */
9
+ onBuild: () => Promise<void>;
10
+ /** Stop the session. */
11
+ onStop: () => Promise<void>;
12
+ /** Process user feedback on completed work. */
13
+ onFeedback: (text: string) => Promise<void>;
14
+ /** Show the current plan. */
15
+ onPlan: () => Promise<void>;
16
+ /** Show task progress. */
17
+ onStatus: () => Promise<void>;
18
+ /** Show cumulative diff. */
19
+ onDiff: () => Promise<void>;
20
+ /** Show PR link. */
21
+ onPr: () => Promise<void>;
22
+ /** List tasks. */
23
+ onTasks: () => Promise<void>;
24
+ /** Show available session commands. */
25
+ onHelp: () => void;
26
+ }
27
+ /**
28
+ * Create handlers for a session. Used by both the REPL (active-session
29
+ * mode) and the standalone CLI flow.
30
+ */
31
+ export declare function createSessionHandlers(sessionId: string, repo: string, goal: string, repoPath: string): SessionHandlers;
32
+ /**
33
+ * Handle an @-command inside an active session.
34
+ * Returns true if the command was a @stop (session ended).
35
+ */
36
+ export declare function handleSessionCommand(input: string, handlers: SessionHandlers): Promise<boolean>;
37
+ //# sourceMappingURL=interactive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/session/interactive.ts"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,2DAA2D;IAC3D,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,wBAAwB;IACxB,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,+CAA+C;IAC/C,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,6BAA6B;IAC7B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,4BAA4B;IAC5B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,oBAAoB;IACpB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,kBAAkB;IAClB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,uCAAuC;IACvC,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,eAAe,CA8LjB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,OAAO,CAAC,CA6BlB"}
@@ -0,0 +1,226 @@
1
+ import { eq } from "drizzle-orm";
2
+ import { getDb } from "../db/client.js";
3
+ import { sessions } from "../db/schema.js";
4
+ import { stopSession, addMessage, getSession } from "./manager.js";
5
+ import { invokePlanner } from "../planner/planner.js";
6
+ import { handleBuild } from "../orchestrator/build-handler.js";
7
+ import { handleFeedback } from "../orchestrator/feedback-handler.js";
8
+ import { transition } from "./state-machine.js";
9
+ import { AgentPanel } from "../ui/agent-panel.js";
10
+ import { writeEvent } from "./agent-log.js";
11
+ import { friendlyError } from "../orchestrator/error-handling.js";
12
+ import { getStatusDisplay, getPlanDisplay, getDiffDisplay, getPrDisplay, getTasksDisplay, getHelpDisplay, } from "./in-session-commands.js";
13
+ /**
14
+ * Create handlers for a session. Used by both the REPL (active-session
15
+ * mode) and the standalone CLI flow.
16
+ */
17
+ export function createSessionHandlers(sessionId, repo, goal, repoPath) {
18
+ // Hydrate lastPlannerResponse from DB so @build works after re-entry
19
+ const existingSession = getSession(sessionId);
20
+ let lastPlannerResponse = "";
21
+ if (existingSession?.planJson) {
22
+ try {
23
+ const parsed = JSON.parse(existingSession.planJson);
24
+ lastPlannerResponse = parsed.raw ?? existingSession.planJson;
25
+ }
26
+ catch {
27
+ lastPlannerResponse = existingSession.planJson;
28
+ }
29
+ }
30
+ let currentGoal = goal;
31
+ let buildInProgress = false;
32
+ return {
33
+ onMessage: async (text) => {
34
+ // Capture the first user message as the session goal if not set
35
+ if (!currentGoal) {
36
+ currentGoal = text.length > 120 ? text.slice(0, 117) + "..." : text;
37
+ const db = getDb();
38
+ db.update(sessions)
39
+ .set({ goal: currentGoal, updatedAt: new Date() })
40
+ .where(eq(sessions.id, sessionId))
41
+ .run();
42
+ }
43
+ // Route based on session status
44
+ const session = getSession(sessionId);
45
+ if (session?.status === "building" || session?.status === "iterating") {
46
+ // Build or iteration is in progress — queue message as feedback for when it completes
47
+ console.log("A build is currently in progress. Your message will be treated as feedback when it completes.");
48
+ console.log("Use @stop to cancel the current build first, or wait for it to finish.\n");
49
+ addMessage(sessionId, "user", text, { phase: "feedback-pending" });
50
+ return;
51
+ }
52
+ if (session?.status === "awaiting_feedback") {
53
+ // Already awaiting feedback — route directly to feedback handler
54
+ await handleFeedback(sessionId, text);
55
+ return;
56
+ }
57
+ // Resume stopped session into planning
58
+ if (session?.status === "stopped") {
59
+ transition(sessionId, "planning");
60
+ }
61
+ // Default: planning — invoke planner
62
+ addMessage(sessionId, "user", text, { phase: "planning" });
63
+ const panel = new AgentPanel();
64
+ const plannerId = "planner";
65
+ panel.addAgent(plannerId, "Planner", sessionId, currentGoal);
66
+ writeEvent(sessionId, { type: "agent-start", id: plannerId, role: "Planner", taskId: sessionId, title: currentGoal });
67
+ try {
68
+ const response = await invokePlanner(sessionId, repo, currentGoal, repoPath, (chunk) => {
69
+ panel.appendOutput(plannerId, chunk);
70
+ writeEvent(sessionId, { type: "output", id: plannerId, chunk });
71
+ });
72
+ panel.completeAgent(plannerId, true);
73
+ writeEvent(sessionId, { type: "agent-end", id: plannerId, success: true });
74
+ panel.destroy();
75
+ if (response.trim()) {
76
+ console.log("\n" + response + "\n");
77
+ }
78
+ else {
79
+ console.log("\n(planner returned empty response)\n");
80
+ }
81
+ lastPlannerResponse = response;
82
+ addMessage(sessionId, "agent", response, { phase: "planning" });
83
+ // Persist draft plan so it survives session re-entry
84
+ const db = getDb();
85
+ db.update(sessions)
86
+ .set({ planJson: response, updatedAt: new Date() })
87
+ .where(eq(sessions.id, sessionId))
88
+ .run();
89
+ }
90
+ catch (err) {
91
+ panel.completeAgent(plannerId, false);
92
+ writeEvent(sessionId, { type: "agent-end", id: plannerId, success: false });
93
+ panel.destroy();
94
+ const msg = err instanceof Error ? err.message : String(err);
95
+ const errResponse = `Error invoking planner: ${friendlyError(msg)}`;
96
+ console.error("\n" + errResponse + "\n");
97
+ addMessage(sessionId, "agent", errResponse, { phase: "planning" });
98
+ }
99
+ },
100
+ onBuild: async () => {
101
+ // Guard against concurrent builds
102
+ if (buildInProgress) {
103
+ console.log("A build is already in progress. Use @stop to cancel it first.");
104
+ return;
105
+ }
106
+ // Check session state
107
+ const currentSession = getSession(sessionId);
108
+ if (currentSession?.status === "building" || currentSession?.status === "iterating") {
109
+ console.log("A build is already in progress. Use @stop to cancel it first.");
110
+ return;
111
+ }
112
+ if (!lastPlannerResponse) {
113
+ // Try loading plan from DB as a fallback (e.g. after session re-entry)
114
+ const s = getSession(sessionId);
115
+ if (s?.planJson) {
116
+ lastPlannerResponse = s.planJson;
117
+ }
118
+ else {
119
+ console.log("No plan generated yet. Chat with the planner first, then type @build.");
120
+ return;
121
+ }
122
+ }
123
+ console.log("\nPlan finalized. Starting autonomous build...\n");
124
+ // Run build in the background so the REPL stays responsive.
125
+ // The user sees output via the agent log watcher and can
126
+ // detach (Escape/Enter) and reattach (/enter) freely.
127
+ const planSnapshot = lastPlannerResponse;
128
+ buildInProgress = true;
129
+ handleBuild(sessionId, planSnapshot)
130
+ .catch((err) => {
131
+ const msg = err instanceof Error ? err.message : String(err);
132
+ console.error(`\nBuild failed: ${friendlyError(msg)}\n`);
133
+ addMessage(sessionId, "system", `Build failed: ${msg}`);
134
+ // Recover to planning state so user can retry
135
+ try {
136
+ transition(sessionId, "planning");
137
+ }
138
+ catch { /* already transitioned */ }
139
+ })
140
+ .finally(() => {
141
+ buildInProgress = false;
142
+ });
143
+ // Give the build a moment to start writing events, then attach
144
+ await new Promise((r) => setTimeout(r, 300));
145
+ },
146
+ onStop: async () => {
147
+ buildInProgress = false;
148
+ stopSession(sessionId);
149
+ console.log(`\nSession ${sessionId} stopped.\n`);
150
+ },
151
+ onFeedback: async (text) => {
152
+ console.log("\nProcessing feedback...\n");
153
+ try {
154
+ await handleFeedback(sessionId, text);
155
+ console.log("Feedback iteration complete. PR updated.\n");
156
+ }
157
+ catch (err) {
158
+ const msg = err instanceof Error ? err.message : String(err);
159
+ console.error(`Feedback processing failed: ${msg}`);
160
+ addMessage(sessionId, "system", `Feedback failed: ${msg}`);
161
+ }
162
+ },
163
+ onPlan: async () => {
164
+ const plan = await getPlanDisplay(sessionId);
165
+ console.log(plan ?? "No plan finalized yet.");
166
+ },
167
+ onStatus: async () => {
168
+ console.log(await getStatusDisplay(sessionId));
169
+ },
170
+ onDiff: async () => {
171
+ console.log(await getDiffDisplay(sessionId));
172
+ },
173
+ onPr: async () => {
174
+ console.log(await getPrDisplay(sessionId));
175
+ },
176
+ onTasks: async () => {
177
+ console.log(await getTasksDisplay(sessionId));
178
+ },
179
+ onHelp: () => {
180
+ console.log(getHelpDisplay(sessionId));
181
+ },
182
+ };
183
+ }
184
+ /**
185
+ * Handle an @-command inside an active session.
186
+ * Returns true if the command was a @stop (session ended).
187
+ */
188
+ export async function handleSessionCommand(input, handlers) {
189
+ const trimmed = input.trim();
190
+ if (trimmed === "@build") {
191
+ await handlers.onBuild();
192
+ }
193
+ else if (trimmed === "@stop") {
194
+ await handlers.onStop();
195
+ return true; // session ended
196
+ }
197
+ else if (trimmed === "@help") {
198
+ handlers.onHelp();
199
+ }
200
+ else if (trimmed === "@plan") {
201
+ await handlers.onPlan();
202
+ }
203
+ else if (trimmed === "@status") {
204
+ await handlers.onStatus();
205
+ }
206
+ else if (trimmed === "@diff") {
207
+ await handlers.onDiff();
208
+ }
209
+ else if (trimmed === "@pr") {
210
+ await handlers.onPr();
211
+ }
212
+ else if (trimmed === "@tasks") {
213
+ await handlers.onTasks();
214
+ }
215
+ else if (trimmed === "@feedback") {
216
+ console.log("Usage: @feedback <your feedback text>");
217
+ }
218
+ else if (trimmed.startsWith("@feedback ")) {
219
+ await handlers.onFeedback(trimmed.slice("@feedback ".length));
220
+ }
221
+ else {
222
+ console.log(`Unknown command: ${trimmed}. Type @help for session commands.`);
223
+ }
224
+ return false;
225
+ }
226
+ //# sourceMappingURL=interactive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/session/interactive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,YAAY,EACZ,eAAe,EACf,cAAc,GACf,MAAM,0BAA0B,CAAC;AA6BlC;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,SAAiB,EACjB,IAAY,EACZ,IAAY,EACZ,QAAgB;IAEhB,qEAAqE;IACrE,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAI,mBAAmB,GAAG,EAAE,CAAC;IAC7B,IAAI,eAAe,EAAE,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACpD,mBAAmB,GAAG,MAAM,CAAC,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC;QAC/D,CAAC;QAAC,MAAM,CAAC;YACP,mBAAmB,GAAG,eAAe,CAAC,QAAQ,CAAC;QACjD,CAAC;IACH,CAAC;IACD,IAAI,WAAW,GAAG,IAAI,CAAC;IACvB,IAAI,eAAe,GAAG,KAAK,CAAC;IAE5B,OAAO;QACL,SAAS,EAAE,KAAK,EAAE,IAAY,EAAiB,EAAE;YAC/C,gEAAgE;YAChE,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;gBACpE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;gBACnB,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;qBAChB,GAAG,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;qBACjD,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;qBACjC,GAAG,EAAE,CAAC;YACX,CAAC;YAED,gCAAgC;YAChC,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;YACtC,IAAI,OAAO,EAAE,MAAM,KAAK,UAAU,IAAI,OAAO,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;gBACtE,sFAAsF;gBACtF,OAAO,CAAC,GAAG,CAAC,+FAA+F,CAAC,CAAC;gBAC7G,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;gBACxF,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBACnE,OAAO;YACT,CAAC;YACD,IAAI,OAAO,EAAE,MAAM,KAAK,mBAAmB,EAAE,CAAC;gBAC5C,iEAAiE;gBACjE,MAAM,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBACtC,OAAO;YACT,CAAC;YAED,uCAAuC;YACvC,IAAI,OAAO,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;gBAClC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACpC,CAAC;YAED,qCAAqC;YACrC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;YAE3D,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,SAAS,CAAC;YAC5B,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;YAC7D,UAAU,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;YAEtH,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,aAAa,CAClC,SAAS,EACT,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,CAAC,KAAK,EAAE,EAAE;oBACR,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;oBACrC,UAAU,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;gBAClE,CAAC,CACF,CAAC;gBACF,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBACrC,UAAU,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3E,KAAK,CAAC,OAAO,EAAE,CAAC;gBAEhB,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;oBACpB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC;gBACtC,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;gBACvD,CAAC;gBAED,mBAAmB,GAAG,QAAQ,CAAC;gBAC/B,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;gBAEhE,qDAAqD;gBACrD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;gBACnB,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;qBAChB,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;qBAClD,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;qBACjC,GAAG,EAAE,CAAC;YACX,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBACtC,UAAU,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC5E,KAAK,CAAC,OAAO,EAAE,CAAC;gBAEhB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7D,MAAM,WAAW,GAAG,2BAA2B,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpE,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,WAAW,GAAG,IAAI,CAAC,CAAC;gBACzC,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAED,OAAO,EAAE,KAAK,IAAmB,EAAE;YACjC,kCAAkC;YAClC,IAAI,eAAe,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;gBAC7E,OAAO;YACT,CAAC;YAED,sBAAsB;YACtB,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;YAC7C,IAAI,cAAc,EAAE,MAAM,KAAK,UAAU,IAAI,cAAc,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;gBACpF,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;gBAC7E,OAAO;YACT,CAAC;YAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACzB,uEAAuE;gBACvE,MAAM,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;gBAChC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;oBAChB,mBAAmB,GAAG,CAAC,CAAC,QAAQ,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CACT,uEAAuE,CACxE,CAAC;oBACF,OAAO;gBACT,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;YAEhE,4DAA4D;YAC5D,yDAAyD;YACzD,sDAAsD;YACtD,MAAM,YAAY,GAAG,mBAAmB,CAAC;YACzC,eAAe,GAAG,IAAI,CAAC;YACvB,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC;iBACjC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7D,OAAO,CAAC,KAAK,CAAC,mBAAmB,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACzD,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,iBAAiB,GAAG,EAAE,CAAC,CAAC;gBACxD,8CAA8C;gBAC9C,IAAI,CAAC;oBAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,0BAA0B,CAAC,CAAC;YACjF,CAAC,CAAC;iBACD,OAAO,CAAC,GAAG,EAAE;gBACZ,eAAe,GAAG,KAAK,CAAC;YAC1B,CAAC,CAAC,CAAC;YAEL,+DAA+D;YAC/D,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,EAAE,KAAK,IAAmB,EAAE;YAChC,eAAe,GAAG,KAAK,CAAC;YACxB,WAAW,CAAC,SAAS,CAAC,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,aAAa,SAAS,aAAa,CAAC,CAAC;QACnD,CAAC;QAED,UAAU,EAAE,KAAK,EAAE,IAAY,EAAiB,EAAE;YAChD,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC5D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7D,OAAO,CAAC,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC;gBACpD,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,oBAAoB,GAAG,EAAE,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,MAAM,EAAE,KAAK,IAAmB,EAAE;YAChC,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,wBAAwB,CAAC,CAAC;QAChD,CAAC;QAED,QAAQ,EAAE,KAAK,IAAmB,EAAE;YAClC,OAAO,CAAC,GAAG,CAAC,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,EAAE,KAAK,IAAmB,EAAE;YAChC,OAAO,CAAC,GAAG,CAAC,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,EAAE,KAAK,IAAmB,EAAE;YAC9B,OAAO,CAAC,GAAG,CAAC,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,EAAE,KAAK,IAAmB,EAAE;YACjC,OAAO,CAAC,GAAG,CAAC,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,EAAE,GAAS,EAAE;YACjB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAAa,EACb,QAAyB;IAEzB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAE7B,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;SAAM,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QAC/B,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,CAAC,gBAAgB;IAC/B,CAAC;SAAM,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QAC/B,QAAQ,CAAC,MAAM,EAAE,CAAC;IACpB,CAAC;SAAM,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QAC/B,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC1B,CAAC;SAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC;SAAM,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QAC/B,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC1B,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QAC7B,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;SAAM,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;SAAM,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACvD,CAAC;SAAM,IAAI,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC5C,MAAM,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,oCAAoC,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,63 @@
1
+ export interface CreateSessionOpts {
2
+ repoInput: string;
3
+ goal?: string;
4
+ /** When true, repoInput is treated as a local path (skip clone). */
5
+ local?: boolean;
6
+ }
7
+ export declare function createSession(opts: CreateSessionOpts): Promise<{
8
+ id: string;
9
+ repo: string;
10
+ repoLocalPath: string;
11
+ workingBranch: string;
12
+ }>;
13
+ export declare function getSession(id: string): {
14
+ id: string;
15
+ repo: string;
16
+ repoLocalPath: string | null;
17
+ goal: string;
18
+ status: string;
19
+ planJson: string | null;
20
+ prUrl: string | null;
21
+ prNumber: number | null;
22
+ workingBranch: string | null;
23
+ createdAt: Date;
24
+ updatedAt: Date;
25
+ stoppedAt: Date | null;
26
+ } | null;
27
+ export declare function listSessions(): {
28
+ id: string;
29
+ repo: string;
30
+ goal: string;
31
+ status: string;
32
+ prUrl: string | null;
33
+ prNumber: number | null;
34
+ createdAt: Date;
35
+ updatedAt: Date;
36
+ }[];
37
+ export interface EnrichedSession {
38
+ id: string;
39
+ repo: string;
40
+ goal: string;
41
+ status: string;
42
+ prUrl: string | null;
43
+ prNumber: number | null;
44
+ createdAt: Date;
45
+ updatedAt: Date;
46
+ planReady: boolean;
47
+ messageCount: number;
48
+ tasksDone: number;
49
+ tasksTotal: number;
50
+ }
51
+ export declare function listSessionsEnriched(): EnrichedSession[];
52
+ export declare function stopSession(id: string): void;
53
+ export declare function deleteSession(id: string): void;
54
+ export declare function addMessage(sessionId: string, role: "user" | "agent" | "system", content: string, metadata?: Record<string, unknown>): string;
55
+ export declare function getMessages(sessionId: string, limit?: number): {
56
+ id: string;
57
+ sessionId: string;
58
+ role: string;
59
+ content: string;
60
+ metadata: string | null;
61
+ createdAt: Date;
62
+ }[];
63
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/session/manager.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC,CAwDrF;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM;;;;;;;;;;;;;SAapC;AAED,wBAAgB,YAAY;;;;;;;;;IAe3B;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,oBAAoB,IAAI,eAAe,EAAE,CAgDxD;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAe5C;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAwC9C;AAED,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,EACjC,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,MAAM,CAgBR;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;;;;;;;IAe5D"}