@scenemesh/entity-engine-aimodule 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ChatDialog/ChatDialog.d.ts +17 -0
- package/dist/components/ChatDialog/ChatDialog.d.ts.map +1 -0
- package/dist/components/ChatDialog/ChatDialog.js +346 -0
- package/dist/components/ChatDialog/ChatDialog.js.map +1 -0
- package/dist/components/DynamicUI/DynamicToolRenderer.d.ts +9 -0
- package/dist/components/DynamicUI/DynamicToolRenderer.d.ts.map +1 -0
- package/dist/components/DynamicUI/DynamicToolRenderer.js +114 -0
- package/dist/components/DynamicUI/DynamicToolRenderer.js.map +1 -0
- package/dist/components/DynamicUI/EntityEngineDynamicComponents.d.ts +75 -0
- package/dist/components/DynamicUI/EntityEngineDynamicComponents.d.ts.map +1 -0
- package/dist/components/DynamicUI/EntityEngineDynamicComponents.js +123 -0
- package/dist/components/DynamicUI/EntityEngineDynamicComponents.js.map +1 -0
- package/dist/components/DynamicUI/index.d.ts +12 -0
- package/dist/components/DynamicUI/index.d.ts.map +1 -0
- package/dist/components/DynamicUI/index.js +13 -0
- package/dist/components/DynamicUI/index.js.map +1 -0
- package/dist/components/FileViewer/FileViewer.d.ts +16 -0
- package/dist/components/FileViewer/FileViewer.d.ts.map +1 -0
- package/dist/components/FileViewer/FileViewer.js +158 -0
- package/dist/components/FileViewer/FileViewer.js.map +1 -0
- package/dist/components/GenerativeUI/PrebuiltComponents.d.ts +44 -0
- package/dist/components/GenerativeUI/PrebuiltComponents.d.ts.map +1 -0
- package/dist/components/GenerativeUI/PrebuiltComponents.js +77 -0
- package/dist/components/GenerativeUI/PrebuiltComponents.js.map +1 -0
- package/dist/components/MessageBubble/MessageBubble.d.ts +29 -0
- package/dist/components/MessageBubble/MessageBubble.d.ts.map +1 -0
- package/dist/components/MessageBubble/MessageBubble.js +222 -0
- package/dist/components/MessageBubble/MessageBubble.js.map +1 -0
- package/dist/components/ReasoningComponents/ReasoningDisplay.d.ts +26 -0
- package/dist/components/ReasoningComponents/ReasoningDisplay.d.ts.map +1 -0
- package/dist/components/ReasoningComponents/ReasoningDisplay.js +44 -0
- package/dist/components/ReasoningComponents/ReasoningDisplay.js.map +1 -0
- package/dist/components/index.d.ts +10 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +10 -0
- package/dist/components/index.js.map +1 -0
- package/dist/core/ai-core-manager.d.ts +221 -0
- package/dist/core/ai-core-manager.d.ts.map +1 -0
- package/dist/core/ai-core-manager.js +536 -0
- package/dist/core/ai-core-manager.js.map +1 -0
- package/dist/core/ai-core.d.ts +380 -0
- package/dist/core/ai-core.d.ts.map +1 -0
- package/dist/core/ai-core.js +297 -0
- package/dist/core/ai-core.js.map +1 -0
- package/dist/core/ai-embeddings.d.ts +204 -0
- package/dist/core/ai-embeddings.d.ts.map +1 -0
- package/dist/core/ai-embeddings.js +380 -0
- package/dist/core/ai-embeddings.js.map +1 -0
- package/dist/core/ai-provider.d.ts +265 -0
- package/dist/core/ai-provider.d.ts.map +1 -0
- package/dist/core/ai-provider.js +707 -0
- package/dist/core/ai-provider.js.map +1 -0
- package/dist/core/ai-settings.d.ts +289 -0
- package/dist/core/ai-settings.d.ts.map +1 -0
- package/dist/core/ai-settings.js +585 -0
- package/dist/core/ai-settings.js.map +1 -0
- package/dist/core/ai-structured.d.ts +198 -0
- package/dist/core/ai-structured.d.ts.map +1 -0
- package/dist/core/ai-structured.js +460 -0
- package/dist/core/ai-structured.js.map +1 -0
- package/dist/core/ai-tools.d.ts +378 -0
- package/dist/core/ai-tools.d.ts.map +1 -0
- package/dist/core/ai-tools.js +637 -0
- package/dist/core/ai-tools.js.map +1 -0
- package/dist/core/index.d.ts +47 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +75 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/system-prompt.d.ts +6 -0
- package/dist/core/system-prompt.d.ts.map +1 -0
- package/dist/core/system-prompt.js +305 -0
- package/dist/core/system-prompt.js.map +1 -0
- package/dist/core-index.d.ts +29 -1648
- package/dist/core-index.d.ts.map +1 -0
- package/dist/core-index.js +63 -99
- package/dist/core-index.js.map +1 -1
- package/dist/entity-module/ai.module.d.ts +48 -0
- package/dist/entity-module/ai.module.d.ts.map +1 -0
- package/dist/entity-module/ai.module.js +126 -0
- package/dist/entity-module/ai.module.js.map +1 -0
- package/dist/entity-module/index.d.ts +9 -0
- package/dist/entity-module/index.d.ts.map +1 -0
- package/dist/entity-module/index.js +9 -0
- package/dist/entity-module/index.js.map +1 -0
- package/dist/entity-module/models/ai-model.d.ts +3 -0
- package/dist/entity-module/models/ai-model.d.ts.map +1 -0
- package/dist/entity-module/models/ai-model.js +44 -0
- package/dist/entity-module/models/ai-model.js.map +1 -0
- package/dist/entity-module/models/index.d.ts +3 -0
- package/dist/entity-module/models/index.d.ts.map +1 -0
- package/dist/entity-module/models/index.js +6 -0
- package/dist/entity-module/models/index.js.map +1 -0
- package/dist/entity-module/module.json +8 -0
- package/dist/entity-module/renderers/ai-form-renderer.d.ts +3 -0
- package/dist/entity-module/renderers/ai-form-renderer.d.ts.map +1 -0
- package/dist/entity-module/renderers/ai-form-renderer.js +201 -0
- package/dist/entity-module/renderers/ai-form-renderer.js.map +1 -0
- package/dist/entity-module/renderers/ai-renderer.d.ts +3 -0
- package/dist/entity-module/renderers/ai-renderer.d.ts.map +1 -0
- package/dist/entity-module/renderers/ai-renderer.js +99 -0
- package/dist/entity-module/renderers/ai-renderer.js.map +1 -0
- package/dist/entity-module/renderers/index.d.ts +3 -0
- package/dist/entity-module/renderers/index.d.ts.map +1 -0
- package/dist/entity-module/renderers/index.js +3 -0
- package/dist/entity-module/renderers/index.js.map +1 -0
- package/dist/entity-module/servlets/ai-servlet.d.ts +15 -0
- package/dist/entity-module/servlets/ai-servlet.d.ts.map +1 -0
- package/dist/entity-module/servlets/ai-servlet.js +377 -0
- package/dist/entity-module/servlets/ai-servlet.js.map +1 -0
- package/dist/entity-module/servlets/index.d.ts +3 -0
- package/dist/entity-module/servlets/index.d.ts.map +1 -0
- package/dist/entity-module/servlets/index.js +6 -0
- package/dist/entity-module/servlets/index.js.map +1 -0
- package/dist/entity-module/views/ai-view.d.ts +3 -0
- package/dist/entity-module/views/ai-view.d.ts.map +1 -0
- package/dist/entity-module/views/ai-view.js +33 -0
- package/dist/entity-module/views/ai-view.js.map +1 -0
- package/dist/entity-module/views/index.d.ts +3 -0
- package/dist/entity-module/views/index.d.ts.map +1 -0
- package/dist/entity-module/views/index.js +6 -0
- package/dist/entity-module/views/index.js.map +1 -0
- package/dist/hooks/index.d.ts +11 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +10 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useChat.d.ts +13 -0
- package/dist/hooks/useChat.d.ts.map +1 -0
- package/dist/hooks/useChat.js +13 -0
- package/dist/hooks/useChat.js.map +1 -0
- package/dist/hooks/useCompletion.d.ts +17 -0
- package/dist/hooks/useCompletion.d.ts.map +1 -0
- package/dist/hooks/useCompletion.js +17 -0
- package/dist/hooks/useCompletion.js.map +1 -0
- package/dist/hooks/useObject.d.ts +16 -0
- package/dist/hooks/useObject.d.ts.map +1 -0
- package/dist/hooks/useObject.js +17 -0
- package/dist/hooks/useObject.js.map +1 -0
- package/dist/index.d.ts +42 -2876
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +85 -1168
- package/dist/index.js.map +1 -1
- package/dist/tools/dynamic-tools/entity-query-tool.d.ts +15 -0
- package/dist/tools/dynamic-tools/entity-query-tool.d.ts.map +1 -0
- package/dist/tools/dynamic-tools/entity-query-tool.js +178 -0
- package/dist/tools/dynamic-tools/entity-query-tool.js.map +1 -0
- package/dist/tools/dynamic-tools/index.d.ts +8 -0
- package/dist/tools/dynamic-tools/index.d.ts.map +1 -0
- package/dist/tools/dynamic-tools/index.js +8 -0
- package/dist/tools/dynamic-tools/index.js.map +1 -0
- package/dist/tools/frontend-tools/index.d.ts +7 -0
- package/dist/tools/frontend-tools/index.d.ts.map +1 -0
- package/dist/tools/frontend-tools/index.js +7 -0
- package/dist/tools/frontend-tools/index.js.map +1 -0
- package/dist/tools/frontend-tools/record-tools.d.ts +48 -0
- package/dist/tools/frontend-tools/record-tools.d.ts.map +1 -0
- package/dist/tools/frontend-tools/record-tools.js +97 -0
- package/dist/tools/frontend-tools/record-tools.js.map +1 -0
- package/dist/tools/index.d.ts +217 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +52 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/static-tools/index.d.ts +9 -0
- package/dist/tools/static-tools/index.d.ts.map +1 -0
- package/dist/tools/static-tools/index.js +9 -0
- package/dist/tools/static-tools/index.js.map +1 -0
- package/dist/tools/static-tools/location-tool.d.ts +38 -0
- package/dist/tools/static-tools/location-tool.d.ts.map +1 -0
- package/dist/tools/static-tools/location-tool.js +97 -0
- package/dist/tools/static-tools/location-tool.js.map +1 -0
- package/dist/tools/static-tools/weather-tool.d.ts +19 -0
- package/dist/tools/static-tools/weather-tool.d.ts.map +1 -0
- package/dist/tools/static-tools/weather-tool.js +27 -0
- package/dist/tools/static-tools/weather-tool.js.map +1 -0
- package/dist/types/core-types.d.ts +183 -0
- package/dist/types/core-types.d.ts.map +1 -0
- package/dist/types/core-types.js +7 -0
- package/dist/types/core-types.js.map +1 -0
- package/dist/types/index.d.ts +50 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +31 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/ui-types.d.ts +434 -0
- package/dist/types/ui-types.d.ts.map +1 -0
- package/dist/types/ui-types.js +8 -0
- package/dist/types/ui-types.js.map +1 -0
- package/dist/ui/index.d.ts +30 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +67 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui-index.d.ts +12 -607
- package/dist/ui-index.d.ts.map +1 -0
- package/dist/ui-index.js +106 -2350
- package/dist/ui-index.js.map +1 -1
- package/dist/utils/index.d.ts +122 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +336 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/persistence.d.ts +99 -0
- package/dist/utils/persistence.d.ts.map +1 -0
- package/dist/utils/persistence.js +286 -0
- package/dist/utils/persistence.js.map +1 -0
- package/dist/utils/streaming.d.ts +144 -0
- package/dist/utils/streaming.d.ts.map +1 -0
- package/dist/utils/streaming.js +359 -0
- package/dist/utils/streaming.js.map +1 -0
- package/dist/utils/theme.d.ts +162 -0
- package/dist/utils/theme.d.ts.map +1 -0
- package/dist/utils/theme.js +211 -0
- package/dist/utils/theme.js.map +1 -0
- package/dist/utils/warnings.d.ts +77 -0
- package/dist/utils/warnings.d.ts.map +1 -0
- package/dist/utils/warnings.js +228 -0
- package/dist/utils/warnings.js.map +1 -0
- package/package.json +3 -2
- package/dist/ai-core-LBGYFGOK.mjs +0 -17
- package/dist/ai-core-LBGYFGOK.mjs.map +0 -1
- package/dist/ai-core-UGJWSCQN.js +0 -17
- package/dist/ai-core-UGJWSCQN.js.map +0 -1
- package/dist/ai-core-manager-B3Z34RHA.mjs +0 -9
- package/dist/ai-core-manager-B3Z34RHA.mjs.map +0 -1
- package/dist/ai-core-manager-W7SSDCG5.js +0 -9
- package/dist/ai-core-manager-W7SSDCG5.js.map +0 -1
- package/dist/ai-embeddings-5ED5LDXX.mjs +0 -17
- package/dist/ai-embeddings-5ED5LDXX.mjs.map +0 -1
- package/dist/ai-embeddings-WCXZMMTZ.js +0 -17
- package/dist/ai-embeddings-WCXZMMTZ.js.map +0 -1
- package/dist/ai-form-renderer-24IWNMX5.js +0 -233
- package/dist/ai-form-renderer-24IWNMX5.js.map +0 -1
- package/dist/ai-form-renderer-BORQABF2.mjs +0 -233
- package/dist/ai-form-renderer-BORQABF2.mjs.map +0 -1
- package/dist/ai-provider-3PSCVEEN.mjs +0 -17
- package/dist/ai-provider-3PSCVEEN.mjs.map +0 -1
- package/dist/ai-provider-WMPMVZFL.js +0 -17
- package/dist/ai-provider-WMPMVZFL.js.map +0 -1
- package/dist/ai-renderer-7WGGWH5D.mjs +0 -134
- package/dist/ai-renderer-7WGGWH5D.mjs.map +0 -1
- package/dist/ai-renderer-OILYWAJV.js +0 -134
- package/dist/ai-renderer-OILYWAJV.js.map +0 -1
- package/dist/ai-settings-DGCFPK3U.js +0 -15
- package/dist/ai-settings-DGCFPK3U.js.map +0 -1
- package/dist/ai-settings-DTXEAB64.mjs +0 -15
- package/dist/ai-settings-DTXEAB64.mjs.map +0 -1
- package/dist/ai-structured-EGZ26ZS4.mjs +0 -13
- package/dist/ai-structured-EGZ26ZS4.mjs.map +0 -1
- package/dist/ai-structured-N2FZLO4A.js +0 -13
- package/dist/ai-structured-N2FZLO4A.js.map +0 -1
- package/dist/ai-tools-B3R77HZ3.js +0 -19
- package/dist/ai-tools-B3R77HZ3.js.map +0 -1
- package/dist/ai-tools-JAPVYQGE.mjs +0 -19
- package/dist/ai-tools-JAPVYQGE.mjs.map +0 -1
- package/dist/ai.module-GAHVCBTP.js +0 -7
- package/dist/ai.module-GAHVCBTP.js.map +0 -1
- package/dist/ai.module-TTPMTPB3.mjs +0 -7
- package/dist/ai.module-TTPMTPB3.mjs.map +0 -1
- package/dist/chunk-25C2NRSD.mjs +0 -611
- package/dist/chunk-25C2NRSD.mjs.map +0 -1
- package/dist/chunk-4JQ7UOXH.js +0 -427
- package/dist/chunk-4JQ7UOXH.js.map +0 -1
- package/dist/chunk-6IUKES2L.js +0 -290
- package/dist/chunk-6IUKES2L.js.map +0 -1
- package/dist/chunk-COWPK7XN.mjs +0 -834
- package/dist/chunk-COWPK7XN.mjs.map +0 -1
- package/dist/chunk-CTEXPMVZ.js +0 -512
- package/dist/chunk-CTEXPMVZ.js.map +0 -1
- package/dist/chunk-DXQTHA75.js +0 -573
- package/dist/chunk-DXQTHA75.js.map +0 -1
- package/dist/chunk-DZFQ6I23.js +0 -72
- package/dist/chunk-DZFQ6I23.js.map +0 -1
- package/dist/chunk-J323UTPE.mjs +0 -650
- package/dist/chunk-J323UTPE.mjs.map +0 -1
- package/dist/chunk-LHNNALVF.js +0 -834
- package/dist/chunk-LHNNALVF.js.map +0 -1
- package/dist/chunk-O7SZSMXV.js +0 -1621
- package/dist/chunk-O7SZSMXV.js.map +0 -1
- package/dist/chunk-OTNOFOVW.js +0 -650
- package/dist/chunk-OTNOFOVW.js.map +0 -1
- package/dist/chunk-PRIGZEI4.mjs +0 -72
- package/dist/chunk-PRIGZEI4.mjs.map +0 -1
- package/dist/chunk-SBSZ3IPB.mjs +0 -573
- package/dist/chunk-SBSZ3IPB.mjs.map +0 -1
- package/dist/chunk-SXPA6SSD.mjs +0 -1621
- package/dist/chunk-SXPA6SSD.mjs.map +0 -1
- package/dist/chunk-T5A4KAVS.mjs +0 -512
- package/dist/chunk-T5A4KAVS.mjs.map +0 -1
- package/dist/chunk-TDRKKUNT.mjs +0 -357
- package/dist/chunk-TDRKKUNT.mjs.map +0 -1
- package/dist/chunk-TJFNODPE.js +0 -357
- package/dist/chunk-TJFNODPE.js.map +0 -1
- package/dist/chunk-V2SSI3SL.mjs +0 -427
- package/dist/chunk-V2SSI3SL.mjs.map +0 -1
- package/dist/chunk-X42L6MTY.mjs +0 -290
- package/dist/chunk-X42L6MTY.mjs.map +0 -1
- package/dist/chunk-YSVMY77H.js +0 -611
- package/dist/chunk-YSVMY77H.js.map +0 -1
- package/dist/core-ANYRS6EF.mjs +0 -73
- package/dist/core-ANYRS6EF.mjs.map +0 -1
- package/dist/core-K5K34DCS.js +0 -73
- package/dist/core-K5K34DCS.js.map +0 -1
- package/dist/core-index.d.mts +0 -1668
- package/dist/core-index.mjs +0 -101
- package/dist/core-index.mjs.map +0 -1
- package/dist/index.d.mts +0 -2911
- package/dist/index.mjs +0 -1177
- package/dist/index.mjs.map +0 -1
- package/dist/tools-352X7A6X.mjs +0 -366
- package/dist/tools-352X7A6X.mjs.map +0 -1
- package/dist/tools-YLEX6GNO.js +0 -366
- package/dist/tools-YLEX6GNO.js.map +0 -1
- package/dist/ui-index.d.mts +0 -627
- package/dist/ui-index.mjs +0 -2353
- package/dist/ui-index.mjs.map +0 -1
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var _chunkTJFNODPEjs = require('./chunk-TJFNODPE.js');
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
exports.AIEmbeddingsIntegration = _chunkTJFNODPEjs.AIEmbeddingsIntegration; exports.SupportedEmbeddingModels = _chunkTJFNODPEjs.SupportedEmbeddingModels; exports.cosineSimilarity = _chunkTJFNODPEjs.cosineSimilarity; exports.default = _chunkTJFNODPEjs.ai_embeddings_default; exports.embed = _chunkTJFNODPEjs.embed; exports.embedMany = _chunkTJFNODPEjs.embedMany;
|
|
17
|
-
//# sourceMappingURL=ai-embeddings-WCXZMMTZ.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/shixin/dev/workspaces/scenemesh-projects/scenemesh-platform-workbench5/packages/entity-engine-aimodule/dist/ai-embeddings-WCXZMMTZ.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,yWAAC","file":"/Users/shixin/dev/workspaces/scenemesh-projects/scenemesh-platform-workbench5/packages/entity-engine-aimodule/dist/ai-embeddings-WCXZMMTZ.js"}
|
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
|
-
|
|
3
|
-
var _chunkO7SZSMXVjs = require('./chunk-O7SZSMXV.js');
|
|
4
|
-
|
|
5
|
-
// src/entity-module/renderers/ai-form-renderer.tsx
|
|
6
|
-
var _ai = require('ai');
|
|
7
|
-
var _lucidereact = require('lucide-react');
|
|
8
|
-
var _core = require('@mantine/core');
|
|
9
|
-
var _hooks = require('@mantine/hooks');
|
|
10
|
-
var _react = require('react');
|
|
11
|
-
var _entityengine = require('@scenemesh/entity-engine');
|
|
12
|
-
var _jsxruntime = require('react/jsx-runtime');
|
|
13
|
-
function EntityAIFormComp(_props) {
|
|
14
|
-
const engine = _entityengine.useEntityEngine.call(void 0, );
|
|
15
|
-
const model = _props.model;
|
|
16
|
-
const viewdata = _props.viewData;
|
|
17
|
-
const viewId = _optionalChain([_props, 'access', _ => _.additionalProps, 'optionalAccess', _2 => _2.viewId]);
|
|
18
|
-
const vc = engine.componentRegistry.getViewController(void 0, void 0, viewId);
|
|
19
|
-
const { width } = _hooks.useViewportSize.call(void 0, );
|
|
20
|
-
const [drawerOpened, setDrawerOpened] = _react.useState.call(void 0, false);
|
|
21
|
-
const getDrawerSize = _react.useCallback.call(void 0, () => {
|
|
22
|
-
if (width <= 768) return "80%";
|
|
23
|
-
if (width <= 1024) return "40%";
|
|
24
|
-
return "30%";
|
|
25
|
-
}, [width]);
|
|
26
|
-
const handleOpenAI = () => {
|
|
27
|
-
setDrawerOpened(true);
|
|
28
|
-
};
|
|
29
|
-
const handleClose = _react.useCallback.call(void 0, () => {
|
|
30
|
-
setDrawerOpened(false);
|
|
31
|
-
}, []);
|
|
32
|
-
const executeViewControllerTool = _react.useCallback.call(void 0, async (toolName, input) => {
|
|
33
|
-
if (!vc) {
|
|
34
|
-
throw new Error("\u6CA1\u6709\u53EF\u7528\u7684\u89C6\u56FE\u63A7\u5236\u5668");
|
|
35
|
-
}
|
|
36
|
-
const operationMap = {
|
|
37
|
-
"recordGetValues": "record.getValues",
|
|
38
|
-
"recordSetValues": "record.setValues",
|
|
39
|
-
"recordGetFieldInfo": "record.getFieldInfo",
|
|
40
|
-
"recordResetForm": "record.resetForm",
|
|
41
|
-
"recordValidateForm": "record.validateForm"
|
|
42
|
-
};
|
|
43
|
-
if (toolName === "recordSetValues") {
|
|
44
|
-
if (input.values) {
|
|
45
|
-
const fieldNames = Object.keys(input.values);
|
|
46
|
-
const actualFields = await vc.invoke("record.getFieldInfo", {});
|
|
47
|
-
if (actualFields && Array.isArray(actualFields)) {
|
|
48
|
-
const realFieldNames = actualFields.map((field) => _optionalChain([field, 'access', _3 => _3._field, 'optionalAccess', _4 => _4.name])).filter(Boolean);
|
|
49
|
-
const invalidFields = fieldNames.filter((name) => !realFieldNames.includes(name));
|
|
50
|
-
if (invalidFields.length > 0) {
|
|
51
|
-
const validValues = {};
|
|
52
|
-
Object.entries(input.values).forEach(([key, value]) => {
|
|
53
|
-
if (realFieldNames.includes(key)) {
|
|
54
|
-
validValues[key] = value;
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
if (Object.keys(validValues).length > 0) {
|
|
58
|
-
input.values = validValues;
|
|
59
|
-
} else {
|
|
60
|
-
return `Field name error! You used invalid field names.
|
|
61
|
-
|
|
62
|
-
Invalid fields: [${invalidFields.join(", ")}]
|
|
63
|
-
Correct field names: [${realFieldNames.join(", ")}]
|
|
64
|
-
|
|
65
|
-
\u8BF7\u91CD\u65B0\u8C03\u7528recordSetValues\uFF0C\u4F7F\u7528\u6B63\u786E\u7684\u5B57\u6BB5\u540D:
|
|
66
|
-
\u793A\u4F8B: recordSetValues({"values": {"${realFieldNames[0]}": "\u4EA7\u54C1\u503C", "${realFieldNames.slice(1, 3).join('": "\u503C", "')}": "\u503C"}})
|
|
67
|
-
|
|
68
|
-
\u91CD\u8981\u63D0\u9192: \u5FC5\u987B\u4F7F\u7528recordGetFieldInfo\u8FD4\u56DE\u7684\u786E\u5207\u5B57\u6BB5\u540D\uFF0C\u4E0D\u80FD\u731C\u6D4B\u6216\u7FFB\u8BD1\u5B57\u6BB5\u540D\uFF01`;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
const operation = operationMap[toolName];
|
|
75
|
-
if (!operation) {
|
|
76
|
-
throw new Error(`\u672A\u77E5\u7684\u5DE5\u5177: ${toolName}`);
|
|
77
|
-
}
|
|
78
|
-
const result = await vc.invoke(operation, input);
|
|
79
|
-
return typeof result === "string" ? result : JSON.stringify(result, null, 2);
|
|
80
|
-
}, [vc]);
|
|
81
|
-
_react.useEffect.call(void 0, () => {
|
|
82
|
-
if (typeof window !== "undefined") {
|
|
83
|
-
window.__ENTITY_ENGINE_AI_BRIDGE__ = {
|
|
84
|
-
executeViewControllerTool
|
|
85
|
-
};
|
|
86
|
-
window.resolveFrontendTool = (waitId, result) => {
|
|
87
|
-
fetch("/api/ee/servlet/ai/frontend-tool-result", {
|
|
88
|
-
method: "POST",
|
|
89
|
-
headers: {
|
|
90
|
-
"Content-Type": "application/json"
|
|
91
|
-
},
|
|
92
|
-
body: JSON.stringify({
|
|
93
|
-
waitId,
|
|
94
|
-
result,
|
|
95
|
-
timestamp: Date.now()
|
|
96
|
-
})
|
|
97
|
-
}).then((response) => {
|
|
98
|
-
if (!response.ok) {
|
|
99
|
-
console.error("Failed to send tool result");
|
|
100
|
-
}
|
|
101
|
-
}).catch((error) => {
|
|
102
|
-
console.error("Failed to send tool result:", error);
|
|
103
|
-
});
|
|
104
|
-
};
|
|
105
|
-
window.rejectFrontendTool = (waitId, error) => {
|
|
106
|
-
fetch("/api/ee/servlet/ai/frontend-tool-result", {
|
|
107
|
-
method: "POST",
|
|
108
|
-
headers: {
|
|
109
|
-
"Content-Type": "application/json"
|
|
110
|
-
},
|
|
111
|
-
body: JSON.stringify({
|
|
112
|
-
waitId,
|
|
113
|
-
error,
|
|
114
|
-
timestamp: Date.now()
|
|
115
|
-
})
|
|
116
|
-
}).catch((networkError) => {
|
|
117
|
-
});
|
|
118
|
-
};
|
|
119
|
-
return () => {
|
|
120
|
-
if (window.__ENTITY_ENGINE_AI_BRIDGE__) {
|
|
121
|
-
delete window.__ENTITY_ENGINE_AI_BRIDGE__;
|
|
122
|
-
}
|
|
123
|
-
if (window.resolveFrontendTool) {
|
|
124
|
-
delete window.resolveFrontendTool;
|
|
125
|
-
}
|
|
126
|
-
if (window.rejectFrontendTool) {
|
|
127
|
-
delete window.rejectFrontendTool;
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
return () => {
|
|
132
|
-
};
|
|
133
|
-
}, [executeViewControllerTool]);
|
|
134
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
135
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
136
|
-
_core.Button,
|
|
137
|
-
{
|
|
138
|
-
leftSection: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.SparklesIcon, { size: 20 }),
|
|
139
|
-
onClick: handleOpenAI,
|
|
140
|
-
disabled: !vc,
|
|
141
|
-
variant: "light",
|
|
142
|
-
children: "\u667A\u80FD\u586B\u8868"
|
|
143
|
-
}
|
|
144
|
-
),
|
|
145
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
146
|
-
_core.Drawer,
|
|
147
|
-
{
|
|
148
|
-
opened: drawerOpened,
|
|
149
|
-
onClose: handleClose,
|
|
150
|
-
position: "right",
|
|
151
|
-
withOverlay: false,
|
|
152
|
-
closeOnClickOutside: false,
|
|
153
|
-
closeOnEscape: true,
|
|
154
|
-
zIndex: 9999999,
|
|
155
|
-
withCloseButton: false,
|
|
156
|
-
transitionProps: {
|
|
157
|
-
transition: "slide-left",
|
|
158
|
-
duration: 200,
|
|
159
|
-
timingFunction: "ease-out"
|
|
160
|
-
},
|
|
161
|
-
styles: {
|
|
162
|
-
content: {
|
|
163
|
-
height: "100vh",
|
|
164
|
-
borderRadius: 0,
|
|
165
|
-
display: "flex",
|
|
166
|
-
flexDirection: "column",
|
|
167
|
-
boxShadow: "-4px 0 20px rgba(0, 0, 0, 0.1)"
|
|
168
|
-
},
|
|
169
|
-
body: {
|
|
170
|
-
height: "100vh",
|
|
171
|
-
padding: 0,
|
|
172
|
-
overflow: "hidden",
|
|
173
|
-
flex: 1,
|
|
174
|
-
display: "flex",
|
|
175
|
-
flexDirection: "column"
|
|
176
|
-
}
|
|
177
|
-
},
|
|
178
|
-
size: getDrawerSize(),
|
|
179
|
-
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
180
|
-
_chunkO7SZSMXVjs.ChatDialog,
|
|
181
|
-
{
|
|
182
|
-
title: "AI\u52A9\u624B",
|
|
183
|
-
description: `scenemesh ai ${vc ? `\u2022 ${vc.viewType}\u89C6\u56FE` : ""}`,
|
|
184
|
-
open: true,
|
|
185
|
-
onOpenChange: (open) => {
|
|
186
|
-
if (!open) {
|
|
187
|
-
handleClose();
|
|
188
|
-
}
|
|
189
|
-
},
|
|
190
|
-
placeholder: "\u8F93\u5165\u60A8\u7684\u95EE\u9898\u6216\u9700\u6C42...",
|
|
191
|
-
showHeader: true,
|
|
192
|
-
allowFileUpload: true,
|
|
193
|
-
acceptedFileTypes: ["image/*", "text/*", "application/pdf", "application/json"],
|
|
194
|
-
maxFileSize: 10 * 1024 * 1024,
|
|
195
|
-
theme: "system",
|
|
196
|
-
chatOptions: {
|
|
197
|
-
id: "ai-assistant-chat",
|
|
198
|
-
transport: new (0, _ai.DefaultChatTransport)({
|
|
199
|
-
api: "/api/ee/servlet/ai/chat"
|
|
200
|
-
}),
|
|
201
|
-
onFinish: (options) => {
|
|
202
|
-
},
|
|
203
|
-
onError: (error) => {
|
|
204
|
-
if (error.message.includes("AI\u670D\u52A1\u8FDE\u63A5\u5931\u8D25")) {
|
|
205
|
-
console.error("AI service connection failed:", error);
|
|
206
|
-
}
|
|
207
|
-
},
|
|
208
|
-
// Tool call listener - calls ChatDialog's frontend tool handler
|
|
209
|
-
onToolCall: async ({ toolCall }) => {
|
|
210
|
-
const toolInput = toolCall.args || toolCall.input || toolCall.parameters || {};
|
|
211
|
-
if (typeof window.__FRONTEND_TOOL_HANDLER__ === "function") {
|
|
212
|
-
setTimeout(() => {
|
|
213
|
-
window.__FRONTEND_TOOL_HANDLER__(toolCall.toolName, toolInput);
|
|
214
|
-
}, 0);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
)
|
|
220
|
-
}
|
|
221
|
-
)
|
|
222
|
-
] });
|
|
223
|
-
}
|
|
224
|
-
var EntityEngineAIFormRenderer = {
|
|
225
|
-
name: "view-form-tool-1",
|
|
226
|
-
slotName: "view-form-tool",
|
|
227
|
-
disabled: false,
|
|
228
|
-
renderer: (props) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, EntityAIFormComp, { ...props })
|
|
229
|
-
};
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
exports.EntityEngineAIFormRenderer = EntityEngineAIFormRenderer;
|
|
233
|
-
//# sourceMappingURL=ai-form-renderer-24IWNMX5.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/shixin/dev/workspaces/scenemesh-projects/scenemesh-platform-workbench5/packages/entity-engine-aimodule/dist/ai-form-renderer-24IWNMX5.js","../src/entity-module/renderers/ai-form-renderer.tsx"],"names":[],"mappings":"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","file":"/Users/shixin/dev/workspaces/scenemesh-projects/scenemesh-platform-workbench5/packages/entity-engine-aimodule/dist/ai-form-renderer-24IWNMX5.js","sourcesContent":[null,"// 'use client' directive is added by tsup banner\n\nimport type { IEntityView, IEntityModel, IEntityNamedRenderer } from '@scenemesh/entity-engine';\n\nimport { DefaultChatTransport } from 'ai';\nimport { SparklesIcon } from 'lucide-react';\nimport { Button, Drawer } from '@mantine/core';\nimport { useViewportSize } from '@mantine/hooks';\nimport { useState, useEffect, useCallback } from 'react';\nimport { useEntityEngine } from '@scenemesh/entity-engine';\n\nimport { ChatDialog } from '../../components';\n\n\nfunction EntityAIFormComp(_props: any) {\n const engine = useEntityEngine();\n const model = _props.model as IEntityModel;\n const viewdata = _props.viewData as IEntityView;\n const viewId = _props.additionalProps?.viewId;\n const vc = engine.componentRegistry.getViewController(undefined, undefined, viewId);\n \n const { width } = useViewportSize();\n const [drawerOpened, setDrawerOpened] = useState(false);\n\n // Responsive size calculation\n const getDrawerSize = useCallback(() => {\n if (width <= 768) return '80%';\n if (width <= 1024) return '40%';\n return '30%';\n }, [width]);\n\n const handleOpenAI = () => {\n setDrawerOpened(true);\n };\n\n const handleClose = useCallback(() => {\n setDrawerOpened(false);\n }, []);\n\n // Frontend tool executor - executes view controller operations directly in frontend\n const executeViewControllerTool = useCallback(async (toolName: string, input: any): Promise<string> => {\n \n if (!vc) {\n throw new Error('没有可用的视图控制器');\n }\n\n // 解析工具名称到视图控制器操作\n const operationMap: Record<string, string> = {\n 'recordGetValues': 'record.getValues',\n 'recordSetValues': 'record.setValues',\n 'recordGetFieldInfo': 'record.getFieldInfo',\n 'recordResetForm': 'record.resetForm',\n 'recordValidateForm': 'record.validateForm',\n };\n\n // Validate field names and record actual set values\n if (toolName === 'recordSetValues') {\n if (input.values) {\n const fieldNames = Object.keys(input.values);\n \n // 获取当前表单实际的字段名\n const actualFields = await vc.invoke('record.getFieldInfo', {});\n if (actualFields && Array.isArray(actualFields)) {\n const realFieldNames = actualFields.map((field: any) => field._field?.name).filter(Boolean);\n \n // 检查字段名是否匹配\n const invalidFields = fieldNames.filter(name => !realFieldNames.includes(name));\n if (invalidFields.length > 0) {\n \n // 过滤掉无效字段,只设置有效字段\n const validValues: Record<string, any> = {};\n Object.entries(input.values).forEach(([key, value]) => {\n if (realFieldNames.includes(key)) {\n validValues[key] = value;\n }\n });\n \n if (Object.keys(validValues).length > 0) {\n // 更新input.values为只包含有效字段\n input.values = validValues;\n } else {\n // 🚨 返回详细错误信息,包含准确字段名,让AI重新调用\n return `Field name error! You used invalid field names.\\n\\nInvalid fields: [${invalidFields.join(', ')}]\\nCorrect field names: [${realFieldNames.join(', ')}]\n\n请重新调用recordSetValues,使用正确的字段名:\n示例: recordSetValues({\"values\": {\"${realFieldNames[0]}\": \"产品值\", \"${realFieldNames.slice(1, 3).join('\": \"值\", \"')}\": \"值\"}})\n\n重要提醒: 必须使用recordGetFieldInfo返回的确切字段名,不能猜测或翻译字段名!`;\n }\n }\n }\n }\n }\n\n const operation = operationMap[toolName];\n if (!operation) {\n throw new Error(`未知的工具: ${toolName}`);\n }\n\n const result = await vc.invoke(operation, input);\n \n // 返回字符串结果供AI使用\n return typeof result === 'string' ? result : JSON.stringify(result, null, 2);\n }, [vc]);\n\n // 🌉 注册全局前端工具桥接和HTTP通信\n useEffect(() => {\n if (typeof window !== 'undefined') {\n window.__ENTITY_ENGINE_AI_BRIDGE__ = {\n executeViewControllerTool\n };\n\n // Setup frontend to backend HTTP communication bridge\n window.resolveFrontendTool = (waitId: string, result: string) => {\n \n // 通过HTTP POST发送结果给后端\n fetch('/api/ee/servlet/ai/frontend-tool-result', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n waitId,\n result,\n timestamp: Date.now()\n })\n }).then(response => {\n if (!response.ok) {\n console.error('Failed to send tool result');\n }\n }).catch(error => {\n console.error('Failed to send tool result:', error);\n });\n };\n \n window.rejectFrontendTool = (waitId: string, error: string) => {\n \n fetch('/api/ee/servlet/ai/frontend-tool-result', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n waitId,\n error,\n timestamp: Date.now()\n })\n }).catch(networkError => {\n });\n };\n\n return () => {\n if (window.__ENTITY_ENGINE_AI_BRIDGE__) {\n delete (window as any).__ENTITY_ENGINE_AI_BRIDGE__;\n }\n if ((window as any).resolveFrontendTool) {\n delete (window as any).resolveFrontendTool;\n }\n if ((window as any).rejectFrontendTool) {\n delete (window as any).rejectFrontendTool;\n }\n };\n }\n return () =>{}\n }, [executeViewControllerTool]);\n\n\n return (\n <>\n <Button \n leftSection={<SparklesIcon size={20} />} \n onClick={handleOpenAI}\n disabled={!vc}\n variant='light'\n >\n 智能填表\n </Button>\n\n <Drawer\n opened={drawerOpened}\n onClose={handleClose}\n position=\"right\"\n withOverlay={false}\n closeOnClickOutside={false}\n closeOnEscape\n zIndex={9999999}\n withCloseButton={false}\n transitionProps={{\n transition: 'slide-left',\n duration: 200,\n timingFunction: 'ease-out',\n }}\n styles={{\n content: {\n height: '100vh',\n borderRadius: 0,\n display: 'flex',\n flexDirection: 'column',\n boxShadow: '-4px 0 20px rgba(0, 0, 0, 0.1)',\n },\n body: {\n height: '100vh',\n padding: 0,\n overflow: 'hidden',\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n }\n }}\n size={getDrawerSize()}\n >\n {/* Pass viewController directly to ChatDialog */}\n <ChatDialog\n title=\"AI助手\"\n description={`scenemesh ai ${vc ? `• ${vc.viewType}视图` : ''}`}\n open\n onOpenChange={(open) => {\n if (!open) {\n handleClose();\n }\n }}\n placeholder=\"输入您的问题或需求...\"\n showHeader\n allowFileUpload\n acceptedFileTypes={['image/*', 'text/*', 'application/pdf', 'application/json']}\n maxFileSize={10 * 1024 * 1024} // 10MB\n theme=\"system\"\n // Mixed tool configuration - backend tools + frontend tool interception\n chatOptions={{\n id: 'ai-assistant-chat',\n transport: new DefaultChatTransport({\n api: '/api/ee/servlet/ai/chat',\n }),\n onFinish: (options) => {\n // Standard AI SDK onFinish callback\n },\n onError: (error) => {\n if (error.message.includes('AI服务连接失败')) {\n console.error('AI service connection failed:', error);\n }\n },\n // Tool call listener - calls ChatDialog's frontend tool handler\n onToolCall: async ({ toolCall }: { toolCall: any }) => {\n \n // Try different parameter fields\n const toolInput = toolCall.args || toolCall.input || toolCall.parameters || {};\n \n \n // Call ChatDialog's frontend tool handler\n if (typeof (window as any).__FRONTEND_TOOL_HANDLER__ === 'function') {\n \n // 异步调用,不阻塞AI SDK\n setTimeout(() => {\n (window as any).__FRONTEND_TOOL_HANDLER__(toolCall.toolName, toolInput);\n }, 0);\n }\n },\n }}\n />\n </Drawer>\n </>\n );\n}\n\nexport const EntityEngineAIFormRenderer: IEntityNamedRenderer = {\n name: 'view-form-tool-1',\n slotName: 'view-form-tool',\n disabled: false,\n renderer: (props) => <EntityAIFormComp {...props} />,\n};"]}
|
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ChatDialog
|
|
3
|
-
} from "./chunk-SXPA6SSD.mjs";
|
|
4
|
-
|
|
5
|
-
// src/entity-module/renderers/ai-form-renderer.tsx
|
|
6
|
-
import { DefaultChatTransport } from "ai";
|
|
7
|
-
import { SparklesIcon } from "lucide-react";
|
|
8
|
-
import { Button, Drawer } from "@mantine/core";
|
|
9
|
-
import { useViewportSize } from "@mantine/hooks";
|
|
10
|
-
import { useState, useEffect, useCallback } from "react";
|
|
11
|
-
import { useEntityEngine } from "@scenemesh/entity-engine";
|
|
12
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
13
|
-
function EntityAIFormComp(_props) {
|
|
14
|
-
const engine = useEntityEngine();
|
|
15
|
-
const model = _props.model;
|
|
16
|
-
const viewdata = _props.viewData;
|
|
17
|
-
const viewId = _props.additionalProps?.viewId;
|
|
18
|
-
const vc = engine.componentRegistry.getViewController(void 0, void 0, viewId);
|
|
19
|
-
const { width } = useViewportSize();
|
|
20
|
-
const [drawerOpened, setDrawerOpened] = useState(false);
|
|
21
|
-
const getDrawerSize = useCallback(() => {
|
|
22
|
-
if (width <= 768) return "80%";
|
|
23
|
-
if (width <= 1024) return "40%";
|
|
24
|
-
return "30%";
|
|
25
|
-
}, [width]);
|
|
26
|
-
const handleOpenAI = () => {
|
|
27
|
-
setDrawerOpened(true);
|
|
28
|
-
};
|
|
29
|
-
const handleClose = useCallback(() => {
|
|
30
|
-
setDrawerOpened(false);
|
|
31
|
-
}, []);
|
|
32
|
-
const executeViewControllerTool = useCallback(async (toolName, input) => {
|
|
33
|
-
if (!vc) {
|
|
34
|
-
throw new Error("\u6CA1\u6709\u53EF\u7528\u7684\u89C6\u56FE\u63A7\u5236\u5668");
|
|
35
|
-
}
|
|
36
|
-
const operationMap = {
|
|
37
|
-
"recordGetValues": "record.getValues",
|
|
38
|
-
"recordSetValues": "record.setValues",
|
|
39
|
-
"recordGetFieldInfo": "record.getFieldInfo",
|
|
40
|
-
"recordResetForm": "record.resetForm",
|
|
41
|
-
"recordValidateForm": "record.validateForm"
|
|
42
|
-
};
|
|
43
|
-
if (toolName === "recordSetValues") {
|
|
44
|
-
if (input.values) {
|
|
45
|
-
const fieldNames = Object.keys(input.values);
|
|
46
|
-
const actualFields = await vc.invoke("record.getFieldInfo", {});
|
|
47
|
-
if (actualFields && Array.isArray(actualFields)) {
|
|
48
|
-
const realFieldNames = actualFields.map((field) => field._field?.name).filter(Boolean);
|
|
49
|
-
const invalidFields = fieldNames.filter((name) => !realFieldNames.includes(name));
|
|
50
|
-
if (invalidFields.length > 0) {
|
|
51
|
-
const validValues = {};
|
|
52
|
-
Object.entries(input.values).forEach(([key, value]) => {
|
|
53
|
-
if (realFieldNames.includes(key)) {
|
|
54
|
-
validValues[key] = value;
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
if (Object.keys(validValues).length > 0) {
|
|
58
|
-
input.values = validValues;
|
|
59
|
-
} else {
|
|
60
|
-
return `Field name error! You used invalid field names.
|
|
61
|
-
|
|
62
|
-
Invalid fields: [${invalidFields.join(", ")}]
|
|
63
|
-
Correct field names: [${realFieldNames.join(", ")}]
|
|
64
|
-
|
|
65
|
-
\u8BF7\u91CD\u65B0\u8C03\u7528recordSetValues\uFF0C\u4F7F\u7528\u6B63\u786E\u7684\u5B57\u6BB5\u540D:
|
|
66
|
-
\u793A\u4F8B: recordSetValues({"values": {"${realFieldNames[0]}": "\u4EA7\u54C1\u503C", "${realFieldNames.slice(1, 3).join('": "\u503C", "')}": "\u503C"}})
|
|
67
|
-
|
|
68
|
-
\u91CD\u8981\u63D0\u9192: \u5FC5\u987B\u4F7F\u7528recordGetFieldInfo\u8FD4\u56DE\u7684\u786E\u5207\u5B57\u6BB5\u540D\uFF0C\u4E0D\u80FD\u731C\u6D4B\u6216\u7FFB\u8BD1\u5B57\u6BB5\u540D\uFF01`;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
const operation = operationMap[toolName];
|
|
75
|
-
if (!operation) {
|
|
76
|
-
throw new Error(`\u672A\u77E5\u7684\u5DE5\u5177: ${toolName}`);
|
|
77
|
-
}
|
|
78
|
-
const result = await vc.invoke(operation, input);
|
|
79
|
-
return typeof result === "string" ? result : JSON.stringify(result, null, 2);
|
|
80
|
-
}, [vc]);
|
|
81
|
-
useEffect(() => {
|
|
82
|
-
if (typeof window !== "undefined") {
|
|
83
|
-
window.__ENTITY_ENGINE_AI_BRIDGE__ = {
|
|
84
|
-
executeViewControllerTool
|
|
85
|
-
};
|
|
86
|
-
window.resolveFrontendTool = (waitId, result) => {
|
|
87
|
-
fetch("/api/ee/servlet/ai/frontend-tool-result", {
|
|
88
|
-
method: "POST",
|
|
89
|
-
headers: {
|
|
90
|
-
"Content-Type": "application/json"
|
|
91
|
-
},
|
|
92
|
-
body: JSON.stringify({
|
|
93
|
-
waitId,
|
|
94
|
-
result,
|
|
95
|
-
timestamp: Date.now()
|
|
96
|
-
})
|
|
97
|
-
}).then((response) => {
|
|
98
|
-
if (!response.ok) {
|
|
99
|
-
console.error("Failed to send tool result");
|
|
100
|
-
}
|
|
101
|
-
}).catch((error) => {
|
|
102
|
-
console.error("Failed to send tool result:", error);
|
|
103
|
-
});
|
|
104
|
-
};
|
|
105
|
-
window.rejectFrontendTool = (waitId, error) => {
|
|
106
|
-
fetch("/api/ee/servlet/ai/frontend-tool-result", {
|
|
107
|
-
method: "POST",
|
|
108
|
-
headers: {
|
|
109
|
-
"Content-Type": "application/json"
|
|
110
|
-
},
|
|
111
|
-
body: JSON.stringify({
|
|
112
|
-
waitId,
|
|
113
|
-
error,
|
|
114
|
-
timestamp: Date.now()
|
|
115
|
-
})
|
|
116
|
-
}).catch((networkError) => {
|
|
117
|
-
});
|
|
118
|
-
};
|
|
119
|
-
return () => {
|
|
120
|
-
if (window.__ENTITY_ENGINE_AI_BRIDGE__) {
|
|
121
|
-
delete window.__ENTITY_ENGINE_AI_BRIDGE__;
|
|
122
|
-
}
|
|
123
|
-
if (window.resolveFrontendTool) {
|
|
124
|
-
delete window.resolveFrontendTool;
|
|
125
|
-
}
|
|
126
|
-
if (window.rejectFrontendTool) {
|
|
127
|
-
delete window.rejectFrontendTool;
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
return () => {
|
|
132
|
-
};
|
|
133
|
-
}, [executeViewControllerTool]);
|
|
134
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
135
|
-
/* @__PURE__ */ jsx(
|
|
136
|
-
Button,
|
|
137
|
-
{
|
|
138
|
-
leftSection: /* @__PURE__ */ jsx(SparklesIcon, { size: 20 }),
|
|
139
|
-
onClick: handleOpenAI,
|
|
140
|
-
disabled: !vc,
|
|
141
|
-
variant: "light",
|
|
142
|
-
children: "\u667A\u80FD\u586B\u8868"
|
|
143
|
-
}
|
|
144
|
-
),
|
|
145
|
-
/* @__PURE__ */ jsx(
|
|
146
|
-
Drawer,
|
|
147
|
-
{
|
|
148
|
-
opened: drawerOpened,
|
|
149
|
-
onClose: handleClose,
|
|
150
|
-
position: "right",
|
|
151
|
-
withOverlay: false,
|
|
152
|
-
closeOnClickOutside: false,
|
|
153
|
-
closeOnEscape: true,
|
|
154
|
-
zIndex: 9999999,
|
|
155
|
-
withCloseButton: false,
|
|
156
|
-
transitionProps: {
|
|
157
|
-
transition: "slide-left",
|
|
158
|
-
duration: 200,
|
|
159
|
-
timingFunction: "ease-out"
|
|
160
|
-
},
|
|
161
|
-
styles: {
|
|
162
|
-
content: {
|
|
163
|
-
height: "100vh",
|
|
164
|
-
borderRadius: 0,
|
|
165
|
-
display: "flex",
|
|
166
|
-
flexDirection: "column",
|
|
167
|
-
boxShadow: "-4px 0 20px rgba(0, 0, 0, 0.1)"
|
|
168
|
-
},
|
|
169
|
-
body: {
|
|
170
|
-
height: "100vh",
|
|
171
|
-
padding: 0,
|
|
172
|
-
overflow: "hidden",
|
|
173
|
-
flex: 1,
|
|
174
|
-
display: "flex",
|
|
175
|
-
flexDirection: "column"
|
|
176
|
-
}
|
|
177
|
-
},
|
|
178
|
-
size: getDrawerSize(),
|
|
179
|
-
children: /* @__PURE__ */ jsx(
|
|
180
|
-
ChatDialog,
|
|
181
|
-
{
|
|
182
|
-
title: "AI\u52A9\u624B",
|
|
183
|
-
description: `scenemesh ai ${vc ? `\u2022 ${vc.viewType}\u89C6\u56FE` : ""}`,
|
|
184
|
-
open: true,
|
|
185
|
-
onOpenChange: (open) => {
|
|
186
|
-
if (!open) {
|
|
187
|
-
handleClose();
|
|
188
|
-
}
|
|
189
|
-
},
|
|
190
|
-
placeholder: "\u8F93\u5165\u60A8\u7684\u95EE\u9898\u6216\u9700\u6C42...",
|
|
191
|
-
showHeader: true,
|
|
192
|
-
allowFileUpload: true,
|
|
193
|
-
acceptedFileTypes: ["image/*", "text/*", "application/pdf", "application/json"],
|
|
194
|
-
maxFileSize: 10 * 1024 * 1024,
|
|
195
|
-
theme: "system",
|
|
196
|
-
chatOptions: {
|
|
197
|
-
id: "ai-assistant-chat",
|
|
198
|
-
transport: new DefaultChatTransport({
|
|
199
|
-
api: "/api/ee/servlet/ai/chat"
|
|
200
|
-
}),
|
|
201
|
-
onFinish: (options) => {
|
|
202
|
-
},
|
|
203
|
-
onError: (error) => {
|
|
204
|
-
if (error.message.includes("AI\u670D\u52A1\u8FDE\u63A5\u5931\u8D25")) {
|
|
205
|
-
console.error("AI service connection failed:", error);
|
|
206
|
-
}
|
|
207
|
-
},
|
|
208
|
-
// Tool call listener - calls ChatDialog's frontend tool handler
|
|
209
|
-
onToolCall: async ({ toolCall }) => {
|
|
210
|
-
const toolInput = toolCall.args || toolCall.input || toolCall.parameters || {};
|
|
211
|
-
if (typeof window.__FRONTEND_TOOL_HANDLER__ === "function") {
|
|
212
|
-
setTimeout(() => {
|
|
213
|
-
window.__FRONTEND_TOOL_HANDLER__(toolCall.toolName, toolInput);
|
|
214
|
-
}, 0);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
)
|
|
220
|
-
}
|
|
221
|
-
)
|
|
222
|
-
] });
|
|
223
|
-
}
|
|
224
|
-
var EntityEngineAIFormRenderer = {
|
|
225
|
-
name: "view-form-tool-1",
|
|
226
|
-
slotName: "view-form-tool",
|
|
227
|
-
disabled: false,
|
|
228
|
-
renderer: (props) => /* @__PURE__ */ jsx(EntityAIFormComp, { ...props })
|
|
229
|
-
};
|
|
230
|
-
export {
|
|
231
|
-
EntityEngineAIFormRenderer
|
|
232
|
-
};
|
|
233
|
-
//# sourceMappingURL=ai-form-renderer-BORQABF2.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/entity-module/renderers/ai-form-renderer.tsx"],"sourcesContent":["// 'use client' directive is added by tsup banner\n\nimport type { IEntityView, IEntityModel, IEntityNamedRenderer } from '@scenemesh/entity-engine';\n\nimport { DefaultChatTransport } from 'ai';\nimport { SparklesIcon } from 'lucide-react';\nimport { Button, Drawer } from '@mantine/core';\nimport { useViewportSize } from '@mantine/hooks';\nimport { useState, useEffect, useCallback } from 'react';\nimport { useEntityEngine } from '@scenemesh/entity-engine';\n\nimport { ChatDialog } from '../../components';\n\n\nfunction EntityAIFormComp(_props: any) {\n const engine = useEntityEngine();\n const model = _props.model as IEntityModel;\n const viewdata = _props.viewData as IEntityView;\n const viewId = _props.additionalProps?.viewId;\n const vc = engine.componentRegistry.getViewController(undefined, undefined, viewId);\n \n const { width } = useViewportSize();\n const [drawerOpened, setDrawerOpened] = useState(false);\n\n // Responsive size calculation\n const getDrawerSize = useCallback(() => {\n if (width <= 768) return '80%';\n if (width <= 1024) return '40%';\n return '30%';\n }, [width]);\n\n const handleOpenAI = () => {\n setDrawerOpened(true);\n };\n\n const handleClose = useCallback(() => {\n setDrawerOpened(false);\n }, []);\n\n // Frontend tool executor - executes view controller operations directly in frontend\n const executeViewControllerTool = useCallback(async (toolName: string, input: any): Promise<string> => {\n \n if (!vc) {\n throw new Error('没有可用的视图控制器');\n }\n\n // 解析工具名称到视图控制器操作\n const operationMap: Record<string, string> = {\n 'recordGetValues': 'record.getValues',\n 'recordSetValues': 'record.setValues',\n 'recordGetFieldInfo': 'record.getFieldInfo',\n 'recordResetForm': 'record.resetForm',\n 'recordValidateForm': 'record.validateForm',\n };\n\n // Validate field names and record actual set values\n if (toolName === 'recordSetValues') {\n if (input.values) {\n const fieldNames = Object.keys(input.values);\n \n // 获取当前表单实际的字段名\n const actualFields = await vc.invoke('record.getFieldInfo', {});\n if (actualFields && Array.isArray(actualFields)) {\n const realFieldNames = actualFields.map((field: any) => field._field?.name).filter(Boolean);\n \n // 检查字段名是否匹配\n const invalidFields = fieldNames.filter(name => !realFieldNames.includes(name));\n if (invalidFields.length > 0) {\n \n // 过滤掉无效字段,只设置有效字段\n const validValues: Record<string, any> = {};\n Object.entries(input.values).forEach(([key, value]) => {\n if (realFieldNames.includes(key)) {\n validValues[key] = value;\n }\n });\n \n if (Object.keys(validValues).length > 0) {\n // 更新input.values为只包含有效字段\n input.values = validValues;\n } else {\n // 🚨 返回详细错误信息,包含准确字段名,让AI重新调用\n return `Field name error! You used invalid field names.\\n\\nInvalid fields: [${invalidFields.join(', ')}]\\nCorrect field names: [${realFieldNames.join(', ')}]\n\n请重新调用recordSetValues,使用正确的字段名:\n示例: recordSetValues({\"values\": {\"${realFieldNames[0]}\": \"产品值\", \"${realFieldNames.slice(1, 3).join('\": \"值\", \"')}\": \"值\"}})\n\n重要提醒: 必须使用recordGetFieldInfo返回的确切字段名,不能猜测或翻译字段名!`;\n }\n }\n }\n }\n }\n\n const operation = operationMap[toolName];\n if (!operation) {\n throw new Error(`未知的工具: ${toolName}`);\n }\n\n const result = await vc.invoke(operation, input);\n \n // 返回字符串结果供AI使用\n return typeof result === 'string' ? result : JSON.stringify(result, null, 2);\n }, [vc]);\n\n // 🌉 注册全局前端工具桥接和HTTP通信\n useEffect(() => {\n if (typeof window !== 'undefined') {\n window.__ENTITY_ENGINE_AI_BRIDGE__ = {\n executeViewControllerTool\n };\n\n // Setup frontend to backend HTTP communication bridge\n window.resolveFrontendTool = (waitId: string, result: string) => {\n \n // 通过HTTP POST发送结果给后端\n fetch('/api/ee/servlet/ai/frontend-tool-result', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n waitId,\n result,\n timestamp: Date.now()\n })\n }).then(response => {\n if (!response.ok) {\n console.error('Failed to send tool result');\n }\n }).catch(error => {\n console.error('Failed to send tool result:', error);\n });\n };\n \n window.rejectFrontendTool = (waitId: string, error: string) => {\n \n fetch('/api/ee/servlet/ai/frontend-tool-result', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n waitId,\n error,\n timestamp: Date.now()\n })\n }).catch(networkError => {\n });\n };\n\n return () => {\n if (window.__ENTITY_ENGINE_AI_BRIDGE__) {\n delete (window as any).__ENTITY_ENGINE_AI_BRIDGE__;\n }\n if ((window as any).resolveFrontendTool) {\n delete (window as any).resolveFrontendTool;\n }\n if ((window as any).rejectFrontendTool) {\n delete (window as any).rejectFrontendTool;\n }\n };\n }\n return () =>{}\n }, [executeViewControllerTool]);\n\n\n return (\n <>\n <Button \n leftSection={<SparklesIcon size={20} />} \n onClick={handleOpenAI}\n disabled={!vc}\n variant='light'\n >\n 智能填表\n </Button>\n\n <Drawer\n opened={drawerOpened}\n onClose={handleClose}\n position=\"right\"\n withOverlay={false}\n closeOnClickOutside={false}\n closeOnEscape\n zIndex={9999999}\n withCloseButton={false}\n transitionProps={{\n transition: 'slide-left',\n duration: 200,\n timingFunction: 'ease-out',\n }}\n styles={{\n content: {\n height: '100vh',\n borderRadius: 0,\n display: 'flex',\n flexDirection: 'column',\n boxShadow: '-4px 0 20px rgba(0, 0, 0, 0.1)',\n },\n body: {\n height: '100vh',\n padding: 0,\n overflow: 'hidden',\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n }\n }}\n size={getDrawerSize()}\n >\n {/* Pass viewController directly to ChatDialog */}\n <ChatDialog\n title=\"AI助手\"\n description={`scenemesh ai ${vc ? `• ${vc.viewType}视图` : ''}`}\n open\n onOpenChange={(open) => {\n if (!open) {\n handleClose();\n }\n }}\n placeholder=\"输入您的问题或需求...\"\n showHeader\n allowFileUpload\n acceptedFileTypes={['image/*', 'text/*', 'application/pdf', 'application/json']}\n maxFileSize={10 * 1024 * 1024} // 10MB\n theme=\"system\"\n // Mixed tool configuration - backend tools + frontend tool interception\n chatOptions={{\n id: 'ai-assistant-chat',\n transport: new DefaultChatTransport({\n api: '/api/ee/servlet/ai/chat',\n }),\n onFinish: (options) => {\n // Standard AI SDK onFinish callback\n },\n onError: (error) => {\n if (error.message.includes('AI服务连接失败')) {\n console.error('AI service connection failed:', error);\n }\n },\n // Tool call listener - calls ChatDialog's frontend tool handler\n onToolCall: async ({ toolCall }: { toolCall: any }) => {\n \n // Try different parameter fields\n const toolInput = toolCall.args || toolCall.input || toolCall.parameters || {};\n \n \n // Call ChatDialog's frontend tool handler\n if (typeof (window as any).__FRONTEND_TOOL_HANDLER__ === 'function') {\n \n // 异步调用,不阻塞AI SDK\n setTimeout(() => {\n (window as any).__FRONTEND_TOOL_HANDLER__(toolCall.toolName, toolInput);\n }, 0);\n }\n },\n }}\n />\n </Drawer>\n </>\n );\n}\n\nexport const EntityEngineAIFormRenderer: IEntityNamedRenderer = {\n name: 'view-form-tool-1',\n slotName: 'view-form-tool',\n disabled: false,\n renderer: (props) => <EntityAIFormComp {...props} />,\n};"],"mappings":"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","names":[]}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
AIProviderManagement,
|
|
3
|
-
ai_provider_default,
|
|
4
|
-
createProviderRegistry,
|
|
5
|
-
customProvider,
|
|
6
|
-
defaultSettingsMiddleware,
|
|
7
|
-
wrapLanguageModel
|
|
8
|
-
} from "./chunk-J323UTPE.mjs";
|
|
9
|
-
export {
|
|
10
|
-
AIProviderManagement,
|
|
11
|
-
createProviderRegistry,
|
|
12
|
-
customProvider,
|
|
13
|
-
ai_provider_default as default,
|
|
14
|
-
defaultSettingsMiddleware,
|
|
15
|
-
wrapLanguageModel
|
|
16
|
-
};
|
|
17
|
-
//# sourceMappingURL=ai-provider-3PSCVEEN.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var _chunkOTNOFOVWjs = require('./chunk-OTNOFOVW.js');
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
exports.AIProviderManagement = _chunkOTNOFOVWjs.AIProviderManagement; exports.createProviderRegistry = _chunkOTNOFOVWjs.createProviderRegistry; exports.customProvider = _chunkOTNOFOVWjs.customProvider; exports.default = _chunkOTNOFOVWjs.ai_provider_default; exports.defaultSettingsMiddleware = _chunkOTNOFOVWjs.defaultSettingsMiddleware; exports.wrapLanguageModel = _chunkOTNOFOVWjs.wrapLanguageModel;
|
|
17
|
-
//# sourceMappingURL=ai-provider-WMPMVZFL.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/shixin/dev/workspaces/scenemesh-projects/scenemesh-platform-workbench5/packages/entity-engine-aimodule/dist/ai-provider-WMPMVZFL.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,iZAAC","file":"/Users/shixin/dev/workspaces/scenemesh-projects/scenemesh-platform-workbench5/packages/entity-engine-aimodule/dist/ai-provider-WMPMVZFL.js"}
|