@agent-link/agent 0.1.235 → 0.1.236

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,634 @@
1
+ /**
2
+ * Copilot CLI process driver for AgentLink.
3
+ *
4
+ * Parallel to claude.ts but simpler:
5
+ * - Each turn spawns a new `copilot -p "..." --output-format json` process
6
+ * - No persistent process, no stdin input stream, no control_request protocol
7
+ * - JSONL stdout parsed and emitted as backend_event messages
8
+ * - Session state stored at ~/.copilot/session-state/<id>/
9
+ */
10
+ import { spawn, execFileSync } from 'child_process';
11
+ import { createInterface } from 'readline';
12
+ import { readdirSync, readFileSync, writeFileSync, existsSync, rmSync, statSync } from 'fs';
13
+ import { join, resolve } from 'path';
14
+ import { homedir, platform } from 'os';
15
+ import { copilotCapabilities } from './backends/types.js';
16
+ // ── Module state ───────────────────────────────────────────────────────────
17
+ const conversations = new Map();
18
+ const sendFns = new Set();
19
+ let globalModel = null;
20
+ // ── Send fanout (same pattern as claude.ts) ────────────────────────────────
21
+ function sendFn(msg) {
22
+ for (const fn of sendFns) {
23
+ try {
24
+ fn(msg);
25
+ }
26
+ catch (e) { /* ignore */ }
27
+ }
28
+ }
29
+ export function addCopilotSendFn(fn) {
30
+ sendFns.add(fn);
31
+ return () => { sendFns.delete(fn); };
32
+ }
33
+ // ── Session ref helper ─────────────────────────────────────────────────────
34
+ function sessionRef(sessionId) {
35
+ return {
36
+ backendType: 'copilot',
37
+ backendSessionId: sessionId,
38
+ };
39
+ }
40
+ // ── Resolve copilot executable path ────────────────────────────────────────
41
+ let resolvedCopilotPath = null;
42
+ function resolveCopilotPath() {
43
+ if (resolvedCopilotPath)
44
+ return resolvedCopilotPath;
45
+ const isWin = platform() === 'win32';
46
+ // Try where/which
47
+ try {
48
+ const bin = isWin ? 'where' : 'which';
49
+ const output = execFileSync(bin, ['copilot'], {
50
+ stdio: ['pipe', 'pipe', 'pipe'],
51
+ timeout: 5000,
52
+ windowsHide: true,
53
+ }).toString().trim();
54
+ const lines = output.split('\n').map(l => l.trim()).filter(Boolean);
55
+ if (isWin && lines.length > 1) {
56
+ resolvedCopilotPath = lines.find(l => /\.(cmd|exe)$/i.test(l)) || lines[0];
57
+ }
58
+ else {
59
+ resolvedCopilotPath = lines[0] || null;
60
+ }
61
+ }
62
+ catch {
63
+ // where/which failed — try PowerShell on Windows
64
+ if (isWin) {
65
+ try {
66
+ const psOutput = execFileSync('powershell.exe', [
67
+ '-NoProfile', '-Command',
68
+ '(Get-Command copilot -ErrorAction SilentlyContinue).Source',
69
+ ], {
70
+ stdio: ['pipe', 'pipe', 'pipe'],
71
+ timeout: 8000,
72
+ windowsHide: true,
73
+ }).toString().trim();
74
+ if (psOutput && existsSync(psOutput)) {
75
+ resolvedCopilotPath = psOutput;
76
+ }
77
+ }
78
+ catch { /* ignore */ }
79
+ }
80
+ }
81
+ if (!resolvedCopilotPath) {
82
+ // Fallback: just use 'copilot' and hope it's in PATH
83
+ resolvedCopilotPath = 'copilot';
84
+ }
85
+ console.log(`[Copilot] Resolved command: ${resolvedCopilotPath}`);
86
+ return resolvedCopilotPath;
87
+ }
88
+ // ── Conversation management ────────────────────────────────────────────────
89
+ export function getCopilotConversation(conversationId) {
90
+ return conversations.get(conversationId);
91
+ }
92
+ export function createCopilotPlaceholder(conversationId, opts) {
93
+ if (conversations.has(conversationId))
94
+ return;
95
+ conversations.set(conversationId, {
96
+ conversationId,
97
+ child: null,
98
+ abortController: null,
99
+ copilotSessionId: null,
100
+ lastCopilotSessionId: null,
101
+ workDir: process.cwd(),
102
+ turnActive: false,
103
+ providerId: opts?.providerId || 'copilot',
104
+ model: null,
105
+ });
106
+ }
107
+ export function restartCopilotConversation(conversationId, opts) {
108
+ const state = conversations.get(conversationId);
109
+ const wasTurnActive = state?.turnActive || false;
110
+ const copilotSessionId = state?.copilotSessionId || null;
111
+ if (state) {
112
+ cleanupCopilotConversation(conversationId);
113
+ }
114
+ conversations.set(conversationId, {
115
+ conversationId,
116
+ child: null,
117
+ abortController: null,
118
+ copilotSessionId: null,
119
+ lastCopilotSessionId: copilotSessionId,
120
+ workDir: state?.workDir || process.cwd(),
121
+ turnActive: false,
122
+ providerId: opts?.providerId || state?.providerId || 'copilot',
123
+ model: opts?.model || state?.model || null,
124
+ });
125
+ return { wasTurnActive, copilotSessionId };
126
+ }
127
+ export function setModel(conversationId, model) {
128
+ if (conversationId) {
129
+ const state = conversations.get(conversationId);
130
+ if (state)
131
+ state.model = model;
132
+ }
133
+ else {
134
+ globalModel = model;
135
+ }
136
+ }
137
+ export function handleCopilotChat(conversationId, text, workDir, options, _files) {
138
+ let state = conversations.get(conversationId);
139
+ if (!state) {
140
+ state = {
141
+ conversationId,
142
+ child: null,
143
+ abortController: null,
144
+ copilotSessionId: null,
145
+ lastCopilotSessionId: null,
146
+ workDir,
147
+ turnActive: false,
148
+ providerId: 'copilot',
149
+ model: null,
150
+ };
151
+ conversations.set(conversationId, state);
152
+ }
153
+ state.workDir = workDir;
154
+ // Determine session to resume
155
+ const resumeId = options?.resumeSessionId
156
+ || state.copilotSessionId
157
+ || state.lastCopilotSessionId;
158
+ // Build args
159
+ const args = [
160
+ '-p', text,
161
+ '--output-format', 'json',
162
+ '--allow-all-tools',
163
+ '-s',
164
+ '--no-ask-user',
165
+ ];
166
+ if (resumeId) {
167
+ args.push(`--resume=${resumeId}`);
168
+ }
169
+ const model = state.model || globalModel;
170
+ if (model) {
171
+ args.push('--model', model);
172
+ }
173
+ args.push('-C', workDir);
174
+ // Spawn copilot process
175
+ const controller = new AbortController();
176
+ state.abortController = controller;
177
+ state.turnActive = true;
178
+ // Emit turn_started
179
+ sendFn({
180
+ type: 'backend_event',
181
+ conversationId,
182
+ event: {
183
+ type: 'turn_started',
184
+ session: sessionRef(resumeId || 'pending'),
185
+ },
186
+ });
187
+ const copilotCmd = resolveCopilotPath();
188
+ // On Windows, .cmd files can't be spawned directly — use cmd.exe /c
189
+ const isWin = platform() === 'win32';
190
+ const spawnCmd = isWin ? (process.env.COMSPEC || 'cmd.exe') : copilotCmd;
191
+ const spawnArgs = isWin ? ['/c', copilotCmd, ...args] : args;
192
+ const child = spawn(spawnCmd, spawnArgs, {
193
+ cwd: workDir,
194
+ stdio: ['pipe', 'pipe', 'pipe'],
195
+ windowsHide: true,
196
+ signal: controller.signal,
197
+ });
198
+ state.child = child;
199
+ // Parse JSONL stdout
200
+ const rl = createInterface({ input: child.stdout });
201
+ let stderrBuf = '';
202
+ child.stderr?.on('data', (chunk) => {
203
+ stderrBuf += chunk.toString();
204
+ });
205
+ rl.on('line', (line) => {
206
+ if (!line.trim())
207
+ return;
208
+ try {
209
+ const event = JSON.parse(line);
210
+ handleCopilotEvent(state, event);
211
+ }
212
+ catch {
213
+ // Non-JSON output, ignore
214
+ }
215
+ });
216
+ child.on('close', (code) => {
217
+ state.child = null;
218
+ state.abortController = null;
219
+ if (state.turnActive) {
220
+ state.turnActive = false;
221
+ // If turn wasn't completed by a result event, emit error or cancellation
222
+ if (code !== 0 && code !== null) {
223
+ const errMsg = stderrBuf.trim() || `Copilot process exited with code ${code}`;
224
+ sendFn({
225
+ type: 'backend_event',
226
+ conversationId,
227
+ event: { type: 'error', message: errMsg },
228
+ });
229
+ }
230
+ // Emit backend_event turn_completed so web clears processing state
231
+ sendFn({
232
+ type: 'backend_event',
233
+ conversationId,
234
+ event: {
235
+ type: 'turn_completed',
236
+ session: sessionRef(state.copilotSessionId || ''),
237
+ },
238
+ });
239
+ // Also emit top-level turn_completed for backward compat
240
+ sendFn({
241
+ type: 'turn_completed',
242
+ conversationId,
243
+ workDir: state.workDir,
244
+ claudeSessionId: state.copilotSessionId,
245
+ });
246
+ }
247
+ });
248
+ child.on('error', (err) => {
249
+ state.child = null;
250
+ state.turnActive = false;
251
+ sendFn({
252
+ type: 'backend_event',
253
+ conversationId,
254
+ event: { type: 'error', message: `Failed to start copilot: ${err.message}` },
255
+ });
256
+ sendFn({
257
+ type: 'backend_event',
258
+ conversationId,
259
+ event: {
260
+ type: 'turn_completed',
261
+ session: sessionRef(state.copilotSessionId || ''),
262
+ },
263
+ });
264
+ sendFn({
265
+ type: 'turn_completed',
266
+ conversationId,
267
+ workDir: state.workDir,
268
+ });
269
+ });
270
+ }
271
+ // ── JSONL event handler ────────────────────────────────────────────────────
272
+ function handleCopilotEvent(state, event) {
273
+ const convId = state.conversationId;
274
+ const session = sessionRef(state.copilotSessionId || 'pending');
275
+ switch (event.type) {
276
+ case 'assistant.message_delta': {
277
+ const data = event.data;
278
+ if (data?.deltaContent) {
279
+ sendFn({
280
+ type: 'backend_event',
281
+ conversationId: convId,
282
+ event: { type: 'text_delta', session, text: data.deltaContent },
283
+ });
284
+ }
285
+ break;
286
+ }
287
+ case 'assistant.reasoning_delta': {
288
+ const data = event.data;
289
+ if (data?.deltaContent) {
290
+ sendFn({
291
+ type: 'backend_event',
292
+ conversationId: convId,
293
+ event: { type: 'reasoning_delta', session, text: data.deltaContent },
294
+ });
295
+ }
296
+ break;
297
+ }
298
+ case 'assistant.message': {
299
+ const data = event.data;
300
+ // Emit tool_started for each tool request (skip report_intent)
301
+ if (data?.toolRequests) {
302
+ for (const tr of data.toolRequests) {
303
+ if (tr.name === 'report_intent')
304
+ continue;
305
+ sendFn({
306
+ type: 'backend_event',
307
+ conversationId: convId,
308
+ event: {
309
+ type: 'tool_started',
310
+ session,
311
+ tool: {
312
+ id: tr.toolCallId,
313
+ name: tr.name,
314
+ itemKind: tr.name,
315
+ input: tr.arguments,
316
+ status: 'in_progress',
317
+ },
318
+ },
319
+ });
320
+ }
321
+ }
322
+ break;
323
+ }
324
+ case 'tool.execution_complete': {
325
+ const data = event.data;
326
+ if (data?.toolCallId) {
327
+ // Skip report_intent results
328
+ if (data.toolName === 'report_intent')
329
+ break;
330
+ sendFn({
331
+ type: 'backend_event',
332
+ conversationId: convId,
333
+ event: {
334
+ type: 'tool_completed',
335
+ session,
336
+ tool: {
337
+ id: data.toolCallId,
338
+ name: data.toolName || '',
339
+ output: data.success
340
+ ? (data.result?.content || data.result?.detailedContent)
341
+ : (data.error?.message || 'Tool execution failed'),
342
+ isError: !data.success,
343
+ status: 'completed',
344
+ },
345
+ },
346
+ });
347
+ }
348
+ break;
349
+ }
350
+ case 'result': {
351
+ const sessionId = event.sessionId;
352
+ if (sessionId) {
353
+ state.copilotSessionId = sessionId;
354
+ }
355
+ state.turnActive = false;
356
+ // Emit backend_event turn_completed
357
+ sendFn({
358
+ type: 'backend_event',
359
+ conversationId: convId,
360
+ event: {
361
+ type: 'turn_completed',
362
+ session: sessionRef(state.copilotSessionId || ''),
363
+ },
364
+ });
365
+ // Also emit top-level turn_completed (for backward compat with web)
366
+ const usage = event.usage;
367
+ sendFn({
368
+ type: 'turn_completed',
369
+ conversationId: convId,
370
+ workDir: state.workDir,
371
+ claudeSessionId: state.copilotSessionId,
372
+ usage: {
373
+ outputTokens: 0,
374
+ inputTokens: 0,
375
+ totalCost: 0,
376
+ durationMs: Number(usage?.totalApiDurationMs ?? 0),
377
+ model: '',
378
+ },
379
+ });
380
+ break;
381
+ }
382
+ }
383
+ }
384
+ // ── Cancel ──────────────────────────────────────────────────────────────────
385
+ export function cancelCopilotExecution(conversationId) {
386
+ const state = conversations.get(conversationId);
387
+ if (!state?.child)
388
+ return;
389
+ state.turnActive = false;
390
+ // Notify web that execution was cancelled
391
+ sendFn({
392
+ type: 'backend_event',
393
+ conversationId,
394
+ event: { type: 'turn_cancelled', session: sessionRef(state.copilotSessionId || '') },
395
+ });
396
+ sendFn({ type: 'execution_cancelled', conversationId });
397
+ if (platform() === 'win32') {
398
+ try {
399
+ spawn('cmd', ['/c', 'taskkill', '/pid', String(state.child.pid), '/f', '/t'], {
400
+ stdio: 'ignore',
401
+ });
402
+ }
403
+ catch { /* ignore */ }
404
+ }
405
+ else {
406
+ state.child.kill('SIGTERM');
407
+ }
408
+ state.child = null;
409
+ state.abortController = null;
410
+ }
411
+ function cleanupCopilotConversation(conversationId) {
412
+ const state = conversations.get(conversationId);
413
+ if (!state)
414
+ return;
415
+ if (state.child) {
416
+ cancelCopilotExecution(conversationId);
417
+ }
418
+ // Preserve session ID for resume
419
+ if (state.copilotSessionId) {
420
+ state.lastCopilotSessionId = state.copilotSessionId;
421
+ }
422
+ conversations.delete(conversationId);
423
+ }
424
+ export function cleanupAllCopilotConversations() {
425
+ for (const convId of conversations.keys()) {
426
+ cleanupCopilotConversation(convId);
427
+ }
428
+ }
429
+ // ── Session listing ────────────────────────────────────────────────────────
430
+ const COPILOT_SESSION_DIR = join(homedir(), '.copilot', 'session-state');
431
+ function parseSimpleYaml(content) {
432
+ const result = {};
433
+ for (const line of content.split('\n')) {
434
+ const match = line.match(/^(\w[\w_-]*)\s*:\s*(.*)$/);
435
+ if (match) {
436
+ let val = match[2].trim();
437
+ // Remove quotes
438
+ if ((val.startsWith('"') && val.endsWith('"')) || (val.startsWith("'") && val.endsWith("'"))) {
439
+ val = val.slice(1, -1);
440
+ }
441
+ result[match[1]] = val;
442
+ }
443
+ }
444
+ return result;
445
+ }
446
+ export function listCopilotSessions(workDir) {
447
+ if (!existsSync(COPILOT_SESSION_DIR))
448
+ return [];
449
+ const sessions = [];
450
+ const normalizedWorkDir = workDir.replace(/\\/g, '/').toLowerCase();
451
+ try {
452
+ const dirs = readdirSync(COPILOT_SESSION_DIR, { withFileTypes: true });
453
+ for (const dir of dirs) {
454
+ if (!dir.isDirectory())
455
+ continue;
456
+ const wsPath = join(COPILOT_SESSION_DIR, dir.name, 'workspace.yaml');
457
+ if (!existsSync(wsPath))
458
+ continue;
459
+ try {
460
+ const yaml = parseSimpleYaml(readFileSync(wsPath, 'utf-8'));
461
+ const cwd = (yaml.cwd || '').replace(/\\/g, '/').toLowerCase();
462
+ // Filter by workDir match
463
+ if (cwd !== normalizedWorkDir)
464
+ continue;
465
+ const updatedAt = yaml.updated_at ? new Date(yaml.updated_at).getTime() : 0;
466
+ const title = yaml.name || 'Untitled';
467
+ sessions.push({
468
+ sessionId: yaml.id || dir.name,
469
+ title,
470
+ preview: title.length > 60 ? title.substring(0, 60) + '...' : title,
471
+ lastModified: updatedAt || statSync(wsPath).mtimeMs,
472
+ });
473
+ }
474
+ catch {
475
+ // Skip broken workspace.yaml
476
+ }
477
+ }
478
+ }
479
+ catch {
480
+ // Session dir not readable
481
+ }
482
+ sessions.sort((a, b) => b.lastModified - a.lastModified);
483
+ return sessions;
484
+ }
485
+ // ── Session history ────────────────────────────────────────────────────────
486
+ export function readCopilotSessionMessages(_workDir, sessionId) {
487
+ const eventsPath = join(COPILOT_SESSION_DIR, sessionId, 'events.jsonl');
488
+ if (!existsSync(eventsPath))
489
+ return [];
490
+ const messages = [];
491
+ try {
492
+ const content = readFileSync(eventsPath, 'utf-8');
493
+ for (const line of content.split('\n')) {
494
+ if (!line.trim())
495
+ continue;
496
+ try {
497
+ const event = JSON.parse(line);
498
+ // Skip ephemeral events
499
+ if (event.ephemeral)
500
+ continue;
501
+ switch (event.type) {
502
+ case 'user.message': {
503
+ const data = event.data;
504
+ if (data?.content) {
505
+ messages.push({ role: 'user', content: data.content });
506
+ }
507
+ break;
508
+ }
509
+ case 'assistant.message': {
510
+ const data = event.data;
511
+ // Add thinking message if reasoning is present
512
+ if (data?.reasoningText) {
513
+ messages.push({ role: 'assistant', content: data.reasoningText, isThinking: true });
514
+ }
515
+ if (data?.content) {
516
+ messages.push({ role: 'assistant', content: data.content });
517
+ }
518
+ if (data?.toolRequests) {
519
+ for (const tr of data.toolRequests) {
520
+ if (tr.name === 'report_intent')
521
+ continue;
522
+ messages.push({
523
+ role: 'tool',
524
+ content: '',
525
+ toolName: tr.name,
526
+ toolInput: JSON.stringify(tr.arguments || {}),
527
+ });
528
+ }
529
+ }
530
+ break;
531
+ }
532
+ case 'tool.execution_complete': {
533
+ const data = event.data;
534
+ if (data?.toolName === 'report_intent')
535
+ break;
536
+ if (data) {
537
+ // Find the most recent tool message without output and update it
538
+ for (let i = messages.length - 1; i >= 0; i--) {
539
+ if (messages[i].role === 'tool' && messages[i].toolName === data.toolName && !messages[i].toolOutput) {
540
+ messages[i].toolOutput = data.success
541
+ ? (data.result?.content || '')
542
+ : (data.error?.message || 'Failed');
543
+ break;
544
+ }
545
+ }
546
+ }
547
+ break;
548
+ }
549
+ }
550
+ }
551
+ catch {
552
+ // Skip unparseable lines
553
+ }
554
+ }
555
+ }
556
+ catch {
557
+ // File not readable
558
+ }
559
+ return messages;
560
+ }
561
+ export function listAllCopilotSessions(limit = 500) {
562
+ if (!existsSync(COPILOT_SESSION_DIR))
563
+ return [];
564
+ const sessions = [];
565
+ try {
566
+ const dirs = readdirSync(COPILOT_SESSION_DIR, { withFileTypes: true });
567
+ for (const dir of dirs) {
568
+ if (!dir.isDirectory())
569
+ continue;
570
+ const wsPath = join(COPILOT_SESSION_DIR, dir.name, 'workspace.yaml');
571
+ if (!existsSync(wsPath))
572
+ continue;
573
+ try {
574
+ const yaml = parseSimpleYaml(readFileSync(wsPath, 'utf-8'));
575
+ const updatedAt = yaml.updated_at ? new Date(yaml.updated_at).getTime() : 0;
576
+ const title = yaml.name || 'Untitled';
577
+ const cwd = yaml.cwd || '';
578
+ // Derive folder name from cwd (last segment)
579
+ const folderName = cwd.replace(/[\\/]+$/, '').split(/[\\/]/).pop() || cwd;
580
+ sessions.push({
581
+ sessionId: yaml.id || dir.name,
582
+ projectPath: cwd,
583
+ projectFolder: folderName,
584
+ title,
585
+ firstPrompt: title,
586
+ lastModified: updatedAt || statSync(wsPath).mtimeMs,
587
+ });
588
+ }
589
+ catch { /* skip */ }
590
+ }
591
+ }
592
+ catch { /* dir not readable */ }
593
+ sessions.sort((a, b) => b.lastModified - a.lastModified);
594
+ return sessions.slice(0, limit);
595
+ }
596
+ // ── Session rename ─────────────────────────────────────────────────────────
597
+ export function renameCopilotSession(_workDir, sessionId, newTitle) {
598
+ const wsPath = resolve(COPILOT_SESSION_DIR, sessionId, 'workspace.yaml');
599
+ if (!wsPath.startsWith(resolve(COPILOT_SESSION_DIR)))
600
+ return false;
601
+ if (!existsSync(wsPath))
602
+ return false;
603
+ try {
604
+ let content = readFileSync(wsPath, 'utf-8');
605
+ // Replace name: line
606
+ content = content.replace(/^name:\s*.*/m, `name: ${newTitle}`);
607
+ // Set user_named: true
608
+ content = content.replace(/^user_named:\s*.*/m, 'user_named: true');
609
+ writeFileSync(wsPath, content, 'utf-8');
610
+ return true;
611
+ }
612
+ catch {
613
+ return false;
614
+ }
615
+ }
616
+ // ── Session deletion ───────────────────────────────────────────────────────
617
+ export function deleteCopilotSession(_workDir, sessionId) {
618
+ const sessionDir = resolve(COPILOT_SESSION_DIR, sessionId);
619
+ // Prevent path traversal — ensure resolved path is under session-state dir
620
+ if (!sessionDir.startsWith(resolve(COPILOT_SESSION_DIR)))
621
+ return false;
622
+ if (!existsSync(sessionDir))
623
+ return false;
624
+ try {
625
+ rmSync(sessionDir, { recursive: true, force: true });
626
+ return true;
627
+ }
628
+ catch {
629
+ return false;
630
+ }
631
+ }
632
+ // ── Capabilities export ────────────────────────────────────────────────────
633
+ export { copilotCapabilities };
634
+ //# sourceMappingURL=copilot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot.js","sourceRoot":"","sources":["../src/copilot.ts"],"names":[],"mappings":"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"}