@agentconnect/sdk 0.1.3 → 0.1.5

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/README.md CHANGED
@@ -70,9 +70,9 @@ session.on('raw_line', (event) => {
70
70
  console.log('CLI:', event.line);
71
71
  });
72
72
 
73
- session.on('provider_event', (event) => {
73
+ session.on('detail', (event) => {
74
74
  if (event.provider === 'codex') {
75
- console.log('Codex event:', event.event);
75
+ console.log('Codex detail:', event.providerDetail);
76
76
  }
77
77
  });
78
78
  ```
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type ProviderId = 'claude' | 'codex' | 'local';
1
+ export type ProviderId = 'claude' | 'codex' | 'cursor' | 'local';
2
2
  export type PackageManager = 'bun' | 'pnpm' | 'npm' | 'brew' | 'unknown';
3
3
  export type InstallResult = {
4
4
  installed: boolean;
@@ -11,6 +11,13 @@ export type ProviderInfo = {
11
11
  installed: boolean;
12
12
  loggedIn: boolean;
13
13
  version?: string;
14
+ updateAvailable?: boolean;
15
+ latestVersion?: string;
16
+ updateCheckedAt?: number;
17
+ updateSource?: 'cli' | 'npm' | 'bun' | 'brew' | 'winget' | 'script' | 'unknown';
18
+ updateCommand?: string;
19
+ updateMessage?: string;
20
+ updateInProgress?: boolean;
14
21
  };
15
22
  export type ReasoningEffortOption = {
16
23
  id: string;
@@ -25,30 +32,74 @@ export type ModelInfo = {
25
32
  reasoningEfforts?: ReasoningEffortOption[];
26
33
  defaultReasoningEffort?: string;
27
34
  };
35
+ export type ProviderDetailLevel = 'minimal' | 'raw';
36
+ export type ProviderDetail = {
37
+ eventType: string;
38
+ data?: Record<string, unknown>;
39
+ raw?: unknown;
40
+ };
28
41
  export type SessionEvent = {
29
42
  type: 'delta';
30
43
  text: string;
44
+ providerSessionId?: string | null;
45
+ providerDetail?: ProviderDetail;
31
46
  } | {
32
47
  type: 'final';
33
48
  text: string;
34
49
  providerSessionId?: string | null;
50
+ providerDetail?: ProviderDetail;
35
51
  } | {
36
52
  type: 'usage';
37
53
  usage: Record<string, number>;
54
+ providerSessionId?: string | null;
55
+ providerDetail?: ProviderDetail;
38
56
  } | {
39
57
  type: 'status';
40
58
  status: 'thinking' | 'idle' | 'error';
41
59
  error?: string;
60
+ providerSessionId?: string | null;
61
+ providerDetail?: ProviderDetail;
42
62
  } | {
43
63
  type: 'error';
44
64
  message: string;
65
+ providerSessionId?: string | null;
66
+ providerDetail?: ProviderDetail;
45
67
  } | {
46
68
  type: 'raw_line';
47
69
  line: string;
70
+ providerSessionId?: string | null;
71
+ providerDetail?: ProviderDetail;
72
+ } | {
73
+ type: 'message';
74
+ provider?: ProviderId;
75
+ role: 'system' | 'user' | 'assistant';
76
+ content: string;
77
+ contentParts?: unknown;
78
+ providerSessionId?: string | null;
79
+ providerDetail?: ProviderDetail;
48
80
  } | {
49
- type: 'provider_event';
81
+ type: 'thinking';
50
82
  provider?: ProviderId;
51
- event: Record<string, unknown>;
83
+ phase: 'delta' | 'start' | 'completed' | 'error';
84
+ text?: string;
85
+ timestampMs?: number;
86
+ providerSessionId?: string | null;
87
+ providerDetail?: ProviderDetail;
88
+ } | {
89
+ type: 'tool_call';
90
+ provider?: ProviderId;
91
+ name?: string;
92
+ callId?: string;
93
+ input?: unknown;
94
+ output?: unknown;
95
+ phase?: 'delta' | 'start' | 'completed' | 'error';
96
+ providerSessionId?: string | null;
97
+ providerDetail?: ProviderDetail;
98
+ } | {
99
+ type: 'detail';
100
+ provider?: ProviderId;
101
+ providerSessionId?: string | null;
102
+ providerDetail: ProviderDetail;
52
103
  };
53
104
  export type ProviderLoginOptions = {
54
105
  baseUrl?: string;
@@ -74,11 +125,13 @@ export type SessionCreateOptions = {
74
125
  temperature?: number;
75
126
  maxTokens?: number;
76
127
  topP?: number;
128
+ providerDetailLevel?: ProviderDetailLevel;
77
129
  };
78
130
  export type SessionSendOptions = {
79
131
  metadata?: Record<string, unknown>;
80
132
  cwd?: string;
81
133
  repoRoot?: string;
134
+ providerDetailLevel?: ProviderDetailLevel;
82
135
  };
83
136
  export type SessionResumeOptions = {
84
137
  model?: string;
@@ -86,6 +139,7 @@ export type SessionResumeOptions = {
86
139
  providerSessionId?: string | null;
87
140
  cwd?: string;
88
141
  repoRoot?: string;
142
+ providerDetailLevel?: ProviderDetailLevel;
89
143
  };
90
144
  export interface AgentConnectSession {
91
145
  id: string;
@@ -111,6 +165,7 @@ export interface AgentConnectClient {
111
165
  list(): Promise<ProviderInfo[]>;
112
166
  status(provider: ProviderId): Promise<ProviderInfo>;
113
167
  ensureInstalled(provider: ProviderId): Promise<InstallResult>;
168
+ update(provider: ProviderId): Promise<ProviderInfo>;
114
169
  login(provider: ProviderId, options?: ProviderLoginOptions): Promise<{
115
170
  loggedIn: boolean;
116
171
  }>;
package/dist/index.js CHANGED
@@ -161,6 +161,7 @@ class AgentConnectSessionImpl {
161
161
  metadata: normalized.metadata,
162
162
  cwd: normalized.cwd,
163
163
  repoRoot: normalized.repoRoot,
164
+ providerDetailLevel: normalized.providerDetailLevel,
164
165
  });
165
166
  }
166
167
  async cancel() {
@@ -199,7 +200,8 @@ class AgentConnectSessionImpl {
199
200
  const candidate = options;
200
201
  if ('metadata' in candidate ||
201
202
  'cwd' in candidate ||
202
- 'repoRoot' in candidate) {
203
+ 'repoRoot' in candidate ||
204
+ 'providerDetailLevel' in candidate) {
203
205
  return candidate;
204
206
  }
205
207
  return { metadata: options };
@@ -228,8 +230,34 @@ class AgentConnectClientImpl {
228
230
  });
229
231
  }
230
232
  normalizeEvent(type, data) {
233
+ const parseProviderDetail = () => {
234
+ const detail = data?.providerDetail;
235
+ if (!detail || typeof detail !== 'object')
236
+ return undefined;
237
+ const record = detail;
238
+ const eventType = typeof record.eventType === 'string' ? record.eventType : '';
239
+ if (!eventType)
240
+ return undefined;
241
+ const raw = 'raw' in record ? record.raw : undefined;
242
+ const dataField = record.data && typeof record.data === 'object'
243
+ ? record.data
244
+ : undefined;
245
+ const out = { eventType };
246
+ if (dataField)
247
+ out.data = dataField;
248
+ if (raw !== undefined)
249
+ out.raw = raw;
250
+ return out;
251
+ };
252
+ const providerDetail = parseProviderDetail();
253
+ const providerSessionId = typeof data?.providerSessionId === 'string' ? data.providerSessionId : undefined;
231
254
  if (type === 'delta') {
232
- return { type: 'delta', text: String(data?.text ?? '') };
255
+ return {
256
+ type: 'delta',
257
+ text: String(data?.text ?? ''),
258
+ providerSessionId,
259
+ ...(providerDetail && { providerDetail }),
260
+ };
233
261
  }
234
262
  if (type === 'final') {
235
263
  const providerSessionId = typeof data?.providerSessionId === 'string'
@@ -237,28 +265,110 @@ class AgentConnectClientImpl {
237
265
  : typeof data?.sessionId === 'string'
238
266
  ? data.sessionId
239
267
  : undefined;
240
- return { type: 'final', text: String(data?.text ?? ''), providerSessionId };
268
+ return {
269
+ type: 'final',
270
+ text: String(data?.text ?? ''),
271
+ providerSessionId,
272
+ ...(providerDetail && { providerDetail }),
273
+ };
241
274
  }
242
275
  if (type === 'usage') {
243
- return { type: 'usage', usage: data?.usage ?? {} };
276
+ return {
277
+ type: 'usage',
278
+ usage: data?.usage ?? {},
279
+ providerSessionId,
280
+ ...(providerDetail && { providerDetail }),
281
+ };
244
282
  }
245
283
  if (type === 'status') {
246
284
  const status = String(data?.status ?? 'idle');
247
285
  const error = typeof data?.error === 'string' ? data.error : undefined;
248
- return { type: 'status', status, error };
286
+ return {
287
+ type: 'status',
288
+ status,
289
+ error,
290
+ providerSessionId,
291
+ ...(providerDetail && { providerDetail }),
292
+ };
249
293
  }
250
294
  if (type === 'error') {
251
- return { type: 'error', message: String(data?.message ?? 'Unknown error') };
295
+ return {
296
+ type: 'error',
297
+ message: String(data?.message ?? 'Unknown error'),
298
+ providerSessionId,
299
+ ...(providerDetail && { providerDetail }),
300
+ };
252
301
  }
253
302
  if (type === 'raw_line') {
254
- return { type: 'raw_line', line: String(data?.line ?? '') };
303
+ return {
304
+ type: 'raw_line',
305
+ line: String(data?.line ?? ''),
306
+ providerSessionId,
307
+ ...(providerDetail && { providerDetail }),
308
+ };
309
+ }
310
+ if (type === 'message') {
311
+ const provider = typeof data?.provider === 'string' ? data.provider : undefined;
312
+ const role = data?.role === 'system' || data?.role === 'user' || data?.role === 'assistant'
313
+ ? data.role
314
+ : 'assistant';
315
+ const content = String(data?.content ?? '');
316
+ const contentParts = data?.contentParts;
317
+ return {
318
+ type: 'message',
319
+ provider,
320
+ role,
321
+ content,
322
+ contentParts,
323
+ providerSessionId,
324
+ providerDetail,
325
+ };
255
326
  }
256
- if (type === 'provider_event') {
327
+ if (type === 'thinking') {
257
328
  const provider = typeof data?.provider === 'string' ? data.provider : undefined;
258
- const event = data?.event && typeof data.event === 'object'
259
- ? data.event
260
- : {};
261
- return { type: 'provider_event', provider, event };
329
+ const phase = data?.phase === 'start' ||
330
+ data?.phase === 'completed' ||
331
+ data?.phase === 'error' ||
332
+ data?.phase === 'delta'
333
+ ? data.phase
334
+ : 'delta';
335
+ const text = typeof data?.text === 'string' ? data.text : undefined;
336
+ const timestampMs = typeof data?.timestampMs === 'number' ? data.timestampMs : undefined;
337
+ return {
338
+ type: 'thinking',
339
+ provider,
340
+ phase,
341
+ text,
342
+ timestampMs,
343
+ providerSessionId,
344
+ providerDetail,
345
+ };
346
+ }
347
+ if (type === 'tool_call') {
348
+ const provider = typeof data?.provider === 'string' ? data.provider : undefined;
349
+ const name = typeof data?.name === 'string' ? data.name : undefined;
350
+ const callId = typeof data?.callId === 'string' ? data.callId : undefined;
351
+ const phase = data?.phase === 'start' ||
352
+ data?.phase === 'completed' ||
353
+ data?.phase === 'error' ||
354
+ data?.phase === 'delta'
355
+ ? data.phase
356
+ : undefined;
357
+ return {
358
+ type: 'tool_call',
359
+ provider,
360
+ name,
361
+ callId,
362
+ input: data?.input,
363
+ output: data?.output,
364
+ phase,
365
+ providerSessionId,
366
+ providerDetail,
367
+ };
368
+ }
369
+ if (type === 'detail' && providerDetail) {
370
+ const provider = typeof data?.provider === 'string' ? data.provider : undefined;
371
+ return { type: 'detail', provider, providerDetail, providerSessionId };
262
372
  }
263
373
  return null;
264
374
  }
@@ -280,6 +390,10 @@ class AgentConnectClientImpl {
280
390
  const res = (await this.request('acp.providers.status', { provider }));
281
391
  return res.provider;
282
392
  },
393
+ update: async (provider) => {
394
+ const res = (await this.request('acp.providers.update', { provider }));
395
+ return res.provider;
396
+ },
283
397
  ensureInstalled: async (provider) => {
284
398
  return (await this.request('acp.providers.ensureInstalled', { provider }));
285
399
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentconnect/sdk",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "homepage": "https://github.com/rayzhudev/agent-connect",