@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
|
@@ -92,7 +92,11 @@ function orchestratePrismaComponents(ctx_1, instruction_1) {
|
|
|
92
92
|
}
|
|
93
93
|
function createController(props) {
|
|
94
94
|
(0, assertSchemaModel_1.assertSchemaModel)(props.model);
|
|
95
|
-
const application = collection[props.model
|
|
95
|
+
const application = collection[props.model === "chatgpt"
|
|
96
|
+
? "chatgpt"
|
|
97
|
+
: props.model === "gemini"
|
|
98
|
+
? "gemini"
|
|
99
|
+
: "claude"];
|
|
96
100
|
return {
|
|
97
101
|
protocol: "class",
|
|
98
102
|
name: "Prisma Extract Files and Tables",
|
|
@@ -104,202 +108,6 @@ function createController(props) {
|
|
|
104
108
|
},
|
|
105
109
|
};
|
|
106
110
|
}
|
|
107
|
-
const claude = {
|
|
108
|
-
model: "claude",
|
|
109
|
-
options: {
|
|
110
|
-
reference: true,
|
|
111
|
-
separate: null
|
|
112
|
-
},
|
|
113
|
-
functions: [
|
|
114
|
-
{
|
|
115
|
-
name: "extractComponents",
|
|
116
|
-
parameters: {
|
|
117
|
-
description: "Current Type: {@link IAutoBePrismaComponentApplication.IProps}",
|
|
118
|
-
type: "object",
|
|
119
|
-
properties: {
|
|
120
|
-
thinking: {
|
|
121
|
-
description: "Initial thoughts on namespace classification criteria.\n\nContains the AI agent's initial analysis and reasoning about how to\norganize tables into different business domains/namespaces.\n\n**Example:**\n\n \"Based on the business requirements, I identify several key domains:\n - User-related entities should be grouped under 'Actors' namespace\n - Product and sales information under 'Sales' namespace\n - System configuration under 'Systematic' namespace\"",
|
|
122
|
-
type: "string"
|
|
123
|
-
},
|
|
124
|
-
review: {
|
|
125
|
-
description: "Review and refinement of the namespace classification.\n\nContains the AI agent's review process, considering relationships between\ntables and potential improvements to the initial classification.\n\n**Example:**\n\n \"Upon review, I noticed that 'shopping_channel_categories' has strong\n relationships with both channels and sales. However, since it primarily\n defines the channel structure, it should remain in 'Systematic' namespace.\"",
|
|
126
|
-
type: "string"
|
|
127
|
-
},
|
|
128
|
-
decision: {
|
|
129
|
-
description: "Final decision on namespace classification.\n\nContains the AI agent's final reasoning and rationale for the chosen\nnamespace organization, explaining why this structure best serves the\nbusiness requirements.\n\n**Example:**\n\n \"Final decision: Organize tables into 3 main namespaces:\n 1. Systematic - for channel and system configuration\n 2. Actors - for all user types (customers, citizens, administrators)\n 3. Sales - for product sales and related transactional data\n This structure provides clear separation of concerns and follows DDD principles.\"",
|
|
130
|
-
type: "string"
|
|
131
|
-
},
|
|
132
|
-
components: {
|
|
133
|
-
description: "Array of domain components that group related database tables.\n\nEach component represents a business domain and becomes one Prisma schema\nfile. Common domains include: Actors (users), Sales (products), Orders,\nCarts, etc.\n\n**Example:**\n\n```typescript\n{\n \"components\": [\n {\n \"filename\": \"schema-02-systematic.prisma\",\n \"namespace\": \"Systematic\",\n \"thinking\": \"These tables all relate to system configuration and channel management. They form the foundation of the platform.\",\n \"review\": \"Considering the relationships, shopping_channel_categories connects channels and sales, but it fundamentally defines channel structure.\",\n \"rationale\": \"Grouping all system configuration tables together provides a clear foundation layer that other domains can reference.\",\n \"tables\": [\n \"shopping_channels\",\n \"shopping_sections\",\n \"shopping_channel_categories\"\n ]\n },\n {\n \"filename\": \"schema-03-actors.prisma\",\n \"namespace\": \"Actors\",\n \"thinking\": \"All user-related entities should be grouped together as they share authentication and identity patterns.\",\n \"review\": \"While customers interact with sales, the customer entity itself is about identity, not transactions.\",\n \"rationale\": \"This component groups all actor-related tables to maintain separation between identity management and business transactions.\",\n \"tables\": [\n \"shopping_customers\",\n \"shopping_citizens\",\n \"shopping_administrators\"\n ]\n },\n {\n \"filename\": \"schema-04-sales.prisma\",\n \"namespace\": \"Sales\",\n \"thinking\": \"Product catalog and sales-related tables belong together as they form the core commerce functionality.\",\n \"review\": \"Sales snapshots are integral to the sales domain for tracking product history and price changes.\",\n \"rationale\": \"Consolidating all sales-related tables enables coherent management of the entire product lifecycle.\",\n \"tables\": [\n \"shopping_sales\",\n \"shopping_sale_snapshots\",\n \"shopping_sale_units\",\n \"shopping_sale_unit_options\"\n ]\n }\n ]\n}\n```\n\n**Notes:**\n\n- Table names must follow snake_case convention with domain prefix (e.g.,\n `shopping_customers`)\n- Each component becomes one `.prisma` file containing related models\n- Filename numbering indicates dependency order for schema generation\n- Namespace is used for documentation organization and domain grouping",
|
|
134
|
-
type: "array",
|
|
135
|
-
items: {
|
|
136
|
-
$ref: "#/$defs/AutoBePrisma.IComponent"
|
|
137
|
-
},
|
|
138
|
-
minItems: 1
|
|
139
|
-
}
|
|
140
|
-
},
|
|
141
|
-
required: [
|
|
142
|
-
"thinking",
|
|
143
|
-
"review",
|
|
144
|
-
"decision",
|
|
145
|
-
"components"
|
|
146
|
-
],
|
|
147
|
-
additionalProperties: false,
|
|
148
|
-
$defs: {
|
|
149
|
-
"AutoBePrisma.IComponent": {
|
|
150
|
-
description: "Interface representing a logical grouping of database tables organized by\nbusiness domain for schema file generation.\n\nComponents provide a systematic way to organize database tables into\ncoherent groups following domain-driven design principles. Each component\nrepresents a specific business domain or functional area that will be\ngenerated as a separate Prisma schema file, ensuring maintainable and\nlogically structured database architecture.\n\nThis interface is primarily used during the database design phase when the\nPrisma agent analyzes requirements and determines the complete scope of\ntables needed, then organizes them into logical groups based on business\nrelationships and functional dependencies.\n\n## Usage in Schema Generation Process\n\nComponents serve as the blueprint for generating multiple Prisma schema\nfiles:\n\n1. **Requirements Analysis**: AI agent identifies all required tables from\n business requirements\n2. **Domain Grouping**: Tables are organized into components based on business\n domains and functional relationships\n3. **File Generation**: Each component becomes a separate .prisma file\n containing related models\n4. **Dependency Management**: Components are ordered to handle cross-domain\n relationships properly\n\n## Domain Organization Examples\n\nBased on typical business applications, components commonly include:\n\n- **Systematic**: Core system tables (channels, sections, configurations)\n- **Actors**: User management (customers, citizens, administrators)\n- **Sales**: Product catalog and sales entities\n- **Carts**: Shopping cart and item management\n- **Orders**: Order processing and fulfillment\n- **Coupons**: Discount and promotion systems\n- **Coins**: Digital currency and mileage systems\n- **Inquiries**: Customer support and FAQ systems\n- **Favorites**: User preference and wishlist management\n- **Articles**: Content management and BBS systems\n\n## Relationship to {@link AutoBePrisma.IFile}\n\nEach IComponent serves as a blueprint for generating one IFile during the\nschema generation process. The component's metadata (filename, namespace,\ntables) is used to structure the actual Prisma schema file with proper\nmodels, relationships, and indexes.",
|
|
151
|
-
type: "object",
|
|
152
|
-
properties: {
|
|
153
|
-
filename: {
|
|
154
|
-
description: "Target filename for the Prisma schema file containing this component's\ntables.\n\nFollows the naming convention `schema-{number}-{domain}.prisma` where the\nnumber indicates dependency order and domain represents the business\narea.",
|
|
155
|
-
type: "string",
|
|
156
|
-
pattern: "^[a-zA-Z0-9._-]+\\.prisma$"
|
|
157
|
-
},
|
|
158
|
-
namespace: {
|
|
159
|
-
description: "Business domain namespace that groups related models.\n\nUsed in Prisma documentation comments as \"@\\namespace directive\".\nExamples from uploaded schemas: \"Systematic\", \"Actors\", \"Sales\", \"Carts\",\n\"Orders\", \"Coupons\", \"Coins\", \"Inquiries\", \"Favorites\", \"Articles\"",
|
|
160
|
-
type: "string"
|
|
161
|
-
},
|
|
162
|
-
thinking: {
|
|
163
|
-
description: "Initial thoughts on why these tables belong together.\n\n**Example:**\n\n \"These tables all relate to user management and authentication.\n They share common patterns like user identification and access control.\"",
|
|
164
|
-
type: "string"
|
|
165
|
-
},
|
|
166
|
-
review: {
|
|
167
|
-
description: "Review considerations for this component grouping.\n\n**Example:**\n\n \"Reviewed relationships with other domains. While customers create orders,\n the customer entity itself is fundamentally about user identity, not sales.\"",
|
|
168
|
-
type: "string"
|
|
169
|
-
},
|
|
170
|
-
rationale: {
|
|
171
|
-
description: "Final rationale for this component's composition.\n\n**Example:**\n\n \"This component groups all actor-related tables to maintain a clear\n separation between identity management and business transactions.\"",
|
|
172
|
-
type: "string"
|
|
173
|
-
},
|
|
174
|
-
tables: {
|
|
175
|
-
description: "Array of table names that will be included in this component's schema\nfile.\n\nContains all database table names that belong to this business domain,\nensuring logical grouping and proper organization of related data\nstructures.",
|
|
176
|
-
type: "array",
|
|
177
|
-
items: {
|
|
178
|
-
type: "string",
|
|
179
|
-
pattern: "^[a-z][a-z0-9_]*$"
|
|
180
|
-
},
|
|
181
|
-
minItems: 1
|
|
182
|
-
}
|
|
183
|
-
},
|
|
184
|
-
required: [
|
|
185
|
-
"filename",
|
|
186
|
-
"namespace",
|
|
187
|
-
"thinking",
|
|
188
|
-
"review",
|
|
189
|
-
"rationale",
|
|
190
|
-
"tables"
|
|
191
|
-
]
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
},
|
|
195
|
-
description: "Organizes database tables into domain-based components for Prisma schema\ngeneration.\n\nTakes business requirements and groups related tables into logical domains,\nwith each component becoming a separate .prisma file.",
|
|
196
|
-
validate: (() => { const _io0 = input => "string" === typeof input.thinking && "string" === typeof input.review && "string" === typeof input.decision && (Array.isArray(input.components) && (1 <= input.components.length && input.components.every(elem => "object" === typeof elem && null !== elem && _io1(elem)))); const _io1 = input => "string" === typeof input.filename && RegExp("^[a-zA-Z0-9._-]+\\.prisma$").test(input.filename) && "string" === typeof input.namespace && "string" === typeof input.thinking && "string" === typeof input.review && "string" === typeof input.rationale && (Array.isArray(input.tables) && (1 <= input.tables.length && input.tables.every(elem => "string" === typeof elem && RegExp("^[a-z][a-z0-9_]*$").test(elem)))); const _vo0 = (input, _path, _exceptionable = true) => ["string" === typeof input.thinking || _report(_exceptionable, {
|
|
197
|
-
path: _path + ".thinking",
|
|
198
|
-
expected: "string",
|
|
199
|
-
value: input.thinking
|
|
200
|
-
}), "string" === typeof input.review || _report(_exceptionable, {
|
|
201
|
-
path: _path + ".review",
|
|
202
|
-
expected: "string",
|
|
203
|
-
value: input.review
|
|
204
|
-
}), "string" === typeof input.decision || _report(_exceptionable, {
|
|
205
|
-
path: _path + ".decision",
|
|
206
|
-
expected: "string",
|
|
207
|
-
value: input.decision
|
|
208
|
-
}), (Array.isArray(input.components) || _report(_exceptionable, {
|
|
209
|
-
path: _path + ".components",
|
|
210
|
-
expected: "(Array<AutoBePrisma.IComponent> & MinItems<1>)",
|
|
211
|
-
value: input.components
|
|
212
|
-
})) && ((1 <= input.components.length || _report(_exceptionable, {
|
|
213
|
-
path: _path + ".components",
|
|
214
|
-
expected: "Array<> & MinItems<1>",
|
|
215
|
-
value: input.components
|
|
216
|
-
})) && input.components.map((elem, _index3) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
|
|
217
|
-
path: _path + ".components[" + _index3 + "]",
|
|
218
|
-
expected: "AutoBePrisma.IComponent",
|
|
219
|
-
value: elem
|
|
220
|
-
})) && _vo1(elem, _path + ".components[" + _index3 + "]", true && _exceptionable) || _report(_exceptionable, {
|
|
221
|
-
path: _path + ".components[" + _index3 + "]",
|
|
222
|
-
expected: "AutoBePrisma.IComponent",
|
|
223
|
-
value: elem
|
|
224
|
-
})).every(flag => flag)) || _report(_exceptionable, {
|
|
225
|
-
path: _path + ".components",
|
|
226
|
-
expected: "(Array<AutoBePrisma.IComponent> & MinItems<1>)",
|
|
227
|
-
value: input.components
|
|
228
|
-
})].every(flag => flag); const _vo1 = (input, _path, _exceptionable = true) => ["string" === typeof input.filename && (RegExp("^[a-zA-Z0-9._-]+\\.prisma$").test(input.filename) || _report(_exceptionable, {
|
|
229
|
-
path: _path + ".filename",
|
|
230
|
-
expected: "string & Pattern<\"^[a-zA-Z0-9._-]+\\\\.prisma$\">",
|
|
231
|
-
value: input.filename
|
|
232
|
-
})) || _report(_exceptionable, {
|
|
233
|
-
path: _path + ".filename",
|
|
234
|
-
expected: "(string & Pattern<\"^[a-zA-Z0-9._-]+\\\\.prisma$\">)",
|
|
235
|
-
value: input.filename
|
|
236
|
-
}), "string" === typeof input.namespace || _report(_exceptionable, {
|
|
237
|
-
path: _path + ".namespace",
|
|
238
|
-
expected: "string",
|
|
239
|
-
value: input.namespace
|
|
240
|
-
}), "string" === typeof input.thinking || _report(_exceptionable, {
|
|
241
|
-
path: _path + ".thinking",
|
|
242
|
-
expected: "string",
|
|
243
|
-
value: input.thinking
|
|
244
|
-
}), "string" === typeof input.review || _report(_exceptionable, {
|
|
245
|
-
path: _path + ".review",
|
|
246
|
-
expected: "string",
|
|
247
|
-
value: input.review
|
|
248
|
-
}), "string" === typeof input.rationale || _report(_exceptionable, {
|
|
249
|
-
path: _path + ".rationale",
|
|
250
|
-
expected: "string",
|
|
251
|
-
value: input.rationale
|
|
252
|
-
}), (Array.isArray(input.tables) || _report(_exceptionable, {
|
|
253
|
-
path: _path + ".tables",
|
|
254
|
-
expected: "(Array<string & SnakeCasePattern> & MinItems<1>)",
|
|
255
|
-
value: input.tables
|
|
256
|
-
})) && ((1 <= input.tables.length || _report(_exceptionable, {
|
|
257
|
-
path: _path + ".tables",
|
|
258
|
-
expected: "Array<> & MinItems<1>",
|
|
259
|
-
value: input.tables
|
|
260
|
-
})) && input.tables.map((elem, _index4) => "string" === typeof elem && (RegExp("^[a-z][a-z0-9_]*$").test(elem) || _report(_exceptionable, {
|
|
261
|
-
path: _path + ".tables[" + _index4 + "]",
|
|
262
|
-
expected: "string & SnakeCasePattern",
|
|
263
|
-
value: elem
|
|
264
|
-
})) || _report(_exceptionable, {
|
|
265
|
-
path: _path + ".tables[" + _index4 + "]",
|
|
266
|
-
expected: "(string & SnakeCasePattern)",
|
|
267
|
-
value: elem
|
|
268
|
-
})).every(flag => flag)) || _report(_exceptionable, {
|
|
269
|
-
path: _path + ".tables",
|
|
270
|
-
expected: "(Array<string & SnakeCasePattern> & MinItems<1>)",
|
|
271
|
-
value: input.tables
|
|
272
|
-
})].every(flag => flag); const __is = input => "object" === typeof input && null !== input && _io0(input); let errors; let _report; return input => {
|
|
273
|
-
if (false === __is(input)) {
|
|
274
|
-
errors = [];
|
|
275
|
-
_report = __typia_transform__validateReport._validateReport(errors);
|
|
276
|
-
((input, _path, _exceptionable = true) => ("object" === typeof input && null !== input || _report(true, {
|
|
277
|
-
path: _path + "",
|
|
278
|
-
expected: "IAutoBePrismaComponentApplication.IProps",
|
|
279
|
-
value: input
|
|
280
|
-
})) && _vo0(input, _path + "", true) || _report(true, {
|
|
281
|
-
path: _path + "",
|
|
282
|
-
expected: "IAutoBePrismaComponentApplication.IProps",
|
|
283
|
-
value: input
|
|
284
|
-
}))(input, "$input", true);
|
|
285
|
-
const success = 0 === errors.length;
|
|
286
|
-
return success ? {
|
|
287
|
-
success,
|
|
288
|
-
data: input
|
|
289
|
-
} : {
|
|
290
|
-
success,
|
|
291
|
-
errors,
|
|
292
|
-
data: input
|
|
293
|
-
};
|
|
294
|
-
}
|
|
295
|
-
return {
|
|
296
|
-
success: true,
|
|
297
|
-
data: input
|
|
298
|
-
};
|
|
299
|
-
}; })()
|
|
300
|
-
}
|
|
301
|
-
]
|
|
302
|
-
};
|
|
303
111
|
const collection = {
|
|
304
112
|
chatgpt: {
|
|
305
113
|
model: "chatgpt",
|
|
@@ -495,9 +303,397 @@ const collection = {
|
|
|
495
303
|
}
|
|
496
304
|
]
|
|
497
305
|
},
|
|
498
|
-
claude
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
306
|
+
claude: {
|
|
307
|
+
model: "claude",
|
|
308
|
+
options: {
|
|
309
|
+
reference: true,
|
|
310
|
+
separate: null
|
|
311
|
+
},
|
|
312
|
+
functions: [
|
|
313
|
+
{
|
|
314
|
+
name: "extractComponents",
|
|
315
|
+
parameters: {
|
|
316
|
+
description: "Current Type: {@link IAutoBePrismaComponentApplication.IProps}",
|
|
317
|
+
type: "object",
|
|
318
|
+
properties: {
|
|
319
|
+
thinking: {
|
|
320
|
+
description: "Initial thoughts on namespace classification criteria.\n\nContains the AI agent's initial analysis and reasoning about how to\norganize tables into different business domains/namespaces.\n\n**Example:**\n\n \"Based on the business requirements, I identify several key domains:\n - User-related entities should be grouped under 'Actors' namespace\n - Product and sales information under 'Sales' namespace\n - System configuration under 'Systematic' namespace\"",
|
|
321
|
+
type: "string"
|
|
322
|
+
},
|
|
323
|
+
review: {
|
|
324
|
+
description: "Review and refinement of the namespace classification.\n\nContains the AI agent's review process, considering relationships between\ntables and potential improvements to the initial classification.\n\n**Example:**\n\n \"Upon review, I noticed that 'shopping_channel_categories' has strong\n relationships with both channels and sales. However, since it primarily\n defines the channel structure, it should remain in 'Systematic' namespace.\"",
|
|
325
|
+
type: "string"
|
|
326
|
+
},
|
|
327
|
+
decision: {
|
|
328
|
+
description: "Final decision on namespace classification.\n\nContains the AI agent's final reasoning and rationale for the chosen\nnamespace organization, explaining why this structure best serves the\nbusiness requirements.\n\n**Example:**\n\n \"Final decision: Organize tables into 3 main namespaces:\n 1. Systematic - for channel and system configuration\n 2. Actors - for all user types (customers, citizens, administrators)\n 3. Sales - for product sales and related transactional data\n This structure provides clear separation of concerns and follows DDD principles.\"",
|
|
329
|
+
type: "string"
|
|
330
|
+
},
|
|
331
|
+
components: {
|
|
332
|
+
description: "Array of domain components that group related database tables.\n\nEach component represents a business domain and becomes one Prisma schema\nfile. Common domains include: Actors (users), Sales (products), Orders,\nCarts, etc.\n\n**Example:**\n\n```typescript\n{\n \"components\": [\n {\n \"filename\": \"schema-02-systematic.prisma\",\n \"namespace\": \"Systematic\",\n \"thinking\": \"These tables all relate to system configuration and channel management. They form the foundation of the platform.\",\n \"review\": \"Considering the relationships, shopping_channel_categories connects channels and sales, but it fundamentally defines channel structure.\",\n \"rationale\": \"Grouping all system configuration tables together provides a clear foundation layer that other domains can reference.\",\n \"tables\": [\n \"shopping_channels\",\n \"shopping_sections\",\n \"shopping_channel_categories\"\n ]\n },\n {\n \"filename\": \"schema-03-actors.prisma\",\n \"namespace\": \"Actors\",\n \"thinking\": \"All user-related entities should be grouped together as they share authentication and identity patterns.\",\n \"review\": \"While customers interact with sales, the customer entity itself is about identity, not transactions.\",\n \"rationale\": \"This component groups all actor-related tables to maintain separation between identity management and business transactions.\",\n \"tables\": [\n \"shopping_customers\",\n \"shopping_citizens\",\n \"shopping_administrators\"\n ]\n },\n {\n \"filename\": \"schema-04-sales.prisma\",\n \"namespace\": \"Sales\",\n \"thinking\": \"Product catalog and sales-related tables belong together as they form the core commerce functionality.\",\n \"review\": \"Sales snapshots are integral to the sales domain for tracking product history and price changes.\",\n \"rationale\": \"Consolidating all sales-related tables enables coherent management of the entire product lifecycle.\",\n \"tables\": [\n \"shopping_sales\",\n \"shopping_sale_snapshots\",\n \"shopping_sale_units\",\n \"shopping_sale_unit_options\"\n ]\n }\n ]\n}\n```\n\n**Notes:**\n\n- Table names must follow snake_case convention with domain prefix (e.g.,\n `shopping_customers`)\n- Each component becomes one `.prisma` file containing related models\n- Filename numbering indicates dependency order for schema generation\n- Namespace is used for documentation organization and domain grouping",
|
|
333
|
+
type: "array",
|
|
334
|
+
items: {
|
|
335
|
+
$ref: "#/$defs/AutoBePrisma.IComponent"
|
|
336
|
+
},
|
|
337
|
+
minItems: 1
|
|
338
|
+
}
|
|
339
|
+
},
|
|
340
|
+
required: [
|
|
341
|
+
"thinking",
|
|
342
|
+
"review",
|
|
343
|
+
"decision",
|
|
344
|
+
"components"
|
|
345
|
+
],
|
|
346
|
+
additionalProperties: false,
|
|
347
|
+
$defs: {
|
|
348
|
+
"AutoBePrisma.IComponent": {
|
|
349
|
+
description: "Interface representing a logical grouping of database tables organized by\nbusiness domain for schema file generation.\n\nComponents provide a systematic way to organize database tables into\ncoherent groups following domain-driven design principles. Each component\nrepresents a specific business domain or functional area that will be\ngenerated as a separate Prisma schema file, ensuring maintainable and\nlogically structured database architecture.\n\nThis interface is primarily used during the database design phase when the\nPrisma agent analyzes requirements and determines the complete scope of\ntables needed, then organizes them into logical groups based on business\nrelationships and functional dependencies.\n\n## Usage in Schema Generation Process\n\nComponents serve as the blueprint for generating multiple Prisma schema\nfiles:\n\n1. **Requirements Analysis**: AI agent identifies all required tables from\n business requirements\n2. **Domain Grouping**: Tables are organized into components based on business\n domains and functional relationships\n3. **File Generation**: Each component becomes a separate .prisma file\n containing related models\n4. **Dependency Management**: Components are ordered to handle cross-domain\n relationships properly\n\n## Domain Organization Examples\n\nBased on typical business applications, components commonly include:\n\n- **Systematic**: Core system tables (channels, sections, configurations)\n- **Actors**: User management (customers, citizens, administrators)\n- **Sales**: Product catalog and sales entities\n- **Carts**: Shopping cart and item management\n- **Orders**: Order processing and fulfillment\n- **Coupons**: Discount and promotion systems\n- **Coins**: Digital currency and mileage systems\n- **Inquiries**: Customer support and FAQ systems\n- **Favorites**: User preference and wishlist management\n- **Articles**: Content management and BBS systems\n\n## Relationship to {@link AutoBePrisma.IFile}\n\nEach IComponent serves as a blueprint for generating one IFile during the\nschema generation process. The component's metadata (filename, namespace,\ntables) is used to structure the actual Prisma schema file with proper\nmodels, relationships, and indexes.",
|
|
350
|
+
type: "object",
|
|
351
|
+
properties: {
|
|
352
|
+
filename: {
|
|
353
|
+
description: "Target filename for the Prisma schema file containing this component's\ntables.\n\nFollows the naming convention `schema-{number}-{domain}.prisma` where the\nnumber indicates dependency order and domain represents the business\narea.",
|
|
354
|
+
type: "string",
|
|
355
|
+
pattern: "^[a-zA-Z0-9._-]+\\.prisma$"
|
|
356
|
+
},
|
|
357
|
+
namespace: {
|
|
358
|
+
description: "Business domain namespace that groups related models.\n\nUsed in Prisma documentation comments as \"@\\namespace directive\".\nExamples from uploaded schemas: \"Systematic\", \"Actors\", \"Sales\", \"Carts\",\n\"Orders\", \"Coupons\", \"Coins\", \"Inquiries\", \"Favorites\", \"Articles\"",
|
|
359
|
+
type: "string"
|
|
360
|
+
},
|
|
361
|
+
thinking: {
|
|
362
|
+
description: "Initial thoughts on why these tables belong together.\n\n**Example:**\n\n \"These tables all relate to user management and authentication.\n They share common patterns like user identification and access control.\"",
|
|
363
|
+
type: "string"
|
|
364
|
+
},
|
|
365
|
+
review: {
|
|
366
|
+
description: "Review considerations for this component grouping.\n\n**Example:**\n\n \"Reviewed relationships with other domains. While customers create orders,\n the customer entity itself is fundamentally about user identity, not sales.\"",
|
|
367
|
+
type: "string"
|
|
368
|
+
},
|
|
369
|
+
rationale: {
|
|
370
|
+
description: "Final rationale for this component's composition.\n\n**Example:**\n\n \"This component groups all actor-related tables to maintain a clear\n separation between identity management and business transactions.\"",
|
|
371
|
+
type: "string"
|
|
372
|
+
},
|
|
373
|
+
tables: {
|
|
374
|
+
description: "Array of table names that will be included in this component's schema\nfile.\n\nContains all database table names that belong to this business domain,\nensuring logical grouping and proper organization of related data\nstructures.",
|
|
375
|
+
type: "array",
|
|
376
|
+
items: {
|
|
377
|
+
type: "string",
|
|
378
|
+
pattern: "^[a-z][a-z0-9_]*$"
|
|
379
|
+
},
|
|
380
|
+
minItems: 1
|
|
381
|
+
}
|
|
382
|
+
},
|
|
383
|
+
required: [
|
|
384
|
+
"filename",
|
|
385
|
+
"namespace",
|
|
386
|
+
"thinking",
|
|
387
|
+
"review",
|
|
388
|
+
"rationale",
|
|
389
|
+
"tables"
|
|
390
|
+
]
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
},
|
|
394
|
+
description: "Organizes database tables into domain-based components for Prisma schema\ngeneration.\n\nTakes business requirements and groups related tables into logical domains,\nwith each component becoming a separate .prisma file.",
|
|
395
|
+
validate: (() => { const _io0 = input => "string" === typeof input.thinking && "string" === typeof input.review && "string" === typeof input.decision && (Array.isArray(input.components) && (1 <= input.components.length && input.components.every(elem => "object" === typeof elem && null !== elem && _io1(elem)))); const _io1 = input => "string" === typeof input.filename && RegExp("^[a-zA-Z0-9._-]+\\.prisma$").test(input.filename) && "string" === typeof input.namespace && "string" === typeof input.thinking && "string" === typeof input.review && "string" === typeof input.rationale && (Array.isArray(input.tables) && (1 <= input.tables.length && input.tables.every(elem => "string" === typeof elem && RegExp("^[a-z][a-z0-9_]*$").test(elem)))); const _vo0 = (input, _path, _exceptionable = true) => ["string" === typeof input.thinking || _report(_exceptionable, {
|
|
396
|
+
path: _path + ".thinking",
|
|
397
|
+
expected: "string",
|
|
398
|
+
value: input.thinking
|
|
399
|
+
}), "string" === typeof input.review || _report(_exceptionable, {
|
|
400
|
+
path: _path + ".review",
|
|
401
|
+
expected: "string",
|
|
402
|
+
value: input.review
|
|
403
|
+
}), "string" === typeof input.decision || _report(_exceptionable, {
|
|
404
|
+
path: _path + ".decision",
|
|
405
|
+
expected: "string",
|
|
406
|
+
value: input.decision
|
|
407
|
+
}), (Array.isArray(input.components) || _report(_exceptionable, {
|
|
408
|
+
path: _path + ".components",
|
|
409
|
+
expected: "(Array<AutoBePrisma.IComponent> & MinItems<1>)",
|
|
410
|
+
value: input.components
|
|
411
|
+
})) && ((1 <= input.components.length || _report(_exceptionable, {
|
|
412
|
+
path: _path + ".components",
|
|
413
|
+
expected: "Array<> & MinItems<1>",
|
|
414
|
+
value: input.components
|
|
415
|
+
})) && input.components.map((elem, _index3) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
|
|
416
|
+
path: _path + ".components[" + _index3 + "]",
|
|
417
|
+
expected: "AutoBePrisma.IComponent",
|
|
418
|
+
value: elem
|
|
419
|
+
})) && _vo1(elem, _path + ".components[" + _index3 + "]", true && _exceptionable) || _report(_exceptionable, {
|
|
420
|
+
path: _path + ".components[" + _index3 + "]",
|
|
421
|
+
expected: "AutoBePrisma.IComponent",
|
|
422
|
+
value: elem
|
|
423
|
+
})).every(flag => flag)) || _report(_exceptionable, {
|
|
424
|
+
path: _path + ".components",
|
|
425
|
+
expected: "(Array<AutoBePrisma.IComponent> & MinItems<1>)",
|
|
426
|
+
value: input.components
|
|
427
|
+
})].every(flag => flag); const _vo1 = (input, _path, _exceptionable = true) => ["string" === typeof input.filename && (RegExp("^[a-zA-Z0-9._-]+\\.prisma$").test(input.filename) || _report(_exceptionable, {
|
|
428
|
+
path: _path + ".filename",
|
|
429
|
+
expected: "string & Pattern<\"^[a-zA-Z0-9._-]+\\\\.prisma$\">",
|
|
430
|
+
value: input.filename
|
|
431
|
+
})) || _report(_exceptionable, {
|
|
432
|
+
path: _path + ".filename",
|
|
433
|
+
expected: "(string & Pattern<\"^[a-zA-Z0-9._-]+\\\\.prisma$\">)",
|
|
434
|
+
value: input.filename
|
|
435
|
+
}), "string" === typeof input.namespace || _report(_exceptionable, {
|
|
436
|
+
path: _path + ".namespace",
|
|
437
|
+
expected: "string",
|
|
438
|
+
value: input.namespace
|
|
439
|
+
}), "string" === typeof input.thinking || _report(_exceptionable, {
|
|
440
|
+
path: _path + ".thinking",
|
|
441
|
+
expected: "string",
|
|
442
|
+
value: input.thinking
|
|
443
|
+
}), "string" === typeof input.review || _report(_exceptionable, {
|
|
444
|
+
path: _path + ".review",
|
|
445
|
+
expected: "string",
|
|
446
|
+
value: input.review
|
|
447
|
+
}), "string" === typeof input.rationale || _report(_exceptionable, {
|
|
448
|
+
path: _path + ".rationale",
|
|
449
|
+
expected: "string",
|
|
450
|
+
value: input.rationale
|
|
451
|
+
}), (Array.isArray(input.tables) || _report(_exceptionable, {
|
|
452
|
+
path: _path + ".tables",
|
|
453
|
+
expected: "(Array<string & SnakeCasePattern> & MinItems<1>)",
|
|
454
|
+
value: input.tables
|
|
455
|
+
})) && ((1 <= input.tables.length || _report(_exceptionable, {
|
|
456
|
+
path: _path + ".tables",
|
|
457
|
+
expected: "Array<> & MinItems<1>",
|
|
458
|
+
value: input.tables
|
|
459
|
+
})) && input.tables.map((elem, _index4) => "string" === typeof elem && (RegExp("^[a-z][a-z0-9_]*$").test(elem) || _report(_exceptionable, {
|
|
460
|
+
path: _path + ".tables[" + _index4 + "]",
|
|
461
|
+
expected: "string & SnakeCasePattern",
|
|
462
|
+
value: elem
|
|
463
|
+
})) || _report(_exceptionable, {
|
|
464
|
+
path: _path + ".tables[" + _index4 + "]",
|
|
465
|
+
expected: "(string & SnakeCasePattern)",
|
|
466
|
+
value: elem
|
|
467
|
+
})).every(flag => flag)) || _report(_exceptionable, {
|
|
468
|
+
path: _path + ".tables",
|
|
469
|
+
expected: "(Array<string & SnakeCasePattern> & MinItems<1>)",
|
|
470
|
+
value: input.tables
|
|
471
|
+
})].every(flag => flag); const __is = input => "object" === typeof input && null !== input && _io0(input); let errors; let _report; return input => {
|
|
472
|
+
if (false === __is(input)) {
|
|
473
|
+
errors = [];
|
|
474
|
+
_report = __typia_transform__validateReport._validateReport(errors);
|
|
475
|
+
((input, _path, _exceptionable = true) => ("object" === typeof input && null !== input || _report(true, {
|
|
476
|
+
path: _path + "",
|
|
477
|
+
expected: "IAutoBePrismaComponentApplication.IProps",
|
|
478
|
+
value: input
|
|
479
|
+
})) && _vo0(input, _path + "", true) || _report(true, {
|
|
480
|
+
path: _path + "",
|
|
481
|
+
expected: "IAutoBePrismaComponentApplication.IProps",
|
|
482
|
+
value: input
|
|
483
|
+
}))(input, "$input", true);
|
|
484
|
+
const success = 0 === errors.length;
|
|
485
|
+
return success ? {
|
|
486
|
+
success,
|
|
487
|
+
data: input
|
|
488
|
+
} : {
|
|
489
|
+
success,
|
|
490
|
+
errors,
|
|
491
|
+
data: input
|
|
492
|
+
};
|
|
493
|
+
}
|
|
494
|
+
return {
|
|
495
|
+
success: true,
|
|
496
|
+
data: input
|
|
497
|
+
};
|
|
498
|
+
}; })()
|
|
499
|
+
}
|
|
500
|
+
]
|
|
501
|
+
},
|
|
502
|
+
gemini: {
|
|
503
|
+
model: "gemini",
|
|
504
|
+
options: {
|
|
505
|
+
reference: true,
|
|
506
|
+
separate: null
|
|
507
|
+
},
|
|
508
|
+
functions: [
|
|
509
|
+
{
|
|
510
|
+
name: "extractComponents",
|
|
511
|
+
parameters: {
|
|
512
|
+
description: "Current Type: {@link IAutoBePrismaComponentApplication.IProps}",
|
|
513
|
+
type: "object",
|
|
514
|
+
properties: {
|
|
515
|
+
thinking: {
|
|
516
|
+
description: "Initial thoughts on namespace classification criteria.\n\nContains the AI agent's initial analysis and reasoning about how to\norganize tables into different business domains/namespaces.\n\n**Example:**\n\n \"Based on the business requirements, I identify several key domains:\n - User-related entities should be grouped under 'Actors' namespace\n - Product and sales information under 'Sales' namespace\n - System configuration under 'Systematic' namespace\"",
|
|
517
|
+
type: "string"
|
|
518
|
+
},
|
|
519
|
+
review: {
|
|
520
|
+
description: "Review and refinement of the namespace classification.\n\nContains the AI agent's review process, considering relationships between\ntables and potential improvements to the initial classification.\n\n**Example:**\n\n \"Upon review, I noticed that 'shopping_channel_categories' has strong\n relationships with both channels and sales. However, since it primarily\n defines the channel structure, it should remain in 'Systematic' namespace.\"",
|
|
521
|
+
type: "string"
|
|
522
|
+
},
|
|
523
|
+
decision: {
|
|
524
|
+
description: "Final decision on namespace classification.\n\nContains the AI agent's final reasoning and rationale for the chosen\nnamespace organization, explaining why this structure best serves the\nbusiness requirements.\n\n**Example:**\n\n \"Final decision: Organize tables into 3 main namespaces:\n 1. Systematic - for channel and system configuration\n 2. Actors - for all user types (customers, citizens, administrators)\n 3. Sales - for product sales and related transactional data\n This structure provides clear separation of concerns and follows DDD principles.\"",
|
|
525
|
+
type: "string"
|
|
526
|
+
},
|
|
527
|
+
components: {
|
|
528
|
+
description: "Array of domain components that group related database tables.\n\nEach component represents a business domain and becomes one Prisma schema\nfile. Common domains include: Actors (users), Sales (products), Orders,\nCarts, etc.\n\n**Example:**\n\n```typescript\n{\n \"components\": [\n {\n \"filename\": \"schema-02-systematic.prisma\",\n \"namespace\": \"Systematic\",\n \"thinking\": \"These tables all relate to system configuration and channel management. They form the foundation of the platform.\",\n \"review\": \"Considering the relationships, shopping_channel_categories connects channels and sales, but it fundamentally defines channel structure.\",\n \"rationale\": \"Grouping all system configuration tables together provides a clear foundation layer that other domains can reference.\",\n \"tables\": [\n \"shopping_channels\",\n \"shopping_sections\",\n \"shopping_channel_categories\"\n ]\n },\n {\n \"filename\": \"schema-03-actors.prisma\",\n \"namespace\": \"Actors\",\n \"thinking\": \"All user-related entities should be grouped together as they share authentication and identity patterns.\",\n \"review\": \"While customers interact with sales, the customer entity itself is about identity, not transactions.\",\n \"rationale\": \"This component groups all actor-related tables to maintain separation between identity management and business transactions.\",\n \"tables\": [\n \"shopping_customers\",\n \"shopping_citizens\",\n \"shopping_administrators\"\n ]\n },\n {\n \"filename\": \"schema-04-sales.prisma\",\n \"namespace\": \"Sales\",\n \"thinking\": \"Product catalog and sales-related tables belong together as they form the core commerce functionality.\",\n \"review\": \"Sales snapshots are integral to the sales domain for tracking product history and price changes.\",\n \"rationale\": \"Consolidating all sales-related tables enables coherent management of the entire product lifecycle.\",\n \"tables\": [\n \"shopping_sales\",\n \"shopping_sale_snapshots\",\n \"shopping_sale_units\",\n \"shopping_sale_unit_options\"\n ]\n }\n ]\n}\n```\n\n**Notes:**\n\n- Table names must follow snake_case convention with domain prefix (e.g.,\n `shopping_customers`)\n- Each component becomes one `.prisma` file containing related models\n- Filename numbering indicates dependency order for schema generation\n- Namespace is used for documentation organization and domain grouping",
|
|
529
|
+
type: "array",
|
|
530
|
+
items: {
|
|
531
|
+
$ref: "#/$defs/AutoBePrisma.IComponent"
|
|
532
|
+
},
|
|
533
|
+
minItems: 1
|
|
534
|
+
}
|
|
535
|
+
},
|
|
536
|
+
required: [
|
|
537
|
+
"thinking",
|
|
538
|
+
"review",
|
|
539
|
+
"decision",
|
|
540
|
+
"components"
|
|
541
|
+
],
|
|
542
|
+
additionalProperties: false,
|
|
543
|
+
$defs: {
|
|
544
|
+
"AutoBePrisma.IComponent": {
|
|
545
|
+
description: "Interface representing a logical grouping of database tables organized by\nbusiness domain for schema file generation.\n\nComponents provide a systematic way to organize database tables into\ncoherent groups following domain-driven design principles. Each component\nrepresents a specific business domain or functional area that will be\ngenerated as a separate Prisma schema file, ensuring maintainable and\nlogically structured database architecture.\n\nThis interface is primarily used during the database design phase when the\nPrisma agent analyzes requirements and determines the complete scope of\ntables needed, then organizes them into logical groups based on business\nrelationships and functional dependencies.\n\n## Usage in Schema Generation Process\n\nComponents serve as the blueprint for generating multiple Prisma schema\nfiles:\n\n1. **Requirements Analysis**: AI agent identifies all required tables from\n business requirements\n2. **Domain Grouping**: Tables are organized into components based on business\n domains and functional relationships\n3. **File Generation**: Each component becomes a separate .prisma file\n containing related models\n4. **Dependency Management**: Components are ordered to handle cross-domain\n relationships properly\n\n## Domain Organization Examples\n\nBased on typical business applications, components commonly include:\n\n- **Systematic**: Core system tables (channels, sections, configurations)\n- **Actors**: User management (customers, citizens, administrators)\n- **Sales**: Product catalog and sales entities\n- **Carts**: Shopping cart and item management\n- **Orders**: Order processing and fulfillment\n- **Coupons**: Discount and promotion systems\n- **Coins**: Digital currency and mileage systems\n- **Inquiries**: Customer support and FAQ systems\n- **Favorites**: User preference and wishlist management\n- **Articles**: Content management and BBS systems\n\n## Relationship to {@link AutoBePrisma.IFile}\n\nEach IComponent serves as a blueprint for generating one IFile during the\nschema generation process. The component's metadata (filename, namespace,\ntables) is used to structure the actual Prisma schema file with proper\nmodels, relationships, and indexes.",
|
|
546
|
+
type: "object",
|
|
547
|
+
properties: {
|
|
548
|
+
filename: {
|
|
549
|
+
description: "Target filename for the Prisma schema file containing this component's\ntables.\n\nFollows the naming convention `schema-{number}-{domain}.prisma` where the\nnumber indicates dependency order and domain represents the business\narea.",
|
|
550
|
+
type: "string",
|
|
551
|
+
pattern: "^[a-zA-Z0-9._-]+\\.prisma$"
|
|
552
|
+
},
|
|
553
|
+
namespace: {
|
|
554
|
+
description: "Business domain namespace that groups related models.\n\nUsed in Prisma documentation comments as \"@\\namespace directive\".\nExamples from uploaded schemas: \"Systematic\", \"Actors\", \"Sales\", \"Carts\",\n\"Orders\", \"Coupons\", \"Coins\", \"Inquiries\", \"Favorites\", \"Articles\"",
|
|
555
|
+
type: "string"
|
|
556
|
+
},
|
|
557
|
+
thinking: {
|
|
558
|
+
description: "Initial thoughts on why these tables belong together.\n\n**Example:**\n\n \"These tables all relate to user management and authentication.\n They share common patterns like user identification and access control.\"",
|
|
559
|
+
type: "string"
|
|
560
|
+
},
|
|
561
|
+
review: {
|
|
562
|
+
description: "Review considerations for this component grouping.\n\n**Example:**\n\n \"Reviewed relationships with other domains. While customers create orders,\n the customer entity itself is fundamentally about user identity, not sales.\"",
|
|
563
|
+
type: "string"
|
|
564
|
+
},
|
|
565
|
+
rationale: {
|
|
566
|
+
description: "Final rationale for this component's composition.\n\n**Example:**\n\n \"This component groups all actor-related tables to maintain a clear\n separation between identity management and business transactions.\"",
|
|
567
|
+
type: "string"
|
|
568
|
+
},
|
|
569
|
+
tables: {
|
|
570
|
+
description: "Array of table names that will be included in this component's schema\nfile.\n\nContains all database table names that belong to this business domain,\nensuring logical grouping and proper organization of related data\nstructures.",
|
|
571
|
+
type: "array",
|
|
572
|
+
items: {
|
|
573
|
+
type: "string",
|
|
574
|
+
pattern: "^[a-z][a-z0-9_]*$"
|
|
575
|
+
},
|
|
576
|
+
minItems: 1
|
|
577
|
+
}
|
|
578
|
+
},
|
|
579
|
+
required: [
|
|
580
|
+
"filename",
|
|
581
|
+
"namespace",
|
|
582
|
+
"thinking",
|
|
583
|
+
"review",
|
|
584
|
+
"rationale",
|
|
585
|
+
"tables"
|
|
586
|
+
]
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
},
|
|
590
|
+
description: "Organizes database tables into domain-based components for Prisma schema\ngeneration.\n\nTakes business requirements and groups related tables into logical domains,\nwith each component becoming a separate .prisma file.",
|
|
591
|
+
validate: (() => { const _io0 = input => "string" === typeof input.thinking && "string" === typeof input.review && "string" === typeof input.decision && (Array.isArray(input.components) && (1 <= input.components.length && input.components.every(elem => "object" === typeof elem && null !== elem && _io1(elem)))); const _io1 = input => "string" === typeof input.filename && RegExp("^[a-zA-Z0-9._-]+\\.prisma$").test(input.filename) && "string" === typeof input.namespace && "string" === typeof input.thinking && "string" === typeof input.review && "string" === typeof input.rationale && (Array.isArray(input.tables) && (1 <= input.tables.length && input.tables.every(elem => "string" === typeof elem && RegExp("^[a-z][a-z0-9_]*$").test(elem)))); const _vo0 = (input, _path, _exceptionable = true) => ["string" === typeof input.thinking || _report(_exceptionable, {
|
|
592
|
+
path: _path + ".thinking",
|
|
593
|
+
expected: "string",
|
|
594
|
+
value: input.thinking
|
|
595
|
+
}), "string" === typeof input.review || _report(_exceptionable, {
|
|
596
|
+
path: _path + ".review",
|
|
597
|
+
expected: "string",
|
|
598
|
+
value: input.review
|
|
599
|
+
}), "string" === typeof input.decision || _report(_exceptionable, {
|
|
600
|
+
path: _path + ".decision",
|
|
601
|
+
expected: "string",
|
|
602
|
+
value: input.decision
|
|
603
|
+
}), (Array.isArray(input.components) || _report(_exceptionable, {
|
|
604
|
+
path: _path + ".components",
|
|
605
|
+
expected: "(Array<AutoBePrisma.IComponent> & MinItems<1>)",
|
|
606
|
+
value: input.components
|
|
607
|
+
})) && ((1 <= input.components.length || _report(_exceptionable, {
|
|
608
|
+
path: _path + ".components",
|
|
609
|
+
expected: "Array<> & MinItems<1>",
|
|
610
|
+
value: input.components
|
|
611
|
+
})) && input.components.map((elem, _index3) => ("object" === typeof elem && null !== elem || _report(_exceptionable, {
|
|
612
|
+
path: _path + ".components[" + _index3 + "]",
|
|
613
|
+
expected: "AutoBePrisma.IComponent",
|
|
614
|
+
value: elem
|
|
615
|
+
})) && _vo1(elem, _path + ".components[" + _index3 + "]", true && _exceptionable) || _report(_exceptionable, {
|
|
616
|
+
path: _path + ".components[" + _index3 + "]",
|
|
617
|
+
expected: "AutoBePrisma.IComponent",
|
|
618
|
+
value: elem
|
|
619
|
+
})).every(flag => flag)) || _report(_exceptionable, {
|
|
620
|
+
path: _path + ".components",
|
|
621
|
+
expected: "(Array<AutoBePrisma.IComponent> & MinItems<1>)",
|
|
622
|
+
value: input.components
|
|
623
|
+
})].every(flag => flag); const _vo1 = (input, _path, _exceptionable = true) => ["string" === typeof input.filename && (RegExp("^[a-zA-Z0-9._-]+\\.prisma$").test(input.filename) || _report(_exceptionable, {
|
|
624
|
+
path: _path + ".filename",
|
|
625
|
+
expected: "string & Pattern<\"^[a-zA-Z0-9._-]+\\\\.prisma$\">",
|
|
626
|
+
value: input.filename
|
|
627
|
+
})) || _report(_exceptionable, {
|
|
628
|
+
path: _path + ".filename",
|
|
629
|
+
expected: "(string & Pattern<\"^[a-zA-Z0-9._-]+\\\\.prisma$\">)",
|
|
630
|
+
value: input.filename
|
|
631
|
+
}), "string" === typeof input.namespace || _report(_exceptionable, {
|
|
632
|
+
path: _path + ".namespace",
|
|
633
|
+
expected: "string",
|
|
634
|
+
value: input.namespace
|
|
635
|
+
}), "string" === typeof input.thinking || _report(_exceptionable, {
|
|
636
|
+
path: _path + ".thinking",
|
|
637
|
+
expected: "string",
|
|
638
|
+
value: input.thinking
|
|
639
|
+
}), "string" === typeof input.review || _report(_exceptionable, {
|
|
640
|
+
path: _path + ".review",
|
|
641
|
+
expected: "string",
|
|
642
|
+
value: input.review
|
|
643
|
+
}), "string" === typeof input.rationale || _report(_exceptionable, {
|
|
644
|
+
path: _path + ".rationale",
|
|
645
|
+
expected: "string",
|
|
646
|
+
value: input.rationale
|
|
647
|
+
}), (Array.isArray(input.tables) || _report(_exceptionable, {
|
|
648
|
+
path: _path + ".tables",
|
|
649
|
+
expected: "(Array<string & SnakeCasePattern> & MinItems<1>)",
|
|
650
|
+
value: input.tables
|
|
651
|
+
})) && ((1 <= input.tables.length || _report(_exceptionable, {
|
|
652
|
+
path: _path + ".tables",
|
|
653
|
+
expected: "Array<> & MinItems<1>",
|
|
654
|
+
value: input.tables
|
|
655
|
+
})) && input.tables.map((elem, _index4) => "string" === typeof elem && (RegExp("^[a-z][a-z0-9_]*$").test(elem) || _report(_exceptionable, {
|
|
656
|
+
path: _path + ".tables[" + _index4 + "]",
|
|
657
|
+
expected: "string & SnakeCasePattern",
|
|
658
|
+
value: elem
|
|
659
|
+
})) || _report(_exceptionable, {
|
|
660
|
+
path: _path + ".tables[" + _index4 + "]",
|
|
661
|
+
expected: "(string & SnakeCasePattern)",
|
|
662
|
+
value: elem
|
|
663
|
+
})).every(flag => flag)) || _report(_exceptionable, {
|
|
664
|
+
path: _path + ".tables",
|
|
665
|
+
expected: "(Array<string & SnakeCasePattern> & MinItems<1>)",
|
|
666
|
+
value: input.tables
|
|
667
|
+
})].every(flag => flag); const __is = input => "object" === typeof input && null !== input && _io0(input); let errors; let _report; return input => {
|
|
668
|
+
if (false === __is(input)) {
|
|
669
|
+
errors = [];
|
|
670
|
+
_report = __typia_transform__validateReport._validateReport(errors);
|
|
671
|
+
((input, _path, _exceptionable = true) => ("object" === typeof input && null !== input || _report(true, {
|
|
672
|
+
path: _path + "",
|
|
673
|
+
expected: "IAutoBePrismaComponentApplication.IProps",
|
|
674
|
+
value: input
|
|
675
|
+
})) && _vo0(input, _path + "", true) || _report(true, {
|
|
676
|
+
path: _path + "",
|
|
677
|
+
expected: "IAutoBePrismaComponentApplication.IProps",
|
|
678
|
+
value: input
|
|
679
|
+
}))(input, "$input", true);
|
|
680
|
+
const success = 0 === errors.length;
|
|
681
|
+
return success ? {
|
|
682
|
+
success,
|
|
683
|
+
data: input
|
|
684
|
+
} : {
|
|
685
|
+
success,
|
|
686
|
+
errors,
|
|
687
|
+
data: input
|
|
688
|
+
};
|
|
689
|
+
}
|
|
690
|
+
return {
|
|
691
|
+
success: true,
|
|
692
|
+
data: input
|
|
693
|
+
};
|
|
694
|
+
}; })()
|
|
695
|
+
}
|
|
696
|
+
]
|
|
697
|
+
},
|
|
502
698
|
};
|
|
503
699
|
//# sourceMappingURL=orchestratePrismaComponent.js.map
|