@metad/contracts 3.6.1 → 3.6.2
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/index.cjs.d.ts +1 -0
- package/index.cjs.js +4233 -5
- package/index.esm.d.ts +1 -0
- package/index.esm.js +4129 -0
- package/package.json +9 -2
- package/src/agent/{ai-model.ts → ai-model.d.ts} +2 -2
- package/src/agent/graph.d.ts +148 -0
- package/src/agent/index.d.ts +5 -0
- package/src/agent/token.d.ts +21 -0
- package/src/agent/utils.d.ts +19 -0
- package/src/agent/variables.d.ts +14 -0
- package/src/ai/ai-model.model.d.ts +198 -0
- package/src/ai/ai-provider.model.d.ts +43 -0
- package/src/ai/ai.model.d.ts +82 -0
- package/src/ai/chat-message-feedback.model.d.ts +24 -0
- package/src/ai/chat-message.model.d.ts +222 -0
- package/src/ai/chat.model.d.ts +189 -0
- package/src/ai/copilot-checkpoint.model.d.ts +23 -0
- package/src/ai/copilot-example.model.d.ts +19 -0
- package/src/ai/copilot-model.model.d.ts +26 -0
- package/src/ai/copilot-organization.model.d.ts +17 -0
- package/src/ai/copilot-provider.model.d.ts +31 -0
- package/src/ai/copilot-role.model.d.ts +43 -0
- package/src/ai/copilot-store.model.d.ts +29 -0
- package/src/ai/copilot-user.model.d.ts +20 -0
- package/src/ai/copilot.model.d.ts +36 -0
- package/src/ai/{environment.model.ts → environment.model.d.ts} +10 -12
- package/src/ai/feature.model.d.ts +6 -0
- package/src/ai/index.d.ts +39 -0
- package/src/ai/knowledge-doc-chunk.model.d.ts +60 -0
- package/src/ai/knowledge-doc-page.model.d.ts +15 -0
- package/src/ai/knowledge-doc.model.d.ts +192 -0
- package/src/ai/knowledge-pipeline.d.ts +107 -0
- package/src/ai/knowledge-retrieval-log.model.d.ts +10 -0
- package/src/ai/knowledgebase-task.model.d.ts +39 -0
- package/src/ai/knowledgebase.model.d.ts +162 -0
- package/src/ai/rag-web.d.ts +26 -0
- package/src/ai/rag.d.ts +24 -0
- package/src/ai/role-permissions.d.ts +13 -0
- package/src/ai/types.d.ts +39 -0
- package/src/ai/xpert-agent-execution.model.d.ts +96 -0
- package/src/ai/xpert-agent.model.d.ts +192 -0
- package/src/ai/xpert-project.model.d.ts +86 -0
- package/src/ai/xpert-task.model.d.ts +26 -0
- package/src/ai/xpert-template.model.d.ts +47 -0
- package/src/ai/xpert-tool-mcp.model.d.ts +67 -0
- package/src/ai/xpert-tool.model.d.ts +147 -0
- package/src/ai/xpert-toolset.model.d.ts +200 -0
- package/src/ai/xpert-workflow-task.prompt.d.ts +2 -0
- package/src/ai/xpert-workflow.model.d.ts +366 -0
- package/src/ai/xpert-workspace.model.d.ts +32 -0
- package/src/ai/xpert.model.d.ts +529 -0
- package/src/ai/xpert.utils.d.ts +80 -0
- package/src/analytics/ai.d.ts +73 -0
- package/src/analytics/approval-policy.model.d.ts +30 -0
- package/src/analytics/business-area-user.model.d.ts +35 -0
- package/src/analytics/business-area.d.ts +17 -0
- package/src/analytics/certification.model.d.ts +11 -0
- package/src/analytics/chatbi-conversation.model.d.ts +15 -0
- package/src/analytics/chatbi-model.model.d.ts +18 -0
- package/src/analytics/collection.model.d.ts +6 -0
- package/src/analytics/comment.model.d.ts +10 -0
- package/src/analytics/data-source-type.d.ts +16 -0
- package/src/analytics/data-source.d.ts +62 -0
- package/src/analytics/favorite.d.ts +14 -0
- package/src/analytics/features.d.ts +19 -0
- package/src/analytics/feed-model.d.ts +13 -0
- package/src/analytics/gateway.d.ts +27 -0
- package/src/analytics/index.d.ts +38 -0
- package/src/analytics/indicator-app.d.ts +44 -0
- package/src/analytics/{indicator-market.ts → indicator-market.d.ts} +2 -6
- package/src/analytics/indicator.d.ts +106 -0
- package/src/analytics/model-query-log.model.d.ts +41 -0
- package/src/analytics/model-query.d.ts +21 -0
- package/src/analytics/{notification-destination.ts → notification-destination.d.ts} +5 -9
- package/src/analytics/{permission-approval-user.model.ts → permission-approval-user.model.d.ts} +8 -10
- package/src/analytics/permission-approval.model.d.ts +47 -0
- package/src/analytics/project.model.d.ts +50 -0
- package/src/analytics/role-permissions.d.ts +25 -0
- package/src/analytics/schema.d.ts +262 -0
- package/src/analytics/screenshot.model.d.ts +25 -0
- package/src/analytics/semantic-model-entity.d.ts +37 -0
- package/src/analytics/semantic-model-member.d.ts +24 -0
- package/src/analytics/semantic-model.d.ts +175 -0
- package/src/analytics/{story-point.ts → story-point.d.ts} +6 -11
- package/src/analytics/story-template.model.d.ts +28 -0
- package/src/analytics/story-widget.d.ts +12 -0
- package/src/analytics/story.d.ts +93 -0
- package/src/analytics/subscription.d.ts +38 -0
- package/src/analytics/visit.model.d.ts +34 -0
- package/src/analytics/webSocket.d.ts +48 -0
- package/src/api-key.model.d.ts +10 -0
- package/src/base-entity.model.d.ts +27 -0
- package/src/contact.model.d.ts +41 -0
- package/src/core.model.d.ts +97 -0
- package/src/{country.model.ts → country.model.d.ts} +2 -3
- package/src/currency.model.d.ts +579 -0
- package/src/{custom-smtp.model.ts → custom-smtp.model.d.ts} +17 -21
- package/src/date-picker.model.d.ts +5 -0
- package/src/email-template.model.d.ts +39 -0
- package/src/email.model.d.ts +36 -0
- package/src/employee.model.d.ts +128 -0
- package/src/entity-with-members.model.d.ts +13 -0
- package/src/feature.model.d.ts +93 -0
- package/src/file-provider.d.ts +33 -0
- package/src/help-center-article.model.d.ts +0 -0
- package/src/help-center.model.d.ts +0 -0
- package/src/http-status.enum.d.ts +57 -0
- package/src/import-export.model.d.ts +36 -0
- package/src/index.d.ts +48 -0
- package/src/integration/dify.d.ts +0 -0
- package/src/integration/dingtalk.d.ts +2 -0
- package/src/integration/fastgpt.d.ts +0 -0
- package/src/integration/firecrawl.d.ts +2 -0
- package/src/integration/github.d.ts +69 -0
- package/src/integration/index.d.ts +4 -0
- package/src/integration/lark.d.ts +11 -0
- package/src/integration/wecom.d.ts +2 -0
- package/src/integration.model.d.ts +90 -0
- package/src/invite.model.d.ts +123 -0
- package/src/language.model.d.ts +19 -0
- package/src/organization-contact.model.d.ts +73 -0
- package/src/{organization-department.model.ts → organization-department.model.d.ts} +10 -16
- package/src/organization-language.model.d.ts +18 -0
- package/src/organization-projects.model.d.ts +80 -0
- package/src/organization-team-employee-model.d.ts +12 -0
- package/src/organization-team-model.d.ts +19 -0
- package/src/organization.model.d.ts +239 -0
- package/src/{password-reset.model.ts → password-reset.model.d.ts} +10 -14
- package/src/{plain-object.model.ts → plain-object.model.d.ts} +1 -1
- package/src/plugin.d.ts +13 -0
- package/src/role-permission.model.d.ts +61 -0
- package/src/role.model.d.ts +26 -0
- package/src/schedule.d.ts +27 -0
- package/src/secret-token.model.d.ts +11 -0
- package/src/seed.model.d.ts +37 -0
- package/src/storage-file.model.d.ts +40 -0
- package/src/tag-entity.model.d.ts +20 -0
- package/src/tenant.model.d.ts +40 -0
- package/src/tools/index.d.ts +1 -0
- package/src/tools/sandbox.d.ts +5 -0
- package/src/translation.model.d.ts +26 -0
- package/src/types.d.ts +241 -0
- package/src/user-organization.model.d.ts +24 -0
- package/src/user.model.d.ts +131 -0
- package/src/visibility.model.d.ts +6 -0
- package/.babelrc +0 -5
- package/.eslintrc.json +0 -18
- package/babel.config.json +0 -1
- package/jest.config.ts +0 -16
- package/project.json +0 -53
- package/src/agent/graph.ts +0 -272
- package/src/agent/index.ts +0 -5
- package/src/agent/token.ts +0 -23
- package/src/agent/utils.spec.ts +0 -283
- package/src/agent/utils.ts +0 -122
- package/src/agent/variables.ts +0 -21
- package/src/ai/ai-model.model.ts +0 -228
- package/src/ai/ai-provider.model.ts +0 -53
- package/src/ai/ai.model.ts +0 -87
- package/src/ai/chat-message-feedback.model.ts +0 -31
- package/src/ai/chat-message.model.ts +0 -277
- package/src/ai/chat.model.ts +0 -207
- package/src/ai/copilot-checkpoint.model.ts +0 -25
- package/src/ai/copilot-example.model.ts +0 -23
- package/src/ai/copilot-model.model.ts +0 -31
- package/src/ai/copilot-organization.model.ts +0 -21
- package/src/ai/copilot-provider.model.ts +0 -46
- package/src/ai/copilot-role.model.ts +0 -48
- package/src/ai/copilot-store.model.ts +0 -34
- package/src/ai/copilot-user.model.ts +0 -24
- package/src/ai/copilot.model.ts +0 -47
- package/src/ai/feature.model.ts +0 -6
- package/src/ai/index.ts +0 -39
- package/src/ai/knowledge-doc-chunk.model.ts +0 -120
- package/src/ai/knowledge-doc-chunk.spec.ts +0 -47
- package/src/ai/knowledge-doc-page.model.ts +0 -20
- package/src/ai/knowledge-doc.model.ts +0 -252
- package/src/ai/knowledge-pipeline.ts +0 -138
- package/src/ai/knowledge-retrieval-log.model.ts +0 -19
- package/src/ai/knowledgebase-task.model.ts +0 -46
- package/src/ai/knowledgebase.model.ts +0 -190
- package/src/ai/rag-web.ts +0 -54
- package/src/ai/rag.ts +0 -24
- package/src/ai/role-permissions.ts +0 -13
- package/src/ai/types.ts +0 -83
- package/src/ai/xpert-agent-execution.model.ts +0 -115
- package/src/ai/xpert-agent.model.ts +0 -258
- package/src/ai/xpert-project.model.ts +0 -103
- package/src/ai/xpert-task.model.ts +0 -32
- package/src/ai/xpert-template.model.ts +0 -53
- package/src/ai/xpert-tool-mcp.model.ts +0 -72
- package/src/ai/xpert-tool.model.ts +0 -211
- package/src/ai/xpert-toolset.model.ts +0 -220
- package/src/ai/xpert-workflow-task.prompt.ts +0 -71
- package/src/ai/xpert-workflow.model.ts +0 -449
- package/src/ai/xpert-workspace.model.ts +0 -42
- package/src/ai/xpert.model.ts +0 -613
- package/src/ai/xpert.utils.ts +0 -214
- package/src/analytics/ai.ts +0 -79
- package/src/analytics/approval-policy.model.ts +0 -40
- package/src/analytics/business-area-user.model.ts +0 -43
- package/src/analytics/business-area.ts +0 -20
- package/src/analytics/certification.model.ts +0 -12
- package/src/analytics/chatbi-conversation.model.ts +0 -16
- package/src/analytics/chatbi-model.model.ts +0 -22
- package/src/analytics/collection.model.ts +0 -8
- package/src/analytics/comment.model.ts +0 -14
- package/src/analytics/data-source-type.ts +0 -19
- package/src/analytics/data-source.ts +0 -72
- package/src/analytics/favorite.ts +0 -18
- package/src/analytics/features.ts +0 -19
- package/src/analytics/feed-model.ts +0 -15
- package/src/analytics/gateway.ts +0 -30
- package/src/analytics/index.ts +0 -39
- package/src/analytics/indicator-app.ts +0 -49
- package/src/analytics/indicator.ts +0 -127
- package/src/analytics/model-query-log.model.ts +0 -45
- package/src/analytics/model-query.ts +0 -22
- package/src/analytics/permission-approval.model.ts +0 -58
- package/src/analytics/project.model.ts +0 -56
- package/src/analytics/role-permissions.ts +0 -36
- package/src/analytics/schema.ts +0 -300
- package/src/analytics/screenshot.model.ts +0 -28
- package/src/analytics/semantic-model-entity.ts +0 -49
- package/src/analytics/semantic-model-member.ts +0 -45
- package/src/analytics/semantic-model.ts +0 -227
- package/src/analytics/story-template.model.ts +0 -34
- package/src/analytics/story-widget.ts +0 -15
- package/src/analytics/story.ts +0 -109
- package/src/analytics/subscription.ts +0 -43
- package/src/analytics/visit.model.ts +0 -39
- package/src/analytics/webSocket.ts +0 -53
- package/src/api-key.model.ts +0 -11
- package/src/base-entity.model.ts +0 -34
- package/src/contact.model.ts +0 -45
- package/src/core.model.ts +0 -103
- package/src/currency.model.ts +0 -582
- package/src/date-picker.model.ts +0 -5
- package/src/email-template.model.ts +0 -50
- package/src/email.model.ts +0 -46
- package/src/employee.model.ts +0 -199
- package/src/entity-with-members.model.ts +0 -16
- package/src/feature.model.ts +0 -108
- package/src/file-provider.ts +0 -37
- package/src/help-center-article.model.ts +0 -35
- package/src/help-center.model.ts +0 -33
- package/src/http-status.enum.ts +0 -58
- package/src/import-export.model.ts +0 -42
- package/src/index.ts +0 -60
- package/src/integration/dify.ts +0 -31
- package/src/integration/dingtalk.ts +0 -16
- package/src/integration/fastgpt.ts +0 -32
- package/src/integration/firecrawl.ts +0 -46
- package/src/integration/github.ts +0 -149
- package/src/integration/index.ts +0 -15
- package/src/integration/lark.ts +0 -79
- package/src/integration/wecom.ts +0 -16
- package/src/integration.model.ts +0 -119
- package/src/invite.model.ts +0 -144
- package/src/language.model.ts +0 -22
- package/src/organization-contact.model.ts +0 -84
- package/src/organization-language.model.ts +0 -24
- package/src/organization-projects.model.ts +0 -99
- package/src/organization-team-employee-model.ts +0 -14
- package/src/organization-team-model.ts +0 -25
- package/src/organization.model.ts +0 -266
- package/src/plugin.ts +0 -15
- package/src/role-permission.model.ts +0 -123
- package/src/role.model.ts +0 -31
- package/src/schedule.ts +0 -71
- package/src/secret-token.model.ts +0 -15
- package/src/seed.model.ts +0 -50
- package/src/storage-file.model.ts +0 -46
- package/src/tag-entity.model.ts +0 -23
- package/src/tenant.model.ts +0 -52
- package/src/tools/index.ts +0 -1
- package/src/tools/sandbox.ts +0 -5
- package/src/translation.model.ts +0 -37
- package/src/types.ts +0 -277
- package/src/user-organization.model.ts +0 -31
- package/src/user.model.ts +0 -151
- package/src/visibility.model.ts +0 -6
- package/tsconfig.json +0 -22
- package/tsconfig.lib.json +0 -10
- package/tsconfig.spec.json +0 -9
package/src/ai/ai.model.ts
DELETED
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Business roles for AI copilot (commands or contexts)
|
|
3
|
-
*/
|
|
4
|
-
export enum AiBusinessRole {
|
|
5
|
-
FinanceBP = 'finance_bp',
|
|
6
|
-
SupplyChainExpert = 'supply_chain_expert',
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Providers for LLMs
|
|
11
|
-
*
|
|
12
|
-
* - https://js.langchain.com/docs/integrations/chat/
|
|
13
|
-
*/
|
|
14
|
-
export enum AiProvider {
|
|
15
|
-
/**
|
|
16
|
-
* - https://js.langchain.com/docs/integrations/chat/openai/
|
|
17
|
-
*/
|
|
18
|
-
OpenAI = 'openai',
|
|
19
|
-
/**
|
|
20
|
-
* - https://js.langchain.com/docs/integrations/chat/openai/
|
|
21
|
-
*/
|
|
22
|
-
Azure = 'azure',
|
|
23
|
-
// DashScope = 'dashscope',
|
|
24
|
-
/**
|
|
25
|
-
* - https://ollama.com/
|
|
26
|
-
* - https://js.langchain.com/docs/integrations/chat/ollama/
|
|
27
|
-
*/
|
|
28
|
-
Ollama = 'ollama',
|
|
29
|
-
/**
|
|
30
|
-
* - https://www.deepseek.com/zh
|
|
31
|
-
* - https://js.langchain.com/docs/integrations/chat/openai/
|
|
32
|
-
*/
|
|
33
|
-
DeepSeek = 'deepseek',
|
|
34
|
-
/**
|
|
35
|
-
* - https://docs.anthropic.com/en/home
|
|
36
|
-
* - https://js.langchain.com/docs/integrations/chat/anthropic/
|
|
37
|
-
*/
|
|
38
|
-
Anthropic = 'anthropic',
|
|
39
|
-
/**
|
|
40
|
-
* - https://www.aliyun.com/product/bailian
|
|
41
|
-
* - https://js.langchain.com/docs/integrations/chat/alibaba_tongyi/
|
|
42
|
-
*/
|
|
43
|
-
AlibabaTongyi = 'alibaba_tongyi',
|
|
44
|
-
/**
|
|
45
|
-
* - https://open.bigmodel.cn/
|
|
46
|
-
* - https://js.langchain.com/docs/integrations/chat/openai/
|
|
47
|
-
*/
|
|
48
|
-
Zhipu = 'zhipu',
|
|
49
|
-
/**
|
|
50
|
-
* - https://qianfan.cloud.baidu.com/
|
|
51
|
-
* - https://js.langchain.com/docs/integrations/chat/baidu_qianfan/
|
|
52
|
-
*/
|
|
53
|
-
BaiduQianfan = 'baidu_qianfan',
|
|
54
|
-
/**
|
|
55
|
-
* - https://www.together.ai/
|
|
56
|
-
* - https://js.langchain.com/docs/integrations/chat/togetherai/
|
|
57
|
-
*/
|
|
58
|
-
Together = 'together',
|
|
59
|
-
/**
|
|
60
|
-
* - https://platform.moonshot.cn/console
|
|
61
|
-
* - https://js.langchain.com/docs/integrations/chat/openai/
|
|
62
|
-
*/
|
|
63
|
-
Moonshot = 'moonshot',
|
|
64
|
-
/**
|
|
65
|
-
* - https://groq.com/
|
|
66
|
-
* - https://js.langchain.com/docs/integrations/chat/openai/
|
|
67
|
-
*/
|
|
68
|
-
Groq = 'groq',
|
|
69
|
-
/**
|
|
70
|
-
* - https://mistral.ai/
|
|
71
|
-
*
|
|
72
|
-
*/
|
|
73
|
-
Mistral = 'mistral',
|
|
74
|
-
/**
|
|
75
|
-
* - https://cohere.com/
|
|
76
|
-
*/
|
|
77
|
-
Cohere = 'cohere',
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
export enum AiProtocol {
|
|
82
|
-
OpenAI = 'openai',
|
|
83
|
-
Others = 'others'
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
export const OpenAIEmbeddingsProviders = [AiProvider.OpenAI, AiProvider.Azure, AiProvider.DeepSeek]
|
|
87
|
-
export const OllamaEmbeddingsProviders = [AiProvider.Ollama]
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { IBasePerTenantAndOrganizationEntityModel } from '../base-entity.model'
|
|
2
|
-
import { IChatMessage } from './chat-message.model'
|
|
3
|
-
import { IChatConversation } from './chat.model'
|
|
4
|
-
|
|
5
|
-
export enum ChatMessageFeedbackRatingEnum {
|
|
6
|
-
LIKE = 'like',
|
|
7
|
-
DISLIKE = 'dislike'
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
*
|
|
13
|
-
*/
|
|
14
|
-
export interface IChatMessageFeedback extends IBasePerTenantAndOrganizationEntityModel {
|
|
15
|
-
|
|
16
|
-
rating: ChatMessageFeedbackRatingEnum
|
|
17
|
-
|
|
18
|
-
content?: string
|
|
19
|
-
|
|
20
|
-
// Many to one
|
|
21
|
-
/**
|
|
22
|
-
* Chat conversation
|
|
23
|
-
*/
|
|
24
|
-
conversation?: IChatConversation
|
|
25
|
-
conversationId?: string | null
|
|
26
|
-
/**
|
|
27
|
-
* Chat conversation message
|
|
28
|
-
*/
|
|
29
|
-
message?: IChatMessage
|
|
30
|
-
messageId?: string | null
|
|
31
|
-
}
|
|
@@ -1,277 +0,0 @@
|
|
|
1
|
-
import { MessageContent, MessageContentImageUrl, MessageType } from '@langchain/core/messages';
|
|
2
|
-
import { IBasePerTenantAndOrganizationEntityModel } from '../base-entity.model'
|
|
3
|
-
import { IChatConversation } from './chat.model'
|
|
4
|
-
import { LongTermMemoryTypeEnum } from './xpert.model'
|
|
5
|
-
import { XpertAgentExecutionStatusEnum } from './xpert-agent-execution.model';
|
|
6
|
-
import { JSONValue } from '../core.model';
|
|
7
|
-
import { IStorageFile } from '../storage-file.model';
|
|
8
|
-
|
|
9
|
-
export type TSummaryJob = Record<LongTermMemoryTypeEnum, {
|
|
10
|
-
jobId: number | string;
|
|
11
|
-
status: string
|
|
12
|
-
progress?: number
|
|
13
|
-
memoryKey?: string
|
|
14
|
-
}>
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Message step type: determines the type of canvas
|
|
18
|
-
*/
|
|
19
|
-
// export enum ChatMessageStepType {
|
|
20
|
-
// ComputerUse = 'computer_use',
|
|
21
|
-
// File = 'file',
|
|
22
|
-
// Notice = 'notice'
|
|
23
|
-
// }
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Category of step message: determines the display components of computer use
|
|
27
|
-
*/
|
|
28
|
-
export enum ChatMessageStepCategory {
|
|
29
|
-
/**
|
|
30
|
-
* List of items: urls, files, etc.
|
|
31
|
-
*/
|
|
32
|
-
List = 'list',
|
|
33
|
-
/**
|
|
34
|
-
* Websearch results
|
|
35
|
-
*/
|
|
36
|
-
WebSearch = 'web_search',
|
|
37
|
-
/**
|
|
38
|
-
* Files list
|
|
39
|
-
*/
|
|
40
|
-
Files = 'files',
|
|
41
|
-
/**
|
|
42
|
-
* View a file
|
|
43
|
-
*/
|
|
44
|
-
File = 'file',
|
|
45
|
-
/**
|
|
46
|
-
* Program Execution
|
|
47
|
-
*/
|
|
48
|
-
Program = 'program',
|
|
49
|
-
/**
|
|
50
|
-
* Iframe
|
|
51
|
-
*/
|
|
52
|
-
Iframe = 'iframe',
|
|
53
|
-
|
|
54
|
-
Memory = 'memory',
|
|
55
|
-
|
|
56
|
-
Tasks = 'tasks',
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Knowledges (knowledge base retriever results)
|
|
60
|
-
*/
|
|
61
|
-
Knowledges = 'knowledges'
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Step message type, in canvas and ai message.
|
|
66
|
-
*/
|
|
67
|
-
export type TChatMessageStep<T = any> = TMessageComponent<TMessageComponentStep<T>>
|
|
68
|
-
// {
|
|
69
|
-
// id?: string
|
|
70
|
-
// type?: ChatMessageStepType
|
|
71
|
-
// category?: ChatMessageStepCategory
|
|
72
|
-
// toolset?: string
|
|
73
|
-
// tool?: string
|
|
74
|
-
// title?: string
|
|
75
|
-
// message?: string
|
|
76
|
-
// created_date?: Date | string
|
|
77
|
-
// data?: T
|
|
78
|
-
// artifact?: any
|
|
79
|
-
// }
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Chat message entity type
|
|
83
|
-
*/
|
|
84
|
-
export interface IChatMessage extends IBasePerTenantAndOrganizationEntityModel, Omit<Omit<CopilotBaseMessage, 'createdAt'>, 'id'> {
|
|
85
|
-
/**
|
|
86
|
-
* Files
|
|
87
|
-
*/
|
|
88
|
-
attachments?: IStorageFile[]
|
|
89
|
-
/**
|
|
90
|
-
* Job of summary
|
|
91
|
-
*/
|
|
92
|
-
summaryJob?: TSummaryJob
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* the third-party platform's message
|
|
96
|
-
*/
|
|
97
|
-
thirdPartyMessage?: any
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Step messages from tools or others
|
|
101
|
-
*/
|
|
102
|
-
events?: TChatMessageStep[]
|
|
103
|
-
|
|
104
|
-
// Many to one
|
|
105
|
-
/**
|
|
106
|
-
* Chat conversation
|
|
107
|
-
*/
|
|
108
|
-
conversation?: IChatConversation
|
|
109
|
-
conversationId?: string | null
|
|
110
|
-
|
|
111
|
-
executionId?: string
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* @deprecated
|
|
117
|
-
*/
|
|
118
|
-
export type DeprecatedMessageType = 'assistant' | 'user' | 'info' | 'component'
|
|
119
|
-
export type CopilotMessageType = MessageType | DeprecatedMessageType
|
|
120
|
-
|
|
121
|
-
export type ChatMessageStatusEnum = XpertAgentExecutionStatusEnum | 'thinking' | 'reasoning' | 'answering' | 'aborted'
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* BaseMessage or AIMessage in Langchain.js
|
|
125
|
-
*/
|
|
126
|
-
export interface CopilotBaseMessage {
|
|
127
|
-
id: string
|
|
128
|
-
createdAt?: Date
|
|
129
|
-
role: CopilotMessageType
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* Status of the message:
|
|
133
|
-
*/
|
|
134
|
-
status?: ChatMessageStatusEnum
|
|
135
|
-
|
|
136
|
-
content?: string | TMessageContent
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Reasoning step messages
|
|
140
|
-
*/
|
|
141
|
-
reasoning?: TMessageContentReasoning[]
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Error info when status is error
|
|
145
|
-
*/
|
|
146
|
-
error?: string
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
export type CopilotChatMessage = CopilotBaseMessage & {
|
|
150
|
-
|
|
151
|
-
tool_call_id?: string
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* If the message has a role of `function`, the `name` field is the name of the function.
|
|
155
|
-
* Otherwise, the name field should not be set.
|
|
156
|
-
*/
|
|
157
|
-
name?: string
|
|
158
|
-
|
|
159
|
-
data?: JSONValue
|
|
160
|
-
|
|
161
|
-
messages?: Array<any> // StoredMessage
|
|
162
|
-
|
|
163
|
-
executionId?: string
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* @deprecated use data attr in message (subMessages)
|
|
168
|
-
*/
|
|
169
|
-
export interface CopilotMessageGroup extends CopilotBaseMessage {
|
|
170
|
-
messages?: CopilotChatMessage[]
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* Similar to {@link MessageContentText} | {@link MessageContentImageUrl}, which together form {@link MessageContentComplex}
|
|
175
|
-
*/
|
|
176
|
-
export type TMessageContentComponent<T extends object = object> = {
|
|
177
|
-
id: string
|
|
178
|
-
type: 'component'
|
|
179
|
-
data: TMessageComponent<T>
|
|
180
|
-
xpertName?: string
|
|
181
|
-
agentKey?: string;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* Defines the data type of the sub-message of `component` type in the message `content` {@link MessageContentComplex}
|
|
186
|
-
*/
|
|
187
|
-
export type TMessageComponent<T extends object = object> = T & {
|
|
188
|
-
id?: string
|
|
189
|
-
category: 'Dashboard' | 'Computer' | 'Tool'
|
|
190
|
-
type?: string
|
|
191
|
-
created_date?: Date | string
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
export type TMessageContentText = {
|
|
195
|
-
id?: string
|
|
196
|
-
xpertName?: string
|
|
197
|
-
agentKey?: string
|
|
198
|
-
type: "text";
|
|
199
|
-
text: string;
|
|
200
|
-
};
|
|
201
|
-
export type TMessageContentMemory = {
|
|
202
|
-
id?: string
|
|
203
|
-
agentKey?: string
|
|
204
|
-
type: "memory";
|
|
205
|
-
data: any[];
|
|
206
|
-
};
|
|
207
|
-
export type TMessageContentReasoning = {
|
|
208
|
-
id?: string
|
|
209
|
-
xpertName?: string
|
|
210
|
-
agentKey?: string
|
|
211
|
-
type: "reasoning";
|
|
212
|
-
text: string;
|
|
213
|
-
};
|
|
214
|
-
/**
|
|
215
|
-
* Enhance {@link MessageContentComplex} in Langchain.js
|
|
216
|
-
*/
|
|
217
|
-
export type TMessageContentComplex = (TMessageContentText | TMessageContentReasoning | MessageContentImageUrl | TMessageContentComponent | TMessageContentMemory | (Record<string, any> & {
|
|
218
|
-
type?: "text" | "image_url" | string;
|
|
219
|
-
}) | (Record<string, any> & {
|
|
220
|
-
type?: never;
|
|
221
|
-
})) & {
|
|
222
|
-
id?: string
|
|
223
|
-
xpertName?: string
|
|
224
|
-
agentKey?: string;
|
|
225
|
-
created_date?: Date | string
|
|
226
|
-
}
|
|
227
|
-
/**
|
|
228
|
-
* Enhance {@link MessageContent} in Langchain.js
|
|
229
|
-
*/
|
|
230
|
-
export type TMessageContent = string | TMessageContentComplex[];
|
|
231
|
-
|
|
232
|
-
export type TMessageComponentIframe = {
|
|
233
|
-
type: 'iframe'
|
|
234
|
-
title: string
|
|
235
|
-
url?: string
|
|
236
|
-
data?: {
|
|
237
|
-
url?: string
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
export type TMessageComponentStep<T = JSONValue> = {
|
|
242
|
-
type: ChatMessageStepCategory
|
|
243
|
-
toolset: string
|
|
244
|
-
toolset_id: string
|
|
245
|
-
tool?: string
|
|
246
|
-
title: string
|
|
247
|
-
message: string
|
|
248
|
-
status: 'success' | 'fail' | 'running'
|
|
249
|
-
created_date: Date | string
|
|
250
|
-
end_date: Date | string
|
|
251
|
-
error?: string
|
|
252
|
-
data?: T
|
|
253
|
-
input?: any
|
|
254
|
-
output?: string
|
|
255
|
-
artifact?: any
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
/**
|
|
259
|
-
* Data type for chat event message
|
|
260
|
-
*/
|
|
261
|
-
export type TChatEventMessage = {
|
|
262
|
-
type?: string
|
|
263
|
-
title?: string
|
|
264
|
-
message?: string
|
|
265
|
-
status?: 'success' | 'fail' | 'running'
|
|
266
|
-
created_date?: Date | string
|
|
267
|
-
end_date?: Date | string
|
|
268
|
-
error?: string
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
// Type guards
|
|
272
|
-
/**
|
|
273
|
-
* @deprecated use content in message
|
|
274
|
-
*/
|
|
275
|
-
export function isMessageGroup(message: CopilotBaseMessage): message is CopilotMessageGroup {
|
|
276
|
-
return 'messages' in message;
|
|
277
|
-
}
|
package/src/ai/chat.model.ts
DELETED
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
import { IBasePerTenantAndOrganizationEntityModel } from '../base-entity.model'
|
|
2
|
-
import { IXpertAgentExecution } from './xpert-agent-execution.model'
|
|
3
|
-
import { IXpert } from './xpert.model'
|
|
4
|
-
import { I18nObject } from '../types'
|
|
5
|
-
import { CopilotChatMessage, CopilotMessageGroup, IChatMessage } from './chat-message.model'
|
|
6
|
-
import { IXpertAgent } from './xpert-agent.model'
|
|
7
|
-
import { IXpertProject } from './xpert-project.model'
|
|
8
|
-
import { IStorageFile } from '../storage-file.model'
|
|
9
|
-
import { IXpertTask } from './xpert-task.model'
|
|
10
|
-
import { TInterruptMessage, TToolCall } from '../agent'
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
export type TChatConversationOptions = {
|
|
14
|
-
parameters?: {
|
|
15
|
-
input?: string
|
|
16
|
-
[key: string]: unknown
|
|
17
|
-
}
|
|
18
|
-
knowledgebases?: string[]
|
|
19
|
-
toolsets?: string[]
|
|
20
|
-
features?: Array<'timeline' | 'sandbox' | 'files'>
|
|
21
|
-
workspacePath?: string
|
|
22
|
-
workspaceUrl?: string
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export type TChatConversationStatus = "idle" | "busy" | "interrupted" | "error"
|
|
26
|
-
export type TToolCallType = 'agent' | 'tool'
|
|
27
|
-
export type TChatFrom = 'platform' | 'webapp' | 'debugger' | 'knowledge' | 'job' | 'api' | 'feishu' | 'lark' | 'dingtalk' | 'wecom'
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Operation for interrupt
|
|
31
|
-
*/
|
|
32
|
-
export type TSensitiveOperation = {
|
|
33
|
-
messageId?: string
|
|
34
|
-
tasks?: {
|
|
35
|
-
name: string;
|
|
36
|
-
interrupts: {
|
|
37
|
-
value?: TInterruptMessage;
|
|
38
|
-
when?: "during";
|
|
39
|
-
resumable?: boolean;
|
|
40
|
-
ns?: string[];
|
|
41
|
-
}[];
|
|
42
|
-
type?: TToolCallType;
|
|
43
|
-
info?: {
|
|
44
|
-
name: string
|
|
45
|
-
title?: string
|
|
46
|
-
description: string
|
|
47
|
-
}
|
|
48
|
-
parameters?: {
|
|
49
|
-
name: string;
|
|
50
|
-
title: I18nObject | string
|
|
51
|
-
type: string;
|
|
52
|
-
description: I18nObject | string
|
|
53
|
-
placeholder?: I18nObject | string
|
|
54
|
-
}[],
|
|
55
|
-
call?: TToolCall
|
|
56
|
-
agent?: IXpertAgent
|
|
57
|
-
}[]
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Chat conversation for xpert ai agent.
|
|
62
|
-
*
|
|
63
|
-
* Corresponds to the thread in the [Agent Protocol](https://github.com/langchain-ai/agent-protocol).
|
|
64
|
-
*/
|
|
65
|
-
export interface IChatConversation extends IBasePerTenantAndOrganizationEntityModel {
|
|
66
|
-
/**
|
|
67
|
-
* Thread id for agent execution
|
|
68
|
-
*/
|
|
69
|
-
threadId: string
|
|
70
|
-
/**
|
|
71
|
-
* A short title summarizing the session
|
|
72
|
-
*/
|
|
73
|
-
title?: string
|
|
74
|
-
/**
|
|
75
|
-
* Current status of conversation
|
|
76
|
-
*/
|
|
77
|
-
status?: TChatConversationStatus
|
|
78
|
-
/**
|
|
79
|
-
* Options
|
|
80
|
-
*/
|
|
81
|
-
options?: TChatConversationOptions
|
|
82
|
-
/**
|
|
83
|
-
* Error message when status is error
|
|
84
|
-
*/
|
|
85
|
-
error?: string
|
|
86
|
-
/**
|
|
87
|
-
* ChatMessages in conversation
|
|
88
|
-
*/
|
|
89
|
-
messages?: IChatMessage[] | null
|
|
90
|
-
/**
|
|
91
|
-
* The last operation when interrupted
|
|
92
|
-
*/
|
|
93
|
-
operation?: TSensitiveOperation
|
|
94
|
-
/**
|
|
95
|
-
* Conversation source / user type
|
|
96
|
-
*/
|
|
97
|
-
from: TChatFrom
|
|
98
|
-
/**
|
|
99
|
-
* End anonymous user
|
|
100
|
-
*/
|
|
101
|
-
fromEndUserId?: string
|
|
102
|
-
|
|
103
|
-
// Many to one
|
|
104
|
-
/**
|
|
105
|
-
* Chat with Xpert
|
|
106
|
-
*/
|
|
107
|
-
xpert?: IXpert
|
|
108
|
-
xpertId?: string | null
|
|
109
|
-
|
|
110
|
-
project?: IXpertProject
|
|
111
|
-
projectId?: string | null
|
|
112
|
-
|
|
113
|
-
task?: IXpertTask
|
|
114
|
-
taskId?: string | null
|
|
115
|
-
|
|
116
|
-
// One to Many
|
|
117
|
-
executions?: IXpertAgentExecution[]
|
|
118
|
-
/**
|
|
119
|
-
* Files
|
|
120
|
-
*/
|
|
121
|
-
attachments?: IStorageFile[]
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
export type TChatConversationLog = IChatConversation & {
|
|
125
|
-
messageCount: number
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// Types
|
|
129
|
-
export type ChatMessage = {
|
|
130
|
-
conversationId: string;
|
|
131
|
-
id: string;
|
|
132
|
-
content: string
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
export type ChatUserMessage = ChatMessage & {
|
|
136
|
-
language: string
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* @deprecated use ChatMessageEventTypeEnum
|
|
141
|
-
*/
|
|
142
|
-
export enum ChatGatewayEvent {
|
|
143
|
-
ACK = 'ack', // acknowledgment for received message
|
|
144
|
-
ConversationCreated = 'conversation_created',
|
|
145
|
-
Message = 'message',
|
|
146
|
-
MessageStream = 'message_stream',
|
|
147
|
-
StepStart = 'step_start',
|
|
148
|
-
StepEnd = 'step_end',
|
|
149
|
-
ToolStart = 'tool_start',
|
|
150
|
-
ToolEnd = 'tool_end',
|
|
151
|
-
ChainStart = 'chain_start',
|
|
152
|
-
ChainEnd = 'chain_end',
|
|
153
|
-
CancelChain = 'cancel_chain',
|
|
154
|
-
ChainAborted = 'chain_aborted',
|
|
155
|
-
Error = 'error',
|
|
156
|
-
Agent = 'agent'
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* @deprecated use ChatMessageEventTypeEnum
|
|
162
|
-
*/
|
|
163
|
-
export type ChatGatewayMessage = {
|
|
164
|
-
organizationId?: string;
|
|
165
|
-
xpert?: {
|
|
166
|
-
id: string
|
|
167
|
-
knowledgebases?: string[]
|
|
168
|
-
toolsets: string[] | null
|
|
169
|
-
}
|
|
170
|
-
} & ({
|
|
171
|
-
event: ChatGatewayEvent.CancelChain
|
|
172
|
-
data: {
|
|
173
|
-
conversationId: string // Conversation ID
|
|
174
|
-
}
|
|
175
|
-
} | {
|
|
176
|
-
event: ChatGatewayEvent.ChainAborted
|
|
177
|
-
data: {
|
|
178
|
-
conversationId: string // Conversation ID
|
|
179
|
-
id?: string // Message id
|
|
180
|
-
}
|
|
181
|
-
} | {
|
|
182
|
-
event: ChatGatewayEvent.ConversationCreated
|
|
183
|
-
data: IChatConversation
|
|
184
|
-
} | {
|
|
185
|
-
event: ChatGatewayEvent.MessageStream
|
|
186
|
-
data: ChatUserMessage
|
|
187
|
-
} | {
|
|
188
|
-
event: ChatGatewayEvent.ToolStart | ChatGatewayEvent.ToolEnd
|
|
189
|
-
data: CopilotMessageGroup | CopilotMessageGroup[]
|
|
190
|
-
} | {
|
|
191
|
-
event: ChatGatewayEvent.ChainStart | ChatGatewayEvent.ChainEnd
|
|
192
|
-
data: {
|
|
193
|
-
id: string
|
|
194
|
-
}
|
|
195
|
-
} | {
|
|
196
|
-
event: ChatGatewayEvent.StepStart | ChatGatewayEvent.StepEnd
|
|
197
|
-
data: CopilotChatMessage
|
|
198
|
-
} | {
|
|
199
|
-
event: ChatGatewayEvent.Message | ChatGatewayEvent.Error
|
|
200
|
-
data: CopilotChatMessage
|
|
201
|
-
} | {
|
|
202
|
-
event: ChatGatewayEvent.Agent
|
|
203
|
-
data: {
|
|
204
|
-
id: string
|
|
205
|
-
message: CopilotChatMessage
|
|
206
|
-
}
|
|
207
|
-
})
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { IBasePerTenantAndOrganizationEntityModel } from '../base-entity.model'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Checkpoints for copilot, for langgraph framework
|
|
5
|
-
*/
|
|
6
|
-
export interface ICopilotCheckpoint extends IBasePerTenantAndOrganizationEntityModel {
|
|
7
|
-
thread_id: string
|
|
8
|
-
checkpoint_ns: string
|
|
9
|
-
checkpoint_id: string
|
|
10
|
-
parent_id?: string
|
|
11
|
-
type?: string
|
|
12
|
-
checkpoint: Uint8Array
|
|
13
|
-
metadata: Uint8Array
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export interface ICopilotCheckpointWrites extends IBasePerTenantAndOrganizationEntityModel {
|
|
17
|
-
thread_id: string
|
|
18
|
-
checkpoint_ns: string
|
|
19
|
-
checkpoint_id: string
|
|
20
|
-
task_id?: string
|
|
21
|
-
idx?: number
|
|
22
|
-
channel?: string
|
|
23
|
-
type?: string
|
|
24
|
-
value: Uint8Array
|
|
25
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { IBasePerTenantAndOrganizationEntityModel } from '../base-entity.model'
|
|
2
|
-
import { AiProvider } from './ai.model'
|
|
3
|
-
import { IXpert } from './xpert.model'
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Examples for copilot, which is used to few shot user question
|
|
7
|
-
*/
|
|
8
|
-
export interface ICopilotKnowledge extends IBasePerTenantAndOrganizationEntityModel {
|
|
9
|
-
provider?: AiProvider | string
|
|
10
|
-
/**
|
|
11
|
-
* The name of xpert (copilot type)
|
|
12
|
-
*/
|
|
13
|
-
role?: string
|
|
14
|
-
command?: string
|
|
15
|
-
input?: string
|
|
16
|
-
output?: string
|
|
17
|
-
|
|
18
|
-
// Has vector
|
|
19
|
-
vector?: boolean
|
|
20
|
-
|
|
21
|
-
xpert?: IXpert
|
|
22
|
-
xpertId?: string
|
|
23
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { AiModelTypeEnum } from '../agent'
|
|
2
|
-
import { IBasePerTenantAndOrganizationEntityModel } from '../base-entity.model'
|
|
3
|
-
import { ICopilot } from './copilot.model'
|
|
4
|
-
|
|
5
|
-
export interface ICopilotModel extends TCopilotModel, IBasePerTenantAndOrganizationEntityModel {}
|
|
6
|
-
|
|
7
|
-
export type TCopilotModel = {
|
|
8
|
-
/**
|
|
9
|
-
* Use a separate copilot
|
|
10
|
-
*/
|
|
11
|
-
copilot?: ICopilot
|
|
12
|
-
copilotId?: string
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Referenced copilot model if not using a separate copilot
|
|
16
|
-
*/
|
|
17
|
-
referencedModel?: ICopilotModel
|
|
18
|
-
referencedId?: string
|
|
19
|
-
|
|
20
|
-
modelType?: AiModelTypeEnum
|
|
21
|
-
model?: string
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Details config for ai model
|
|
25
|
-
*/
|
|
26
|
-
options?: TCopilotModelOptions
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export type TCopilotModelOptions = {
|
|
30
|
-
[key: string]: any
|
|
31
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { IBasePerTenantEntityModel } from '../base-entity.model'
|
|
2
|
-
import { IOrganization } from '../organization.model'
|
|
3
|
-
import { AiProvider } from './ai.model'
|
|
4
|
-
import { ICopilot, TCopilotTokenUsage } from './copilot.model'
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Organization token usage of global copilot
|
|
8
|
-
*/
|
|
9
|
-
export interface ICopilotOrganization extends IBasePerTenantEntityModel, TCopilotTokenUsage {
|
|
10
|
-
organizationId?: string
|
|
11
|
-
organization?: IOrganization
|
|
12
|
-
copilotId?: string
|
|
13
|
-
copilot?: ICopilot
|
|
14
|
-
// Associated AI Model provider
|
|
15
|
-
provider?: AiProvider | string
|
|
16
|
-
model?: string
|
|
17
|
-
|
|
18
|
-
// Total tokens used historically
|
|
19
|
-
tokenTotalUsed?: number
|
|
20
|
-
priceTotalUsed?: number
|
|
21
|
-
}
|