@agentica/core 0.43.3 → 0.44.0-dev.20260313

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 (205) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +218 -218
  3. package/lib/constants/AgenticaSystemPrompt.js +1 -1
  4. package/lib/constants/AgenticaSystemPrompt.js.map +1 -1
  5. package/lib/context/AgenticaOperation.d.ts +3 -2
  6. package/lib/context/internal/AgenticaOperationComposer.js.map +1 -1
  7. package/lib/context/internal/AgenticaTokenUsageAggregator.js.map +1 -1
  8. package/lib/context/internal/__IChatInitialApplication.d.ts +1 -1
  9. package/lib/errors/AgenticaJsonParseError.d.ts +5 -8
  10. package/lib/errors/AgenticaJsonParseError.js +11 -6
  11. package/lib/errors/AgenticaJsonParseError.js.map +1 -1
  12. package/lib/errors/AgenticaValidationError.d.ts +1 -1
  13. package/lib/events/AgenticaExecuteEvent.d.ts +1 -1
  14. package/lib/events/AgenticaJsonParseErrorEvent.d.ts +2 -2
  15. package/lib/factory/events.d.ts +2 -3
  16. package/lib/factory/events.js +1 -2
  17. package/lib/factory/events.js.map +1 -1
  18. package/lib/functional/assertHttpController.d.ts +2 -3
  19. package/lib/functional/assertHttpController.js +3939 -2656
  20. package/lib/functional/assertHttpController.js.map +1 -1
  21. package/lib/functional/assertHttpLlmApplication.d.ts +3 -3
  22. package/lib/functional/assertHttpLlmApplication.js +3939 -2656
  23. package/lib/functional/assertHttpLlmApplication.js.map +1 -1
  24. package/lib/functional/assertMcpController.d.ts +2 -2
  25. package/lib/functional/assertMcpController.js +202 -629
  26. package/lib/functional/assertMcpController.js.map +1 -1
  27. package/lib/functional/createMcpLlmApplication.d.ts +6 -0
  28. package/lib/functional/createMcpLlmApplication.js +56 -0
  29. package/lib/functional/createMcpLlmApplication.js.map +1 -0
  30. package/lib/functional/validateHttpController.d.ts +3 -3
  31. package/lib/functional/validateHttpController.js +3367 -2268
  32. package/lib/functional/validateHttpController.js.map +1 -1
  33. package/lib/functional/validateHttpLlmApplication.d.ts +3 -4
  34. package/lib/functional/validateHttpLlmApplication.js +3367 -2268
  35. package/lib/functional/validateHttpLlmApplication.js.map +1 -1
  36. package/lib/functional/validateMcpController.d.ts +2 -2
  37. package/lib/functional/validateMcpController.js +388 -1161
  38. package/lib/functional/validateMcpController.js.map +1 -1
  39. package/lib/histories/AgenticaExecuteHistory.d.ts +1 -1
  40. package/lib/index.mjs +21256 -18946
  41. package/lib/index.mjs.map +1 -1
  42. package/lib/orchestrate/call.js +43 -56
  43. package/lib/orchestrate/call.js.map +1 -1
  44. package/lib/orchestrate/cancel.js +9 -66
  45. package/lib/orchestrate/cancel.js.map +1 -1
  46. package/lib/orchestrate/initialize.js +4 -947
  47. package/lib/orchestrate/initialize.js.map +1 -1
  48. package/lib/orchestrate/select.js +11 -68
  49. package/lib/orchestrate/select.js.map +1 -1
  50. package/lib/structures/IAgenticaController.d.ts +143 -151
  51. package/lib/structures/IMcpTool.d.ts +52 -0
  52. package/lib/structures/IMcpTool.js +3 -0
  53. package/lib/structures/IMcpTool.js.map +1 -0
  54. package/lib/utils/ChatGptCompletionMessageUtil.js +16 -5
  55. package/lib/utils/ChatGptCompletionMessageUtil.js.map +1 -1
  56. package/lib/utils/ChatGptCompletionMessageUtil.spec.js +0 -5
  57. package/lib/utils/ChatGptCompletionMessageUtil.spec.js.map +1 -1
  58. package/package.json +7 -9
  59. package/prompts/cancel.md +5 -5
  60. package/prompts/common.md +3 -3
  61. package/prompts/describe.md +7 -7
  62. package/prompts/execute.md +122 -122
  63. package/prompts/initialize.md +3 -3
  64. package/prompts/json_parse_error.md +35 -33
  65. package/prompts/select.md +7 -7
  66. package/prompts/validate.md +123 -123
  67. package/prompts/validate_repeated.md +31 -31
  68. package/src/Agentica.ts +367 -367
  69. package/src/MicroAgentica.ts +357 -357
  70. package/src/constants/AgenticaConstant.ts +4 -4
  71. package/src/constants/AgenticaDefaultPrompt.ts +44 -44
  72. package/src/constants/AgenticaSystemPrompt.ts +1 -1
  73. package/src/constants/index.ts +2 -2
  74. package/src/context/AgenticaContext.ts +136 -136
  75. package/src/context/AgenticaContextRequestResult.ts +14 -14
  76. package/src/context/AgenticaOperation.ts +73 -72
  77. package/src/context/AgenticaOperationCollection.ts +49 -49
  78. package/src/context/AgenticaOperationSelection.ts +9 -9
  79. package/src/context/AgenticaTokenUsage.ts +186 -186
  80. package/src/context/MicroAgenticaContext.ts +99 -99
  81. package/src/context/index.ts +5 -5
  82. package/src/context/internal/AgenticaOperationComposer.ts +177 -177
  83. package/src/context/internal/AgenticaTokenUsageAggregator.ts +66 -66
  84. package/src/context/internal/__IChatCancelFunctionsApplication.ts +23 -23
  85. package/src/context/internal/__IChatFunctionReference.ts +21 -21
  86. package/src/context/internal/__IChatInitialApplication.ts +15 -15
  87. package/src/context/internal/__IChatSelectFunctionsApplication.ts +24 -24
  88. package/src/context/internal/isAgenticaContext.ts +11 -11
  89. package/src/errors/AgenticaJsonParseError.ts +52 -47
  90. package/src/errors/AgenticaValidationError.ts +49 -49
  91. package/src/errors/index.ts +2 -2
  92. package/src/events/AgenticaAssistantMessageEvent.ts +12 -12
  93. package/src/events/AgenticaCallEvent.ts +27 -27
  94. package/src/events/AgenticaCancelEvent.ts +9 -9
  95. package/src/events/AgenticaDescribeEvent.ts +14 -14
  96. package/src/events/AgenticaEvent.ts +59 -59
  97. package/src/events/AgenticaEvent.type.ts +19 -19
  98. package/src/events/AgenticaEventBase.ts +18 -18
  99. package/src/events/AgenticaEventSource.ts +6 -6
  100. package/src/events/AgenticaExecuteEvent.ts +45 -45
  101. package/src/events/AgenticaInitializeEvent.ts +7 -7
  102. package/src/events/AgenticaJsonParseErrorEvent.ts +16 -15
  103. package/src/events/AgenticaRequestEvent.ts +27 -27
  104. package/src/events/AgenticaResponseEvent.ts +32 -32
  105. package/src/events/AgenticaSelectEvent.ts +11 -11
  106. package/src/events/AgenticaUserMessageEvent.ts +12 -12
  107. package/src/events/AgenticaValidateEvent.ts +32 -32
  108. package/src/events/MicroAgenticaEvent.ts +45 -45
  109. package/src/events/index.ts +15 -15
  110. package/src/factory/events.ts +357 -359
  111. package/src/factory/histories.ts +348 -348
  112. package/src/factory/index.ts +3 -3
  113. package/src/factory/operations.ts +16 -16
  114. package/src/functional/assertHttpController.ts +106 -104
  115. package/src/functional/assertHttpLlmApplication.ts +52 -57
  116. package/src/functional/assertMcpController.ts +47 -44
  117. package/src/functional/createMcpLlmApplication.ts +72 -0
  118. package/src/functional/index.ts +7 -7
  119. package/src/functional/validateHttpController.ts +113 -110
  120. package/src/functional/validateHttpLlmApplication.ts +65 -70
  121. package/src/functional/validateMcpController.ts +53 -50
  122. package/src/histories/AgenticaAssistantMessageHistory.ts +10 -10
  123. package/src/histories/AgenticaCancelHistory.ts +8 -8
  124. package/src/histories/AgenticaDescribeHistory.ts +18 -18
  125. package/src/histories/AgenticaExecuteHistory.ts +64 -64
  126. package/src/histories/AgenticaHistory.ts +28 -28
  127. package/src/histories/AgenticaHistoryBase.ts +35 -35
  128. package/src/histories/AgenticaSelectHistory.ts +8 -8
  129. package/src/histories/AgenticaSystemMessageHistory.ts +10 -10
  130. package/src/histories/AgenticaUserMessageHistory.ts +11 -11
  131. package/src/histories/MicroAgenticaHistory.ts +19 -19
  132. package/src/histories/contents/AgenticaUserMessageAudioContent.ts +21 -21
  133. package/src/histories/contents/AgenticaUserMessageContent.ts +19 -19
  134. package/src/histories/contents/AgenticaUserMessageContentBase.ts +6 -6
  135. package/src/histories/contents/AgenticaUserMessageFileContent.ts +25 -25
  136. package/src/histories/contents/AgenticaUserMessageImageContent.ts +33 -33
  137. package/src/histories/contents/AgenticaUserMessageTextContent.ts +15 -15
  138. package/src/histories/contents/index.ts +5 -5
  139. package/src/histories/index.ts +10 -10
  140. package/src/index.ts +15 -15
  141. package/src/json/IAgenticaEventJson.ts +265 -265
  142. package/src/json/IAgenticaEventJson.type.ts +19 -19
  143. package/src/json/IAgenticaHistoryJson.ts +165 -165
  144. package/src/json/IAgenticaHistoryJson.type.ts +19 -19
  145. package/src/json/IAgenticaOperationJson.ts +36 -36
  146. package/src/json/IAgenticaOperationSelectionJson.ts +26 -26
  147. package/src/json/IAgenticaTokenUsageJson.ts +107 -107
  148. package/src/json/IMicroAgenticaEventJson.ts +22 -22
  149. package/src/json/IMicroAgenticaHistoryJson.ts +25 -25
  150. package/src/json/index.ts +7 -7
  151. package/src/orchestrate/call.ts +542 -558
  152. package/src/orchestrate/cancel.ts +265 -269
  153. package/src/orchestrate/describe.ts +66 -66
  154. package/src/orchestrate/execute.ts +61 -61
  155. package/src/orchestrate/index.ts +6 -6
  156. package/src/orchestrate/initialize.ts +102 -102
  157. package/src/orchestrate/internal/cancelFunctionFromContext.ts +33 -33
  158. package/src/orchestrate/internal/selectFunctionFromContext.ts +34 -34
  159. package/src/orchestrate/select.ts +320 -322
  160. package/src/structures/IAgenticaConfig.ts +83 -83
  161. package/src/structures/IAgenticaConfigBase.ts +87 -87
  162. package/src/structures/IAgenticaController.ts +143 -151
  163. package/src/structures/IAgenticaExecutor.ts +167 -167
  164. package/src/structures/IAgenticaProps.ts +78 -78
  165. package/src/structures/IAgenticaSystemPrompt.ts +236 -236
  166. package/src/structures/IAgenticaVendor.ts +54 -54
  167. package/src/structures/IMcpTool.ts +60 -0
  168. package/src/structures/IMicroAgenticaConfig.ts +56 -56
  169. package/src/structures/IMicroAgenticaExecutor.ts +67 -67
  170. package/src/structures/IMicroAgenticaProps.ts +77 -77
  171. package/src/structures/IMicroAgenticaSystemPrompt.ts +169 -169
  172. package/src/structures/index.ts +10 -10
  173. package/src/transformers/transformHistory.ts +172 -172
  174. package/src/utils/AssistantMessageEmptyError.ts +20 -20
  175. package/src/utils/AsyncQueue.spec.ts +355 -355
  176. package/src/utils/AsyncQueue.ts +95 -95
  177. package/src/utils/ByteArrayUtil.ts +5 -5
  178. package/src/utils/ChatGptCompletionMessageUtil.spec.ts +314 -320
  179. package/src/utils/ChatGptCompletionMessageUtil.ts +210 -195
  180. package/src/utils/ChatGptCompletionStreamingUtil.spec.ts +909 -909
  181. package/src/utils/ChatGptCompletionStreamingUtil.ts +91 -91
  182. package/src/utils/ChatGptTokenUsageAggregator.spec.ts +226 -226
  183. package/src/utils/ChatGptTokenUsageAggregator.ts +57 -57
  184. package/src/utils/MPSC.spec.ts +276 -276
  185. package/src/utils/MPSC.ts +42 -42
  186. package/src/utils/Singleton.spec.ts +138 -138
  187. package/src/utils/Singleton.ts +42 -42
  188. package/src/utils/StreamUtil.spec.ts +512 -512
  189. package/src/utils/StreamUtil.ts +87 -87
  190. package/src/utils/__map_take.spec.ts +140 -140
  191. package/src/utils/__map_take.ts +13 -13
  192. package/src/utils/__retry.spec.ts +198 -198
  193. package/src/utils/__retry.ts +18 -18
  194. package/src/utils/assertExecuteFailure.ts +16 -16
  195. package/src/utils/index.ts +4 -4
  196. package/src/utils/request.ts +140 -140
  197. package/src/utils/types.ts +50 -50
  198. package/lib/context/internal/AgenticaOperationComposer.spec.d.ts +0 -1
  199. package/lib/context/internal/AgenticaOperationComposer.spec.js +0 -353
  200. package/lib/context/internal/AgenticaOperationComposer.spec.js.map +0 -1
  201. package/lib/utils/JsonUtil.d.ts +0 -8
  202. package/lib/utils/JsonUtil.js +0 -349
  203. package/lib/utils/JsonUtil.js.map +0 -1
  204. package/src/context/internal/AgenticaOperationComposer.spec.ts +0 -401
  205. package/src/utils/JsonUtil.ts +0 -460
@@ -1,401 +0,0 @@
1
- import type { IHttpLlmFunction, ILlmFunction, ILlmSchema, IMcpLlmFunction, IValidation } from "@samchon/openapi";
2
-
3
- import { Client } from "@modelcontextprotocol/sdk/client/index.js";
4
- import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory";
5
- import { createServer } from "@wrtnlabs/calculator-mcp";
6
-
7
- import type { IAgenticaConfig } from "../../structures/IAgenticaConfig";
8
- import type { IAgenticaController } from "../../structures/IAgenticaController";
9
-
10
- import { assertMcpController } from "../../functional/assertMcpController";
11
-
12
- import { compose, divide, getOperations, toClassOperations, toHttpOperations, toMcpOperations } from "./AgenticaOperationComposer";
13
-
14
- const client = new Client({
15
- name: "calculator",
16
- version: "1.0.0",
17
- });
18
-
19
- // test helper functions
20
- function createMockHttpFunction(name: string, method: "get" | "post" | "patch" | "put" | "delete", path: string): IHttpLlmFunction {
21
- return {
22
- name,
23
- method,
24
- path,
25
- validate: () => ({ success: true, data: {} } as IValidation<unknown>),
26
- operation: () => ({}),
27
- route: () => ({
28
- method,
29
- path,
30
- emendedPath: path,
31
- accessor: [name],
32
- body: null,
33
- query: null,
34
- parameters: [],
35
- headers: null,
36
- success: null,
37
- exceptions: {},
38
- comment: () => "OK",
39
- operation: () => ({}),
40
- }),
41
- parameters: {
42
- type: "object",
43
- properties: {},
44
- additionalProperties: false,
45
- required: [],
46
- $defs: {},
47
- } satisfies ILlmSchema.IParameters,
48
- output: {},
49
- };
50
- }
51
-
52
- function createMockHttpController(name: string, functions: IHttpLlmFunction[]): IAgenticaController.IHttp {
53
- return {
54
- name,
55
- protocol: "http",
56
- connection: { host: "https://example.com" },
57
- application: {
58
- functions,
59
- config: {
60
- reference: true,
61
- strict: false,
62
- separate: null,
63
- maxLength: 64,
64
- equals: false,
65
- },
66
- errors: [],
67
- },
68
- };
69
- }
70
-
71
- function createMockClassController(name: string, functions: ILlmFunction[]): IAgenticaController.IClass {
72
- return {
73
- name,
74
- protocol: "class",
75
- application: {
76
- functions,
77
- config: {
78
- reference: true,
79
- strict: false,
80
- separate: null,
81
- validate: null,
82
- },
83
- },
84
- execute: {},
85
- };
86
- }
87
-
88
- async function createMockMcpController(name: string, functions: IMcpLlmFunction[]): Promise<IAgenticaController.IMcp> {
89
- const controller = await assertMcpController({
90
- name,
91
- client,
92
- });
93
- return {
94
- ...controller,
95
- application: {
96
- ...controller.application,
97
- functions,
98
- },
99
- };
100
- }
101
-
102
- describe("a AgenticaOperationComposer", () => {
103
- beforeAll(async () => {
104
- const server = await createServer({
105
- name: "calculator",
106
- version: "1.0.0",
107
- });
108
-
109
- const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
110
-
111
- await Promise.all([
112
- client.connect(clientTransport),
113
-
114
- server.connect(serverTransport),
115
- ]);
116
- });
117
- describe("compose", () => {
118
- it("should compose operations from controllers", async () => {
119
- // Mock controllers
120
- const mockHttpController = createMockHttpController("httpController", [
121
- createMockHttpFunction("function1", "get", "/api/function1"),
122
- createMockHttpFunction("function2", "post", "/api/function2"),
123
- ]);
124
-
125
- const mockClassController = createMockClassController("classController", [
126
- {
127
- name: "function3",
128
- validate: () => ({ success: true, data: {} } as IValidation<unknown>),
129
- parameters: {
130
- type: "object",
131
- properties: {},
132
- additionalProperties: false,
133
- required: [],
134
- $defs: {},
135
- } satisfies ILlmSchema.IParameters,
136
- output: {},
137
- },
138
- ]);
139
-
140
- const mockMcpController = await createMockMcpController("mcpController", [
141
- {
142
- name: "function4",
143
- parameters: {
144
- type: "object",
145
- properties: {},
146
- additionalProperties: false,
147
- required: [],
148
- $defs: {},
149
- } satisfies ILlmSchema.IParameters,
150
- validate: (data: unknown) => ({
151
- success: true,
152
- data,
153
- }),
154
- },
155
- ]);
156
-
157
- const controllers = [mockHttpController, mockClassController, mockMcpController];
158
-
159
- const result = compose({ controllers });
160
-
161
- expect(result.array).toHaveLength(4);
162
- expect(result.flat).toBeInstanceOf(Map);
163
- expect(result.group).toBeInstanceOf(Map);
164
- expect(result.divided).toBeUndefined();
165
- });
166
-
167
- it("should divide operations when capacity is provided", () => {
168
- // Mock controllers
169
- const mockController = createMockHttpController("httpController", [
170
- createMockHttpFunction("function1", "get", "/api/function1"),
171
- createMockHttpFunction("function2", "post", "/api/function2"),
172
- createMockHttpFunction("function3", "put", "/api/function3"),
173
- createMockHttpFunction("function4", "delete", "/api/function4"),
174
- createMockHttpFunction("function5", "patch", "/api/function5"),
175
- ]);
176
-
177
- const config: IAgenticaConfig = {
178
- capacity: 2,
179
- };
180
-
181
- const result = compose({ controllers: [mockController], config });
182
-
183
- expect(result.array).toHaveLength(5);
184
- expect(result.divided).toBeDefined();
185
- expect(result.divided).toHaveLength(3); // 5 items with capacity 2 should be divided into 3 groups
186
- });
187
- });
188
-
189
- describe("getOperations", () => {
190
- it("should get operations from http controllers", () => {
191
- const mockController = createMockHttpController("httpController", [
192
- createMockHttpFunction("function1", "get", "/api/function1"),
193
- createMockHttpFunction("function2", "post", "/api/function2"),
194
- ]);
195
-
196
- const result = getOperations({ controllers: [mockController], naming: (func, idx) => `_${idx}_${func}` });
197
-
198
- expect(result).toHaveLength(2);
199
- expect(result[0]?.protocol).toBe("http");
200
- expect(result[0]?.name).toBe("_0_function1");
201
- expect(result[1]?.name).toBe("_0_function2");
202
- });
203
-
204
- it("should get operations from class controllers", () => {
205
- const mockController = createMockClassController("classController", [
206
- {
207
- name: "function1",
208
- validate: () => ({ success: true, data: {} } as IValidation<unknown>),
209
- parameters: {
210
- type: "object",
211
- properties: {},
212
- additionalProperties: false,
213
- required: [],
214
- $defs: {},
215
- } satisfies ILlmSchema.IParameters,
216
- output: {},
217
- },
218
- ]);
219
-
220
- const result = getOperations({ controllers: [mockController], naming: (func, idx) => `_${idx}_${func}` });
221
-
222
- expect(result).toHaveLength(1);
223
- expect(result[0]?.protocol).toBe("class");
224
- expect(result[0]?.name).toBe("_0_function1");
225
- });
226
-
227
- it("should get operations from mcp controllers", async () => {
228
- const mockController = await createMockMcpController("mcpController", [
229
- {
230
- name: "function1",
231
- parameters: {
232
- type: "object",
233
- properties: {},
234
- additionalProperties: false,
235
- required: [],
236
- $defs: {},
237
- },
238
- validate: (data: unknown) => ({
239
- success: true,
240
- data,
241
- }),
242
- },
243
- ]);
244
-
245
- const result = getOperations({ controllers: [mockController], naming: (func, idx) => `_${idx}_${func}` });
246
-
247
- expect(result).toHaveLength(1);
248
- expect(result[0]?.protocol).toBe("mcp");
249
- expect(result[0]?.name).toBe("_0_function1");
250
- });
251
-
252
- it("should throw error for unsupported protocol", () => {
253
- const mockController: IAgenticaController.IHttp = {
254
- name: "unsupportedController",
255
- protocol: "unsupported" as unknown as "http",
256
- connection: { host: "https://example.com" },
257
- application: { } as unknown as IAgenticaController.IHttp["application"],
258
- };
259
-
260
- expect(() => getOperations({ controllers: [mockController], naming: (func, idx) => `_${idx}_${func}` })).toThrow("Unsupported protocol: unsupported");
261
- });
262
- });
263
-
264
- describe("toHttpOperations", () => {
265
- it("should convert http controller to operations", () => {
266
- const mockController = createMockHttpController("httpController", [
267
- createMockHttpFunction("function1", "get", "/api/function1"),
268
- createMockHttpFunction("function2", "post", "/api/function2"),
269
- ]);
270
-
271
- const result = toHttpOperations({ controller: mockController, index: 0, naming: (func, idx) => `_${idx}_${func}` });
272
-
273
- expect(result).toHaveLength(2);
274
- expect(result[0]?.protocol).toBe("http");
275
- expect(result[0]?.name).toBe("_0_function1");
276
- expect(result[1]?.name).toBe("_0_function2");
277
- });
278
- });
279
-
280
- describe("toClassOperations", () => {
281
- it("should convert class controller to operations", () => {
282
- const mockController = createMockClassController("classController", [
283
- {
284
- name: "function1",
285
- validate: () => ({ success: true, data: {} } as IValidation<unknown>),
286
- parameters: {
287
- type: "object",
288
- properties: {},
289
- additionalProperties: false,
290
- required: [],
291
- $defs: {},
292
- } satisfies ILlmSchema.IParameters,
293
- output: {},
294
- },
295
- ]);
296
-
297
- const result = toClassOperations({ controller: mockController, index: 0, naming: (func, idx) => `_${idx}_${func}` });
298
-
299
- expect(result).toHaveLength(1);
300
- expect(result[0]?.protocol).toBe("class");
301
- expect(result[0]?.name).toBe("_0_function1");
302
- });
303
- });
304
-
305
- describe("toMcpOperations", () => {
306
- it("should convert mcp controller to operations", async () => {
307
- const mockController = await createMockMcpController("mcpController", [
308
- {
309
- name: "function1",
310
- parameters: {
311
- type: "object",
312
- properties: {},
313
- additionalProperties: false,
314
- required: [],
315
- $defs: {},
316
- },
317
- validate: (data: unknown) => ({
318
- success: true,
319
- data,
320
- }),
321
- },
322
- ]);
323
-
324
- const result = toMcpOperations({ controller: mockController, index: 0, naming: (func, idx) => `_${idx}_${func}` });
325
-
326
- expect(result).toHaveLength(1);
327
- expect(result[0]?.protocol).toBe("mcp");
328
- expect(result[0]?.name).toBe("_0_function1");
329
- });
330
- });
331
- describe("divide with invalid capacity", () => {
332
- it("should throw error when capacity is 0", () => {
333
- const array = [1, 2, 3, 4, 5];
334
- const capacity = 0;
335
-
336
- expect(() => divide({ array, capacity })).toThrow("Capacity must be a positive integer");
337
- });
338
-
339
- it("should throw error when capacity is negative", () => {
340
- const array = [1, 2, 3, 4, 5];
341
- const capacity = -3;
342
-
343
- expect(() => divide({ array, capacity })).toThrow("Capacity must be a positive integer");
344
- });
345
-
346
- it("should throw error when capacity is decimal", () => {
347
- const array = [1, 2, 3, 4, 5];
348
- const capacity = 2.5;
349
- const result = divide({ array, capacity });
350
- expect(result).toEqual([[1, 2, 3], [4, 5]]);
351
- });
352
-
353
- it("should throw error when capacity is Infinity", () => {
354
- const array = [1, 2, 3, 4, 5];
355
- const capacity = Infinity;
356
-
357
- expect(() => divide({ array, capacity })).toThrow("Capacity must be a positive integer");
358
- });
359
-
360
- it("should throw error when capacity is NaN", () => {
361
- const array = [1, 2, 3, 4, 5];
362
- const capacity = Number.NaN;
363
-
364
- expect(() => divide({ array, capacity })).toThrow("Capacity must be a positive integer");
365
- });
366
- });
367
-
368
- describe("divide", () => {
369
- it("should divide array into chunks based on capacity", () => {
370
- const array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
371
- const capacity = 3;
372
-
373
- const result = divide({ array, capacity });
374
-
375
- expect(result).toHaveLength(4); // 10 items with capacity 3 should be divided into 4 groups
376
- expect(result[0]).toEqual([1, 2, 3]);
377
- expect(result[1]).toEqual([4, 5, 6]);
378
- expect(result[2]).toEqual([7, 8, 9]);
379
- expect(result[3]).toEqual([10]);
380
- });
381
-
382
- it("should handle empty array", () => {
383
- const array: number[] = [];
384
- const capacity = 3;
385
-
386
- const result = divide({ array, capacity });
387
-
388
- expect(result).toHaveLength(0);
389
- });
390
-
391
- it("should handle array smaller than capacity", () => {
392
- const array = [1, 2];
393
- const capacity = 3;
394
-
395
- const result = divide({ array, capacity });
396
-
397
- expect(result).toHaveLength(1);
398
- expect(result[0]).toEqual([1, 2]);
399
- });
400
- });
401
- });