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.
- package/LICENSE +21 -0
- package/README.md +587 -0
- package/dist/adapters/adapter.d.ts +19 -0
- package/dist/adapters/adapter.d.ts.map +1 -0
- package/dist/adapters/adapter.js +20 -0
- package/dist/adapters/adapter.js.map +1 -0
- package/dist/adapters/claude-code.d.ts +13 -0
- package/dist/adapters/claude-code.d.ts.map +1 -0
- package/dist/adapters/claude-code.js +150 -0
- package/dist/adapters/claude-code.js.map +1 -0
- package/dist/adapters/codex.d.ts +13 -0
- package/dist/adapters/codex.d.ts.map +1 -0
- package/dist/adapters/codex.js +100 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/custom.d.ts +16 -0
- package/dist/adapters/custom.d.ts.map +1 -0
- package/dist/adapters/custom.js +167 -0
- package/dist/adapters/custom.js.map +1 -0
- package/dist/adapters/opencode.d.ts +13 -0
- package/dist/adapters/opencode.d.ts.map +1 -0
- package/dist/adapters/opencode.js +100 -0
- package/dist/adapters/opencode.js.map +1 -0
- package/dist/adapters/prompt-detection.d.ts +14 -0
- package/dist/adapters/prompt-detection.d.ts.map +1 -0
- package/dist/adapters/prompt-detection.js +74 -0
- package/dist/adapters/prompt-detection.js.map +1 -0
- package/dist/commands/create.d.ts +8 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +38 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/delete.d.ts +2 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +22 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/enter.d.ts +19 -0
- package/dist/commands/enter.d.ts.map +1 -0
- package/dist/commands/enter.js +73 -0
- package/dist/commands/enter.js.map +1 -0
- package/dist/commands/init.d.ts +14 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +52 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +8 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +98 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/show.d.ts +33 -0
- package/dist/commands/show.d.ts.map +1 -0
- package/dist/commands/show.js +142 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/commands/stop.d.ts +2 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +10 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/config/discovery.d.ts +12 -0
- package/dist/config/discovery.d.ts.map +1 -0
- package/dist/config/discovery.js +62 -0
- package/dist/config/discovery.js.map +1 -0
- package/dist/config/gh-auth.d.ts +5 -0
- package/dist/config/gh-auth.d.ts.map +1 -0
- package/dist/config/gh-auth.js +18 -0
- package/dist/config/gh-auth.js.map +1 -0
- package/dist/config/loader.d.ts +38 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +72 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/db/client.d.ts +10 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +84 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/schema.d.ts +805 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +66 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/git/git.d.ts +29 -0
- package/dist/git/git.d.ts.map +1 -0
- package/dist/git/git.js +200 -0
- package/dist/git/git.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +154 -0
- package/dist/index.js.map +1 -0
- package/dist/lifecycle.d.ts +5 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +63 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/orchestrator/build-handler.d.ts +20 -0
- package/dist/orchestrator/build-handler.d.ts.map +1 -0
- package/dist/orchestrator/build-handler.js +212 -0
- package/dist/orchestrator/build-handler.js.map +1 -0
- package/dist/orchestrator/dag.d.ts +10 -0
- package/dist/orchestrator/dag.d.ts.map +1 -0
- package/dist/orchestrator/dag.js +70 -0
- package/dist/orchestrator/dag.js.map +1 -0
- package/dist/orchestrator/error-handling.d.ts +21 -0
- package/dist/orchestrator/error-handling.d.ts.map +1 -0
- package/dist/orchestrator/error-handling.js +124 -0
- package/dist/orchestrator/error-handling.js.map +1 -0
- package/dist/orchestrator/feedback-handler.d.ts +36 -0
- package/dist/orchestrator/feedback-handler.d.ts.map +1 -0
- package/dist/orchestrator/feedback-handler.js +316 -0
- package/dist/orchestrator/feedback-handler.js.map +1 -0
- package/dist/orchestrator/orchestrator.d.ts +21 -0
- package/dist/orchestrator/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator/orchestrator.js +188 -0
- package/dist/orchestrator/orchestrator.js.map +1 -0
- package/dist/orchestrator/parallel-runner.d.ts +3 -0
- package/dist/orchestrator/parallel-runner.d.ts.map +1 -0
- package/dist/orchestrator/parallel-runner.js +111 -0
- package/dist/orchestrator/parallel-runner.js.map +1 -0
- package/dist/orchestrator/reviewer.d.ts +20 -0
- package/dist/orchestrator/reviewer.d.ts.map +1 -0
- package/dist/orchestrator/reviewer.js +175 -0
- package/dist/orchestrator/reviewer.js.map +1 -0
- package/dist/orchestrator/task-runner.d.ts +20 -0
- package/dist/orchestrator/task-runner.d.ts.map +1 -0
- package/dist/orchestrator/task-runner.js +122 -0
- package/dist/orchestrator/task-runner.js.map +1 -0
- package/dist/orchestrator/test-runner.d.ts +8 -0
- package/dist/orchestrator/test-runner.d.ts.map +1 -0
- package/dist/orchestrator/test-runner.js +81 -0
- package/dist/orchestrator/test-runner.js.map +1 -0
- package/dist/planner/plan-parser.d.ts +14 -0
- package/dist/planner/plan-parser.d.ts.map +1 -0
- package/dist/planner/plan-parser.js +182 -0
- package/dist/planner/plan-parser.js.map +1 -0
- package/dist/planner/planner.d.ts +9 -0
- package/dist/planner/planner.d.ts.map +1 -0
- package/dist/planner/planner.js +151 -0
- package/dist/planner/planner.js.map +1 -0
- package/dist/repl/repl.d.ts +19 -0
- package/dist/repl/repl.d.ts.map +1 -0
- package/dist/repl/repl.js +505 -0
- package/dist/repl/repl.js.map +1 -0
- package/dist/session/agent-log.d.ts +35 -0
- package/dist/session/agent-log.d.ts.map +1 -0
- package/dist/session/agent-log.js +120 -0
- package/dist/session/agent-log.js.map +1 -0
- package/dist/session/chat.d.ts +38 -0
- package/dist/session/chat.d.ts.map +1 -0
- package/dist/session/chat.js +106 -0
- package/dist/session/chat.js.map +1 -0
- package/dist/session/cost-tracker.d.ts +14 -0
- package/dist/session/cost-tracker.d.ts.map +1 -0
- package/dist/session/cost-tracker.js +61 -0
- package/dist/session/cost-tracker.js.map +1 -0
- package/dist/session/export.d.ts +2 -0
- package/dist/session/export.d.ts.map +1 -0
- package/dist/session/export.js +105 -0
- package/dist/session/export.js.map +1 -0
- package/dist/session/in-session-commands.d.ts +7 -0
- package/dist/session/in-session-commands.d.ts.map +1 -0
- package/dist/session/in-session-commands.js +227 -0
- package/dist/session/in-session-commands.js.map +1 -0
- package/dist/session/interactive.d.ts +37 -0
- package/dist/session/interactive.d.ts.map +1 -0
- package/dist/session/interactive.js +226 -0
- package/dist/session/interactive.js.map +1 -0
- package/dist/session/manager.d.ts +63 -0
- package/dist/session/manager.d.ts.map +1 -0
- package/dist/session/manager.js +229 -0
- package/dist/session/manager.js.map +1 -0
- package/dist/session/resume.d.ts +7 -0
- package/dist/session/resume.d.ts.map +1 -0
- package/dist/session/resume.js +53 -0
- package/dist/session/resume.js.map +1 -0
- package/dist/session/state-machine.d.ts +4 -0
- package/dist/session/state-machine.d.ts.map +1 -0
- package/dist/session/state-machine.js +47 -0
- package/dist/session/state-machine.js.map +1 -0
- package/dist/tui/chat-ui.d.ts +16 -0
- package/dist/tui/chat-ui.d.ts.map +1 -0
- package/dist/tui/chat-ui.js +19 -0
- package/dist/tui/chat-ui.js.map +1 -0
- package/dist/tui/dashboard.d.ts +17 -0
- package/dist/tui/dashboard.d.ts.map +1 -0
- package/dist/tui/dashboard.js +57 -0
- package/dist/tui/dashboard.js.map +1 -0
- package/dist/tui/session-list.d.ts +18 -0
- package/dist/tui/session-list.d.ts.map +1 -0
- package/dist/tui/session-list.js +26 -0
- package/dist/tui/session-list.js.map +1 -0
- package/dist/ui/agent-panel.d.ts +9 -0
- package/dist/ui/agent-panel.d.ts.map +1 -0
- package/dist/ui/agent-panel.js +100 -0
- package/dist/ui/agent-panel.js.map +1 -0
- package/dist/ui/banner.d.ts +10 -0
- package/dist/ui/banner.d.ts.map +1 -0
- package/dist/ui/banner.js +100 -0
- package/dist/ui/banner.js.map +1 -0
- package/dist/ui/markdown.d.ts +19 -0
- package/dist/ui/markdown.d.ts.map +1 -0
- package/dist/ui/markdown.js +174 -0
- package/dist/ui/markdown.js.map +1 -0
- package/dist/ui/prompt.d.ts +24 -0
- package/dist/ui/prompt.d.ts.map +1 -0
- package/dist/ui/prompt.js +226 -0
- package/dist/ui/prompt.js.map +1 -0
- package/dist/utils/time.d.ts +3 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +29 -0
- package/dist/utils/time.js.map +1 -0
- package/drizzle/migrations/0000_naive_human_fly.sql +56 -0
- package/drizzle/migrations/meta/0000_snapshot.json +395 -0
- package/drizzle/migrations/meta/_journal.json +13 -0
- 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":"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"}
|
|
@@ -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":"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"}
|
|
@@ -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"}
|