247-cli 1.7.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent/dist/db/index.d.ts.map +1 -1
- package/agent/dist/db/index.js +4 -16
- package/agent/dist/db/index.js.map +1 -1
- package/agent/dist/db/schema.d.ts +2 -63
- package/agent/dist/db/schema.d.ts.map +1 -1
- package/agent/dist/db/schema.js +1 -44
- package/agent/dist/db/schema.js.map +1 -1
- package/agent/dist/db/sessions.d.ts.map +1 -1
- package/agent/dist/db/sessions.js +3 -5
- package/agent/dist/db/sessions.js.map +1 -1
- package/agent/dist/lib/init-script.d.ts +0 -6
- package/agent/dist/lib/init-script.d.ts.map +1 -1
- package/agent/dist/lib/init-script.js +157 -48
- package/agent/dist/lib/init-script.js.map +1 -1
- package/agent/dist/routes/index.d.ts +0 -2
- package/agent/dist/routes/index.d.ts.map +1 -1
- package/agent/dist/routes/index.js +0 -2
- package/agent/dist/routes/index.js.map +1 -1
- package/agent/dist/server.d.ts.map +1 -1
- package/agent/dist/server.js +1 -10
- package/agent/dist/server.js.map +1 -1
- package/agent/dist/services/index.d.ts +0 -2
- package/agent/dist/services/index.d.ts.map +1 -1
- package/agent/dist/services/index.js +0 -1
- package/agent/dist/services/index.js.map +1 -1
- package/agent/dist/terminal.d.ts +0 -6
- package/agent/dist/terminal.d.ts.map +1 -1
- package/agent/dist/terminal.js +26 -12
- package/agent/dist/terminal.js.map +1 -1
- package/agent/dist/websocket-handlers.d.ts.map +1 -1
- package/agent/dist/websocket-handlers.js +0 -30
- package/agent/dist/websocket-handlers.js.map +1 -1
- package/agent/node_modules/247-shared/dist/types/index.d.ts +0 -191
- package/agent/node_modules/247-shared/dist/types/index.d.ts.map +1 -1
- package/agent/node_modules/247-shared/dist/types/index.js +0 -13
- package/agent/node_modules/247-shared/dist/types/index.js.map +1 -1
- package/agent/node_modules/247-shared/package.json +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/agent/dist/db/issues.d.ts +0 -83
- package/agent/dist/db/issues.d.ts.map +0 -1
- package/agent/dist/db/issues.js +0 -423
- package/agent/dist/db/issues.js.map +0 -1
- package/agent/dist/db/projects.d.ts +0 -63
- package/agent/dist/db/projects.d.ts.map +0 -1
- package/agent/dist/db/projects.js +0 -288
- package/agent/dist/db/projects.js.map +0 -1
- package/agent/dist/lib/planning-prompt.d.ts +0 -7
- package/agent/dist/lib/planning-prompt.d.ts.map +0 -1
- package/agent/dist/lib/planning-prompt.js +0 -51
- package/agent/dist/lib/planning-prompt.js.map +0 -1
- package/agent/dist/routes/issues.d.ts +0 -6
- package/agent/dist/routes/issues.d.ts.map +0 -1
- package/agent/dist/routes/issues.js +0 -235
- package/agent/dist/routes/issues.js.map +0 -1
- package/agent/dist/routes/managed-projects.d.ts +0 -7
- package/agent/dist/routes/managed-projects.d.ts.map +0 -1
- package/agent/dist/routes/managed-projects.js +0 -230
- package/agent/dist/routes/managed-projects.js.map +0 -1
- package/agent/dist/services/planner.d.ts +0 -79
- package/agent/dist/services/planner.d.ts.map +0 -1
- package/agent/dist/services/planner.js +0 -298
- package/agent/dist/services/planner.js.map +0 -1
- package/agent/dist/websocket-handlers-planning.d.ts +0 -10
- package/agent/dist/websocket-handlers-planning.d.ts.map +0 -1
- package/agent/dist/websocket-handlers-planning.js +0 -289
- package/agent/dist/websocket-handlers-planning.js.map +0 -1
|
@@ -1,289 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WebSocket handlers for project planning sessions.
|
|
3
|
-
* Manages the interactive planning flow with Claude Code.
|
|
4
|
-
*/
|
|
5
|
-
import { WebSocket } from 'ws';
|
|
6
|
-
import { plannerService } from './services/planner.js';
|
|
7
|
-
// Track planning WebSocket connections
|
|
8
|
-
const planningConnections = new Map();
|
|
9
|
-
// Flag to ensure event listeners are only set up once
|
|
10
|
-
let eventListenersInitialized = false;
|
|
11
|
-
/**
|
|
12
|
-
* Handle a planning WebSocket connection
|
|
13
|
-
*/
|
|
14
|
-
export function handlePlanningConnection(ws, url) {
|
|
15
|
-
// Initialize event listeners on first connection
|
|
16
|
-
if (!eventListenersInitialized) {
|
|
17
|
-
setupPlannerEventListeners();
|
|
18
|
-
eventListenersInitialized = true;
|
|
19
|
-
}
|
|
20
|
-
const projectId = url.searchParams.get('projectId');
|
|
21
|
-
if (!projectId) {
|
|
22
|
-
ws.close(4000, 'Missing projectId parameter');
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
console.log(`[Planning WS] New connection for project: ${projectId}`);
|
|
26
|
-
// Register this connection for the project
|
|
27
|
-
if (!planningConnections.has(projectId)) {
|
|
28
|
-
planningConnections.set(projectId, new Set());
|
|
29
|
-
}
|
|
30
|
-
planningConnections.get(projectId).add(ws);
|
|
31
|
-
// Handle messages from client
|
|
32
|
-
ws.on('message', async (data) => {
|
|
33
|
-
try {
|
|
34
|
-
const message = JSON.parse(data.toString());
|
|
35
|
-
await handlePlanningMessageInternal(ws, projectId, message);
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
console.error('[Planning WS] Error handling message:', error);
|
|
39
|
-
sendPlanningMessage(ws, {
|
|
40
|
-
type: 'planning-error',
|
|
41
|
-
projectId,
|
|
42
|
-
error: error instanceof Error ? error.message : 'Unknown error',
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
// Handle disconnect
|
|
47
|
-
ws.on('close', () => {
|
|
48
|
-
console.log(`[Planning WS] Connection closed for project: ${projectId}`);
|
|
49
|
-
const connections = planningConnections.get(projectId);
|
|
50
|
-
if (connections) {
|
|
51
|
-
connections.delete(ws);
|
|
52
|
-
if (connections.size === 0) {
|
|
53
|
-
planningConnections.delete(projectId);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
// Send initial state if there's an active session
|
|
58
|
-
const existingSession = findSessionByProject(projectId);
|
|
59
|
-
if (existingSession) {
|
|
60
|
-
sendPlanningMessage(ws, {
|
|
61
|
-
type: 'planning-progress',
|
|
62
|
-
projectId,
|
|
63
|
-
phase: existingSession.phase,
|
|
64
|
-
message: 'Reconnected to existing planning session',
|
|
65
|
-
});
|
|
66
|
-
// Send any pending questions
|
|
67
|
-
if (existingSession.questions.length > 0 && existingSession.isWaitingForResponse) {
|
|
68
|
-
const lastQuestion = existingSession.questions[existingSession.questions.length - 1];
|
|
69
|
-
sendPlanningMessage(ws, {
|
|
70
|
-
type: 'planning-question',
|
|
71
|
-
projectId,
|
|
72
|
-
question: lastQuestion,
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
// Send plan if ready
|
|
76
|
-
if (existingSession.generatedPlan) {
|
|
77
|
-
sendPlanningMessage(ws, {
|
|
78
|
-
type: 'plan-ready',
|
|
79
|
-
projectId,
|
|
80
|
-
plan: existingSession.generatedPlan.summary,
|
|
81
|
-
issues: existingSession.generatedPlan.issues,
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Handle incoming planning messages (internal)
|
|
88
|
-
*/
|
|
89
|
-
async function handlePlanningMessageInternal(ws, projectId, message) {
|
|
90
|
-
switch (message.type) {
|
|
91
|
-
case 'start-planning': {
|
|
92
|
-
console.log(`[Planning WS] Starting planning for project: ${projectId}, trustMode: ${message.trustMode}`);
|
|
93
|
-
try {
|
|
94
|
-
const sessionId = await plannerService.startPlanning(projectId, message.trustMode);
|
|
95
|
-
sendPlanningMessage(ws, {
|
|
96
|
-
type: 'planning-progress',
|
|
97
|
-
projectId,
|
|
98
|
-
phase: 'gathering',
|
|
99
|
-
message: `Planning session started: ${sessionId}`,
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
catch (error) {
|
|
103
|
-
sendPlanningMessage(ws, {
|
|
104
|
-
type: 'planning-error',
|
|
105
|
-
projectId,
|
|
106
|
-
error: error instanceof Error ? error.message : 'Failed to start planning',
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
break;
|
|
110
|
-
}
|
|
111
|
-
case 'answer-question': {
|
|
112
|
-
const session = findSessionByProject(projectId);
|
|
113
|
-
if (!session) {
|
|
114
|
-
sendPlanningMessage(ws, {
|
|
115
|
-
type: 'planning-error',
|
|
116
|
-
projectId,
|
|
117
|
-
error: 'No active planning session',
|
|
118
|
-
});
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
try {
|
|
122
|
-
plannerService.answerQuestion(session.id, message.questionId, message.answer);
|
|
123
|
-
}
|
|
124
|
-
catch (error) {
|
|
125
|
-
sendPlanningMessage(ws, {
|
|
126
|
-
type: 'planning-error',
|
|
127
|
-
projectId,
|
|
128
|
-
error: error instanceof Error ? error.message : 'Failed to answer question',
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
break;
|
|
132
|
-
}
|
|
133
|
-
case 'approve-plan': {
|
|
134
|
-
const session = findSessionByProject(projectId);
|
|
135
|
-
if (!session) {
|
|
136
|
-
sendPlanningMessage(ws, {
|
|
137
|
-
type: 'planning-error',
|
|
138
|
-
projectId,
|
|
139
|
-
error: 'No active planning session',
|
|
140
|
-
});
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
try {
|
|
144
|
-
const issueIds = await plannerService.approvePlan(session.id);
|
|
145
|
-
sendPlanningMessage(ws, {
|
|
146
|
-
type: 'issues-created',
|
|
147
|
-
projectId,
|
|
148
|
-
issueIds,
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
catch (error) {
|
|
152
|
-
sendPlanningMessage(ws, {
|
|
153
|
-
type: 'planning-error',
|
|
154
|
-
projectId,
|
|
155
|
-
error: error instanceof Error ? error.message : 'Failed to approve plan',
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
break;
|
|
159
|
-
}
|
|
160
|
-
case 'cancel-planning': {
|
|
161
|
-
const session = findSessionByProject(projectId);
|
|
162
|
-
if (session) {
|
|
163
|
-
plannerService.cancelPlanning(session.id);
|
|
164
|
-
}
|
|
165
|
-
sendPlanningMessage(ws, {
|
|
166
|
-
type: 'planning-progress',
|
|
167
|
-
projectId,
|
|
168
|
-
phase: 'error',
|
|
169
|
-
message: 'Planning cancelled',
|
|
170
|
-
});
|
|
171
|
-
break;
|
|
172
|
-
}
|
|
173
|
-
case 'planning-input': {
|
|
174
|
-
// Direct input to the planning terminal (for advanced users)
|
|
175
|
-
const session = findSessionByProject(projectId);
|
|
176
|
-
if (session && message.input) {
|
|
177
|
-
plannerService.sendInput(session.id, message.input);
|
|
178
|
-
}
|
|
179
|
-
break;
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Set up event listeners for the planner service
|
|
185
|
-
*/
|
|
186
|
-
function setupPlannerEventListeners() {
|
|
187
|
-
plannerService.on('phase-change', (sessionId, phase) => {
|
|
188
|
-
const session = plannerService.getSession(sessionId);
|
|
189
|
-
if (!session)
|
|
190
|
-
return;
|
|
191
|
-
broadcastToProject(session.projectId, {
|
|
192
|
-
type: 'planning-progress',
|
|
193
|
-
projectId: session.projectId,
|
|
194
|
-
phase,
|
|
195
|
-
message: `Phase changed to: ${phase}`,
|
|
196
|
-
});
|
|
197
|
-
});
|
|
198
|
-
plannerService.on('question', (sessionId, question) => {
|
|
199
|
-
const session = plannerService.getSession(sessionId);
|
|
200
|
-
if (!session)
|
|
201
|
-
return;
|
|
202
|
-
broadcastToProject(session.projectId, {
|
|
203
|
-
type: 'planning-question',
|
|
204
|
-
projectId: session.projectId,
|
|
205
|
-
question,
|
|
206
|
-
});
|
|
207
|
-
});
|
|
208
|
-
plannerService.on('progress', (sessionId, message) => {
|
|
209
|
-
const session = plannerService.getSession(sessionId);
|
|
210
|
-
if (!session)
|
|
211
|
-
return;
|
|
212
|
-
broadcastToProject(session.projectId, {
|
|
213
|
-
type: 'planning-progress',
|
|
214
|
-
projectId: session.projectId,
|
|
215
|
-
phase: session.phase,
|
|
216
|
-
message,
|
|
217
|
-
});
|
|
218
|
-
});
|
|
219
|
-
plannerService.on('plan-ready', (sessionId, plan) => {
|
|
220
|
-
const session = plannerService.getSession(sessionId);
|
|
221
|
-
if (!session)
|
|
222
|
-
return;
|
|
223
|
-
broadcastToProject(session.projectId, {
|
|
224
|
-
type: 'plan-ready',
|
|
225
|
-
projectId: session.projectId,
|
|
226
|
-
plan: plan.summary,
|
|
227
|
-
issues: plan.issues,
|
|
228
|
-
});
|
|
229
|
-
});
|
|
230
|
-
plannerService.on('issues-created', (sessionId, issueIds) => {
|
|
231
|
-
const session = plannerService.getSession(sessionId);
|
|
232
|
-
if (!session)
|
|
233
|
-
return;
|
|
234
|
-
broadcastToProject(session.projectId, {
|
|
235
|
-
type: 'issues-created',
|
|
236
|
-
projectId: session.projectId,
|
|
237
|
-
issueIds,
|
|
238
|
-
});
|
|
239
|
-
});
|
|
240
|
-
plannerService.on('error', (sessionId, error) => {
|
|
241
|
-
const session = plannerService.getSession(sessionId);
|
|
242
|
-
if (!session)
|
|
243
|
-
return;
|
|
244
|
-
broadcastToProject(session.projectId, {
|
|
245
|
-
type: 'planning-error',
|
|
246
|
-
projectId: session.projectId,
|
|
247
|
-
error,
|
|
248
|
-
});
|
|
249
|
-
});
|
|
250
|
-
plannerService.on('output', (sessionId, output) => {
|
|
251
|
-
const session = plannerService.getSession(sessionId);
|
|
252
|
-
if (!session)
|
|
253
|
-
return;
|
|
254
|
-
broadcastToProject(session.projectId, {
|
|
255
|
-
type: 'planning-output',
|
|
256
|
-
projectId: session.projectId,
|
|
257
|
-
output,
|
|
258
|
-
});
|
|
259
|
-
});
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Find a planning session by project ID
|
|
263
|
-
*/
|
|
264
|
-
function findSessionByProject(projectId) {
|
|
265
|
-
return plannerService.getSessionByProjectId(projectId);
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Send a message to a specific WebSocket
|
|
269
|
-
*/
|
|
270
|
-
function sendPlanningMessage(ws, message) {
|
|
271
|
-
if (ws.readyState === WebSocket.OPEN) {
|
|
272
|
-
ws.send(JSON.stringify(message));
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
/**
|
|
276
|
-
* Broadcast a message to all connections for a project
|
|
277
|
-
*/
|
|
278
|
-
function broadcastToProject(projectId, message) {
|
|
279
|
-
const connections = planningConnections.get(projectId);
|
|
280
|
-
if (!connections)
|
|
281
|
-
return;
|
|
282
|
-
const messageStr = JSON.stringify(message);
|
|
283
|
-
for (const ws of connections) {
|
|
284
|
-
if (ws.readyState === WebSocket.OPEN) {
|
|
285
|
-
ws.send(messageStr);
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
//# sourceMappingURL=websocket-handlers-planning.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-handlers-planning.js","sourceRoot":"","sources":["../src/websocket-handlers-planning.ts"],"names":[],"mappings":"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"}
|