@autobe/agent 0.27.0 → 0.28.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.
- package/lib/constants/AutoBeSystemPromptConstant.d.ts +1 -1
- package/lib/context/assertSchemaModel.d.ts +1 -1
- package/lib/context/assertSchemaModel.js +4 -7
- package/lib/context/assertSchemaModel.js.map +1 -1
- package/lib/index.mjs +18186 -7689
- package/lib/index.mjs.map +1 -1
- package/lib/orchestrate/analyze/histories/transformAnalyzeScenarioHistories.js +1 -1
- package/lib/orchestrate/analyze/histories/transformAnalyzeScenarioHistories.js.map +1 -1
- package/lib/orchestrate/analyze/orchestrateAnalyzeReview.js +164 -86
- package/lib/orchestrate/analyze/orchestrateAnalyzeReview.js.map +1 -1
- package/lib/orchestrate/analyze/orchestrateAnalyzeScenario.js +656 -335
- package/lib/orchestrate/analyze/orchestrateAnalyzeScenario.js.map +1 -1
- package/lib/orchestrate/analyze/orchestrateAnalyzeWrite.js +143 -74
- package/lib/orchestrate/analyze/orchestrateAnalyzeWrite.js.map +1 -1
- package/lib/orchestrate/analyze/structures/IAutoBeAnalyzeReviewApplication.d.ts +17 -52
- package/lib/orchestrate/analyze/structures/IAutoBeAnalyzeScenarioApplication.d.ts +25 -22
- package/lib/orchestrate/analyze/structures/IAutoBeAnalyzeWriteApplication.d.ts +7 -23
- package/lib/orchestrate/common/orchestrateCommonCorrectCasting.js +165 -2
- package/lib/orchestrate/common/orchestrateCommonCorrectCasting.js.map +1 -1
- package/lib/orchestrate/facade/createAutoBeFacadeController.js +773 -403
- package/lib/orchestrate/facade/createAutoBeFacadeController.js.map +1 -1
- package/lib/orchestrate/interface/orchestrateInterfaceAuthorizations.js +749 -2
- package/lib/orchestrate/interface/orchestrateInterfaceAuthorizations.js.map +1 -1
- package/lib/orchestrate/interface/orchestrateInterfaceComplement.js +1637 -9
- package/lib/orchestrate/interface/orchestrateInterfaceComplement.js.map +1 -1
- package/lib/orchestrate/interface/orchestrateInterfaceEndpoints.js +252 -133
- package/lib/orchestrate/interface/orchestrateInterfaceEndpoints.js.map +1 -1
- package/lib/orchestrate/interface/orchestrateInterfaceEndpointsReview.js +258 -135
- package/lib/orchestrate/interface/orchestrateInterfaceEndpointsReview.js.map +1 -1
- package/lib/orchestrate/interface/orchestrateInterfaceGroups.js +342 -226
- package/lib/orchestrate/interface/orchestrateInterfaceGroups.js.map +1 -1
- package/lib/orchestrate/interface/orchestrateInterfaceOperations.js +633 -1
- package/lib/orchestrate/interface/orchestrateInterfaceOperations.js.map +1 -1
- package/lib/orchestrate/interface/orchestrateInterfaceOperationsReview.js +785 -3
- package/lib/orchestrate/interface/orchestrateInterfaceOperationsReview.js.map +1 -1
- package/lib/orchestrate/interface/orchestrateInterfacePrerequisites.js +206 -3
- package/lib/orchestrate/interface/orchestrateInterfacePrerequisites.js.map +1 -1
- package/lib/orchestrate/interface/orchestrateInterfaceSchemaRename.js +107 -1
- package/lib/orchestrate/interface/orchestrateInterfaceSchemaRename.js.map +1 -1
- package/lib/orchestrate/interface/orchestrateInterfaceSchemaReview.js +1676 -9
- package/lib/orchestrate/interface/orchestrateInterfaceSchemaReview.js.map +1 -1
- package/lib/orchestrate/interface/orchestrateInterfaceSchemas.js +1637 -9
- package/lib/orchestrate/interface/orchestrateInterfaceSchemas.js.map +1 -1
- package/lib/orchestrate/prisma/orchestratePrismaComponent.js +397 -201
- package/lib/orchestrate/prisma/orchestratePrismaComponent.js.map +1 -1
- package/lib/orchestrate/prisma/orchestratePrismaCorrect.js +1184 -599
- package/lib/orchestrate/prisma/orchestratePrismaCorrect.js.map +1 -1
- package/lib/orchestrate/prisma/orchestratePrismaReview.js +1202 -608
- package/lib/orchestrate/prisma/orchestratePrismaReview.js.map +1 -1
- package/lib/orchestrate/prisma/orchestratePrismaSchemas.js +4 -2
- package/lib/orchestrate/prisma/orchestratePrismaSchemas.js.map +1 -1
- package/lib/orchestrate/realize/orchestrateRealizeAuthorization.js +369 -185
- package/lib/orchestrate/realize/orchestrateRealizeAuthorization.js.map +1 -1
- package/lib/orchestrate/realize/orchestrateRealizeAuthorizationCorrect.js +405 -203
- package/lib/orchestrate/realize/orchestrateRealizeAuthorizationCorrect.js.map +1 -1
- package/lib/orchestrate/realize/orchestrateRealizeCorrect.js +130 -2
- package/lib/orchestrate/realize/orchestrateRealizeCorrect.js.map +1 -1
- package/lib/orchestrate/realize/orchestrateRealizeCorrectCasting.js +165 -2
- package/lib/orchestrate/realize/orchestrateRealizeCorrectCasting.js.map +1 -1
- package/lib/orchestrate/realize/orchestrateRealizeWrite.js +130 -2
- package/lib/orchestrate/realize/orchestrateRealizeWrite.js.map +1 -1
- package/lib/orchestrate/test/histories/transformTestWriteHistories.js.map +1 -1
- package/lib/orchestrate/test/orchestrateTestCorrect.js +131 -2
- package/lib/orchestrate/test/orchestrateTestCorrect.js.map +1 -1
- package/lib/orchestrate/test/orchestrateTestCorrectInvalidRequest.js +166 -2
- package/lib/orchestrate/test/orchestrateTestCorrectInvalidRequest.js.map +1 -1
- package/lib/orchestrate/test/orchestrateTestScenario.js +257 -3
- package/lib/orchestrate/test/orchestrateTestScenario.js.map +1 -1
- package/lib/orchestrate/test/orchestrateTestScenarioReview.js +283 -3
- package/lib/orchestrate/test/orchestrateTestScenarioReview.js.map +1 -1
- package/lib/orchestrate/test/orchestrateTestWrite.js +139 -2
- package/lib/orchestrate/test/orchestrateTestWrite.js.map +1 -1
- package/package.json +9 -9
- package/src/constants/AutoBeSystemPromptConstant.ts +1 -1
- package/src/context/assertSchemaModel.ts +5 -8
- package/src/orchestrate/analyze/orchestrateAnalyzeReview.ts +7 -9
- package/src/orchestrate/analyze/orchestrateAnalyzeScenario.ts +13 -9
- package/src/orchestrate/analyze/orchestrateAnalyzeWrite.ts +7 -9
- package/src/orchestrate/analyze/structures/IAutoBeAnalyzeReviewApplication.ts +19 -54
- package/src/orchestrate/analyze/structures/IAutoBeAnalyzeScenarioApplication.ts +25 -22
- package/src/orchestrate/analyze/structures/IAutoBeAnalyzeWriteApplication.ts +8 -24
- package/src/orchestrate/common/orchestrateCommonCorrectCasting.ts +15 -1
- package/src/orchestrate/facade/createAutoBeFacadeController.ts +7 -6
- package/src/orchestrate/interface/orchestrateInterfaceAuthorizations.ts +11 -1
- package/src/orchestrate/interface/orchestrateInterfaceComplement.ts +11 -1
- package/src/orchestrate/interface/orchestrateInterfaceEndpoints.ts +13 -9
- package/src/orchestrate/interface/orchestrateInterfaceEndpointsReview.ts +13 -9
- package/src/orchestrate/interface/orchestrateInterfaceGroups.ts +17 -14
- package/src/orchestrate/interface/orchestrateInterfaceOperations.ts +11 -1
- package/src/orchestrate/interface/orchestrateInterfaceOperationsReview.ts +14 -1
- package/src/orchestrate/interface/orchestrateInterfacePrerequisites.ts +11 -1
- package/src/orchestrate/interface/orchestrateInterfaceSchemaRename.ts +9 -1
- package/src/orchestrate/interface/orchestrateInterfaceSchemaReview.ts +14 -1
- package/src/orchestrate/interface/orchestrateInterfaceSchemas.ts +11 -1
- package/src/orchestrate/prisma/orchestratePrismaComponent.ts +13 -9
- package/src/orchestrate/prisma/orchestratePrismaCorrect.ts +7 -9
- package/src/orchestrate/prisma/orchestratePrismaReview.ts +7 -10
- package/src/orchestrate/realize/orchestrateRealizeAuthorization.ts +13 -9
- package/src/orchestrate/realize/orchestrateRealizeAuthorizationCorrect.ts +13 -9
- package/src/orchestrate/realize/orchestrateRealizeCorrect.ts +11 -1
- package/src/orchestrate/realize/orchestrateRealizeCorrectCasting.ts +15 -1
- package/src/orchestrate/realize/orchestrateRealizeWrite.ts +11 -1
- package/src/orchestrate/test/experimental/orchestrateTestWrite.ast +5 -1
- package/src/orchestrate/test/histories/transformTestWriteHistories.ts +1 -1
- package/src/orchestrate/test/orchestrateTestCorrect.ts +11 -1
- package/src/orchestrate/test/orchestrateTestCorrectInvalidRequest.ts +18 -1
- package/src/orchestrate/test/orchestrateTestScenario.ts +11 -1
- package/src/orchestrate/test/orchestrateTestScenarioReview.ts +11 -1
- package/src/orchestrate/test/orchestrateTestWrite.ts +11 -1
|
@@ -89,7 +89,11 @@ function orchestrateInterfaceEndpointsReview(ctx_1, endpoints_1) {
|
|
|
89
89
|
}
|
|
90
90
|
function createController(props) {
|
|
91
91
|
(0, assertSchemaModel_1.assertSchemaModel)(props.model);
|
|
92
|
-
const application = collection[props.model
|
|
92
|
+
const application = collection[props.model === "chatgpt"
|
|
93
|
+
? "chatgpt"
|
|
94
|
+
: props.model === "gemini"
|
|
95
|
+
? "gemini"
|
|
96
|
+
: "claude"];
|
|
93
97
|
return {
|
|
94
98
|
protocol: "class",
|
|
95
99
|
name: "interface",
|
|
@@ -101,144 +105,266 @@ function createController(props) {
|
|
|
101
105
|
},
|
|
102
106
|
};
|
|
103
107
|
}
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
108
|
+
const collection = {
|
|
109
|
+
chatgpt: {
|
|
110
|
+
model: "chatgpt",
|
|
111
|
+
options: {
|
|
112
|
+
reference: true,
|
|
113
|
+
strict: false,
|
|
114
|
+
separate: null
|
|
115
|
+
},
|
|
116
|
+
functions: [
|
|
117
|
+
{
|
|
118
|
+
name: "reviewEndpoints",
|
|
119
|
+
parameters: {
|
|
120
|
+
description: " - The review results and refined endpoint collection\n\n------------------------------\n\nCurrent Type: {@link IAutoBeInterfaceEndpointsReviewApplication.IProps}",
|
|
121
|
+
type: "object",
|
|
122
|
+
properties: {
|
|
123
|
+
review: {
|
|
124
|
+
description: "Comprehensive review analysis of all collected endpoints.\n\nContains detailed findings from the holistic review including:\n- Identified inconsistencies in naming conventions\n- Duplicate endpoints that serve the same purpose\n- Over-engineered solutions that add unnecessary complexity\n- Violations of REST API design principles\n- Recommendations for improvement and standardization\n\nThe review provides actionable feedback for creating a clean,\nconsistent, and maintainable API structure.",
|
|
125
|
+
type: "string"
|
|
126
|
+
},
|
|
127
|
+
endpoints: {
|
|
128
|
+
description: "Refined collection of API endpoints after review and cleanup.\n\nThe final optimized set of endpoints after:\n- Removing duplicates and redundant endpoints\n- Standardizing naming conventions across all paths\n- Simplifying over-engineered solutions\n- Ensuring consistent REST patterns\n- Aligning HTTP methods with their semantic meanings\n\nThis collection represents the production-ready API structure\nthat balances functionality with simplicity and maintainability.",
|
|
129
|
+
type: "array",
|
|
130
|
+
items: {
|
|
131
|
+
$ref: "#/$defs/AutoBeOpenApi.IEndpoint"
|
|
132
|
+
}
|
|
133
|
+
}
|
|
120
134
|
},
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
135
|
+
required: [
|
|
136
|
+
"review",
|
|
137
|
+
"endpoints"
|
|
138
|
+
],
|
|
139
|
+
additionalProperties: false,
|
|
140
|
+
$defs: {
|
|
141
|
+
"AutoBeOpenApi.IEndpoint": {
|
|
142
|
+
description: "API endpoint information.",
|
|
143
|
+
type: "object",
|
|
144
|
+
properties: {
|
|
145
|
+
path: {
|
|
146
|
+
description: "HTTP path of the API operation.\n\nThe URL path for accessing this API operation, using path parameters\nenclosed in curly braces (e.g., `/shoppings/customers/sales/{saleId}`).\n\nIt must be corresponded to the {@link parameters path parameters}.\n\nThe path structure should clearly indicate which database entity this\noperation is manipulating, helping to ensure all entities have\nappropriate API coverage.\n\nPath validation rules:\n\n- Must start with a forward slash (/)\n- Can contain only: letters (a-z, A-Z), numbers (0-9), forward slashes (/),\n curly braces for parameters ({paramName}), hyphens (-), and underscores\n (_)\n- Parameters must be enclosed in curly braces: {paramName}\n- Resource names should be in camelCase\n- No quotes, spaces, or invalid special characters allowed\n- No domain or role-based prefixes\n\nValid examples:\n\n- \"/users\"\n- \"/users/{userId}\"\n- \"/articles/{articleId}/comments\"\n- \"/attachmentFiles\"\n- \"/orders/{orderId}/items/{itemId}\"\n\nInvalid examples:\n\n- \"'/users'\" (contains quotes)\n- \"/user profile\" (contains space)\n- \"/users/[userId]\" (wrong bracket format)\n- \"/admin/users\" (role prefix)\n- \"/api/v1/users\" (API prefix)\n\n\n@pattern ^\\/[a-zA-Z0-9\\/_{}.-]*$",
|
|
147
|
+
type: "string"
|
|
148
|
+
},
|
|
149
|
+
method: {
|
|
150
|
+
description: "HTTP method of the API operation.\n\n**IMPORTANT**: Methods must be written in lowercase only (e.g., \"get\",\nnot \"GET\").\n\nNote that, if the API operation has {@link requestBody}, method must not\nbe `get`.\n\nAlso, even though the API operation has been designed to only get\ninformation, but it needs complicated request information, it must be\ndefined as `patch` method with {@link requestBody} data specification.\n\n- `get`: get information\n- `patch`: get information with complicated request data\n ({@link requestBody})\n- `post`: create new record\n- `put`: update existing record\n- `delete`: remove record",
|
|
151
|
+
type: "string",
|
|
152
|
+
"enum": [
|
|
153
|
+
"get",
|
|
154
|
+
"post",
|
|
155
|
+
"put",
|
|
156
|
+
"delete",
|
|
157
|
+
"patch"
|
|
158
|
+
]
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
required: [
|
|
162
|
+
"path",
|
|
163
|
+
"method"
|
|
164
|
+
]
|
|
126
165
|
}
|
|
127
166
|
}
|
|
128
167
|
},
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
"
|
|
168
|
-
|
|
168
|
+
description: "Reviews and refines the complete collection of API endpoints.\n\nThis method consolidates all endpoints generated independently by different\ngroups and performs holistic review to:\n- Ensure naming consistency across all endpoints\n- Remove duplicate or overlapping endpoints\n- Eliminate over-engineered solutions\n- Standardize path structures and HTTP methods\n- Verify REST API design principles\n\nThe review process examines the entire API as a cohesive system rather\nthan individual endpoints, ensuring the final API is intuitive, maintainable,\nand follows best practices.",
|
|
169
|
+
validate: (() => { const _io0 = input => "string" === typeof input.review && (Array.isArray(input.endpoints) && input.endpoints.every(elem => "object" === typeof elem && null !== elem && _io1(elem))); const _io1 = input => "string" === typeof input.path && RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path) && ("get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method); const _vo0 = (input, _path, _exceptionable = true) => ["string" === typeof input.review || _report(_exceptionable, {
|
|
170
|
+
path: _path + ".review",
|
|
171
|
+
expected: "string",
|
|
172
|
+
value: input.review
|
|
173
|
+
}), (Array.isArray(input.endpoints) || _report(_exceptionable, {
|
|
174
|
+
path: _path + ".endpoints",
|
|
175
|
+
expected: "Array<AutoBeOpenApi.IEndpoint>",
|
|
176
|
+
value: input.endpoints
|
|
177
|
+
})) && input.endpoints.map((elem, _index2) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
|
|
178
|
+
path: _path + ".endpoints[" + _index2 + "]",
|
|
179
|
+
expected: "AutoBeOpenApi.IEndpoint",
|
|
180
|
+
value: elem
|
|
181
|
+
})) && _vo1(elem, _path + ".endpoints[" + _index2 + "]", true && _exceptionable) || _report(_exceptionable, {
|
|
182
|
+
path: _path + ".endpoints[" + _index2 + "]",
|
|
183
|
+
expected: "AutoBeOpenApi.IEndpoint",
|
|
184
|
+
value: elem
|
|
185
|
+
})).every(flag => flag) || _report(_exceptionable, {
|
|
186
|
+
path: _path + ".endpoints",
|
|
187
|
+
expected: "Array<AutoBeOpenApi.IEndpoint>",
|
|
188
|
+
value: input.endpoints
|
|
189
|
+
})].every(flag => flag); const _vo1 = (input, _path, _exceptionable = true) => ["string" === typeof input.path && (RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path) || _report(_exceptionable, {
|
|
190
|
+
path: _path + ".path",
|
|
191
|
+
expected: "string & Pattern<\"^\\\\/[a-zA-Z0-9\\\\/_{}.-]*$\">",
|
|
192
|
+
value: input.path
|
|
193
|
+
})) || _report(_exceptionable, {
|
|
194
|
+
path: _path + ".path",
|
|
195
|
+
expected: "(string & Pattern<\"^\\\\/[a-zA-Z0-9\\\\/_{}.-]*$\">)",
|
|
196
|
+
value: input.path
|
|
197
|
+
}), "get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method || _report(_exceptionable, {
|
|
198
|
+
path: _path + ".method",
|
|
199
|
+
expected: "(\"delete\" | \"get\" | \"patch\" | \"post\" | \"put\")",
|
|
200
|
+
value: input.method
|
|
201
|
+
})].every(flag => flag); const __is = input => "object" === typeof input && null !== input && _io0(input); let errors; let _report; return input => {
|
|
202
|
+
if (false === __is(input)) {
|
|
203
|
+
errors = [];
|
|
204
|
+
_report = __typia_transform__validateReport._validateReport(errors);
|
|
205
|
+
((input, _path, _exceptionable = true) => ("object" === typeof input && null !== input || _report(true, {
|
|
206
|
+
path: _path + "",
|
|
207
|
+
expected: "IAutoBeInterfaceEndpointsReviewApplication.IProps",
|
|
208
|
+
value: input
|
|
209
|
+
})) && _vo0(input, _path + "", true) || _report(true, {
|
|
210
|
+
path: _path + "",
|
|
211
|
+
expected: "IAutoBeInterfaceEndpointsReviewApplication.IProps",
|
|
212
|
+
value: input
|
|
213
|
+
}))(input, "$input", true);
|
|
214
|
+
const success = 0 === errors.length;
|
|
215
|
+
return success ? {
|
|
216
|
+
success,
|
|
217
|
+
data: input
|
|
218
|
+
} : {
|
|
219
|
+
success,
|
|
220
|
+
errors,
|
|
221
|
+
data: input
|
|
222
|
+
};
|
|
169
223
|
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
description: "Reviews and refines the complete collection of API endpoints.\n\nThis method consolidates all endpoints generated independently by different\ngroups and performs holistic review to:\n- Ensure naming consistency across all endpoints\n- Remove duplicate or overlapping endpoints\n- Eliminate over-engineered solutions\n- Standardize path structures and HTTP methods\n- Verify REST API design principles\n\nThe review process examines the entire API as a cohesive system rather\nthan individual endpoints, ensuring the final API is intuitive, maintainable,\nand follows best practices.",
|
|
173
|
-
validate: (() => { const _io0 = input => "string" === typeof input.review && (Array.isArray(input.endpoints) && input.endpoints.every(elem => "object" === typeof elem && null !== elem && _io1(elem))); const _io1 = input => "string" === typeof input.path && RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path) && ("get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method); const _vo0 = (input, _path, _exceptionable = true) => ["string" === typeof input.review || _report(_exceptionable, {
|
|
174
|
-
path: _path + ".review",
|
|
175
|
-
expected: "string",
|
|
176
|
-
value: input.review
|
|
177
|
-
}), (Array.isArray(input.endpoints) || _report(_exceptionable, {
|
|
178
|
-
path: _path + ".endpoints",
|
|
179
|
-
expected: "Array<AutoBeOpenApi.IEndpoint>",
|
|
180
|
-
value: input.endpoints
|
|
181
|
-
})) && input.endpoints.map((elem, _index2) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
|
|
182
|
-
path: _path + ".endpoints[" + _index2 + "]",
|
|
183
|
-
expected: "AutoBeOpenApi.IEndpoint",
|
|
184
|
-
value: elem
|
|
185
|
-
})) && _vo1(elem, _path + ".endpoints[" + _index2 + "]", true && _exceptionable) || _report(_exceptionable, {
|
|
186
|
-
path: _path + ".endpoints[" + _index2 + "]",
|
|
187
|
-
expected: "AutoBeOpenApi.IEndpoint",
|
|
188
|
-
value: elem
|
|
189
|
-
})).every(flag => flag) || _report(_exceptionable, {
|
|
190
|
-
path: _path + ".endpoints",
|
|
191
|
-
expected: "Array<AutoBeOpenApi.IEndpoint>",
|
|
192
|
-
value: input.endpoints
|
|
193
|
-
})].every(flag => flag); const _vo1 = (input, _path, _exceptionable = true) => ["string" === typeof input.path && (RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path) || _report(_exceptionable, {
|
|
194
|
-
path: _path + ".path",
|
|
195
|
-
expected: "string & Pattern<\"^\\\\/[a-zA-Z0-9\\\\/_{}.-]*$\">",
|
|
196
|
-
value: input.path
|
|
197
|
-
})) || _report(_exceptionable, {
|
|
198
|
-
path: _path + ".path",
|
|
199
|
-
expected: "(string & Pattern<\"^\\\\/[a-zA-Z0-9\\\\/_{}.-]*$\">)",
|
|
200
|
-
value: input.path
|
|
201
|
-
}), "get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method || _report(_exceptionable, {
|
|
202
|
-
path: _path + ".method",
|
|
203
|
-
expected: "(\"delete\" | \"get\" | \"patch\" | \"post\" | \"put\")",
|
|
204
|
-
value: input.method
|
|
205
|
-
})].every(flag => flag); const __is = input => "object" === typeof input && null !== input && _io0(input); let errors; let _report; return input => {
|
|
206
|
-
if (false === __is(input)) {
|
|
207
|
-
errors = [];
|
|
208
|
-
_report = __typia_transform__validateReport._validateReport(errors);
|
|
209
|
-
((input, _path, _exceptionable = true) => ("object" === typeof input && null !== input || _report(true, {
|
|
210
|
-
path: _path + "",
|
|
211
|
-
expected: "IAutoBeInterfaceEndpointsReviewApplication.IProps",
|
|
212
|
-
value: input
|
|
213
|
-
})) && _vo0(input, _path + "", true) || _report(true, {
|
|
214
|
-
path: _path + "",
|
|
215
|
-
expected: "IAutoBeInterfaceEndpointsReviewApplication.IProps",
|
|
216
|
-
value: input
|
|
217
|
-
}))(input, "$input", true);
|
|
218
|
-
const success = 0 === errors.length;
|
|
219
|
-
return success ? {
|
|
220
|
-
success,
|
|
224
|
+
return {
|
|
225
|
+
success: true,
|
|
221
226
|
data: input
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
|
|
227
|
+
};
|
|
228
|
+
}; })()
|
|
229
|
+
}
|
|
230
|
+
]
|
|
231
|
+
},
|
|
232
|
+
claude: {
|
|
233
|
+
model: "claude",
|
|
234
|
+
options: {
|
|
235
|
+
reference: true,
|
|
236
|
+
separate: null
|
|
237
|
+
},
|
|
238
|
+
functions: [
|
|
239
|
+
{
|
|
240
|
+
name: "reviewEndpoints",
|
|
241
|
+
parameters: {
|
|
242
|
+
description: " - The review results and refined endpoint collection\n\n------------------------------\n\nCurrent Type: {@link IAutoBeInterfaceEndpointsReviewApplication.IProps}",
|
|
243
|
+
type: "object",
|
|
244
|
+
properties: {
|
|
245
|
+
review: {
|
|
246
|
+
description: "Comprehensive review analysis of all collected endpoints.\n\nContains detailed findings from the holistic review including:\n- Identified inconsistencies in naming conventions\n- Duplicate endpoints that serve the same purpose\n- Over-engineered solutions that add unnecessary complexity\n- Violations of REST API design principles\n- Recommendations for improvement and standardization\n\nThe review provides actionable feedback for creating a clean,\nconsistent, and maintainable API structure.",
|
|
247
|
+
type: "string"
|
|
248
|
+
},
|
|
249
|
+
endpoints: {
|
|
250
|
+
description: "Refined collection of API endpoints after review and cleanup.\n\nThe final optimized set of endpoints after:\n- Removing duplicates and redundant endpoints\n- Standardizing naming conventions across all paths\n- Simplifying over-engineered solutions\n- Ensuring consistent REST patterns\n- Aligning HTTP methods with their semantic meanings\n\nThis collection represents the production-ready API structure\nthat balances functionality with simplicity and maintainability.",
|
|
251
|
+
type: "array",
|
|
252
|
+
items: {
|
|
253
|
+
$ref: "#/$defs/AutoBeOpenApi.IEndpoint"
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
},
|
|
257
|
+
required: [
|
|
258
|
+
"review",
|
|
259
|
+
"endpoints"
|
|
260
|
+
],
|
|
261
|
+
additionalProperties: false,
|
|
262
|
+
$defs: {
|
|
263
|
+
"AutoBeOpenApi.IEndpoint": {
|
|
264
|
+
description: "API endpoint information.",
|
|
265
|
+
type: "object",
|
|
266
|
+
properties: {
|
|
267
|
+
path: {
|
|
268
|
+
description: "HTTP path of the API operation.\n\nThe URL path for accessing this API operation, using path parameters\nenclosed in curly braces (e.g., `/shoppings/customers/sales/{saleId}`).\n\nIt must be corresponded to the {@link parameters path parameters}.\n\nThe path structure should clearly indicate which database entity this\noperation is manipulating, helping to ensure all entities have\nappropriate API coverage.\n\nPath validation rules:\n\n- Must start with a forward slash (/)\n- Can contain only: letters (a-z, A-Z), numbers (0-9), forward slashes (/),\n curly braces for parameters ({paramName}), hyphens (-), and underscores\n (_)\n- Parameters must be enclosed in curly braces: {paramName}\n- Resource names should be in camelCase\n- No quotes, spaces, or invalid special characters allowed\n- No domain or role-based prefixes\n\nValid examples:\n\n- \"/users\"\n- \"/users/{userId}\"\n- \"/articles/{articleId}/comments\"\n- \"/attachmentFiles\"\n- \"/orders/{orderId}/items/{itemId}\"\n\nInvalid examples:\n\n- \"'/users'\" (contains quotes)\n- \"/user profile\" (contains space)\n- \"/users/[userId]\" (wrong bracket format)\n- \"/admin/users\" (role prefix)\n- \"/api/v1/users\" (API prefix)",
|
|
269
|
+
type: "string",
|
|
270
|
+
pattern: "^\\/[a-zA-Z0-9\\/_{}.-]*$"
|
|
271
|
+
},
|
|
272
|
+
method: {
|
|
273
|
+
description: "HTTP method of the API operation.\n\n**IMPORTANT**: Methods must be written in lowercase only (e.g., \"get\",\nnot \"GET\").\n\nNote that, if the API operation has {@link requestBody}, method must not\nbe `get`.\n\nAlso, even though the API operation has been designed to only get\ninformation, but it needs complicated request information, it must be\ndefined as `patch` method with {@link requestBody} data specification.\n\n- `get`: get information\n- `patch`: get information with complicated request data\n ({@link requestBody})\n- `post`: create new record\n- `put`: update existing record\n- `delete`: remove record",
|
|
274
|
+
oneOf: [
|
|
275
|
+
{
|
|
276
|
+
"const": "get"
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
"const": "post"
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"const": "put"
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
"const": "delete"
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
"const": "patch"
|
|
289
|
+
}
|
|
290
|
+
]
|
|
291
|
+
}
|
|
292
|
+
},
|
|
293
|
+
required: [
|
|
294
|
+
"path",
|
|
295
|
+
"method"
|
|
296
|
+
]
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
description: "Reviews and refines the complete collection of API endpoints.\n\nThis method consolidates all endpoints generated independently by different\ngroups and performs holistic review to:\n- Ensure naming consistency across all endpoints\n- Remove duplicate or overlapping endpoints\n- Eliminate over-engineered solutions\n- Standardize path structures and HTTP methods\n- Verify REST API design principles\n\nThe review process examines the entire API as a cohesive system rather\nthan individual endpoints, ensuring the final API is intuitive, maintainable,\nand follows best practices.",
|
|
301
|
+
validate: (() => { const _io0 = input => "string" === typeof input.review && (Array.isArray(input.endpoints) && input.endpoints.every(elem => "object" === typeof elem && null !== elem && _io1(elem))); const _io1 = input => "string" === typeof input.path && RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path) && ("get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method); const _vo0 = (input, _path, _exceptionable = true) => ["string" === typeof input.review || _report(_exceptionable, {
|
|
302
|
+
path: _path + ".review",
|
|
303
|
+
expected: "string",
|
|
304
|
+
value: input.review
|
|
305
|
+
}), (Array.isArray(input.endpoints) || _report(_exceptionable, {
|
|
306
|
+
path: _path + ".endpoints",
|
|
307
|
+
expected: "Array<AutoBeOpenApi.IEndpoint>",
|
|
308
|
+
value: input.endpoints
|
|
309
|
+
})) && input.endpoints.map((elem, _index2) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
|
|
310
|
+
path: _path + ".endpoints[" + _index2 + "]",
|
|
311
|
+
expected: "AutoBeOpenApi.IEndpoint",
|
|
312
|
+
value: elem
|
|
313
|
+
})) && _vo1(elem, _path + ".endpoints[" + _index2 + "]", true && _exceptionable) || _report(_exceptionable, {
|
|
314
|
+
path: _path + ".endpoints[" + _index2 + "]",
|
|
315
|
+
expected: "AutoBeOpenApi.IEndpoint",
|
|
316
|
+
value: elem
|
|
317
|
+
})).every(flag => flag) || _report(_exceptionable, {
|
|
318
|
+
path: _path + ".endpoints",
|
|
319
|
+
expected: "Array<AutoBeOpenApi.IEndpoint>",
|
|
320
|
+
value: input.endpoints
|
|
321
|
+
})].every(flag => flag); const _vo1 = (input, _path, _exceptionable = true) => ["string" === typeof input.path && (RegExp("^\\/[a-zA-Z0-9\\/_{}.-]*$").test(input.path) || _report(_exceptionable, {
|
|
322
|
+
path: _path + ".path",
|
|
323
|
+
expected: "string & Pattern<\"^\\\\/[a-zA-Z0-9\\\\/_{}.-]*$\">",
|
|
324
|
+
value: input.path
|
|
325
|
+
})) || _report(_exceptionable, {
|
|
326
|
+
path: _path + ".path",
|
|
327
|
+
expected: "(string & Pattern<\"^\\\\/[a-zA-Z0-9\\\\/_{}.-]*$\">)",
|
|
328
|
+
value: input.path
|
|
329
|
+
}), "get" === input.method || "post" === input.method || "put" === input.method || "delete" === input.method || "patch" === input.method || _report(_exceptionable, {
|
|
330
|
+
path: _path + ".method",
|
|
331
|
+
expected: "(\"delete\" | \"get\" | \"patch\" | \"post\" | \"put\")",
|
|
332
|
+
value: input.method
|
|
333
|
+
})].every(flag => flag); const __is = input => "object" === typeof input && null !== input && _io0(input); let errors; let _report; return input => {
|
|
334
|
+
if (false === __is(input)) {
|
|
335
|
+
errors = [];
|
|
336
|
+
_report = __typia_transform__validateReport._validateReport(errors);
|
|
337
|
+
((input, _path, _exceptionable = true) => ("object" === typeof input && null !== input || _report(true, {
|
|
338
|
+
path: _path + "",
|
|
339
|
+
expected: "IAutoBeInterfaceEndpointsReviewApplication.IProps",
|
|
340
|
+
value: input
|
|
341
|
+
})) && _vo0(input, _path + "", true) || _report(true, {
|
|
342
|
+
path: _path + "",
|
|
343
|
+
expected: "IAutoBeInterfaceEndpointsReviewApplication.IProps",
|
|
344
|
+
value: input
|
|
345
|
+
}))(input, "$input", true);
|
|
346
|
+
const success = 0 === errors.length;
|
|
347
|
+
return success ? {
|
|
348
|
+
success,
|
|
349
|
+
data: input
|
|
350
|
+
} : {
|
|
351
|
+
success,
|
|
352
|
+
errors,
|
|
353
|
+
data: input
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
return {
|
|
357
|
+
success: true,
|
|
225
358
|
data: input
|
|
226
359
|
};
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
}
|
|
234
|
-
]
|
|
235
|
-
};
|
|
236
|
-
const collection = {
|
|
237
|
-
chatgpt: {
|
|
238
|
-
model: "chatgpt",
|
|
360
|
+
}; })()
|
|
361
|
+
}
|
|
362
|
+
]
|
|
363
|
+
},
|
|
364
|
+
gemini: {
|
|
365
|
+
model: "gemini",
|
|
239
366
|
options: {
|
|
240
367
|
reference: true,
|
|
241
|
-
strict: false,
|
|
242
368
|
separate: null
|
|
243
369
|
},
|
|
244
370
|
functions: [
|
|
@@ -271,8 +397,9 @@ const collection = {
|
|
|
271
397
|
type: "object",
|
|
272
398
|
properties: {
|
|
273
399
|
path: {
|
|
274
|
-
description: "HTTP path of the API operation.\n\nThe URL path for accessing this API operation, using path parameters\nenclosed in curly braces (e.g., `/shoppings/customers/sales/{saleId}`).\n\nIt must be corresponded to the {@link parameters path parameters}.\n\nThe path structure should clearly indicate which database entity this\noperation is manipulating, helping to ensure all entities have\nappropriate API coverage.\n\nPath validation rules:\n\n- Must start with a forward slash (/)\n- Can contain only: letters (a-z, A-Z), numbers (0-9), forward slashes (/),\n curly braces for parameters ({paramName}), hyphens (-), and underscores\n (_)\n- Parameters must be enclosed in curly braces: {paramName}\n- Resource names should be in camelCase\n- No quotes, spaces, or invalid special characters allowed\n- No domain or role-based prefixes\n\nValid examples:\n\n- \"/users\"\n- \"/users/{userId}\"\n- \"/articles/{articleId}/comments\"\n- \"/attachmentFiles\"\n- \"/orders/{orderId}/items/{itemId}\"\n\nInvalid examples:\n\n- \"'/users'\" (contains quotes)\n- \"/user profile\" (contains space)\n- \"/users/[userId]\" (wrong bracket format)\n- \"/admin/users\" (role prefix)\n- \"/api/v1/users\" (API prefix)
|
|
275
|
-
type: "string"
|
|
400
|
+
description: "HTTP path of the API operation.\n\nThe URL path for accessing this API operation, using path parameters\nenclosed in curly braces (e.g., `/shoppings/customers/sales/{saleId}`).\n\nIt must be corresponded to the {@link parameters path parameters}.\n\nThe path structure should clearly indicate which database entity this\noperation is manipulating, helping to ensure all entities have\nappropriate API coverage.\n\nPath validation rules:\n\n- Must start with a forward slash (/)\n- Can contain only: letters (a-z, A-Z), numbers (0-9), forward slashes (/),\n curly braces for parameters ({paramName}), hyphens (-), and underscores\n (_)\n- Parameters must be enclosed in curly braces: {paramName}\n- Resource names should be in camelCase\n- No quotes, spaces, or invalid special characters allowed\n- No domain or role-based prefixes\n\nValid examples:\n\n- \"/users\"\n- \"/users/{userId}\"\n- \"/articles/{articleId}/comments\"\n- \"/attachmentFiles\"\n- \"/orders/{orderId}/items/{itemId}\"\n\nInvalid examples:\n\n- \"'/users'\" (contains quotes)\n- \"/user profile\" (contains space)\n- \"/users/[userId]\" (wrong bracket format)\n- \"/admin/users\" (role prefix)\n- \"/api/v1/users\" (API prefix)",
|
|
401
|
+
type: "string",
|
|
402
|
+
pattern: "^\\/[a-zA-Z0-9\\/_{}.-]*$"
|
|
276
403
|
},
|
|
277
404
|
method: {
|
|
278
405
|
description: "HTTP method of the API operation.\n\n**IMPORTANT**: Methods must be written in lowercase only (e.g., \"get\",\nnot \"GET\").\n\nNote that, if the API operation has {@link requestBody}, method must not\nbe `get`.\n\nAlso, even though the API operation has been designed to only get\ninformation, but it needs complicated request information, it must be\ndefined as `patch` method with {@link requestBody} data specification.\n\n- `get`: get information\n- `patch`: get information with complicated request data\n ({@link requestBody})\n- `post`: create new record\n- `put`: update existing record\n- `delete`: remove record",
|
|
@@ -357,9 +484,5 @@ const collection = {
|
|
|
357
484
|
}
|
|
358
485
|
]
|
|
359
486
|
},
|
|
360
|
-
claude,
|
|
361
|
-
llama: claude,
|
|
362
|
-
deepseek: claude,
|
|
363
|
-
"3.1": claude,
|
|
364
487
|
};
|
|
365
488
|
//# sourceMappingURL=orchestrateInterfaceEndpointsReview.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrateInterfaceEndpointsReview.js","sourceRoot":"","sources":["../../../src/orchestrate/interface/orchestrateInterfaceEndpointsReview.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,kFA6CC;;AArDD,kDAA0B;AAC1B,+BAA0B;AAG1B,uEAAoE;AACpE,uHAAoH;AAGpH,SAAsB,mCAAmC;yDAGvD,GAAyB,EACzB,SAAoC,EACpC,UAAkB,gCAAgC;;QAElD,MAAM,OAAO,GACX;YACE,KAAK,EAAE,IAAI;SACZ,CAAC;QAEJ,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC;YAClD,MAAM,EAAE,yBAAyB;YACjC,SAAS,EAAE,IAAA,uFAA0C,EACnD,GAAG,CAAC,KAAK,EAAE,EACX,SAAS,CACV;YACD,UAAU,EAAE,gBAAgB,CAAC;gBAC3B,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;oBACf,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;gBACxB,CAAC;aACF,CAAC;YACF,mBAAmB,EAAE,IAAI;YACzB,OAAO;SACR,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAA,MAAA,OAAO,CAAC,KAAK,0CAAE,SAAS,mCAAI,EAAE,CAAC;QAChD,GAAG,CAAC,QAAQ,CAAC;YACX,EAAE,EAAE,IAAA,SAAE,GAAE;YACR,IAAI,EAAE,yBAAyB;YAC/B,SAAS;YACT,OAAO,EAAE,QAAQ;YACjB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,MAAM,EAAE,MAAA,OAAO,CAAC,KAAK,0CAAE,MAAM;YAC7B,IAAI,EAAE,MAAA,MAAA,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,0CAAE,IAAI,mCAAI,CAAC;YACpC,MAAM;YACN,UAAU;SACX,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;CAAA;AAED,SAAS,gBAAgB,CAAiC,KAGzD;IACC,IAAA,qCAAiB,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAE/B,MAAM,WAAW,GAA2B,UAAU,CACpD,KAAK,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"orchestrateInterfaceEndpointsReview.js","sourceRoot":"","sources":["../../../src/orchestrate/interface/orchestrateInterfaceEndpointsReview.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,kFA6CC;;AArDD,kDAA0B;AAC1B,+BAA0B;AAG1B,uEAAoE;AACpE,uHAAoH;AAGpH,SAAsB,mCAAmC;yDAGvD,GAAyB,EACzB,SAAoC,EACpC,UAAkB,gCAAgC;;QAElD,MAAM,OAAO,GACX;YACE,KAAK,EAAE,IAAI;SACZ,CAAC;QAEJ,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC;YAClD,MAAM,EAAE,yBAAyB;YACjC,SAAS,EAAE,IAAA,uFAA0C,EACnD,GAAG,CAAC,KAAK,EAAE,EACX,SAAS,CACV;YACD,UAAU,EAAE,gBAAgB,CAAC;gBAC3B,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;oBACf,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;gBACxB,CAAC;aACF,CAAC;YACF,mBAAmB,EAAE,IAAI;YACzB,OAAO;SACR,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAA,MAAA,OAAO,CAAC,KAAK,0CAAE,SAAS,mCAAI,EAAE,CAAC;QAChD,GAAG,CAAC,QAAQ,CAAC;YACX,EAAE,EAAE,IAAA,SAAE,GAAE;YACR,IAAI,EAAE,yBAAyB;YAC/B,SAAS;YACT,OAAO,EAAE,QAAQ;YACjB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,MAAM,EAAE,MAAA,OAAO,CAAC,KAAK,0CAAE,MAAM;YAC7B,IAAI,EAAE,MAAA,MAAA,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,0CAAE,IAAI,mCAAI,CAAC;YACpC,MAAM;YACN,UAAU;SACX,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;CAAA;AAED,SAAS,gBAAgB,CAAiC,KAGzD;IACC,IAAA,qCAAiB,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAE/B,MAAM,WAAW,GAA2B,UAAU,CACpD,KAAK,CAAC,KAAK,KAAK,SAAS;QACvB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,QAAQ;YACxB,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,QAAQ,CACqD,CAAC;IACtE,OAAO;QACL,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,WAAW;QACjB,WAAW;QACX,OAAO,EAAE;YACP,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE;gBACxB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;SACmD;KACvD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG;IACjB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAGJ;IACH,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAGH;IACH,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAGH;CACJ,CAAC"}
|