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.
Files changed (67) hide show
  1. package/agent/dist/db/index.d.ts.map +1 -1
  2. package/agent/dist/db/index.js +4 -16
  3. package/agent/dist/db/index.js.map +1 -1
  4. package/agent/dist/db/schema.d.ts +2 -63
  5. package/agent/dist/db/schema.d.ts.map +1 -1
  6. package/agent/dist/db/schema.js +1 -44
  7. package/agent/dist/db/schema.js.map +1 -1
  8. package/agent/dist/db/sessions.d.ts.map +1 -1
  9. package/agent/dist/db/sessions.js +3 -5
  10. package/agent/dist/db/sessions.js.map +1 -1
  11. package/agent/dist/lib/init-script.d.ts +0 -6
  12. package/agent/dist/lib/init-script.d.ts.map +1 -1
  13. package/agent/dist/lib/init-script.js +157 -48
  14. package/agent/dist/lib/init-script.js.map +1 -1
  15. package/agent/dist/routes/index.d.ts +0 -2
  16. package/agent/dist/routes/index.d.ts.map +1 -1
  17. package/agent/dist/routes/index.js +0 -2
  18. package/agent/dist/routes/index.js.map +1 -1
  19. package/agent/dist/server.d.ts.map +1 -1
  20. package/agent/dist/server.js +1 -10
  21. package/agent/dist/server.js.map +1 -1
  22. package/agent/dist/services/index.d.ts +0 -2
  23. package/agent/dist/services/index.d.ts.map +1 -1
  24. package/agent/dist/services/index.js +0 -1
  25. package/agent/dist/services/index.js.map +1 -1
  26. package/agent/dist/terminal.d.ts +0 -6
  27. package/agent/dist/terminal.d.ts.map +1 -1
  28. package/agent/dist/terminal.js +26 -12
  29. package/agent/dist/terminal.js.map +1 -1
  30. package/agent/dist/websocket-handlers.d.ts.map +1 -1
  31. package/agent/dist/websocket-handlers.js +0 -30
  32. package/agent/dist/websocket-handlers.js.map +1 -1
  33. package/agent/node_modules/247-shared/dist/types/index.d.ts +0 -191
  34. package/agent/node_modules/247-shared/dist/types/index.d.ts.map +1 -1
  35. package/agent/node_modules/247-shared/dist/types/index.js +0 -13
  36. package/agent/node_modules/247-shared/dist/types/index.js.map +1 -1
  37. package/agent/node_modules/247-shared/package.json +1 -1
  38. package/dist/index.js +1 -1
  39. package/package.json +1 -1
  40. package/agent/dist/db/issues.d.ts +0 -83
  41. package/agent/dist/db/issues.d.ts.map +0 -1
  42. package/agent/dist/db/issues.js +0 -423
  43. package/agent/dist/db/issues.js.map +0 -1
  44. package/agent/dist/db/projects.d.ts +0 -63
  45. package/agent/dist/db/projects.d.ts.map +0 -1
  46. package/agent/dist/db/projects.js +0 -288
  47. package/agent/dist/db/projects.js.map +0 -1
  48. package/agent/dist/lib/planning-prompt.d.ts +0 -7
  49. package/agent/dist/lib/planning-prompt.d.ts.map +0 -1
  50. package/agent/dist/lib/planning-prompt.js +0 -51
  51. package/agent/dist/lib/planning-prompt.js.map +0 -1
  52. package/agent/dist/routes/issues.d.ts +0 -6
  53. package/agent/dist/routes/issues.d.ts.map +0 -1
  54. package/agent/dist/routes/issues.js +0 -235
  55. package/agent/dist/routes/issues.js.map +0 -1
  56. package/agent/dist/routes/managed-projects.d.ts +0 -7
  57. package/agent/dist/routes/managed-projects.d.ts.map +0 -1
  58. package/agent/dist/routes/managed-projects.js +0 -230
  59. package/agent/dist/routes/managed-projects.js.map +0 -1
  60. package/agent/dist/services/planner.d.ts +0 -79
  61. package/agent/dist/services/planner.d.ts.map +0 -1
  62. package/agent/dist/services/planner.js +0 -298
  63. package/agent/dist/services/planner.js.map +0 -1
  64. package/agent/dist/websocket-handlers-planning.d.ts +0 -10
  65. package/agent/dist/websocket-handlers-planning.d.ts.map +0 -1
  66. package/agent/dist/websocket-handlers-planning.js +0 -289
  67. 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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"}