@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.
Files changed (109) hide show
  1. package/lib/constants/AutoBeSystemPromptConstant.d.ts +1 -1
  2. package/lib/context/assertSchemaModel.d.ts +1 -1
  3. package/lib/context/assertSchemaModel.js +4 -7
  4. package/lib/context/assertSchemaModel.js.map +1 -1
  5. package/lib/index.mjs +18186 -7689
  6. package/lib/index.mjs.map +1 -1
  7. package/lib/orchestrate/analyze/histories/transformAnalyzeScenarioHistories.js +1 -1
  8. package/lib/orchestrate/analyze/histories/transformAnalyzeScenarioHistories.js.map +1 -1
  9. package/lib/orchestrate/analyze/orchestrateAnalyzeReview.js +164 -86
  10. package/lib/orchestrate/analyze/orchestrateAnalyzeReview.js.map +1 -1
  11. package/lib/orchestrate/analyze/orchestrateAnalyzeScenario.js +656 -335
  12. package/lib/orchestrate/analyze/orchestrateAnalyzeScenario.js.map +1 -1
  13. package/lib/orchestrate/analyze/orchestrateAnalyzeWrite.js +143 -74
  14. package/lib/orchestrate/analyze/orchestrateAnalyzeWrite.js.map +1 -1
  15. package/lib/orchestrate/analyze/structures/IAutoBeAnalyzeReviewApplication.d.ts +17 -52
  16. package/lib/orchestrate/analyze/structures/IAutoBeAnalyzeScenarioApplication.d.ts +25 -22
  17. package/lib/orchestrate/analyze/structures/IAutoBeAnalyzeWriteApplication.d.ts +7 -23
  18. package/lib/orchestrate/common/orchestrateCommonCorrectCasting.js +165 -2
  19. package/lib/orchestrate/common/orchestrateCommonCorrectCasting.js.map +1 -1
  20. package/lib/orchestrate/facade/createAutoBeFacadeController.js +773 -403
  21. package/lib/orchestrate/facade/createAutoBeFacadeController.js.map +1 -1
  22. package/lib/orchestrate/interface/orchestrateInterfaceAuthorizations.js +749 -2
  23. package/lib/orchestrate/interface/orchestrateInterfaceAuthorizations.js.map +1 -1
  24. package/lib/orchestrate/interface/orchestrateInterfaceComplement.js +1637 -9
  25. package/lib/orchestrate/interface/orchestrateInterfaceComplement.js.map +1 -1
  26. package/lib/orchestrate/interface/orchestrateInterfaceEndpoints.js +252 -133
  27. package/lib/orchestrate/interface/orchestrateInterfaceEndpoints.js.map +1 -1
  28. package/lib/orchestrate/interface/orchestrateInterfaceEndpointsReview.js +258 -135
  29. package/lib/orchestrate/interface/orchestrateInterfaceEndpointsReview.js.map +1 -1
  30. package/lib/orchestrate/interface/orchestrateInterfaceGroups.js +342 -226
  31. package/lib/orchestrate/interface/orchestrateInterfaceGroups.js.map +1 -1
  32. package/lib/orchestrate/interface/orchestrateInterfaceOperations.js +633 -1
  33. package/lib/orchestrate/interface/orchestrateInterfaceOperations.js.map +1 -1
  34. package/lib/orchestrate/interface/orchestrateInterfaceOperationsReview.js +785 -3
  35. package/lib/orchestrate/interface/orchestrateInterfaceOperationsReview.js.map +1 -1
  36. package/lib/orchestrate/interface/orchestrateInterfacePrerequisites.js +206 -3
  37. package/lib/orchestrate/interface/orchestrateInterfacePrerequisites.js.map +1 -1
  38. package/lib/orchestrate/interface/orchestrateInterfaceSchemaRename.js +107 -1
  39. package/lib/orchestrate/interface/orchestrateInterfaceSchemaRename.js.map +1 -1
  40. package/lib/orchestrate/interface/orchestrateInterfaceSchemaReview.js +1676 -9
  41. package/lib/orchestrate/interface/orchestrateInterfaceSchemaReview.js.map +1 -1
  42. package/lib/orchestrate/interface/orchestrateInterfaceSchemas.js +1637 -9
  43. package/lib/orchestrate/interface/orchestrateInterfaceSchemas.js.map +1 -1
  44. package/lib/orchestrate/prisma/orchestratePrismaComponent.js +397 -201
  45. package/lib/orchestrate/prisma/orchestratePrismaComponent.js.map +1 -1
  46. package/lib/orchestrate/prisma/orchestratePrismaCorrect.js +1184 -599
  47. package/lib/orchestrate/prisma/orchestratePrismaCorrect.js.map +1 -1
  48. package/lib/orchestrate/prisma/orchestratePrismaReview.js +1202 -608
  49. package/lib/orchestrate/prisma/orchestratePrismaReview.js.map +1 -1
  50. package/lib/orchestrate/prisma/orchestratePrismaSchemas.js +4 -2
  51. package/lib/orchestrate/prisma/orchestratePrismaSchemas.js.map +1 -1
  52. package/lib/orchestrate/realize/orchestrateRealizeAuthorization.js +369 -185
  53. package/lib/orchestrate/realize/orchestrateRealizeAuthorization.js.map +1 -1
  54. package/lib/orchestrate/realize/orchestrateRealizeAuthorizationCorrect.js +405 -203
  55. package/lib/orchestrate/realize/orchestrateRealizeAuthorizationCorrect.js.map +1 -1
  56. package/lib/orchestrate/realize/orchestrateRealizeCorrect.js +130 -2
  57. package/lib/orchestrate/realize/orchestrateRealizeCorrect.js.map +1 -1
  58. package/lib/orchestrate/realize/orchestrateRealizeCorrectCasting.js +165 -2
  59. package/lib/orchestrate/realize/orchestrateRealizeCorrectCasting.js.map +1 -1
  60. package/lib/orchestrate/realize/orchestrateRealizeWrite.js +130 -2
  61. package/lib/orchestrate/realize/orchestrateRealizeWrite.js.map +1 -1
  62. package/lib/orchestrate/test/histories/transformTestWriteHistories.js.map +1 -1
  63. package/lib/orchestrate/test/orchestrateTestCorrect.js +131 -2
  64. package/lib/orchestrate/test/orchestrateTestCorrect.js.map +1 -1
  65. package/lib/orchestrate/test/orchestrateTestCorrectInvalidRequest.js +166 -2
  66. package/lib/orchestrate/test/orchestrateTestCorrectInvalidRequest.js.map +1 -1
  67. package/lib/orchestrate/test/orchestrateTestScenario.js +257 -3
  68. package/lib/orchestrate/test/orchestrateTestScenario.js.map +1 -1
  69. package/lib/orchestrate/test/orchestrateTestScenarioReview.js +283 -3
  70. package/lib/orchestrate/test/orchestrateTestScenarioReview.js.map +1 -1
  71. package/lib/orchestrate/test/orchestrateTestWrite.js +139 -2
  72. package/lib/orchestrate/test/orchestrateTestWrite.js.map +1 -1
  73. package/package.json +9 -9
  74. package/src/constants/AutoBeSystemPromptConstant.ts +1 -1
  75. package/src/context/assertSchemaModel.ts +5 -8
  76. package/src/orchestrate/analyze/orchestrateAnalyzeReview.ts +7 -9
  77. package/src/orchestrate/analyze/orchestrateAnalyzeScenario.ts +13 -9
  78. package/src/orchestrate/analyze/orchestrateAnalyzeWrite.ts +7 -9
  79. package/src/orchestrate/analyze/structures/IAutoBeAnalyzeReviewApplication.ts +19 -54
  80. package/src/orchestrate/analyze/structures/IAutoBeAnalyzeScenarioApplication.ts +25 -22
  81. package/src/orchestrate/analyze/structures/IAutoBeAnalyzeWriteApplication.ts +8 -24
  82. package/src/orchestrate/common/orchestrateCommonCorrectCasting.ts +15 -1
  83. package/src/orchestrate/facade/createAutoBeFacadeController.ts +7 -6
  84. package/src/orchestrate/interface/orchestrateInterfaceAuthorizations.ts +11 -1
  85. package/src/orchestrate/interface/orchestrateInterfaceComplement.ts +11 -1
  86. package/src/orchestrate/interface/orchestrateInterfaceEndpoints.ts +13 -9
  87. package/src/orchestrate/interface/orchestrateInterfaceEndpointsReview.ts +13 -9
  88. package/src/orchestrate/interface/orchestrateInterfaceGroups.ts +17 -14
  89. package/src/orchestrate/interface/orchestrateInterfaceOperations.ts +11 -1
  90. package/src/orchestrate/interface/orchestrateInterfaceOperationsReview.ts +14 -1
  91. package/src/orchestrate/interface/orchestrateInterfacePrerequisites.ts +11 -1
  92. package/src/orchestrate/interface/orchestrateInterfaceSchemaRename.ts +9 -1
  93. package/src/orchestrate/interface/orchestrateInterfaceSchemaReview.ts +14 -1
  94. package/src/orchestrate/interface/orchestrateInterfaceSchemas.ts +11 -1
  95. package/src/orchestrate/prisma/orchestratePrismaComponent.ts +13 -9
  96. package/src/orchestrate/prisma/orchestratePrismaCorrect.ts +7 -9
  97. package/src/orchestrate/prisma/orchestratePrismaReview.ts +7 -10
  98. package/src/orchestrate/realize/orchestrateRealizeAuthorization.ts +13 -9
  99. package/src/orchestrate/realize/orchestrateRealizeAuthorizationCorrect.ts +13 -9
  100. package/src/orchestrate/realize/orchestrateRealizeCorrect.ts +11 -1
  101. package/src/orchestrate/realize/orchestrateRealizeCorrectCasting.ts +15 -1
  102. package/src/orchestrate/realize/orchestrateRealizeWrite.ts +11 -1
  103. package/src/orchestrate/test/experimental/orchestrateTestWrite.ast +5 -1
  104. package/src/orchestrate/test/histories/transformTestWriteHistories.ts +1 -1
  105. package/src/orchestrate/test/orchestrateTestCorrect.ts +11 -1
  106. package/src/orchestrate/test/orchestrateTestCorrectInvalidRequest.ts +18 -1
  107. package/src/orchestrate/test/orchestrateTestScenario.ts +11 -1
  108. package/src/orchestrate/test/orchestrateTestScenarioReview.ts +11 -1
  109. 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 claude = {
105
- model: "claude",
106
- options: {
107
- reference: true,
108
- separate: null
109
- },
110
- functions: [
111
- {
112
- name: "reviewEndpoints",
113
- parameters: {
114
- description: " - The review results and refined endpoint collection\n\n------------------------------\n\nCurrent Type: {@link IAutoBeInterfaceEndpointsReviewApplication.IProps}",
115
- type: "object",
116
- properties: {
117
- review: {
118
- 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.",
119
- type: "string"
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
- endpoints: {
122
- 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.",
123
- type: "array",
124
- items: {
125
- $ref: "#/$defs/AutoBeOpenApi.IEndpoint"
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
- required: [
130
- "review",
131
- "endpoints"
132
- ],
133
- additionalProperties: false,
134
- $defs: {
135
- "AutoBeOpenApi.IEndpoint": {
136
- description: "API endpoint information.",
137
- type: "object",
138
- properties: {
139
- path: {
140
- 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)",
141
- type: "string",
142
- pattern: "^\\/[a-zA-Z0-9\\/_{}.-]*$"
143
- },
144
- method: {
145
- 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",
146
- oneOf: [
147
- {
148
- "const": "get"
149
- },
150
- {
151
- "const": "post"
152
- },
153
- {
154
- "const": "put"
155
- },
156
- {
157
- "const": "delete"
158
- },
159
- {
160
- "const": "patch"
161
- }
162
- ]
163
- }
164
- },
165
- required: [
166
- "path",
167
- "method"
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
- success,
224
- errors,
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
- return {
229
- success: true,
230
- data: input
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)\n\n\n@pattern ^\\/[a-zA-Z0-9\\/_{}.-]*$",
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,CACwD,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,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGT,CAAC;AACJ,MAAM,UAAU,GAAG;IACjB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAGJ;IACH,MAAM;IACN,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE,MAAM;IAChB,KAAK,EAAE,MAAM;CACd,CAAC"}
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"}