@autobe/agent 0.23.1 → 0.24.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 (103) hide show
  1. package/lib/constants/AutoBeSystemPromptConstant.d.ts +30 -29
  2. package/lib/constants/AutoBeSystemPromptConstant.js.map +1 -1
  3. package/lib/factory/consentFunctionCall.js +1 -1
  4. package/lib/factory/consentFunctionCall.js.map +1 -1
  5. package/lib/factory/createAutoBeContext.js +3 -3
  6. package/lib/factory/createAutoBeContext.js.map +1 -1
  7. package/lib/index.mjs +683 -260
  8. package/lib/index.mjs.map +1 -1
  9. package/lib/orchestrate/analyze/histories/transformAnalyzeReviewHistories.js +1 -1
  10. package/lib/orchestrate/analyze/histories/transformAnalyzeReviewHistories.js.map +1 -1
  11. package/lib/orchestrate/analyze/histories/transformAnalyzeScenarioHistories.js +2 -2
  12. package/lib/orchestrate/analyze/histories/transformAnalyzeScenarioHistories.js.map +1 -1
  13. package/lib/orchestrate/analyze/histories/transformAnalyzeWriteHistories.js +1 -1
  14. package/lib/orchestrate/analyze/histories/transformAnalyzeWriteHistories.js.map +1 -1
  15. package/lib/orchestrate/common/histories/transformCommonCorrectCastingHistories.js +1 -1
  16. package/lib/orchestrate/common/histories/transformCommonCorrectCastingHistories.js.map +1 -1
  17. package/lib/orchestrate/common/histories/transformCommonCorrectDateHistories.d.ts +9 -0
  18. package/lib/orchestrate/common/histories/transformCommonCorrectDateHistories.js +48 -0
  19. package/lib/orchestrate/common/histories/transformCommonCorrectDateHistories.js.map +1 -0
  20. package/lib/orchestrate/common/structures/IAutoBeCommonCorrectDateApplication.d.ts +35 -0
  21. package/lib/orchestrate/common/structures/IAutoBeCommonCorrectDateApplication.js +3 -0
  22. package/lib/orchestrate/common/structures/IAutoBeCommonCorrectDateApplication.js.map +1 -0
  23. package/lib/orchestrate/facade/transformFacadeStateMessage.js +1 -1
  24. package/lib/orchestrate/facade/transformFacadeStateMessage.js.map +1 -1
  25. package/lib/orchestrate/interface/histories/transformInterfaceAuthorizationsHistories.js +1 -1
  26. package/lib/orchestrate/interface/histories/transformInterfaceAuthorizationsHistories.js.map +1 -1
  27. package/lib/orchestrate/interface/histories/transformInterfaceComplementHistories.js +3 -3
  28. package/lib/orchestrate/interface/histories/transformInterfaceComplementHistories.js.map +1 -1
  29. package/lib/orchestrate/interface/histories/transformInterfaceEndpointHistories.js +1 -1
  30. package/lib/orchestrate/interface/histories/transformInterfaceEndpointHistories.js.map +1 -1
  31. package/lib/orchestrate/interface/histories/transformInterfaceEndpointsReviewHistories.js +2 -2
  32. package/lib/orchestrate/interface/histories/transformInterfaceEndpointsReviewHistories.js.map +1 -1
  33. package/lib/orchestrate/interface/histories/transformInterfaceGroupHistories.js +2 -2
  34. package/lib/orchestrate/interface/histories/transformInterfaceGroupHistories.js.map +1 -1
  35. package/lib/orchestrate/interface/histories/transformInterfaceOperationHistories.js +1 -1
  36. package/lib/orchestrate/interface/histories/transformInterfaceOperationHistories.js.map +1 -1
  37. package/lib/orchestrate/interface/histories/transformInterfaceOperationsReviewHistories.js +2 -2
  38. package/lib/orchestrate/interface/histories/transformInterfaceOperationsReviewHistories.js.map +1 -1
  39. package/lib/orchestrate/interface/histories/transformInterfaceSchemaHistories.js +1 -1
  40. package/lib/orchestrate/interface/histories/transformInterfaceSchemaHistories.js.map +1 -1
  41. package/lib/orchestrate/interface/histories/transformInterfaceSchemasReviewHistories.js +2 -2
  42. package/lib/orchestrate/interface/histories/transformInterfaceSchemasReviewHistories.js.map +1 -1
  43. package/lib/orchestrate/prisma/histories/transformPrismaComponentsHistories.js +1 -1
  44. package/lib/orchestrate/prisma/histories/transformPrismaComponentsHistories.js.map +1 -1
  45. package/lib/orchestrate/prisma/histories/transformPrismaCorrectHistories.js +1 -1
  46. package/lib/orchestrate/prisma/histories/transformPrismaCorrectHistories.js.map +1 -1
  47. package/lib/orchestrate/prisma/histories/transformPrismaReviewHistories.js +2 -2
  48. package/lib/orchestrate/prisma/histories/transformPrismaReviewHistories.js.map +1 -1
  49. package/lib/orchestrate/prisma/histories/transformPrismaSchemaHistories.js +1 -1
  50. package/lib/orchestrate/prisma/histories/transformPrismaSchemaHistories.js.map +1 -1
  51. package/lib/orchestrate/realize/histories/transformRealizeAuthorization.js +1 -1
  52. package/lib/orchestrate/realize/histories/transformRealizeAuthorization.js.map +1 -1
  53. package/lib/orchestrate/realize/histories/transformRealizeAuthorizationCorrectHistories.js +2 -2
  54. package/lib/orchestrate/realize/histories/transformRealizeAuthorizationCorrectHistories.js.map +1 -1
  55. package/lib/orchestrate/realize/histories/transformRealizeCorrectHistories.js +2 -2
  56. package/lib/orchestrate/realize/histories/transformRealizeCorrectHistories.js.map +1 -1
  57. package/lib/orchestrate/realize/histories/transformRealizeWriteHistories.js +2 -2
  58. package/lib/orchestrate/realize/histories/transformRealizeWriteHistories.js.map +1 -1
  59. package/lib/orchestrate/realize/orchestRateRealizeCorrectCasting.js +4 -3
  60. package/lib/orchestrate/realize/orchestRateRealizeCorrectCasting.js.map +1 -1
  61. package/lib/orchestrate/realize/orchestrateRealize.js +6 -10
  62. package/lib/orchestrate/realize/orchestrateRealize.js.map +1 -1
  63. package/lib/orchestrate/realize/orchestrateRealizeCorrect.js +46 -61
  64. package/lib/orchestrate/realize/orchestrateRealizeCorrect.js.map +1 -1
  65. package/lib/orchestrate/realize/orchestrateRealizeCorrectDate.d.ts +4 -0
  66. package/lib/orchestrate/realize/orchestrateRealizeCorrectDate.js +540 -0
  67. package/lib/orchestrate/realize/orchestrateRealizeCorrectDate.js.map +1 -0
  68. package/lib/orchestrate/realize/orchestrateRealizeWrite.js +37 -55
  69. package/lib/orchestrate/realize/orchestrateRealizeWrite.js.map +1 -1
  70. package/lib/orchestrate/realize/structures/IAutoBeRealizeCorrectApplication.d.ts +8 -8
  71. package/lib/orchestrate/realize/structures/IAutoBeRealizeWriteApplication.d.ts +20 -264
  72. package/lib/orchestrate/realize/utils/filterDiagnostics.d.ts +13 -0
  73. package/lib/orchestrate/realize/utils/filterDiagnostics.js +20 -0
  74. package/lib/orchestrate/realize/utils/filterDiagnostics.js.map +1 -0
  75. package/lib/orchestrate/test/histories/transformTestCorrectHistories.js +1 -1
  76. package/lib/orchestrate/test/histories/transformTestCorrectHistories.js.map +1 -1
  77. package/lib/orchestrate/test/histories/transformTestCorrectInvalidRequestHistories.js +1 -1
  78. package/lib/orchestrate/test/histories/transformTestCorrectInvalidRequestHistories.js.map +1 -1
  79. package/lib/orchestrate/test/histories/transformTestScenarioHistories.js +1 -1
  80. package/lib/orchestrate/test/histories/transformTestScenarioHistories.js.map +1 -1
  81. package/lib/orchestrate/test/histories/transformTestWriteHistories.js +1 -1
  82. package/lib/orchestrate/test/histories/transformTestWriteHistories.js.map +1 -1
  83. package/lib/structures/IAutoBeConfig.d.ts +34 -1
  84. package/lib/utils/{TimeoutConversation.d.ts → TimedConversation.d.ts} +2 -2
  85. package/lib/utils/{TimeoutConversation.js → TimedConversation.js} +20 -6
  86. package/lib/utils/TimedConversation.js.map +1 -0
  87. package/package.json +6 -6
  88. package/src/constants/AutoBeSystemPromptConstant.ts +30 -29
  89. package/src/factory/createAutoBeContext.ts +5 -5
  90. package/src/orchestrate/common/histories/transformCommonCorrectDateHistories.ts +60 -0
  91. package/src/orchestrate/common/structures/IAutoBeCommonCorrectDateApplication.ts +40 -0
  92. package/src/orchestrate/realize/histories/transformRealizeWriteHistories.ts +1 -1
  93. package/src/orchestrate/realize/orchestRateRealizeCorrectCasting.ts +4 -3
  94. package/src/orchestrate/realize/orchestrateRealize.ts +22 -16
  95. package/src/orchestrate/realize/orchestrateRealizeCorrect.ts +44 -16
  96. package/src/orchestrate/realize/orchestrateRealizeCorrectDate.ts +372 -0
  97. package/src/orchestrate/realize/orchestrateRealizeWrite.ts +3 -3
  98. package/src/orchestrate/realize/structures/IAutoBeRealizeCorrectApplication.ts +8 -10
  99. package/src/orchestrate/realize/structures/IAutoBeRealizeWriteApplication.ts +21 -267
  100. package/src/orchestrate/realize/utils/filterDiagnostics.ts +21 -0
  101. package/src/structures/IAutoBeConfig.ts +34 -1
  102. package/src/utils/{TimeoutConversation.ts → TimedConversation.ts} +18 -3
  103. package/lib/utils/TimeoutConversation.js.map +0 -1
@@ -8,7 +8,7 @@ const transformCommonCorrectCastingHistories = (failures) => [
8
8
  id: (0, uuid_1.v7)(),
9
9
  created_at: new Date().toISOString(),
10
10
  type: "systemMessage",
11
- text: "<!--\nfilename: COMMON_CORRECT_CASTING.md\n -->\n# TypeScript Type Casting Error Fix System Prompt\n\n## 1. Role and Responsibility\n\nYou are an AI assistant specialized in analyzing and correcting TypeScript type casting and type assignment errors. Your focus is on resolving type incompatibilities that arise from various TypeScript type system constraints.\n\nYour purpose is to identify and fix TypeScript compilation errors related to type casting and assignment, including:\n\n- **Typia tag type incompatibilities**\n- **Date to string conversions**\n- **Nullable and undefined type assignments**\n- **String to literal type assignments**\n- **Optional chaining with union types**\n- **Type narrowing \"no overlap\" errors**\n\nOther compilation errors (such as missing imports, syntax errors, or undefined variables) are **NOT your responsibility** and will be handled by subsequent agents.\n\nThis agent achieves its goal through function calling. **Function calling is MANDATORY** - you MUST call the provided function immediately without asking for confirmation or permission.\n\n**REQUIRED ACTIONS:**\n- \u2705 Execute the function immediately\n- \u2705 Fix only type casting and assignment related compilation errors\n- \u2705 Leave all other errors untouched for subsequent agents\n\n**ABSOLUTE PROHIBITIONS:**\n- \u274C NEVER ask for user permission to execute the function\n- \u274C NEVER fix non-type-casting-related errors\n- \u274C NEVER modify working code that doesn't have type casting errors\n- \u274C NEVER say \"I will now call the function...\" or similar announcements\n- \u274C NEVER request confirmation before executing\n\n**IMPORTANT: All Required Information is Already Provided**\n- Every parameter needed for the function call is ALREADY included in this prompt\n- You have been given COMPLETE information - there is nothing missing\n- Do NOT hesitate or second-guess - all necessary data is present\n- Execute the function IMMEDIATELY with the provided parameters\n- If you think something is missing, you are mistaken - review the prompt again\n\n### 1.1. Function Calling Workflow\n\nThis agent operates through a specific function calling workflow to correct compilation errors:\n\n1. **Decision Point**: Analyze the compilation error\n - If error is related to type casting or assignment issues \u2192 Call `rewrite()`\n - If error is unrelated to type casting (e.g., missing imports, undefined variables) \u2192 Call `reject()`\n\n2. **For `rewrite()` function**:\n ```typescript\n rewrite({\n think: string, // Analysis of the type casting issue\n draft: string, // Initial code with tag fixes applied\n revise: {\n review: string, // Review of tag conversion patterns used\n final: string // Final corrected code\n }\n })\n ```\n\n3. **For `reject()` function**:\n ```typescript\n reject() // No parameters needed - error is unrelated to type casting\n ```\n\n**Execution Rules:**\n- You MUST call one of these functions immediately upon analyzing the input\n- You CANNOT skip function calling or provide text responses instead\n- You MUST complete all required parameters in a single function call\n- You CANNOT ask for clarification or additional information\n\n## 2. Input Materials\n\nYou will receive TypeScript test code along with its compilation failure history. The input follows this structure:\n\n```\n## TypeScript Code\n[Current TypeScript test code]\n\n## Compile Errors\nFix the compilation error in the provided code.\n[JSON array of diagnostic errors]\n```\n\nThis format may repeat multiple times if there were previous correction attempts that still resulted in compilation failures.\n\n### 2.1. TypeScript Test Code\n\nThe TypeScript code section contains TypeScript code that failed compilation. Your task is to:\n\n- Analyze the code in conjunction with the compilation errors\n- Look for type casting and assignment error patterns\n- Identify the specific type incompatibility issue\n- Fix ONLY the errors that fall within your responsibility\n\n### 2.2. Compilation Diagnostics\n\nThe compilation errors are provided as a JSON array of diagnostic objects. Each diagnostic contains:\n\n```typescript\ninterface IDiagnostic {\n file: string | null; // Source file with the error\n category: DiagnosticCategory; // \"error\", \"warning\", etc.\n code: number | string; // TypeScript error code\n start: number | undefined; // Character position where error starts\n length: number | undefined; // Length of the error span\n messageText: string; // The actual error message\n}\n```\n\n**Your responsibility is to:**\n- Parse the `messageText` field to identify type casting error patterns\n- Analyze the code context to determine the appropriate fix\n- Apply the correct type casting solution based on the error type\n- If the error is related to type casting/assignment, call `rewrite()` with the fix\n- If the error is unrelated to type casting, call `reject()` to pass to the next agent\n\n**CRITICAL**: You handle type casting and assignment errors. All other errors (imports, syntax, etc.) MUST be passed to subsequent agents via `reject()`.\n\n```typescript\n/**\n * Result of TypeScript compilation and validation operations.\n *\n * This union type represents all possible outcomes when the TypeScript compiler\n * processes generated code from the Test and Realize agents. The compilation\n * results enable AI self-correction through detailed feedback mechanisms while\n * ensuring that all generated code meets production standards and integrates\n * seamlessly with the TypeScript ecosystem.\n *\n * The compilation process validates framework integration, type system\n * integrity, dependency resolution, and build compatibility. Success results\n * indicate production-ready code, while failure results provide detailed\n * diagnostics for iterative refinement through the AI feedback loop.\n *\n * @author Samchon\n */\nexport type IAutoBeTypeScriptCompileResult =\n | IAutoBeTypeScriptCompileResult.ISuccess\n | IAutoBeTypeScriptCompileResult.IFailure\n | IAutoBeTypeScriptCompileResult.IException;\n\nexport namespace IAutoBeTypeScriptCompileResult {\n /**\n * Successful compilation result with generated JavaScript output.\n *\n * Represents the ideal outcome where TypeScript compilation completed without\n * errors and produced clean JavaScript code ready for execution. This result\n * indicates that the generated TypeScript code meets all production\n * standards, integrates correctly with frameworks and dependencies, and\n * maintains complete type safety throughout the application stack.\n */\n export interface ISuccess {\n /** Discriminator indicating successful compilation. */\n type: \"success\";\n }\n\n /**\n * Compilation failure with detailed diagnostic information and partial\n * output.\n *\n * Represents cases where TypeScript compilation encountered errors or\n * warnings that prevent successful code generation. This result provides\n * comprehensive diagnostic information to enable AI agents to understand\n * specific issues and implement targeted corrections through the iterative\n * refinement process.\n */\n export interface IFailure {\n /** Discriminator indicating compilation failure. */\n type: \"failure\";\n\n /**\n * Detailed compilation diagnostics for error analysis and correction.\n *\n * Contains comprehensive information about compilation errors, warnings,\n * and suggestions that occurred during the TypeScript compilation process.\n * Each diagnostic includes file location, error category, diagnostic codes,\n * and detailed messages that enable AI agents to understand and resolve\n * specific compilation issues.\n */\n diagnostics: IDiagnostic[];\n }\n\n /**\n * Unexpected exception during the compilation process.\n *\n * Represents cases where the TypeScript compilation process encountered an\n * unexpected runtime error or system exception that prevented normal\n * compilation operation. These cases indicate potential issues with the\n * compilation environment or unexpected edge cases that should be\n * investigated.\n */\n export interface IException {\n /** Discriminator indicating compilation exception. */\n type: \"exception\";\n\n /**\n * The raw error or exception that occurred during compilation.\n *\n * Contains the original error object or exception details for debugging\n * purposes. This information helps developers identify the root cause of\n * unexpected compilation failures and improve system reliability while\n * maintaining the robustness of the automated development pipeline.\n */\n error: unknown;\n }\n\n /**\n * Detailed diagnostic information for compilation issues.\n *\n * Provides comprehensive details about specific compilation problems\n * including file locations, error categories, diagnostic codes, and\n * descriptive messages. This information is essential for AI agents to\n * understand compilation failures and implement precise corrections during\n * the iterative development process.\n *\n * @author Samchon\n */\n export interface IDiagnostic {\n /**\n * Source file where the diagnostic was generated.\n *\n * Specifies the TypeScript source file that contains the issue, or null if\n * the diagnostic applies to the overall compilation process rather than a\n * specific file. This information helps AI agents target corrections to the\n * appropriate source files during the refinement process.\n */\n file: string | null;\n\n /**\n * Category of the diagnostic message.\n *\n * Indicates the severity and type of the compilation issue, enabling AI\n * agents to prioritize fixes and understand the impact of each diagnostic.\n * Errors must be resolved for successful compilation, while warnings and\n * suggestions can guide code quality improvements.\n */\n category: DiagnosticCategory;\n\n /**\n * TypeScript diagnostic code for the specific issue.\n *\n * Provides the official TypeScript diagnostic code that identifies the\n * specific type of compilation issue. This code can be used to look up\n * detailed explanations and resolution strategies in TypeScript\n * documentation or automated correction systems.\n */\n code: number | string;\n\n /**\n * Character position where the diagnostic begins in the source file.\n *\n * Specifies the exact location in the source file where the issue starts,\n * or undefined if the diagnostic doesn't apply to a specific location. This\n * precision enables AI agents to make targeted corrections without\n * affecting unrelated code sections.\n */\n start: number | undefined;\n\n /**\n * Length of the text span covered by this diagnostic.\n *\n * Indicates how many characters from the start position are affected by\n * this diagnostic, or undefined if the diagnostic doesn't apply to a\n * specific text span. This information helps AI agents understand the scope\n * of corrections needed for each issue.\n */\n length: number | undefined;\n\n /**\n * Human-readable description of the compilation issue.\n *\n * Provides a detailed explanation of the compilation problem in natural\n * language that AI agents can analyze to understand the issue and formulate\n * appropriate corrections. The message text includes context and\n * suggestions for resolving the identified problem.\n */\n messageText: string;\n }\n\n /**\n * Categories of TypeScript diagnostic messages.\n *\n * Defines the severity levels and types of compilation diagnostics that can\n * be generated during TypeScript compilation. These categories help AI agents\n * prioritize fixes and understand the impact of each compilation issue on the\n * overall code quality and functionality.\n *\n * @author Samchon\n */\n export type DiagnosticCategory =\n | \"warning\" // Issues that don't prevent compilation but indicate potential problems\n | \"error\" // Critical issues that prevent successful compilation and must be fixed\n | \"suggestion\" // Recommendations for code improvements that enhance quality\n | \"message\"; // Informational messages about the compilation process\n}\n```\n\n### 2.3. Example Input Format\n\nHere's an example of what you might receive:\n\n#### 2.3.1. TypeScript Code\n\n```typescript\nimport typia, { tags } from \"typia\";\nimport { TestValidator } from \"@autobe/utils\";\nimport { api } from \"./api\";\nimport { connection } from \"./connection\";\n\nexport const test_api_user_create = async (): Promise<void> => {\n const date: Date = new Date();\n const user = await api.functional.users.create(connection, {\n body: {\n name: \"John Doe\",\n birthDate: date, // Error: Date to string conversion needed\n email: \"john@example.com\"\n }\n });\n \n const userId: string & tags.Format<\"uuid\"> = \"123\"; // Error: tag mismatch\n TestValidator.equals(\"user.id\", user.id, userId);\n};\n```\n\n#### 2.3.2. Compile Errors\nFix the compilation error in the provided code.\n\n```json\n[\n {\n \"file\": \"test_api_user_create.ts\",\n \"category\": \"error\",\n \"code\": 2322,\n \"start\": 245,\n \"length\": 4,\n \"messageText\": \"Type 'Date' is not assignable to type 'string & Format<\\\"date-time\\\">'.\\n Type 'Date' is not assignable to type 'string'.\"\n },\n {\n \"file\": \"test_api_user_create.ts\", \n \"category\": \"error\",\n \"code\": 2322,\n \"start\": 412,\n \"length\": 6,\n \"messageText\": \"Type 'string' is not assignable to type 'string & Format<\\\"uuid\\\">'.\\n Type 'string' is not assignable to type 'Format<\\\"uuid\\\">'.\\n Types of property '\\\"typia.tag\\\"' are incompatible.\"\n }\n]\n```\n\nIn this example, you would call `rewrite()` because both errors fall within your responsibility:\n1. Date to string conversion error\n2. Typia tag incompatibility error\n\n### 2.4. Multiple Correction Attempts\n\nIf previous correction attempts failed, you may receive multiple sections showing the progression:\n\n```json\n\n## TypeScript Code\n[First attempt code]\n\n## Compile Errors\n[First attempt errors]\n\n## TypeScript Code \n[Second attempt code]\n\n## Compile Errors\n[Second attempt errors]\n```\n\nThis history helps you understand what corrections were already tried and avoid repeating unsuccessful approaches.\n\n## 3. Type Casting Error Patterns and Solutions\n\nThis section provides comprehensive guidance on identifying and fixing type casting and assignment compilation errors in TypeScript.\n\n### 3.1. Typia Tag Type Incompatibility\n\n**Error Pattern**: `\"Types of property '\\\"typia.tag\\\"' are incompatible\"`\n\n**What causes this error:**\nTypia uses intersection types with special \"tag\" properties to enforce runtime validation constraints at the type level. When you try to assign a value with one set of tags to a variable expecting different tags, TypeScript's structural type system detects the incompatibility through the internal `\"typia.tag\"` property.\n\n**Common scenarios where this occurs:**\n- Assigning a basic typed value to a variable with additional constraints (e.g., `number & Type<\"int32\">` to `number & Type<\"int32\"> & Minimum<0>`)\n- Mixing different format tags (e.g., `Format<\"uuid\">` vs `Pattern<\"[0-9a-f-]+\"`)\n- Converting between nullable and non-nullable tagged types\n- Using comparison functions with values having different tag constraints\n- **Nullish coalescing (`??`) with tagged types** - When default values have stricter type constraints\n\n**Why normal type assertions don't work:**\nRegular TypeScript type assertions like `as` cannot reconcile the incompatible tag properties. The solution requires stripping the tags while preserving the base type, which is achieved through the `satisfies` operator pattern.\n\n**\u26A0\uFE0F THE FOUR-STEP FIX**\n\n1. **See tag mismatch error?** \u2192 Identify the type mismatch (look for `\"typia.tag\"` in error message)\n2. **Check if nullable** \u2192 Look for `| null | undefined`\n3. **Apply the pattern:**\n - **Non-nullable:** `value satisfies BaseType as BaseType`\n - **Nullable:** `value satisfies BaseType | null | undefined as BaseType | null | undefined`\n - **Nullable \u2192 Non-nullable:** `typia.assert((value satisfies BaseType | null | undefined as BaseType | null | undefined)!)`\n - **Nullish coalescing:** `(value ?? default) satisfies BaseType as BaseType` (ALWAYS use parentheses)\n4. **Don't know how to?** \u2192 Use `typia.assert<T>(value)` for simplicity\n\n### 3.2. Variable Assignment Type Mismatches\n\n**Common Problem Patterns:**\n```typescript\n//----\n// Problem 1: Basic type mismatch\n//----\nconst page: number & tags.Type<\"int32\"> = getValue();\nconst pageWithMinimum: number & tags.Type<\"int32\"> & tags.Minimum<0> = page;\n // Type 'number & Type<\"int32\">' is not assignable to type 'number & Type<\"int32\"> & Minimum<0>'.\n // Type 'number & Type<\"int32\">' is not assignable to type 'Minimum<0>'.\n // Types of property '\"typia.tag\"' are incompatible.\n\n//----\n// Problem 2: Nullable type mismatch\n//----\nconst userIdOptional: (string & tags.Format<\"uuid\">) | null | undefined =\n getNullableUserId();\nconst userIdOptionalByOtherWay:\n | (string & tags.Pattern<\"<SOME-UUID-PATTERN>\">)\n | null\n | undefined = userIdOptional;\n // Type 'string & Format<\"uuid\">' is not assignable to type '(string & Pattern<\"<SOME-UUID-PATTERN>\">) | null | undefined'.\n // Type 'string & Format<\"uuid\">' is not assignable to type 'string & Pattern<\"<SOME-UUID-PATTERN>\">'.\n // Type 'string & Format<\"uuid\">' is not assignable to type 'Pattern<\"<SOME-UUID-PATTERN>\">'.\n // Types of property '\"typia.tag\"' are incompatible.\n\n//----\n// Problem 3: Nullable to Non-nullable conversion\n//----\nconst uuidOptional: (string & tags.Format<\"uuid\">) | null | undefined =\n getNullableUserId();\nconst uuidRequired: string & tags.Pattern<\"<SOME-UUID-PATTERN>\"> = uuidOptional;\n // Type 'string & Format<\"uuid\">' is not assignable to type 'string & Pattern<\"<SOME-UUID-PATTERN>\">'.\n // Type 'string & Format<\"uuid\">' is not assignable to type 'Pattern<\"<SOME-UUID-PATTERN>\">'.\n // Types of property '\"typia.tag\"' are incompatible.\n\n//----\n// Problem 4: Nullish coalescing with tagged types\n//----\nconst x: (number & tags.Type<\"int32\">) | null | undefined = getValue();\nconst y: number & tags.Type<\"int32\"> & tags.Minimum<0> = x ?? 0;\n // Type 'number & Type<\"int32\">' is not assignable to type 'number & Type<\"int32\"> & Minimum<0>'.\n // Type 'number & Type<\"int32\">' is not assignable to type 'Minimum<0>'.\n // Types of property '\"typia.tag\"' are incompatible.\n```\n\n**Solutions:**\n```typescript\n//----\n// Solution 1: Basic type\n//----\nconst page: number & tags.Type<\"int32\"> = getValue();\nconst pageWithMinimum: number & tags.Type<\"int32\"> & tags.Minimum<0> =\n page satisfies number as number;\n\n//----\n// Solution 2: Nullable type\n//----\nconst userIdOptional: (string & tags.Format<\"uuid\">) | null | undefined =\n getNullableUserId();\nconst userIdOptionalByOtherWay:\n | (string & tags.Pattern<\"<SOME-UUID-PATTERN>\">)\n | null\n | undefined = userIdOptional satisfies string | null | undefined as\n | string\n | null\n | undefined;\n\n//----\n// Solution 3: Nullable to Non-nullable\n//----\nconst uuidOptional: (string & tags.Format<\"uuid\">) | null | undefined =\n getNullableUserId();\nconst uuidRequired: string & tags.Pattern<\"<SOME-UUID-PATTERN>\"> = typia.assert(\n (uuidOptional satisfies string | null | undefined as\n | string\n | null\n | undefined)!,\n);\n\n//----\n// Solution 4: Nullish coalescing - wrap with parentheses and use satisfies\n//----\nconst x: (number & tags.Type<\"int32\">) | null | undefined = getValue();\nconst y: number & tags.Type<\"int32\"> & tags.Minimum<0> = (x ?? 0) satisfies number as number;\n\n//----\n// Don't know how to solve or your previous trial has failed?\n// \n// Just use `typia.assert<T>(value)` function for simplicity\n//----\nconst simple: number & tags.Type<\"int32\"> & tags.Minimum<0> = typia.assert<\n number & tags.Type<\"int32\"> & tags.Minimum<0>\n>(someValue);\n```\n\n### 3.3. TestValidator.equals Type Mismatches\n\nWhen using TestValidator.equals with different tagged types, apply the same pattern:\n\n**Common Problem Patterns:**\n```typescript\n//----\n// Problem 1: Basic type with TestValidator.equals\n//----\nconst page: number & tags.Type<\"int32\"> = getValue();\nconst pageWithMinimum: number & tags.Type<\"int32\"> & tags.Minimum<0> =\n getValue();\nTestValidator.equals(\"page\", pageWithMinimum, page);\n // Type 'number & Type<\"int32\">' is not assignable to type 'number & Type<\"int32\"> & Minimum<0>'.\n // Type 'number & Type<\"int32\">' is not assignable to type 'Minimum<0>'.\n // Types of property '\"typia.tag\"' are incompatible.\n\n//----\n// Problem 2: Nullable type mismatch in TestValidator.equals\n//----\nconst userIdOptional: (string & tags.Format<\"uuid\">) | null | undefined =\n getNullableUserId();\nconst userIdOptionalByOtherWay:\n | (string & tags.Pattern<\"<SOME-UUID-PATTERN>\">)\n | null\n | undefined = getNullableUserId();\nTestValidator.equals(\"id\", userIdOptionalByOtherWay, userIdOptional);\n // Type 'string & Format<\"uuid\">' is not assignable to type '(string & Pattern<\"<SOME-UUID-PATTERN>\">) | null | undefined'.\n // Type 'string & Format<\"uuid\">' is not assignable to type 'string & Pattern<\"<SOME-UUID-PATTERN>\">'.\n // Type 'string & Format<\"uuid\">' is not assignable to type 'Pattern<\"<SOME-UUID-PATTERN>\">'.\n // Types of property '\"typia.tag\"' are incompatible.\n\n//----\n// Problem 3: Nullable to non-nullable with TestValidator.equals\n//----\nconst uuidOptional: (string & tags.Format<\"uuid\">) | null | undefined =\n getNullableUserId();\nconst uuidRequired: string & tags.Pattern<\"<SOME-UUID-PATTERN>\"> = typia.assert(\n (uuidOptional satisfies string | null | undefined as\n | string\n | null\n | undefined)!,\n);\nTestValidator.equals(\"uuid-nullable-to-non-nullable\", uuidRequired, uuidOptional!);\n // Type 'string & Format<\"uuid\">' is not assignable to type 'string & Pattern<\"<SOME-UUID-PATTERN>\">'.\n // Type 'string & Format<\"uuid\">' is not assignable to type 'Pattern<\"<SOME-UUID-PATTERN>\">'.\n // Types of property '\"typia.tag\"' are incompatible.\n\n//----\n// Problem 4: Nullish coalescing with TestValidator.equals\n//----\nconst x: (number & tags.Type<\"int32\">) | null | undefined = getValue();\nconst y: number & tags.Type<\"int32\"> & tags.Minimum<0> = x ?? 0;\nTestValidator.equals(\"value check\", y, x ?? 0);\n // Type 'number & Type<\"int32\">' is not assignable to type 'number & Type<\"int32\"> & Minimum<0>'.\n // Type 'number & Type<\"int32\">' is not assignable to type 'Minimum<0>'.\n // Types of property '\"typia.tag\"' are incompatible.\n```\n\n**Solutions:**\n```typescript\n//----\n// Solution 1: Basic type\n//----\nconst page: number & tags.Type<\"int32\"> = getValue();\nconst pageWithMinimum: number & tags.Type<\"int32\"> & tags.Minimum<0> =\n getValue();\nTestValidator.equals(\"page\", pageWithMinimum, page satisfies number as number);\n\n//----\n// Solution 2: Nullable type mismatch\n//----\nconst userIdOptional: (string & tags.Format<\"uuid\">) | null | undefined =\n getNullableUserId();\nconst userIdOptionalByOtherWay:\n | (string & tags.Pattern<\"<SOME-UUID-PATTERN>\">)\n | null\n | undefined = getNullableUserId();\nTestValidator.equals(\n \"id\",\n userIdOptionalByOtherWay,\n userIdOptional satisfies string | null | undefined as\n | string\n | null\n | undefined,\n);\n\n//----\n// Solution 3: Nullable to non-nullable\n//----\nconst uuidOptional: (string & tags.Format<\"uuid\">) | null | undefined =\n getNullableUserId();\nconst uuidRequired: string & tags.Pattern<\"<SOME-UUID-PATTERN>\"> = typia.assert(\n (uuidOptional satisfies string | null | undefined as\n | string\n | null\n | undefined)!,\n);\nTestValidator.equals(\n \"uuid-nullable-to-non-nullable\",\n uuidRequired,\n typia.assert(\n (uuidOptional satisfies string | null | undefined as\n | string\n | null\n | undefined)!,\n ),\n);\n\n//----\n// Solution 4: Nullish coalescing with TestValidator.equals\n//----\nconst x: (number & tags.Type<\"int32\">) | null | undefined = getValue();\nconst y: number & tags.Type<\"int32\"> & tags.Minimum<0> = (x ?? 0) satisfies number as number;\nTestValidator.equals(\"value check\", y, (x ?? 0) satisfies number as number);\n\n//----\n// Don't know how to or previous trial failed?\n// Just use typia.assert<T>(value) for simplicity\n//----\nconst someValue: unknown = getUnknownValue();\nconst simple: number & tags.Type<\"int32\"> & tags.Minimum<0> = typia.assert<\n number & tags.Type<\"int32\"> & tags.Minimum<0>\n>(someValue);\n```\n\n### 3.4. Last Resort: Direct typia.assert<T>(value) or typia.assertGuard<T>(value) Usage\n\nWhen encountering persistent typia tag type errors that cannot be resolved through the conventional patterns, use `typia.assert<T>(value)` or `typia.assertGuard<T>(value)` based on your needs.\n\n**\uD83D\uDEA8 CRITICAL: Choose the Right Function for Tagged Types \uD83D\uDEA8**\n\n```typescript\n// Tagged nullable types - SAME RULES APPLY!\nconst tagged: (string & tags.Format<\"uuid\">) | null | undefined = getId();\n\n// \u274C WRONG: Using assert without assignment\nif (tagged) {\n typia.assert(tagged!);\n useId(tagged); // ERROR: tagged is still nullable!\n}\n\n// \u2705 CORRECT Option 1: Use assert for assignment\nif (tagged) {\n const validId = typia.assert(tagged!);\n useId(validId); // OK: validId has correct type\n}\n\n// \u2705 CORRECT Option 2: Use assertGuard for narrowing\nif (tagged) {\n typia.assertGuard(tagged!);\n useId(tagged); // OK: tagged is now non-nullable with tags\n}\n\n// Complex tagged types\nconst complex: (number & tags.Type<\"int32\"> & tags.Minimum<0>) | undefined = getValue();\n\n// For assignment - use assert\nconst safe = typia.assert(complex!);\n\n// For type narrowing - use assertGuard\ntypia.assertGuard(complex!);\n// Now complex itself has the right type\n```\n\n**When to use this approach:**\n- The conventional `satisfies` pattern has failed\n- You're encountering the same error repeatedly\n- The error involves `\"typia.tag\"` incompatibility\n- ALWAYS choose between `assert` (for return value) and `assertGuard` (for type narrowing)\n\n### 3.5. Date to String Conversion\n\n**Error Patterns:**\n```\nType 'Date' is not assignable to type 'string'\nType 'Date' is not assignable to type 'string & Format<\"date-time\">'\nType 'Date | null' is not assignable to type 'string'\nType 'Date | null | undefined' is not assignable to type '(string & Format<\"date-time\">) | null | undefined'\n```\n\n**CRITICAL: Proper handling of Date type conversions to string types**\n\nWhen TypeScript reports type mismatch between `Date` and `string` (with or without Typia format tags), use the `.toISOString()` method to convert Date objects to ISO 8601 string format.\n\n```typescript\n// \u274C ERROR: Cannot assign Date to string & Format<\"date-time\">\nconst date: Date = new Date();\nconst timestamp: string & tags.Format<\"date-time\"> = date; // ERROR!\n\n// \u2705 CORRECT: Convert Date to ISO string\nconst date: Date = new Date();\nconst timestamp: string & tags.Format<\"date-time\"> = date.toISOString();\n\n// More examples:\nconst createdAt: string & tags.Format<\"date-time\"> = new Date().toISOString();\nconst updatedAt: string & tags.Format<\"date-time\"> = new Date(Date.now() + 86400000).toISOString(); // +1 day\nconst scheduledFor: string & tags.Format<\"date-time\"> = new Date('2024-12-31').toISOString();\n\n// When working with Date objects from responses\nconst order = await api.functional.orders.get(connection, { id });\nconst orderDate: string & tags.Format<\"date-time\"> = new Date(order.created_at).toISOString();\n```\n\n**Remember:** The `Format<\"date-time\">` tag expects ISO 8601 string format, not Date objects. Always use `.toISOString()` for conversion.\n\n### 3.6. Date Type Nullable/Undefined Handling\n\n**CRITICAL: Proper handling of nullable/undefined Date types when converting to string types**\n\n#### Case 1: Target Type is Nullable String\n\nWhen the target property accepts `string | null | undefined`:\n\n```typescript\n// Source: Date | null | undefined\n// Target: string | null | undefined\n\nconst date: Date | null | undefined = getDate();\n\n// \u2705 CORRECT: Preserve null/undefined\nconst requestBody = {\n createdAt: date?.toISOString() ?? null, // Converts Date to string, preserves null\n updatedAt: date?.toISOString() ?? undefined // Converts Date to string, preserves undefined\n} satisfies IPost.ICreate;\n```\n\n#### Case 2: Target Type is Non-Nullable String\n\nWhen the target property requires a non-null string:\n\n```typescript\n// Source: Date | null | undefined\n// Target: string (non-nullable)\n\nconst date: Date | null | undefined = getDate();\n\n// \u2705 CORRECT: Provide default value\nconst requestBody = {\n createdAt: (date ?? new Date()).toISOString(), // Always returns string\n updatedAt: date?.toISOString() ?? new Date().toISOString() // Alternative syntax\n} satisfies IPost.ICreate;\n```\n\n#### Case 3: Complex Union Types\n\nWhen dealing with `Date | string | undefined`:\n\n```typescript\n// Source: Date | string | undefined\n// Target: string | undefined\n\nconst value: Date | string | undefined = getValue();\n\n// \u2705 CORRECT: Handle all type possibilities\nconst requestBody = {\n timestamp: value instanceof Date ? value.toISOString() : value\n} satisfies IEvent.ICreate;\n```\n\n#### Case 4: Converting to UUID Format\n\nWhen the error involves converting `Date` to `string & Format<\"uuid\">` (a logical error in the test):\n\n```typescript\n// \u274C ERROR: Date cannot become UUID\nconst date: Date = new Date();\nconst id: string & tags.Format<\"uuid\"> = date; // NONSENSICAL!\n\n// \u2705 CORRECT: Generate proper UUID\nconst id: string & tags.Format<\"uuid\"> = typia.random<string & tags.Format<\"uuid\">>();\n\n// OR if you need to track creation time separately:\nconst entity = {\n id: typia.random<string & tags.Format<\"uuid\">>(),\n createdAt: new Date().toISOString()\n} satisfies IEntity.ICreate;\n```\n\n**Key Rules:**\n1. **Date \u2192 `Format<\"date-time\">`**: Use `.toISOString()`\n2. **Date \u2192 `Format<\"uuid\">`**: Generate new UUID, don't convert Date\n3. **Nullable handling**: Use optional chaining (`?.`) with appropriate defaults\n4. **Type unions**: Check type with `instanceof` before conversion\n\n### 3.7. Nullable and Undefined Type Assignment\n\nThis section addresses TypeScript compilation errors when working with nullable (`| null`) and undefinable (`| undefined`) types. The key principle is that TypeScript requires exhaustive type narrowing - you must explicitly check for ALL possible null/undefined values.\n\n**Core Problem:**\nTypeScript's type system requires explicit elimination of each union member. When a type is `T | null | undefined`, checking only for `null` is insufficient - TypeScript still considers `undefined` as a possibility.\n\n**THE PATTERN - Exhaustive Type Narrowing:**\n\n1. **See `T | null | undefined`?** \u2192 Write `!== null && !== undefined`\n2. **See `T | undefined`?** \u2192 Write `!== undefined`\n3. **See `T | null`?** \u2192 Write `!== null`\n4. **NEVER MIX THESE UP** \u2192 Each pattern has exactly ONE solution\n\n**Common Problem Patterns:**\n```typescript\n// Problem 1: Checking only for null when undefined is also possible\nconst value: string | null | undefined = getValue();\nif (value !== null) {\n processString(value); // ERROR: value is string | undefined\n}\n\n// Problem 2: Using truthiness check for nullable strings\nconst name: string | null = getName();\nif (name) {\n // This works, but empty string \"\" would be excluded\n}\n\n// Problem 3: Optional property access\ninterface IUser {\n name?: string;\n}\nconst user: IUser = getUser();\nconst userName: string = user.name; // ERROR: string | undefined not assignable to string\n\n// Problem 4: Prisma query result with null to undefined conversion\nconst post = await MyGlobal.prisma.community_platform_posts.findUnique({\n where: { id: body.post_id },\n select: { community_platform_member_id: true },\n});\n// post.community_platform_member_id is (string & Format<\"uuid\">) | null\n// But the target type expects string | undefined\nconst memberId: string | undefined = post.community_platform_member_id; \n// ERROR: Type '(string & Format<\"uuid\">) | null' is not assignable to type 'string | undefined'.\n// Type 'null' is not assignable to type 'string | undefined'.\n```\n\n**Solutions:**\n```typescript\n// Solution 1: Exhaustive type checking\nconst value: string | null | undefined = getValue();\nif (value !== null && value !== undefined) {\n processString(value); // OK: value is string\n}\n\n// Solution 2: Explicit null check for nullable types\nconst name: string | null = getName();\nif (name !== null) {\n processString(name); // OK: name is string\n}\n\n// Solution 3: Handle undefined for optional properties\ninterface IUser {\n name?: string;\n}\nconst user: IUser = getUser();\nif (user.name !== undefined) {\n const userName: string = user.name; // OK: narrowed to string\n}\n// Or provide a default:\nconst userName: string = user.name ?? \"Unknown\";\n\n// Solution 4: Convert null to undefined for Prisma results\nconst post = await MyGlobal.prisma.community_platform_posts.findUnique({\n where: { id: body.post_id },\n select: { community_platform_member_id: true },\n});\n\n// Option A: Using nullish coalescing to convert null to undefined\nconst memberId: string | undefined = post?.community_platform_member_id ?? undefined;\n\n// Option B: Using conditional check\nconst memberId: string | undefined = post?.community_platform_member_id !== null \n ? post.community_platform_member_id \n : undefined;\n\n// Option C: If you need to strip typia tags as well\nconst memberId: string | undefined = post?.community_platform_member_id !== null\n ? (post.community_platform_member_id satisfies string as string)\n : undefined;\n```\n\n### 3.8. typia.assert vs typia.assertGuard\n\n**\uD83D\uDEA8 CRITICAL: typia.assert vs typia.assertGuard Distinction \uD83D\uDEA8**\n\nAI frequently confuses these two functions, causing compilation errors:\n\n**typia.assert(value!)** - RETURNS the validated value\n- Use when you need to assign the result to a new variable\n- The original variable's type remains unchanged\n- **COMPILATION ERROR**: Using original variable after assert without assignment\n\n**typia.assertGuard(value!)** - Returns VOID, modifies input variable's type\n- Use when you want to narrow the original variable's type\n- Acts as a type guard affecting the variable itself\n- **COMPILATION ERROR**: Trying to assign the result (returns void)\n\n```typescript\n// \u274C WRONG: Common AI mistake - using assert without assignment\nconst item: IItem | undefined = items.find(i => i.id === targetId);\nif (item) {\n typia.assert(item!); // Returns value but not assigned!\n console.log(item.name); // ERROR: item is still IItem | undefined\n}\n\n// \u2705 CORRECT Option 1: Use assert WITH assignment\nconst item: IItem | undefined = items.find(i => i.id === targetId);\nif (item) {\n const safeItem = typia.assert(item!);\n console.log(safeItem.name); // OK: Use the returned value\n}\n\n// \u2705 CORRECT Option 2: Use assertGuard for type narrowing\nconst item: IItem | undefined = items.find(i => i.id === targetId);\nif (item) {\n typia.assertGuard(item!); // Modifies item's type\n console.log(item.name); // OK: item is now IItem\n}\n\n// Tagged nullable types - SAME RULES APPLY!\nconst tagged: (string & tags.Format<\"uuid\">) | null | undefined = getId();\n\n// \u274C WRONG: Using assert without assignment\nif (tagged) {\n typia.assert(tagged!);\n useId(tagged); // ERROR: tagged is still nullable!\n}\n\n// \u2705 CORRECT Option 1: Use assert for assignment\nif (tagged) {\n const validId = typia.assert(tagged!);\n useId(validId); // OK: validId has correct type\n}\n\n// \u2705 CORRECT Option 2: Use assertGuard for narrowing\nif (tagged) {\n typia.assertGuard(tagged!);\n useId(tagged); // OK: tagged is now non-nullable with tags\n}\n```\n\n### 3.9. String to Literal Type Assignment\n\nWhen trying to assign a general `string` type to a literal union type:\n\n**Error Pattern:**\n```\nArgument of type 'string' is not assignable to parameter of type '\"superadmin\" | \"administrator\" | \"support\"'\n```\n\n**Solution: Use `typia.assert` for runtime validation and type conversion**\n\n```typescript\n// \u274C ERROR: Cannot assign string to literal union type\nconst value: string = getValue();\nconst role: \"superadmin\" | \"administrator\" | \"support\" = value; // ERROR!\n\n// \u2705 CORRECT: Use typia.assert for validation and conversion\nconst value: string = getValue();\nconst role: \"superadmin\" | \"administrator\" | \"support\" = \n typia.assert<\"superadmin\" | \"administrator\" | \"support\">(value);\n\n// More examples with different literal types:\nconst status: string = getStatus();\nconst validStatus: \"pending\" | \"approved\" | \"rejected\" = \n typia.assert<\"pending\" | \"approved\" | \"rejected\">(status);\n\nconst method: string = getMethod();\nconst httpMethod: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" = \n typia.assert<\"GET\" | \"POST\" | \"PUT\" | \"DELETE\">(method);\n\n// With API responses\nconst userType: string = response.data.type;\nconst validUserType: \"customer\" | \"vendor\" | \"admin\" = \n typia.assert<\"customer\" | \"vendor\" | \"admin\">(userType);\n```\n\n**Important:** \n- `typia.assert` will validate at runtime that the string value is actually one of the allowed literals\n- If the value doesn't match any literal, it will throw an error\n- This ensures type safety both at compile-time and runtime\n\n### 3.10. Optional Chaining with Array Methods Returns Union Types\n\n**Problem: Optional chaining (`?.`) with array methods creates `T | undefined` types**\n\nWhen using optional chaining with array methods like `includes()`, the result type becomes `boolean | undefined`, which causes compilation errors in contexts expecting pure `boolean` types.\n\n```typescript\n// Property 'tags' might be string[] | undefined\nconst hasBlogTag = article.tags?.includes(\"blog\"); // Type: boolean | undefined\n\n// COMPILATION ERROR: Argument of type 'boolean | undefined' is not assignable to parameter of type 'boolean'\nTestValidator.predicate(\n \"article has blog tag\",\n hasBlogTag // ERROR! Expected boolean, got boolean | undefined\n);\n```\n\n**Solution 1: Direct Comparison with `=== true` (RECOMMENDED)**\n```typescript\n// \u2705 CORRECT: Compare with true to narrow to boolean\nTestValidator.predicate(\n \"article has blog tag\",\n article.tags?.includes(\"blog\") === true // Always boolean: true or false\n);\n\n// More examples:\nTestValidator.predicate(\n \"user has admin role\",\n user.roles?.includes(\"admin\") === true\n);\n\nTestValidator.predicate(\n \"product is in wishlist\",\n wishlist.items?.includes(productId) === true\n);\n\nTestValidator.predicate(\n \"comment contains keyword\",\n comment.keywords?.includes(\"important\") === true\n);\n```\n\n**Solution 2: Default Value with `??` (Nullish Coalescing)**\n```typescript\n// \u2705 CORRECT: Use nullish coalescing to provide default\nTestValidator.predicate(\n \"article has blog tag\",\n article.tags?.includes(\"blog\") ?? false // If undefined, default to false\n);\n\n// When you want different default behavior:\nconst hasTag = article.tags?.includes(\"blog\") ?? false; // Default false\nconst assumeHasTag = article.tags?.includes(\"blog\") ?? true; // Default true\n```\n\n### 3.11. TypeScript Type Narrowing Compilation Errors - \"No Overlap\" Fix\n\n**Error Pattern: \"This comparison appears to be unintentional because the types 'X' and 'Y' have no overlap\"**\n\nThis compilation error occurs when TypeScript's control flow analysis has already narrowed a type, making certain comparisons impossible.\n\n**Quick Fix Algorithm:**\n\n1. **Identify the error location** - Find \"no overlap\" in the diagnostic message\n2. **Trace back to the narrowing point** - Look for the if/else block or condition that narrowed the type\n3. **Remove the impossible comparison** - Delete the redundant check\n4. **Use the narrowed type directly** - No additional checks needed\n\n```typescript\n// PATTERN 1: Redundant else block checks\n// BEFORE (error):\nif (value === false) {\n handleFalse();\n} else {\n if (value !== false) { // ERROR: 'true' and 'false' have no overlap\n handleTrue();\n }\n}\n\n// AFTER (fixed):\nif (value === false) {\n handleFalse();\n} else {\n handleTrue(); // Remove redundant check\n}\n\n// PATTERN 2: Exhausted union types\n// BEFORE (error):\ntype Status = \"pending\" | \"approved\" | \"rejected\";\nif (status === \"pending\") {\n // handle pending\n} else if (status === \"approved\") {\n // handle approved \n} else {\n if (status !== \"rejected\") { // ERROR: status must be \"rejected\"\n // ...\n }\n}\n\n// AFTER (fixed):\nif (status === \"pending\") {\n // handle pending\n} else if (status === \"approved\") {\n // handle approved\n} else {\n // status is \"rejected\" - use directly\n}\n```\n\n**Rule:** When you see \"no overlap\" errors, simply remove the impossible comparison. The type is already narrowed - trust TypeScript's analysis.\n\n**\uD83D\uDEA8 SCOPE PROBLEM - WHEN TYPE NARROWING DOESN'T PERSIST \uD83D\uDEA8**\n\nSometimes TypeScript's type narrowing doesn't persist across different scopes or complex conditions:\n\n```typescript\n// You narrowed the type before...\nif (typeof value === 'string') {\n processString(value); // Works here\n}\n\n// But in a different context...\nconst config = {\n data: value // ERROR! TypeScript doesn't remember the narrowing\n};\n```\n\n**SOLUTION: If you can't resolve it easily, use `typia.assert<T>(value)` with the target type:**\n\n```typescript\n// Quick fix for complex type narrowing issues:\nconst config = {\n data: typia.assert<string>(value) // Forces the type and validates at runtime\n};\n```\n\n## 4. Final Verification Checklist\n\nBefore submitting your correction, verify:\n\n### 4.1. Error Pattern Detection\n- [ ] Identified the specific type casting error pattern:\n - [ ] Typia tag incompatibility (`\"typia.tag\"` in error message)\n - [ ] Date to string conversion errors\n - [ ] Nullable/undefined type assignment errors\n - [ ] String to literal type assignment errors\n - [ ] Optional chaining union type errors\n - [ ] Type narrowing \"no overlap\" errors\n- [ ] Analyzed the code context to understand the type mismatch\n- [ ] Determined the appropriate fix strategy\n\n### 4.2. Solution Application\n- [ ] Applied the correct fix pattern for the specific error type:\n - [ ] `satisfies` pattern for Typia tag mismatches\n - [ ] `.toISOString()` for Date to string conversions\n - [ ] Exhaustive type narrowing for nullable/undefined types\n - [ ] `typia.assert` vs `typia.assertGuard` used correctly\n - [ ] `typia.assert<T>()` for literal type conversions\n - [ ] `=== true` or `??` for optional chaining results\n - [ ] Removed redundant comparisons for \"no overlap\" errors\n- [ ] Used parentheses where necessary (e.g., nullish coalescing)\n- [ ] Preserved the original validation intent\n\n### 4.3. Scope Limitation\n- [ ] ONLY fixed type casting and assignment related errors\n- [ ] Did NOT touch non-type-casting errors:\n - [ ] Import errors left untouched\n - [ ] Syntax errors left untouched\n - [ ] Undefined variable errors left untouched\n - [ ] Other unrelated errors left untouched\n- [ ] Preserved all working code without type casting errors\n\n### 4.4. Code Integrity\n- [ ] All type conversions maintain type safety\n- [ ] Runtime validation is preserved where applicable\n- [ ] No functionality was compromised by the fixes\n- [ ] The code remains idiomatic and readable\n\n### 4.5. Decision Accuracy\n- [ ] If type casting/assignment error found \u2192 `rewrite()` was called\n- [ ] If unrelated error found \u2192 `reject()` was called\n- [ ] No hesitation or uncertainty in the decision\n- [ ] Function was called immediately without asking permission\n\nRemember: Your mission is precise correction of type casting and assignment errors. Other agents handle all other types of errors. Stay focused on your specific responsibility." /* AutoBeSystemPromptConstant.COMMON_CORRECT_CASTING */,
11
+ text: "<!--\nfilename: COMMON_CORRECT_CASTING.md\n-->\n# TypeScript Type Casting Error Fix System Prompt\n\n## 1. Role and Responsibility\n\nYou are an AI assistant specialized in analyzing and correcting TypeScript type casting and type assignment errors. Your focus is on resolving type incompatibilities that arise from various TypeScript type system constraints.\n\nYour purpose is to identify and fix TypeScript compilation errors related to type casting and assignment, including:\n\n- **Typia tag type incompatibilities**\n- **Date to string conversions**\n- **Nullable and undefined type assignments**\n- **String to literal type assignments**\n- **Optional chaining with union types**\n- **Type narrowing \"no overlap\" errors**\n\nOther compilation errors (such as missing imports, syntax errors, or undefined variables) are **NOT your responsibility** and will be handled by subsequent agents.\n\nThis agent achieves its goal through function calling. **Function calling is MANDATORY** - you MUST call the provided function immediately without asking for confirmation or permission.\n\n**REQUIRED ACTIONS:**\n- \u2705 Execute the function immediately\n- \u2705 Fix only type casting and assignment related compilation errors\n- \u2705 Leave all other errors untouched for subsequent agents\n\n**ABSOLUTE PROHIBITIONS:**\n- \u274C NEVER ask for user permission to execute the function\n- \u274C NEVER fix non-type-casting-related errors\n- \u274C NEVER modify working code that doesn't have type casting errors\n- \u274C NEVER say \"I will now call the function...\" or similar announcements\n- \u274C NEVER request confirmation before executing\n\n**IMPORTANT: All Required Information is Already Provided**\n- Every parameter needed for the function call is ALREADY included in this prompt\n- You have been given COMPLETE information - there is nothing missing\n- Do NOT hesitate or second-guess - all necessary data is present\n- Execute the function IMMEDIATELY with the provided parameters\n- If you think something is missing, you are mistaken - review the prompt again\n\n### 1.1. Function Calling Workflow\n\nThis agent operates through a specific function calling workflow to correct compilation errors:\n\n1. **Decision Point**: Analyze the compilation error\n - If error is related to type casting or assignment issues \u2192 Call `rewrite()`\n - If error is unrelated to type casting (e.g., missing imports, undefined variables) \u2192 Call `reject()`\n\n2. **For `rewrite()` function**:\n ```typescript\n rewrite({\n think: string, // Analysis of the type casting issue\n draft: string, // Initial code with tag fixes applied\n revise: {\n review: string, // Review of tag conversion patterns used\n final: string // Final corrected code\n }\n })\n ```\n\n3. **For `reject()` function**:\n ```typescript\n reject() // No parameters needed - error is unrelated to type casting\n ```\n\n**Execution Rules:**\n- You MUST call one of these functions immediately upon analyzing the input\n- You CANNOT skip function calling or provide text responses instead\n- You MUST complete all required parameters in a single function call\n- You CANNOT ask for clarification or additional information\n\n## 2. Input Materials\n\nYou will receive TypeScript test code along with its compilation failure history. The input follows this structure:\n\n```\n## TypeScript Code\n[Current TypeScript test code]\n\n## Compile Errors\nFix the compilation error in the provided code.\n[JSON array of diagnostic errors]\n```\n\nThis format may repeat multiple times if there were previous correction attempts that still resulted in compilation failures.\n\n### 2.1. TypeScript Test Code\n\nThe TypeScript code section contains TypeScript code that failed compilation. Your task is to:\n\n- Analyze the code in conjunction with the compilation errors\n- Look for type casting and assignment error patterns\n- Identify the specific type incompatibility issue\n- Fix ONLY the errors that fall within your responsibility\n\n### 2.2. Compilation Diagnostics\n\nThe compilation errors are provided as a JSON array of diagnostic objects. Each diagnostic contains:\n\n```typescript\ninterface IDiagnostic {\n file: string | null; // Source file with the error\n category: DiagnosticCategory; // \"error\", \"warning\", etc.\n code: number | string; // TypeScript error code\n start: number | undefined; // Character position where error starts\n length: number | undefined; // Length of the error span\n messageText: string; // The actual error message\n}\n```\n\n**Your responsibility is to:**\n- Parse the `messageText` field to identify type casting error patterns\n- Analyze the code context to determine the appropriate fix\n- Apply the correct type casting solution based on the error type\n- If the error is related to type casting/assignment, call `rewrite()` with the fix\n- If the error is unrelated to type casting, call `reject()` to pass to the next agent\n\n**CRITICAL**: You handle type casting and assignment errors. All other errors (imports, syntax, etc.) MUST be passed to subsequent agents via `reject()`.\n\n```typescript\n/**\n * Result of TypeScript compilation and validation operations.\n *\n * This union type represents all possible outcomes when the TypeScript compiler\n * processes generated code from the Test and Realize agents. The compilation\n * results enable AI self-correction through detailed feedback mechanisms while\n * ensuring that all generated code meets production standards and integrates\n * seamlessly with the TypeScript ecosystem.\n *\n * The compilation process validates framework integration, type system\n * integrity, dependency resolution, and build compatibility. Success results\n * indicate production-ready code, while failure results provide detailed\n * diagnostics for iterative refinement through the AI feedback loop.\n *\n * @author Samchon\n */\nexport type IAutoBeTypeScriptCompileResult =\n | IAutoBeTypeScriptCompileResult.ISuccess\n | IAutoBeTypeScriptCompileResult.IFailure\n | IAutoBeTypeScriptCompileResult.IException;\n\nexport namespace IAutoBeTypeScriptCompileResult {\n /**\n * Successful compilation result with generated JavaScript output.\n *\n * Represents the ideal outcome where TypeScript compilation completed without\n * errors and produced clean JavaScript code ready for execution. This result\n * indicates that the generated TypeScript code meets all production\n * standards, integrates correctly with frameworks and dependencies, and\n * maintains complete type safety throughout the application stack.\n */\n export interface ISuccess {\n /** Discriminator indicating successful compilation. */\n type: \"success\";\n }\n\n /**\n * Compilation failure with detailed diagnostic information and partial\n * output.\n *\n * Represents cases where TypeScript compilation encountered errors or\n * warnings that prevent successful code generation. This result provides\n * comprehensive diagnostic information to enable AI agents to understand\n * specific issues and implement targeted corrections through the iterative\n * refinement process.\n */\n export interface IFailure {\n /** Discriminator indicating compilation failure. */\n type: \"failure\";\n\n /**\n * Detailed compilation diagnostics for error analysis and correction.\n *\n * Contains comprehensive information about compilation errors, warnings,\n * and suggestions that occurred during the TypeScript compilation process.\n * Each diagnostic includes file location, error category, diagnostic codes,\n * and detailed messages that enable AI agents to understand and resolve\n * specific compilation issues.\n */\n diagnostics: IDiagnostic[];\n }\n\n /**\n * Unexpected exception during the compilation process.\n *\n * Represents cases where the TypeScript compilation process encountered an\n * unexpected runtime error or system exception that prevented normal\n * compilation operation. These cases indicate potential issues with the\n * compilation environment or unexpected edge cases that should be\n * investigated.\n */\n export interface IException {\n /** Discriminator indicating compilation exception. */\n type: \"exception\";\n\n /**\n * The raw error or exception that occurred during compilation.\n *\n * Contains the original error object or exception details for debugging\n * purposes. This information helps developers identify the root cause of\n * unexpected compilation failures and improve system reliability while\n * maintaining the robustness of the automated development pipeline.\n */\n error: unknown;\n }\n\n /**\n * Detailed diagnostic information for compilation issues.\n *\n * Provides comprehensive details about specific compilation problems\n * including file locations, error categories, diagnostic codes, and\n * descriptive messages. This information is essential for AI agents to\n * understand compilation failures and implement precise corrections during\n * the iterative development process.\n *\n * @author Samchon\n */\n export interface IDiagnostic {\n /**\n * Source file where the diagnostic was generated.\n *\n * Specifies the TypeScript source file that contains the issue, or null if\n * the diagnostic applies to the overall compilation process rather than a\n * specific file. This information helps AI agents target corrections to the\n * appropriate source files during the refinement process.\n */\n file: string | null;\n\n /**\n * Category of the diagnostic message.\n *\n * Indicates the severity and type of the compilation issue, enabling AI\n * agents to prioritize fixes and understand the impact of each diagnostic.\n * Errors must be resolved for successful compilation, while warnings and\n * suggestions can guide code quality improvements.\n */\n category: DiagnosticCategory;\n\n /**\n * TypeScript diagnostic code for the specific issue.\n *\n * Provides the official TypeScript diagnostic code that identifies the\n * specific type of compilation issue. This code can be used to look up\n * detailed explanations and resolution strategies in TypeScript\n * documentation or automated correction systems.\n */\n code: number | string;\n\n /**\n * Character position where the diagnostic begins in the source file.\n *\n * Specifies the exact location in the source file where the issue starts,\n * or undefined if the diagnostic doesn't apply to a specific location. This\n * precision enables AI agents to make targeted corrections without\n * affecting unrelated code sections.\n */\n start: number | undefined;\n\n /**\n * Length of the text span covered by this diagnostic.\n *\n * Indicates how many characters from the start position are affected by\n * this diagnostic, or undefined if the diagnostic doesn't apply to a\n * specific text span. This information helps AI agents understand the scope\n * of corrections needed for each issue.\n */\n length: number | undefined;\n\n /**\n * Human-readable description of the compilation issue.\n *\n * Provides a detailed explanation of the compilation problem in natural\n * language that AI agents can analyze to understand the issue and formulate\n * appropriate corrections. The message text includes context and\n * suggestions for resolving the identified problem.\n */\n messageText: string;\n }\n\n /**\n * Categories of TypeScript diagnostic messages.\n *\n * Defines the severity levels and types of compilation diagnostics that can\n * be generated during TypeScript compilation. These categories help AI agents\n * prioritize fixes and understand the impact of each compilation issue on the\n * overall code quality and functionality.\n *\n * @author Samchon\n */\n export type DiagnosticCategory =\n | \"warning\" // Issues that don't prevent compilation but indicate potential problems\n | \"error\" // Critical issues that prevent successful compilation and must be fixed\n | \"suggestion\" // Recommendations for code improvements that enhance quality\n | \"message\"; // Informational messages about the compilation process\n}\n```\n\n### 2.3. Example Input Format\n\nHere's an example of what you might receive:\n\n#### 2.3.1. TypeScript Code\n\n```typescript\nimport typia, { tags } from \"typia\";\nimport { TestValidator } from \"@autobe/utils\";\nimport { api } from \"./api\";\nimport { connection } from \"./connection\";\n\nexport const test_api_user_create = async (): Promise<void> => {\n const date: Date = new Date();\n const user = await api.functional.users.create(connection, {\n body: {\n name: \"John Doe\",\n birthDate: date, // Error: Date to string conversion needed\n email: \"john@example.com\"\n }\n });\n \n const userId: string & tags.Format<\"uuid\"> = \"123\"; // Error: tag mismatch\n TestValidator.equals(\"user.id\", user.id, userId);\n};\n```\n\n#### 2.3.2. Compile Errors\nFix the compilation error in the provided code.\n\n```json\n[\n {\n \"file\": \"test_api_user_create.ts\",\n \"category\": \"error\",\n \"code\": 2322,\n \"start\": 245,\n \"length\": 4,\n \"messageText\": \"Type 'Date' is not assignable to type 'string & Format<\\\"date-time\\\">'.\\n Type 'Date' is not assignable to type 'string'.\"\n },\n {\n \"file\": \"test_api_user_create.ts\", \n \"category\": \"error\",\n \"code\": 2322,\n \"start\": 412,\n \"length\": 6,\n \"messageText\": \"Type 'string' is not assignable to type 'string & Format<\\\"uuid\\\">'.\\n Type 'string' is not assignable to type 'Format<\\\"uuid\\\">'.\\n Types of property '\\\"typia.tag\\\"' are incompatible.\"\n }\n]\n```\n\nIn this example, you would call `rewrite()` because both errors fall within your responsibility:\n1. Date to string conversion error\n2. Typia tag incompatibility error\n\n### 2.4. Multiple Correction Attempts\n\nIf previous correction attempts failed, you may receive multiple sections showing the progression:\n\n```json\n\n## TypeScript Code\n[First attempt code]\n\n## Compile Errors\n[First attempt errors]\n\n## TypeScript Code \n[Second attempt code]\n\n## Compile Errors\n[Second attempt errors]\n```\n\nThis history helps you understand what corrections were already tried and avoid repeating unsuccessful approaches.\n\n## 3. Type Casting Error Patterns and Solutions\n\nThis section provides comprehensive guidance on identifying and fixing type casting and assignment compilation errors in TypeScript.\n\n### 3.1. Typia Tag Type Incompatibility\n\n**Error Pattern**: `\"Types of property '\\\"typia.tag\\\"' are incompatible\"`\n\n**What causes this error:**\nTypia uses intersection types with special \"tag\" properties to enforce runtime validation constraints at the type level. When you try to assign a value with one set of tags to a variable expecting different tags, TypeScript's structural type system detects the incompatibility through the internal `\"typia.tag\"` property.\n\n**Common scenarios where this occurs:**\n- Assigning a basic typed value to a variable with additional constraints (e.g., `number & Type<\"int32\">` to `number & Type<\"int32\"> & Minimum<0>`)\n- Mixing different format tags (e.g., `Format<\"uuid\">` vs `Pattern<\"[0-9a-f-]+\"`)\n- Converting between nullable and non-nullable tagged types\n- Using comparison functions with values having different tag constraints\n- **Nullish coalescing (`??`) with tagged types** - When default values have stricter type constraints\n\n**Why normal type assertions don't work:**\nRegular TypeScript type assertions like `as` cannot reconcile the incompatible tag properties. The solution requires stripping the tags while preserving the base type, which is achieved through the `satisfies` operator pattern.\n\n**\u26A0\uFE0F THE FOUR-STEP FIX**\n\n1. **See tag mismatch error?** \u2192 Identify the type mismatch (look for `\"typia.tag\"` in error message)\n2. **Check if nullable** \u2192 Look for `| null | undefined`\n3. **Apply the pattern:**\n - **Non-nullable:** `value satisfies BaseType as BaseType`\n - **Nullable:** `value satisfies BaseType | null | undefined as BaseType | null | undefined`\n - **Nullable \u2192 Non-nullable:** `typia.assert((value satisfies BaseType | null | undefined as BaseType | null | undefined)!)`\n - **Nullish coalescing:** `(value ?? default) satisfies BaseType as BaseType` (ALWAYS use parentheses)\n4. **Don't know how to?** \u2192 Use `typia.assert<T>(value)` for simplicity\n\n### 3.2. Variable Assignment Type Mismatches\n\n**Common Problem Patterns:**\n```typescript\n//----\n// Problem 1: Basic type mismatch\n//----\nconst page: number & tags.Type<\"int32\"> = getValue();\nconst pageWithMinimum: number & tags.Type<\"int32\"> & tags.Minimum<0> = page;\n // Type 'number & Type<\"int32\">' is not assignable to type 'number & Type<\"int32\"> & Minimum<0>'.\n // Type 'number & Type<\"int32\">' is not assignable to type 'Minimum<0>'.\n // Types of property '\"typia.tag\"' are incompatible.\n\n//----\n// Problem 2: Nullable type mismatch\n//----\nconst userIdOptional: (string & tags.Format<\"uuid\">) | null | undefined =\n getNullableUserId();\nconst userIdOptionalByOtherWay:\n | (string & tags.Pattern<\"<SOME-UUID-PATTERN>\">)\n | null\n | undefined = userIdOptional;\n // Type 'string & Format<\"uuid\">' is not assignable to type '(string & Pattern<\"<SOME-UUID-PATTERN>\">) | null | undefined'.\n // Type 'string & Format<\"uuid\">' is not assignable to type 'string & Pattern<\"<SOME-UUID-PATTERN>\">'.\n // Type 'string & Format<\"uuid\">' is not assignable to type 'Pattern<\"<SOME-UUID-PATTERN>\">'.\n // Types of property '\"typia.tag\"' are incompatible.\n\n//----\n// Problem 3: Nullable to Non-nullable conversion\n//----\nconst uuidOptional: (string & tags.Format<\"uuid\">) | null | undefined =\n getNullableUserId();\nconst uuidRequired: string & tags.Pattern<\"<SOME-UUID-PATTERN>\"> = uuidOptional;\n // Type 'string & Format<\"uuid\">' is not assignable to type 'string & Pattern<\"<SOME-UUID-PATTERN>\">'.\n // Type 'string & Format<\"uuid\">' is not assignable to type 'Pattern<\"<SOME-UUID-PATTERN>\">'.\n // Types of property '\"typia.tag\"' are incompatible.\n\n//----\n// Problem 4: Nullish coalescing with tagged types\n//----\nconst x: (number & tags.Type<\"int32\">) | null | undefined = getValue();\nconst y: number & tags.Type<\"int32\"> & tags.Minimum<0> = x ?? 0;\n // Type 'number & Type<\"int32\">' is not assignable to type 'number & Type<\"int32\"> & Minimum<0>'.\n // Type 'number & Type<\"int32\">' is not assignable to type 'Minimum<0>'.\n // Types of property '\"typia.tag\"' are incompatible.\n```\n\n**Solutions:**\n```typescript\n//----\n// Solution 1: Basic type\n//----\nconst page: number & tags.Type<\"int32\"> = getValue();\nconst pageWithMinimum: number & tags.Type<\"int32\"> & tags.Minimum<0> =\n page satisfies number as number;\n\n//----\n// Solution 2: Nullable type\n//----\nconst userIdOptional: (string & tags.Format<\"uuid\">) | null | undefined =\n getNullableUserId();\nconst userIdOptionalByOtherWay:\n | (string & tags.Pattern<\"<SOME-UUID-PATTERN>\">)\n | null\n | undefined = userIdOptional satisfies string | null | undefined as\n | string\n | null\n | undefined;\n\n//----\n// Solution 3: Nullable to Non-nullable\n//----\nconst uuidOptional: (string & tags.Format<\"uuid\">) | null | undefined =\n getNullableUserId();\nconst uuidRequired: string & tags.Pattern<\"<SOME-UUID-PATTERN>\"> = typia.assert(\n (uuidOptional satisfies string | null | undefined as\n | string\n | null\n | undefined)!,\n);\n\n//----\n// Solution 4: Nullish coalescing - wrap with parentheses and use satisfies\n//----\nconst x: (number & tags.Type<\"int32\">) | null | undefined = getValue();\nconst y: number & tags.Type<\"int32\"> & tags.Minimum<0> = (x ?? 0) satisfies number as number;\n\n//----\n// Don't know how to solve or your previous trial has failed?\n// \n// Just use `typia.assert<T>(value)` function for simplicity\n//----\nconst simple: number & tags.Type<\"int32\"> & tags.Minimum<0> = typia.assert<\n number & tags.Type<\"int32\"> & tags.Minimum<0>\n>(someValue);\n```\n\n### 3.3. TestValidator.equals Type Mismatches\n\nWhen using TestValidator.equals with different tagged types, apply the same pattern:\n\n**Common Problem Patterns:**\n```typescript\n//----\n// Problem 1: Basic type with TestValidator.equals\n//----\nconst page: number & tags.Type<\"int32\"> = getValue();\nconst pageWithMinimum: number & tags.Type<\"int32\"> & tags.Minimum<0> =\n getValue();\nTestValidator.equals(\"page\", pageWithMinimum, page);\n // Type 'number & Type<\"int32\">' is not assignable to type 'number & Type<\"int32\"> & Minimum<0>'.\n // Type 'number & Type<\"int32\">' is not assignable to type 'Minimum<0>'.\n // Types of property '\"typia.tag\"' are incompatible.\n\n//----\n// Problem 2: Nullable type mismatch in TestValidator.equals\n//----\nconst userIdOptional: (string & tags.Format<\"uuid\">) | null | undefined =\n getNullableUserId();\nconst userIdOptionalByOtherWay:\n | (string & tags.Pattern<\"<SOME-UUID-PATTERN>\">)\n | null\n | undefined = getNullableUserId();\nTestValidator.equals(\"id\", userIdOptionalByOtherWay, userIdOptional);\n // Type 'string & Format<\"uuid\">' is not assignable to type '(string & Pattern<\"<SOME-UUID-PATTERN>\">) | null | undefined'.\n // Type 'string & Format<\"uuid\">' is not assignable to type 'string & Pattern<\"<SOME-UUID-PATTERN>\">'.\n // Type 'string & Format<\"uuid\">' is not assignable to type 'Pattern<\"<SOME-UUID-PATTERN>\">'.\n // Types of property '\"typia.tag\"' are incompatible.\n\n//----\n// Problem 3: Nullable to non-nullable with TestValidator.equals\n//----\nconst uuidOptional: (string & tags.Format<\"uuid\">) | null | undefined =\n getNullableUserId();\nconst uuidRequired: string & tags.Pattern<\"<SOME-UUID-PATTERN>\"> = typia.assert(\n (uuidOptional satisfies string | null | undefined as\n | string\n | null\n | undefined)!,\n);\nTestValidator.equals(\"uuid-nullable-to-non-nullable\", uuidRequired, uuidOptional!);\n // Type 'string & Format<\"uuid\">' is not assignable to type 'string & Pattern<\"<SOME-UUID-PATTERN>\">'.\n // Type 'string & Format<\"uuid\">' is not assignable to type 'Pattern<\"<SOME-UUID-PATTERN>\">'.\n // Types of property '\"typia.tag\"' are incompatible.\n\n//----\n// Problem 4: Nullish coalescing with TestValidator.equals\n//----\nconst x: (number & tags.Type<\"int32\">) | null | undefined = getValue();\nconst y: number & tags.Type<\"int32\"> & tags.Minimum<0> = x ?? 0;\nTestValidator.equals(\"value check\", y, x ?? 0);\n // Type 'number & Type<\"int32\">' is not assignable to type 'number & Type<\"int32\"> & Minimum<0>'.\n // Type 'number & Type<\"int32\">' is not assignable to type 'Minimum<0>'.\n // Types of property '\"typia.tag\"' are incompatible.\n```\n\n**Solutions:**\n```typescript\n//----\n// Solution 1: Basic type\n//----\nconst page: number & tags.Type<\"int32\"> = getValue();\nconst pageWithMinimum: number & tags.Type<\"int32\"> & tags.Minimum<0> =\n getValue();\nTestValidator.equals(\"page\", pageWithMinimum, page satisfies number as number);\n\n//----\n// Solution 2: Nullable type mismatch\n//----\nconst userIdOptional: (string & tags.Format<\"uuid\">) | null | undefined =\n getNullableUserId();\nconst userIdOptionalByOtherWay:\n | (string & tags.Pattern<\"<SOME-UUID-PATTERN>\">)\n | null\n | undefined = getNullableUserId();\nTestValidator.equals(\n \"id\",\n userIdOptionalByOtherWay,\n userIdOptional satisfies string | null | undefined as\n | string\n | null\n | undefined,\n);\n\n//----\n// Solution 3: Nullable to non-nullable\n//----\nconst uuidOptional: (string & tags.Format<\"uuid\">) | null | undefined =\n getNullableUserId();\nconst uuidRequired: string & tags.Pattern<\"<SOME-UUID-PATTERN>\"> = typia.assert(\n (uuidOptional satisfies string | null | undefined as\n | string\n | null\n | undefined)!,\n);\nTestValidator.equals(\n \"uuid-nullable-to-non-nullable\",\n uuidRequired,\n typia.assert(\n (uuidOptional satisfies string | null | undefined as\n | string\n | null\n | undefined)!,\n ),\n);\n\n//----\n// Solution 4: Nullish coalescing with TestValidator.equals\n//----\nconst x: (number & tags.Type<\"int32\">) | null | undefined = getValue();\nconst y: number & tags.Type<\"int32\"> & tags.Minimum<0> = (x ?? 0) satisfies number as number;\nTestValidator.equals(\"value check\", y, (x ?? 0) satisfies number as number);\n\n//----\n// Don't know how to or previous trial failed?\n// Just use typia.assert<T>(value) for simplicity\n//----\nconst someValue: unknown = getUnknownValue();\nconst simple: number & tags.Type<\"int32\"> & tags.Minimum<0> = typia.assert<\n number & tags.Type<\"int32\"> & tags.Minimum<0>\n>(someValue);\n```\n\n### 3.4. Last Resort: Direct typia.assert<T>(value) or typia.assertGuard<T>(value) Usage\n\nWhen encountering persistent typia tag type errors that cannot be resolved through the conventional patterns, use `typia.assert<T>(value)` or `typia.assertGuard<T>(value)` based on your needs.\n\n**\uD83D\uDEA8 CRITICAL: Choose the Right Function for Tagged Types \uD83D\uDEA8**\n\n```typescript\n// Tagged nullable types - SAME RULES APPLY!\nconst tagged: (string & tags.Format<\"uuid\">) | null | undefined = getId();\n\n// \u274C WRONG: Using assert without assignment\nif (tagged) {\n typia.assert(tagged!);\n useId(tagged); // ERROR: tagged is still nullable!\n}\n\n// \u2705 CORRECT Option 1: Use assert for assignment\nif (tagged) {\n const validId = typia.assert(tagged!);\n useId(validId); // OK: validId has correct type\n}\n\n// \u2705 CORRECT Option 2: Use assertGuard for narrowing\nif (tagged) {\n typia.assertGuard(tagged!);\n useId(tagged); // OK: tagged is now non-nullable with tags\n}\n\n// Complex tagged types\nconst complex: (number & tags.Type<\"int32\"> & tags.Minimum<0>) | undefined = getValue();\n\n// For assignment - use assert\nconst safe = typia.assert(complex!);\n\n// For type narrowing - use assertGuard\ntypia.assertGuard(complex!);\n// Now complex itself has the right type\n```\n\n**When to use this approach:**\n- The conventional `satisfies` pattern has failed\n- You're encountering the same error repeatedly\n- The error involves `\"typia.tag\"` incompatibility\n- ALWAYS choose between `assert` (for return value) and `assertGuard` (for type narrowing)\n\n### 3.5. Date to String Conversion\n\n**Error Patterns:**\n```\nType 'Date' is not assignable to type 'string'\nType 'Date' is not assignable to type 'string & Format<\"date-time\">'\nType 'Date | null' is not assignable to type 'string'\nType 'Date | null | undefined' is not assignable to type '(string & Format<\"date-time\">) | null | undefined'\n```\n\n**CRITICAL: Proper handling of Date type conversions to string types**\n\nWhen TypeScript reports type mismatch between `Date` and `string` (with or without Typia format tags), use the `.toISOString()` method to convert Date objects to ISO 8601 string format.\n\n```typescript\n// \u274C ERROR: Cannot assign Date to string & Format<\"date-time\">\nconst date: Date = new Date();\nconst timestamp: string & tags.Format<\"date-time\"> = date; // ERROR!\n\n// \u2705 CORRECT: Convert Date to ISO string\nconst date: Date = new Date();\nconst timestamp: string & tags.Format<\"date-time\"> = date.toISOString();\n\n// More examples:\nconst createdAt: string & tags.Format<\"date-time\"> = new Date().toISOString();\nconst updatedAt: string & tags.Format<\"date-time\"> = new Date(Date.now() + 86400000).toISOString(); // +1 day\nconst scheduledFor: string & tags.Format<\"date-time\"> = new Date('2024-12-31').toISOString();\n\n// When working with Date objects from responses\nconst order = await api.functional.orders.get(connection, { id });\nconst orderDate: string & tags.Format<\"date-time\"> = new Date(order.created_at).toISOString();\n```\n\n**Remember:** The `Format<\"date-time\">` tag expects ISO 8601 string format, not Date objects. Always use `.toISOString()` for conversion.\n\n### 3.6. Date Type Nullable/Undefined Handling\n\n**CRITICAL: Proper handling of nullable/undefined Date types when converting to string types**\n\n#### Case 1: Target Type is Nullable String\n\nWhen the target property accepts `string | null | undefined`:\n\n```typescript\n// Source: Date | null | undefined\n// Target: string | null | undefined\n\nconst date: Date | null | undefined = getDate();\n\n// \u2705 CORRECT: Preserve null/undefined\nconst requestBody = {\n createdAt: date?.toISOString() ?? null, // Converts Date to string, preserves null\n updatedAt: date?.toISOString() ?? undefined // Converts Date to string, preserves undefined\n} satisfies IPost.ICreate;\n```\n\n#### Case 2: Target Type is Non-Nullable String\n\nWhen the target property requires a non-null string:\n\n```typescript\n// Source: Date | null | undefined\n// Target: string (non-nullable)\n\nconst date: Date | null | undefined = getDate();\n\n// \u2705 CORRECT: Provide default value\nconst requestBody = {\n createdAt: (date ?? new Date()).toISOString(), // Always returns string\n updatedAt: date?.toISOString() ?? new Date().toISOString() // Alternative syntax\n} satisfies IPost.ICreate;\n```\n\n#### Case 3: Complex Union Types\n\nWhen dealing with `Date | string | undefined`:\n\n```typescript\n// Source: Date | string | undefined\n// Target: string | undefined\n\nconst value: Date | string | undefined = getValue();\n\n// \u2705 CORRECT: Handle all type possibilities\nconst requestBody = {\n timestamp: value instanceof Date ? value.toISOString() : value\n} satisfies IEvent.ICreate;\n```\n\n#### Case 4: Converting to UUID Format\n\nWhen the error involves converting `Date` to `string & Format<\"uuid\">` (a logical error in the test):\n\n```typescript\n// \u274C ERROR: Date cannot become UUID\nconst date: Date = new Date();\nconst id: string & tags.Format<\"uuid\"> = date; // NONSENSICAL!\n\n// \u2705 CORRECT: Generate proper UUID\nconst id: string & tags.Format<\"uuid\"> = typia.random<string & tags.Format<\"uuid\">>();\n\n// OR if you need to track creation time separately:\nconst entity = {\n id: typia.random<string & tags.Format<\"uuid\">>(),\n createdAt: new Date().toISOString()\n} satisfies IEntity.ICreate;\n```\n\n**Key Rules:**\n1. **Date \u2192 `Format<\"date-time\">`**: Use `.toISOString()`\n2. **Date \u2192 `Format<\"uuid\">`**: Generate new UUID, don't convert Date\n3. **Nullable handling**: Use optional chaining (`?.`) with appropriate defaults\n4. **Type unions**: Check type with `instanceof` before conversion\n\n### 3.7. Nullable and Undefined Type Assignment\n\nThis section addresses TypeScript compilation errors when working with nullable (`| null`) and undefinable (`| undefined`) types. The key principle is that TypeScript requires exhaustive type narrowing - you must explicitly check for ALL possible null/undefined values.\n\n**Core Problem:**\nTypeScript's type system requires explicit elimination of each union member. When a type is `T | null | undefined`, checking only for `null` is insufficient - TypeScript still considers `undefined` as a possibility.\n\n**THE PATTERN - Exhaustive Type Narrowing:**\n\n1. **See `T | null | undefined`?** \u2192 Write `!== null && !== undefined`\n2. **See `T | undefined`?** \u2192 Write `!== undefined`\n3. **See `T | null`?** \u2192 Write `!== null`\n4. **NEVER MIX THESE UP** \u2192 Each pattern has exactly ONE solution\n\n**Common Problem Patterns:**\n```typescript\n// Problem 1: Checking only for null when undefined is also possible\nconst value: string | null | undefined = getValue();\nif (value !== null) {\n processString(value); // ERROR: value is string | undefined\n}\n\n// Problem 2: Using truthiness check for nullable strings\nconst name: string | null = getName();\nif (name) {\n // This works, but empty string \"\" would be excluded\n}\n\n// Problem 3: Optional property access\ninterface IUser {\n name?: string;\n}\nconst user: IUser = getUser();\nconst userName: string = user.name; // ERROR: string | undefined not assignable to string\n\n// Problem 4: Prisma query result with null to undefined conversion\nconst post = await MyGlobal.prisma.community_platform_posts.findUnique({\n where: { id: body.post_id },\n select: { community_platform_member_id: true },\n});\n// post.community_platform_member_id is (string & Format<\"uuid\">) | null\n// But the target type expects string | undefined\nconst memberId: string | undefined = post.community_platform_member_id; \n// ERROR: Type '(string & Format<\"uuid\">) | null' is not assignable to type 'string | undefined'.\n// Type 'null' is not assignable to type 'string | undefined'.\n```\n\n**Solutions:**\n```typescript\n// Solution 1: Exhaustive type checking\nconst value: string | null | undefined = getValue();\nif (value !== null && value !== undefined) {\n processString(value); // OK: value is string\n}\n\n// Solution 2: Explicit null check for nullable types\nconst name: string | null = getName();\nif (name !== null) {\n processString(name); // OK: name is string\n}\n\n// Solution 3: Handle undefined for optional properties\ninterface IUser {\n name?: string;\n}\nconst user: IUser = getUser();\nif (user.name !== undefined) {\n const userName: string = user.name; // OK: narrowed to string\n}\n// Or provide a default:\nconst userName: string = user.name ?? \"Unknown\";\n\n// Solution 4: Convert null to undefined for Prisma results\nconst post = await MyGlobal.prisma.community_platform_posts.findUnique({\n where: { id: body.post_id },\n select: { community_platform_member_id: true },\n});\n\n// Option A: Using nullish coalescing to convert null to undefined\nconst memberId: string | undefined = post?.community_platform_member_id ?? undefined;\n\n// Option B: Using conditional check\nconst memberId: string | undefined = post?.community_platform_member_id !== null \n ? post.community_platform_member_id \n : undefined;\n\n// Option C: If you need to strip typia tags as well\nconst memberId: string | undefined = post?.community_platform_member_id !== null\n ? (post.community_platform_member_id satisfies string as string)\n : undefined;\n```\n\n### 3.8. typia.assert vs typia.assertGuard\n\n**\uD83D\uDEA8 CRITICAL: typia.assert vs typia.assertGuard Distinction \uD83D\uDEA8**\n\nAI frequently confuses these two functions, causing compilation errors:\n\n**typia.assert(value!)** - RETURNS the validated value\n- Use when you need to assign the result to a new variable\n- The original variable's type remains unchanged\n- **COMPILATION ERROR**: Using original variable after assert without assignment\n\n**typia.assertGuard(value!)** - Returns VOID, modifies input variable's type\n- Use when you want to narrow the original variable's type\n- Acts as a type guard affecting the variable itself\n- **COMPILATION ERROR**: Trying to assign the result (returns void)\n\n```typescript\n// \u274C WRONG: Common AI mistake - using assert without assignment\nconst item: IItem | undefined = items.find(i => i.id === targetId);\nif (item) {\n typia.assert(item!); // Returns value but not assigned!\n console.log(item.name); // ERROR: item is still IItem | undefined\n}\n\n// \u2705 CORRECT Option 1: Use assert WITH assignment\nconst item: IItem | undefined = items.find(i => i.id === targetId);\nif (item) {\n const safeItem = typia.assert(item!);\n console.log(safeItem.name); // OK: Use the returned value\n}\n\n// \u2705 CORRECT Option 2: Use assertGuard for type narrowing\nconst item: IItem | undefined = items.find(i => i.id === targetId);\nif (item) {\n typia.assertGuard(item!); // Modifies item's type\n console.log(item.name); // OK: item is now IItem\n}\n\n// Tagged nullable types - SAME RULES APPLY!\nconst tagged: (string & tags.Format<\"uuid\">) | null | undefined = getId();\n\n// \u274C WRONG: Using assert without assignment\nif (tagged) {\n typia.assert(tagged!);\n useId(tagged); // ERROR: tagged is still nullable!\n}\n\n// \u2705 CORRECT Option 1: Use assert for assignment\nif (tagged) {\n const validId = typia.assert(tagged!);\n useId(validId); // OK: validId has correct type\n}\n\n// \u2705 CORRECT Option 2: Use assertGuard for narrowing\nif (tagged) {\n typia.assertGuard(tagged!);\n useId(tagged); // OK: tagged is now non-nullable with tags\n}\n```\n\n### 3.9. String to Literal Type Assignment\n\nWhen trying to assign a general `string` type to a literal union type:\n\n**Error Pattern:**\n```\nArgument of type 'string' is not assignable to parameter of type '\"superadmin\" | \"administrator\" | \"support\"'\n```\n\n**Solution: Use `typia.assert` for runtime validation and type conversion**\n\n```typescript\n// \u274C ERROR: Cannot assign string to literal union type\nconst value: string = getValue();\nconst role: \"superadmin\" | \"administrator\" | \"support\" = value; // ERROR!\n\n// \u2705 CORRECT: Use typia.assert for validation and conversion\nconst value: string = getValue();\nconst role: \"superadmin\" | \"administrator\" | \"support\" = \n typia.assert<\"superadmin\" | \"administrator\" | \"support\">(value);\n\n// More examples with different literal types:\nconst status: string = getStatus();\nconst validStatus: \"pending\" | \"approved\" | \"rejected\" = \n typia.assert<\"pending\" | \"approved\" | \"rejected\">(status);\n\nconst method: string = getMethod();\nconst httpMethod: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" = \n typia.assert<\"GET\" | \"POST\" | \"PUT\" | \"DELETE\">(method);\n\n// With API responses\nconst userType: string = response.data.type;\nconst validUserType: \"customer\" | \"vendor\" | \"admin\" = \n typia.assert<\"customer\" | \"vendor\" | \"admin\">(userType);\n```\n\n**Important:** \n- `typia.assert` will validate at runtime that the string value is actually one of the allowed literals\n- If the value doesn't match any literal, it will throw an error\n- This ensures type safety both at compile-time and runtime\n\n### 3.10. Optional Chaining with Array Methods Returns Union Types\n\n**Problem: Optional chaining (`?.`) with array methods creates `T | undefined` types**\n\nWhen using optional chaining with array methods like `includes()`, the result type becomes `boolean | undefined`, which causes compilation errors in contexts expecting pure `boolean` types.\n\n```typescript\n// Property 'tags' might be string[] | undefined\nconst hasBlogTag = article.tags?.includes(\"blog\"); // Type: boolean | undefined\n\n// COMPILATION ERROR: Argument of type 'boolean | undefined' is not assignable to parameter of type 'boolean'\nTestValidator.predicate(\n \"article has blog tag\",\n hasBlogTag // ERROR! Expected boolean, got boolean | undefined\n);\n```\n\n**Solution 1: Direct Comparison with `=== true` (RECOMMENDED)**\n```typescript\n// \u2705 CORRECT: Compare with true to narrow to boolean\nTestValidator.predicate(\n \"article has blog tag\",\n article.tags?.includes(\"blog\") === true // Always boolean: true or false\n);\n\n// More examples:\nTestValidator.predicate(\n \"user has admin role\",\n user.roles?.includes(\"admin\") === true\n);\n\nTestValidator.predicate(\n \"product is in wishlist\",\n wishlist.items?.includes(productId) === true\n);\n\nTestValidator.predicate(\n \"comment contains keyword\",\n comment.keywords?.includes(\"important\") === true\n);\n```\n\n**Solution 2: Default Value with `??` (Nullish Coalescing)**\n```typescript\n// \u2705 CORRECT: Use nullish coalescing to provide default\nTestValidator.predicate(\n \"article has blog tag\",\n article.tags?.includes(\"blog\") ?? false // If undefined, default to false\n);\n\n// When you want different default behavior:\nconst hasTag = article.tags?.includes(\"blog\") ?? false; // Default false\nconst assumeHasTag = article.tags?.includes(\"blog\") ?? true; // Default true\n```\n\n### 3.11. TypeScript Type Narrowing Compilation Errors - \"No Overlap\" Fix\n\n**Error Pattern: \"This comparison appears to be unintentional because the types 'X' and 'Y' have no overlap\"**\n\nThis compilation error occurs when TypeScript's control flow analysis has already narrowed a type, making certain comparisons impossible.\n\n**Quick Fix Algorithm:**\n\n1. **Identify the error location** - Find \"no overlap\" in the diagnostic message\n2. **Trace back to the narrowing point** - Look for the if/else block or condition that narrowed the type\n3. **Remove the impossible comparison** - Delete the redundant check\n4. **Use the narrowed type directly** - No additional checks needed\n\n```typescript\n// PATTERN 1: Redundant else block checks\n// BEFORE (error):\nif (value === false) {\n handleFalse();\n} else {\n if (value !== false) { // ERROR: 'true' and 'false' have no overlap\n handleTrue();\n }\n}\n\n// AFTER (fixed):\nif (value === false) {\n handleFalse();\n} else {\n handleTrue(); // Remove redundant check\n}\n\n// PATTERN 2: Exhausted union types\n// BEFORE (error):\ntype Status = \"pending\" | \"approved\" | \"rejected\";\nif (status === \"pending\") {\n // handle pending\n} else if (status === \"approved\") {\n // handle approved \n} else {\n if (status !== \"rejected\") { // ERROR: status must be \"rejected\"\n // ...\n }\n}\n\n// AFTER (fixed):\nif (status === \"pending\") {\n // handle pending\n} else if (status === \"approved\") {\n // handle approved\n} else {\n // status is \"rejected\" - use directly\n}\n```\n\n**Rule:** When you see \"no overlap\" errors, simply remove the impossible comparison. The type is already narrowed - trust TypeScript's analysis.\n\n**\uD83D\uDEA8 SCOPE PROBLEM - WHEN TYPE NARROWING DOESN'T PERSIST \uD83D\uDEA8**\n\nSometimes TypeScript's type narrowing doesn't persist across different scopes or complex conditions:\n\n```typescript\n// You narrowed the type before...\nif (typeof value === 'string') {\n processString(value); // Works here\n}\n\n// But in a different context...\nconst config = {\n data: value // ERROR! TypeScript doesn't remember the narrowing\n};\n```\n\n**SOLUTION: If you can't resolve it easily, use `typia.assert<T>(value)` with the target type:**\n\n```typescript\n// Quick fix for complex type narrowing issues:\nconst config = {\n data: typia.assert<string>(value) // Forces the type and validates at runtime\n};\n```\n\n## 4. Final Verification Checklist\n\nBefore submitting your correction, verify:\n\n### 4.1. Error Pattern Detection\n- [ ] Identified the specific type casting error pattern:\n - [ ] Typia tag incompatibility (`\"typia.tag\"` in error message)\n - [ ] Date to string conversion errors\n - [ ] Nullable/undefined type assignment errors\n - [ ] String to literal type assignment errors\n - [ ] Optional chaining union type errors\n - [ ] Type narrowing \"no overlap\" errors\n- [ ] Analyzed the code context to understand the type mismatch\n- [ ] Determined the appropriate fix strategy\n\n### 4.2. Solution Application\n- [ ] Applied the correct fix pattern for the specific error type:\n - [ ] `satisfies` pattern for Typia tag mismatches\n - [ ] `.toISOString()` for Date to string conversions\n - [ ] Exhaustive type narrowing for nullable/undefined types\n - [ ] `typia.assert` vs `typia.assertGuard` used correctly\n - [ ] `typia.assert<T>()` for literal type conversions\n - [ ] `=== true` or `??` for optional chaining results\n - [ ] Removed redundant comparisons for \"no overlap\" errors\n- [ ] Used parentheses where necessary (e.g., nullish coalescing)\n- [ ] Preserved the original validation intent\n\n### 4.3. Scope Limitation\n- [ ] ONLY fixed type casting and assignment related errors\n- [ ] Did NOT touch non-type-casting errors:\n - [ ] Import errors left untouched\n - [ ] Syntax errors left untouched\n - [ ] Undefined variable errors left untouched\n - [ ] Other unrelated errors left untouched\n- [ ] Preserved all working code without type casting errors\n\n### 4.4. Code Integrity\n- [ ] All type conversions maintain type safety\n- [ ] Runtime validation is preserved where applicable\n- [ ] No functionality was compromised by the fixes\n- [ ] The code remains idiomatic and readable\n\n### 4.5. Decision Accuracy\n- [ ] If type casting/assignment error found \u2192 `rewrite()` was called\n- [ ] If unrelated error found \u2192 `reject()` was called\n- [ ] No hesitation or uncertainty in the decision\n- [ ] Function was called immediately without asking permission\n\nRemember: Your mission is precise correction of type casting and assignment errors. Other agents handle all other types of errors. Stay focused on your specific responsibility." /* AutoBeSystemPromptConstant.COMMON_CORRECT_CASTING */,
12
12
  },
13
13
  ...failures.map((f, i, array) => ({
14
14
  id: (0, uuid_1.v7)(),
@@ -1 +1 @@
1
- {"version":3,"file":"transformCommonCorrectCastingHistories.js","sourceRoot":"","sources":["../../../../src/orchestrate/common/histories/transformCommonCorrectCastingHistories.ts"],"names":[],"mappings":";;;AAEA,yCAA2C;AAC3C,+BAA0B;AASnB,MAAM,sCAAsC,GAAG,CACpD,QAAoB,EAGpB,EAAE,CAAC;IACH;QACE,EAAE,EAAE,IAAA,SAAE,GAAE;QACR,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,IAAI,EAAE,eAAe;QACrB,IAAI,ur4CAAmD;KACxD;IACD,GAAG,QAAQ,CAAC,GAAG,CACb,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CACd,CAAC;QACC,EAAE,EAAE,IAAA,SAAE,GAAE;QACR,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,IAAI,EAAE,kBAAkB;QACxB,IAAI,EAAE,kBAAU,CAAC,IAAI,CAAA;UACnB,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,kBAAkB;;;QAGhE,CAAC,CAAC,MAAM;;;;QAIR,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;;KAEhC;KACE,CAAkD,CACtD;CACF,CAAC;AA9BW,QAAA,sCAAsC,0CA8BjD"}
1
+ {"version":3,"file":"transformCommonCorrectCastingHistories.js","sourceRoot":"","sources":["../../../../src/orchestrate/common/histories/transformCommonCorrectCastingHistories.ts"],"names":[],"mappings":";;;AAEA,yCAA2C;AAC3C,+BAA0B;AASnB,MAAM,sCAAsC,GAAG,CACpD,QAAoB,EAGpB,EAAE,CAAC;IACH;QACE,EAAE,EAAE,IAAA,SAAE,GAAE;QACR,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,IAAI,EAAE,eAAe;QACrB,IAAI,uq4CAAmD;KACxD;IACD,GAAG,QAAQ,CAAC,GAAG,CACb,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CACd,CAAC;QACC,EAAE,EAAE,IAAA,SAAE,GAAE;QACR,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,IAAI,EAAE,kBAAkB;QACxB,IAAI,EAAE,kBAAU,CAAC,IAAI,CAAA;UACnB,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,kBAAkB;;;QAGhE,CAAC,CAAC,MAAM;;;;QAIR,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;;KAEhC;KACE,CAAkD,CACtD;CACF,CAAC;AA9BW,QAAA,sCAAsC,0CA8BjD"}
@@ -0,0 +1,9 @@
1
+ import { IAgenticaHistoryJson } from "@agentica/core";
2
+ import { IAutoBeTypeScriptCompileResult } from "@autobe/interface";
3
+ interface IFailure {
4
+ diagnostics: IAutoBeTypeScriptCompileResult.IDiagnostic[];
5
+ script: string;
6
+ }
7
+ /** Transform date correction histories for AI conversation */
8
+ export declare const transformCommonCorrectDateHistories: (failures: IFailure[]) => Array<IAgenticaHistoryJson.IAssistantMessage | IAgenticaHistoryJson.ISystemMessage>;
9
+ export {};
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transformCommonCorrectDateHistories = void 0;
4
+ const utils_1 = require("@autobe/utils");
5
+ const uuid_1 = require("uuid");
6
+ /** Transform date correction histories for AI conversation */
7
+ const transformCommonCorrectDateHistories = (failures) => [
8
+ {
9
+ id: (0, uuid_1.v7)(),
10
+ created_at: new Date().toISOString(),
11
+ type: "systemMessage",
12
+ text: "<!--\nfilename: REALIZE_DATE.md\n-->\n# \uD83D\uDCC5 Date Type Handling Guide for Realize Agent\n\n## \uD83D\uDEA8 CRITICAL: Date Type is ABSOLUTELY FORBIDDEN in TypeScript Declarations\n\nThis document provides comprehensive guidelines for handling date-related types in the Realize Agent system. Violations of these rules will cause compilation failures.\n\n## \uD83D\uDD34 The Golden Rule: NEVER Use Native Date Type\n\n### \u274C ABSOLUTELY FORBIDDEN\n```typescript\n// NEVER declare variables with Date type\nconst now: Date = new Date(); // \u274C FORBIDDEN\nconst processDate = (date: Date) => { ... }; // \u274C FORBIDDEN\nfunction getDate(): Date { ... } // \u274C FORBIDDEN\ninterface IUser { created_at: Date; } // \u274C FORBIDDEN\ntype TimeStamp = Date; // \u274C FORBIDDEN\n```\n\n### \u2705 REQUIRED: Always Use String with Tags\n```typescript\n// ALWAYS use string with tags.Format<'date-time'>\nconst now: string & tags.Format<'date-time'> = toISOStringSafe(new Date());\nconst processDate = (date: string & tags.Format<'date-time'>) => { ... };\nfunction getDate(): string & tags.Format<'date-time'> { ... }\ninterface IUser { created_at: string & tags.Format<'date-time'>; }\ntype TimeStamp = string & tags.Format<'date-time'>;\n```\n\n## \uD83D\uDEE0\uFE0F The toISOStringSafe() Function\n\n### Function Signature\n```typescript\nfunction toISOStringSafe(\n value: Date | (string & tags.Format<\"date-time\">)\n): string & tags.Format<\"date-time\">\n```\n\n### Purpose\n`toISOStringSafe()` is the ONLY approved method for converting Date objects or date strings to ISO strings with proper type branding.\n\n### \u26A0\uFE0F CRITICAL: Parameter Requirements\n\n**toISOStringSafe REQUIRES a non-null parameter!**\n- The function accepts `Date` or ISO string format\n- It does NOT accept `null` or `undefined`\n- Always check for null/undefined BEFORE calling\n\n```typescript\n// \u274C WRONG: Function doesn't accept null\ntoISOStringSafe(nullableValue) // Type error if nullable!\n\n// \u2705 CORRECT: Check null first, then call\nvalue ? toISOStringSafe(value) : null // Safe null handling\n```\n\n### Common Usage Patterns\n\n#### 1. Creating New Timestamps\n```typescript\n// \u2705 For new timestamps\nconst created_at = toISOStringSafe(new Date());\nconst updated_at = toISOStringSafe(new Date());\n\n// \u2705 Converting existing date strings\nconst formatted_date = toISOStringSafe(dateString);\n```\n\n#### 2. Converting Prisma DateTime Fields\n```typescript\n// \u2705 Converting from Prisma (which returns Date objects)\nreturn {\n created_at: toISOStringSafe(created.created_at),\n updated_at: toISOStringSafe(created.updated_at),\n expires_at: created.expires_at ? toISOStringSafe(created.expires_at) : null,\n};\n```\n\n#### 3. Processing API Input Dates\n```typescript\n// \u2705 Converting date strings from API input\nawait MyGlobal.prisma.posts.create({\n data: {\n title: body.title,\n content: body.content,\n published_at: body.published_at ? toISOStringSafe(body.published_at) : null,\n scheduled_at: body.scheduled_at ? toISOStringSafe(body.scheduled_at) : null,\n },\n});\n```\n\n## \uD83D\uDCCA Date Field Patterns in Different Contexts\n\n### 1. Prisma Operations\n\n#### CREATE Operations\n```typescript\nawait MyGlobal.prisma.articles.create({\n data: {\n id: v4() as string & tags.Format<'uuid'>,\n title: body.title,\n content: body.content,\n // Required date fields\n created_at: toISOStringSafe(new Date()),\n updated_at: toISOStringSafe(new Date()),\n // Optional/nullable date fields\n published_at: body.published_at ? toISOStringSafe(body.published_at) : null,\n deleted_at: null, // If soft delete field exists\n },\n});\n```\n\n#### UPDATE Operations\n```typescript\nawait MyGlobal.prisma.articles.update({\n where: { id: parameters.id },\n data: {\n title: body.title,\n content: body.content,\n // Always update the updated_at field\n updated_at: toISOStringSafe(new Date()),\n // Conditional date updates\n ...(body.published_at !== undefined && {\n published_at: body.published_at ? toISOStringSafe(body.published_at) : null\n }),\n },\n});\n```\n\n#### WHERE Clauses with Date Ranges\n```typescript\nawait MyGlobal.prisma.events.findMany({\n where: {\n // Date range queries\n created_at: {\n gte: body.start_date ? toISOStringSafe(body.start_date) : undefined,\n lte: body.end_date ? toISOStringSafe(body.end_date) : undefined,\n },\n // Specific date comparisons\n expires_at: {\n gt: toISOStringSafe(new Date()), // Events not yet expired\n },\n },\n});\n```\n\n### 2. Return Object Transformations\n\n#### From Prisma to API Response\n```typescript\n// Prisma returns Date objects, API expects ISO strings\nconst users = await MyGlobal.prisma.users.findMany();\n\nreturn users.map(user => ({\n id: user.id,\n name: user.name,\n email: user.email,\n // Convert all Date fields to ISO strings\n created_at: toISOStringSafe(user.created_at),\n updated_at: toISOStringSafe(user.updated_at),\n last_login_at: user.last_login_at ? toISOStringSafe(user.last_login_at) : null,\n email_verified_at: user.email_verified_at ? toISOStringSafe(user.email_verified_at) : null,\n}));\n```\n\n### 3. Complex Date Operations\n\n#### Soft Delete Implementation\n```typescript\n// If schema has deleted_at field (always check first!)\nawait MyGlobal.prisma.posts.update({\n where: { id: parameters.id },\n data: {\n deleted_at: toISOStringSafe(new Date()), // Mark as deleted\n updated_at: toISOStringSafe(new Date()),\n },\n});\n\n// Querying non-deleted items\nawait MyGlobal.prisma.posts.findMany({\n where: {\n deleted_at: null, // Only get non-deleted posts\n },\n});\n```\n\n#### Date Calculations\n```typescript\n// Calculate expiry date (30 days from now)\nconst now = new Date();\nconst expiryDate = new Date(now.getTime() + 30 * 24 * 60 * 60 * 1000);\n\nawait MyGlobal.prisma.subscriptions.create({\n data: {\n user_id: user.id,\n started_at: toISOStringSafe(now),\n expires_at: toISOStringSafe(expiryDate),\n },\n});\n```\n\n## \uD83D\uDEAB Common Date Type Errors and Solutions\n\n### Error: \"Type 'Date' is not assignable to type 'string & tags.Format<'date-time'>'\"\n\n**Cause**: Trying to assign a Date object directly without conversion\n\n```typescript\n// \u274C WRONG\nreturn {\n created_at: new Date(), // ERROR!\n};\n\n// \u2705 CORRECT\nreturn {\n created_at: toISOStringSafe(new Date()),\n};\n```\n\n### Error: \"Argument of type 'null' is not assignable to parameter\"\n\n**Cause**: Trying to pass null or undefined to toISOStringSafe\n\n```typescript\n// \u274C WRONG\nconst date = toISOStringSafe(nullableDate); // Type error if nullable!\n\n// \u2705 CORRECT\nconst date = nullableDate ? toISOStringSafe(nullableDate) : null;\n```\n\n### Error: \"Type 'string | null' is not assignable to type 'string & tags.Format<'date-time'>'\"\n\n**Cause**: Nullable date field being assigned to required date field\n\n```typescript\n// \u274C WRONG (if API expects non-nullable)\nreturn {\n created_at: user.created_at ? toISOStringSafe(user.created_at) : null, // ERROR!\n};\n\n// \u2705 CORRECT (provide default for required fields)\nreturn {\n created_at: user.created_at \n ? toISOStringSafe(user.created_at) \n : toISOStringSafe(new Date()), // Default to current time\n};\n```\n\n## \uD83D\uDCCB Date Type Checklist\n\nBefore implementing any date-related functionality, verify:\n\n1. \u2705 **NO Date type declarations** - Search for `: Date` in your code\n2. \u2705 **All Date objects wrapped in toISOStringSafe()** - Never use .toISOString() directly\n3. \u2705 **Null checks before toISOStringSafe()** - Function cannot handle null\n4. \u2705 **Proper type annotations** - Use `string & tags.Format<'date-time'>`\n5. \u2705 **Schema verification** - Check if date fields actually exist in Prisma schema\n6. \u2705 **API contract alignment** - Verify if fields are nullable or required in DTOs\n\n## \uD83C\uDFAF Quick Reference\n\n### DO \u2705\n- `toISOStringSafe(new Date())`\n- `toISOStringSafe(dateString)` for existing strings\n- `value ? toISOStringSafe(value) : null` for nullable values\n- `string & tags.Format<'date-time'>` for type declarations\n- Check null/undefined BEFORE calling toISOStringSafe\n- Check Prisma schema for date field existence\n\n### DON'T \u274C\n- `const date: Date = new Date()` - storing Date in variables\n- `new Date().toISOString()` - use toISOStringSafe instead\n- `toISOStringSafe(nullableValue)` - function doesn't accept null\n- `toISOStringSafe()` - function requires a parameter\n- Assume date fields exist (like deleted_at)\n- Use Date type in function signatures\n\n## \uD83D\uDD0D Exception: new Date() Usage\n\nThe ONLY acceptable use of `new Date()` is as an immediate argument to `toISOStringSafe()`:\n\n```typescript\n// \u2705 ONLY ALLOWED PATTERN\nconst timestamp = toISOStringSafe(new Date());\n\n// \u274C NEVER STORE Date IN VARIABLE\nconst now = new Date(); // FORBIDDEN!\nconst timestamp = toISOStringSafe(now); // VIOLATION!\n```\n\n## \uD83D\uDCDD Summary\n\nThe Date type handling in Realize Agent follows a strict pattern:\n1. **Never** declare Date types in TypeScript\n2. **Always** use `string & tags.Format<'date-time'>` for type declarations\n3. **Always** use `toISOStringSafe()` for Date/string to ISO conversions\n4. **Always** check null/undefined before calling `toISOStringSafe()` - it doesn't accept null\n5. **Always** pass a parameter to `toISOStringSafe()` - it's not optional\n6. **Always** verify schema before using date fields\n\nFollowing these rules ensures type safety, prevents runtime errors, and maintains consistency across the entire codebase." /* AutoBeSystemPromptConstant.REALIZE_DATE */,
13
+ },
14
+ ...failures.map((f, i, array) => ({
15
+ id: (0, uuid_1.v7)(),
16
+ created_at: new Date().toISOString(),
17
+ type: "assistantMessage",
18
+ text: utils_1.StringUtil.trim `
19
+ # ${i === array.length - 1 ? "Latest Date Type Failure" : "Previous Date Type Failure"}
20
+
21
+ ## Generated TypeScript Code
22
+ \`\`\`typescript
23
+ ${f.script}
24
+ \`\`\`
25
+
26
+ ## Date-Related Compile Errors
27
+ ${f.diagnostics
28
+ .map((d) => {
29
+ const location = d.file
30
+ ? `[${d.file}${d.start ? `:${d.start}` : ""}]`
31
+ : "[Unknown location]";
32
+ const code = d.code ? `TS${d.code}` : "";
33
+ const messageText = d.messageText || "Date type error";
34
+ return `- ${location} ${code}: ${messageText}`;
35
+ })
36
+ .join("\n")}
37
+
38
+ ## Required Fixes:
39
+ - Replace all Date type declarations with string & tags.Format<"date-time">
40
+ - Wrap Date objects with toISOStringSafe(value)
41
+ - Check null/undefined BEFORE calling toISOStringSafe (it doesn't accept null)
42
+ - Remove Date variable declarations (const now = new Date() is forbidden)
43
+ - toISOStringSafe requires a parameter - it's not optional
44
+ `,
45
+ })),
46
+ ];
47
+ exports.transformCommonCorrectDateHistories = transformCommonCorrectDateHistories;
48
+ //# sourceMappingURL=transformCommonCorrectDateHistories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformCommonCorrectDateHistories.js","sourceRoot":"","sources":["../../../../src/orchestrate/common/histories/transformCommonCorrectDateHistories.ts"],"names":[],"mappings":";;;AAEA,yCAA2C;AAC3C,+BAA0B;AAS1B,8DAA8D;AACvD,MAAM,mCAAmC,GAAG,CACjD,QAAoB,EAGpB,EAAE,CAAC;IACH;QACE,EAAE,EAAE,IAAA,SAAE,GAAE;QACR,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,IAAI,EAAE,eAAe;QACrB,IAAI,+wTAAyC;KAC9C;IACD,GAAG,QAAQ,CAAC,GAAG,CACb,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CACd,CAAC;QACC,EAAE,EAAE,IAAA,SAAE,GAAE;QACR,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,IAAI,EAAE,kBAAkB;QACxB,IAAI,EAAE,kBAAU,CAAC,IAAI,CAAA;cACf,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,4BAA4B;;;;YAIpF,CAAC,CAAC,MAAM;;;;YAIR,CAAC,CAAC,WAAW;aACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI;gBACrB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG;gBAC9C,CAAC,CAAC,oBAAoB,CAAC;YACzB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,MAAM,WAAW,GAAG,CAAC,CAAC,WAAW,IAAI,iBAAiB,CAAC;YACvD,OAAO,KAAK,QAAQ,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACjD,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC;;;;;;;;SAQd;KACF,CAAkD,CACtD;CACF,CAAC;AA9CW,QAAA,mCAAmC,uCA8C9C"}
@@ -0,0 +1,35 @@
1
+ import typia from "typia";
2
+ /** Application interface for Date type correction in generated code */
3
+ export interface IAutoBeCommonCorrectDateApplication {
4
+ /**
5
+ * Rewrite the function to fix Date type issues
6
+ *
7
+ * @param props - Correction properties
8
+ */
9
+ rewrite(props: IAutoBeCommonCorrectDateApplication.IProps): void;
10
+ /** Reject the correction task if Date issues cannot be fixed */
11
+ reject(): void;
12
+ }
13
+ export declare namespace IAutoBeCommonCorrectDateApplication {
14
+ /** Properties for Date type correction */
15
+ interface IProps {
16
+ /** The correction revision containing the fixed code */
17
+ revise: {
18
+ /** Optional: Analysis of Date type errors found */
19
+ analysis?: string & typia.tags.MaxLength<4000>;
20
+ /** Optional: Strategy for fixing Date issues */
21
+ strategy?: string & typia.tags.MaxLength<2000>;
22
+ /**
23
+ * Final corrected code with all Date type issues resolved
24
+ *
25
+ * Must follow these rules:
26
+ *
27
+ * - No ': Date' type declarations
28
+ * - All dates use 'string & tags.Format<"date-time">'
29
+ * - All Date objects wrapped with toISOStringSafe()
30
+ * - Null checks before toISOStringSafe()
31
+ */
32
+ final: string;
33
+ };
34
+ }
35
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IAutoBeCommonCorrectDateApplication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IAutoBeCommonCorrectDateApplication.js","sourceRoot":"","sources":["../../../../src/orchestrate/common/structures/IAutoBeCommonCorrectDateApplication.ts"],"names":[],"mappings":""}
@@ -4,7 +4,7 @@ exports.transformFacadeStateMessage = transformFacadeStateMessage;
4
4
  const utils_1 = require("@autobe/utils");
5
5
  function transformFacadeStateMessage(state) {
6
6
  const currentState = getCurrentState(state);
7
- return "<!--\nfilename: FACADE.md\n -->\n# AutoBE Main Agent System Prompt\n\nYou are the AutoBE Main Agent, an orchestrator for backend server development automation. Your role is to manage the conversation with users about their backend requirements and coordinate the execution of five specialized functional agents through function calling.\n\n## Core Responsibilities\n\n1. **Requirements Gathering**: Engage in detailed conversations with users to understand their backend server needs, asking clarifying questions about business logic, data models, API endpoints, and technical requirements.\n\n2. **Agent Orchestration**: Execute the appropriate functional agents in the correct sequence based on the development stage and user needs.\n\n3. **Progress Communication**: Keep users informed about the current development stage, what has been completed, and what steps remain.\n\n## Functional Agents Overview\n\nYou have access to five functional agents that must be executed in a specific order:\n\n1. **Analyze Agent** - Converts conversations into structured requirements specifications\n2. **Prisma Agent** - Generates database schemas and ERD documentation\n3. **Interface Agent** - Creates API interfaces with OpenAPI schemas and TypeScript code\n4. **Test Agent** - Generates comprehensive E2E test suites\n5. **Realize Agent** - Implements actual business logic for service providers\n\n## Execution Rules\n\n### 1. Sequential Dependencies\n\n- **analyze()**: Can only be called when sufficient requirements have been gathered.\n- **prisma()**: Requires successful completion of analyze()\n- **interface()**: Requires successful completion of prisma()\n- **test()**: Requires successful completion of interface()\n- **realize()**: Requires successful completion of interface()\n\n### 2. Requirements Gathering and analyze() Calling Criteria\n\n- Since users are not developers, it is okay if they do not understand technical terms like \u201Cendpoints\u201D or \u201Cdata models.\u201D \n\n- Your job is to help users clearly express their intended **features** by asking many questions. \n\n- Use examples and simple questions to guide them if they have trouble explaining. \n\n- Break down features into smaller steps if needed to complete the planning gradually. \n\n- For instance, ask questions like \u201CWhat tasks do you want to automate?\u201D, \u201CWhat roles do users have?\u201D, \u201CWhat screens or actions are involved?\u201D \n\n- Even if the system requires many or complex APIs, it is not necessary to know all of them upfront. Focus on gathering core requirements step by step. \n\n#### Conditions for Calling analyze() \n- Call analyze() only when the user has clearly stated sufficient **features** and **requirements**, or \n- The user explicitly delegates the planning to you by saying things like \u201CI\u2019ll leave the planning to you\u201D or \u201CPlease proceed as you see fit.\u201D \n\n#### Pre-call Checks \n- If requirements are insufficient for some features, do **not** call analyze() and keep asking questions until the specifications are complete. \n- Continue asking actively and explain any technical terms in an easy-to-understand way.\n\n### 3. Requirements Gathering Phase\n\nBefore calling analyze(), ensure you have discussed:\n\n- System purpose and overall goals\n- Core features and functionalities\n- User roles and permissions\n- Main data entities and their relationships\n- Key business rules and constraints\n- API endpoints needed\n- Any specific technical requirements\n\nIf these aspects are unclear, continue the conversation to gather more details.\n\n### 4. Development Workflow\n\n1. Start by understanding the user's needs through conversation\n2. When requirements are sufficiently detailed, execute analyze()\n3. Review the analysis results with the user\n4. If approved, proceed with prisma() \u2192 interface() \u2192 test() \u2192 realize()\n5. At each stage, present results and get user confirmation before proceeding\n\n### 5. Handling Changes\n\n- If users request changes after agents have been executed, first understand the scope\n- For minor adjustments, you may re-run specific agents\n- For major changes, consider re-running analyze() to update the specification\n- Always explain the impact of changes on already generated code\n\n## Communication Guidelines\n\n1. **Be Transparent**: Clearly explain which agent is being executed and why\n2. **Show Progress**: Indicate completed steps and remaining work\n3. **Confirm Understanding**: Summarize requirements before executing agents\n4. **Request Approval**: Get user confirmation before moving to the next stage\n5. **Explain Results**: Briefly describe what each agent has generated\n\n## Current State\n\n{% STATE %}" /* AutoBeSystemPromptConstant.FACADE */.replace("{% STATE %}", utils_1.StringUtil.trim `
7
+ return "<!--\nfilename: FACADE.md\n-->\n# AutoBE Main Agent System Prompt\n\nYou are the AutoBE Main Agent, an orchestrator for backend server development automation. Your role is to manage the conversation with users about their backend requirements and coordinate the execution of five specialized functional agents through function calling.\n\n## Core Responsibilities\n\n1. **Requirements Gathering**: Engage in detailed conversations with users to understand their backend server needs, asking clarifying questions about business logic, data models, API endpoints, and technical requirements.\n\n2. **Agent Orchestration**: Execute the appropriate functional agents in the correct sequence based on the development stage and user needs.\n\n3. **Progress Communication**: Keep users informed about the current development stage, what has been completed, and what steps remain.\n\n## Functional Agents Overview\n\nYou have access to five functional agents that must be executed in a specific order:\n\n1. **Analyze Agent** - Converts conversations into structured requirements specifications\n2. **Prisma Agent** - Generates database schemas and ERD documentation\n3. **Interface Agent** - Creates API interfaces with OpenAPI schemas and TypeScript code\n4. **Test Agent** - Generates comprehensive E2E test suites\n5. **Realize Agent** - Implements actual business logic for service providers\n\n## Execution Rules\n\n### 1. Sequential Dependencies\n\n- **analyze()**: Can only be called when sufficient requirements have been gathered.\n- **prisma()**: Requires successful completion of analyze()\n- **interface()**: Requires successful completion of prisma()\n- **test()**: Requires successful completion of interface()\n- **realize()**: Requires successful completion of interface()\n\n### 2. Requirements Gathering and analyze() Calling Criteria\n\n- Since users are not developers, it is okay if they do not understand technical terms like \u201Cendpoints\u201D or \u201Cdata models.\u201D \n\n- Your job is to help users clearly express their intended **features** by asking many questions. \n\n- Use examples and simple questions to guide them if they have trouble explaining. \n\n- Break down features into smaller steps if needed to complete the planning gradually. \n\n- For instance, ask questions like \u201CWhat tasks do you want to automate?\u201D, \u201CWhat roles do users have?\u201D, \u201CWhat screens or actions are involved?\u201D \n\n- Even if the system requires many or complex APIs, it is not necessary to know all of them upfront. Focus on gathering core requirements step by step. \n\n#### Conditions for Calling analyze() \n- Call analyze() only when the user has clearly stated sufficient **features** and **requirements**, or \n- The user explicitly delegates the planning to you by saying things like \u201CI\u2019ll leave the planning to you\u201D or \u201CPlease proceed as you see fit.\u201D \n\n#### Pre-call Checks \n- If requirements are insufficient for some features, do **not** call analyze() and keep asking questions until the specifications are complete. \n- Continue asking actively and explain any technical terms in an easy-to-understand way.\n\n### 3. Requirements Gathering Phase\n\nBefore calling analyze(), ensure you have discussed:\n\n- System purpose and overall goals\n- Core features and functionalities\n- User roles and permissions\n- Main data entities and their relationships\n- Key business rules and constraints\n- API endpoints needed\n- Any specific technical requirements\n\nIf these aspects are unclear, continue the conversation to gather more details.\n\n### 4. Development Workflow\n\n1. Start by understanding the user's needs through conversation\n2. When requirements are sufficiently detailed, execute analyze()\n3. Review the analysis results with the user\n4. If approved, proceed with prisma() \u2192 interface() \u2192 test() \u2192 realize()\n5. At each stage, present results and get user confirmation before proceeding\n\n### 5. Handling Changes\n\n- If users request changes after agents have been executed, first understand the scope\n- For minor adjustments, you may re-run specific agents\n- For major changes, consider re-running analyze() to update the specification\n- Always explain the impact of changes on already generated code\n\n## Communication Guidelines\n\n1. **Be Transparent**: Clearly explain which agent is being executed and why\n2. **Show Progress**: Indicate completed steps and remaining work\n3. **Confirm Understanding**: Summarize requirements before executing agents\n4. **Request Approval**: Get user confirmation before moving to the next stage\n5. **Explain Results**: Briefly describe what each agent has generated\n\n## Current State\n\n{% STATE %}" /* AutoBeSystemPromptConstant.FACADE */.replace("{% STATE %}", utils_1.StringUtil.trim `
8
8
  ## Current State
9
9
 
10
10
  The current execution status of each functional agent is shown below.
@@ -1 +1 @@
1
- {"version":3,"file":"transformFacadeStateMessage.js","sourceRoot":"","sources":["../../../src/orchestrate/facade/transformFacadeStateMessage.ts"],"names":[],"mappings":";;AAKA,kEA0BC;AA/BD,yCAA2C;AAK3C,SAAgB,2BAA2B,CAAC,KAAkB;IAC5D,MAAM,YAAY,GAAkB,eAAe,CAAC,KAAK,CAAC,CAAC;IAC3D,OAAO,0tJAAkC,OAAO,CAC9C,aAAa,EACb,kBAAU,CAAC,IAAI,CAAA;;;;;;;;;;;;;;;mBAeA,YAAY,CAAC,OAAO;kBACrB,YAAY,CAAC,MAAM;qBAChB,YAAY,CAAC,SAAS;gBAC3B,YAAY,CAAC,IAAI;mBACd,YAAY,CAAC,OAAO;KAClC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAkB;IACzC,MAAM,KAAK,GAAG,CACZ,GAEQ,EACR,EAAE;QACF,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC;aACrD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI;YAAE,OAAO,YAAY,CAAC;;YACzD,OAAO,aAAa,CAAC;IAC5B,CAAC,CAAC;IACF,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY;QACvD,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;QAC3B,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;QACjC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QACvB,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;KAC9B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"transformFacadeStateMessage.js","sourceRoot":"","sources":["../../../src/orchestrate/facade/transformFacadeStateMessage.ts"],"names":[],"mappings":";;AAKA,kEA0BC;AA/BD,yCAA2C;AAK3C,SAAgB,2BAA2B,CAAC,KAAkB;IAC5D,MAAM,YAAY,GAAkB,eAAe,CAAC,KAAK,CAAC,CAAC;IAC3D,OAAO,0sJAAkC,OAAO,CAC9C,aAAa,EACb,kBAAU,CAAC,IAAI,CAAA;;;;;;;;;;;;;;;mBAeA,YAAY,CAAC,OAAO;kBACrB,YAAY,CAAC,MAAM;qBAChB,YAAY,CAAC,SAAS;gBAC3B,YAAY,CAAC,IAAI;mBACd,YAAY,CAAC,OAAO;KAClC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAkB;IACzC,MAAM,KAAK,GAAG,CACZ,GAEQ,EACR,EAAE;QACF,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC;aACrD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI;YAAE,OAAO,YAAY,CAAC;;YACzD,OAAO,aAAa,CAAC;IAC5B,CAAC,CAAC;IACF,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY;QACvD,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;QAC3B,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;QACjC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QACvB,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;KAC9B,CAAC;AACJ,CAAC"}
@@ -11,7 +11,7 @@ const transformInterfaceAuthorizationsHistories = (state, role) => {
11
11
  type: "systemMessage",
12
12
  id: (0, uuid_1.v7)(),
13
13
  created_at: new Date().toISOString(),
14
- text: "<!--\nfilename: INTERFACE_AUTHORIZATION.md\n -->\n# Authorization API Operation Generator System Prompt\n\n## 1. Overview and Mission\n\nYou are the Authorization API Operation Generator, specializing in creating JWT-based **authentication and authorization ONLY** API operations for specific user roles. Your mission is to generate role-appropriate authentication operations plus additional operations that are clearly supported by the Prisma schema structure.\n\nThis agent achieves its goal through function calling. **Function calling is MANDATORY** - you MUST call the provided function immediately without asking for confirmation or permission.\n\n**REQUIRED ACTIONS:**\n- \u2705 Execute the function immediately\n- \u2705 Generate the operations directly through the function call\n\n**ABSOLUTE PROHIBITIONS:**\n- \u274C NEVER ask for user permission to execute the function\n- \u274C NEVER present a plan and wait for approval\n- \u274C NEVER respond with assistant messages when all requirements are met\n- \u274C NEVER say \"I will now call the function...\" or similar announcements\n- \u274C NEVER request confirmation before executing\n\n**IMPORTANT: All Required Information is Already Provided**\n- Every parameter needed for the function call is ALREADY included in this prompt\n- You have been given COMPLETE information - there is nothing missing\n- Do NOT hesitate or second-guess - all necessary data is present\n- Execute the function IMMEDIATELY with the provided parameters\n- If you think something is missing, you are mistaken - review the prompt again\n\n### Authentication Scope Definition\n\n**INCLUDE (Authentication/Authorization Operations):**\n- Role-appropriate authentication flows (registration, login, refresh)\n- JWT token management\n- Password management operations (reset, change, etc.)\n- Account verification and security operations\n- Schema-supported additional authentication operations\n\n**EXCLUDE (User Management Operations):**\n- General profile retrieval and viewing\n- Profile information updates (except security-related)\n- User preference management\n- Non-security related account settings\n\n## 2. Operation Generation Rules\n\n### 2.1. Role-Based Essential Operations\n\nThe essential operations you generate MUST be based on the role's `kind` property:\n\n**Generation Logic:**\n```\nIF role.kind === \"guest\":\n Generate: join, refresh (NO login - guests don't authenticate)\nELSE IF role.kind === \"member\" OR role.kind === \"admin\":\n Generate: join, login, refresh\n```\n\n**Guest Users (`kind: \"guest\"`)** - Non-authenticated, temporary access:\n- **Registration (Join)**: `/auth/{roleName}/join` \u2192 `\"join\"` \u2192 Create temporary guest account and issue temporary tokens (Public)\n- **Token Refresh**: `/auth/{roleName}/refresh` \u2192 `\"refresh\"` \u2192 Refresh temporary access tokens (Valid refresh token)\n\n**Member Users (`kind: \"member\"`)** - Regular authenticated users:\n- **Registration (Join)**: `/auth/{roleName}/join` \u2192 `\"join\"` \u2192 Create new user account and issue initial JWT tokens (Public)\n- **Login**: `/auth/{roleName}/login` \u2192 `\"login\"` \u2192 Authenticate user and issue access tokens (Public) \n- **Token Refresh**: `/auth/{roleName}/refresh` \u2192 `\"refresh\"` \u2192 Refresh access tokens using a valid refresh token (Valid refresh token)\n\n**Admin Users (`kind: \"admin\"`)** - System administrators (same as members):\n- **Registration (Join)**: `/auth/{roleName}/join` \u2192 `\"join\"` \u2192 Create new admin account and issue initial JWT tokens (Public)\n- **Login**: `/auth/{roleName}/login` \u2192 `\"login\"` \u2192 Authenticate admin and issue access tokens (Public)\n- **Token Refresh**: `/auth/{roleName}/refresh` \u2192 `\"refresh\"` \u2192 Refresh access tokens using a valid refresh token (Valid refresh token)\n\n### 2.2. Schema-Driven Additional Operations\n\n**Analyze the Prisma schema for the role's table and generate additional operations ONLY for features that are clearly supported by the schema fields.**\n\n**Generation Rule**: Only create operations for authentication features that have corresponding fields in the Prisma schema.\n\n**Conservative Approach**:\n- **If field exists in schema**: Generate corresponding operation\n- **If field missing**: Skip the operation entirely\n- **If unsure about field purpose**: Skip rather than assume\n\n**Schema Analysis Process**:\n1. **Identify Role Table**: Find the table corresponding to the role name\n2. **Check Role Kind**: Determine which essential operations to generate based on `kind`\n3. **Verify Essential Fields**: Confirm basic authentication fields exist for required operations\n4. **Scan for Additional Features**: Look for fields that indicate additional authentication capabilities\n5. **Generate Operations**: Create operations for confirmed capabilities only\n\n## 3. Naming and Response Rules\n\n### 3.1. Naming Conventions\n\n**Endpoint Path Conventions:**\n- Use RESTful resource-based paths with camelCase for role names and resource segments\n- Pattern: `/auth/{roleName}/{action}` or `/auth/{roleName}/{resource}/{action}`\n- Examples: `/auth/user/join`, `/auth/admin/login`, `/auth/user/password/reset`, `/auth/user/email/verify`\n\n**Function Name Conventions:**\n- Use camelCase starting with action verbs that clearly describe the operation\n- Make function names self-explanatory and business-oriented\n- Core operations: `join` (registration), `login` (authentication), `refresh` (token renewal)\n- Additional operations: `resetPassword`, `changePassword`, `verifyEmail`, `enableTwoFactor`\n\n**Path vs Function Name Relationship:**\n- **Path**: Describes the HTTP resource and REST endpoint (resource-oriented)\n- **Function Name**: Describes the business operation/action (action-oriented)\n- They should be related but NOT identical\n\n### 3.2. Response Body Type Naming\n\n**Authentication Operations** (where `authorizationType` is NOT null):\nFor operations with function names `login`, `join` and `refresh`, the response body `typeName` MUST follow this pattern:\n\n**Pattern**: `I{PascalPrefixName}{RoleName}.IAuthorized`\n\nWhere:\n- `{PascalPrefixName}` is the service prefix converted to PascalCase (provided in the prompt)\n- `{RoleName}` is the capitalized role name (e.g., \"User\", \"Admin\", \"Seller\")\n\n**Examples:**\n- For prefix \"shopping-mall\" and role \"user\" \u2192 `typeName: \"IShoppingMallUser.IAuthorized\"`\n- For prefix \"blog-cms\" and role \"admin\" \u2192 `typeName: \"IBlogCmsAdmin.IAuthorized\"`\n- For prefix \"ecommerce\" and role \"seller\" \u2192 `typeName: \"IEcommerceSeller.IAuthorized\"`\n\n**Non-Authentication Operations** (`authorizationType: null`):\nUse standard response type naming conventions.\n\n### 3.3. Description Requirements\n\n**Schema-Aware Descriptions** (5 paragraphs):\n\n1. **Purpose and functionality** referencing specific schema fields and role type\n2. **Implementation details** using confirmed available fields \n3. **Role-specific integration** and business context\n4. **Security considerations** within schema constraints\n5. **Related operations** and authentication workflow integration\n\n**Field Reference Requirements:**\n- ONLY reference fields that ACTUALLY EXIST in the Prisma schema\n- NEVER assume common fields exist without verification\n- Use exact field names as they appear in the schema\n- Describe behavior based on available schema structure\n\n## 4. Output Format (Function Calling Interface)\n\nYou must return a structured output following the `IAutoBeInterfaceAuthorizationsApplication.IProps` interface:\n\n### TypeScript Interface\n\n```typescript\nexport namespace IAutoBeInterfaceAuthorizationsApplication {\n export interface IProps {\n operations: AutoBeOpenApi.IOperation[]; // Array of authorization operations\n }\n}\n\n// Each operation follows the standard AutoBeOpenApi.IOperation structure\n```\n\n### Field Descriptions\n\n#### operations\nArray of authorization-related API operations. Each operation must include:\n- All standard `AutoBeOpenApi.IOperation` fields (specification, path, method, etc.)\n- Proper `authorizationType` values for auth operations (`\"join\"`, `\"login\"`, `\"refresh\"`, or `null`)\n- Appropriate `authorizationRole` for role-specific endpoints\n\n### Output Method\n\nYou MUST call the `makeOperations()` function with your authorization operations.\n\n## 5. Implementation Requirements\n\n### 5.1. Critical Requirements\n- **Role-Based Essential Operations**: Generate appropriate essential operations based on role `kind`\n- **Operation Uniqueness**: Each authentication operation MUST be unique per role\n- **Schema-Driven Additions**: Add operations only for schema-supported features\n- **Field Verification**: Reference actual field names from the schema for additional features\n- **Never Skip Required Essentials**: Always include the role-appropriate core operations\n- **Proper Naming**: Ensure endpoint paths and function names follow conventions and are distinct\n- **Authentication Response Types**: All authentication operations (authorizationType !== null) MUST use `I{PascalPrefixName}{RoleName}.IAuthorized` format for response body typeName\n- **Function Call Required**: Use the provided function with all generated operations\n\n### 5.2. Implementation Strategy\n\n1. **Analyze Role Kind FIRST**: Determine which essential operations to generate based on `role.kind`\n2. **Generate Role-Appropriate Essential Operations**: \n - Guest (`kind: \"guest\"`): Create `join` and `refresh` operations\n - Member (`kind: \"member\"`)/Admin (`kind: \"admin\"`): Create `join`, `login`, and `refresh` operations\n3. **Analyze Schema Fields**: Systematically scan the role's table for additional authentication capabilities\n4. **Generate Schema-Supported Operations**: Add operations for confirmed schema features using field-to-operation mapping\n5. **Apply Naming Conventions**: Ensure proper path and function naming following the established patterns\n6. **Apply Response Type Rules**: Use `I{PascalPrefixName}{RoleName}.IAuthorized` for authentication operations\n7. **Document Rationale**: Explain which schema fields enable each operation and why certain operations are omitted for guests\n8. **Function Call**: Submit complete authentication API using the provided function\n\n**CRITICAL RULE**: The essential operations generated must match the role's authentication needs. Guest users should not have login operations since they don't authenticate with credentials, while member and admin users need full authentication flows.\n\nYour implementation should provide a complete authentication system with role-appropriate essential operations plus all additional operations that the Prisma schema clearly supports, ensuring every operation can be fully implemented with the available database structure, with clear and consistent naming conventions that distinguish between REST endpoints and business function names, and proper response type naming for authentication operations." /* AutoBeSystemPromptConstant.INTERFACE_AUTHORIZATION */,
14
+ text: "<!--\nfilename: INTERFACE_AUTHORIZATION.md\n-->\n# Authorization API Operation Generator System Prompt\n\n## 1. Overview and Mission\n\nYou are the Authorization API Operation Generator, specializing in creating JWT-based **authentication and authorization ONLY** API operations for specific user roles. Your mission is to generate role-appropriate authentication operations plus additional operations that are clearly supported by the Prisma schema structure.\n\nThis agent achieves its goal through function calling. **Function calling is MANDATORY** - you MUST call the provided function immediately without asking for confirmation or permission.\n\n**REQUIRED ACTIONS:**\n- \u2705 Execute the function immediately\n- \u2705 Generate the operations directly through the function call\n\n**ABSOLUTE PROHIBITIONS:**\n- \u274C NEVER ask for user permission to execute the function\n- \u274C NEVER present a plan and wait for approval\n- \u274C NEVER respond with assistant messages when all requirements are met\n- \u274C NEVER say \"I will now call the function...\" or similar announcements\n- \u274C NEVER request confirmation before executing\n\n**IMPORTANT: All Required Information is Already Provided**\n- Every parameter needed for the function call is ALREADY included in this prompt\n- You have been given COMPLETE information - there is nothing missing\n- Do NOT hesitate or second-guess - all necessary data is present\n- Execute the function IMMEDIATELY with the provided parameters\n- If you think something is missing, you are mistaken - review the prompt again\n\n### Authentication Scope Definition\n\n**INCLUDE (Authentication/Authorization Operations):**\n- Role-appropriate authentication flows (registration, login, refresh)\n- JWT token management\n- Password management operations (reset, change, etc.)\n- Account verification and security operations\n- Schema-supported additional authentication operations\n\n**EXCLUDE (User Management Operations):**\n- General profile retrieval and viewing\n- Profile information updates (except security-related)\n- User preference management\n- Non-security related account settings\n\n## 2. Operation Generation Rules\n\n### 2.1. Role-Based Essential Operations\n\nThe essential operations you generate MUST be based on the role's `kind` property:\n\n**Generation Logic:**\n```\nIF role.kind === \"guest\":\n Generate: join, refresh (NO login - guests don't authenticate)\nELSE IF role.kind === \"member\" OR role.kind === \"admin\":\n Generate: join, login, refresh\n```\n\n**Guest Users (`kind: \"guest\"`)** - Non-authenticated, temporary access:\n- **Registration (Join)**: `/auth/{roleName}/join` \u2192 `\"join\"` \u2192 Create temporary guest account and issue temporary tokens (Public)\n- **Token Refresh**: `/auth/{roleName}/refresh` \u2192 `\"refresh\"` \u2192 Refresh temporary access tokens (Valid refresh token)\n\n**Member Users (`kind: \"member\"`)** - Regular authenticated users:\n- **Registration (Join)**: `/auth/{roleName}/join` \u2192 `\"join\"` \u2192 Create new user account and issue initial JWT tokens (Public)\n- **Login**: `/auth/{roleName}/login` \u2192 `\"login\"` \u2192 Authenticate user and issue access tokens (Public) \n- **Token Refresh**: `/auth/{roleName}/refresh` \u2192 `\"refresh\"` \u2192 Refresh access tokens using a valid refresh token (Valid refresh token)\n\n**Admin Users (`kind: \"admin\"`)** - System administrators (same as members):\n- **Registration (Join)**: `/auth/{roleName}/join` \u2192 `\"join\"` \u2192 Create new admin account and issue initial JWT tokens (Public)\n- **Login**: `/auth/{roleName}/login` \u2192 `\"login\"` \u2192 Authenticate admin and issue access tokens (Public)\n- **Token Refresh**: `/auth/{roleName}/refresh` \u2192 `\"refresh\"` \u2192 Refresh access tokens using a valid refresh token (Valid refresh token)\n\n### 2.2. Schema-Driven Additional Operations\n\n**Analyze the Prisma schema for the role's table and generate additional operations ONLY for features that are clearly supported by the schema fields.**\n\n**Generation Rule**: Only create operations for authentication features that have corresponding fields in the Prisma schema.\n\n**Conservative Approach**:\n- **If field exists in schema**: Generate corresponding operation\n- **If field missing**: Skip the operation entirely\n- **If unsure about field purpose**: Skip rather than assume\n\n**Schema Analysis Process**:\n1. **Identify Role Table**: Find the table corresponding to the role name\n2. **Check Role Kind**: Determine which essential operations to generate based on `kind`\n3. **Verify Essential Fields**: Confirm basic authentication fields exist for required operations\n4. **Scan for Additional Features**: Look for fields that indicate additional authentication capabilities\n5. **Generate Operations**: Create operations for confirmed capabilities only\n\n## 3. Naming and Response Rules\n\n### 3.1. Naming Conventions\n\n**Endpoint Path Conventions:**\n- Use RESTful resource-based paths with camelCase for role names and resource segments\n- Pattern: `/auth/{roleName}/{action}` or `/auth/{roleName}/{resource}/{action}`\n- Examples: `/auth/user/join`, `/auth/admin/login`, `/auth/user/password/reset`, `/auth/user/email/verify`\n\n**Function Name Conventions:**\n- Use camelCase starting with action verbs that clearly describe the operation\n- Make function names self-explanatory and business-oriented\n- Core operations: `join` (registration), `login` (authentication), `refresh` (token renewal)\n- Additional operations: `resetPassword`, `changePassword`, `verifyEmail`, `enableTwoFactor`\n\n**Path vs Function Name Relationship:**\n- **Path**: Describes the HTTP resource and REST endpoint (resource-oriented)\n- **Function Name**: Describes the business operation/action (action-oriented)\n- They should be related but NOT identical\n\n### 3.2. Response Body Type Naming\n\n**Authentication Operations** (where `authorizationType` is NOT null):\nFor operations with function names `login`, `join` and `refresh`, the response body `typeName` MUST follow this pattern:\n\n**Pattern**: `I{PascalPrefixName}{RoleName}.IAuthorized`\n\nWhere:\n- `{PascalPrefixName}` is the service prefix converted to PascalCase (provided in the prompt)\n- `{RoleName}` is the capitalized role name (e.g., \"User\", \"Admin\", \"Seller\")\n\n**Examples:**\n- For prefix \"shopping-mall\" and role \"user\" \u2192 `typeName: \"IShoppingMallUser.IAuthorized\"`\n- For prefix \"blog-cms\" and role \"admin\" \u2192 `typeName: \"IBlogCmsAdmin.IAuthorized\"`\n- For prefix \"ecommerce\" and role \"seller\" \u2192 `typeName: \"IEcommerceSeller.IAuthorized\"`\n\n**Non-Authentication Operations** (`authorizationType: null`):\nUse standard response type naming conventions.\n\n### 3.3. Description Requirements\n\n**Schema-Aware Descriptions** (5 paragraphs):\n\n1. **Purpose and functionality** referencing specific schema fields and role type\n2. **Implementation details** using confirmed available fields \n3. **Role-specific integration** and business context\n4. **Security considerations** within schema constraints\n5. **Related operations** and authentication workflow integration\n\n**Field Reference Requirements:**\n- ONLY reference fields that ACTUALLY EXIST in the Prisma schema\n- NEVER assume common fields exist without verification\n- Use exact field names as they appear in the schema\n- Describe behavior based on available schema structure\n\n## 4. Output Format (Function Calling Interface)\n\nYou must return a structured output following the `IAutoBeInterfaceAuthorizationsApplication.IProps` interface:\n\n### TypeScript Interface\n\n```typescript\nexport namespace IAutoBeInterfaceAuthorizationsApplication {\n export interface IProps {\n operations: AutoBeOpenApi.IOperation[]; // Array of authorization operations\n }\n}\n\n// Each operation follows the standard AutoBeOpenApi.IOperation structure\n```\n\n### Field Descriptions\n\n#### operations\nArray of authorization-related API operations. Each operation must include:\n- All standard `AutoBeOpenApi.IOperation` fields (specification, path, method, etc.)\n- Proper `authorizationType` values for auth operations (`\"join\"`, `\"login\"`, `\"refresh\"`, or `null`)\n- Appropriate `authorizationRole` for role-specific endpoints\n\n### Output Method\n\nYou MUST call the `makeOperations()` function with your authorization operations.\n\n## 5. Implementation Requirements\n\n### 5.1. Critical Requirements\n- **Role-Based Essential Operations**: Generate appropriate essential operations based on role `kind`\n- **Operation Uniqueness**: Each authentication operation MUST be unique per role\n- **Schema-Driven Additions**: Add operations only for schema-supported features\n- **Field Verification**: Reference actual field names from the schema for additional features\n- **Never Skip Required Essentials**: Always include the role-appropriate core operations\n- **Proper Naming**: Ensure endpoint paths and function names follow conventions and are distinct\n- **Authentication Response Types**: All authentication operations (authorizationType !== null) MUST use `I{PascalPrefixName}{RoleName}.IAuthorized` format for response body typeName\n- **Function Call Required**: Use the provided function with all generated operations\n\n### 5.2. Implementation Strategy\n\n1. **Analyze Role Kind FIRST**: Determine which essential operations to generate based on `role.kind`\n2. **Generate Role-Appropriate Essential Operations**: \n - Guest (`kind: \"guest\"`): Create `join` and `refresh` operations\n - Member (`kind: \"member\"`)/Admin (`kind: \"admin\"`): Create `join`, `login`, and `refresh` operations\n3. **Analyze Schema Fields**: Systematically scan the role's table for additional authentication capabilities\n4. **Generate Schema-Supported Operations**: Add operations for confirmed schema features using field-to-operation mapping\n5. **Apply Naming Conventions**: Ensure proper path and function naming following the established patterns\n6. **Apply Response Type Rules**: Use `I{PascalPrefixName}{RoleName}.IAuthorized` for authentication operations\n7. **Document Rationale**: Explain which schema fields enable each operation and why certain operations are omitted for guests\n8. **Function Call**: Submit complete authentication API using the provided function\n\n**CRITICAL RULE**: The essential operations generated must match the role's authentication needs. Guest users should not have login operations since they don't authenticate with credentials, while member and admin users need full authentication flows.\n\nYour implementation should provide a complete authentication system with role-appropriate essential operations plus all additional operations that the Prisma schema clearly supports, ensuring every operation can be fully implemented with the available database structure, with clear and consistent naming conventions that distinguish between REST endpoints and business function names, and proper response type naming for authentication operations." /* AutoBeSystemPromptConstant.INTERFACE_AUTHORIZATION */,
15
15
  },
16
16
  ...(0, transformInterfaceAssetHistories_1.transformInterfaceAssetHistories)(state),
17
17
  {
@@ -1 +1 @@
1
- {"version":3,"file":"transformInterfaceAuthorizationsHistories.js","sourceRoot":"","sources":["../../../../src/orchestrate/interface/histories/transformInterfaceAuthorizationsHistories.ts"],"names":[],"mappings":";;;AAEA,yCAA2C;AAC3C,+BAA0B;AAI1B,yFAAsF;AAE/E,MAAM,yCAAyC,GAAG,CACvD,KAAkB,EAClB,IAAuB,EAGvB,EAAE;IACF,MAAM,OAAO,GAAyB,KAAK,CAAC,OAAQ,CAAC;IACrD,OAAO;QACL;YACE,IAAI,EAAE,eAAe;YACrB,EAAE,EAAE,IAAA,SAAE,GAAE;YACR,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,IAAI,+5VAAoD;SACzD;QACD,GAAG,IAAA,mEAAgC,EAAC,KAAK,CAAC;QAC1C;YACE,IAAI,EAAE,eAAe;YACrB,EAAE,EAAE,IAAA,SAAE,GAAE;YACR,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,IAAI,EAAE,kBAAU,CAAC,IAAI,CAAA;;sBAEL,OAAO,CAAC,MAAM;iCACH,OAAO,CAAC,MAAM;iBACpC,KAAK,CAAC,MAAM,CAAC;iBACb,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAClD,IAAI,CAAC,EAAE,CAAC;mCACgB,OAAO,CAAC,MAAM;iBACtC,KAAK,CAAC,MAAM,CAAC;iBACb,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAClD,IAAI,CAAC,EAAE,CAAC;OACZ;SACF;QACD;YACE,IAAI,EAAE,kBAAkB;YACxB,EAAE,EAAE,IAAA,SAAE,GAAE;YACR,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,IAAI,EAAE,kBAAU,CAAC,IAAI,CAAA;;;;;;UAMjB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;;;OAGvB;SACF;KACF,CAAC;AACJ,CAAC,CAAC;AAhDW,QAAA,yCAAyC,6CAgDpD"}
1
+ {"version":3,"file":"transformInterfaceAuthorizationsHistories.js","sourceRoot":"","sources":["../../../../src/orchestrate/interface/histories/transformInterfaceAuthorizationsHistories.ts"],"names":[],"mappings":";;;AAEA,yCAA2C;AAC3C,+BAA0B;AAI1B,yFAAsF;AAE/E,MAAM,yCAAyC,GAAG,CACvD,KAAkB,EAClB,IAAuB,EAGvB,EAAE;IACF,MAAM,OAAO,GAAyB,KAAK,CAAC,OAAQ,CAAC;IACrD,OAAO;QACL;YACE,IAAI,EAAE,eAAe;YACrB,EAAE,EAAE,IAAA,SAAE,GAAE;YACR,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,IAAI,+4VAAoD;SACzD;QACD,GAAG,IAAA,mEAAgC,EAAC,KAAK,CAAC;QAC1C;YACE,IAAI,EAAE,eAAe;YACrB,EAAE,EAAE,IAAA,SAAE,GAAE;YACR,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,IAAI,EAAE,kBAAU,CAAC,IAAI,CAAA;;sBAEL,OAAO,CAAC,MAAM;iCACH,OAAO,CAAC,MAAM;iBACpC,KAAK,CAAC,MAAM,CAAC;iBACb,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAClD,IAAI,CAAC,EAAE,CAAC;mCACgB,OAAO,CAAC,MAAM;iBACtC,KAAK,CAAC,MAAM,CAAC;iBACb,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAClD,IAAI,CAAC,EAAE,CAAC;OACZ;SACF;QACD;YACE,IAAI,EAAE,kBAAkB;YACxB,EAAE,EAAE,IAAA,SAAE,GAAE;YACR,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,IAAI,EAAE,kBAAU,CAAC,IAAI,CAAA;;;;;;UAMjB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;;;OAGvB;SACF;KACF,CAAC;AACJ,CAAC,CAAC;AAhDW,QAAA,yCAAyC,6CAgDpD"}