activo 0.3.0 → 0.3.1

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,356 @@
1
+ import * as fs from "fs";
2
+ import * as path from "path";
3
+ // YAML 간단 파서 (기본적인 구조만)
4
+ function parseSimpleYaml(content) {
5
+ // JSON인 경우 바로 파싱
6
+ if (content.trim().startsWith("{")) {
7
+ return JSON.parse(content);
8
+ }
9
+ const result = {};
10
+ const lines = content.split("\n");
11
+ const stack = [{ indent: -1, obj: result, key: "" }];
12
+ for (const line of lines) {
13
+ if (!line.trim() || line.trim().startsWith("#"))
14
+ continue;
15
+ const indent = line.search(/\S/);
16
+ const trimmed = line.trim();
17
+ // 키-값 파싱
18
+ const colonIndex = trimmed.indexOf(":");
19
+ if (colonIndex === -1)
20
+ continue;
21
+ const key = trimmed.substring(0, colonIndex).trim();
22
+ let value = trimmed.substring(colonIndex + 1).trim();
23
+ // 따옴표 제거
24
+ if ((value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"))) {
25
+ value = value.slice(1, -1);
26
+ }
27
+ // 스택 조정
28
+ while (stack.length > 1 && stack[stack.length - 1].indent >= indent) {
29
+ stack.pop();
30
+ }
31
+ const parent = stack[stack.length - 1].obj;
32
+ if (value === "" || value === "|" || value === ">") {
33
+ // 중첩 객체
34
+ parent[key] = {};
35
+ stack.push({ indent, obj: parent[key], key });
36
+ }
37
+ else if (value.startsWith("[") && value.endsWith("]")) {
38
+ // 인라인 배열
39
+ parent[key] = value
40
+ .slice(1, -1)
41
+ .split(",")
42
+ .map((s) => s.trim().replace(/['"]/g, ""));
43
+ }
44
+ else if (trimmed.startsWith("- ")) {
45
+ // 배열 항목
46
+ if (!Array.isArray(parent)) {
47
+ const parentKey = stack[stack.length - 1].key;
48
+ const grandParent = stack.length > 1 ? stack[stack.length - 2].obj : result;
49
+ grandParent[parentKey] = [];
50
+ stack[stack.length - 1].obj = grandParent[parentKey];
51
+ }
52
+ stack[stack.length - 1].obj.push(trimmed.substring(2));
53
+ }
54
+ else {
55
+ parent[key] = value;
56
+ }
57
+ }
58
+ return result;
59
+ }
60
+ // OpenAPI 스펙 분석
61
+ function analyzeOpenApiSpec(filePath) {
62
+ const content = fs.readFileSync(filePath, "utf-8");
63
+ let spec;
64
+ try {
65
+ if (filePath.endsWith(".json")) {
66
+ spec = JSON.parse(content);
67
+ }
68
+ else {
69
+ spec = parseSimpleYaml(content);
70
+ }
71
+ }
72
+ catch (e) {
73
+ return {
74
+ file: filePath,
75
+ version: "unknown",
76
+ info: {},
77
+ endpoints: [],
78
+ schemas: [],
79
+ securitySchemes: [],
80
+ issues: [`파싱 실패: ${e}`],
81
+ summary: {
82
+ totalEndpoints: 0,
83
+ endpointsWithIssues: 0,
84
+ totalSchemas: 0,
85
+ coverage: { hasSummary: 0, hasDescription: 0, hasOperationId: 0, hasResponses: 0 },
86
+ },
87
+ };
88
+ }
89
+ const version = spec.openapi || spec.swagger || "unknown";
90
+ const info = spec.info || {};
91
+ const issues = [];
92
+ const endpoints = [];
93
+ // 전역 이슈 검사
94
+ if (!info.title)
95
+ issues.push("info.title 누락");
96
+ if (!info.version)
97
+ issues.push("info.version 누락");
98
+ if (!info.description)
99
+ issues.push("info.description 누락 (API 설명 권장)");
100
+ const servers = spec.servers?.map((s) => s.url || s) || [];
101
+ if (servers.length === 0 && !spec.host) {
102
+ issues.push("servers/host 미정의");
103
+ }
104
+ // paths 분석
105
+ const paths = spec.paths || {};
106
+ const httpMethods = ["get", "post", "put", "patch", "delete", "options", "head"];
107
+ for (const [pathUrl, pathItem] of Object.entries(paths)) {
108
+ if (!pathItem || typeof pathItem !== "object")
109
+ continue;
110
+ for (const method of httpMethods) {
111
+ const operation = pathItem[method];
112
+ if (!operation)
113
+ continue;
114
+ const endpointIssues = [];
115
+ // 엔드포인트 정보 추출
116
+ const parameters = [];
117
+ if (operation.parameters) {
118
+ for (const param of operation.parameters) {
119
+ parameters.push({
120
+ name: param.name || "unknown",
121
+ in: param.in || "query",
122
+ required: param.required || false,
123
+ type: param.schema?.type || param.type,
124
+ });
125
+ }
126
+ }
127
+ // 공통 파라미터
128
+ if (pathItem.parameters) {
129
+ for (const param of pathItem.parameters) {
130
+ parameters.push({
131
+ name: param.name || "unknown",
132
+ in: param.in || "query",
133
+ required: param.required || false,
134
+ type: param.schema?.type || param.type,
135
+ });
136
+ }
137
+ }
138
+ // 요청 본문
139
+ let requestBody;
140
+ if (operation.requestBody?.content) {
141
+ const contentTypes = Object.keys(operation.requestBody.content);
142
+ requestBody = {
143
+ contentType: contentTypes[0] || "unknown",
144
+ schema: operation.requestBody.content[contentTypes[0]]?.schema?.$ref,
145
+ };
146
+ }
147
+ // 응답
148
+ const responses = [];
149
+ if (operation.responses) {
150
+ for (const [status, response] of Object.entries(operation.responses)) {
151
+ responses.push({
152
+ status,
153
+ description: response?.description,
154
+ });
155
+ }
156
+ }
157
+ // 이슈 검사
158
+ if (!operation.summary && !operation.description) {
159
+ endpointIssues.push("summary/description 없음");
160
+ }
161
+ if (!operation.operationId) {
162
+ endpointIssues.push("operationId 없음 (코드 생성 시 필요)");
163
+ }
164
+ if (responses.length === 0) {
165
+ endpointIssues.push("responses 정의 없음");
166
+ }
167
+ else {
168
+ if (!responses.some((r) => r.status.startsWith("2"))) {
169
+ endpointIssues.push("성공 응답(2xx) 정의 없음");
170
+ }
171
+ if (!responses.some((r) => r.status.startsWith("4") || r.status.startsWith("5"))) {
172
+ endpointIssues.push("에러 응답(4xx/5xx) 정의 없음");
173
+ }
174
+ }
175
+ // POST/PUT/PATCH에 requestBody 없음
176
+ if (["post", "put", "patch"].includes(method) && !requestBody && !operation.requestBody) {
177
+ endpointIssues.push(`${method.toUpperCase()} 요청에 requestBody 없음`);
178
+ }
179
+ // 경로 파라미터 검사
180
+ const pathParams = (pathUrl.match(/\{([^}]+)\}/g) || []).map((p) => p.slice(1, -1));
181
+ for (const pathParam of pathParams) {
182
+ if (!parameters.some((p) => p.name === pathParam && p.in === "path")) {
183
+ endpointIssues.push(`경로 파라미터 '${pathParam}' 정의 없음`);
184
+ }
185
+ }
186
+ // 태그 없음
187
+ if (!operation.tags || operation.tags.length === 0) {
188
+ endpointIssues.push("tags 없음 (API 그룹화 권장)");
189
+ }
190
+ endpoints.push({
191
+ path: pathUrl,
192
+ method: method.toUpperCase(),
193
+ operationId: operation.operationId,
194
+ summary: operation.summary,
195
+ tags: operation.tags,
196
+ parameters,
197
+ requestBody,
198
+ responses,
199
+ issues: endpointIssues,
200
+ });
201
+ }
202
+ }
203
+ // 스키마 추출
204
+ const schemas = [];
205
+ const components = spec.components || spec.definitions || {};
206
+ if (components.schemas) {
207
+ schemas.push(...Object.keys(components.schemas));
208
+ }
209
+ else if (spec.definitions) {
210
+ schemas.push(...Object.keys(spec.definitions));
211
+ }
212
+ // 보안 스키마 추출
213
+ const securitySchemes = [];
214
+ if (components.securitySchemes) {
215
+ securitySchemes.push(...Object.keys(components.securitySchemes));
216
+ }
217
+ else if (spec.securityDefinitions) {
218
+ securitySchemes.push(...Object.keys(spec.securityDefinitions));
219
+ }
220
+ if (securitySchemes.length === 0) {
221
+ issues.push("securitySchemes 미정의 (인증 방식 정의 권장)");
222
+ }
223
+ // 커버리지 계산
224
+ const coverage = {
225
+ hasSummary: endpoints.filter((e) => e.summary).length,
226
+ hasDescription: endpoints.filter((e) => e.summary).length, // summary로 대체
227
+ hasOperationId: endpoints.filter((e) => e.operationId).length,
228
+ hasResponses: endpoints.filter((e) => e.responses.length > 0).length,
229
+ };
230
+ return {
231
+ file: filePath,
232
+ version,
233
+ info: {
234
+ title: info.title,
235
+ version: info.version,
236
+ description: info.description,
237
+ },
238
+ servers,
239
+ endpoints,
240
+ schemas,
241
+ securitySchemes,
242
+ issues,
243
+ summary: {
244
+ totalEndpoints: endpoints.length,
245
+ endpointsWithIssues: endpoints.filter((e) => e.issues.length > 0).length,
246
+ totalSchemas: schemas.length,
247
+ coverage,
248
+ },
249
+ };
250
+ }
251
+ // 도구 정의
252
+ export const openapiTools = [
253
+ {
254
+ name: "openapi_check",
255
+ description: "OpenAPI/Swagger 스펙 파일을 분석합니다. 엔드포인트, 파라미터, 응답을 추출하고 누락된 필드, 문서화 품질, 베스트 프랙티스를 검사합니다.",
256
+ parameters: {
257
+ type: "object",
258
+ properties: {
259
+ path: {
260
+ type: "string",
261
+ description: "분석할 OpenAPI/Swagger 파일 또는 디렉토리 경로 (.yaml, .yml, .json)",
262
+ },
263
+ recursive: {
264
+ type: "boolean",
265
+ description: "디렉토리인 경우 하위 폴더 포함 여부 (기본: true)",
266
+ },
267
+ },
268
+ required: ["path"],
269
+ },
270
+ handler: async (args) => {
271
+ const targetPath = args.path;
272
+ const recursive = args.recursive !== false;
273
+ if (!fs.existsSync(targetPath)) {
274
+ return {
275
+ success: false,
276
+ content: "",
277
+ error: `경로를 찾을 수 없습니다: ${targetPath}`,
278
+ };
279
+ }
280
+ const results = [];
281
+ const stats = fs.statSync(targetPath);
282
+ const apiExtensions = [".yaml", ".yml", ".json"];
283
+ const isOpenApiFile = (filePath) => {
284
+ const content = fs.readFileSync(filePath, "utf-8");
285
+ return content.includes("openapi") || content.includes("swagger") || content.includes("paths:");
286
+ };
287
+ const analyzeFile = (filePath) => {
288
+ try {
289
+ if (isOpenApiFile(filePath)) {
290
+ results.push(analyzeOpenApiSpec(filePath));
291
+ }
292
+ }
293
+ catch (e) {
294
+ // 파싱 실패 무시
295
+ }
296
+ };
297
+ if (stats.isFile()) {
298
+ analyzeFile(targetPath);
299
+ }
300
+ else if (stats.isDirectory()) {
301
+ const walkDir = (dir) => {
302
+ const files = fs.readdirSync(dir);
303
+ for (const file of files) {
304
+ const filePath = path.join(dir, file);
305
+ const fileStat = fs.statSync(filePath);
306
+ if (fileStat.isDirectory() && recursive) {
307
+ if (!file.startsWith(".") && file !== "node_modules" && file !== "target" && file !== "build") {
308
+ walkDir(filePath);
309
+ }
310
+ }
311
+ else {
312
+ const ext = path.extname(file).toLowerCase();
313
+ if (apiExtensions.includes(ext)) {
314
+ analyzeFile(filePath);
315
+ }
316
+ }
317
+ }
318
+ };
319
+ walkDir(targetPath);
320
+ }
321
+ // 전체 통계
322
+ const totalEndpoints = results.reduce((sum, r) => sum + r.summary.totalEndpoints, 0);
323
+ const totalWithIssues = results.reduce((sum, r) => sum + r.summary.endpointsWithIssues, 0);
324
+ const output = {
325
+ analyzedFiles: results.length,
326
+ totalEndpoints,
327
+ endpointsWithIssues: totalWithIssues,
328
+ specs: results.map((r) => ({
329
+ file: r.file,
330
+ version: r.version,
331
+ info: r.info,
332
+ servers: r.servers,
333
+ schemas: r.schemas,
334
+ securitySchemes: r.securitySchemes,
335
+ specIssues: r.issues,
336
+ summary: r.summary,
337
+ endpoints: r.endpoints.map((e) => ({
338
+ method: e.method,
339
+ path: e.path,
340
+ operationId: e.operationId,
341
+ summary: e.summary,
342
+ tags: e.tags,
343
+ parametersCount: e.parameters.length,
344
+ responsesCount: e.responses.length,
345
+ issues: e.issues,
346
+ })),
347
+ })),
348
+ };
349
+ return {
350
+ success: true,
351
+ content: JSON.stringify(output, null, 2),
352
+ };
353
+ },
354
+ },
355
+ ];
356
+ //# sourceMappingURL=openapiAnalysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapiAnalysis.js","sourceRoot":"","sources":["../../../src/core/tools/openapiAnalysis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Tool } from "./types.js";
2
+ export declare const pythonTools: Tool[];
3
+ //# sourceMappingURL=pythonAnalysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pythonAnalysis.d.ts","sourceRoot":"","sources":["../../../src/core/tools/pythonAnalysis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAc,MAAM,YAAY,CAAC;AAsW9C,eAAO,MAAM,WAAW,EAAE,IAAI,EAsH7B,CAAC"}