@scenemesh/entity-engine-aimodule 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +854 -0
  3. package/dist/ai-core-LBGYFGOK.mjs +17 -0
  4. package/dist/ai-core-LBGYFGOK.mjs.map +1 -0
  5. package/dist/ai-core-UGJWSCQN.js +17 -0
  6. package/dist/ai-core-UGJWSCQN.js.map +1 -0
  7. package/dist/ai-core-manager-B3Z34RHA.mjs +9 -0
  8. package/dist/ai-core-manager-B3Z34RHA.mjs.map +1 -0
  9. package/dist/ai-core-manager-W7SSDCG5.js +9 -0
  10. package/dist/ai-core-manager-W7SSDCG5.js.map +1 -0
  11. package/dist/ai-embeddings-5ED5LDXX.mjs +17 -0
  12. package/dist/ai-embeddings-5ED5LDXX.mjs.map +1 -0
  13. package/dist/ai-embeddings-WCXZMMTZ.js +17 -0
  14. package/dist/ai-embeddings-WCXZMMTZ.js.map +1 -0
  15. package/dist/ai-form-renderer-24IWNMX5.js +233 -0
  16. package/dist/ai-form-renderer-24IWNMX5.js.map +1 -0
  17. package/dist/ai-form-renderer-BORQABF2.mjs +233 -0
  18. package/dist/ai-form-renderer-BORQABF2.mjs.map +1 -0
  19. package/dist/ai-provider-3PSCVEEN.mjs +17 -0
  20. package/dist/ai-provider-3PSCVEEN.mjs.map +1 -0
  21. package/dist/ai-provider-WMPMVZFL.js +17 -0
  22. package/dist/ai-provider-WMPMVZFL.js.map +1 -0
  23. package/dist/ai-renderer-7WGGWH5D.mjs +134 -0
  24. package/dist/ai-renderer-7WGGWH5D.mjs.map +1 -0
  25. package/dist/ai-renderer-OILYWAJV.js +134 -0
  26. package/dist/ai-renderer-OILYWAJV.js.map +1 -0
  27. package/dist/ai-settings-DGCFPK3U.js +15 -0
  28. package/dist/ai-settings-DGCFPK3U.js.map +1 -0
  29. package/dist/ai-settings-DTXEAB64.mjs +15 -0
  30. package/dist/ai-settings-DTXEAB64.mjs.map +1 -0
  31. package/dist/ai-structured-EGZ26ZS4.mjs +13 -0
  32. package/dist/ai-structured-EGZ26ZS4.mjs.map +1 -0
  33. package/dist/ai-structured-N2FZLO4A.js +13 -0
  34. package/dist/ai-structured-N2FZLO4A.js.map +1 -0
  35. package/dist/ai-tools-B3R77HZ3.js +19 -0
  36. package/dist/ai-tools-B3R77HZ3.js.map +1 -0
  37. package/dist/ai-tools-JAPVYQGE.mjs +19 -0
  38. package/dist/ai-tools-JAPVYQGE.mjs.map +1 -0
  39. package/dist/ai.module-GAHVCBTP.js +7 -0
  40. package/dist/ai.module-GAHVCBTP.js.map +1 -0
  41. package/dist/ai.module-TTPMTPB3.mjs +7 -0
  42. package/dist/ai.module-TTPMTPB3.mjs.map +1 -0
  43. package/dist/chunk-25C2NRSD.mjs +611 -0
  44. package/dist/chunk-25C2NRSD.mjs.map +1 -0
  45. package/dist/chunk-4JQ7UOXH.js +427 -0
  46. package/dist/chunk-4JQ7UOXH.js.map +1 -0
  47. package/dist/chunk-6IUKES2L.js +290 -0
  48. package/dist/chunk-6IUKES2L.js.map +1 -0
  49. package/dist/chunk-COWPK7XN.mjs +834 -0
  50. package/dist/chunk-COWPK7XN.mjs.map +1 -0
  51. package/dist/chunk-CTEXPMVZ.js +512 -0
  52. package/dist/chunk-CTEXPMVZ.js.map +1 -0
  53. package/dist/chunk-DXQTHA75.js +573 -0
  54. package/dist/chunk-DXQTHA75.js.map +1 -0
  55. package/dist/chunk-DZFQ6I23.js +72 -0
  56. package/dist/chunk-DZFQ6I23.js.map +1 -0
  57. package/dist/chunk-J323UTPE.mjs +650 -0
  58. package/dist/chunk-J323UTPE.mjs.map +1 -0
  59. package/dist/chunk-LHNNALVF.js +834 -0
  60. package/dist/chunk-LHNNALVF.js.map +1 -0
  61. package/dist/chunk-O7SZSMXV.js +1621 -0
  62. package/dist/chunk-O7SZSMXV.js.map +1 -0
  63. package/dist/chunk-OTNOFOVW.js +650 -0
  64. package/dist/chunk-OTNOFOVW.js.map +1 -0
  65. package/dist/chunk-PRIGZEI4.mjs +72 -0
  66. package/dist/chunk-PRIGZEI4.mjs.map +1 -0
  67. package/dist/chunk-SBSZ3IPB.mjs +573 -0
  68. package/dist/chunk-SBSZ3IPB.mjs.map +1 -0
  69. package/dist/chunk-SXPA6SSD.mjs +1621 -0
  70. package/dist/chunk-SXPA6SSD.mjs.map +1 -0
  71. package/dist/chunk-T5A4KAVS.mjs +512 -0
  72. package/dist/chunk-T5A4KAVS.mjs.map +1 -0
  73. package/dist/chunk-TDRKKUNT.mjs +357 -0
  74. package/dist/chunk-TDRKKUNT.mjs.map +1 -0
  75. package/dist/chunk-TJFNODPE.js +357 -0
  76. package/dist/chunk-TJFNODPE.js.map +1 -0
  77. package/dist/chunk-V2SSI3SL.mjs +427 -0
  78. package/dist/chunk-V2SSI3SL.mjs.map +1 -0
  79. package/dist/chunk-X42L6MTY.mjs +290 -0
  80. package/dist/chunk-X42L6MTY.mjs.map +1 -0
  81. package/dist/chunk-YSVMY77H.js +611 -0
  82. package/dist/chunk-YSVMY77H.js.map +1 -0
  83. package/dist/core-ANYRS6EF.mjs +73 -0
  84. package/dist/core-ANYRS6EF.mjs.map +1 -0
  85. package/dist/core-K5K34DCS.js +73 -0
  86. package/dist/core-K5K34DCS.js.map +1 -0
  87. package/dist/core-index.d.mts +1668 -0
  88. package/dist/core-index.d.ts +1668 -0
  89. package/dist/core-index.js +101 -0
  90. package/dist/core-index.js.map +1 -0
  91. package/dist/core-index.mjs +101 -0
  92. package/dist/core-index.mjs.map +1 -0
  93. package/dist/index.d.mts +2911 -0
  94. package/dist/index.d.ts +2911 -0
  95. package/dist/index.js +1177 -0
  96. package/dist/index.js.map +1 -0
  97. package/dist/index.mjs +1177 -0
  98. package/dist/index.mjs.map +1 -0
  99. package/dist/tools-352X7A6X.mjs +366 -0
  100. package/dist/tools-352X7A6X.mjs.map +1 -0
  101. package/dist/tools-YLEX6GNO.js +366 -0
  102. package/dist/tools-YLEX6GNO.js.map +1 -0
  103. package/dist/ui-index.d.mts +627 -0
  104. package/dist/ui-index.d.ts +627 -0
  105. package/dist/ui-index.js +2354 -0
  106. package/dist/ui-index.js.map +1 -0
  107. package/dist/ui-index.mjs +2353 -0
  108. package/dist/ui-index.mjs.map +1 -0
  109. package/package.json +105 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/warnings.ts","../src/utils/streaming.ts","../src/utils/persistence.ts","../src/utils/index.ts","../src/types/index.ts","../src/index.ts"],"sourcesContent":["/**\n * Entity Engine AI - Warning System\n * \n * Global warning handling system compliant with AI SDK standards\n */\n\n// Warning type definitions\n\n/**\n * Warning type\n */\nexport type WarningType = \n | 'unsupported-setting'\n | 'unsupported-tool'\n | 'deprecated-feature'\n | 'validation-error'\n | 'performance-warning'\n | 'unknown';\n\n/**\n * Warning object\n */\nexport interface Warning {\n type: WarningType;\n message: string;\n details?: Record<string, any>;\n timestamp: number;\n source?: string;\n}\n\n/**\n * Warning handler function type\n */\nexport type WarningHandler = (warnings: Warning[]) => void;\n\n// Global warning manager\n\n/**\n * Global warning manager\n */\nclass WarningManager {\n private warnings: Warning[] = [];\n private handler: WarningHandler | boolean | null = null;\n private maxWarnings = 100; // Maximum warnings to prevent memory leaks\n\n /**\n * Initialize warning system\n */\n initialize(): void {\n // Check global configuration\n if (typeof globalThis !== 'undefined') {\n // Support AI SDK global configuration format\n const globalHandler = (globalThis as any).AI_SDK_LOG_WARNINGS;\n if (globalHandler !== undefined) {\n this.handler = globalHandler;\n } else {\n // Enable warnings by default\n this.handler = true;\n }\n } else {\n this.handler = true;\n }\n }\n\n /**\n * Set warning handler\n */\n setHandler(handler: WarningHandler | boolean): void {\n this.handler = handler;\n }\n\n /**\n * Add warning\n */\n warn(type: WarningType, message: string, details?: Record<string, any>, source?: string): void {\n const warning: Warning = {\n type,\n message,\n details,\n timestamp: Date.now(),\n source,\n };\n\n // Add to warning list\n this.warnings.push(warning);\n \n // Limit warning count\n if (this.warnings.length > this.maxWarnings) {\n this.warnings = this.warnings.slice(-this.maxWarnings);\n }\n\n // Process warning\n this.processWarning(warning);\n }\n\n /**\n * Process warning\n */\n private processWarning(warning: Warning): void {\n if (this.handler === false) {\n // Warnings are disabled\n return;\n }\n\n if (typeof this.handler === 'function') {\n // Use custom handler\n try {\n this.handler([warning]);\n } catch (error) {\n // Fallback to default handling\n this.defaultHandler([warning]);\n }\n } else {\n // Use default handler\n this.defaultHandler([warning]);\n }\n }\n\n /**\n * Default warning handler\n */\n private defaultHandler(warnings: Warning[]): void {\n warnings.forEach(warning => {\n const prefix = 'AI SDK Warning:';\n const message = `${prefix} ${warning.message}`;\n \n });\n }\n\n /**\n * Get all warnings\n */\n getWarnings(): Warning[] {\n return [...this.warnings];\n }\n\n /**\n * Clear warnings\n */\n clearWarnings(): void {\n this.warnings = [];\n }\n\n /**\n * Get warnings by type\n */\n getWarningsByType(type: WarningType): Warning[] {\n return this.warnings.filter(w => w.type === type);\n }\n\n /**\n * Get warning statistics\n */\n getWarningStats(): Record<WarningType, number> {\n const stats: Record<string, number> = {};\n \n this.warnings.forEach(warning => {\n stats[warning.type] = (stats[warning.type] || 0) + 1;\n });\n\n return stats as Record<WarningType, number>;\n }\n}\n\n// Create global instance\nconst warningManager = new WarningManager();\n\n// Initialize\nif (typeof globalThis !== 'undefined') {\n warningManager.initialize();\n}\n\n// Exported warning functions\n\n/**\n * Warn about unsupported setting\n */\nexport function warnUnsupportedSetting(setting: string, model?: string): void {\n warningManager.warn(\n 'unsupported-setting',\n `The \"${setting}\" setting is not supported${model ? ` by the ${model} model` : ''}`,\n { setting, model },\n 'entity-engine-aiui'\n );\n}\n\n/**\n * Warn about unsupported tool\n */\nexport function warnUnsupportedTool(toolName: string, model?: string): void {\n warningManager.warn(\n 'unsupported-tool',\n `The tool \"${toolName}\" is not supported${model ? ` by the ${model} model` : ''}`,\n { toolName, model },\n 'entity-engine-aiui'\n );\n}\n\n/**\n * Warn about deprecated feature\n */\nexport function warnDeprecatedFeature(feature: string, replacement?: string): void {\n const message = `The \"${feature}\" feature is deprecated${replacement ? ` and will be replaced with \"${replacement}\"` : ''}`;\n warningManager.warn(\n 'deprecated-feature',\n message,\n { feature, replacement },\n 'entity-engine-aiui'\n );\n}\n\n/**\n * Warn about validation error\n */\nexport function warnValidationError(message: string, details?: Record<string, any>): void {\n warningManager.warn(\n 'validation-error',\n message,\n details,\n 'entity-engine-aiui'\n );\n}\n\n/**\n * Warn about performance issue\n */\nexport function warnPerformance(message: string, details?: Record<string, any>): void {\n warningManager.warn(\n 'performance-warning',\n message,\n details,\n 'entity-engine-aiui'\n );\n}\n\n/**\n * Emit general warning\n */\nexport function warn(message: string, details?: Record<string, any>): void {\n warningManager.warn(\n 'unknown',\n message,\n details,\n 'entity-engine-aiui'\n );\n}\n\n/**\n * Set warning handler\n */\nexport function setWarningHandler(handler: WarningHandler | boolean): void {\n warningManager.setHandler(handler);\n}\n\n/**\n * Get all warnings\n */\nexport function getWarnings(): Warning[] {\n return warningManager.getWarnings();\n}\n\n/**\n * Clear warnings\n */\nexport function clearWarnings(): void {\n warningManager.clearWarnings();\n}\n\n/**\n * Get warning statistics\n */\nexport function getWarningStats(): Record<WarningType, number> {\n return warningManager.getWarningStats();\n}\n\n// Development environment enhancements\n\n// Provide additional functionality in development environment\nif (process.env.NODE_ENV === 'development') {\n // Add warning manager to global object for debugging\n if (typeof globalThis !== 'undefined') {\n (globalThis as any).__ENTITY_ENGINE_AIUI_WARNINGS__ = {\n manager: warningManager,\n getWarnings,\n clearWarnings,\n getWarningStats,\n setWarningHandler,\n };\n }\n\n // Add more detailed stack tracing\n const originalWarn = warningManager.warn.bind(warningManager);\n (warningManager as any).warn = (\n type: WarningType,\n message: string,\n details?: Record<string, any>,\n source?: string\n ) => {\n const stack = new Error().stack;\n const enhancedDetails = {\n ...details,\n stack: stack?.split('\\n').slice(2, 5).join('\\n'), // Keep only first 3 stack levels\n };\n \n originalWarn(type, message, enhancedDetails, source);\n };\n}\n\n// Default export\n\nexport default {\n warn,\n warnUnsupportedSetting,\n warnUnsupportedTool,\n warnDeprecatedFeature,\n warnValidationError,\n warnPerformance,\n setWarningHandler,\n getWarnings,\n clearWarnings,\n getWarningStats,\n};","/**\n * Entity Engine AI - Streaming Utils\n * \n * Stream processing utilities for message stream reading and processing\n */\n\nimport type { UIMessage } from 'ai';\n\n// Message stream reader\n\n/**\n * Read UI message stream options\n */\nexport interface ReadUIMessageStreamOptions {\n stream: ReadableStream;\n message?: UIMessage;\n onMessage?: (message: UIMessage) => void;\n onError?: (error: Error) => void;\n onComplete?: (finalMessage: UIMessage) => void;\n}\n\n/**\n * UI message stream reader\n */\nexport class UIMessageStreamReader {\n private reader: ReadableStreamDefaultReader | null = null;\n private currentMessage: UIMessage | null = null;\n private isReading = false;\n\n constructor(private options: ReadUIMessageStreamOptions) {\n this.currentMessage = options.message || null;\n }\n\n /**\n * Start reading stream\n */\n async *read(): AsyncIterableIterator<UIMessage> {\n if (this.isReading) {\n throw new Error('Stream is already being read');\n }\n\n this.isReading = true;\n this.reader = this.options.stream.getReader();\n\n try {\n let done = false;\n \n while (!done) {\n const { value, done: streamDone } = await this.reader.read();\n done = streamDone;\n\n if (value) {\n const message = this.processChunk(value);\n if (message) {\n this.options.onMessage?.(message);\n yield message;\n }\n }\n }\n\n if (this.currentMessage) {\n this.options.onComplete?.(this.currentMessage);\n }\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n this.options.onError?.(err);\n throw err;\n } finally {\n this.cleanup();\n }\n }\n\n /**\n * Process stream chunk\n */\n private processChunk(chunk: any): UIMessage | null {\n try {\n // If chunk is string, try to parse JSON\n if (typeof chunk === 'string') {\n chunk = JSON.parse(chunk);\n }\n\n // If chunk is Uint8Array, convert to string then parse\n if (chunk instanceof Uint8Array) {\n const decoder = new TextDecoder();\n chunk = JSON.parse(decoder.decode(chunk));\n }\n\n // Handle different types of stream data\n if (chunk.type) {\n return this.handleStreamData(chunk);\n }\n\n return null;\n } catch (error) {\n return null;\n }\n }\n\n /**\n * Handle stream data\n */\n private handleStreamData(data: any): UIMessage | null {\n switch (data.type) {\n case 'message-start':\n return this.handleMessageStart(data);\n \n case 'message-delta':\n return this.handleMessageDelta(data);\n \n case 'message-stop':\n return this.handleMessageStop(data);\n \n case 'text-delta':\n return this.handleTextDelta(data);\n \n case 'tool-call':\n return this.handleToolCall(data);\n \n case 'tool-result':\n return this.handleToolResult(data);\n \n default:\n return null;\n }\n }\n\n /**\n * Handle message start\n */\n private handleMessageStart(data: any): UIMessage {\n this.currentMessage = {\n id: data.messageId || this.generateId(),\n role: data.role || 'assistant',\n parts: [],\n metadata: data.metadata || {},\n ...data,\n } as UIMessage;\n\n return { ...this.currentMessage };\n }\n\n /**\n * Handle message delta\n */\n private handleMessageDelta(data: any): UIMessage | null {\n if (!this.currentMessage) {\n return null;\n }\n\n // Update message content\n if (data.content) {\n // Find or create text part\n let textPart = this.currentMessage.parts.find(p => p.type === 'text') as any;\n if (!textPart) {\n textPart = { type: 'text', text: '' };\n this.currentMessage.parts.push(textPart);\n }\n \n textPart.text += data.content;\n }\n\n return { ...this.currentMessage };\n }\n\n /**\n * Handle message stop\n */\n private handleMessageStop(data: any): UIMessage | null {\n if (!this.currentMessage) {\n return null;\n }\n\n // Update final state\n if (data.finishReason) {\n this.currentMessage.metadata = {\n ...(this.currentMessage.metadata || {}),\n finishReason: data.finishReason,\n };\n }\n\n return { ...this.currentMessage };\n }\n\n /**\n * Handle text delta\n */\n private handleTextDelta(data: any): UIMessage | null {\n if (!this.currentMessage) {\n // Create new message\n this.currentMessage = {\n id: this.generateId(),\n role: 'assistant',\n parts: [{ type: 'text', text: data.text || '' }],\n };\n } else {\n // Update existing message\n let textPart = this.currentMessage.parts.find(p => p.type === 'text') as any;\n if (!textPart) {\n textPart = { type: 'text', text: '' };\n this.currentMessage.parts.push(textPart);\n }\n \n textPart.text += data.text || '';\n }\n\n return { ...this.currentMessage };\n }\n\n /**\n * Handle tool call\n */\n private handleToolCall(data: any): UIMessage | null {\n if (!this.currentMessage) {\n this.currentMessage = {\n id: this.generateId(),\n role: 'assistant',\n parts: [],\n };\n }\n\n // Add tool call part\n const toolPart = {\n type: 'dynamic-tool' as const,\n toolCallId: data.toolCallId,\n toolName: data.toolName,\n input: data.input,\n state: 'input-available' as const,\n } as any;\n\n this.currentMessage.parts.push(toolPart);\n return { ...this.currentMessage };\n }\n\n /**\n * Handle tool result\n */\n private handleToolResult(data: any): UIMessage | null {\n if (!this.currentMessage) {\n return null;\n }\n\n // Find corresponding tool call part and update\n const toolPart = this.currentMessage.parts.find(\n p => p.type.startsWith('tool-') && (p as any).toolCallId === data.toolCallId\n ) as any;\n\n if (toolPart) {\n toolPart.output = data.result;\n toolPart.state = data.error ? 'output-error' : 'output-available';\n if (data.error) {\n toolPart.errorText = data.error;\n }\n }\n\n return { ...this.currentMessage };\n }\n\n /**\n * Generate ID\n */\n private generateId(): string {\n return Math.random().toString(36).substr(2, 9);\n }\n\n /**\n * Stop reading\n */\n async stop(): Promise<void> {\n if (this.reader) {\n await this.reader.cancel();\n }\n this.cleanup();\n }\n\n /**\n * Cleanup resources\n */\n private cleanup(): void {\n this.isReading = false;\n if (this.reader) {\n this.reader.releaseLock();\n this.reader = null;\n }\n }\n}\n\n/**\n * Read UI message stream\n */\nexport async function* readUIMessageStream(\n options: ReadUIMessageStreamOptions\n): AsyncIterableIterator<UIMessage> {\n const reader = new UIMessageStreamReader(options);\n yield* reader.read();\n}\n\n// Stream resume utilities\n\n/**\n * Stream resume options\n */\nexport interface StreamResumeOptions {\n chatId: string;\n messageId?: string;\n endpoint?: string;\n headers?: Record<string, string>;\n}\n\n/**\n * Resume stream\n */\nexport async function resumeStream({\n chatId,\n messageId,\n endpoint = '/api/chat/resume',\n headers = {},\n}: StreamResumeOptions): Promise<ReadableStream> {\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: JSON.stringify({\n chatId,\n messageId,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Resume request failed: ${response.status}`);\n }\n\n if (!response.body) {\n throw new Error('No response body received');\n }\n\n return response.body;\n}\n\n// Stream state management\n\n/**\n * Stream state\n */\nexport type StreamState = 'idle' | 'connecting' | 'streaming' | 'complete' | 'error' | 'aborted';\n\n/**\n * Stream state manager\n */\nexport class StreamStateManager {\n private state: StreamState = 'idle';\n private listeners = new Set<(state: StreamState) => void>();\n private abortController: AbortController | null = null;\n\n /**\n * Get current state\n */\n getState(): StreamState {\n return this.state;\n }\n\n /**\n * Set state\n */\n setState(newState: StreamState): void {\n if (this.state !== newState) {\n this.state = newState;\n this.notifyListeners();\n }\n }\n\n /**\n * Listen to state changes\n */\n onStateChange(listener: (state: StreamState) => void): () => void {\n this.listeners.add(listener);\n \n // Return function to cancel listening\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n /**\n * Start stream\n */\n startStream(): AbortController {\n this.abortController = new AbortController();\n this.setState('connecting');\n return this.abortController;\n }\n\n /**\n * Abort stream\n */\n abortStream(): void {\n if (this.abortController) {\n this.abortController.abort();\n this.abortController = null;\n }\n this.setState('aborted');\n }\n\n /**\n * Complete stream\n */\n completeStream(): void {\n this.abortController = null;\n this.setState('complete');\n }\n\n /**\n * Stream error\n */\n errorStream(): void {\n this.abortController = null;\n this.setState('error');\n }\n\n /**\n * Reset state\n */\n reset(): void {\n this.abortController = null;\n this.setState('idle');\n }\n\n /**\n * Notify listeners\n */\n private notifyListeners(): void {\n this.listeners.forEach(listener => {\n try {\n listener(this.state);\n } catch (error) {\n // Ignore listener errors\n }\n });\n }\n\n /**\n * Dispose\n */\n dispose(): void {\n this.abortController = null;\n this.listeners.clear();\n this.setState('idle');\n }\n}","/**\n * 🎯 Entity Engine AIUI - Message Persistence Utils\n * \n * 消息持久化工具,支持消息验证、ID生成和存储管理\n */\n\nimport type { z } from 'zod';\nimport type { UIMessage } from 'ai';\n\n// ================================\n// 🎯 ID生成器\n// ================================\n\n/**\n * ID生成器选项\n */\nexport interface IdGeneratorOptions {\n prefix?: string;\n size?: number;\n}\n\n/**\n * 创建ID生成器\n */\nexport function createIdGenerator(options: IdGeneratorOptions = {}) {\n const { prefix = '', size = 12 } = options;\n \n return (): string => {\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result = '';\n \n for (let i = 0; i < size; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n \n return prefix ? `${prefix}-${result}` : result;\n };\n}\n\n/**\n * 生成唯一ID\n */\nexport function generateId(): string {\n return createIdGenerator()();\n}\n\n// ================================\n// 🎯 消息验证\n// ================================\n\n/**\n * 消息验证选项\n */\nexport interface ValidateUIMessagesOptions<T extends Record<string, any> = any> {\n messages: UIMessage[];\n tools?: T;\n dataPartsSchema?: z.ZodSchema;\n metadataSchema?: z.ZodSchema;\n}\n\n/**\n * 验证UI消息\n */\nexport async function validateUIMessages<T extends Record<string, any>>({\n messages,\n tools,\n dataPartsSchema,\n metadataSchema,\n}: ValidateUIMessagesOptions<T>): Promise<UIMessage[]> {\n const validatedMessages: UIMessage[] = [];\n\n for (const message of messages) {\n try {\n const validatedMessage = await validateSingleMessage(message, {\n tools,\n dataPartsSchema,\n metadataSchema,\n });\n validatedMessages.push(validatedMessage);\n } catch (error) {\n // 如果验证失败,记录错误但继续处理\n // 可以选择跳过无效消息或使用默认值\n validatedMessages.push(sanitizeMessage(message));\n }\n }\n\n return validatedMessages;\n}\n\n/**\n * 验证单个消息\n */\nasync function validateSingleMessage<T extends Record<string, any>>(\n message: UIMessage,\n options: Omit<ValidateUIMessagesOptions<T>, 'messages'>\n): Promise<UIMessage> {\n const { tools, dataPartsSchema, metadataSchema } = options;\n\n // 验证消息结构\n if (!message.id || !message.role || !Array.isArray(message.parts)) {\n throw new Error('Invalid message structure');\n }\n\n // 验证消息部分\n const validatedParts = [];\n for (const part of message.parts) {\n const validatedPart = await validateMessagePart(part, tools);\n validatedParts.push(validatedPart);\n }\n\n // 验证元数据\n let validatedMetadata = message.metadata;\n if (metadataSchema && message.metadata) {\n try {\n validatedMetadata = metadataSchema.parse(message.metadata);\n } catch (error) {\n validatedMetadata = undefined;\n }\n }\n\n return {\n ...message,\n parts: validatedParts,\n metadata: validatedMetadata,\n };\n}\n\n/**\n * 验证消息部分\n */\nasync function validateMessagePart(part: any, tools?: Record<string, any>): Promise<any> {\n // 验证文本部分\n if (part.type === 'text') {\n if (typeof part.text !== 'string') {\n throw new Error('Text part must have a string text property');\n }\n return part;\n }\n\n // 验证文件部分\n if (part.type === 'file') {\n if (!part.filename || !part.url) {\n throw new Error('File part must have filename and url properties');\n }\n return part;\n }\n\n // 验证工具调用部分\n if (part.type.startsWith('tool-') || part.type === 'dynamic-tool') {\n const toolName = part.type === 'dynamic-tool' ? part.toolName : part.type.replace('tool-', '');\n \n // 如果提供了工具定义,验证工具是否存在\n if (tools && toolName && !tools[toolName]) {\n console.warn(`Tool ${toolName} not found in provided tools`);\n }\n \n return part;\n }\n\n // 验证数据部分\n if (part.type.startsWith('data-')) {\n if (!part.data) {\n throw new Error('Data part must have a data property');\n }\n return part;\n }\n\n return part;\n}\n\n/**\n * 清理消息(移除无效部分)\n */\nfunction sanitizeMessage(message: UIMessage): UIMessage {\n const sanitizedParts = message.parts.filter(part => \n // 保留有效的部分类型\n part && typeof part === 'object' && part.type\n );\n\n return {\n ...message,\n parts: sanitizedParts.length > 0 ? sanitizedParts : [\n { type: 'text', text: '[Message content could not be validated]' }\n ],\n };\n}\n\n// ================================\n// 🎯 类型验证错误\n// ================================\n\n/**\n * 类型验证错误类\n */\nexport class TypeValidationError extends Error {\n constructor(message: string, public readonly details?: any) {\n super(message);\n this.name = 'TypeValidationError';\n }\n}\n\n// ================================\n// 🎯 消息存储接口\n// ================================\n\n/**\n * 消息存储接口\n */\nexport interface MessageStore {\n createChat(): Promise<string>;\n loadChat(id: string): Promise<UIMessage[]>;\n saveChat(options: { chatId: string; messages: UIMessage[] }): Promise<void>;\n deleteChat(id: string): Promise<void>;\n listChats(): Promise<Array<{ id: string; title?: string; updatedAt: Date }>>;\n}\n\n/**\n * 内存消息存储(用于开发和测试)\n */\nexport class InMemoryMessageStore implements MessageStore {\n private chats = new Map<string, UIMessage[]>();\n private metadata = new Map<string, { title?: string; updatedAt: Date }>();\n\n async createChat(): Promise<string> {\n const id = generateId();\n this.chats.set(id, []);\n this.metadata.set(id, { updatedAt: new Date() });\n return id;\n }\n\n async loadChat(id: string): Promise<UIMessage[]> {\n const messages = this.chats.get(id);\n if (!messages) {\n throw new Error(`Chat ${id} not found`);\n }\n return [...messages];\n }\n\n async saveChat({ chatId, messages }: { chatId: string; messages: UIMessage[] }): Promise<void> {\n this.chats.set(chatId, [...messages]);\n \n // 更新元数据\n const existing = this.metadata.get(chatId) || {};\n this.metadata.set(chatId, {\n ...existing,\n updatedAt: new Date(),\n title: (existing as any).title || this.extractTitle(messages),\n });\n }\n\n async deleteChat(id: string): Promise<void> {\n this.chats.delete(id);\n this.metadata.delete(id);\n }\n\n async listChats(): Promise<Array<{ id: string; title?: string; updatedAt: Date }>> {\n return Array.from(this.metadata.entries()).map(([id, meta]) => ({\n id,\n ...meta,\n }));\n }\n\n private extractTitle(messages: UIMessage[]): string {\n // 提取第一个用户消息作为标题\n const firstUserMessage = messages.find(m => m.role === 'user');\n if (firstUserMessage) {\n const textPart = firstUserMessage.parts.find(p => p.type === 'text') as any;\n if (textPart?.text) {\n return textPart.text.slice(0, 50) + (textPart.text.length > 50 ? '...' : '');\n }\n }\n return 'Untitled Chat';\n }\n}\n\n/**\n * 本地存储消息存储\n */\nexport class LocalStorageMessageStore implements MessageStore {\n private readonly keyPrefix = 'entity-engine-aiui-chat-';\n\n async createChat(): Promise<string> {\n const id = generateId();\n const key = this.keyPrefix + id;\n \n const chatData = {\n id,\n messages: [],\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n };\n\n localStorage.setItem(key, JSON.stringify(chatData));\n return id;\n }\n\n async loadChat(id: string): Promise<UIMessage[]> {\n const key = this.keyPrefix + id;\n const data = localStorage.getItem(key);\n \n if (!data) {\n throw new Error(`Chat ${id} not found`);\n }\n\n try {\n const chatData = JSON.parse(data);\n return chatData.messages || [];\n } catch (error) {\n throw new Error(`Failed to parse chat data: ${error}`);\n }\n }\n\n async saveChat({ chatId, messages }: { chatId: string; messages: UIMessage[] }): Promise<void> {\n const key = this.keyPrefix + chatId;\n const existing = localStorage.getItem(key);\n \n const chatData: any = {\n id: chatId,\n messages,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n };\n\n if (existing) {\n try {\n const parsedExisting = JSON.parse(existing);\n chatData.createdAt = parsedExisting.createdAt || chatData.createdAt;\n } catch {\n // Ignore validation errors\n }\n }\n\n localStorage.setItem(key, JSON.stringify(chatData));\n }\n\n async deleteChat(id: string): Promise<void> {\n const key = this.keyPrefix + id;\n localStorage.removeItem(key);\n }\n\n async listChats(): Promise<Array<{ id: string; title?: string; updatedAt: Date }>> {\n const chats: Array<{ id: string; title?: string; updatedAt: Date }> = [];\n \n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.keyPrefix)) {\n try {\n const data = localStorage.getItem(key);\n if (data) {\n const chatData = JSON.parse(data);\n chats.push({\n id: chatData.id,\n title: this.extractTitle(chatData.messages || []),\n updatedAt: new Date(chatData.updatedAt || chatData.createdAt),\n });\n }\n } catch {\n // Ignore part validation errors\n }\n }\n }\n\n return chats.sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());\n }\n\n private extractTitle(messages: UIMessage[]): string {\n const firstUserMessage = messages.find(m => m.role === 'user');\n if (firstUserMessage) {\n const textPart = firstUserMessage.parts.find(p => p.type === 'text') as any;\n if (textPart?.text) {\n return textPart.text.slice(0, 50) + (textPart.text.length > 50 ? '...' : '');\n }\n }\n return 'Untitled Chat';\n }\n}","/**\n * Entity Engine AI - Utility Functions\n * \n * Collection of utility functions for common operations\n */\n\nimport type { ExtendedUIMessage } from '../types/ui-types';\n\n// Export other utility modules\n\nexport * from './warnings';\nexport * from './streaming';\nexport * from './persistence';\n\n// Message processing utilities\n\n/**\n * Extract text content from message\n */\nexport function extractMessageText(message: ExtendedUIMessage): string {\n return message.parts\n .filter(part => part.type === 'text')\n .map(part => (part as any).text)\n .join('\\n');\n}\n\n/**\n * Check if message contains tool calls\n */\nexport function hasToolCalls(message: ExtendedUIMessage): boolean {\n return message.parts.some(part => \n part.type.startsWith('tool-') || part.type === 'dynamic-tool'\n );\n}\n\n/**\n * Get tool calls list from message\n */\nexport function getToolCalls(message: ExtendedUIMessage): Array<{\n toolName: string;\n state: string;\n input?: any;\n output?: any;\n}> {\n return message.parts\n .filter(part => part.type.startsWith('tool-') || part.type === 'dynamic-tool')\n .map(part => ({\n toolName: part.type === 'dynamic-tool' \n ? (part as any).toolName \n : part.type.replace('tool-', ''),\n state: (part as any).state || 'unknown',\n input: (part as any).input,\n output: (part as any).output,\n }));\n}\n\n/**\n * Check if message contains file attachments\n */\nexport function hasFileAttachments(message: ExtendedUIMessage): boolean {\n return message.parts.some(part => part.type === 'file');\n}\n\n/**\n * Get file attachments list from message\n */\nexport function getFileAttachments(message: ExtendedUIMessage) {\n return message.parts\n .filter(part => part.type === 'file')\n .map(part => part as any);\n}\n\n// Time formatting utilities\n\n/**\n * Format timestamp\n */\nexport function formatTimestamp(timestamp?: number, options?: {\n format?: 'short' | 'long' | 'relative';\n includeDate?: boolean;\n}): string {\n if (!timestamp) return '';\n \n const date = new Date(timestamp);\n const { format = 'short', includeDate = false } = options || {};\n\n switch (format) {\n case 'short':\n return date.toLocaleTimeString([], { \n hour: '2-digit', \n minute: '2-digit',\n ...(includeDate && { \n month: 'short', \n day: 'numeric' \n })\n });\n \n case 'long':\n return date.toLocaleString();\n \n case 'relative':\n return formatRelativeTime(timestamp);\n \n default:\n return date.toLocaleTimeString();\n }\n}\n\n/**\n * Format relative time\n */\nexport function formatRelativeTime(timestamp: number): string {\n const now = Date.now();\n const diff = now - timestamp;\n \n const minute = 60 * 1000;\n const hour = minute * 60;\n const day = hour * 24;\n const week = day * 7;\n const month = day * 30;\n const year = day * 365;\n\n if (diff < minute) {\n return 'Just now';\n } else if (diff < hour) {\n const minutes = Math.floor(diff / minute);\n return `${minutes}m ago`;\n } else if (diff < day) {\n const hours = Math.floor(diff / hour);\n return `${hours}h ago`;\n } else if (diff < week) {\n const days = Math.floor(diff / day);\n return `${days}d ago`;\n } else if (diff < month) {\n const weeks = Math.floor(diff / week);\n return `${weeks}w ago`;\n } else if (diff < year) {\n const months = Math.floor(diff / month);\n return `${months}mo ago`;\n } else {\n const years = Math.floor(diff / year);\n return `${years}y ago`;\n }\n}\n\n// File processing utilities\n\n/**\n * Format file size\n */\nexport function formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 B';\n \n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n \n return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];\n}\n\n/**\n * Get file extension\n */\nexport function getFileExtension(filename: string): string {\n return filename.split('.').pop()?.toLowerCase() || '';\n}\n\n/**\n * Check if file type is accepted\n */\nexport function isFileTypeAccepted(\n file: File, \n acceptedTypes: string[]\n): boolean {\n return acceptedTypes.some(type => {\n if (type.endsWith('/*')) {\n return file.type.startsWith(type.slice(0, -1));\n }\n return file.type === type;\n });\n}\n\n/**\n * Create file URL\n */\nexport function createFileUrl(file: File): string {\n return URL.createObjectURL(file);\n}\n\n/**\n * Revoke file URL\n */\nexport function revokeFileUrl(url: string): void {\n URL.revokeObjectURL(url);\n}\n\n// String processing utilities\n\n/**\n * Truncate text\n */\nexport function truncateText(text: string, maxLength: number): string {\n if (text.length <= maxLength) return text;\n return text.slice(0, maxLength - 3) + '...';\n}\n\n/**\n * Highlight search terms\n */\nexport function highlightSearchTerms(text: string, searchTerms: string[]): string {\n if (!searchTerms.length) return text;\n \n let highlightedText = text;\n searchTerms.forEach(term => {\n const regex = new RegExp(`(${term})`, 'gi');\n highlightedText = highlightedText.replace(regex, '<mark>$1</mark>');\n });\n \n return highlightedText;\n}\n\n/**\n * Convert camelCase to space-separated\n */\nexport function camelToSpaced(str: string): string {\n return str.replace(/([A-Z])/g, ' $1').trim();\n}\n\n// Data validation utilities\n\n/**\n * Check if string is valid URL\n */\nexport function isValidUrl(string: string): boolean {\n try {\n new URL(string);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Check if string is valid JSON\n */\nexport function isValidJson(string: string): boolean {\n try {\n JSON.parse(string);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Safe JSON parse\n */\nexport function safeJsonParse<T>(string: string, fallback: T): T {\n try {\n return JSON.parse(string);\n } catch {\n return fallback;\n }\n}\n\n// CSS class name utilities\n\n/**\n * Combine CSS class names (simplified clsx)\n */\nexport function cn(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(' ');\n}\n\n// Error handling utilities\n\n/**\n * Safely execute async function\n */\nexport async function safeAsync<T>(\n fn: () => Promise<T>,\n fallback?: T\n): Promise<{ data?: T; error?: Error }> {\n try {\n const data = await fn();\n return { data };\n } catch (error) {\n return { \n error: error instanceof Error ? error : new Error(String(error)),\n ...(fallback !== undefined && { data: fallback })\n };\n }\n}\n\n/**\n * Create error message\n */\nexport function createErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (typeof error === 'string') {\n return error;\n }\n return 'An unknown error occurred';\n}\n\n// Performance utilities\n\n/**\n * Debounce function\n */\nexport function debounce<T extends (...args: any[]) => any>(\n func: T,\n delay: number\n): (...args: Parameters<T>) => void {\n let timeoutId: NodeJS.Timeout;\n \n return function debouncedFunction(this: any, ...args: Parameters<T>) {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => func.apply(this, args), delay);\n };\n}\n\n/**\n * Throttle function\n */\nexport function throttle<T extends (...args: any[]) => any>(\n func: T,\n delay: number\n): (...args: Parameters<T>) => void {\n let inThrottle: boolean;\n \n return function throttledFunction(this: any, ...args: Parameters<T>) {\n if (!inThrottle) {\n func.apply(this, args);\n inThrottle = true;\n setTimeout(() => inThrottle = false, delay);\n }\n };\n}\n\n// Local storage utilities\n\n/**\n * Safe localStorage operations\n */\nexport const storage = {\n get<T>(key: string, fallback?: T): T | null {\n if (typeof window === 'undefined') return fallback || null;\n \n try {\n const item = localStorage.getItem(key);\n return item ? JSON.parse(item) : (fallback || null);\n } catch {\n return fallback || null;\n }\n },\n\n set<T>(key: string, value: T): boolean {\n if (typeof window === 'undefined') return false;\n \n try {\n localStorage.setItem(key, JSON.stringify(value));\n return true;\n } catch {\n return false;\n }\n },\n\n remove(key: string): boolean {\n if (typeof window === 'undefined') return false;\n \n try {\n localStorage.removeItem(key);\n return true;\n } catch {\n return false;\n }\n },\n\n clear(): boolean {\n if (typeof window === 'undefined') return false;\n \n try {\n localStorage.clear();\n return true;\n } catch {\n return false;\n }\n }\n};","/**\n * Entity Engine AI Module - Type Definitions\n * \n * Consolidates all type definitions from Core and UI modules, providing unified type interface\n */\n\n// Core module types\n\n// Export all core types\nexport * from './core-types';\n\n// Event types\nexport type {\n ChatEvents\n} from './ui-types';\n\n// Data types - removed non-standard types\nexport type {\n CustomDataParts\n} from './ui-types';\n\n// Transport types\nexport type {\n CustomTransportOptions\n} from './ui-types';\n\n// Theme types\nexport type {\n ThemeConfig,\n StyleVariants\n} from './ui-types';\n\n// Component types\nexport type {\n ChatDialogProps,\n FileViewerProps,\n MessageBubbleProps\n} from './ui-types';\n\n// Integration types\nexport type {\n StreamResult,\n GenerateResult,\n StreamTextOptions,\n GenerateTextOptions\n} from '../core/ai-core';\n\n// UI module types\n\n// Tool related types\nexport type {\n ToolCallState,\n ToolDefinition,\n ToolExecutionResult,\n UserInteractionToolOptions\n} from './ui-types';\n\n// Basic message types\nexport type {\n MessageRole,\n MessageStatus,\n CustomUIMessage,\n StandardUIMessage,\n ExtendedUIMessage\n} from './ui-types';\n\n// Structured Data types\nexport type {\n StreamObjectOptions,\n GenerateObjectOptions,\n StreamObjectResultType,\n GenerateObjectResultType\n} from '../core/ai-structured';\n\n// Tools Integration types\nexport type {\n ToolChoice,\n StepResult,\n DynamicTool,\n AdvancedTool,\n StopCondition,\n ToolCallOptions,\n MCPClientConfig,\n ToolExecutionOptions\n} from '../core/ai-tools';\n\n// Provider Management types\nexport type {\n ModelUsageStats,\n ModelAliasConfig,\n CustomProviderConfig,\n GlobalProviderConfig,\n ProviderHealthStatus,\n ProviderRegistryConfig\n} from '../core/ai-provider';\n\n// Settings Management types\nexport type {\n ModelSettings,\n SettingsPreset,\n CommonModelSettings,\n DynamicSettingsConfig,\n ProviderSpecificSettings,\n SettingsValidationResult\n} from '../core/ai-settings';\n\n// Embeddings Integration types\nexport type {\n EmbedResult,\n EmbedOptions,\n EmbedManyConfig,\n EmbedManyResult,\n EmbedManyOptions,\n SimilarityResult,\n EmbeddingModelConfig,\n EmbeddingProviderInfo\n} from '../core/ai-embeddings';\n\n// Hook types\nexport type {\n UseChatHelpers as ChatReturn,\n UseChatOptions as ChatOptions,\n UseCompletionHelpers as CompletionReturn,\n UseCompletionOptions as CompletionOptions,\n Experimental_UseObjectHelpers as ObjectReturn,\n Experimental_UseObjectOptions as ObjectOptions\n} from '@ai-sdk/react';\n\n// Core types re-export\n\n// Core types export\nexport type {\n Tool,\n ToolSet,\n Provider,\n UIMessage,\n ImageModel,\n DataUIPart,\n FileUIPart,\n TextUIPart,\n CoreMessage,\n FinishReason,\n LanguageModel,\n UIMessagePart,\n EmbeddingModel,\n TextStreamPart,\n ToolResultPart,\n StreamTextResult,\n GenerateTextResult,\n StreamObjectResult,\n LanguageModelUsage,\n GenerateObjectResult,\n LanguageModelRequestMetadata,\n LanguageModelResponseMetadata\n} from 'ai';\n\n// Interface types\n\n// Error types\n\n/**\n * AI Module error type\n */\nexport class aimoduleError extends Error {\n constructor(\n message: string,\n public code: string,\n public details?: any\n ) {\n super(message);\n this.name = 'aimoduleError';\n }\n}\n\n/**\n * Runtime error\n */\nexport class aimoduleRuntimeError extends aimoduleError {\n constructor(message: string, details?: any) {\n super(message, 'RUNTIME_ERROR', details);\n this.name = 'aimoduleRuntimeError';\n }\n}\n\n// Utility types\n\n/**\n * Deep partial type\n */\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n};\n\n/**\n * Required fields type\n */\nexport type RequiredFields<T, K extends keyof T> = T & Required<Pick<T, K>>;\n\n/**\n * Optional fields type\n */\nexport type OptionalFields<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;","/**\n * Entity Engine AI Module - Main Entry Point\n * \n * Complete AI integration with core services and UI components.\n */\n\n// Core Module Exports\n\n// UI components and hooks - commented out to avoid server-side React imports\n// export * from './ui';\n\n// 导出所有核心AI功能\nexport * from './core';\n\n// UI Module Exports (conditional)\n\nexport * from './utils';\n\n// Utility Exports\n\nexport * from './types';\n\n\n// ================================\n// 🎯 插件集成导出 - Plugin Integration Exports\n// ================================\n\n// 新增Entity Module导出\nexport { EntityAIModule } from './entity-module/ai.module';\n\n// Entity Module Integration\n\n// Renderers are dynamically loaded in ai.module.ts to avoid server-side React imports\n\n// Convenience creation function\nexport async function createEntityAIModule() {\n const { EntityAIModule } = await import('./entity-module/ai.module');\n return new EntityAIModule();\n}\n\n// Note: AIEngineProvider removed, use ChatDialog component directly\n\n// Version Information\n\nexport const VERSION = '1.0.0';\nexport const PACKAGE_NAME = '@scenemesh/entity-engine-aimodule';\nexport const AI_SDK_COMPATIBLE_VERSION = '^5.0.10';\n\n// Main Factory Function\n\n/**\n * Create a complete AI core instance with optional configuration\n */\nexport async function createaimodule(config?: {\n // 核心配置\n providers?: import('./core/ai-provider').CustomProviderConfig[];\n settings?: Partial<import('./core/ai-settings').ModelSettings>;\n enableEmbeddings?: boolean;\n enableTools?: boolean;\n}): Promise<{\n // 核心功能\n core: {\n aiSDK: import('./core/ai-core').AISDKIntegration;\n providerManagement: import('./core/ai-provider').AIProviderManagement;\n toolsIntegration: import('./core/ai-tools').AIToolsIntegration;\n embeddingsIntegration: import('./core/ai-embeddings').AIEmbeddingsIntegration;\n settingsManagement: import('./core/ai-settings').AISettingsManagement;\n structuredData: import('./core/ai-structured').AIStructuredDataIntegration;\n };\n \n // 便捷API\n api: {\n generateText: (options: import('./core/ai-core').GenerateTextOptions) => Promise<import('./core/ai-core').GenerateResult>;\n streamText: (options: import('./core/ai-core').StreamTextOptions) => import('./core/ai-core').StreamResult;\n generateObject: (options: import('./core/ai-structured').GenerateObjectOptions<any>) => Promise<import('./core/ai-structured').GenerateObjectResultType<any>>;\n streamObject: (options: import('./core/ai-structured').StreamObjectOptions<any>) => import('./core/ai-structured').StreamObjectResultType<any>;\n };\n}> {\n // 导入核心模块\n const { createAICore } = await import('./core');\n \n // 创建核心实例\n const core = await createAICore({\n providers: config?.providers,\n settings: config?.settings,\n enableEmbeddings: config?.enableEmbeddings,\n enableTools: config?.enableTools\n });\n \n // 创建便捷API\n const api = {\n generateText: (options: any) => \n core.aiSDK.generateText(options),\n streamText: (options: any) => \n core.aiSDK.streamText(options),\n generateObject: (options: any) => \n core.structuredData.generateObject(options),\n streamObject: (options: any) => \n core.structuredData.streamObject(options),\n };\n \n return {\n core,\n api\n };\n}\n\n// ================================\n// 🎯 快速启动函数 - Quick Start Functions\n// ================================\n\n/**\n * 快速创建AI实例(仅核心功能)\n * Quick create AI instance (core only)\n */\nexport async function createQuickAI(providers?: import('./core/ai-provider').CustomProviderConfig[]) {\n return createaimodule({\n providers,\n enableEmbeddings: true,\n enableTools: true\n });\n}\n\n\n/**\n * 向后兼容的默认导出包含所有主要功能\n * Backward compatible default export with all main functionality\n */\nexport const EntityEngineAIModule = {\n // 工厂函数\n create: createaimodule,\n createQuick: createQuickAI,\n \n // 版本信息\n VERSION,\n PACKAGE_NAME,\n AI_SDK_COMPATIBLE_VERSION,\n \n // 核心类导出(用于高级使用)\n Core: {\n AIProviderManagement: import('./core/ai-provider').then(m => m.AIProviderManagement),\n AISDKIntegration: import('./core/ai-core').then(m => m.AISDKIntegration),\n AIToolsIntegration: import('./core/ai-tools').then(m => m.AIToolsIntegration),\n AIEmbeddingsIntegration: import('./core/ai-embeddings').then(m => m.AIEmbeddingsIntegration),\n AISettingsManagement: import('./core/ai-settings').then(m => m.AISettingsManagement),\n AIStructuredDataIntegration: import('./core/ai-structured').then(m => m.AIStructuredDataIntegration),\n }\n};"],"mappings":"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","names":["EntityAIModule","createAICore"]}
@@ -0,0 +1,366 @@
1
+ import {
2
+ AIToolsIntegration
3
+ } from "./chunk-25C2NRSD.mjs";
4
+
5
+ // src/tools/dynamic-tools/entity-query-tool.ts
6
+ import { z } from "zod";
7
+ var toolsIntegration = new AIToolsIntegration();
8
+ var entityQueryTool = toolsIntegration.createDynamicTool(
9
+ "Query entity data with basic operations like pagination, sorting, and filtering. Focused on data retrieval without analysis functionality.",
10
+ z.object({
11
+ modelName: z.string().describe("Entity model name, e.g.: ee-base-user (users), product (products), etc"),
12
+ displayMode: z.enum(["table", "list", "grid", "form", "kanban", "dashboard", "mastail"]).optional().default("table").describe("Display mode: table, list, grid, form, kanban, dashboard, or mastail (master-detail view)"),
13
+ baseObjectId: z.string().optional().describe("Entity object ID, used for form mode to display specific object"),
14
+ pageSize: z.number().optional().default(20).describe("Number of items per page, default 20"),
15
+ pageIndex: z.number().optional().default(0).describe("Page index, starting from 0"),
16
+ sortBy: z.record(z.string(), z.enum(["asc", "desc"])).optional().describe("Sort fields and directions"),
17
+ filters: z.record(z.string(), z.any()).optional().describe("Filter conditions")
18
+ }),
19
+ async (input, options) => {
20
+ try {
21
+ const validatedInput = validateAndParseInput(input);
22
+ const { modelName, displayMode, baseObjectId, pageSize, pageIndex, sortBy, filters } = validatedInput;
23
+ return await executeEntityQuery(modelName, {
24
+ displayMode,
25
+ baseObjectId,
26
+ pageSize,
27
+ pageIndex,
28
+ sortBy,
29
+ filters
30
+ }, options);
31
+ } catch (error) {
32
+ console.error("Entity query tool execution error:", error);
33
+ return {
34
+ error: error instanceof Error ? error.message : "Query failed",
35
+ toolName: "entityQuery",
36
+ toolCallId: options.toolCallId,
37
+ executedAt: (/* @__PURE__ */ new Date()).toISOString(),
38
+ _renderHint: {
39
+ componentType: "DynamicErrorDisplay",
40
+ errorType: "query_error",
41
+ errorDetails: error instanceof Error ? error.message : "Unknown error"
42
+ }
43
+ };
44
+ }
45
+ }
46
+ );
47
+ function validateAndParseInput(input) {
48
+ if (typeof input !== "object" || input === null) {
49
+ throw new Error("Invalid input: expected object");
50
+ }
51
+ const obj = input;
52
+ if (!obj.modelName || typeof obj.modelName !== "string") {
53
+ throw new Error("Invalid modelName: must be a string");
54
+ }
55
+ return {
56
+ modelName: obj.modelName,
57
+ displayMode: obj.displayMode || "table",
58
+ baseObjectId: obj.baseObjectId || void 0,
59
+ pageSize: obj.pageSize || 20,
60
+ pageIndex: obj.pageIndex || 0,
61
+ sortBy: obj.sortBy || { createdAt: "desc" },
62
+ filters: obj.filters || {}
63
+ };
64
+ }
65
+ async function executeEntityQuery(modelName, queryOptions, options) {
66
+ const { displayMode, baseObjectId, pageSize, pageIndex, sortBy, filters } = queryOptions;
67
+ const tRPCInput = encodeURIComponent(JSON.stringify({
68
+ "0": {
69
+ "json": {
70
+ modelName,
71
+ pageSize,
72
+ pageIndex,
73
+ sortBy,
74
+ where: filters
75
+ // Convert filter conditions to where clause
76
+ }
77
+ }
78
+ }));
79
+ const response = await fetch(`http://localhost:8082/api/ee/trpc/model.listObjects?batch=1&input=${tRPCInput}`, {
80
+ method: "GET",
81
+ headers: {
82
+ "Content-Type": "application/json"
83
+ },
84
+ signal: options.abortSignal
85
+ });
86
+ if (!response.ok) {
87
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
88
+ }
89
+ const tRPCResult = await response.json();
90
+ const result = tRPCResult[0]?.result?.data?.json || {};
91
+ const rawEntityData = result.data || [];
92
+ const totalCount = result.count || 0;
93
+ const entityData = rawEntityData.map((item) => ({
94
+ id: item.id,
95
+ modelName: item.modelName,
96
+ createdAt: item.createdAt,
97
+ updatedAt: item.updatedAt,
98
+ isDeleted: item.isDeleted,
99
+ ...item.values
100
+ // Spread entity data values
101
+ }));
102
+ return {
103
+ toolName: "entityQuery",
104
+ modelName,
105
+ displayMode,
106
+ data: entityData,
107
+ totalCount,
108
+ baseObjectId,
109
+ // Add baseObjectId to response for form mode
110
+ pagination: {
111
+ pageSize,
112
+ pageIndex,
113
+ totalPages: Math.ceil(totalCount / pageSize),
114
+ hasNextPage: pageIndex < Math.ceil(totalCount / pageSize) - 1,
115
+ hasPreviousPage: pageIndex > 0
116
+ },
117
+ query: {
118
+ sortBy,
119
+ filters,
120
+ appliedFilters: Object.keys(filters).length
121
+ },
122
+ executedAt: (/* @__PURE__ */ new Date()).toISOString(),
123
+ toolCallId: options.toolCallId,
124
+ // Provide rendering hints for dynamic component renderers
125
+ _renderHint: {
126
+ componentType: getDynamicComponentType(displayMode),
127
+ preferredLayout: displayMode,
128
+ features: getDisplayModeFeatures(displayMode),
129
+ dataSchema: entityData.length > 0 ? Object.keys(entityData[0]) : [],
130
+ capabilities: ["pagination", "sorting", "filtering"]
131
+ // 只提供基础功能
132
+ }
133
+ };
134
+ }
135
+ function getDynamicComponentType(displayMode) {
136
+ const mapping = {
137
+ "table": "DynamicDataTable",
138
+ "list": "DynamicDataList",
139
+ "grid": "DynamicDataGrid",
140
+ "form": "DynamicEntityForm",
141
+ "kanban": "DynamicEntityKanban",
142
+ "dashboard": "DynamicEntityDashboard",
143
+ "mastail": "DynamicEntityMastail"
144
+ };
145
+ return mapping[displayMode] || "DynamicDataTable";
146
+ }
147
+ function getDisplayModeFeatures(displayMode) {
148
+ const featureMap = {
149
+ "table": ["pagination", "sorting", "filtering", "selection", "export"],
150
+ "list": ["pagination", "filtering", "search"],
151
+ "grid": ["pagination", "filtering", "card_view"],
152
+ "form": ["display", "edit", "validation", "field_layout"],
153
+ "kanban": ["drag_drop", "status_columns", "card_management", "filtering"],
154
+ "dashboard": ["charts", "metrics", "widgets", "real_time_data"],
155
+ "mastail": ["master_detail", "navigation", "related_data", "drill_down"]
156
+ };
157
+ return featureMap[displayMode] || ["pagination"];
158
+ }
159
+
160
+ // src/tools/static-tools/weather-tool.ts
161
+ import { z as z2 } from "zod";
162
+ import { tool } from "ai";
163
+ var weatherTool = tool({
164
+ description: "Display weather information for a city including temperature, conditions, and humidity",
165
+ inputSchema: z2.object({
166
+ location: z2.string().describe("\u57CE\u5E02\u540D\u79F0\uFF0C\u5982\uFF1A\u5317\u4EAC\u3001\u4E0A\u6D77\u3001\u6DF1\u5733"),
167
+ unit: z2.enum(["celsius", "fahrenheit"]).default("celsius").describe("\u6E29\u5EA6\u5355\u4F4D\uFF1A\u6444\u6C0F\u5EA6\u6216\u534E\u6C0F\u5EA6")
168
+ }),
169
+ execute: async ({ location, unit }) => (
170
+ // Simulate weather API call - return component data directly
171
+ {
172
+ location,
173
+ temperature: unit === "celsius" ? 22 : 72,
174
+ weather: "\u6674\u5929",
175
+ humidity: 65,
176
+ windSpeed: 12,
177
+ unit,
178
+ lastUpdated: (/* @__PURE__ */ new Date()).toISOString()
179
+ }
180
+ )
181
+ });
182
+
183
+ // src/tools/static-tools/location-tool.ts
184
+ import { z as z3 } from "zod";
185
+ import { tool as tool2 } from "ai";
186
+ var locationTool = tool2({
187
+ description: "Display geographic information for a city including coordinates, timezone, and population",
188
+ inputSchema: z3.object({
189
+ city: z3.string().describe("\u57CE\u5E02\u540D\u79F0\uFF0C\u5982\uFF1A\u5317\u4EAC\u3001\u4E0A\u6D77\u3001\u5E7F\u5DDE"),
190
+ includeWeather: z3.boolean().default(false).describe("\u662F\u5426\u540C\u65F6\u5305\u542B\u5929\u6C14\u4FE1\u606F")
191
+ }),
192
+ execute: async ({ city, includeWeather }) => {
193
+ const locationData = {
194
+ city,
195
+ country: "\u4E2D\u56FD",
196
+ province: getProvinceByCity(city),
197
+ coordinates: getCityCoordinates(city),
198
+ timezone: "Asia/Shanghai",
199
+ population: getCityPopulation(city),
200
+ area: getCityArea(city)
201
+ };
202
+ if (includeWeather) {
203
+ return {
204
+ ...locationData,
205
+ weather: {
206
+ temperature: 22,
207
+ condition: "\u6674\u5929",
208
+ humidity: 65
209
+ }
210
+ };
211
+ }
212
+ return locationData;
213
+ }
214
+ });
215
+ function getProvinceByCity(city) {
216
+ const cityProvinceMap = {
217
+ "\u5317\u4EAC": "\u5317\u4EAC\u5E02",
218
+ "\u4E0A\u6D77": "\u4E0A\u6D77\u5E02",
219
+ "\u6DF1\u5733": "\u5E7F\u4E1C\u7701",
220
+ "\u5E7F\u5DDE": "\u5E7F\u4E1C\u7701",
221
+ "\u676D\u5DDE": "\u6D59\u6C5F\u7701",
222
+ "\u6210\u90FD": "\u56DB\u5DDD\u7701",
223
+ "\u897F\u5B89": "\u9655\u897F\u7701",
224
+ "\u5357\u4EAC": "\u6C5F\u82CF\u7701"
225
+ };
226
+ return cityProvinceMap[city] || "\u672A\u77E5\u7701\u4EFD";
227
+ }
228
+ function getCityCoordinates(city) {
229
+ const coordinatesMap = {
230
+ "\u5317\u4EAC": { lat: 39.9042, lng: 116.4074 },
231
+ "\u4E0A\u6D77": { lat: 31.2304, lng: 121.4737 },
232
+ "\u6DF1\u5733": { lat: 22.3193, lng: 114.1694 },
233
+ "\u5E7F\u5DDE": { lat: 23.1291, lng: 113.2644 },
234
+ "\u676D\u5DDE": { lat: 30.2741, lng: 120.1551 },
235
+ "\u6210\u90FD": { lat: 30.5728, lng: 104.0668 },
236
+ "\u897F\u5B89": { lat: 34.3416, lng: 108.9398 },
237
+ "\u5357\u4EAC": { lat: 32.0603, lng: 118.7969 }
238
+ };
239
+ return coordinatesMap[city] || { lat: 39.9042, lng: 116.4074 };
240
+ }
241
+ function getCityPopulation(city) {
242
+ const populationMap = {
243
+ "\u5317\u4EAC": 2154,
244
+ "\u4E0A\u6D77": 2424,
245
+ "\u6DF1\u5733": 1756,
246
+ "\u5E7F\u5DDE": 1868,
247
+ "\u676D\u5DDE": 1220,
248
+ "\u6210\u90FD": 2094,
249
+ "\u897F\u5B89": 1295,
250
+ "\u5357\u4EAC": 931
251
+ };
252
+ return populationMap[city] || 1e3;
253
+ }
254
+ function getCityArea(city) {
255
+ const areaMap = {
256
+ "\u5317\u4EAC": 16410,
257
+ "\u4E0A\u6D77": 6340,
258
+ "\u6DF1\u5733": 1997,
259
+ "\u5E7F\u5DDE": 7434,
260
+ "\u676D\u5DDE": 16853,
261
+ "\u6210\u90FD": 14335,
262
+ "\u897F\u5B89": 10108,
263
+ "\u5357\u4EAC": 6587
264
+ };
265
+ return areaMap[city] || 5e3;
266
+ }
267
+
268
+ // src/tools/frontend-tools/record-tools.ts
269
+ import { z as z4 } from "zod";
270
+ import { tool as tool3 } from "ai";
271
+ var frontendToolWaitPool = /* @__PURE__ */ new Map();
272
+ async function executeFrontendTool(toolName, input) {
273
+ const waitId = `frontend-${toolName}`;
274
+ return new Promise((resolve, reject) => {
275
+ const timeout = setTimeout(() => {
276
+ frontendToolWaitPool.delete(waitId);
277
+ reject(new Error(`Frontend tool ${toolName} timeout after 30 seconds`));
278
+ }, 3e4);
279
+ frontendToolWaitPool.set(waitId, {
280
+ resolve,
281
+ reject,
282
+ timeout
283
+ });
284
+ });
285
+ }
286
+ global.resolveFrontendTool = (waitId, result) => {
287
+ const waiting = frontendToolWaitPool.get(waitId);
288
+ if (waiting) {
289
+ clearTimeout(waiting.timeout);
290
+ frontendToolWaitPool.delete(waitId);
291
+ waiting.resolve(result);
292
+ }
293
+ };
294
+ global.rejectFrontendTool = (waitId, error) => {
295
+ const waiting = frontendToolWaitPool.get(waitId);
296
+ if (waiting) {
297
+ clearTimeout(waiting.timeout);
298
+ frontendToolWaitPool.delete(waitId);
299
+ waiting.reject(new Error(error));
300
+ }
301
+ };
302
+ var recordGetValuesTool = tool3({
303
+ description: "Get current form/record field values. Returns all field values in the current form.",
304
+ inputSchema: z4.object({}).describe("No input parameters required"),
305
+ execute: async () => await executeFrontendTool("recordGetValues", {})
306
+ });
307
+ var recordSetValuesTool = tool3({
308
+ description: "Set form field values",
309
+ inputSchema: z4.object({
310
+ values: z4.record(z4.string(), z4.any()).describe("Field value object. Keys MUST be exact field names returned by recordGetFieldInfo")
311
+ }),
312
+ execute: async ({ values }) => await executeFrontendTool("recordSetValues", { values })
313
+ });
314
+ var recordResetFormTool = tool3({
315
+ description: "Reset form to initial state. Clear all user input and restore default values.",
316
+ inputSchema: z4.object({}).describe("No input parameters required"),
317
+ execute: async () => await executeFrontendTool("recordResetForm", {})
318
+ });
319
+ var recordValidateFormTool = tool3({
320
+ description: "Validate current form/record data. Check all field validation rules and return validation results.",
321
+ inputSchema: z4.object({}).describe("No input parameters required"),
322
+ execute: async () => await executeFrontendTool("recordValidateForm", {})
323
+ });
324
+ var recordGetFieldInfoTool = tool3({
325
+ description: "Get record field information. Returns detailed information and exact field names for all fields in current view. Must call this tool before recordSetValues to get correct field names.",
326
+ inputSchema: z4.object({
327
+ fieldName: z4.string().optional().describe("Specific field name, if not provided returns all field information")
328
+ }),
329
+ execute: async ({ fieldName }) => await executeFrontendTool("recordGetFieldInfo", { fieldName })
330
+ });
331
+
332
+ // src/tools/index.ts
333
+ var defaultTools = {
334
+ // Static tools
335
+ getWeather: weatherTool,
336
+ getLocation: locationTool,
337
+ // Dynamic tools
338
+ entityQuery: entityQueryTool,
339
+ // Frontend proxy tools - standardized view controller operations
340
+ recordGetValues: recordGetValuesTool,
341
+ recordSetValues: recordSetValuesTool,
342
+ recordResetForm: recordResetFormTool,
343
+ recordValidateForm: recordValidateFormTool,
344
+ recordGetFieldInfo: recordGetFieldInfoTool
345
+ };
346
+ function getAllTools() {
347
+ return defaultTools;
348
+ }
349
+ function getToolsList() {
350
+ return Object.keys(defaultTools);
351
+ }
352
+ export {
353
+ defaultTools,
354
+ entityQueryTool,
355
+ getAllTools,
356
+ getToolsList,
357
+ locationTool,
358
+ recordGetFieldInfoTool,
359
+ recordGetValuesTool,
360
+ recordResetFormTool,
361
+ recordSetValuesTool,
362
+ recordValidateFormTool,
363
+ toolsIntegration,
364
+ weatherTool
365
+ };
366
+ //# sourceMappingURL=tools-352X7A6X.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tools/dynamic-tools/entity-query-tool.ts","../src/tools/static-tools/weather-tool.ts","../src/tools/static-tools/location-tool.ts","../src/tools/frontend-tools/record-tools.ts","../src/tools/index.ts"],"sourcesContent":["/**\n * Entity Data Query Dynamic Tool\n * \n * Dynamic tool implementation for entity data queries\n * Focused on data retrieval without complex analysis features\n */\n\nimport { z } from 'zod';\n\nimport { type DynamicTool, AIToolsIntegration } from '../../core/ai-tools';\n\n// Create tools integration instance\nconst toolsIntegration = new AIToolsIntegration();\n\n/**\n * Entity data query tool\n * Focused on data retrieval without analysis functionality\n */\nexport const entityQueryTool: DynamicTool = toolsIntegration.createDynamicTool(\n 'Query entity data with basic operations like pagination, sorting, and filtering. Focused on data retrieval without analysis functionality.',\n z.object({\n modelName: z.string().describe('Entity model name, e.g.: ee-base-user (users), product (products), etc'),\n displayMode: z.enum(['table', 'list', 'grid', 'form', 'kanban', 'dashboard', 'mastail']).optional().default('table').describe('Display mode: table, list, grid, form, kanban, dashboard, or mastail (master-detail view)'),\n baseObjectId: z.string().optional().describe('Entity object ID, used for form mode to display specific object'),\n pageSize: z.number().optional().default(20).describe('Number of items per page, default 20'),\n pageIndex: z.number().optional().default(0).describe('Page index, starting from 0'),\n sortBy: z.record(z.string(), z.enum(['asc', 'desc'])).optional().describe('Sort fields and directions'),\n filters: z.record(z.string(), z.any()).optional().describe('Filter conditions')\n }),\n async (input: unknown, options) => {\n try {\n // Validate and parse input\n const validatedInput = validateAndParseInput(input);\n const { modelName, displayMode, baseObjectId, pageSize, pageIndex, sortBy, filters } = validatedInput;\n\n\n // Execute data query\n return await executeEntityQuery(modelName, {\n displayMode,\n baseObjectId,\n pageSize,\n pageIndex,\n sortBy,\n filters\n }, options);\n\n } catch (error) {\n console.error('Entity query tool execution error:', error);\n \n return {\n error: error instanceof Error ? error.message : 'Query failed',\n toolName: 'entityQuery',\n toolCallId: options.toolCallId,\n executedAt: new Date().toISOString(),\n _renderHint: {\n componentType: 'DynamicErrorDisplay',\n errorType: 'query_error',\n errorDetails: error instanceof Error ? error.message : 'Unknown error'\n }\n };\n }\n }\n);\n\n/**\n * Input validation and parsing function\n */\nfunction validateAndParseInput(input: unknown) {\n if (typeof input !== 'object' || input === null) {\n throw new Error('Invalid input: expected object');\n }\n\n const obj = input as Record<string, any>;\n \n if (!obj.modelName || typeof obj.modelName !== 'string') {\n throw new Error('Invalid modelName: must be a string');\n }\n\n return {\n modelName: obj.modelName as string,\n displayMode: obj.displayMode || 'table',\n baseObjectId: obj.baseObjectId || undefined,\n pageSize: obj.pageSize || 20,\n pageIndex: obj.pageIndex || 0,\n sortBy: obj.sortBy || { createdAt: 'desc' },\n filters: obj.filters || {}\n };\n}\n\n/**\n * Execute entity data query\n */\nasync function executeEntityQuery(\n modelName: string,\n queryOptions: {\n displayMode: string;\n baseObjectId?: string;\n pageSize: number;\n pageIndex: number;\n sortBy: Record<string, 'asc' | 'desc'>;\n filters: Record<string, any>;\n },\n options: { toolCallId: string; messages: any[]; abortSignal?: AbortSignal }\n) {\n const { displayMode, baseObjectId, pageSize, pageIndex, sortBy, filters } = queryOptions;\n\n // Build tRPC query parameters\n const tRPCInput = encodeURIComponent(JSON.stringify({\n \"0\": {\n \"json\": {\n modelName,\n pageSize,\n pageIndex,\n sortBy,\n where: filters // Convert filter conditions to where clause\n }\n }\n }));\n \n // Call Entity Engine tRPC API\n const response = await fetch(`http://localhost:8082/api/ee/trpc/model.listObjects?batch=1&input=${tRPCInput}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n signal: options.abortSignal\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const tRPCResult = await response.json();\n const result = tRPCResult[0]?.result?.data?.json || {};\n const rawEntityData = result.data || [];\n const totalCount = result.count || 0;\n \n // Flatten Entity data structure for frontend rendering\n const entityData = rawEntityData.map((item: any) => ({\n id: item.id,\n modelName: item.modelName,\n createdAt: item.createdAt,\n updatedAt: item.updatedAt,\n isDeleted: item.isDeleted,\n ...item.values // Spread entity data values\n }));\n\n return {\n toolName: 'entityQuery',\n modelName,\n displayMode,\n data: entityData,\n totalCount,\n baseObjectId, // Add baseObjectId to response for form mode\n pagination: {\n pageSize,\n pageIndex,\n totalPages: Math.ceil(totalCount / pageSize),\n hasNextPage: pageIndex < Math.ceil(totalCount / pageSize) - 1,\n hasPreviousPage: pageIndex > 0\n },\n query: {\n sortBy,\n filters,\n appliedFilters: Object.keys(filters).length\n },\n executedAt: new Date().toISOString(),\n toolCallId: options.toolCallId,\n // Provide rendering hints for dynamic component renderers\n _renderHint: {\n componentType: getDynamicComponentType(displayMode),\n preferredLayout: displayMode,\n features: getDisplayModeFeatures(displayMode),\n dataSchema: entityData.length > 0 ? Object.keys(entityData[0]) : [],\n capabilities: ['pagination', 'sorting', 'filtering'] // 只提供基础功能\n }\n };\n}\n\n/**\n * 根据显示模式获取对应的动态组件类型\n */\nfunction getDynamicComponentType(displayMode: string): string {\n const mapping = {\n 'table': 'DynamicDataTable',\n 'list': 'DynamicDataList',\n 'grid': 'DynamicDataGrid',\n 'form': 'DynamicEntityForm',\n 'kanban': 'DynamicEntityKanban',\n 'dashboard': 'DynamicEntityDashboard',\n 'mastail': 'DynamicEntityMastail'\n };\n return mapping[displayMode as keyof typeof mapping] || 'DynamicDataTable';\n}\n\n/**\n * 根据显示模式获取功能特性\n */\nfunction getDisplayModeFeatures(displayMode: string): string[] {\n const featureMap = {\n 'table': ['pagination', 'sorting', 'filtering', 'selection', 'export'],\n 'list': ['pagination', 'filtering', 'search'],\n 'grid': ['pagination', 'filtering', 'card_view'],\n 'form': ['display', 'edit', 'validation', 'field_layout'],\n 'kanban': ['drag_drop', 'status_columns', 'card_management', 'filtering'],\n 'dashboard': ['charts', 'metrics', 'widgets', 'real_time_data'],\n 'mastail': ['master_detail', 'navigation', 'related_data', 'drill_down']\n };\n return featureMap[displayMode as keyof typeof featureMap] || ['pagination'];\n}\n\n// 导出工具集成器实例\nexport { toolsIntegration };","/**\n * Weather Tool - Get city weather information\n */\n\nimport { z } from 'zod';\nimport { tool } from 'ai';\n\n/**\n * Weather tool - get weather information for specified city\n */\nexport const weatherTool = tool({\n description: 'Display weather information for a city including temperature, conditions, and humidity',\n inputSchema: z.object({\n location: z.string().describe('城市名称,如:北京、上海、深圳'),\n unit: z.enum(['celsius', 'fahrenheit']).default('celsius').describe('温度单位:摄氏度或华氏度')\n }),\n execute: async ({ location, unit }) => \n // Simulate weather API call - return component data directly\n ({\n location,\n temperature: unit === 'celsius' ? 22 : 72,\n weather: '晴天',\n humidity: 65,\n windSpeed: 12,\n unit,\n lastUpdated: new Date().toISOString()\n })\n \n});","/**\n * Location Tool - Get city geographic information\n */\n\nimport { z } from 'zod';\nimport { tool } from 'ai';\n\n/**\n * Location tool - get geographic location information for cities\n */\nexport const locationTool = tool({\n description: 'Display geographic information for a city including coordinates, timezone, and population',\n inputSchema: z.object({\n city: z.string().describe('城市名称,如:北京、上海、广州'),\n includeWeather: z.boolean().default(false).describe('是否同时包含天气信息')\n }),\n execute: async ({ city, includeWeather }) => {\n // Simulate location API call - return component data directly\n const locationData = {\n city,\n country: '中国',\n province: getProvinceByCity(city),\n coordinates: getCityCoordinates(city),\n timezone: 'Asia/Shanghai',\n population: getCityPopulation(city),\n area: getCityArea(city)\n };\n\n // 如果需要天气信息,直接扩展数据结构\n if (includeWeather) {\n return {\n ...locationData,\n weather: {\n temperature: 22,\n condition: '晴天',\n humidity: 65\n }\n };\n }\n\n // 直接返回位置数据,不包装在success/data/message中\n return locationData;\n }\n});\n\n// 辅助函数 - 获取城市省份\nfunction getProvinceByCity(city: string): string {\n const cityProvinceMap: Record<string, string> = {\n '北京': '北京市',\n '上海': '上海市',\n '深圳': '广东省',\n '广州': '广东省',\n '杭州': '浙江省',\n '成都': '四川省',\n '西安': '陕西省',\n '南京': '江苏省'\n };\n return cityProvinceMap[city] || '未知省份';\n}\n\n// 辅助函数 - 获取城市坐标\nfunction getCityCoordinates(city: string): { lat: number; lng: number } {\n const coordinatesMap: Record<string, { lat: number; lng: number }> = {\n '北京': { lat: 39.9042, lng: 116.4074 },\n '上海': { lat: 31.2304, lng: 121.4737 },\n '深圳': { lat: 22.3193, lng: 114.1694 },\n '广州': { lat: 23.1291, lng: 113.2644 },\n '杭州': { lat: 30.2741, lng: 120.1551 },\n '成都': { lat: 30.5728, lng: 104.0668 },\n '西安': { lat: 34.3416, lng: 108.9398 },\n '南京': { lat: 32.0603, lng: 118.7969 }\n };\n return coordinatesMap[city] || { lat: 39.9042, lng: 116.4074 };\n}\n\n// 辅助函数 - 获取城市人口\nfunction getCityPopulation(city: string): number {\n const populationMap: Record<string, number> = {\n '北京': 2154,\n '上海': 2424,\n '深圳': 1756,\n '广州': 1868,\n '杭州': 1220,\n '成都': 2094,\n '西安': 1295,\n '南京': 931\n };\n return populationMap[city] || 1000;\n}\n\n// 辅助函数 - 获取城市面积\nfunction getCityArea(city: string): number {\n const areaMap: Record<string, number> = {\n '北京': 16410,\n '上海': 6340,\n '深圳': 1997,\n '广州': 7434,\n '杭州': 16853,\n '成都': 14335,\n '西安': 10108,\n '南京': 6587\n };\n return areaMap[city] || 5000;\n}","/**\n * Entity Engine Frontend Proxy Tools\n * \n * Registers frontend controller operations as standard tools.\n * Communicates with frontend view controllers through backend proxy API.\n */\n\nimport { z } from 'zod';\nimport { tool } from 'ai';\n\n/**\n * Global frontend tool call bridge\n * Communicates with frontend through global objects\n */\ndeclare global {\n interface Window {\n __ENTITY_ENGINE_AI_BRIDGE__?: {\n executeViewControllerTool: (toolName: string, input: any) => Promise<string>;\n };\n __FRONTEND_TOOL_EXECUTOR__?: (waitId: string, toolName: string, input: any) => Promise<void>;\n resolveFrontendTool?: (waitId: string, result: string) => void;\n rejectFrontendTool?: (waitId: string, error: string) => void;\n }\n \n var resolveFrontendTool: (waitId: string, result: string) => void;\n var rejectFrontendTool: (waitId: string, error: string) => void;\n var __FRONTEND_TOOL_EXECUTOR__: (waitId: string, toolName: string, input: any) => Promise<void>;\n}\n\n/**\n * Frontend tool waiting pool - for backend waiting for frontend results\n */\nconst frontendToolWaitPool = new Map<string, {\n resolve: (result: string) => void;\n reject: (error: Error) => void;\n timeout: NodeJS.Timeout;\n}>();\n\n/**\n * Frontend tool executor - waits for frontend HTTP responses\n */\nasync function executeFrontendTool(toolName: string, input: any): Promise<string> {\n \n // Key: use simplified waitId for frontend matching\n const waitId = `frontend-${toolName}`;\n \n // Key: create Promise waiting for frontend HTTP result\n return new Promise((resolve, reject) => {\n // Set timeout mechanism\n const timeout = setTimeout(() => {\n frontendToolWaitPool.delete(waitId);\n reject(new Error(`Frontend tool ${toolName} timeout after 30 seconds`));\n }, 30000);\n \n // Store Promise in waiting pool\n frontendToolWaitPool.set(waitId, {\n resolve,\n reject,\n timeout\n });\n });\n}\n\n/**\n * Frontend tool result callback - for frontend invocation\n */\n(global as any).resolveFrontendTool = (waitId: string, result: string) => {\n const waiting = frontendToolWaitPool.get(waitId);\n if (waiting) {\n clearTimeout(waiting.timeout);\n frontendToolWaitPool.delete(waitId);\n waiting.resolve(result);\n }\n};\n\n(global as any).rejectFrontendTool = (waitId: string, error: string) => {\n const waiting = frontendToolWaitPool.get(waitId);\n if (waiting) {\n clearTimeout(waiting.timeout);\n frontendToolWaitPool.delete(waitId);\n waiting.reject(new Error(error));\n }\n};\n\n/**\n * Get record field values tool\n */\nexport const recordGetValuesTool = tool({\n description: 'Get current form/record field values. Returns all field values in the current form.',\n inputSchema: z.object({}).describe('No input parameters required'),\n execute: async () => await executeFrontendTool('recordGetValues', {})\n});\n\n/**\n * Set record field value tool\n */\nexport const recordSetValuesTool = tool({\n description: 'Set form field values',\n inputSchema: z.object({\n values: z.record(z.string(), z.any()).describe('Field value object. Keys MUST be exact field names returned by recordGetFieldInfo')\n }),\n execute: async ({ values }) => await executeFrontendTool('recordSetValues', { values })\n});\n\n/**\n * Reset form tool\n */\nexport const recordResetFormTool = tool({\n description: 'Reset form to initial state. Clear all user input and restore default values.',\n inputSchema: z.object({}).describe('No input parameters required'),\n execute: async () => await executeFrontendTool('recordResetForm', {})\n});\n\n/**\n * Form validation tool\n */\nexport const recordValidateFormTool = tool({\n description: 'Validate current form/record data. Check all field validation rules and return validation results.',\n inputSchema: z.object({}).describe('No input parameters required'),\n execute: async () => await executeFrontendTool('recordValidateForm', {})\n});\n\n/**\n * Get field information tool\n */\nexport const recordGetFieldInfoTool = tool({\n description: 'Get record field information. Returns detailed information and exact field names for all fields in current view. Must call this tool before recordSetValues to get correct field names.',\n inputSchema: z.object({\n fieldName: z.string().optional().describe('Specific field name, if not provided returns all field information')\n }),\n execute: async ({ fieldName }) => await executeFrontendTool('recordGetFieldInfo', { fieldName })\n});","/**\n * Tools Collection - Unified export for all available tools\n * \n * Optimized file structure:\n * - static-tools/: Static tools (predefined types)\n * - dynamic-tools/: Dynamic tools (runtime types)\n * - frontend-tools/: Frontend proxy tools\n */\n\n// Dynamic tools import\nimport { entityQueryTool } from './dynamic-tools';\n// Static tools import\nimport { weatherTool, locationTool } from './static-tools';\n// Frontend proxy tools import\nimport { \n recordGetValuesTool,\n recordSetValuesTool,\n recordResetFormTool,\n recordValidateFormTool,\n recordGetFieldInfoTool\n} from './frontend-tools';\n\n/**\n * Default tools collection - Static, dynamic and frontend proxy tools\n * \n * Design features:\n * - Static tools: getWeather, getLocation (basic functionality)\n * - Dynamic tools: entityQuery (data retrieval focused)\n * - Frontend proxy tools: record* operations\n */\nexport const defaultTools = {\n // Static tools\n getWeather: weatherTool,\n getLocation: locationTool,\n \n // Dynamic tools\n entityQuery: entityQueryTool,\n \n // Frontend proxy tools - standardized view controller operations\n recordGetValues: recordGetValuesTool,\n recordSetValues: recordSetValuesTool,\n recordResetForm: recordResetFormTool,\n recordValidateForm: recordValidateFormTool,\n recordGetFieldInfo: recordGetFieldInfoTool,\n} as const;\n\n/**\n * Get all available tools\n */\nexport function getAllTools() {\n return defaultTools;\n}\n\n/**\n * Get tools list (for API documentation or debugging)\n */\nexport function getToolsList() {\n return Object.keys(defaultTools);\n}\n\n// Re-export specific tools (backward compatibility)\nexport { weatherTool, locationTool } from './static-tools';\nexport { entityQueryTool, toolsIntegration } from './dynamic-tools';\nexport { \n recordGetValuesTool,\n recordSetValuesTool,\n recordResetFormTool,\n recordValidateFormTool,\n recordGetFieldInfoTool\n} from './frontend-tools';"],"mappings":"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","names":["z","z","tool","z","tool"]}