cyrus-edge-worker 0.0.17 → 0.0.18-alpha.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.
@@ -0,0 +1,613 @@
1
+ import { LinearDocument } from '@linear/sdk';
2
+ /**
3
+ * Manages Linear Agent Sessions integration with Claude Code SDK
4
+ * Transforms Claude streaming messages into Agent Session format
5
+ * Handles session lifecycle: create → active → complete/error
6
+ *
7
+ * CURRENTLY BEING HANDLED 'per repository'
8
+ */
9
+ export class AgentSessionManager {
10
+ linearClient;
11
+ sessions = new Map();
12
+ entries = new Map(); // Stores a list of session entries per each session by its linearAgentActivitySessionId
13
+ constructor(linearClient) {
14
+ this.linearClient = linearClient;
15
+ }
16
+ /**
17
+ * Initialize a Linear agent session from webhook
18
+ * The session is already created by Linear, we just need to track it
19
+ */
20
+ createLinearAgentSession(linearAgentActivitySessionId, issueId, issueMinimal, workspace) {
21
+ console.log(`[AgentSessionManager] Tracking Linear session ${linearAgentActivitySessionId} for issue ${issueId}`);
22
+ const agentSession = {
23
+ linearAgentActivitySessionId,
24
+ type: LinearDocument.AgentSessionType.CommentThread,
25
+ status: LinearDocument.AgentSessionStatus.Active,
26
+ context: LinearDocument.AgentSessionType.CommentThread,
27
+ createdAt: Date.now(),
28
+ updatedAt: Date.now(),
29
+ issueId,
30
+ issue: issueMinimal,
31
+ workspace: workspace
32
+ };
33
+ // Store locally
34
+ this.sessions.set(linearAgentActivitySessionId, agentSession);
35
+ this.entries.set(linearAgentActivitySessionId, []);
36
+ return agentSession;
37
+ }
38
+ /**
39
+ * Create a new Agent Session from Claude system initialization
40
+ */
41
+ updateAgentSessionWithClaudeSessionId(linearAgentActivitySessionId, claudeSystemMessage) {
42
+ const linearSession = this.sessions.get(linearAgentActivitySessionId);
43
+ if (!linearSession) {
44
+ console.warn(`[AgentSessionManager] No Linear session found for linearAgentActivitySessionId ${linearAgentActivitySessionId}`);
45
+ return;
46
+ }
47
+ linearSession.claudeSessionId = claudeSystemMessage.session_id;
48
+ linearSession.updatedAt = Date.now();
49
+ linearSession.metadata = {
50
+ model: claudeSystemMessage.model,
51
+ tools: claudeSystemMessage.tools,
52
+ permissionMode: claudeSystemMessage.permissionMode,
53
+ apiKeySource: claudeSystemMessage.apiKeySource,
54
+ };
55
+ }
56
+ /**
57
+ * Create a session entry from Claude user/assistant message (without syncing to Linear)
58
+ */
59
+ async createSessionEntry(_linearAgentActivitySessionId, sdkMessage) {
60
+ // Extract tool info if this is an assistant message
61
+ const toolInfo = sdkMessage.type === 'assistant' ? this.extractToolInfo(sdkMessage) : null;
62
+ const sessionEntry = {
63
+ claudeSessionId: sdkMessage.session_id,
64
+ type: sdkMessage.type,
65
+ content: this.extractContent(sdkMessage),
66
+ metadata: {
67
+ timestamp: Date.now(),
68
+ parentToolUseId: sdkMessage.parent_tool_use_id || undefined,
69
+ ...(toolInfo && {
70
+ toolUseId: toolInfo.id,
71
+ toolName: toolInfo.name,
72
+ toolInput: toolInfo.input
73
+ })
74
+ }
75
+ };
76
+ // DON'T store locally yet - wait until we actually post to Linear
77
+ return sessionEntry;
78
+ }
79
+ /**
80
+ * Format TodoWrite tool parameter as a nice checklist
81
+ */
82
+ formatTodoWriteParameter(jsonContent) {
83
+ try {
84
+ const data = JSON.parse(jsonContent);
85
+ if (!data.todos || !Array.isArray(data.todos)) {
86
+ return jsonContent;
87
+ }
88
+ const todos = data.todos;
89
+ // Keep original order but add status indicators
90
+ let formatted = '\n';
91
+ todos.forEach((todo, index) => {
92
+ let statusEmoji = '';
93
+ if (todo.status === 'completed') {
94
+ statusEmoji = '✅ ';
95
+ }
96
+ else if (todo.status === 'in_progress') {
97
+ statusEmoji = '🔄 ';
98
+ }
99
+ else if (todo.status === 'pending') {
100
+ statusEmoji = '⏳ ';
101
+ }
102
+ formatted += `${statusEmoji}${todo.content}`;
103
+ if (index < todos.length - 1) {
104
+ formatted += '\n';
105
+ }
106
+ });
107
+ return formatted;
108
+ }
109
+ catch (error) {
110
+ console.error('[AgentSessionManager] Failed to format TodoWrite parameter:', error);
111
+ return jsonContent;
112
+ }
113
+ }
114
+ /**
115
+ * Complete a session from Claude result message
116
+ */
117
+ async completeSession(linearAgentActivitySessionId, resultMessage) {
118
+ const session = this.sessions.get(linearAgentActivitySessionId);
119
+ if (!session) {
120
+ console.error(`[AgentSessionManager] No session found for linearAgentActivitySessionId: ${linearAgentActivitySessionId}`);
121
+ return;
122
+ }
123
+ const status = resultMessage.subtype === 'success'
124
+ ? LinearDocument.AgentSessionStatus.Complete
125
+ : LinearDocument.AgentSessionStatus.Error;
126
+ // Update session status and metadata
127
+ await this.updateSessionStatus(linearAgentActivitySessionId, status, {
128
+ totalCostUsd: resultMessage.total_cost_usd,
129
+ usage: resultMessage.usage
130
+ });
131
+ // Add result entry if present
132
+ if ('result' in resultMessage && resultMessage.result) {
133
+ await this.addResultEntry(linearAgentActivitySessionId, resultMessage);
134
+ }
135
+ }
136
+ /**
137
+ * Handle streaming Claude messages and route to appropriate methods
138
+ */
139
+ async handleClaudeMessage(linearAgentActivitySessionId, message) {
140
+ try {
141
+ switch (message.type) {
142
+ case 'system':
143
+ if (message.subtype === 'init') {
144
+ this.updateAgentSessionWithClaudeSessionId(linearAgentActivitySessionId, message);
145
+ }
146
+ break;
147
+ case 'user':
148
+ const userEntry = await this.createSessionEntry(linearAgentActivitySessionId, message);
149
+ await this.syncEntryToLinear(userEntry, linearAgentActivitySessionId);
150
+ break;
151
+ case 'assistant':
152
+ const assistantEntry = await this.createSessionEntry(linearAgentActivitySessionId, message);
153
+ await this.syncEntryToLinear(assistantEntry, linearAgentActivitySessionId);
154
+ break;
155
+ case 'result':
156
+ await this.completeSession(linearAgentActivitySessionId, message);
157
+ break;
158
+ default:
159
+ console.warn(`[AgentSessionManager] Unknown message type: ${message.type}`);
160
+ }
161
+ }
162
+ catch (error) {
163
+ console.error(`[AgentSessionManager] Error handling message:`, error);
164
+ // Mark session as error state
165
+ await this.updateSessionStatus(linearAgentActivitySessionId, LinearDocument.AgentSessionStatus.Error);
166
+ }
167
+ }
168
+ /**
169
+ * Update session status and metadata
170
+ */
171
+ async updateSessionStatus(linearAgentActivitySessionId, status, additionalMetadata) {
172
+ const session = this.sessions.get(linearAgentActivitySessionId);
173
+ if (!session)
174
+ return;
175
+ session.status = status;
176
+ session.updatedAt = Date.now();
177
+ if (additionalMetadata) {
178
+ session.metadata = { ...session.metadata, ...additionalMetadata };
179
+ }
180
+ this.sessions.set(linearAgentActivitySessionId, session);
181
+ }
182
+ /**
183
+ * Add result entry from Claude result message
184
+ */
185
+ async addResultEntry(linearAgentActivitySessionId, resultMessage) {
186
+ const resultEntry = {
187
+ claudeSessionId: resultMessage.session_id,
188
+ type: 'result',
189
+ content: 'result' in resultMessage ? resultMessage.result : '',
190
+ metadata: {
191
+ timestamp: Date.now(),
192
+ durationMs: resultMessage.duration_ms,
193
+ isError: resultMessage.is_error
194
+ },
195
+ };
196
+ // DON'T store locally - syncEntryToLinear will do it
197
+ // Sync to Linear
198
+ await this.syncEntryToLinear(resultEntry, linearAgentActivitySessionId);
199
+ }
200
+ /**
201
+ * Extract content from Claude message
202
+ */
203
+ extractContent(sdkMessage) {
204
+ const message = sdkMessage.type === 'user'
205
+ ? sdkMessage.message
206
+ : sdkMessage.message;
207
+ if (typeof message.content === 'string') {
208
+ return message.content;
209
+ }
210
+ if (Array.isArray(message.content)) {
211
+ return message.content
212
+ .map((block) => {
213
+ if (block.type === 'text') {
214
+ return block.text;
215
+ }
216
+ else if (block.type === 'tool_use') {
217
+ // For tool use blocks, return the input as JSON string
218
+ return JSON.stringify(block.input, null, 2);
219
+ }
220
+ return '';
221
+ })
222
+ .filter(Boolean)
223
+ .join('\n');
224
+ }
225
+ return '';
226
+ }
227
+ /**
228
+ * Extract tool information from Claude assistant message
229
+ */
230
+ extractToolInfo(sdkMessage) {
231
+ const message = sdkMessage.message;
232
+ if (Array.isArray(message.content)) {
233
+ const toolUse = message.content.find((block) => block.type === 'tool_use');
234
+ if (toolUse && 'id' in toolUse && 'name' in toolUse && 'input' in toolUse) {
235
+ return {
236
+ id: toolUse.id,
237
+ name: toolUse.name,
238
+ input: toolUse.input
239
+ };
240
+ }
241
+ }
242
+ return null;
243
+ }
244
+ /**
245
+ * Sync Agent Session Entry to Linear (create AgentActivity)
246
+ */
247
+ async syncEntryToLinear(entry, linearAgentActivitySessionId) {
248
+ try {
249
+ const session = this.sessions.get(linearAgentActivitySessionId);
250
+ if (!session) {
251
+ console.warn(`[AgentSessionManager] No Linear session for linearAgentActivitySessionId ${linearAgentActivitySessionId}`);
252
+ return;
253
+ }
254
+ // Store entry locally now that we're posting it
255
+ const entries = this.entries.get(linearAgentActivitySessionId) || [];
256
+ entries.push(entry);
257
+ this.entries.set(linearAgentActivitySessionId, entries);
258
+ // Build activity content based on entry type
259
+ let content;
260
+ switch (entry.type) {
261
+ case 'user':
262
+ // User messages are prompts - but we don't create these, Linear does
263
+ console.log(`[AgentSessionManager] Skipping user entry - prompts are created by Linear`);
264
+ return;
265
+ case 'assistant':
266
+ // Assistant messages can be thoughts or responses
267
+ if (entry.metadata?.toolUseId) {
268
+ const toolName = entry.metadata.toolName || 'Tool';
269
+ // Special handling for TodoWrite tool - treat as thought instead of action
270
+ if (toolName === 'TodoWrite') {
271
+ const formattedTodos = this.formatTodoWriteParameter(entry.content);
272
+ content = {
273
+ type: 'thought',
274
+ body: formattedTodos
275
+ };
276
+ }
277
+ else {
278
+ // Other tools remain as actions
279
+ let parameter = entry.content;
280
+ let displayName = toolName;
281
+ content = {
282
+ type: 'action',
283
+ action: displayName,
284
+ parameter: parameter,
285
+ // result will be added later when we get tool result
286
+ };
287
+ }
288
+ }
289
+ else {
290
+ // Regular assistant message - create a thought
291
+ content = {
292
+ type: 'thought',
293
+ body: entry.content
294
+ };
295
+ }
296
+ break;
297
+ case 'system':
298
+ // System messages are thoughts
299
+ content = {
300
+ type: 'thought',
301
+ body: entry.content
302
+ };
303
+ break;
304
+ case 'result':
305
+ // Result messages can be responses or errors
306
+ if (entry.metadata?.isError) {
307
+ content = {
308
+ type: 'error',
309
+ body: entry.content
310
+ };
311
+ }
312
+ else {
313
+ content = {
314
+ type: 'response',
315
+ body: entry.content
316
+ };
317
+ }
318
+ break;
319
+ default:
320
+ // Default to thought
321
+ content = {
322
+ type: 'thought',
323
+ body: entry.content
324
+ };
325
+ }
326
+ const activityInput = {
327
+ agentSessionId: session.linearAgentActivitySessionId, // Use the Linear session ID
328
+ content
329
+ };
330
+ const result = await this.linearClient.createAgentActivity(activityInput);
331
+ if (result.success && result.agentActivity) {
332
+ const agentActivity = await result.agentActivity;
333
+ entry.linearAgentActivityId = agentActivity.id;
334
+ console.log(`[AgentSessionManager] Created ${content.type} activity ${entry.linearAgentActivityId}`);
335
+ }
336
+ else {
337
+ console.error(`[AgentSessionManager] Failed to create Linear activity:`, result);
338
+ }
339
+ }
340
+ catch (error) {
341
+ console.error(`[AgentSessionManager] Failed to sync entry to Linear:`, error);
342
+ }
343
+ }
344
+ /**
345
+ * Get session by ID
346
+ */
347
+ getSession(linearAgentActivitySessionId) {
348
+ return this.sessions.get(linearAgentActivitySessionId);
349
+ }
350
+ /**
351
+ * Get session entries by session ID
352
+ */
353
+ getSessionEntries(linearAgentActivitySessionId) {
354
+ return this.entries.get(linearAgentActivitySessionId) || [];
355
+ }
356
+ /**
357
+ * Get all active sessions
358
+ */
359
+ getActiveSessions() {
360
+ return Array.from(this.sessions.values()).filter(session => session.status === LinearDocument.AgentSessionStatus.Active);
361
+ }
362
+ /**
363
+ * Add or update ClaudeRunner for a session
364
+ */
365
+ addClaudeRunner(linearAgentActivitySessionId, claudeRunner) {
366
+ const session = this.sessions.get(linearAgentActivitySessionId);
367
+ if (!session) {
368
+ console.warn(`[AgentSessionManager] No session found for linearAgentActivitySessionId ${linearAgentActivitySessionId}`);
369
+ return;
370
+ }
371
+ session.claudeRunner = claudeRunner;
372
+ session.updatedAt = Date.now();
373
+ console.log(`[AgentSessionManager] Added ClaudeRunner to session ${linearAgentActivitySessionId}`);
374
+ }
375
+ /**
376
+ * Get all ClaudeRunners
377
+ */
378
+ getAllClaudeRunners() {
379
+ return Array.from(this.sessions.values())
380
+ .map(session => session.claudeRunner)
381
+ .filter((runner) => runner !== undefined);
382
+ }
383
+ /**
384
+ * Get all ClaudeRunners for a specific issue
385
+ */
386
+ getClaudeRunnersForIssue(issueId) {
387
+ return Array.from(this.sessions.values())
388
+ .filter(session => session.issueId === issueId)
389
+ .map(session => session.claudeRunner)
390
+ .filter((runner) => runner !== undefined);
391
+ }
392
+ /**
393
+ * Get sessions by issue ID
394
+ */
395
+ getSessionsByIssueId(issueId) {
396
+ return Array.from(this.sessions.values()).filter(session => session.issueId === issueId);
397
+ }
398
+ /**
399
+ * Get active sessions by issue ID
400
+ */
401
+ getActiveSessionsByIssueId(issueId) {
402
+ return Array.from(this.sessions.values()).filter(session => session.issueId === issueId && session.status === LinearDocument.AgentSessionStatus.Active);
403
+ }
404
+ /**
405
+ * Get all sessions
406
+ */
407
+ getAllSessions() {
408
+ return Array.from(this.sessions.values());
409
+ }
410
+ /**
411
+ * Create a thought activity
412
+ */
413
+ async createThoughtActivity(sessionId, body) {
414
+ const session = this.sessions.get(sessionId);
415
+ if (!session || !session.linearAgentActivitySessionId) {
416
+ console.warn(`[AgentSessionManager] No Linear session ID for session ${sessionId}`);
417
+ return;
418
+ }
419
+ try {
420
+ const result = await this.linearClient.createAgentActivity({
421
+ agentSessionId: session.linearAgentActivitySessionId,
422
+ content: {
423
+ type: 'thought',
424
+ body
425
+ }
426
+ });
427
+ if (result.success) {
428
+ console.log(`[AgentSessionManager] Created thought activity for session ${sessionId}`);
429
+ }
430
+ else {
431
+ console.error(`[AgentSessionManager] Failed to create thought activity:`, result);
432
+ }
433
+ }
434
+ catch (error) {
435
+ console.error(`[AgentSessionManager] Error creating thought activity:`, error);
436
+ }
437
+ }
438
+ /**
439
+ * Create an action activity
440
+ */
441
+ async createActionActivity(sessionId, action, parameter, result) {
442
+ const session = this.sessions.get(sessionId);
443
+ if (!session || !session.linearAgentActivitySessionId) {
444
+ console.warn(`[AgentSessionManager] No Linear session ID for session ${sessionId}`);
445
+ return;
446
+ }
447
+ try {
448
+ const content = {
449
+ type: 'action',
450
+ action,
451
+ parameter
452
+ };
453
+ if (result !== undefined) {
454
+ content.result = result;
455
+ }
456
+ const response = await this.linearClient.createAgentActivity({
457
+ agentSessionId: session.linearAgentActivitySessionId,
458
+ content
459
+ });
460
+ if (response.success) {
461
+ console.log(`[AgentSessionManager] Created action activity for session ${sessionId}`);
462
+ }
463
+ else {
464
+ console.error(`[AgentSessionManager] Failed to create action activity:`, response);
465
+ }
466
+ }
467
+ catch (error) {
468
+ console.error(`[AgentSessionManager] Error creating action activity:`, error);
469
+ }
470
+ }
471
+ /**
472
+ * Create a response activity
473
+ */
474
+ async createResponseActivity(sessionId, body) {
475
+ const session = this.sessions.get(sessionId);
476
+ if (!session || !session.linearAgentActivitySessionId) {
477
+ console.warn(`[AgentSessionManager] No Linear session ID for session ${sessionId}`);
478
+ return;
479
+ }
480
+ try {
481
+ const result = await this.linearClient.createAgentActivity({
482
+ agentSessionId: session.linearAgentActivitySessionId,
483
+ content: {
484
+ type: 'response',
485
+ body
486
+ }
487
+ });
488
+ if (result.success) {
489
+ console.log(`[AgentSessionManager] Created response activity for session ${sessionId}`);
490
+ }
491
+ else {
492
+ console.error(`[AgentSessionManager] Failed to create response activity:`, result);
493
+ }
494
+ }
495
+ catch (error) {
496
+ console.error(`[AgentSessionManager] Error creating response activity:`, error);
497
+ }
498
+ }
499
+ /**
500
+ * Create an error activity
501
+ */
502
+ async createErrorActivity(sessionId, body) {
503
+ const session = this.sessions.get(sessionId);
504
+ if (!session || !session.linearAgentActivitySessionId) {
505
+ console.warn(`[AgentSessionManager] No Linear session ID for session ${sessionId}`);
506
+ return;
507
+ }
508
+ try {
509
+ const result = await this.linearClient.createAgentActivity({
510
+ agentSessionId: session.linearAgentActivitySessionId,
511
+ content: {
512
+ type: 'error',
513
+ body
514
+ }
515
+ });
516
+ if (result.success) {
517
+ console.log(`[AgentSessionManager] Created error activity for session ${sessionId}`);
518
+ }
519
+ else {
520
+ console.error(`[AgentSessionManager] Failed to create error activity:`, result);
521
+ }
522
+ }
523
+ catch (error) {
524
+ console.error(`[AgentSessionManager] Error creating error activity:`, error);
525
+ }
526
+ }
527
+ /**
528
+ * Create an elicitation activity
529
+ */
530
+ async createElicitationActivity(sessionId, body) {
531
+ const session = this.sessions.get(sessionId);
532
+ if (!session || !session.linearAgentActivitySessionId) {
533
+ console.warn(`[AgentSessionManager] No Linear session ID for session ${sessionId}`);
534
+ return;
535
+ }
536
+ try {
537
+ const result = await this.linearClient.createAgentActivity({
538
+ agentSessionId: session.linearAgentActivitySessionId,
539
+ content: {
540
+ type: 'elicitation',
541
+ body
542
+ }
543
+ });
544
+ if (result.success) {
545
+ console.log(`[AgentSessionManager] Created elicitation activity for session ${sessionId}`);
546
+ }
547
+ else {
548
+ console.error(`[AgentSessionManager] Failed to create elicitation activity:`, result);
549
+ }
550
+ }
551
+ catch (error) {
552
+ console.error(`[AgentSessionManager] Error creating elicitation activity:`, error);
553
+ }
554
+ }
555
+ /**
556
+ * Clear completed sessions older than specified time
557
+ */
558
+ cleanup(olderThanMs = 24 * 60 * 60 * 1000) {
559
+ const cutoff = Date.now() - olderThanMs;
560
+ for (const [sessionId, session] of this.sessions.entries()) {
561
+ if ((session.status === 'complete' || session.status === 'error') &&
562
+ session.updatedAt < cutoff) {
563
+ this.sessions.delete(sessionId);
564
+ this.entries.delete(sessionId);
565
+ console.log(`[AgentSessionManager] Cleaned up session ${sessionId}`);
566
+ }
567
+ }
568
+ }
569
+ /**
570
+ * Serialize Agent Session state for persistence
571
+ */
572
+ serializeState() {
573
+ const sessions = {};
574
+ const entries = {};
575
+ // Serialize sessions
576
+ for (const [sessionId, session] of this.sessions.entries()) {
577
+ // Exclude claudeRunner from serialization as it's not serializable
578
+ const { claudeRunner, ...serializableSession } = session;
579
+ sessions[sessionId] = serializableSession;
580
+ }
581
+ // Serialize entries
582
+ for (const [sessionId, sessionEntries] of this.entries.entries()) {
583
+ entries[sessionId] = sessionEntries.map(entry => ({
584
+ ...entry,
585
+ }));
586
+ }
587
+ return { sessions, entries };
588
+ }
589
+ /**
590
+ * Restore Agent Session state from serialized data
591
+ */
592
+ restoreState(serializedSessions, serializedEntries) {
593
+ // Clear existing state
594
+ this.sessions.clear();
595
+ this.entries.clear();
596
+ // Restore sessions
597
+ for (const [sessionId, sessionData] of Object.entries(serializedSessions)) {
598
+ const session = {
599
+ ...sessionData,
600
+ };
601
+ this.sessions.set(sessionId, session);
602
+ }
603
+ // Restore entries
604
+ for (const [sessionId, entriesData] of Object.entries(serializedEntries)) {
605
+ const sessionEntries = entriesData.map(entryData => ({
606
+ ...entryData,
607
+ }));
608
+ this.entries.set(sessionId, sessionEntries);
609
+ }
610
+ console.log(`[AgentSessionManager] Restored ${this.sessions.size} sessions, ${Object.keys(serializedEntries).length} entry collections`);
611
+ }
612
+ }
613
+ //# sourceMappingURL=AgentSessionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentSessionManager.js","sourceRoot":"","sources":["../src/AgentSessionManager.ts"],"names":[],"mappings":"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"}