aiag-cli 1.8.0 → 2.1.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.
Files changed (121) hide show
  1. package/README.md +125 -89
  2. package/dist/api/client.d.ts +170 -0
  3. package/dist/api/client.d.ts.map +1 -0
  4. package/dist/api/client.js +513 -0
  5. package/dist/api/client.js.map +1 -0
  6. package/dist/api/endpoints.d.ts +112 -0
  7. package/dist/api/endpoints.d.ts.map +1 -0
  8. package/dist/api/endpoints.js +150 -0
  9. package/dist/api/endpoints.js.map +1 -0
  10. package/dist/api/types.d.ts +395 -0
  11. package/dist/api/types.d.ts.map +1 -0
  12. package/dist/api/types.js +7 -0
  13. package/dist/api/types.js.map +1 -0
  14. package/dist/auth/credentials.d.ts +73 -0
  15. package/dist/auth/credentials.d.ts.map +1 -0
  16. package/dist/auth/credentials.js +150 -0
  17. package/dist/auth/credentials.js.map +1 -0
  18. package/dist/auth/device.d.ts +58 -0
  19. package/dist/auth/device.d.ts.map +1 -0
  20. package/dist/auth/device.js +235 -0
  21. package/dist/auth/device.js.map +1 -0
  22. package/dist/auth/token.d.ts +55 -0
  23. package/dist/auth/token.d.ts.map +1 -0
  24. package/dist/auth/token.js +153 -0
  25. package/dist/auth/token.js.map +1 -0
  26. package/dist/cli.js +51 -1
  27. package/dist/cli.js.map +1 -1
  28. package/dist/commands/auto.d.ts.map +1 -1
  29. package/dist/commands/auto.js +321 -236
  30. package/dist/commands/auto.js.map +1 -1
  31. package/dist/commands/complete.d.ts +1 -0
  32. package/dist/commands/complete.d.ts.map +1 -1
  33. package/dist/commands/complete.js +30 -0
  34. package/dist/commands/complete.js.map +1 -1
  35. package/dist/commands/connect.d.ts +25 -0
  36. package/dist/commands/connect.d.ts.map +1 -0
  37. package/dist/commands/connect.js +305 -0
  38. package/dist/commands/connect.js.map +1 -0
  39. package/dist/commands/login.d.ts +19 -0
  40. package/dist/commands/login.d.ts.map +1 -0
  41. package/dist/commands/login.js +119 -0
  42. package/dist/commands/login.js.map +1 -0
  43. package/dist/commands/logout.d.ts +15 -0
  44. package/dist/commands/logout.d.ts.map +1 -0
  45. package/dist/commands/logout.js +50 -0
  46. package/dist/commands/logout.js.map +1 -0
  47. package/dist/commands/next.d.ts +1 -0
  48. package/dist/commands/next.d.ts.map +1 -1
  49. package/dist/commands/next.js +41 -2
  50. package/dist/commands/next.js.map +1 -1
  51. package/dist/commands/project.d.ts +13 -0
  52. package/dist/commands/project.d.ts.map +1 -0
  53. package/dist/commands/project.js +92 -0
  54. package/dist/commands/project.js.map +1 -0
  55. package/dist/commands/session.d.ts +10 -2
  56. package/dist/commands/session.d.ts.map +1 -1
  57. package/dist/commands/session.js +80 -3
  58. package/dist/commands/session.js.map +1 -1
  59. package/dist/commands/status.d.ts +1 -0
  60. package/dist/commands/status.d.ts.map +1 -1
  61. package/dist/commands/status.js +51 -0
  62. package/dist/commands/status.js.map +1 -1
  63. package/dist/commands/sync.d.ts +33 -0
  64. package/dist/commands/sync.d.ts.map +1 -0
  65. package/dist/commands/sync.js +555 -0
  66. package/dist/commands/sync.js.map +1 -0
  67. package/dist/commands/work.d.ts +1 -0
  68. package/dist/commands/work.d.ts.map +1 -1
  69. package/dist/commands/work.js +22 -1
  70. package/dist/commands/work.js.map +1 -1
  71. package/dist/config/global.d.ts +54 -0
  72. package/dist/config/global.d.ts.map +1 -0
  73. package/dist/config/global.js +110 -0
  74. package/dist/config/global.js.map +1 -0
  75. package/dist/prompts/coding.d.ts +31 -0
  76. package/dist/prompts/coding.d.ts.map +1 -0
  77. package/dist/prompts/coding.js +228 -0
  78. package/dist/prompts/coding.js.map +1 -0
  79. package/dist/prompts/index.d.ts +10 -0
  80. package/dist/prompts/index.d.ts.map +1 -0
  81. package/dist/prompts/index.js +10 -0
  82. package/dist/prompts/index.js.map +1 -0
  83. package/dist/prompts/initializer.d.ts +20 -0
  84. package/dist/prompts/initializer.d.ts.map +1 -0
  85. package/dist/prompts/initializer.js +147 -0
  86. package/dist/prompts/initializer.js.map +1 -0
  87. package/dist/sdk/client.d.ts +67 -0
  88. package/dist/sdk/client.d.ts.map +1 -0
  89. package/dist/sdk/client.js +196 -0
  90. package/dist/sdk/client.js.map +1 -0
  91. package/dist/sdk/index.d.ts +8 -0
  92. package/dist/sdk/index.d.ts.map +1 -0
  93. package/dist/sdk/index.js +8 -0
  94. package/dist/sdk/index.js.map +1 -0
  95. package/dist/sdk/security.d.ts +43 -0
  96. package/dist/sdk/security.d.ts.map +1 -0
  97. package/dist/sdk/security.js +214 -0
  98. package/dist/sdk/security.js.map +1 -0
  99. package/dist/types.d.ts +64 -0
  100. package/dist/types.d.ts.map +1 -1
  101. package/dist/utils/connection.d.ts +126 -0
  102. package/dist/utils/connection.d.ts.map +1 -0
  103. package/dist/utils/connection.js +226 -0
  104. package/dist/utils/connection.js.map +1 -0
  105. package/dist/utils/messages.d.ts +76 -0
  106. package/dist/utils/messages.d.ts.map +1 -1
  107. package/dist/utils/messages.js +87 -1
  108. package/dist/utils/messages.js.map +1 -1
  109. package/dist/utils/output.d.ts +10 -0
  110. package/dist/utils/output.d.ts.map +1 -1
  111. package/dist/utils/output.js +31 -0
  112. package/dist/utils/output.js.map +1 -1
  113. package/dist/utils/prompt.d.ts +10 -0
  114. package/dist/utils/prompt.d.ts.map +1 -0
  115. package/dist/utils/prompt.js +22 -0
  116. package/dist/utils/prompt.js.map +1 -0
  117. package/dist/utils/sseClient.d.ts +183 -0
  118. package/dist/utils/sseClient.d.ts.map +1 -0
  119. package/dist/utils/sseClient.js +391 -0
  120. package/dist/utils/sseClient.js.map +1 -0
  121. package/package.json +3 -2
@@ -0,0 +1,391 @@
1
+ /**
2
+ * SSE (Server-Sent Events) 클라이언트
3
+ *
4
+ * aiag-adp 서버로부터 실시간 로그 및 이벤트를 수신
5
+ *
6
+ * 기능:
7
+ * - 서버 이벤트 실시간 수신
8
+ * - 자동 재연결 (백오프 알고리즘)
9
+ * - 하트비트 감지
10
+ * - 이벤트 타입별 핸들러 등록
11
+ */
12
+ import { EventEmitter } from 'events';
13
+ import { buildUrl, AGENT_ENDPOINTS } from '../api/endpoints.js';
14
+ /**
15
+ * 기본 설정값
16
+ */
17
+ const DEFAULT_CONFIG = {
18
+ autoReconnect: true,
19
+ maxReconnectAttempts: 10,
20
+ baseReconnectDelay: 1000,
21
+ maxReconnectDelay: 30000,
22
+ heartbeatTimeout: 60000,
23
+ };
24
+ // ============================================
25
+ // SSE 클라이언트 클래스
26
+ // ============================================
27
+ /**
28
+ * SSE 클라이언트
29
+ *
30
+ * @example
31
+ * ```ts
32
+ * const client = new SSEClient({
33
+ * serverUrl: 'http://localhost:3000',
34
+ * projectId: 'abc123',
35
+ * accessToken: 'token...',
36
+ * });
37
+ *
38
+ * client.on('feature_completed', (event) => {
39
+ * console.log('Feature completed:', event.featureLocalId);
40
+ * });
41
+ *
42
+ * client.on('log', (event) => {
43
+ * console.log(`[${event.level}] ${event.message}`);
44
+ * });
45
+ *
46
+ * await client.connect();
47
+ * ```
48
+ */
49
+ export class SSEClient extends EventEmitter {
50
+ config;
51
+ state = 'disconnected';
52
+ abortController = null;
53
+ reconnectAttempts = 0;
54
+ reconnectTimeoutId = null;
55
+ heartbeatTimeoutId = null;
56
+ lastEventId = null;
57
+ connectionId = null;
58
+ constructor(config) {
59
+ super();
60
+ this.config = {
61
+ ...DEFAULT_CONFIG,
62
+ ...config,
63
+ };
64
+ }
65
+ // ============================================
66
+ // 연결 관리
67
+ // ============================================
68
+ /**
69
+ * 현재 상태 반환
70
+ */
71
+ getState() {
72
+ return this.state;
73
+ }
74
+ /**
75
+ * 연결 ID 반환
76
+ */
77
+ getConnectionId() {
78
+ return this.connectionId;
79
+ }
80
+ /**
81
+ * SSE 스트림에 연결
82
+ */
83
+ async connect() {
84
+ if (this.state === 'connected' || this.state === 'connecting') {
85
+ return;
86
+ }
87
+ this.setState('connecting');
88
+ await this.startConnection();
89
+ }
90
+ /**
91
+ * SSE 스트림 연결 해제
92
+ */
93
+ disconnect() {
94
+ this.setState('closed');
95
+ this.cleanup();
96
+ this.emit('disconnected', { reason: 'user_requested' });
97
+ }
98
+ /**
99
+ * 실제 연결 시작
100
+ */
101
+ async startConnection() {
102
+ this.cleanup();
103
+ this.abortController = new AbortController();
104
+ const url = buildUrl(this.config.serverUrl, AGENT_ENDPOINTS.STREAM(this.config.projectId));
105
+ try {
106
+ const response = await fetch(url, {
107
+ method: 'GET',
108
+ headers: {
109
+ 'Accept': 'text/event-stream',
110
+ 'Authorization': `Bearer ${this.config.accessToken}`,
111
+ 'Cache-Control': 'no-cache',
112
+ ...(this.lastEventId ? { 'Last-Event-ID': this.lastEventId } : {}),
113
+ },
114
+ signal: this.abortController.signal,
115
+ });
116
+ if (!response.ok) {
117
+ throw new Error(`SSE connection failed: ${response.status} ${response.statusText}`);
118
+ }
119
+ if (!response.body) {
120
+ throw new Error('SSE response has no body');
121
+ }
122
+ this.setState('connected');
123
+ this.reconnectAttempts = 0;
124
+ this.startHeartbeatTimer();
125
+ // 스트림 읽기 시작
126
+ await this.readStream(response.body);
127
+ }
128
+ catch (error) {
129
+ if (error instanceof Error && error.name === 'AbortError') {
130
+ // 의도적인 중단
131
+ return;
132
+ }
133
+ this.emit('error', {
134
+ type: 'connection_error',
135
+ message: error instanceof Error ? error.message : 'Unknown error',
136
+ error,
137
+ });
138
+ // 재연결 시도
139
+ if (this.config.autoReconnect && this.state !== 'closed') {
140
+ this.scheduleReconnect();
141
+ }
142
+ }
143
+ }
144
+ /**
145
+ * 스트림 데이터 읽기
146
+ */
147
+ async readStream(body) {
148
+ const reader = body.getReader();
149
+ const decoder = new TextDecoder();
150
+ let buffer = '';
151
+ try {
152
+ while (true) {
153
+ const { done, value } = await reader.read();
154
+ if (done) {
155
+ break;
156
+ }
157
+ buffer += decoder.decode(value, { stream: true });
158
+ // SSE 메시지 파싱
159
+ const lines = buffer.split('\n');
160
+ buffer = lines.pop() || ''; // 마지막 불완전한 라인은 버퍼에 유지
161
+ let eventType = '';
162
+ let eventData = '';
163
+ let eventId = '';
164
+ for (const line of lines) {
165
+ if (line.startsWith('event:')) {
166
+ eventType = line.slice(6).trim();
167
+ }
168
+ else if (line.startsWith('data:')) {
169
+ eventData += (eventData ? '\n' : '') + line.slice(5).trim();
170
+ }
171
+ else if (line.startsWith('id:')) {
172
+ eventId = line.slice(3).trim();
173
+ }
174
+ else if (line === '' && eventData) {
175
+ // 빈 라인 = 메시지 완료
176
+ this.handleMessage(eventType || 'message', eventData, eventId);
177
+ eventType = '';
178
+ eventData = '';
179
+ eventId = '';
180
+ }
181
+ }
182
+ }
183
+ }
184
+ catch (error) {
185
+ if (error instanceof Error && error.name === 'AbortError') {
186
+ return;
187
+ }
188
+ throw error;
189
+ }
190
+ finally {
191
+ reader.releaseLock();
192
+ }
193
+ // 스트림이 종료되면 재연결
194
+ if (this.state === 'connected' && this.config.autoReconnect) {
195
+ this.emit('disconnected', { reason: 'stream_ended' });
196
+ this.scheduleReconnect();
197
+ }
198
+ }
199
+ /**
200
+ * 메시지 처리
201
+ */
202
+ handleMessage(eventType, data, eventId) {
203
+ // 이벤트 ID 저장 (재연결 시 사용)
204
+ if (eventId) {
205
+ this.lastEventId = eventId;
206
+ }
207
+ // 하트비트 타이머 리셋
208
+ this.resetHeartbeatTimer();
209
+ try {
210
+ const event = JSON.parse(data);
211
+ // 이벤트 타입별 처리
212
+ switch (event.type) {
213
+ case 'connected':
214
+ this.handleConnectedEvent(event);
215
+ break;
216
+ case 'heartbeat':
217
+ this.handleHeartbeatEvent(event);
218
+ break;
219
+ default:
220
+ // 일반 이벤트 발생
221
+ this.emit(event.type, event);
222
+ this.emit('event', event);
223
+ }
224
+ }
225
+ catch (error) {
226
+ this.emit('parse_error', { data, error });
227
+ }
228
+ }
229
+ /**
230
+ * 연결됨 이벤트 처리
231
+ */
232
+ handleConnectedEvent(event) {
233
+ this.connectionId = event.connectionId;
234
+ this.emit('connected', event);
235
+ }
236
+ /**
237
+ * 하트비트 이벤트 처리
238
+ */
239
+ handleHeartbeatEvent(event) {
240
+ this.emit('heartbeat', event);
241
+ }
242
+ // ============================================
243
+ // 재연결 로직
244
+ // ============================================
245
+ /**
246
+ * 재연결 스케줄링
247
+ */
248
+ scheduleReconnect() {
249
+ if (this.state === 'closed') {
250
+ return;
251
+ }
252
+ if (this.reconnectAttempts >= this.config.maxReconnectAttempts) {
253
+ this.emit('max_reconnect_attempts', { attempts: this.reconnectAttempts });
254
+ this.setState('disconnected');
255
+ return;
256
+ }
257
+ this.setState('reconnecting');
258
+ this.reconnectAttempts++;
259
+ // 지수 백오프 계산
260
+ const delay = Math.min(this.config.baseReconnectDelay * Math.pow(2, this.reconnectAttempts - 1), this.config.maxReconnectDelay);
261
+ this.emit('reconnecting', {
262
+ attempt: this.reconnectAttempts,
263
+ maxAttempts: this.config.maxReconnectAttempts,
264
+ delay,
265
+ });
266
+ this.reconnectTimeoutId = setTimeout(() => {
267
+ this.startConnection();
268
+ }, delay);
269
+ }
270
+ // ============================================
271
+ // 하트비트 관리
272
+ // ============================================
273
+ /**
274
+ * 하트비트 타이머 시작
275
+ */
276
+ startHeartbeatTimer() {
277
+ this.stopHeartbeatTimer();
278
+ this.heartbeatTimeoutId = setTimeout(() => {
279
+ this.emit('heartbeat_timeout');
280
+ if (this.config.autoReconnect && this.state !== 'closed') {
281
+ this.scheduleReconnect();
282
+ }
283
+ }, this.config.heartbeatTimeout);
284
+ }
285
+ /**
286
+ * 하트비트 타이머 리셋
287
+ */
288
+ resetHeartbeatTimer() {
289
+ this.startHeartbeatTimer();
290
+ }
291
+ /**
292
+ * 하트비트 타이머 중지
293
+ */
294
+ stopHeartbeatTimer() {
295
+ if (this.heartbeatTimeoutId) {
296
+ clearTimeout(this.heartbeatTimeoutId);
297
+ this.heartbeatTimeoutId = null;
298
+ }
299
+ }
300
+ // ============================================
301
+ // 유틸리티
302
+ // ============================================
303
+ /**
304
+ * 상태 변경
305
+ */
306
+ setState(state) {
307
+ if (this.state !== state) {
308
+ const previousState = this.state;
309
+ this.state = state;
310
+ this.emit('state_change', { previous: previousState, current: state });
311
+ }
312
+ }
313
+ /**
314
+ * 리소스 정리
315
+ */
316
+ cleanup() {
317
+ // 재연결 타이머 정리
318
+ if (this.reconnectTimeoutId) {
319
+ clearTimeout(this.reconnectTimeoutId);
320
+ this.reconnectTimeoutId = null;
321
+ }
322
+ // 하트비트 타이머 정리
323
+ this.stopHeartbeatTimer();
324
+ // 연결 중단
325
+ if (this.abortController) {
326
+ this.abortController.abort();
327
+ this.abortController = null;
328
+ }
329
+ this.connectionId = null;
330
+ }
331
+ /**
332
+ * 설정 업데이트
333
+ */
334
+ updateConfig(config) {
335
+ this.config = {
336
+ ...this.config,
337
+ ...config,
338
+ };
339
+ }
340
+ }
341
+ // ============================================
342
+ // 간편 사용을 위한 헬퍼 함수
343
+ // ============================================
344
+ /**
345
+ * SSE 클라이언트 생성 및 연결
346
+ */
347
+ export async function createSSEClient(config) {
348
+ const client = new SSEClient(config);
349
+ await client.connect();
350
+ return client;
351
+ }
352
+ /**
353
+ * SSE 이벤트를 콘솔에 포맷팅하여 출력하는 헬퍼
354
+ */
355
+ export function formatSSEEvent(event) {
356
+ const timestamp = new Date(event.timestamp).toLocaleTimeString('ko-KR');
357
+ switch (event.type) {
358
+ case 'feature_claimed':
359
+ case 'feature_progress':
360
+ case 'feature_completed':
361
+ case 'feature_failed': {
362
+ const fe = event;
363
+ const icon = event.type === 'feature_completed' ? '✓' : event.type === 'feature_failed' ? '✗' : '→';
364
+ return `[${timestamp}] ${icon} ${fe.featureLocalId}: ${fe.message ?? event.type}`;
365
+ }
366
+ case 'session_started':
367
+ case 'session_ended': {
368
+ const se = event;
369
+ const icon = event.type === 'session_started' ? '▶' : '■';
370
+ return `[${timestamp}] ${icon} 세션 ${event.type === 'session_started' ? '시작' : '종료'} (${se.email ?? se.userId})`;
371
+ }
372
+ case 'log': {
373
+ const le = event;
374
+ const levelIcon = { info: 'ℹ', warn: '⚠', error: '✗', debug: '🔍' }[le.level];
375
+ return `[${timestamp}] ${levelIcon} ${le.message}`;
376
+ }
377
+ case 'error': {
378
+ const ee = event;
379
+ return `[${timestamp}] ✗ 에러: ${ee.message} (${ee.code})`;
380
+ }
381
+ case 'heartbeat':
382
+ return `[${timestamp}] ♥ heartbeat`;
383
+ case 'connected': {
384
+ const ce = event;
385
+ return `[${timestamp}] ✓ 연결됨 (${ce.connectionId})`;
386
+ }
387
+ default:
388
+ return `[${timestamp}] ${event.type}`;
389
+ }
390
+ }
391
+ //# sourceMappingURL=sseClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sseClient.js","sourceRoot":"","sources":["../../src/utils/sseClient.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "aiag-cli",
3
- "version": "1.8.0",
4
- "description": "AI Agent Harness CLI - Long-running agent development tool based on Anthropic's approach",
3
+ "version": "2.1.0",
4
+ "description": "AI Agent Harness CLI - Long-running agent development tool powered by Claude Agent SDK",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -45,6 +45,7 @@
45
45
  "node": ">=18.0.0"
46
46
  },
47
47
  "dependencies": {
48
+ "@anthropic-ai/claude-agent-sdk": "^0.1.75",
48
49
  "chalk": "^5.3.0",
49
50
  "commander": "^11.1.0",
50
51
  "ora": "^8.0.0"