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.
- package/README.md +125 -89
- package/dist/api/client.d.ts +170 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +513 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/endpoints.d.ts +112 -0
- package/dist/api/endpoints.d.ts.map +1 -0
- package/dist/api/endpoints.js +150 -0
- package/dist/api/endpoints.js.map +1 -0
- package/dist/api/types.d.ts +395 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +7 -0
- package/dist/api/types.js.map +1 -0
- package/dist/auth/credentials.d.ts +73 -0
- package/dist/auth/credentials.d.ts.map +1 -0
- package/dist/auth/credentials.js +150 -0
- package/dist/auth/credentials.js.map +1 -0
- package/dist/auth/device.d.ts +58 -0
- package/dist/auth/device.d.ts.map +1 -0
- package/dist/auth/device.js +235 -0
- package/dist/auth/device.js.map +1 -0
- package/dist/auth/token.d.ts +55 -0
- package/dist/auth/token.d.ts.map +1 -0
- package/dist/auth/token.js +153 -0
- package/dist/auth/token.js.map +1 -0
- package/dist/cli.js +51 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/auto.d.ts.map +1 -1
- package/dist/commands/auto.js +321 -236
- package/dist/commands/auto.js.map +1 -1
- package/dist/commands/complete.d.ts +1 -0
- package/dist/commands/complete.d.ts.map +1 -1
- package/dist/commands/complete.js +30 -0
- package/dist/commands/complete.js.map +1 -1
- package/dist/commands/connect.d.ts +25 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +305 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/login.d.ts +19 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +119 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +15 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +50 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/next.d.ts +1 -0
- package/dist/commands/next.d.ts.map +1 -1
- package/dist/commands/next.js +41 -2
- package/dist/commands/next.js.map +1 -1
- package/dist/commands/project.d.ts +13 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +92 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/session.d.ts +10 -2
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +80 -3
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/status.d.ts +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +51 -0
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/sync.d.ts +33 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +555 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/work.d.ts +1 -0
- package/dist/commands/work.d.ts.map +1 -1
- package/dist/commands/work.js +22 -1
- package/dist/commands/work.js.map +1 -1
- package/dist/config/global.d.ts +54 -0
- package/dist/config/global.d.ts.map +1 -0
- package/dist/config/global.js +110 -0
- package/dist/config/global.js.map +1 -0
- package/dist/prompts/coding.d.ts +31 -0
- package/dist/prompts/coding.d.ts.map +1 -0
- package/dist/prompts/coding.js +228 -0
- package/dist/prompts/coding.js.map +1 -0
- package/dist/prompts/index.d.ts +10 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +10 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/initializer.d.ts +20 -0
- package/dist/prompts/initializer.d.ts.map +1 -0
- package/dist/prompts/initializer.js +147 -0
- package/dist/prompts/initializer.js.map +1 -0
- package/dist/sdk/client.d.ts +67 -0
- package/dist/sdk/client.d.ts.map +1 -0
- package/dist/sdk/client.js +196 -0
- package/dist/sdk/client.js.map +1 -0
- package/dist/sdk/index.d.ts +8 -0
- package/dist/sdk/index.d.ts.map +1 -0
- package/dist/sdk/index.js +8 -0
- package/dist/sdk/index.js.map +1 -0
- package/dist/sdk/security.d.ts +43 -0
- package/dist/sdk/security.d.ts.map +1 -0
- package/dist/sdk/security.js +214 -0
- package/dist/sdk/security.js.map +1 -0
- package/dist/types.d.ts +64 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/connection.d.ts +126 -0
- package/dist/utils/connection.d.ts.map +1 -0
- package/dist/utils/connection.js +226 -0
- package/dist/utils/connection.js.map +1 -0
- package/dist/utils/messages.d.ts +76 -0
- package/dist/utils/messages.d.ts.map +1 -1
- package/dist/utils/messages.js +87 -1
- package/dist/utils/messages.js.map +1 -1
- package/dist/utils/output.d.ts +10 -0
- package/dist/utils/output.d.ts.map +1 -1
- package/dist/utils/output.js +31 -0
- package/dist/utils/output.js.map +1 -1
- package/dist/utils/prompt.d.ts +10 -0
- package/dist/utils/prompt.d.ts.map +1 -0
- package/dist/utils/prompt.js +22 -0
- package/dist/utils/prompt.js.map +1 -0
- package/dist/utils/sseClient.d.ts +183 -0
- package/dist/utils/sseClient.d.ts.map +1 -0
- package/dist/utils/sseClient.js +391 -0
- package/dist/utils/sseClient.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Initializer Agent 프롬프트
|
|
3
|
+
*
|
|
4
|
+
* 첫 번째 세션에서 프로젝트 초기 설정을 담당
|
|
5
|
+
* - 프로젝트 구조 분석
|
|
6
|
+
* - feature_list.json 생성/검증
|
|
7
|
+
* - 초기 설정 파일 생성
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Initializer Agent용 프롬프트 생성
|
|
11
|
+
* PRD 또는 app_spec이 있는 경우 이를 기반으로 feature 생성
|
|
12
|
+
*/
|
|
13
|
+
export function getInitializerPrompt(context, prdContent) {
|
|
14
|
+
const lines = [];
|
|
15
|
+
lines.push('# INITIALIZER AGENT');
|
|
16
|
+
lines.push('');
|
|
17
|
+
lines.push('You are the FIRST agent in a long-running autonomous development process.');
|
|
18
|
+
lines.push('Your job is to set up the foundation for all future coding sessions.');
|
|
19
|
+
lines.push('');
|
|
20
|
+
lines.push('**IMPORTANT:** This is a FRESH context window. You have no memory of previous sessions.');
|
|
21
|
+
lines.push('');
|
|
22
|
+
// 프로젝트 정보
|
|
23
|
+
lines.push('## Project Information');
|
|
24
|
+
lines.push('');
|
|
25
|
+
lines.push(`- **Project Name:** ${context.projectName}`);
|
|
26
|
+
lines.push(`- **Project Directory:** ${context.projectDir}`);
|
|
27
|
+
lines.push(`- **Existing Features:** ${context.hasExistingFeatures ? `Yes (${context.featureCount})` : 'No'}`);
|
|
28
|
+
lines.push('');
|
|
29
|
+
// PRD가 있는 경우
|
|
30
|
+
if (prdContent) {
|
|
31
|
+
lines.push('## Product Requirements Document (PRD)');
|
|
32
|
+
lines.push('');
|
|
33
|
+
lines.push('```markdown');
|
|
34
|
+
lines.push(prdContent);
|
|
35
|
+
lines.push('```');
|
|
36
|
+
lines.push('');
|
|
37
|
+
}
|
|
38
|
+
// 작업 지시
|
|
39
|
+
lines.push('## Your Tasks');
|
|
40
|
+
lines.push('');
|
|
41
|
+
if (!context.hasExistingFeatures) {
|
|
42
|
+
lines.push('### TASK 1: Analyze Project');
|
|
43
|
+
lines.push('');
|
|
44
|
+
lines.push('1. Run `pwd && ls -la` to understand the current directory');
|
|
45
|
+
lines.push('2. Check for existing code, package.json, or configuration files');
|
|
46
|
+
lines.push('3. Identify the project type (Node.js, Python, etc.)');
|
|
47
|
+
lines.push('');
|
|
48
|
+
lines.push('### TASK 2: Create Feature List');
|
|
49
|
+
lines.push('');
|
|
50
|
+
lines.push('Create `.aiag/feature_list.json` with comprehensive features covering:');
|
|
51
|
+
lines.push('');
|
|
52
|
+
lines.push('- All functional requirements from PRD (if provided)');
|
|
53
|
+
lines.push('- Infrastructure setup (project init, dependencies, config)');
|
|
54
|
+
lines.push('- Core features (main functionality)');
|
|
55
|
+
lines.push('- UI/UX requirements (if applicable)');
|
|
56
|
+
lines.push('- Testing requirements');
|
|
57
|
+
lines.push('- Documentation');
|
|
58
|
+
lines.push('');
|
|
59
|
+
lines.push('**Feature List Schema:**');
|
|
60
|
+
lines.push('```json');
|
|
61
|
+
lines.push('{');
|
|
62
|
+
lines.push(' "projectName": "project-name",');
|
|
63
|
+
lines.push(' "version": "1.0.0",');
|
|
64
|
+
lines.push(' "features": [');
|
|
65
|
+
lines.push(' {');
|
|
66
|
+
lines.push(' "id": "CATEGORY-001",');
|
|
67
|
+
lines.push(' "description": "Feature description",');
|
|
68
|
+
lines.push(' "priority": "critical|high|medium|low",');
|
|
69
|
+
lines.push(' "category": "setup|core|ui|test|docs",');
|
|
70
|
+
lines.push(' "acceptanceCriteria": ["Criterion 1", "Criterion 2"],');
|
|
71
|
+
lines.push(' "testCommand": "npm test",');
|
|
72
|
+
lines.push(' "dependsOn": [],');
|
|
73
|
+
lines.push(' "passes": false');
|
|
74
|
+
lines.push(' }');
|
|
75
|
+
lines.push(' ]');
|
|
76
|
+
lines.push('}');
|
|
77
|
+
lines.push('```');
|
|
78
|
+
lines.push('');
|
|
79
|
+
lines.push('**Priority Guidelines:**');
|
|
80
|
+
lines.push('- `critical`: Must be done first (infrastructure, core dependencies)');
|
|
81
|
+
lines.push('- `high`: Important for core functionality');
|
|
82
|
+
lines.push('- `medium`: Nice to have, enhances user experience');
|
|
83
|
+
lines.push('- `low`: Optional, can be done later');
|
|
84
|
+
lines.push('');
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
lines.push('### TASK 1: Review Existing Features');
|
|
88
|
+
lines.push('');
|
|
89
|
+
lines.push('1. Read `.aiag/feature_list.json`');
|
|
90
|
+
lines.push('2. Check `.aiag/progress.md` for session history');
|
|
91
|
+
lines.push('3. Verify which features are completed (passes: true)');
|
|
92
|
+
lines.push('');
|
|
93
|
+
lines.push('### TASK 2: Validate and Update');
|
|
94
|
+
lines.push('');
|
|
95
|
+
lines.push('1. Ensure all features have valid acceptance criteria');
|
|
96
|
+
lines.push('2. Check for missing dependencies between features');
|
|
97
|
+
lines.push('3. Update priorities if needed based on current state');
|
|
98
|
+
lines.push('');
|
|
99
|
+
}
|
|
100
|
+
lines.push('### TASK 3: Initialize Progress Tracking');
|
|
101
|
+
lines.push('');
|
|
102
|
+
lines.push('Create or update `.aiag/progress.md` with:');
|
|
103
|
+
lines.push('');
|
|
104
|
+
lines.push('```markdown');
|
|
105
|
+
lines.push('# Project Progress');
|
|
106
|
+
lines.push('');
|
|
107
|
+
lines.push('## Initialization');
|
|
108
|
+
lines.push('- Date: [current date]');
|
|
109
|
+
lines.push('- Agent: Initializer');
|
|
110
|
+
lines.push('- Features created: [count]');
|
|
111
|
+
lines.push('');
|
|
112
|
+
lines.push('## Next Steps');
|
|
113
|
+
lines.push('- [List of next features to implement]');
|
|
114
|
+
lines.push('```');
|
|
115
|
+
lines.push('');
|
|
116
|
+
lines.push('### TASK 4: First Commit (if git repo)');
|
|
117
|
+
lines.push('');
|
|
118
|
+
lines.push('```bash');
|
|
119
|
+
lines.push('git add .aiag/');
|
|
120
|
+
lines.push('git commit -m "chore: initialize aiag project structure"');
|
|
121
|
+
lines.push('```');
|
|
122
|
+
lines.push('');
|
|
123
|
+
// 완료 조건
|
|
124
|
+
lines.push('## Completion Criteria');
|
|
125
|
+
lines.push('');
|
|
126
|
+
lines.push('Before finishing, verify:');
|
|
127
|
+
lines.push('');
|
|
128
|
+
lines.push('1. ✓ `.aiag/feature_list.json` exists and is valid JSON');
|
|
129
|
+
lines.push('2. ✓ All features have id, description, priority, category, acceptanceCriteria');
|
|
130
|
+
lines.push('3. ✓ `.aiag/progress.md` is initialized');
|
|
131
|
+
lines.push('4. ✓ Changes are committed (if git repo)');
|
|
132
|
+
lines.push('');
|
|
133
|
+
// 핸드오프 지시
|
|
134
|
+
lines.push('## Handoff Notes');
|
|
135
|
+
lines.push('');
|
|
136
|
+
lines.push('After completing your tasks, document in `.aiag/progress.md`:');
|
|
137
|
+
lines.push('');
|
|
138
|
+
lines.push('1. What was accomplished in this session');
|
|
139
|
+
lines.push('2. Current project state');
|
|
140
|
+
lines.push('3. Recommendations for the next Coding Agent');
|
|
141
|
+
lines.push('');
|
|
142
|
+
lines.push('---');
|
|
143
|
+
lines.push('');
|
|
144
|
+
lines.push('**Start initialization now.**');
|
|
145
|
+
return lines.join('\n');
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=initializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initializer.js","sourceRoot":"","sources":["../../src/prompts/initializer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Agent SDK 클라이언트 모듈
|
|
3
|
+
*
|
|
4
|
+
* CLI spawn 대신 SDK를 직접 사용하여 안정적인 에이전트 실행 제공
|
|
5
|
+
* - 스트리밍 응답 처리
|
|
6
|
+
* - 세션 관리
|
|
7
|
+
* - 에러 핸들링
|
|
8
|
+
*/
|
|
9
|
+
import { type Options, type SDKMessage, type SDKResultMessage, type Query } from '@anthropic-ai/claude-agent-sdk';
|
|
10
|
+
import { type SecurityConfig } from './security.js';
|
|
11
|
+
import type { Feature } from '../types.js';
|
|
12
|
+
export interface AgentOptions {
|
|
13
|
+
/** 작업 디렉토리 */
|
|
14
|
+
workingDirectory: string;
|
|
15
|
+
/** 프롬프트 */
|
|
16
|
+
prompt: string;
|
|
17
|
+
/** 모델 (기본: claude-sonnet-4-5-20250929) */
|
|
18
|
+
model?: string;
|
|
19
|
+
/** 최대 턴 수 */
|
|
20
|
+
maxTurns?: number;
|
|
21
|
+
/** 시스템 프롬프트 */
|
|
22
|
+
systemPrompt?: string;
|
|
23
|
+
/** 보안 설정 */
|
|
24
|
+
securityConfig?: SecurityConfig;
|
|
25
|
+
/** 진행 상황 콜백 */
|
|
26
|
+
onProgress?: (message: SDKMessage) => void;
|
|
27
|
+
/** 로그 콜백 */
|
|
28
|
+
onLog?: (message: string) => void;
|
|
29
|
+
/** 타임아웃 (밀리초) */
|
|
30
|
+
timeout?: number;
|
|
31
|
+
/** 최대 비용 제한 (USD) */
|
|
32
|
+
maxBudgetUsd?: number;
|
|
33
|
+
/** Dry run 모드 */
|
|
34
|
+
dryRun?: boolean;
|
|
35
|
+
/** MCP 서버 설정 */
|
|
36
|
+
mcpServers?: Record<string, unknown>;
|
|
37
|
+
}
|
|
38
|
+
export interface AgentResult {
|
|
39
|
+
/** 성공 여부 */
|
|
40
|
+
success: boolean;
|
|
41
|
+
/** 결과 메시지 */
|
|
42
|
+
result?: string;
|
|
43
|
+
/** 에러 메시지 */
|
|
44
|
+
error?: string;
|
|
45
|
+
/** 총 턴 수 */
|
|
46
|
+
numTurns?: number;
|
|
47
|
+
/** 실행 시간 (ms) */
|
|
48
|
+
durationMs?: number;
|
|
49
|
+
/** 비용 (USD) */
|
|
50
|
+
costUsd?: number;
|
|
51
|
+
/** 세션 ID */
|
|
52
|
+
sessionId?: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Claude Agent SDK를 사용하여 에이전트 실행
|
|
56
|
+
*/
|
|
57
|
+
export declare function runAgent(options: AgentOptions): Promise<AgentResult>;
|
|
58
|
+
/**
|
|
59
|
+
* Feature 구현을 위한 특화된 에이전트 실행
|
|
60
|
+
*/
|
|
61
|
+
export declare function runFeatureImplementation(feature: Feature, prompt: string, options: Omit<AgentOptions, 'prompt'>): Promise<AgentResult>;
|
|
62
|
+
/**
|
|
63
|
+
* Initializer 에이전트 실행
|
|
64
|
+
*/
|
|
65
|
+
export declare function runInitializer(prompt: string, options: Omit<AgentOptions, 'prompt' | 'maxTurns'>): Promise<AgentResult>;
|
|
66
|
+
export type { SDKMessage, SDKResultMessage, Query, Options };
|
|
67
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/sdk/client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,KAAK,EAIX,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAyC,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,YAAY;IAC3B,cAAc;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW;IACX,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY;IACZ,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,eAAe;IACf,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;IAC3C,YAAY;IACZ,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,iBAAiB;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gBAAgB;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CA0K1E;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,GACpC,OAAO,CAAC,WAAW,CAAC,CAoBtB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,UAAU,CAAC,GACjD,OAAO,CAAC,WAAW,CAAC,CAkBtB;AAGD,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Agent SDK 클라이언트 모듈
|
|
3
|
+
*
|
|
4
|
+
* CLI spawn 대신 SDK를 직접 사용하여 안정적인 에이전트 실행 제공
|
|
5
|
+
* - 스트리밍 응답 처리
|
|
6
|
+
* - 세션 관리
|
|
7
|
+
* - 에러 핸들링
|
|
8
|
+
*/
|
|
9
|
+
import { query, } from '@anthropic-ai/claude-agent-sdk';
|
|
10
|
+
import { createSecurityHooks, createCanUseTool } from './security.js';
|
|
11
|
+
/**
|
|
12
|
+
* Claude Agent SDK를 사용하여 에이전트 실행
|
|
13
|
+
*/
|
|
14
|
+
export async function runAgent(options) {
|
|
15
|
+
const { workingDirectory, prompt, model = 'claude-sonnet-4-5-20250929', maxTurns = 200, systemPrompt, securityConfig, onProgress, onLog, timeout = 30 * 60 * 1000, // 30분 기본값
|
|
16
|
+
maxBudgetUsd, dryRun = false, mcpServers, } = options;
|
|
17
|
+
// Dry run 모드
|
|
18
|
+
if (dryRun) {
|
|
19
|
+
onLog?.('[DRY RUN] SDK Agent 실행 시뮬레이션');
|
|
20
|
+
onLog?.(` Working Directory: ${workingDirectory}`);
|
|
21
|
+
onLog?.(` Model: ${model}`);
|
|
22
|
+
onLog?.(` Max Turns: ${maxTurns}`);
|
|
23
|
+
onLog?.(` Timeout: ${timeout}ms`);
|
|
24
|
+
onLog?.(` Prompt Length: ${prompt.length} characters`);
|
|
25
|
+
return {
|
|
26
|
+
success: true,
|
|
27
|
+
result: '[DRY RUN] 시뮬레이션 완료',
|
|
28
|
+
numTurns: 0,
|
|
29
|
+
durationMs: 0,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
// AbortController 설정
|
|
33
|
+
const abortController = new AbortController();
|
|
34
|
+
let timeoutHandle;
|
|
35
|
+
if (timeout > 0) {
|
|
36
|
+
timeoutHandle = setTimeout(() => {
|
|
37
|
+
abortController.abort();
|
|
38
|
+
onLog?.(`[TIMEOUT] ${timeout}ms 초과로 에이전트 중단`);
|
|
39
|
+
}, timeout);
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
// SDK 옵션 구성
|
|
43
|
+
const sdkOptions = {
|
|
44
|
+
model,
|
|
45
|
+
cwd: workingDirectory,
|
|
46
|
+
maxTurns,
|
|
47
|
+
abortController,
|
|
48
|
+
permissionMode: 'bypassPermissions',
|
|
49
|
+
allowDangerouslySkipPermissions: true,
|
|
50
|
+
settingSources: ['project', 'user'], // CLAUDE.md 로드
|
|
51
|
+
};
|
|
52
|
+
// 시스템 프롬프트 설정
|
|
53
|
+
if (systemPrompt) {
|
|
54
|
+
sdkOptions.systemPrompt = {
|
|
55
|
+
type: 'preset',
|
|
56
|
+
preset: 'claude_code',
|
|
57
|
+
append: systemPrompt,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// 보안 훅 설정
|
|
61
|
+
if (securityConfig) {
|
|
62
|
+
sdkOptions.hooks = createSecurityHooks(securityConfig, onLog);
|
|
63
|
+
sdkOptions.canUseTool = createCanUseTool(securityConfig, onLog);
|
|
64
|
+
}
|
|
65
|
+
// 비용 제한
|
|
66
|
+
if (maxBudgetUsd) {
|
|
67
|
+
sdkOptions.maxBudgetUsd = maxBudgetUsd;
|
|
68
|
+
}
|
|
69
|
+
// MCP 서버 설정
|
|
70
|
+
if (mcpServers) {
|
|
71
|
+
sdkOptions.mcpServers = mcpServers;
|
|
72
|
+
}
|
|
73
|
+
// 에이전트 실행
|
|
74
|
+
onLog?.('[SDK] 에이전트 세션 시작');
|
|
75
|
+
const response = query({ prompt, options: sdkOptions });
|
|
76
|
+
let sessionId;
|
|
77
|
+
let result;
|
|
78
|
+
const assistantMessages = [];
|
|
79
|
+
// 스트리밍 응답 처리
|
|
80
|
+
for await (const message of response) {
|
|
81
|
+
onProgress?.(message);
|
|
82
|
+
switch (message.type) {
|
|
83
|
+
case 'system':
|
|
84
|
+
if (message.subtype === 'init') {
|
|
85
|
+
sessionId = message.session_id;
|
|
86
|
+
onLog?.(`[SDK] 세션 초기화: ${sessionId}`);
|
|
87
|
+
onLog?.(`[SDK] 모델: ${message.model}`);
|
|
88
|
+
onLog?.(`[SDK] 도구: ${message.tools?.join(', ')}`);
|
|
89
|
+
}
|
|
90
|
+
break;
|
|
91
|
+
case 'assistant':
|
|
92
|
+
// 어시스턴트 메시지 수집 (마지막 응답 추출용)
|
|
93
|
+
if (message.message?.content) {
|
|
94
|
+
const content = message.message.content;
|
|
95
|
+
if (Array.isArray(content)) {
|
|
96
|
+
for (const block of content) {
|
|
97
|
+
if ('type' in block && block.type === 'text' && 'text' in block) {
|
|
98
|
+
assistantMessages.push(block.text);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
break;
|
|
104
|
+
case 'result':
|
|
105
|
+
result = message;
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// 타임아웃 해제
|
|
110
|
+
if (timeoutHandle) {
|
|
111
|
+
clearTimeout(timeoutHandle);
|
|
112
|
+
}
|
|
113
|
+
// 결과 처리
|
|
114
|
+
if (!result) {
|
|
115
|
+
return {
|
|
116
|
+
success: false,
|
|
117
|
+
error: '에이전트 결과를 받지 못함',
|
|
118
|
+
sessionId,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
if (result.subtype === 'success') {
|
|
122
|
+
return {
|
|
123
|
+
success: true,
|
|
124
|
+
result: result.result || assistantMessages.join('\n'),
|
|
125
|
+
numTurns: result.num_turns,
|
|
126
|
+
durationMs: result.duration_ms,
|
|
127
|
+
costUsd: result.total_cost_usd,
|
|
128
|
+
sessionId,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
// 에러 결과
|
|
133
|
+
const errorResult = result;
|
|
134
|
+
return {
|
|
135
|
+
success: false,
|
|
136
|
+
error: errorResult.errors?.join('\n') || `에이전트 실패: ${result.subtype}`,
|
|
137
|
+
numTurns: result.num_turns,
|
|
138
|
+
durationMs: result.duration_ms,
|
|
139
|
+
costUsd: result.total_cost_usd,
|
|
140
|
+
sessionId,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
if (timeoutHandle) {
|
|
146
|
+
clearTimeout(timeoutHandle);
|
|
147
|
+
}
|
|
148
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
149
|
+
onLog?.(`[SDK ERROR] ${errorMessage}`);
|
|
150
|
+
return {
|
|
151
|
+
success: false,
|
|
152
|
+
error: errorMessage,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Feature 구현을 위한 특화된 에이전트 실행
|
|
158
|
+
*/
|
|
159
|
+
export async function runFeatureImplementation(feature, prompt, options) {
|
|
160
|
+
const { onLog } = options;
|
|
161
|
+
onLog?.(`[SDK] Feature 구현 시작: ${feature.id}`);
|
|
162
|
+
onLog?.(`[SDK] 우선순위: ${feature.priority}`);
|
|
163
|
+
const result = await runAgent({
|
|
164
|
+
...options,
|
|
165
|
+
prompt,
|
|
166
|
+
});
|
|
167
|
+
if (result.success) {
|
|
168
|
+
onLog?.(`[SDK] Feature 구현 완료: ${feature.id}`);
|
|
169
|
+
onLog?.(`[SDK] 턴 수: ${result.numTurns}, 비용: $${result.costUsd?.toFixed(4)}`);
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
onLog?.(`[SDK] Feature 구현 실패: ${feature.id}`);
|
|
173
|
+
onLog?.(`[SDK] 에러: ${result.error}`);
|
|
174
|
+
}
|
|
175
|
+
return result;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Initializer 에이전트 실행
|
|
179
|
+
*/
|
|
180
|
+
export async function runInitializer(prompt, options) {
|
|
181
|
+
const { onLog } = options;
|
|
182
|
+
onLog?.('[SDK] Initializer 에이전트 시작');
|
|
183
|
+
const result = await runAgent({
|
|
184
|
+
...options,
|
|
185
|
+
prompt,
|
|
186
|
+
maxTurns: 100, // Initializer는 더 적은 턴
|
|
187
|
+
});
|
|
188
|
+
if (result.success) {
|
|
189
|
+
onLog?.('[SDK] Initializer 완료');
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
onLog?.(`[SDK] Initializer 실패: ${result.error}`);
|
|
193
|
+
}
|
|
194
|
+
return result;
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/sdk/client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,KAAK,GAQN,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAuB,MAAM,eAAe,CAAC;AA+C3F;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAqB;IAClD,MAAM,EACJ,gBAAgB,EAChB,MAAM,EACN,KAAK,GAAG,4BAA4B,EACpC,QAAQ,GAAG,GAAG,EACd,YAAY,EACZ,cAAc,EACd,UAAU,EACV,KAAK,EACL,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,UAAU;IACpC,YAAY,EACZ,MAAM,GAAG,KAAK,EACd,UAAU,GACX,GAAG,OAAO,CAAC;IAEZ,aAAa;IACb,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,EAAE,CAAC,8BAA8B,CAAC,CAAC;QACxC,KAAK,EAAE,CAAC,wBAAwB,gBAAgB,EAAE,CAAC,CAAC;QACpD,KAAK,EAAE,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;QAC7B,KAAK,EAAE,CAAC,gBAAgB,QAAQ,EAAE,CAAC,CAAC;QACpC,KAAK,EAAE,CAAC,cAAc,OAAO,IAAI,CAAC,CAAC;QACnC,KAAK,EAAE,CAAC,oBAAoB,MAAM,CAAC,MAAM,aAAa,CAAC,CAAC;QACxD,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,oBAAoB;YAC5B,QAAQ,EAAE,CAAC;YACX,UAAU,EAAE,CAAC;SACd,CAAC;IACJ,CAAC;IAED,qBAAqB;IACrB,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC9C,IAAI,aAAyC,CAAC;IAE9C,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,eAAe,CAAC,KAAK,EAAE,CAAC;YACxB,KAAK,EAAE,CAAC,aAAa,OAAO,gBAAgB,CAAC,CAAC;QAChD,CAAC,EAAE,OAAO,CAAC,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,YAAY;QACZ,MAAM,UAAU,GAAY;YAC1B,KAAK;YACL,GAAG,EAAE,gBAAgB;YACrB,QAAQ;YACR,eAAe;YACf,cAAc,EAAE,mBAAmB;YACnC,+BAA+B,EAAE,IAAI;YACrC,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,eAAe;SACrD,CAAC;QAEF,cAAc;QACd,IAAI,YAAY,EAAE,CAAC;YACjB,UAAU,CAAC,YAAY,GAAG;gBACxB,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,aAAa;gBACrB,MAAM,EAAE,YAAY;aACrB,CAAC;QACJ,CAAC;QAED,UAAU;QACV,IAAI,cAAc,EAAE,CAAC;YACnB,UAAU,CAAC,KAAK,GAAG,mBAAmB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YAC9D,UAAU,CAAC,UAAU,GAAG,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAClE,CAAC;QAED,QAAQ;QACR,IAAI,YAAY,EAAE,CAAC;YACjB,UAAU,CAAC,YAAY,GAAG,YAAY,CAAC;QACzC,CAAC;QAED,YAAY;QACZ,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,UAAU,GAAG,UAAmC,CAAC;QAC9D,CAAC;QAED,UAAU;QACV,KAAK,EAAE,CAAC,kBAAkB,CAAC,CAAC;QAC5B,MAAM,QAAQ,GAAU,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;QAE/D,IAAI,SAA6B,CAAC;QAClC,IAAI,MAAoC,CAAC;QACzC,MAAM,iBAAiB,GAAa,EAAE,CAAC;QAEvC,aAAa;QACb,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YACrC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC;YAEtB,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;gBACrB,KAAK,QAAQ;oBACX,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;wBAC/B,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;wBAC/B,KAAK,EAAE,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC;wBACtC,KAAK,EAAE,CAAC,aAAa,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;wBACtC,KAAK,EAAE,CAAC,aAAa,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACpD,CAAC;oBACD,MAAM;gBAER,KAAK,WAAW;oBACd,4BAA4B;oBAC5B,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;wBAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;wBACxC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;4BAC3B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gCAC5B,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;oCAChE,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAc,CAAC,CAAC;gCAC/C,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;oBACD,MAAM;gBAER,KAAK,QAAQ;oBACX,MAAM,GAAG,OAAO,CAAC;oBACjB,MAAM;YACV,CAAC;QACH,CAAC;QAED,UAAU;QACV,IAAI,aAAa,EAAE,CAAC;YAClB,YAAY,CAAC,aAAa,CAAC,CAAC;QAC9B,CAAC;QAED,QAAQ;QACR,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,gBAAgB;gBACvB,SAAS;aACV,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;gBACrD,QAAQ,EAAE,MAAM,CAAC,SAAS;gBAC1B,UAAU,EAAE,MAAM,CAAC,WAAW;gBAC9B,OAAO,EAAE,MAAM,CAAC,cAAc;gBAC9B,SAAS;aACV,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,QAAQ;YACR,MAAM,WAAW,GAAG,MAAkD,CAAC;YACvE,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,YAAY,MAAM,CAAC,OAAO,EAAE;gBACrE,QAAQ,EAAE,MAAM,CAAC,SAAS;gBAC1B,UAAU,EAAE,MAAM,CAAC,WAAW;gBAC9B,OAAO,EAAE,MAAM,CAAC,cAAc;gBAC9B,SAAS;aACV,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,aAAa,EAAE,CAAC;YAClB,YAAY,CAAC,aAAa,CAAC,CAAC;QAC9B,CAAC;QAED,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,KAAK,EAAE,CAAC,eAAe,YAAY,EAAE,CAAC,CAAC;QAEvC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,YAAY;SACpB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAAgB,EAChB,MAAc,EACd,OAAqC;IAErC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAE1B,KAAK,EAAE,CAAC,wBAAwB,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9C,KAAK,EAAE,CAAC,eAAe,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE3C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;QAC5B,GAAG,OAAO;QACV,MAAM;KACP,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,KAAK,EAAE,CAAC,wBAAwB,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9C,KAAK,EAAE,CAAC,cAAc,MAAM,CAAC,QAAQ,UAAU,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;SAAM,CAAC;QACN,KAAK,EAAE,CAAC,wBAAwB,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9C,KAAK,EAAE,CAAC,aAAa,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,OAAkD;IAElD,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAE1B,KAAK,EAAE,CAAC,2BAA2B,CAAC,CAAC;IAErC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;QAC5B,GAAG,OAAO;QACV,MAAM;QACN,QAAQ,EAAE,GAAG,EAAE,sBAAsB;KACtC,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,KAAK,EAAE,CAAC,sBAAsB,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,KAAK,EAAE,CAAC,yBAAyB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK 모듈
|
|
3
|
+
*
|
|
4
|
+
* Claude Agent SDK를 래핑하여 aiag-cli에서 사용할 수 있도록 제공
|
|
5
|
+
*/
|
|
6
|
+
export { runAgent, runFeatureImplementation, runInitializer, type AgentOptions, type AgentResult, type SDKMessage, type SDKResultMessage, type Query, type Options, } from './client.js';
|
|
7
|
+
export { createSecurityHooks, createCanUseTool, type SecurityConfig, SECURITY_PRESET_DEVELOPMENT, SECURITY_PRESET_PRODUCTION, SECURITY_PRESET_TEST, } from './security.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sdk/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,QAAQ,EACR,wBAAwB,EACxB,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,KAAK,EACV,KAAK,OAAO,GACb,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,cAAc,EACnB,2BAA2B,EAC3B,0BAA0B,EAC1B,oBAAoB,GACrB,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK 모듈
|
|
3
|
+
*
|
|
4
|
+
* Claude Agent SDK를 래핑하여 aiag-cli에서 사용할 수 있도록 제공
|
|
5
|
+
*/
|
|
6
|
+
export { runAgent, runFeatureImplementation, runInitializer, } from './client.js';
|
|
7
|
+
export { createSecurityHooks, createCanUseTool, SECURITY_PRESET_DEVELOPMENT, SECURITY_PRESET_PRODUCTION, SECURITY_PRESET_TEST, } from './security.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sdk/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,QAAQ,EACR,wBAAwB,EACxB,cAAc,GAOf,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAEhB,2BAA2B,EAC3B,0BAA0B,EAC1B,oBAAoB,GACrB,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 보안 훅 모듈
|
|
3
|
+
*
|
|
4
|
+
* Linear-Coding-Agent-Harness의 security.py를 참조하여 구현
|
|
5
|
+
* - Bash 명령어 허용목록
|
|
6
|
+
* - 위험한 명령어 차단
|
|
7
|
+
* - 파일 시스템 접근 제어
|
|
8
|
+
*/
|
|
9
|
+
import type { HookCallbackMatcher, CanUseTool } from '@anthropic-ai/claude-agent-sdk';
|
|
10
|
+
/**
|
|
11
|
+
* 보안 설정 인터페이스
|
|
12
|
+
*/
|
|
13
|
+
export interface SecurityConfig {
|
|
14
|
+
/** Bash 명령어 허용 목록 */
|
|
15
|
+
allowedBashCommands?: string[];
|
|
16
|
+
/** 허용된 디렉토리 (추가) */
|
|
17
|
+
allowedDirectories?: string[];
|
|
18
|
+
/** 차단된 패턴 */
|
|
19
|
+
blockedPatterns?: string[];
|
|
20
|
+
/** 로그 활성화 */
|
|
21
|
+
enableLogging?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 보안 훅 생성
|
|
25
|
+
*/
|
|
26
|
+
export declare function createSecurityHooks(config?: SecurityConfig, onLog?: (message: string) => void): Partial<Record<string, HookCallbackMatcher[]>>;
|
|
27
|
+
/**
|
|
28
|
+
* canUseTool 콜백 생성
|
|
29
|
+
*/
|
|
30
|
+
export declare function createCanUseTool(config?: SecurityConfig, onLog?: (message: string) => void): CanUseTool;
|
|
31
|
+
/**
|
|
32
|
+
* 보안 설정 프리셋: 개발 모드 (느슨한 보안)
|
|
33
|
+
*/
|
|
34
|
+
export declare const SECURITY_PRESET_DEVELOPMENT: SecurityConfig;
|
|
35
|
+
/**
|
|
36
|
+
* 보안 설정 프리셋: 프로덕션 모드 (엄격한 보안)
|
|
37
|
+
*/
|
|
38
|
+
export declare const SECURITY_PRESET_PRODUCTION: SecurityConfig;
|
|
39
|
+
/**
|
|
40
|
+
* 보안 설정 프리셋: 테스트 모드 (로깅 활성화)
|
|
41
|
+
*/
|
|
42
|
+
export declare const SECURITY_PRESET_TEST: SecurityConfig;
|
|
43
|
+
//# sourceMappingURL=security.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/sdk/security.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,UAAU,EAKX,MAAM,gCAAgC,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,qBAAqB;IACrB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,oBAAoB;IACpB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,aAAa;IACb,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa;IACb,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAyGD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,GAAE,cAAmB,EAC3B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAgEhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,GAAE,cAAmB,EAC3B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAChC,UAAU,CA4CZ;AAED;;GAEG;AACH,eAAO,MAAM,2BAA2B,EAAE,cAUzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,cAYxC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,cAIlC,CAAC"}
|