agent-ide 0.1.10 → 0.2.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 (227) hide show
  1. package/README.md +89 -12
  2. package/dist/application/services/module-coordinator.service.d.ts +0 -1
  3. package/dist/application/services/module-coordinator.service.d.ts.map +1 -1
  4. package/dist/application/services/module-coordinator.service.js +2 -8
  5. package/dist/application/services/module-coordinator.service.js.map +1 -1
  6. package/dist/core/analysis/index.d.ts +1 -4
  7. package/dist/core/analysis/index.d.ts.map +1 -1
  8. package/dist/core/analysis/index.js +1 -7
  9. package/dist/core/analysis/index.js.map +1 -1
  10. package/dist/core/dependency/dependency-analyzer.d.ts.map +1 -1
  11. package/dist/core/dependency/dependency-analyzer.js +10 -0
  12. package/dist/core/dependency/dependency-analyzer.js.map +1 -1
  13. package/dist/core/indexing/index-engine.d.ts +4 -0
  14. package/dist/core/indexing/index-engine.d.ts.map +1 -1
  15. package/dist/core/indexing/index-engine.js +25 -1
  16. package/dist/core/indexing/index-engine.js.map +1 -1
  17. package/dist/core/indexing/symbol-index.d.ts +4 -0
  18. package/dist/core/indexing/symbol-index.d.ts.map +1 -1
  19. package/dist/core/indexing/symbol-index.js +17 -0
  20. package/dist/core/indexing/symbol-index.js.map +1 -1
  21. package/dist/core/move/import-resolver.d.ts.map +1 -1
  22. package/dist/core/move/import-resolver.js +8 -0
  23. package/dist/core/move/import-resolver.js.map +1 -1
  24. package/dist/core/move/move-service.js +7 -7
  25. package/dist/core/move/move-service.js.map +1 -1
  26. package/dist/core/refactor/swift-extractor.d.ts +98 -0
  27. package/dist/core/refactor/swift-extractor.d.ts.map +1 -0
  28. package/dist/core/refactor/swift-extractor.js +283 -0
  29. package/dist/core/refactor/swift-extractor.js.map +1 -0
  30. package/dist/core/rename/reference-updater.d.ts.map +1 -1
  31. package/dist/core/rename/reference-updater.js +16 -8
  32. package/dist/core/rename/reference-updater.js.map +1 -1
  33. package/dist/core/search/engines/text-engine.js +1 -1
  34. package/dist/core/search/engines/text-engine.js.map +1 -1
  35. package/dist/core/shit-score/grading.d.ts +39 -0
  36. package/dist/core/shit-score/grading.d.ts.map +1 -0
  37. package/dist/core/shit-score/grading.js +253 -0
  38. package/dist/core/shit-score/grading.js.map +1 -0
  39. package/dist/core/shit-score/index.d.ts +9 -0
  40. package/dist/core/shit-score/index.d.ts.map +1 -0
  41. package/dist/core/shit-score/index.js +8 -0
  42. package/dist/core/shit-score/index.js.map +1 -0
  43. package/dist/core/shit-score/score-calculator.d.ts +75 -0
  44. package/dist/core/shit-score/score-calculator.d.ts.map +1 -0
  45. package/dist/core/shit-score/score-calculator.js +240 -0
  46. package/dist/core/shit-score/score-calculator.js.map +1 -0
  47. package/dist/core/shit-score/shit-score-analyzer.d.ts +84 -0
  48. package/dist/core/shit-score/shit-score-analyzer.d.ts.map +1 -0
  49. package/dist/core/shit-score/shit-score-analyzer.js +595 -0
  50. package/dist/core/shit-score/shit-score-analyzer.js.map +1 -0
  51. package/dist/core/shit-score/types.d.ts +231 -0
  52. package/dist/core/shit-score/types.d.ts.map +1 -0
  53. package/dist/core/shit-score/types.js +73 -0
  54. package/dist/core/shit-score/types.js.map +1 -0
  55. package/dist/core/snapshot/code-compressor.d.ts +39 -0
  56. package/dist/core/snapshot/code-compressor.d.ts.map +1 -0
  57. package/dist/core/snapshot/code-compressor.js +211 -0
  58. package/dist/core/snapshot/code-compressor.js.map +1 -0
  59. package/dist/core/snapshot/config.d.ts +60 -0
  60. package/dist/core/snapshot/config.d.ts.map +1 -0
  61. package/dist/core/snapshot/config.js +136 -0
  62. package/dist/core/snapshot/config.js.map +1 -0
  63. package/dist/core/snapshot/index.d.ts +23 -0
  64. package/dist/core/snapshot/index.d.ts.map +1 -0
  65. package/dist/core/snapshot/index.js +27 -0
  66. package/dist/core/snapshot/index.js.map +1 -0
  67. package/dist/core/snapshot/snapshot-differ.d.ts +54 -0
  68. package/dist/core/snapshot/snapshot-differ.d.ts.map +1 -0
  69. package/dist/core/snapshot/snapshot-differ.js +262 -0
  70. package/dist/core/snapshot/snapshot-differ.js.map +1 -0
  71. package/dist/core/snapshot/snapshot-engine.d.ts +94 -0
  72. package/dist/core/snapshot/snapshot-engine.d.ts.map +1 -0
  73. package/dist/core/snapshot/snapshot-engine.js +492 -0
  74. package/dist/core/snapshot/snapshot-engine.js.map +1 -0
  75. package/dist/core/snapshot/types.d.ts +216 -0
  76. package/dist/core/snapshot/types.d.ts.map +1 -0
  77. package/dist/core/snapshot/types.js +79 -0
  78. package/dist/core/snapshot/types.js.map +1 -0
  79. package/dist/infrastructure/parser/analysis-types.d.ts +198 -0
  80. package/dist/infrastructure/parser/analysis-types.d.ts.map +1 -0
  81. package/dist/infrastructure/parser/analysis-types.js +6 -0
  82. package/dist/infrastructure/parser/analysis-types.js.map +1 -0
  83. package/dist/infrastructure/parser/base.d.ts +36 -0
  84. package/dist/infrastructure/parser/base.d.ts.map +1 -1
  85. package/dist/infrastructure/parser/base.js +72 -0
  86. package/dist/infrastructure/parser/base.js.map +1 -1
  87. package/dist/infrastructure/parser/index.d.ts +1 -0
  88. package/dist/infrastructure/parser/index.d.ts.map +1 -1
  89. package/dist/infrastructure/parser/index.js.map +1 -1
  90. package/dist/infrastructure/parser/interface.d.ts +63 -0
  91. package/dist/infrastructure/parser/interface.d.ts.map +1 -1
  92. package/dist/infrastructure/parser/interface.js +11 -1
  93. package/dist/infrastructure/parser/interface.js.map +1 -1
  94. package/dist/interfaces/cli/cli.d.ts +24 -0
  95. package/dist/interfaces/cli/cli.d.ts.map +1 -1
  96. package/dist/interfaces/cli/cli.js +1417 -141
  97. package/dist/interfaces/cli/cli.js.map +1 -1
  98. package/dist/plugins/javascript/parser.d.ts +41 -0
  99. package/dist/plugins/javascript/parser.d.ts.map +1 -1
  100. package/dist/plugins/javascript/parser.js +284 -0
  101. package/dist/plugins/javascript/parser.js.map +1 -1
  102. package/dist/plugins/swift/analyzers/complexity-analyzer.d.ts +41 -0
  103. package/dist/plugins/swift/analyzers/complexity-analyzer.d.ts.map +1 -0
  104. package/dist/plugins/swift/analyzers/complexity-analyzer.js +206 -0
  105. package/dist/plugins/swift/analyzers/complexity-analyzer.js.map +1 -0
  106. package/dist/plugins/swift/analyzers/duplication-detector.d.ts +89 -0
  107. package/dist/plugins/swift/analyzers/duplication-detector.d.ts.map +1 -0
  108. package/dist/plugins/swift/analyzers/duplication-detector.js +271 -0
  109. package/dist/plugins/swift/analyzers/duplication-detector.js.map +1 -0
  110. package/dist/plugins/swift/analyzers/error-handling-checker.d.ts +34 -0
  111. package/dist/plugins/swift/analyzers/error-handling-checker.d.ts.map +1 -0
  112. package/dist/plugins/swift/analyzers/error-handling-checker.js +135 -0
  113. package/dist/plugins/swift/analyzers/error-handling-checker.js.map +1 -0
  114. package/dist/plugins/swift/analyzers/naming-checker.d.ts +47 -0
  115. package/dist/plugins/swift/analyzers/naming-checker.d.ts.map +1 -0
  116. package/dist/plugins/swift/analyzers/naming-checker.js +161 -0
  117. package/dist/plugins/swift/analyzers/naming-checker.js.map +1 -0
  118. package/dist/plugins/swift/analyzers/pattern-detector.d.ts +78 -0
  119. package/dist/plugins/swift/analyzers/pattern-detector.d.ts.map +1 -0
  120. package/dist/plugins/swift/analyzers/pattern-detector.js +247 -0
  121. package/dist/plugins/swift/analyzers/pattern-detector.js.map +1 -0
  122. package/dist/plugins/swift/analyzers/security-checker.d.ts +38 -0
  123. package/dist/plugins/swift/analyzers/security-checker.d.ts.map +1 -0
  124. package/dist/plugins/swift/analyzers/security-checker.js +135 -0
  125. package/dist/plugins/swift/analyzers/security-checker.js.map +1 -0
  126. package/dist/plugins/swift/analyzers/test-coverage-checker.d.ts +26 -0
  127. package/dist/plugins/swift/analyzers/test-coverage-checker.d.ts.map +1 -0
  128. package/dist/plugins/swift/analyzers/test-coverage-checker.js +63 -0
  129. package/dist/plugins/swift/analyzers/test-coverage-checker.js.map +1 -0
  130. package/dist/plugins/swift/analyzers/type-safety-checker.d.ts +41 -0
  131. package/dist/plugins/swift/analyzers/type-safety-checker.d.ts.map +1 -0
  132. package/dist/plugins/swift/analyzers/type-safety-checker.js +121 -0
  133. package/dist/plugins/swift/analyzers/type-safety-checker.js.map +1 -0
  134. package/dist/plugins/swift/analyzers/unused-symbol-detector.d.ts +38 -0
  135. package/dist/plugins/swift/analyzers/unused-symbol-detector.d.ts.map +1 -0
  136. package/dist/plugins/swift/analyzers/unused-symbol-detector.js +211 -0
  137. package/dist/plugins/swift/analyzers/unused-symbol-detector.js.map +1 -0
  138. package/dist/plugins/swift/dependency-analyzer.d.ts +33 -0
  139. package/dist/plugins/swift/dependency-analyzer.d.ts.map +1 -0
  140. package/dist/plugins/swift/dependency-analyzer.js +95 -0
  141. package/dist/plugins/swift/dependency-analyzer.js.map +1 -0
  142. package/dist/plugins/swift/index.d.ts +14 -0
  143. package/dist/plugins/swift/index.d.ts.map +1 -0
  144. package/dist/plugins/swift/index.js +19 -0
  145. package/dist/plugins/swift/index.js.map +1 -0
  146. package/dist/plugins/swift/parser.d.ts +160 -0
  147. package/dist/plugins/swift/parser.d.ts.map +1 -0
  148. package/dist/plugins/swift/parser.js +670 -0
  149. package/dist/plugins/swift/parser.js.map +1 -0
  150. package/dist/plugins/swift/swift-bridge/swift-parser +0 -0
  151. package/dist/plugins/swift/symbol-extractor.d.ts +46 -0
  152. package/dist/plugins/swift/symbol-extractor.d.ts.map +1 -0
  153. package/dist/plugins/swift/symbol-extractor.js +187 -0
  154. package/dist/plugins/swift/symbol-extractor.js.map +1 -0
  155. package/dist/plugins/swift/types.d.ts +137 -0
  156. package/dist/plugins/swift/types.d.ts.map +1 -0
  157. package/dist/plugins/swift/types.js +212 -0
  158. package/dist/plugins/swift/types.js.map +1 -0
  159. package/dist/plugins/typescript/analyzers/complexity-analyzer.d.ts +39 -0
  160. package/dist/plugins/typescript/analyzers/complexity-analyzer.d.ts.map +1 -0
  161. package/dist/plugins/typescript/analyzers/complexity-analyzer.js +196 -0
  162. package/dist/plugins/typescript/analyzers/complexity-analyzer.js.map +1 -0
  163. package/dist/{core/analysis → plugins/typescript/analyzers}/duplication-detector.d.ts +34 -3
  164. package/dist/plugins/typescript/analyzers/duplication-detector.d.ts.map +1 -0
  165. package/dist/plugins/typescript/analyzers/duplication-detector.js +695 -0
  166. package/dist/plugins/typescript/analyzers/duplication-detector.js.map +1 -0
  167. package/dist/plugins/typescript/analyzers/error-handling-checker.d.ts +26 -0
  168. package/dist/plugins/typescript/analyzers/error-handling-checker.d.ts.map +1 -0
  169. package/dist/plugins/typescript/analyzers/error-handling-checker.js +84 -0
  170. package/dist/plugins/typescript/analyzers/error-handling-checker.js.map +1 -0
  171. package/dist/plugins/typescript/analyzers/naming-checker.d.ts +30 -0
  172. package/dist/plugins/typescript/analyzers/naming-checker.d.ts.map +1 -0
  173. package/dist/plugins/typescript/analyzers/naming-checker.js +116 -0
  174. package/dist/plugins/typescript/analyzers/naming-checker.js.map +1 -0
  175. package/dist/plugins/typescript/analyzers/pattern-detector.d.ts +80 -0
  176. package/dist/plugins/typescript/analyzers/pattern-detector.d.ts.map +1 -0
  177. package/dist/plugins/typescript/analyzers/pattern-detector.js +267 -0
  178. package/dist/plugins/typescript/analyzers/pattern-detector.js.map +1 -0
  179. package/dist/plugins/typescript/analyzers/security-checker.d.ts +34 -0
  180. package/dist/plugins/typescript/analyzers/security-checker.d.ts.map +1 -0
  181. package/dist/plugins/typescript/analyzers/security-checker.js +126 -0
  182. package/dist/plugins/typescript/analyzers/security-checker.js.map +1 -0
  183. package/dist/plugins/typescript/analyzers/test-coverage-checker.d.ts +22 -0
  184. package/dist/plugins/typescript/analyzers/test-coverage-checker.d.ts.map +1 -0
  185. package/dist/plugins/typescript/analyzers/test-coverage-checker.js +62 -0
  186. package/dist/plugins/typescript/analyzers/test-coverage-checker.js.map +1 -0
  187. package/dist/plugins/typescript/analyzers/type-safety-checker.d.ts +32 -0
  188. package/dist/plugins/typescript/analyzers/type-safety-checker.d.ts.map +1 -0
  189. package/dist/plugins/typescript/analyzers/type-safety-checker.js +86 -0
  190. package/dist/plugins/typescript/analyzers/type-safety-checker.js.map +1 -0
  191. package/dist/plugins/typescript/analyzers/unused-symbol-detector.d.ts +47 -0
  192. package/dist/plugins/typescript/analyzers/unused-symbol-detector.d.ts.map +1 -0
  193. package/dist/plugins/typescript/analyzers/unused-symbol-detector.js +152 -0
  194. package/dist/plugins/typescript/analyzers/unused-symbol-detector.js.map +1 -0
  195. package/dist/plugins/typescript/parser.d.ts +41 -0
  196. package/dist/plugins/typescript/parser.d.ts.map +1 -1
  197. package/dist/plugins/typescript/parser.js +336 -0
  198. package/dist/plugins/typescript/parser.js.map +1 -1
  199. package/dist/shared/types/symbol.d.ts +7 -1
  200. package/dist/shared/types/symbol.d.ts.map +1 -1
  201. package/dist/shared/types/symbol.js +8 -2
  202. package/dist/shared/types/symbol.js.map +1 -1
  203. package/package.json +17 -7
  204. package/bin/mcp-server.js +0 -20
  205. package/dist/core/analysis/complexity-analyzer.d.ts +0 -81
  206. package/dist/core/analysis/complexity-analyzer.d.ts.map +0 -1
  207. package/dist/core/analysis/complexity-analyzer.js +0 -255
  208. package/dist/core/analysis/complexity-analyzer.js.map +0 -1
  209. package/dist/core/analysis/dead-code-detector.d.ts +0 -152
  210. package/dist/core/analysis/dead-code-detector.d.ts.map +0 -1
  211. package/dist/core/analysis/dead-code-detector.js +0 -351
  212. package/dist/core/analysis/dead-code-detector.js.map +0 -1
  213. package/dist/core/analysis/duplication-detector.d.ts.map +0 -1
  214. package/dist/core/analysis/duplication-detector.js +0 -433
  215. package/dist/core/analysis/duplication-detector.js.map +0 -1
  216. package/dist/interfaces/mcp/index.d.ts +0 -7
  217. package/dist/interfaces/mcp/index.d.ts.map +0 -1
  218. package/dist/interfaces/mcp/index.js +0 -6
  219. package/dist/interfaces/mcp/index.js.map +0 -1
  220. package/dist/interfaces/mcp/mcp-server.d.ts +0 -34
  221. package/dist/interfaces/mcp/mcp-server.d.ts.map +0 -1
  222. package/dist/interfaces/mcp/mcp-server.js +0 -162
  223. package/dist/interfaces/mcp/mcp-server.js.map +0 -1
  224. package/dist/interfaces/mcp/mcp.d.ts +0 -52
  225. package/dist/interfaces/mcp/mcp.d.ts.map +0 -1
  226. package/dist/interfaces/mcp/mcp.js +0 -853
  227. package/dist/interfaces/mcp/mcp.js.map +0 -1
@@ -0,0 +1,231 @@
1
+ /**
2
+ * ShitScore 模組型別定義
3
+ */
4
+ /**
5
+ * 評級等級
6
+ */
7
+ export declare enum GradeLevel {
8
+ A = "A",
9
+ B = "B",
10
+ C = "C",
11
+ D = "D",
12
+ F = "F"
13
+ }
14
+ /**
15
+ * 嚴重程度等級
16
+ */
17
+ export declare enum SeverityLevel {
18
+ Low = "low",
19
+ Medium = "medium",
20
+ High = "high",
21
+ Critical = "critical"
22
+ }
23
+ /**
24
+ * 垃圾類型
25
+ */
26
+ export declare enum ShitType {
27
+ HighComplexity = "high_complexity",
28
+ LongFunction = "long_function",
29
+ DeepNesting = "deep_nesting",
30
+ TooManyParams = "too_many_params",
31
+ DeadCode = "dead_code",
32
+ LargeFile = "large_file",
33
+ DuplicateCode = "duplicate_code",
34
+ CircularDependency = "circular_dependency",
35
+ OrphanFile = "orphan_file",
36
+ HighCoupling = "high_coupling",
37
+ TypeSafety = "type_safety",
38
+ LowTestCoverage = "low_test_coverage",
39
+ PoorErrorHandling = "poor_error_handling",
40
+ NamingViolation = "naming_violation",
41
+ SecurityRisk = "security_risk"
42
+ }
43
+ /**
44
+ * 評級資訊
45
+ */
46
+ export interface GradeInfo {
47
+ readonly level: GradeLevel;
48
+ readonly emoji: string;
49
+ readonly message: string;
50
+ readonly minScore: number;
51
+ readonly maxScore: number;
52
+ }
53
+ /**
54
+ * 維度評分
55
+ */
56
+ export interface DimensionScore {
57
+ readonly dimension: string;
58
+ readonly score: number;
59
+ readonly weight: number;
60
+ readonly weightedScore: number;
61
+ readonly breakdown: Record<string, number>;
62
+ }
63
+ /**
64
+ * 垃圾項目
65
+ */
66
+ export interface ShitItem {
67
+ readonly filePath: string;
68
+ readonly type: ShitType;
69
+ readonly severity: SeverityLevel;
70
+ readonly score: number;
71
+ readonly description: string;
72
+ readonly location?: {
73
+ readonly line: number;
74
+ readonly column: number;
75
+ };
76
+ }
77
+ /**
78
+ * 垃圾統計
79
+ */
80
+ export interface ShitStats {
81
+ readonly totalShit: number;
82
+ readonly byType: Record<string, number>;
83
+ readonly bySeverity: Record<string, number>;
84
+ readonly topFiles: readonly string[];
85
+ }
86
+ /**
87
+ * 改進建議
88
+ */
89
+ export interface Recommendation {
90
+ readonly priority: SeverityLevel;
91
+ readonly category: string;
92
+ readonly suggestion: string;
93
+ readonly affectedFiles: readonly string[];
94
+ readonly estimatedImpact: number;
95
+ }
96
+ /**
97
+ * ShitScore 分析結果
98
+ */
99
+ export interface ShitScoreResult {
100
+ readonly shitScore: number;
101
+ readonly grade: GradeLevel;
102
+ readonly gradeInfo: GradeInfo;
103
+ readonly dimensions: {
104
+ readonly complexity: DimensionScore;
105
+ readonly maintainability: DimensionScore;
106
+ readonly architecture: DimensionScore;
107
+ readonly qualityAssurance: DimensionScore;
108
+ };
109
+ readonly summary: {
110
+ readonly totalFiles: number;
111
+ readonly analyzedFiles: number;
112
+ readonly totalShit: number;
113
+ };
114
+ readonly topShit?: readonly ShitItem[];
115
+ readonly recommendations?: readonly Recommendation[];
116
+ readonly detailedFiles?: DetailedFiles;
117
+ readonly analyzedAt: Date;
118
+ }
119
+ /**
120
+ * ShitScore 分析選項
121
+ */
122
+ export interface ShitScoreOptions {
123
+ readonly detailed: boolean;
124
+ readonly showFiles: boolean;
125
+ readonly topCount: number;
126
+ readonly maxAllowed?: number;
127
+ readonly excludePatterns?: readonly string[];
128
+ readonly includePatterns?: readonly string[];
129
+ }
130
+ /**
131
+ * 複雜度資料
132
+ */
133
+ export interface ComplexityData {
134
+ readonly totalFunctions: number;
135
+ readonly highComplexityCount: number;
136
+ readonly longFunctionCount: number;
137
+ readonly deepNestingCount: number;
138
+ readonly tooManyParamsCount: number;
139
+ }
140
+ /**
141
+ * 維護性資料
142
+ */
143
+ export interface MaintainabilityData {
144
+ readonly totalFiles: number;
145
+ readonly deadCodeCount: number;
146
+ readonly largeFileCount: number;
147
+ readonly duplicateCodeCount: number;
148
+ readonly patternDuplicationCount: number;
149
+ }
150
+ /**
151
+ * 架構資料
152
+ */
153
+ export interface ArchitectureData {
154
+ readonly totalFiles: number;
155
+ readonly circularDependencyCount: number;
156
+ readonly orphanFileCount: number;
157
+ readonly highCouplingCount: number;
158
+ }
159
+ /**
160
+ * 品質保證資料
161
+ */
162
+ export interface QualityAssuranceData {
163
+ readonly totalFiles: number;
164
+ readonly typeSafetyIssues: number;
165
+ readonly testCoverageRatio: number;
166
+ readonly errorHandlingIssues: number;
167
+ readonly namingIssues: number;
168
+ readonly securityIssues: number;
169
+ readonly strictModeEnabled: boolean;
170
+ readonly strictNullChecksEnabled: boolean;
171
+ }
172
+ /**
173
+ * 檔案詳細資訊
174
+ */
175
+ export interface FileDetail {
176
+ readonly path: string;
177
+ readonly complexity?: number;
178
+ readonly cognitiveComplexity?: number;
179
+ readonly lines?: number;
180
+ readonly maxDepth?: number;
181
+ readonly paramCount?: number;
182
+ readonly dependencies?: number;
183
+ readonly deadCodeCount?: number;
184
+ readonly anyTypeCount?: number;
185
+ readonly tsIgnoreCount?: number;
186
+ readonly testCoverageRatio?: number;
187
+ readonly emptyCatchCount?: number;
188
+ readonly namingIssues?: number;
189
+ readonly securityIssues?: number;
190
+ readonly location?: {
191
+ readonly start: number;
192
+ readonly end: number;
193
+ };
194
+ }
195
+ /**
196
+ * 詳細檔案列表(按維度分類)
197
+ */
198
+ export interface DetailedFiles {
199
+ readonly complexity: {
200
+ readonly highComplexity: readonly FileDetail[];
201
+ readonly longFunction: readonly FileDetail[];
202
+ readonly deepNesting: readonly FileDetail[];
203
+ readonly tooManyParams: readonly FileDetail[];
204
+ };
205
+ readonly maintainability: {
206
+ readonly deadCode: readonly FileDetail[];
207
+ readonly largeFile: readonly FileDetail[];
208
+ readonly duplicateCode: readonly FileDetail[];
209
+ };
210
+ readonly architecture: {
211
+ readonly orphanFile: readonly FileDetail[];
212
+ readonly highCoupling: readonly FileDetail[];
213
+ readonly circularDependency: readonly FileDetail[];
214
+ };
215
+ readonly qualityAssurance: {
216
+ readonly typeSafety: readonly FileDetail[];
217
+ readonly testCoverage: readonly FileDetail[];
218
+ readonly errorHandling: readonly FileDetail[];
219
+ readonly namingViolation: readonly FileDetail[];
220
+ readonly securityRisk: readonly FileDetail[];
221
+ };
222
+ }
223
+ /**
224
+ * 建立預設分析選項
225
+ */
226
+ export declare function createDefaultShitScoreOptions(): ShitScoreOptions;
227
+ /**
228
+ * ShitScoreResult 型別守衛
229
+ */
230
+ export declare function isShitScoreResult(value: unknown): value is ShitScoreResult;
231
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/shit-score/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * ShitScore 模組型別定義
3
+ */
4
+ /**
5
+ * 評級等級
6
+ */
7
+ export var GradeLevel;
8
+ (function (GradeLevel) {
9
+ GradeLevel["A"] = "A";
10
+ GradeLevel["B"] = "B";
11
+ GradeLevel["C"] = "C";
12
+ GradeLevel["D"] = "D";
13
+ GradeLevel["F"] = "F";
14
+ })(GradeLevel || (GradeLevel = {}));
15
+ /**
16
+ * 嚴重程度等級
17
+ */
18
+ export var SeverityLevel;
19
+ (function (SeverityLevel) {
20
+ SeverityLevel["Low"] = "low";
21
+ SeverityLevel["Medium"] = "medium";
22
+ SeverityLevel["High"] = "high";
23
+ SeverityLevel["Critical"] = "critical";
24
+ })(SeverityLevel || (SeverityLevel = {}));
25
+ /**
26
+ * 垃圾類型
27
+ */
28
+ export var ShitType;
29
+ (function (ShitType) {
30
+ ShitType["HighComplexity"] = "high_complexity";
31
+ ShitType["LongFunction"] = "long_function";
32
+ ShitType["DeepNesting"] = "deep_nesting";
33
+ ShitType["TooManyParams"] = "too_many_params";
34
+ ShitType["DeadCode"] = "dead_code";
35
+ ShitType["LargeFile"] = "large_file";
36
+ ShitType["DuplicateCode"] = "duplicate_code";
37
+ ShitType["CircularDependency"] = "circular_dependency";
38
+ ShitType["OrphanFile"] = "orphan_file";
39
+ ShitType["HighCoupling"] = "high_coupling";
40
+ // 品質保證相關類型
41
+ ShitType["TypeSafety"] = "type_safety";
42
+ ShitType["LowTestCoverage"] = "low_test_coverage";
43
+ ShitType["PoorErrorHandling"] = "poor_error_handling";
44
+ ShitType["NamingViolation"] = "naming_violation";
45
+ ShitType["SecurityRisk"] = "security_risk";
46
+ })(ShitType || (ShitType = {}));
47
+ /**
48
+ * 建立預設分析選項
49
+ */
50
+ export function createDefaultShitScoreOptions() {
51
+ return {
52
+ detailed: false,
53
+ showFiles: false,
54
+ topCount: 10,
55
+ excludePatterns: ['node_modules', '.git', 'dist', 'build', 'coverage'],
56
+ includePatterns: ['**/*.ts', '**/*.js', '**/*.tsx', '**/*.jsx'],
57
+ };
58
+ }
59
+ /**
60
+ * ShitScoreResult 型別守衛
61
+ */
62
+ export function isShitScoreResult(value) {
63
+ if (!value || typeof value !== 'object') {
64
+ return false;
65
+ }
66
+ const obj = value;
67
+ return (typeof obj.shitScore === 'number' &&
68
+ obj.shitScore >= 0 &&
69
+ obj.shitScore <= 100 &&
70
+ Object.values(GradeLevel).includes(obj.grade) &&
71
+ obj.analyzedAt instanceof Date);
72
+ }
73
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/shit-score/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,CAAN,IAAY,UAMX;AAND,WAAY,UAAU;IACpB,qBAAO,CAAA;IACP,qBAAO,CAAA;IACP,qBAAO,CAAA;IACP,qBAAO,CAAA;IACP,qBAAO,CAAA;AACT,CAAC,EANW,UAAU,KAAV,UAAU,QAMrB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,aAKX;AALD,WAAY,aAAa;IACvB,4BAAW,CAAA;IACX,kCAAiB,CAAA;IACjB,8BAAa,CAAA;IACb,sCAAqB,CAAA;AACvB,CAAC,EALW,aAAa,KAAb,aAAa,QAKxB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,QAiBX;AAjBD,WAAY,QAAQ;IAClB,8CAAkC,CAAA;IAClC,0CAA8B,CAAA;IAC9B,wCAA4B,CAAA;IAC5B,6CAAiC,CAAA;IACjC,kCAAsB,CAAA;IACtB,oCAAwB,CAAA;IACxB,4CAAgC,CAAA;IAChC,sDAA0C,CAAA;IAC1C,sCAA0B,CAAA;IAC1B,0CAA8B,CAAA;IAC9B,WAAW;IACX,sCAA0B,CAAA;IAC1B,iDAAqC,CAAA;IACrC,qDAAyC,CAAA;IACzC,gDAAoC,CAAA;IACpC,0CAA8B,CAAA;AAChC,CAAC,EAjBW,QAAQ,KAAR,QAAQ,QAiBnB;AAmMD;;GAEG;AACH,MAAM,UAAU,6BAA6B;IAC3C,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,EAAE;QACZ,eAAe,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC;QACtE,eAAe,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;KAChE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,GAAG,GAAG,KAAgC,CAAC;IAE7C,OAAO,CACL,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ;QACjC,GAAG,CAAC,SAAS,IAAI,CAAC;QAClB,GAAG,CAAC,SAAS,IAAI,GAAG;QACpB,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAmB,CAAC;QAC3D,GAAG,CAAC,UAAU,YAAY,IAAI,CAC/B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * 程式碼壓縮器
3
+ * 負責將程式碼壓縮到最小 token 數,同時保留關鍵資訊
4
+ */
5
+ import type { CompressedCode, CompressionLevel } from './types.js';
6
+ /**
7
+ * 程式碼壓縮器類別
8
+ */
9
+ export declare class CodeCompressor {
10
+ /**
11
+ * 壓縮程式碼
12
+ */
13
+ compress(code: string, level?: CompressionLevel): Promise<CompressedCode>;
14
+ /**
15
+ * 提取函式和類別簽章(Minimal 層級)
16
+ */
17
+ private extractSignatures;
18
+ /**
19
+ * 移除註解和多餘空白(Medium/Full 層級)
20
+ */
21
+ private removeCommentsAndWhitespace;
22
+ /**
23
+ * 縮短變數名(Full 層級)
24
+ */
25
+ private shortenVariableNames;
26
+ /**
27
+ * 檢查是否為保留字或內建物件
28
+ */
29
+ private isReservedOrBuiltin;
30
+ /**
31
+ * 計算壓縮率
32
+ */
33
+ calculateCompressionRatio(original: string, compressed: string): number;
34
+ /**
35
+ * 估計 token 數(粗略估計:每 4 個字元 ≈ 1 token)
36
+ */
37
+ estimateTokens(code: string): number;
38
+ }
39
+ //# sourceMappingURL=code-compressor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-compressor.d.ts","sourceRoot":"","sources":["../../../src/core/snapshot/code-compressor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnE;;GAEG;AACH,qBAAa,cAAc;IACzB;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,gBAA6B,GAAG,OAAO,CAAC,cAAc,CAAC;IA0C3F;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA0DzB;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAsBnC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA4D5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA6B3B;;OAEG;IACH,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAWvE;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAGrC"}
@@ -0,0 +1,211 @@
1
+ /**
2
+ * 程式碼壓縮器
3
+ * 負責將程式碼壓縮到最小 token 數,同時保留關鍵資訊
4
+ */
5
+ import { CompressionLevel as Level } from './types.js';
6
+ /**
7
+ * 程式碼壓縮器類別
8
+ */
9
+ export class CodeCompressor {
10
+ /**
11
+ * 壓縮程式碼
12
+ */
13
+ async compress(code, level = Level.Full) {
14
+ const originalLines = code.split('\n').length;
15
+ let compressed;
16
+ let symbolMap;
17
+ switch (level) {
18
+ case Level.Minimal: {
19
+ // 最小化:只保留函式/類別簽章
20
+ compressed = this.extractSignatures(code);
21
+ break;
22
+ }
23
+ case Level.Medium: {
24
+ // 中等:移除註解和空白,保留完整邏輯
25
+ compressed = this.removeCommentsAndWhitespace(code);
26
+ break;
27
+ }
28
+ case Level.Full: {
29
+ // 完整:移除註解、壓縮空白、縮短變數名
30
+ const minified = this.removeCommentsAndWhitespace(code);
31
+ const result = this.shortenVariableNames(minified);
32
+ compressed = result.code;
33
+ symbolMap = result.symbolMap;
34
+ break;
35
+ }
36
+ default:
37
+ compressed = code;
38
+ }
39
+ const compressedLines = compressed.split('\n').length;
40
+ return {
41
+ m: compressed,
42
+ sm: symbolMap,
43
+ ol: originalLines,
44
+ cl: compressedLines
45
+ };
46
+ }
47
+ /**
48
+ * 提取函式和類別簽章(Minimal 層級)
49
+ */
50
+ extractSignatures(code) {
51
+ const lines = code.split('\n');
52
+ const signatures = [];
53
+ let inMultiLineComment = false;
54
+ let braceDepth = 0;
55
+ let currentSignature = '';
56
+ for (let i = 0; i < lines.length; i++) {
57
+ const line = lines[i].trim();
58
+ // 處理多行註解
59
+ if (line.includes('/*')) {
60
+ inMultiLineComment = true;
61
+ }
62
+ if (line.includes('*/')) {
63
+ inMultiLineComment = false;
64
+ continue;
65
+ }
66
+ if (inMultiLineComment || line.startsWith('//')) {
67
+ continue;
68
+ }
69
+ // 檢測函式、類別、介面、型別定義
70
+ const isDeclaration = line.match(/^(export\s+)?(async\s+)?function\s+\w+/) ||
71
+ line.match(/^(export\s+)?(abstract\s+)?class\s+\w+/) ||
72
+ line.match(/^(export\s+)?interface\s+\w+/) ||
73
+ line.match(/^(export\s+)?type\s+\w+/) ||
74
+ line.match(/^(export\s+)?enum\s+\w+/) ||
75
+ line.match(/^(export\s+)?const\s+\w+\s*=\s*(async\s+)?\(/) || // 箭頭函式
76
+ line.match(/^\s*(public|private|protected|static)?\s*(async\s+)?\w+\s*\(/); // 方法
77
+ if (isDeclaration) {
78
+ currentSignature = line;
79
+ // 計算大括號深度,找到簽章結束位置
80
+ braceDepth = (line.match(/{/g) || []).length - (line.match(/}/g) || []).length;
81
+ // 如果簽章在單行內完成(無大括號或大括號平衡)
82
+ if (braceDepth === 0 || line.endsWith(';')) {
83
+ signatures.push(currentSignature);
84
+ currentSignature = '';
85
+ }
86
+ }
87
+ else if (currentSignature) {
88
+ // 繼續收集多行簽章
89
+ currentSignature += ' ' + line;
90
+ braceDepth += (line.match(/{/g) || []).length - (line.match(/}/g) || []).length;
91
+ if (braceDepth === 0) {
92
+ signatures.push(currentSignature);
93
+ currentSignature = '';
94
+ }
95
+ }
96
+ }
97
+ return signatures.join('\n');
98
+ }
99
+ /**
100
+ * 移除註解和多餘空白(Medium/Full 層級)
101
+ */
102
+ removeCommentsAndWhitespace(code) {
103
+ // 移除單行註解(保留 URL 中的 //)
104
+ code = code.replace(/(?<!:)\/\/.*$/gm, '');
105
+ // 移除多行註解
106
+ code = code.replace(/\/\*[\s\S]*?\*\//g, '');
107
+ // 移除空白行
108
+ code = code.replace(/^\s*\n/gm, '');
109
+ // 壓縮多個空白為單一空白
110
+ code = code.replace(/[ \t]+/g, ' ');
111
+ // 移除行首空白
112
+ code = code.replace(/^\s+/gm, '');
113
+ // 移除行尾空白
114
+ code = code.replace(/\s+$/gm, '');
115
+ return code.trim();
116
+ }
117
+ /**
118
+ * 縮短變數名(Full 層級)
119
+ */
120
+ shortenVariableNames(code) {
121
+ const symbolMap = {};
122
+ let counter = 0;
123
+ // 生成短變數名(a, b, c, ..., z, aa, ab, ...)
124
+ const generateShortName = () => {
125
+ const chars = 'abcdefghijklmnopqrstuvwxyz';
126
+ let name = '';
127
+ let n = counter++;
128
+ do {
129
+ name = chars[n % 26] + name;
130
+ n = Math.floor(n / 26) - 1;
131
+ } while (n >= 0);
132
+ return name;
133
+ };
134
+ // 找出所有區域變數(簡化版,不處理作用域)
135
+ // 只縮短明顯的區域變數(let/const/var 宣告的)
136
+ const variablePattern = /\b(let|const|var)\s+(\w+)\b/g;
137
+ const variables = new Set();
138
+ let match;
139
+ while ((match = variablePattern.exec(code)) !== null) {
140
+ const varName = match[2];
141
+ // 不縮短以下類型的變數:
142
+ // 1. 單字元變數(已經很短)
143
+ // 2. 常見的保留字或內建物件
144
+ // 3. 大寫開頭(可能是類別或常數)
145
+ if (varName.length === 1 ||
146
+ varName[0] === varName[0].toUpperCase() ||
147
+ this.isReservedOrBuiltin(varName)) {
148
+ continue;
149
+ }
150
+ variables.add(varName);
151
+ }
152
+ // 建立映射並替換
153
+ for (const varName of variables) {
154
+ const shortName = generateShortName();
155
+ symbolMap[shortName] = varName;
156
+ // 使用 word boundary 確保完整匹配變數名
157
+ const regex = new RegExp(`\\b${varName}\\b`, 'g');
158
+ code = code.replace(regex, shortName);
159
+ }
160
+ // 如果沒有縮短任何變數,不返回 symbolMap
161
+ if (Object.keys(symbolMap).length === 0) {
162
+ return { code, symbolMap: {} };
163
+ }
164
+ return { code, symbolMap };
165
+ }
166
+ /**
167
+ * 檢查是否為保留字或內建物件
168
+ */
169
+ isReservedOrBuiltin(name) {
170
+ const reserved = new Set([
171
+ // JavaScript 保留字
172
+ 'break', 'case', 'catch', 'class', 'const', 'continue', 'debugger', 'default',
173
+ 'delete', 'do', 'else', 'export', 'extends', 'finally', 'for', 'function',
174
+ 'if', 'import', 'in', 'instanceof', 'let', 'new', 'return', 'super',
175
+ 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', 'while',
176
+ 'with', 'yield', 'enum', 'implements', 'interface', 'package', 'private',
177
+ 'protected', 'public', 'static', 'async', 'await',
178
+ // 常見內建物件
179
+ 'Array', 'Boolean', 'Date', 'Error', 'Function', 'JSON', 'Math',
180
+ 'Number', 'Object', 'Promise', 'RegExp', 'String', 'Symbol',
181
+ 'console', 'window', 'document', 'process', 'require', 'module',
182
+ 'exports', '__dirname', '__filename',
183
+ // TypeScript 特有
184
+ 'type', 'interface', 'namespace', 'declare', 'abstract', 'as',
185
+ 'readonly', 'keyof', 'infer', 'unknown', 'never', 'any',
186
+ // 常見變數名(不應縮短)
187
+ 'id', 'name', 'data', 'value', 'index', 'item', 'key', 'result',
188
+ 'error', 'response', 'request', 'params', 'options', 'config',
189
+ 'props', 'state', 'context', 'event', 'callback'
190
+ ]);
191
+ return reserved.has(name);
192
+ }
193
+ /**
194
+ * 計算壓縮率
195
+ */
196
+ calculateCompressionRatio(original, compressed) {
197
+ const originalSize = original.length;
198
+ const compressedSize = compressed.length;
199
+ if (originalSize === 0) {
200
+ return 0;
201
+ }
202
+ return ((originalSize - compressedSize) / originalSize) * 100;
203
+ }
204
+ /**
205
+ * 估計 token 數(粗略估計:每 4 個字元 ≈ 1 token)
206
+ */
207
+ estimateTokens(code) {
208
+ return Math.ceil(code.length / 4);
209
+ }
210
+ }
211
+ //# sourceMappingURL=code-compressor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-compressor.js","sourceRoot":"","sources":["../../../src/core/snapshot/code-compressor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * 快照配置管理
3
+ * 負責讀取和管理 .agent-ide.json 配置檔
4
+ */
5
+ import type { SnapshotOptions, CompressionLevel } from './types.js';
6
+ /**
7
+ * 專案配置檔格式
8
+ */
9
+ export interface ProjectConfig {
10
+ snapshot?: {
11
+ /** 是否啟用快照 */
12
+ enabled?: boolean;
13
+ /** 輸出路徑 */
14
+ output?: string;
15
+ /** 是否使用增量更新 */
16
+ incremental?: boolean;
17
+ /** 壓縮層級 */
18
+ level?: CompressionLevel;
19
+ /** 排除模式 */
20
+ exclude?: string[];
21
+ /** 包含的副檔名 */
22
+ extensions?: string[];
23
+ /** 是否包含測試檔案 */
24
+ includeTests?: boolean;
25
+ /** Hooks 配置 */
26
+ hooks?: {
27
+ /** 在 build 前執行 */
28
+ prebuild?: boolean;
29
+ /** 在 commit 前執行 */
30
+ precommit?: boolean;
31
+ };
32
+ };
33
+ }
34
+ /**
35
+ * 配置管理器
36
+ */
37
+ export declare class ConfigManager {
38
+ private static readonly CONFIG_FILENAME;
39
+ /**
40
+ * 讀取專案配置
41
+ */
42
+ loadConfig(projectPath: string): Promise<ProjectConfig | null>;
43
+ /**
44
+ * 保存專案配置
45
+ */
46
+ saveConfig(projectPath: string, config: ProjectConfig): Promise<void>;
47
+ /**
48
+ * 合併配置:CLI 參數 > 配置檔 > 預設值
49
+ */
50
+ mergeOptions(projectPath: string, cliOptions: Partial<SnapshotOptions>, config: ProjectConfig | null): SnapshotOptions;
51
+ /**
52
+ * 建立範例配置檔
53
+ */
54
+ createExampleConfig(projectPath: string): Promise<void>;
55
+ /**
56
+ * 檢查配置檔是否存在
57
+ */
58
+ configExists(projectPath: string): Promise<boolean>;
59
+ }
60
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/snapshot/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGpE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE;QACT,aAAa;QACb,OAAO,CAAC,EAAE,OAAO,CAAC;QAElB,WAAW;QACX,MAAM,CAAC,EAAE,MAAM,CAAC;QAEhB,eAAe;QACf,WAAW,CAAC,EAAE,OAAO,CAAC;QAEtB,WAAW;QACX,KAAK,CAAC,EAAE,gBAAgB,CAAC;QAEzB,WAAW;QACX,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAEnB,aAAa;QACb,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QAEtB,eAAe;QACf,YAAY,CAAC,EAAE,OAAO,CAAC;QAEvB,eAAe;QACf,KAAK,CAAC,EAAE;YACN,kBAAkB;YAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;YAEnB,mBAAmB;YACnB,SAAS,CAAC,EAAE,OAAO,CAAC;SACrB,CAAC;KACH,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAqB;IAE5D;;OAEG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAYpE;;OAEG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3E;;OAEG;IACH,YAAY,CACV,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,OAAO,CAAC,eAAe,CAAC,EACpC,MAAM,EAAE,aAAa,GAAG,IAAI,GAC3B,eAAe;IAyElB;;OAEG;IACG,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B7D;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAU1D"}