@agentica/core 0.44.0-dev.20260313-2 → 0.44.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +218 -218
  3. package/lib/context/internal/__IChatInitialApplication.d.ts +1 -2
  4. package/lib/errors/AgenticaJsonParseError.js +6 -6
  5. package/lib/index.mjs +47 -7
  6. package/lib/index.mjs.map +1 -1
  7. package/lib/orchestrate/call.js +16 -16
  8. package/lib/orchestrate/cancel.js +1 -1
  9. package/lib/orchestrate/cancel.js.map +1 -1
  10. package/lib/orchestrate/initialize.js +44 -2
  11. package/lib/orchestrate/initialize.js.map +1 -1
  12. package/lib/orchestrate/select.js +1 -1
  13. package/lib/orchestrate/select.js.map +1 -1
  14. package/lib/structures/IAgenticaController.d.ts +143 -143
  15. package/lib/utils/ChatGptCompletionMessageUtil.js +6 -6
  16. package/package.json +6 -6
  17. package/prompts/cancel.md +5 -5
  18. package/prompts/common.md +3 -3
  19. package/prompts/describe.md +7 -7
  20. package/prompts/execute.md +122 -122
  21. package/prompts/initialize.md +3 -3
  22. package/prompts/json_parse_error.md +35 -35
  23. package/prompts/select.md +7 -7
  24. package/prompts/validate.md +123 -123
  25. package/prompts/validate_repeated.md +31 -31
  26. package/src/Agentica.ts +367 -367
  27. package/src/MicroAgentica.ts +357 -357
  28. package/src/constants/AgenticaConstant.ts +4 -4
  29. package/src/constants/AgenticaDefaultPrompt.ts +44 -44
  30. package/src/constants/index.ts +2 -2
  31. package/src/context/AgenticaContext.ts +136 -136
  32. package/src/context/AgenticaContextRequestResult.ts +14 -14
  33. package/src/context/AgenticaOperation.ts +73 -73
  34. package/src/context/AgenticaOperationCollection.ts +49 -49
  35. package/src/context/AgenticaOperationSelection.ts +9 -9
  36. package/src/context/AgenticaTokenUsage.ts +186 -186
  37. package/src/context/MicroAgenticaContext.ts +99 -99
  38. package/src/context/index.ts +5 -5
  39. package/src/context/internal/AgenticaOperationComposer.ts +177 -177
  40. package/src/context/internal/AgenticaTokenUsageAggregator.ts +66 -66
  41. package/src/context/internal/__IChatCancelFunctionsApplication.ts +23 -23
  42. package/src/context/internal/__IChatFunctionReference.ts +21 -21
  43. package/src/context/internal/__IChatInitialApplication.ts +13 -15
  44. package/src/context/internal/__IChatSelectFunctionsApplication.ts +24 -24
  45. package/src/context/internal/isAgenticaContext.ts +11 -11
  46. package/src/errors/AgenticaJsonParseError.ts +52 -52
  47. package/src/errors/AgenticaValidationError.ts +49 -49
  48. package/src/errors/index.ts +2 -2
  49. package/src/events/AgenticaAssistantMessageEvent.ts +12 -12
  50. package/src/events/AgenticaCallEvent.ts +27 -27
  51. package/src/events/AgenticaCancelEvent.ts +9 -9
  52. package/src/events/AgenticaDescribeEvent.ts +14 -14
  53. package/src/events/AgenticaEvent.ts +59 -59
  54. package/src/events/AgenticaEvent.type.ts +19 -19
  55. package/src/events/AgenticaEventBase.ts +18 -18
  56. package/src/events/AgenticaEventSource.ts +6 -6
  57. package/src/events/AgenticaExecuteEvent.ts +45 -45
  58. package/src/events/AgenticaInitializeEvent.ts +7 -7
  59. package/src/events/AgenticaJsonParseErrorEvent.ts +16 -16
  60. package/src/events/AgenticaRequestEvent.ts +27 -27
  61. package/src/events/AgenticaResponseEvent.ts +32 -32
  62. package/src/events/AgenticaSelectEvent.ts +11 -11
  63. package/src/events/AgenticaUserMessageEvent.ts +12 -12
  64. package/src/events/AgenticaValidateEvent.ts +32 -32
  65. package/src/events/MicroAgenticaEvent.ts +45 -45
  66. package/src/events/index.ts +15 -15
  67. package/src/factory/events.ts +357 -357
  68. package/src/factory/histories.ts +348 -348
  69. package/src/factory/index.ts +3 -3
  70. package/src/factory/operations.ts +16 -16
  71. package/src/functional/assertHttpController.ts +106 -106
  72. package/src/functional/assertHttpLlmApplication.ts +52 -52
  73. package/src/functional/assertMcpController.ts +47 -47
  74. package/src/functional/createMcpLlmApplication.ts +72 -72
  75. package/src/functional/index.ts +7 -7
  76. package/src/functional/validateHttpController.ts +113 -113
  77. package/src/functional/validateHttpLlmApplication.ts +65 -65
  78. package/src/functional/validateMcpController.ts +53 -53
  79. package/src/histories/AgenticaAssistantMessageHistory.ts +10 -10
  80. package/src/histories/AgenticaCancelHistory.ts +8 -8
  81. package/src/histories/AgenticaDescribeHistory.ts +18 -18
  82. package/src/histories/AgenticaExecuteHistory.ts +64 -64
  83. package/src/histories/AgenticaHistory.ts +28 -28
  84. package/src/histories/AgenticaHistoryBase.ts +35 -35
  85. package/src/histories/AgenticaSelectHistory.ts +8 -8
  86. package/src/histories/AgenticaSystemMessageHistory.ts +10 -10
  87. package/src/histories/AgenticaUserMessageHistory.ts +11 -11
  88. package/src/histories/MicroAgenticaHistory.ts +19 -19
  89. package/src/histories/contents/AgenticaUserMessageAudioContent.ts +21 -21
  90. package/src/histories/contents/AgenticaUserMessageContent.ts +19 -19
  91. package/src/histories/contents/AgenticaUserMessageContentBase.ts +6 -6
  92. package/src/histories/contents/AgenticaUserMessageFileContent.ts +25 -25
  93. package/src/histories/contents/AgenticaUserMessageImageContent.ts +33 -33
  94. package/src/histories/contents/AgenticaUserMessageTextContent.ts +15 -15
  95. package/src/histories/contents/index.ts +5 -5
  96. package/src/histories/index.ts +10 -10
  97. package/src/index.ts +15 -15
  98. package/src/json/IAgenticaEventJson.ts +265 -265
  99. package/src/json/IAgenticaEventJson.type.ts +19 -19
  100. package/src/json/IAgenticaHistoryJson.ts +165 -165
  101. package/src/json/IAgenticaHistoryJson.type.ts +19 -19
  102. package/src/json/IAgenticaOperationJson.ts +36 -36
  103. package/src/json/IAgenticaOperationSelectionJson.ts +26 -26
  104. package/src/json/IAgenticaTokenUsageJson.ts +107 -107
  105. package/src/json/IMicroAgenticaEventJson.ts +22 -22
  106. package/src/json/IMicroAgenticaHistoryJson.ts +25 -25
  107. package/src/json/index.ts +7 -7
  108. package/src/orchestrate/call.ts +542 -542
  109. package/src/orchestrate/cancel.ts +265 -265
  110. package/src/orchestrate/describe.ts +66 -66
  111. package/src/orchestrate/execute.ts +61 -61
  112. package/src/orchestrate/index.ts +6 -6
  113. package/src/orchestrate/initialize.ts +102 -102
  114. package/src/orchestrate/internal/cancelFunctionFromContext.ts +33 -33
  115. package/src/orchestrate/internal/selectFunctionFromContext.ts +34 -34
  116. package/src/orchestrate/select.ts +320 -320
  117. package/src/structures/IAgenticaConfig.ts +83 -83
  118. package/src/structures/IAgenticaConfigBase.ts +87 -87
  119. package/src/structures/IAgenticaController.ts +143 -143
  120. package/src/structures/IAgenticaExecutor.ts +167 -167
  121. package/src/structures/IAgenticaProps.ts +78 -78
  122. package/src/structures/IAgenticaSystemPrompt.ts +236 -236
  123. package/src/structures/IAgenticaVendor.ts +54 -54
  124. package/src/structures/IMcpTool.ts +60 -60
  125. package/src/structures/IMicroAgenticaConfig.ts +56 -56
  126. package/src/structures/IMicroAgenticaExecutor.ts +67 -67
  127. package/src/structures/IMicroAgenticaProps.ts +77 -77
  128. package/src/structures/IMicroAgenticaSystemPrompt.ts +169 -169
  129. package/src/structures/index.ts +10 -10
  130. package/src/transformers/transformHistory.ts +172 -172
  131. package/src/utils/AssistantMessageEmptyError.ts +20 -20
  132. package/src/utils/AsyncQueue.spec.ts +355 -355
  133. package/src/utils/AsyncQueue.ts +95 -95
  134. package/src/utils/ByteArrayUtil.ts +5 -5
  135. package/src/utils/ChatGptCompletionMessageUtil.spec.ts +314 -314
  136. package/src/utils/ChatGptCompletionMessageUtil.ts +210 -210
  137. package/src/utils/ChatGptCompletionStreamingUtil.spec.ts +909 -909
  138. package/src/utils/ChatGptCompletionStreamingUtil.ts +91 -91
  139. package/src/utils/ChatGptTokenUsageAggregator.spec.ts +226 -226
  140. package/src/utils/ChatGptTokenUsageAggregator.ts +57 -57
  141. package/src/utils/MPSC.spec.ts +276 -276
  142. package/src/utils/MPSC.ts +42 -42
  143. package/src/utils/Singleton.spec.ts +138 -138
  144. package/src/utils/Singleton.ts +42 -42
  145. package/src/utils/StreamUtil.spec.ts +512 -512
  146. package/src/utils/StreamUtil.ts +87 -87
  147. package/src/utils/__map_take.spec.ts +140 -140
  148. package/src/utils/__map_take.ts +13 -13
  149. package/src/utils/__retry.spec.ts +198 -198
  150. package/src/utils/__retry.ts +18 -18
  151. package/src/utils/assertExecuteFailure.ts +16 -16
  152. package/src/utils/index.ts +4 -4
  153. package/src/utils/request.ts +140 -140
  154. package/src/utils/types.ts +50 -50
@@ -1,3 +1,3 @@
1
- export * from "./events";
2
- export * from "./histories";
3
- export * from "./operations";
1
+ export * from "./events";
2
+ export * from "./histories";
3
+ export * from "./operations";
@@ -1,16 +1,16 @@
1
- import type { AgenticaOperation } from "../context/AgenticaOperation";
2
- import type { AgenticaOperationSelection } from "../context/AgenticaOperationSelection";
3
-
4
- export function createOperationSelection(props: {
5
- operation: AgenticaOperation;
6
- reason: string;
7
- }): AgenticaOperationSelection {
8
- return {
9
- operation: props.operation,
10
- reason: props.reason,
11
- toJSON: () => ({
12
- operation: props.operation.toJSON(),
13
- reason: props.reason,
14
- }),
15
- };
16
- }
1
+ import type { AgenticaOperation } from "../context/AgenticaOperation";
2
+ import type { AgenticaOperationSelection } from "../context/AgenticaOperationSelection";
3
+
4
+ export function createOperationSelection(props: {
5
+ operation: AgenticaOperation;
6
+ reason: string;
7
+ }): AgenticaOperationSelection {
8
+ return {
9
+ operation: props.operation,
10
+ reason: props.reason,
11
+ toJSON: () => ({
12
+ operation: props.operation.toJSON(),
13
+ reason: props.reason,
14
+ }),
15
+ };
16
+ }
@@ -1,106 +1,106 @@
1
- import type { IHttpConnection, IHttpLlmApplication, IHttpLlmFunction, IHttpResponse, OpenApi, OpenApiV3, OpenApiV3_1, OpenApiV3_2, SwaggerV2 } from "@typia/interface";
2
-
3
- import { HttpLlm, OpenApiConverter } from "@typia/utils";
4
- import typia from "typia";
5
-
6
- import type { IAgenticaController } from "../structures/IAgenticaController";
7
-
8
- /**
9
- * Create an HTTP controller with type assertion.
10
- *
11
- * Create an {@link IAgenticaController.IHttp} instance which represents
12
- * the HTTP controller from the given Swagger/OpenAPI document and the
13
- * target LLM model with connection information.
14
- *
15
- * By the way, even though this `assertHttpController` function
16
- * supports every version of Swagger/OpenAPI specification, there can
17
- * be a type error in the given document. In that case, the function
18
- * will throw an error with detailed type error tracing information.
19
- *
20
- * @param props Properties to create the HTTP controller instance
21
- * @returns HTTP controller instance
22
- * @throws {@link TypeGuardError} when the given document is invalid
23
- * @author Samchon
24
- */
25
- export function assertHttpController(props: {
26
- /**
27
- * Name of the controller.
28
- */
29
- name: string;
30
-
31
- /**
32
- * Swagger/OpenAPI document.
33
- */
34
- document:
35
- | SwaggerV2.IDocument
36
- | OpenApiV3.IDocument
37
- | OpenApiV3_1.IDocument
38
- | OpenApiV3_2.IDocument
39
- | OpenApi.IDocument
40
- | unknown;
41
-
42
- /**
43
- * Connection to the server.
44
- *
45
- * Connection to the API server including the URL and headers.
46
- */
47
- connection: IHttpConnection;
48
-
49
- /**
50
- * Options for the LLM function calling schema composition.
51
- */
52
- config?: Partial<IHttpLlmApplication.IConfig>;
53
-
54
- /**
55
- * Executor of the API function.
56
- *
57
- * @param props Properties of the API function call
58
- * @returns HTTP response of the API function call
59
- */
60
- execute?: (props: {
61
- /**
62
- * Connection to the server.
63
- */
64
- connection: IHttpConnection;
65
-
66
- /**
67
- * Application schema.
68
- */
69
- application: IHttpLlmApplication;
70
-
71
- /**
72
- * Function schema.
73
- */
74
- function: IHttpLlmFunction;
75
-
76
- /**
77
- * Arguments of the function calling.
78
- *
79
- * It is an object of key-value pairs of the API function's parameters.
80
- * The property keys are composed by below rules:
81
- *
82
- * - parameter names
83
- * - query parameter as an object type if exists
84
- * - body parameter if exists
85
- */
86
- arguments: object;
87
- }) => Promise<IHttpResponse>;
88
- }): IAgenticaController.IHttp {
89
- const document = OpenApiConverter.upgradeDocument(typia.assert<
90
- | SwaggerV2.IDocument
91
- | OpenApiV3.IDocument
92
- | OpenApiV3_1.IDocument
93
- | OpenApiV3_2.IDocument
94
- | OpenApi.IDocument
95
- >(props.document));
96
- return {
97
- protocol: "http",
98
- name: props.name,
99
- application: HttpLlm.application({
100
- document,
101
- config: props.config,
102
- }),
103
- execute: props.execute,
104
- connection: props.connection,
105
- };
106
- }
1
+ import type { IHttpConnection, IHttpLlmApplication, IHttpLlmFunction, IHttpResponse, OpenApi, OpenApiV3, OpenApiV3_1, OpenApiV3_2, SwaggerV2 } from "@typia/interface";
2
+
3
+ import { HttpLlm, OpenApiConverter } from "@typia/utils";
4
+ import typia from "typia";
5
+
6
+ import type { IAgenticaController } from "../structures/IAgenticaController";
7
+
8
+ /**
9
+ * Create an HTTP controller with type assertion.
10
+ *
11
+ * Create an {@link IAgenticaController.IHttp} instance which represents
12
+ * the HTTP controller from the given Swagger/OpenAPI document and the
13
+ * target LLM model with connection information.
14
+ *
15
+ * By the way, even though this `assertHttpController` function
16
+ * supports every version of Swagger/OpenAPI specification, there can
17
+ * be a type error in the given document. In that case, the function
18
+ * will throw an error with detailed type error tracing information.
19
+ *
20
+ * @param props Properties to create the HTTP controller instance
21
+ * @returns HTTP controller instance
22
+ * @throws {@link TypeGuardError} when the given document is invalid
23
+ * @author Samchon
24
+ */
25
+ export function assertHttpController(props: {
26
+ /**
27
+ * Name of the controller.
28
+ */
29
+ name: string;
30
+
31
+ /**
32
+ * Swagger/OpenAPI document.
33
+ */
34
+ document:
35
+ | SwaggerV2.IDocument
36
+ | OpenApiV3.IDocument
37
+ | OpenApiV3_1.IDocument
38
+ | OpenApiV3_2.IDocument
39
+ | OpenApi.IDocument
40
+ | unknown;
41
+
42
+ /**
43
+ * Connection to the server.
44
+ *
45
+ * Connection to the API server including the URL and headers.
46
+ */
47
+ connection: IHttpConnection;
48
+
49
+ /**
50
+ * Options for the LLM function calling schema composition.
51
+ */
52
+ config?: Partial<IHttpLlmApplication.IConfig>;
53
+
54
+ /**
55
+ * Executor of the API function.
56
+ *
57
+ * @param props Properties of the API function call
58
+ * @returns HTTP response of the API function call
59
+ */
60
+ execute?: (props: {
61
+ /**
62
+ * Connection to the server.
63
+ */
64
+ connection: IHttpConnection;
65
+
66
+ /**
67
+ * Application schema.
68
+ */
69
+ application: IHttpLlmApplication;
70
+
71
+ /**
72
+ * Function schema.
73
+ */
74
+ function: IHttpLlmFunction;
75
+
76
+ /**
77
+ * Arguments of the function calling.
78
+ *
79
+ * It is an object of key-value pairs of the API function's parameters.
80
+ * The property keys are composed by below rules:
81
+ *
82
+ * - parameter names
83
+ * - query parameter as an object type if exists
84
+ * - body parameter if exists
85
+ */
86
+ arguments: object;
87
+ }) => Promise<IHttpResponse>;
88
+ }): IAgenticaController.IHttp {
89
+ const document = OpenApiConverter.upgradeDocument(typia.assert<
90
+ | SwaggerV2.IDocument
91
+ | OpenApiV3.IDocument
92
+ | OpenApiV3_1.IDocument
93
+ | OpenApiV3_2.IDocument
94
+ | OpenApi.IDocument
95
+ >(props.document));
96
+ return {
97
+ protocol: "http",
98
+ name: props.name,
99
+ application: HttpLlm.application({
100
+ document,
101
+ config: props.config,
102
+ }),
103
+ execute: props.execute,
104
+ connection: props.connection,
105
+ };
106
+ }
@@ -1,52 +1,52 @@
1
- import type { IHttpLlmApplication, OpenApiV3, OpenApiV3_1, OpenApiV3_2, SwaggerV2 } from "@typia/interface";
2
- import type { OpenApi } from "typia";
3
-
4
- import { HttpLlm, OpenApiConverter } from "@typia/utils";
5
- import typia from "typia";
6
-
7
- /**
8
- * Create an HTTP LLM application instance with type assertion.
9
- *
10
- * Create an {@link IHttpLlmApplication} instance which represents
11
- * the LLM (Large Language Model) function calling application schema
12
- * from the given Swagger/OpenAPI document and the target LLM model.
13
- *
14
- * By the way, even though this `assertHttpLlmApplication` function
15
- * supports every version of Swagger/OpenAPI specification, there can
16
- * be a type error in the given document. In that case, the function
17
- * will throw an error with detailed type error tracing information.
18
- *
19
- * @param props Properties to create the HTTP LLM application instance
20
- * @returns HTTP LLM application instance
21
- * @throws {@link TypeGuardError} when the given document is invalid
22
- * @author Samchon
23
- * @deprecated Use {@link assertHttpController} instead.
24
- */
25
- export function assertHttpLlmApplication(props: {
26
- /**
27
- * Swagger/OpenAPI document.
28
- */
29
- document:
30
- | SwaggerV2.IDocument
31
- | OpenApiV3.IDocument
32
- | OpenApiV3_1.IDocument
33
- | OpenApiV3_2.IDocument
34
- | OpenApi.IDocument
35
- | unknown;
36
-
37
- /**
38
- * Options for the LLM function calling schema composition.
39
- */
40
- config?: Partial<IHttpLlmApplication.IConfig>;
41
- }): IHttpLlmApplication {
42
- return HttpLlm.application({
43
- document: OpenApiConverter.upgradeDocument(typia.assert<
44
- | SwaggerV2.IDocument
45
- | OpenApiV3.IDocument
46
- | OpenApiV3_1.IDocument
47
- | OpenApiV3_2.IDocument
48
- | OpenApi.IDocument
49
- >(props.document)),
50
- config: props.config,
51
- });
52
- }
1
+ import type { IHttpLlmApplication, OpenApiV3, OpenApiV3_1, OpenApiV3_2, SwaggerV2 } from "@typia/interface";
2
+ import type { OpenApi } from "typia";
3
+
4
+ import { HttpLlm, OpenApiConverter } from "@typia/utils";
5
+ import typia from "typia";
6
+
7
+ /**
8
+ * Create an HTTP LLM application instance with type assertion.
9
+ *
10
+ * Create an {@link IHttpLlmApplication} instance which represents
11
+ * the LLM (Large Language Model) function calling application schema
12
+ * from the given Swagger/OpenAPI document and the target LLM model.
13
+ *
14
+ * By the way, even though this `assertHttpLlmApplication` function
15
+ * supports every version of Swagger/OpenAPI specification, there can
16
+ * be a type error in the given document. In that case, the function
17
+ * will throw an error with detailed type error tracing information.
18
+ *
19
+ * @param props Properties to create the HTTP LLM application instance
20
+ * @returns HTTP LLM application instance
21
+ * @throws {@link TypeGuardError} when the given document is invalid
22
+ * @author Samchon
23
+ * @deprecated Use {@link assertHttpController} instead.
24
+ */
25
+ export function assertHttpLlmApplication(props: {
26
+ /**
27
+ * Swagger/OpenAPI document.
28
+ */
29
+ document:
30
+ | SwaggerV2.IDocument
31
+ | OpenApiV3.IDocument
32
+ | OpenApiV3_1.IDocument
33
+ | OpenApiV3_2.IDocument
34
+ | OpenApi.IDocument
35
+ | unknown;
36
+
37
+ /**
38
+ * Options for the LLM function calling schema composition.
39
+ */
40
+ config?: Partial<IHttpLlmApplication.IConfig>;
41
+ }): IHttpLlmApplication {
42
+ return HttpLlm.application({
43
+ document: OpenApiConverter.upgradeDocument(typia.assert<
44
+ | SwaggerV2.IDocument
45
+ | OpenApiV3.IDocument
46
+ | OpenApiV3_1.IDocument
47
+ | OpenApiV3_2.IDocument
48
+ | OpenApi.IDocument
49
+ >(props.document)),
50
+ config: props.config,
51
+ });
52
+ }
@@ -1,47 +1,47 @@
1
- import type { ILlmApplication } from "typia";
2
-
3
- import typia from "typia";
4
-
5
- import type { IAgenticaController } from "../structures/IAgenticaController";
6
- import type { IMcpTool } from "../structures/IMcpTool";
7
-
8
- import { createMcpLlmApplication } from "./createMcpLlmApplication";
9
-
10
- /**
11
- * Create an MCP controller with type assertion.
12
- *
13
- * Create an {@link IAgenticaController.IMcp} instance which represents
14
- * an MCP (Model Context Protocol) controller with LLM function calling
15
- * schemas and client connection.
16
- *
17
- * @param props Properties to create the MCP controller
18
- * @param props.name Name of the MCP implementation.
19
- * @param props.client Client connection to the MCP implementation.
20
- * @param props.model Model schema of the LLM function calling.
21
- * @param props.options Options to create the MCP controller.
22
- * @returns MCP LLM application instance
23
- * @author sunrabbit123
24
- */
25
- export async function assertMcpController(props: {
26
- name: string;
27
- client: IAgenticaController.IMcp["client"];
28
- config?: Partial<ILlmApplication.IConfig>;
29
- }): Promise<IAgenticaController.IMcp> {
30
- // for peerDependencies
31
- const { ListToolsResultSchema } = await import("@modelcontextprotocol/sdk/types.js");
32
-
33
- // get list of tools
34
- const { tools } = await props.client.request({ method: "tools/list" }, ListToolsResultSchema);
35
-
36
- const application: ILlmApplication
37
- = createMcpLlmApplication({
38
- tools: typia.assert<Array<IMcpTool>>(tools),
39
- config: props.config,
40
- });
41
- return {
42
- protocol: "mcp",
43
- name: props.name,
44
- client: props.client,
45
- application,
46
- };
47
- }
1
+ import type { ILlmApplication } from "typia";
2
+
3
+ import typia from "typia";
4
+
5
+ import type { IAgenticaController } from "../structures/IAgenticaController";
6
+ import type { IMcpTool } from "../structures/IMcpTool";
7
+
8
+ import { createMcpLlmApplication } from "./createMcpLlmApplication";
9
+
10
+ /**
11
+ * Create an MCP controller with type assertion.
12
+ *
13
+ * Create an {@link IAgenticaController.IMcp} instance which represents
14
+ * an MCP (Model Context Protocol) controller with LLM function calling
15
+ * schemas and client connection.
16
+ *
17
+ * @param props Properties to create the MCP controller
18
+ * @param props.name Name of the MCP implementation.
19
+ * @param props.client Client connection to the MCP implementation.
20
+ * @param props.model Model schema of the LLM function calling.
21
+ * @param props.options Options to create the MCP controller.
22
+ * @returns MCP LLM application instance
23
+ * @author sunrabbit123
24
+ */
25
+ export async function assertMcpController(props: {
26
+ name: string;
27
+ client: IAgenticaController.IMcp["client"];
28
+ config?: Partial<ILlmApplication.IConfig>;
29
+ }): Promise<IAgenticaController.IMcp> {
30
+ // for peerDependencies
31
+ const { ListToolsResultSchema } = await import("@modelcontextprotocol/sdk/types.js");
32
+
33
+ // get list of tools
34
+ const { tools } = await props.client.request({ method: "tools/list" }, ListToolsResultSchema);
35
+
36
+ const application: ILlmApplication
37
+ = createMcpLlmApplication({
38
+ tools: typia.assert<Array<IMcpTool>>(tools),
39
+ config: props.config,
40
+ });
41
+ return {
42
+ protocol: "mcp",
43
+ name: props.name,
44
+ client: props.client,
45
+ application,
46
+ };
47
+ }
@@ -1,72 +1,72 @@
1
- import type { IJsonSchemaTransformError, IResult } from "@typia/interface";
2
- import type { ILlmApplication, ILlmFunction, ILlmSchema, OpenApi } from "typia";
3
-
4
- import { LlmJson, LlmSchemaConverter, OpenApiConverter, OpenApiTypeChecker } from "@typia/utils";
5
-
6
- import type { IMcpTool } from "../structures/IMcpTool";
7
-
8
- export function createMcpLlmApplication(props: {
9
- tools: Array<IMcpTool>;
10
- config?: Partial<ILlmApplication.IConfig> | undefined;
11
- }): ILlmApplication {
12
- const config: ILlmSchema.IConfig = LlmSchemaConverter.getConfig(props.config);
13
- const functions: ILlmFunction[] = [];
14
-
15
- props.tools.forEach((tool, i) => {
16
- // CONVERT TO EMENDED OPENAPI V3.1 SPECIFICATION
17
- const components: OpenApi.IComponents
18
- = OpenApiConverter.upgradeComponents({
19
- schemas: tool.inputSchema.$defs,
20
- });
21
- const schema: OpenApi.IJsonSchema = OpenApiConverter.upgradeSchema({
22
- components: {
23
- schemas: tool.inputSchema.$defs,
24
- },
25
- schema: tool.inputSchema,
26
- });
27
- if (components.schemas !== undefined) {
28
- const visited: Set<string> = new Set<string>();
29
- OpenApiTypeChecker.visit({
30
- closure: (schema: OpenApi.IJsonSchema) => {
31
- if (OpenApiTypeChecker.isReference(schema)) {
32
- visited.add(schema.$ref.split("/").pop()!);
33
- }
34
- },
35
- components,
36
- schema,
37
- });
38
- components.schemas = Object.fromEntries(
39
- Object.entries(components.schemas).filter(([key]) =>
40
- visited.has(key),
41
- ),
42
- );
43
- }
44
-
45
- // CONVERT TO LLM PARAMETERS
46
- const parameters: IResult<ILlmSchema.IParameters, IJsonSchemaTransformError>
47
- = LlmSchemaConverter.parameters({
48
- config,
49
- components,
50
- schema: schema as
51
- | OpenApi.IJsonSchema.IObject
52
- | OpenApi.IJsonSchema.IReference,
53
- accessor: `$input.tools[${i}].inputSchema`,
54
- });
55
- if (parameters.success === false) {
56
- return;
57
- }
58
-
59
- functions.push({
60
- name: tool.name,
61
- parameters: parameters.value,
62
- description: tool.description,
63
- validate: LlmJson.validate(parameters.value),
64
- parse: str => LlmJson.parse(str, parameters.value),
65
- coerce: input => LlmJson.coerce(input, parameters.value),
66
- });
67
- });
68
- return {
69
- functions,
70
- config: config as ILlmApplication.IConfig,
71
- };
72
- }
1
+ import type { IJsonSchemaTransformError, IResult } from "@typia/interface";
2
+ import type { ILlmApplication, ILlmFunction, ILlmSchema, OpenApi } from "typia";
3
+
4
+ import { LlmJson, LlmSchemaConverter, OpenApiConverter, OpenApiTypeChecker } from "@typia/utils";
5
+
6
+ import type { IMcpTool } from "../structures/IMcpTool";
7
+
8
+ export function createMcpLlmApplication(props: {
9
+ tools: Array<IMcpTool>;
10
+ config?: Partial<ILlmApplication.IConfig> | undefined;
11
+ }): ILlmApplication {
12
+ const config: ILlmSchema.IConfig = LlmSchemaConverter.getConfig(props.config);
13
+ const functions: ILlmFunction[] = [];
14
+
15
+ props.tools.forEach((tool, i) => {
16
+ // CONVERT TO EMENDED OPENAPI V3.1 SPECIFICATION
17
+ const components: OpenApi.IComponents
18
+ = OpenApiConverter.upgradeComponents({
19
+ schemas: tool.inputSchema.$defs,
20
+ });
21
+ const schema: OpenApi.IJsonSchema = OpenApiConverter.upgradeSchema({
22
+ components: {
23
+ schemas: tool.inputSchema.$defs,
24
+ },
25
+ schema: tool.inputSchema,
26
+ });
27
+ if (components.schemas !== undefined) {
28
+ const visited: Set<string> = new Set<string>();
29
+ OpenApiTypeChecker.visit({
30
+ closure: (schema: OpenApi.IJsonSchema) => {
31
+ if (OpenApiTypeChecker.isReference(schema)) {
32
+ visited.add(schema.$ref.split("/").pop()!);
33
+ }
34
+ },
35
+ components,
36
+ schema,
37
+ });
38
+ components.schemas = Object.fromEntries(
39
+ Object.entries(components.schemas).filter(([key]) =>
40
+ visited.has(key),
41
+ ),
42
+ );
43
+ }
44
+
45
+ // CONVERT TO LLM PARAMETERS
46
+ const parameters: IResult<ILlmSchema.IParameters, IJsonSchemaTransformError>
47
+ = LlmSchemaConverter.parameters({
48
+ config,
49
+ components,
50
+ schema: schema as
51
+ | OpenApi.IJsonSchema.IObject
52
+ | OpenApi.IJsonSchema.IReference,
53
+ accessor: `$input.tools[${i}].inputSchema`,
54
+ });
55
+ if (parameters.success === false) {
56
+ return;
57
+ }
58
+
59
+ functions.push({
60
+ name: tool.name,
61
+ parameters: parameters.value,
62
+ description: tool.description,
63
+ validate: LlmJson.validate(parameters.value),
64
+ parse: str => LlmJson.parse(str, parameters.value),
65
+ coerce: input => LlmJson.coerce(input, parameters.value),
66
+ });
67
+ });
68
+ return {
69
+ functions,
70
+ config: config as ILlmApplication.IConfig,
71
+ };
72
+ }
@@ -1,7 +1,7 @@
1
- export * from "./assertHttpController";
2
- export * from "./assertHttpLlmApplication"; // deprecated
3
- export * from "./assertMcpController";
4
- export * from "./validateHttpController"; // deprecated
5
-
6
- export * from "./validateHttpLlmApplication";
7
- export * from "./validateMcpController";
1
+ export * from "./assertHttpController";
2
+ export * from "./assertHttpLlmApplication"; // deprecated
3
+ export * from "./assertMcpController";
4
+ export * from "./validateHttpController"; // deprecated
5
+
6
+ export * from "./validateHttpLlmApplication";
7
+ export * from "./validateMcpController";