@llm4ts/core 2.54.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/README.md +1 -1
  2. package/dist/Capability.d.ts +0 -9
  3. package/dist/Capability.d.ts.map +1 -1
  4. package/dist/Capability.js +0 -38
  5. package/dist/Capability.js.map +1 -1
  6. package/dist/Connector.d.ts +2 -3
  7. package/dist/Connector.d.ts.map +1 -1
  8. package/dist/Connector.js +0 -5
  9. package/dist/Connector.js.map +1 -1
  10. package/dist/ConnectorRegistry.d.ts +0 -3
  11. package/dist/ConnectorRegistry.d.ts.map +1 -1
  12. package/dist/ConnectorRegistry.js +0 -3
  13. package/dist/ConnectorRegistry.js.map +1 -1
  14. package/dist/HttpClient.d.ts +0 -2
  15. package/dist/HttpClient.d.ts.map +1 -1
  16. package/dist/HttpClient.js +0 -2
  17. package/dist/HttpClient.js.map +1 -1
  18. package/dist/LlmService.d.ts +1 -2
  19. package/dist/LlmService.d.ts.map +1 -1
  20. package/dist/LlmService.js.map +1 -1
  21. package/dist/Models.d.ts +0 -21
  22. package/dist/Models.d.ts.map +1 -1
  23. package/dist/Models.js +0 -19
  24. package/dist/Models.js.map +1 -1
  25. package/dist/Streaming.d.ts +4 -11
  26. package/dist/Streaming.d.ts.map +1 -1
  27. package/dist/Streaming.js +2 -29
  28. package/dist/Streaming.js.map +1 -1
  29. package/dist/providers/AnthropicModels.d.ts +0 -43
  30. package/dist/providers/AnthropicModels.d.ts.map +1 -1
  31. package/dist/providers/AnthropicModels.js +0 -39
  32. package/dist/providers/AnthropicModels.js.map +1 -1
  33. package/dist/providers/AnthropicProvider.d.ts +2 -3
  34. package/dist/providers/AnthropicProvider.d.ts.map +1 -1
  35. package/dist/providers/AnthropicProvider.js +2 -49
  36. package/dist/providers/AnthropicProvider.js.map +1 -1
  37. package/dist/providers/GeminiApiProvider.d.ts +2 -3
  38. package/dist/providers/GeminiApiProvider.d.ts.map +1 -1
  39. package/dist/providers/GeminiApiProvider.js +2 -44
  40. package/dist/providers/GeminiApiProvider.js.map +1 -1
  41. package/dist/providers/GeminiModels.d.ts +0 -48
  42. package/dist/providers/GeminiModels.d.ts.map +1 -1
  43. package/dist/providers/GeminiModels.js +0 -40
  44. package/dist/providers/GeminiModels.js.map +1 -1
  45. package/dist/providers/LmStudioProvider.d.ts.map +1 -1
  46. package/dist/providers/LmStudioProvider.js +1 -4
  47. package/dist/providers/LmStudioProvider.js.map +1 -1
  48. package/dist/providers/MlxLmProvider.d.ts.map +1 -1
  49. package/dist/providers/MlxLmProvider.js +1 -2
  50. package/dist/providers/MlxLmProvider.js.map +1 -1
  51. package/dist/providers/MockProvider.d.ts.map +1 -1
  52. package/dist/providers/MockProvider.js +1 -6
  53. package/dist/providers/MockProvider.js.map +1 -1
  54. package/dist/providers/OllamaProvider.d.ts.map +1 -1
  55. package/dist/providers/OllamaProvider.js +1 -4
  56. package/dist/providers/OllamaProvider.js.map +1 -1
  57. package/dist/providers/OpenAIModels.d.ts +0 -58
  58. package/dist/providers/OpenAIModels.d.ts.map +1 -1
  59. package/dist/providers/OpenAIModels.js +0 -51
  60. package/dist/providers/OpenAIModels.js.map +1 -1
  61. package/dist/providers/OpenAIProvider.d.ts +2 -3
  62. package/dist/providers/OpenAIProvider.d.ts.map +1 -1
  63. package/dist/providers/OpenAIProvider.js +2 -46
  64. package/dist/providers/OpenAIProvider.js.map +1 -1
  65. package/package.json +2 -14
  66. package/src/Capability.ts +0 -50
  67. package/src/Connector.ts +2 -20
  68. package/src/ConnectorRegistry.ts +0 -15
  69. package/src/HttpClient.ts +0 -15
  70. package/src/LlmService.ts +1 -13
  71. package/src/Models.ts +0 -22
  72. package/src/Streaming.ts +3 -99
  73. package/src/providers/AnthropicModels.ts +0 -47
  74. package/src/providers/AnthropicProvider.ts +1 -87
  75. package/src/providers/GeminiApiProvider.ts +2 -83
  76. package/src/providers/GeminiModels.ts +0 -46
  77. package/src/providers/LmStudioProvider.ts +1 -7
  78. package/src/providers/MlxLmProvider.ts +1 -3
  79. package/src/providers/MockProvider.ts +0 -9
  80. package/src/providers/OllamaProvider.ts +1 -7
  81. package/src/providers/OpenAIModels.ts +0 -64
  82. package/src/providers/OpenAIProvider.ts +2 -83
  83. package/dist/ContextManagement.d.ts +0 -78
  84. package/dist/ContextManagement.d.ts.map +0 -1
  85. package/dist/ContextManagement.js +0 -222
  86. package/dist/ContextManagement.js.map +0 -1
  87. package/dist/Conversation.d.ts +0 -18
  88. package/dist/Conversation.d.ts.map +0 -1
  89. package/dist/Conversation.js +0 -17
  90. package/dist/Conversation.js.map +0 -1
  91. package/dist/RateLimiter.d.ts +0 -44
  92. package/dist/RateLimiter.d.ts.map +0 -1
  93. package/dist/RateLimiter.js +0 -155
  94. package/dist/RateLimiter.js.map +0 -1
  95. package/dist/observability/MeteredLlmService.d.ts +0 -16
  96. package/dist/observability/MeteredLlmService.d.ts.map +0 -1
  97. package/dist/observability/MeteredLlmService.js +0 -72
  98. package/dist/observability/MeteredLlmService.js.map +0 -1
  99. package/dist/observability/Metrics.d.ts +0 -76
  100. package/dist/observability/Metrics.d.ts.map +0 -1
  101. package/dist/observability/Metrics.js +0 -152
  102. package/dist/observability/Metrics.js.map +0 -1
  103. package/dist/observability/StructuredLogger.d.ts +0 -31
  104. package/dist/observability/StructuredLogger.d.ts.map +0 -1
  105. package/dist/observability/StructuredLogger.js +0 -39
  106. package/dist/observability/StructuredLogger.js.map +0 -1
  107. package/dist/observability/Tracing.d.ts +0 -38
  108. package/dist/observability/Tracing.d.ts.map +0 -1
  109. package/dist/observability/Tracing.js +0 -80
  110. package/dist/observability/Tracing.js.map +0 -1
  111. package/dist/providers/OpenCodeModels.d.ts +0 -61
  112. package/dist/providers/OpenCodeModels.d.ts.map +0 -1
  113. package/dist/providers/OpenCodeModels.js +0 -53
  114. package/dist/providers/OpenCodeModels.js.map +0 -1
  115. package/dist/providers/OpenCodeProvider.d.ts +0 -10
  116. package/dist/providers/OpenCodeProvider.d.ts.map +0 -1
  117. package/dist/providers/OpenCodeProvider.js +0 -154
  118. package/dist/providers/OpenCodeProvider.js.map +0 -1
  119. package/dist/tools/Tool.d.ts +0 -83
  120. package/dist/tools/Tool.d.ts.map +0 -1
  121. package/dist/tools/Tool.js +0 -278
  122. package/dist/tools/Tool.js.map +0 -1
  123. package/dist/tools/ToolCallingExecutor.d.ts +0 -18
  124. package/dist/tools/ToolCallingExecutor.d.ts.map +0 -1
  125. package/dist/tools/ToolCallingExecutor.js +0 -64
  126. package/dist/tools/ToolCallingExecutor.js.map +0 -1
  127. package/dist/tools/ToolRegistry.d.ts +0 -45
  128. package/dist/tools/ToolRegistry.d.ts.map +0 -1
  129. package/dist/tools/ToolRegistry.js +0 -133
  130. package/dist/tools/ToolRegistry.js.map +0 -1
  131. package/src/ContextManagement.ts +0 -367
  132. package/src/Conversation.ts +0 -21
  133. package/src/RateLimiter.ts +0 -238
  134. package/src/observability/MeteredLlmService.ts +0 -168
  135. package/src/observability/Metrics.ts +0 -200
  136. package/src/observability/StructuredLogger.ts +0 -67
  137. package/src/observability/Tracing.ts +0 -146
  138. package/src/providers/OpenCodeModels.ts +0 -60
  139. package/src/providers/OpenCodeProvider.ts +0 -278
  140. package/src/tools/Tool.ts +0 -376
  141. package/src/tools/ToolCallingExecutor.ts +0 -106
  142. package/src/tools/ToolRegistry.ts +0 -224
@@ -1,154 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import * as Redacted from "effect/Redacted";
3
- import * as Schema from "effect/Schema";
4
- import * as Stream from "effect/Stream";
5
- import { makeApiConnector } from "../Connector.js";
6
- import { AuthenticationError, ConfigError, InvalidRequestError, ParseError } from "../Errors.js";
7
- import { ConnectorIds, LlmChunk, TokenUsage } from "../Models.js";
8
- import { parseFromText } from "../StructuredOutput.js";
9
- import { OpenCodeCompletionRequest, OpenCodeCompletionResponse, OpenCodeJsonSchemaSpec, OpenCodeMessage, OpenCodeResponseFormat } from "./OpenCodeModels.js";
10
- const roleName = (role) => {
11
- switch (role) {
12
- case "System":
13
- return "system";
14
- case "User":
15
- return "user";
16
- case "Assistant":
17
- return "assistant";
18
- case "Tool":
19
- return "tool";
20
- }
21
- };
22
- export const openCodeHistory = (messages) => messages.map((message) => OpenCodeMessage.make({
23
- role: roleName(message.role),
24
- content: message.content
25
- }));
26
- const usage = (response) => response.usage === undefined
27
- ? undefined
28
- : TokenUsage.make({
29
- prompt: response.usage.prompt_tokens ?? 0,
30
- completion: response.usage.completion_tokens ?? 0,
31
- total: response.usage.total_tokens ?? 0
32
- });
33
- const metadata = (config, response) => ({
34
- provider: "opencode",
35
- model: config.model,
36
- ...(response.id === undefined ? {} : { id: response.id }),
37
- ...(response.model === undefined ? {} : { response_model: response.model })
38
- });
39
- const decodeResponse = (raw, context) => Schema.decodeUnknownEffect(Schema.fromJsonString(OpenCodeCompletionResponse))(raw).pipe(Effect.mapError((error) => ParseError.make({
40
- message: `${context}: ${String(error)}`,
41
- raw
42
- })));
43
- const toChunk = (config, response) => {
44
- const choice = response.choices[0];
45
- const delta = choice?.delta?.content ?? choice?.message?.content ?? choice?.text ?? "";
46
- const finishReason = choice?.finish_reason ?? undefined;
47
- const tokenUsage = usage(response);
48
- return LlmChunk.make({
49
- delta,
50
- metadata: metadata(config, response),
51
- ...(finishReason === undefined || finishReason === null ? {} : { finishReason }),
52
- ...(tokenUsage === undefined ? {} : { usage: tokenUsage })
53
- });
54
- };
55
- export const parseOpenCodeSseBody = Effect.fn("@llm4ts/core/OpenCodeProvider.parseSseBody")(function* (config, raw) {
56
- const payloads = raw
57
- .split(/\r?\n/)
58
- .map((line) => line.trim())
59
- .filter((line) => line.startsWith("data:"))
60
- .map((line) => line.slice("data:".length).trim())
61
- .filter((payload) => payload.length > 0 && payload !== "[DONE]");
62
- const chunks = yield* Effect.forEach(payloads, (payload) => Effect.map(decodeResponse(payload, "Failed to parse OpenCode SSE payload"), (response) => toChunk(config, response)));
63
- return chunks.length === 0
64
- ? yield* Effect.fail(ParseError.make({
65
- message: "No stream chunks parsed from OpenCode SSE response",
66
- raw
67
- }))
68
- : chunks;
69
- });
70
- export const makeOpenCodeProvider = (config, httpClient) => {
71
- const requiredConfig = config.baseUrl === undefined
72
- ? Effect.fail(ConfigError.make({
73
- message: "Missing baseUrl for OpenCode provider"
74
- }))
75
- : config.apiKey === undefined
76
- ? Effect.fail(AuthenticationError.make({
77
- message: "Missing API key for OpenCode provider (pass apiKey in the connector config)"
78
- }))
79
- : Effect.succeed({
80
- baseUrl: config.baseUrl.replace(/\/+$/, ""),
81
- apiKey: Redacted.value(config.apiKey)
82
- });
83
- const request = (messages, stream, responseFormat) => OpenCodeCompletionRequest.make({
84
- model: config.model,
85
- messages,
86
- temperature: config.temperature ?? 0.7,
87
- stream,
88
- ...(config.maxTokens === undefined ? {} : { max_tokens: config.maxTokens }),
89
- ...(responseFormat === undefined ? {} : { response_format: responseFormat })
90
- });
91
- const post = (messages, stream, responseFormat) => Effect.flatMap(requiredConfig, ({ apiKey, baseUrl }) => httpClient.postJson(`${baseUrl}/chat/completions`, JSON.stringify(request(messages, stream, responseFormat)), {
92
- Authorization: `Bearer ${apiKey}`
93
- }, config.timeout));
94
- const executeResponse = (messages, responseFormat) => Effect.gen(function* () {
95
- const raw = yield* post(messages, false, responseFormat);
96
- const response = yield* decodeResponse(raw, "Failed to decode OpenCode response");
97
- return [response, raw];
98
- });
99
- const responseContent = (response, raw) => {
100
- const content = (response.choices[0]?.message?.content ?? response.choices[0]?.text)?.trim();
101
- return content === undefined || content === null || content.length === 0
102
- ? Effect.fail(ParseError.make({
103
- message: "OpenCode response missing choices[0].message.content",
104
- raw
105
- }))
106
- : Effect.succeed(content);
107
- };
108
- const executeStructuredWithUsage = (prompt, schema, jsonSchema) => Effect.gen(function* () {
109
- const responseFormat = OpenCodeResponseFormat.make({
110
- type: "json_schema",
111
- json_schema: OpenCodeJsonSchemaSpec.make({
112
- name: "response",
113
- schema: jsonSchema
114
- })
115
- });
116
- const [response, raw] = yield* executeResponse([
117
- OpenCodeMessage.make({
118
- role: "user",
119
- content: prompt
120
- })
121
- ], responseFormat);
122
- const content = yield* responseContent(response, raw);
123
- const value = yield* parseFromText(content, schema, jsonSchema);
124
- const result = [value, undefined, undefined];
125
- return result;
126
- });
127
- const stream = (messages) => Stream.flatMap(Stream.fromEffect(Effect.flatMap(post(messages, true), (raw) => parseOpenCodeSseBody(config, raw))), Stream.fromIterable);
128
- const isAvailable = config.baseUrl === undefined || config.apiKey === undefined
129
- ? Effect.succeed(false)
130
- : httpClient
131
- .get(`${config.baseUrl.replace(/\/+$/, "")}/models`, {
132
- Authorization: `Bearer ${Redacted.value(config.apiKey)}`
133
- }, config.timeout)
134
- .pipe(Effect.match({
135
- onFailure: () => false,
136
- onSuccess: () => true
137
- }));
138
- return makeApiConnector({
139
- id: ConnectorIds.OpenCode,
140
- executeStream: (prompt) => stream([
141
- OpenCodeMessage.make({
142
- role: "user",
143
- content: prompt
144
- })
145
- ]),
146
- executeStreamWithHistory: (messages) => stream(openCodeHistory(messages)),
147
- executeWithTools: () => Effect.fail(InvalidRequestError.make({
148
- message: "OpenCode provider does not yet support tool calling in this implementation"
149
- })),
150
- executeStructuredWithUsage,
151
- isAvailable
152
- });
153
- };
154
- //# sourceMappingURL=OpenCodeProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OpenCodeProvider.js","sourceRoot":"","sources":["../../src/providers/OpenCodeProvider.ts"],"names":[],"mappings":"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"}
@@ -1,83 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import * as Schema from "effect/Schema";
3
- import { type Capability } from "../Capability.ts";
4
- import { ToolDefinition, type JsonSchema, type LlmProvider } from "../Models.ts";
5
- import { type JsonValue } from "../providers/CliSupport.ts";
6
- declare const InvalidToolSchema_base: Schema.Class<InvalidToolSchema, Schema.TaggedStruct<"InvalidSchema", {
7
- readonly message: Schema.String;
8
- }>, import("effect/Cause").YieldableError>;
9
- export declare class InvalidToolSchema extends InvalidToolSchema_base {
10
- }
11
- declare const InvalidToolParameters_base: Schema.Class<InvalidToolParameters, Schema.TaggedStruct<"InvalidParameters", {
12
- readonly message: Schema.String;
13
- }>, import("effect/Cause").YieldableError>;
14
- export declare class InvalidToolParameters extends InvalidToolParameters_base {
15
- }
16
- declare const DuplicateToolName_base: Schema.Class<DuplicateToolName, Schema.TaggedStruct<"DuplicateToolName", {
17
- readonly name: Schema.String;
18
- }>, import("effect/Cause").YieldableError>;
19
- export declare class DuplicateToolName extends DuplicateToolName_base {
20
- get message(): string;
21
- }
22
- declare const ToolSandboxViolation_base: Schema.Class<ToolSandboxViolation, Schema.TaggedStruct<"SandboxViolation", {
23
- readonly message: Schema.String;
24
- }>, import("effect/Cause").YieldableError>;
25
- export declare class ToolSandboxViolation extends ToolSandboxViolation_base {
26
- }
27
- declare const ToolExecutionFailed_base: Schema.Class<ToolExecutionFailed, Schema.TaggedStruct<"ExecutionFailed", {
28
- readonly message: Schema.String;
29
- }>, import("effect/Cause").YieldableError>;
30
- export declare class ToolExecutionFailed extends ToolExecutionFailed_base {
31
- }
32
- declare const ToolSchemaGenerationFailed_base: Schema.Class<ToolSchemaGenerationFailed, Schema.TaggedStruct<"SchemaGenerationFailed", {
33
- readonly message: Schema.String;
34
- }>, import("effect/Cause").YieldableError>;
35
- export declare class ToolSchemaGenerationFailed extends ToolSchemaGenerationFailed_base {
36
- }
37
- export declare const ToolExecutionError: Schema.Union<readonly [typeof InvalidToolSchema, typeof InvalidToolParameters, typeof DuplicateToolName, typeof ToolSandboxViolation, typeof ToolExecutionFailed, typeof ToolSchemaGenerationFailed]>;
38
- export type ToolExecutionError = typeof ToolExecutionError.Type;
39
- export declare const ToolSandbox: Schema.Literals<readonly ["WorkspaceReadWrite", "WorkspaceReadOnly", "Unrestricted"]>;
40
- export type ToolSandbox = typeof ToolSandbox.Type;
41
- declare const ToolDescriptor_base: Schema.Class<ToolDescriptor, Schema.Struct<{
42
- readonly name: Schema.String;
43
- readonly description: Schema.String;
44
- readonly parameters: Schema.$Record<Schema.String, Schema.Codec<Schema.Json, Schema.Json, never, never>>;
45
- readonly tags: Schema.withConstructorDefault<Schema.$ReadonlySet<Schema.String>>;
46
- readonly sandbox: Schema.withConstructorDefault<Schema.Literals<readonly ["WorkspaceReadWrite", "WorkspaceReadOnly", "Unrestricted"]>>;
47
- readonly requires: Schema.withConstructorDefault<Schema.$Array<Schema.Union<readonly [typeof import("../Capability.ts").GitRead, typeof import("../Capability.ts").GitWrite, typeof import("../Capability.ts").GitPush, typeof import("../Capability.ts").GhRead, typeof import("../Capability.ts").GhWrite, typeof import("../Capability.ts").AdoRead, typeof import("../Capability.ts").AdoWrite, typeof import("../Capability.ts").BasecampRead, typeof import("../Capability.ts").BasecampWrite, typeof import("../Capability.ts").Exec, typeof import("../Capability.ts").UseCoder, typeof import("../Capability.ts").UseReasoning, typeof import("../Capability.ts").Declassify]>>>;
48
- }>, {}>;
49
- export declare class ToolDescriptor extends ToolDescriptor_base {
50
- }
51
- export interface Tool {
52
- readonly name: string;
53
- readonly description: string;
54
- readonly parameters: JsonSchema;
55
- readonly execute: (parameters: JsonValue) => Effect.Effect<JsonValue, ToolExecutionError>;
56
- readonly tags: ReadonlySet<string>;
57
- readonly sandbox: ToolSandbox;
58
- readonly requires: ReadonlyArray<Capability>;
59
- }
60
- export interface ToolOptions {
61
- readonly name: string;
62
- readonly description: string;
63
- readonly parameters: JsonSchema;
64
- readonly execute: Tool["execute"];
65
- readonly tags?: Iterable<string>;
66
- readonly sandbox?: ToolSandbox;
67
- readonly requires?: ReadonlyArray<Capability>;
68
- }
69
- export declare const makeTool: (options: ToolOptions) => Tool;
70
- export declare const toolDefinition: (tool: Tool) => ToolDefinition;
71
- export declare const schemaFromMethodSignature: (signature: string) => Effect.Effect<JsonSchema, ToolSchemaGenerationFailed>;
72
- export declare const toolFromMethodSignature: (options: Omit<ToolOptions, "parameters"> & {
73
- readonly signature: string;
74
- }) => Effect.Effect<Tool, ToolSchemaGenerationFailed, never>;
75
- export declare const validateToolParameters: (schema: {
76
- readonly [x: string]: Schema.Json;
77
- }, parameters: Schema.Json) => Effect.Effect<void, InvalidToolSchema | InvalidToolParameters | DuplicateToolName | ToolSandboxViolation | ToolExecutionFailed | ToolSchemaGenerationFailed, never>;
78
- export declare const toolsToOpenAI: (tools: ReadonlyArray<Tool>) => JsonValue;
79
- export declare const toolsToAnthropic: (tools: ReadonlyArray<Tool>) => JsonValue;
80
- export declare const toolsToGemini: (tools: ReadonlyArray<Tool>) => JsonValue;
81
- export declare const toolsToProviderFormat: (provider: LlmProvider, tools: ReadonlyArray<Tool>) => JsonValue;
82
- export {};
83
- //# sourceMappingURL=Tool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tool.d.ts","sourceRoot":"","sources":["../../src/tools/Tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAkC,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AAChF,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,4BAA4B,CAAA;;;;AAEnC,qBAAa,iBAAkB,SAAQ,sBAErC;CAAG;;;;AAEL,qBAAa,qBAAsB,SAAQ,0BAK1C;CAAG;;;;AAEJ,qBAAa,iBAAkB,SAAQ,sBAKtC;IACC,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;;;;AAED,qBAAa,oBAAqB,SAAQ,yBAKzC;CAAG;;;;AAEJ,qBAAa,mBAAoB,SAAQ,wBAKxC;CAAG;;;;AAEJ,qBAAa,0BAA2B,SAAQ,+BAK/C;CAAG;AAEJ,eAAO,MAAM,kBAAkB,uMAO7B,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC,IAAI,CAAA;AAE/D,eAAO,MAAM,WAAW,uFAItB,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAA;;;;;;;;;AAEjD,qBAAa,cAAe,SAAQ,mBAWlC;CAAG;AAEL,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAA;IACzF,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAClC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;IAC7B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;CAC7C;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAA;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;CAC9C;AAED,eAAO,MAAM,QAAQ,GAAI,SAAS,WAAW,KAAG,IAQ9C,CAAA;AAEF,eAAO,MAAM,cAAc,GAAI,MAAM,IAAI,KAAG,cAKxC,CAAA;AAsGJ,eAAO,MAAM,yBAAyB,GACpC,WAAW,MAAM,KAChB,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,0BAA0B,CAoCtD,CAAA;AAED,eAAO,MAAM,uBAAuB;wBAGV,MAAM;4DAS/B,CAAA;AAqBD,eAAO,MAAM,sBAAsB;;kMAuClC,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,OAAO,aAAa,CAAC,IAAI,CAAC,KAAG,SAQtD,CAAA;AAEL,eAAO,MAAM,gBAAgB,GAAI,OAAO,aAAa,CAAC,IAAI,CAAC,KAAG,SAKzD,CAAA;AAEL,eAAO,MAAM,aAAa,GAAI,OAAO,aAAa,CAAC,IAAI,CAAC,KAAG,SAMzD,CAAA;AAEF,eAAO,MAAM,qBAAqB,GAChC,UAAU,WAAW,EACrB,OAAO,aAAa,CAAC,IAAI,CAAC,KACzB,SAWF,CAAA"}
@@ -1,278 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import * as Schema from "effect/Schema";
3
- import { Capability as CapabilitySchema } from "../Capability.js";
4
- import { ToolDefinition } from "../Models.js";
5
- import { isJsonRecord, jsonArray, jsonField, jsonStringField } from "../providers/CliSupport.js";
6
- export class InvalidToolSchema extends Schema.TaggedError()("InvalidSchema", {
7
- message: Schema.String
8
- }) {
9
- }
10
- export class InvalidToolParameters extends Schema.TaggedError()("InvalidParameters", {
11
- message: Schema.String
12
- }) {
13
- }
14
- export class DuplicateToolName extends Schema.TaggedError()("DuplicateToolName", {
15
- name: Schema.String
16
- }) {
17
- get message() {
18
- return `Tool already registered: ${this.name}`;
19
- }
20
- }
21
- export class ToolSandboxViolation extends Schema.TaggedError()("SandboxViolation", {
22
- message: Schema.String
23
- }) {
24
- }
25
- export class ToolExecutionFailed extends Schema.TaggedError()("ExecutionFailed", {
26
- message: Schema.String
27
- }) {
28
- }
29
- export class ToolSchemaGenerationFailed extends Schema.TaggedError()("SchemaGenerationFailed", {
30
- message: Schema.String
31
- }) {
32
- }
33
- export const ToolExecutionError = Schema.Union([
34
- InvalidToolSchema,
35
- InvalidToolParameters,
36
- DuplicateToolName,
37
- ToolSandboxViolation,
38
- ToolExecutionFailed,
39
- ToolSchemaGenerationFailed
40
- ]);
41
- export const ToolSandbox = Schema.Literals([
42
- "WorkspaceReadWrite",
43
- "WorkspaceReadOnly",
44
- "Unrestricted"
45
- ]);
46
- export class ToolDescriptor extends Schema.Class("ToolDescriptor")({
47
- name: Schema.String,
48
- description: Schema.String,
49
- parameters: Schema.Record(Schema.String, Schema.Json),
50
- tags: Schema.ReadonlySet(Schema.String).pipe(Schema.withConstructorDefault(Effect.succeed(new Set()))),
51
- sandbox: ToolSandbox.pipe(Schema.withConstructorDefault(Effect.succeed("WorkspaceReadWrite"))),
52
- requires: Schema.Array(CapabilitySchema).pipe(Schema.withConstructorDefault(Effect.succeed(Object.freeze([]))))
53
- }) {
54
- }
55
- export const makeTool = (options) => ({
56
- name: options.name,
57
- description: options.description,
58
- parameters: options.parameters,
59
- execute: options.execute,
60
- tags: new Set(options.tags ?? []),
61
- sandbox: options.sandbox ?? "WorkspaceReadWrite",
62
- requires: options.requires ?? []
63
- });
64
- export const toolDefinition = (tool) => ToolDefinition.make({
65
- name: tool.name,
66
- description: tool.description,
67
- parameters: tool.parameters
68
- });
69
- const splitParameters = (raw) => {
70
- const parameters = [];
71
- let start = 0;
72
- let depth = 0;
73
- for (let index = 0; index < raw.length; index += 1) {
74
- const character = raw.charAt(index);
75
- if (character === "[" || character === "<" || character === "(") {
76
- depth += 1;
77
- }
78
- else if (character === "]" || character === ">" || character === ")") {
79
- depth -= 1;
80
- }
81
- else if (character === "," && depth === 0) {
82
- parameters.push(raw.slice(start, index).trim());
83
- start = index + 1;
84
- }
85
- }
86
- const last = raw.slice(start).trim();
87
- return last.length === 0 ? parameters : [...parameters, last];
88
- };
89
- const parseParameter = (raw) => {
90
- const match = /^(?:readonly\s+)?([A-Za-z_$][\w$]*)(\?)?\s*:\s*(.+?)(?:\s*=\s*.+)?$/.exec(raw);
91
- const name = match?.[1];
92
- const type = match?.[3]?.trim();
93
- if (name === undefined || type === undefined) {
94
- return undefined;
95
- }
96
- const optional = match?.[2] === "?" || raw.includes("=") || /^(?:Option|Optional)[[<]/.test(type);
97
- return {
98
- name,
99
- type,
100
- required: !optional
101
- };
102
- };
103
- const genericInner = (type, names) => {
104
- for (const name of names) {
105
- const squarePrefix = `${name}[`;
106
- const anglePrefix = `${name}<`;
107
- if (type.startsWith(squarePrefix) && type.endsWith("]")) {
108
- return type.slice(squarePrefix.length, -1).trim();
109
- }
110
- if (type.startsWith(anglePrefix) && type.endsWith(">")) {
111
- return type.slice(anglePrefix.length, -1).trim();
112
- }
113
- }
114
- return undefined;
115
- };
116
- const schemaForType = (rawType) => {
117
- const type = rawType.trim();
118
- switch (type) {
119
- case "String":
120
- case "string":
121
- return { type: "string" };
122
- case "Boolean":
123
- case "boolean":
124
- return { type: "boolean" };
125
- case "Int":
126
- case "Long":
127
- case "Short":
128
- case "Byte":
129
- case "BigInt":
130
- case "int":
131
- case "integer":
132
- return { type: "integer" };
133
- case "Double":
134
- case "Float":
135
- case "BigDecimal":
136
- case "number":
137
- return { type: "number" };
138
- }
139
- const optional = genericInner(type, ["Option", "Optional"]);
140
- if (optional !== undefined) {
141
- return schemaForType(optional);
142
- }
143
- const array = genericInner(type, ["List", "Seq", "Vector", "Set", "Array", "ReadonlyArray"]);
144
- if (array !== undefined) {
145
- return {
146
- type: "array",
147
- items: schemaForType(array)
148
- };
149
- }
150
- const map = genericInner(type, ["Map", "Record"]);
151
- if (map !== undefined) {
152
- const parts = splitParameters(map);
153
- return {
154
- type: "object",
155
- additionalProperties: schemaForType(parts.at(-1) ?? "object")
156
- };
157
- }
158
- return { type: "object" };
159
- };
160
- export const schemaFromMethodSignature = (signature) => {
161
- const parametersText = signature.match(/(?:def|function)?\s*[A-Za-z_$][\w$]*\s*\((.*)\)\s*(?::.*)?$/)?.[1];
162
- if (parametersText === undefined) {
163
- return Effect.fail(ToolSchemaGenerationFailed.make({
164
- message: "Unsupported signature. Expected a method declaration or definition"
165
- }));
166
- }
167
- const parameters = splitParameters(parametersText).map(parseParameter);
168
- if (parameters.some((parameter) => parameter === undefined)) {
169
- return Effect.fail(ToolSchemaGenerationFailed.make({
170
- message: "Failed to parse one or more method parameters"
171
- }));
172
- }
173
- const properties = {};
174
- const required = [];
175
- for (const parameter of parameters) {
176
- if (parameter !== undefined) {
177
- properties[parameter.name] = schemaForType(parameter.type);
178
- if (parameter.required) {
179
- required.push(parameter.name);
180
- }
181
- }
182
- }
183
- return Effect.succeed({
184
- type: "object",
185
- properties,
186
- required,
187
- additionalProperties: false
188
- });
189
- };
190
- export const toolFromMethodSignature = Effect.fn("@llm4ts/core/tools/Tool.fromMethodSignature")(function* (options) {
191
- const parameters = yield* schemaFromMethodSignature(options.signature);
192
- return makeTool({
193
- ...options,
194
- parameters
195
- });
196
- });
197
- const valueMatchesType = (value, expected) => {
198
- switch (expected) {
199
- case "string":
200
- return typeof value === "string";
201
- case "boolean":
202
- return typeof value === "boolean";
203
- case "integer":
204
- return typeof value === "number" && Number.isInteger(value);
205
- case "number":
206
- return typeof value === "number";
207
- case "array":
208
- return Array.isArray(value);
209
- case "object":
210
- return isJsonRecord(value);
211
- default:
212
- return true;
213
- }
214
- };
215
- export const validateToolParameters = Effect.fn("@llm4ts/core/tools/Tool.validateParameters")(function* (schema, parameters) {
216
- if (!isJsonRecord(schema)) {
217
- return yield* InvalidToolParameters.make({
218
- message: "Tool schema must be a JSON object"
219
- });
220
- }
221
- if (!isJsonRecord(parameters)) {
222
- return yield* InvalidToolParameters.make({
223
- message: "Tool arguments must be a JSON object"
224
- });
225
- }
226
- const required = jsonArray(jsonField(schema, "required")).flatMap((value) => typeof value === "string" ? [value] : []);
227
- const missing = required.filter((name) => parameters[name] === undefined).sort();
228
- if (missing.length > 0) {
229
- return yield* InvalidToolParameters.make({
230
- message: `Missing required parameters: ${missing.join(", ")}`
231
- });
232
- }
233
- const properties = jsonField(schema, "properties");
234
- for (const [name, value] of Object.entries(parameters)) {
235
- const property = jsonField(properties, name);
236
- if (property !== undefined) {
237
- const expected = jsonStringField(property, "type") ?? "object";
238
- if (!valueMatchesType(value, expected)) {
239
- return yield* InvalidToolParameters.make({
240
- message: `Invalid type for '${name}'. Expected: ${expected}`
241
- });
242
- }
243
- }
244
- }
245
- });
246
- export const toolsToOpenAI = (tools) => tools.map((tool) => ({
247
- type: "function",
248
- function: {
249
- name: tool.name,
250
- description: tool.description,
251
- parameters: tool.parameters
252
- }
253
- }));
254
- export const toolsToAnthropic = (tools) => tools.map((tool) => ({
255
- name: tool.name,
256
- description: tool.description,
257
- input_schema: tool.parameters
258
- }));
259
- export const toolsToGemini = (tools) => ({
260
- functionDeclarations: tools.map((tool) => ({
261
- name: tool.name,
262
- description: tool.description,
263
- parameters: tool.parameters
264
- }))
265
- });
266
- export const toolsToProviderFormat = (provider, tools) => {
267
- switch (provider) {
268
- case "OpenAI":
269
- return toolsToOpenAI(tools);
270
- case "Anthropic":
271
- return toolsToAnthropic(tools);
272
- case "GeminiApi":
273
- return toolsToGemini(tools);
274
- default:
275
- return [];
276
- }
277
- };
278
- //# sourceMappingURL=Tool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tool.js","sourceRoot":"","sources":["../../src/tools/Tool.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import * as Schema from "effect/Schema";
3
- import { InvalidRequestError } from "../Errors.ts";
4
- import type { LlmServiceShape } from "../LlmService.ts";
5
- import { LlmResponse, type ToolCallResponse } from "../Models.ts";
6
- import { type Tool } from "./Tool.ts";
7
- import { type ToolRegistryShape, type ToolResult } from "./ToolRegistry.ts";
8
- declare const ToolLoopConfig_base: Schema.Class<ToolLoopConfig, Schema.Struct<{
9
- readonly maxIterations: Schema.withConstructorDefault<Schema.Int>;
10
- readonly maxDenials: Schema.optionalKey<Schema.Int>;
11
- readonly maxConcurrency: Schema.withConstructorDefault<Schema.Int>;
12
- }>, {}>;
13
- export declare class ToolLoopConfig extends ToolLoopConfig_base {
14
- }
15
- export declare const buildToolFollowUpPrompt: (previousPrompt: string, response: ToolCallResponse, results: ReadonlyArray<ToolResult>) => string;
16
- export declare const runToolCallingLoop: (prompt: string, tools: readonly Tool[], llmService: LlmServiceShape, registry: ToolRegistryShape, config?: ToolLoopConfig | undefined) => Effect.Effect<LlmResponse, import("../Errors.ts").ProviderError | import("../Errors.ts").UsageLimitError | import("../Errors.ts").AuthenticationError | InvalidRequestError | import("../Errors.ts").ParseError | import("../Errors.ts").ToolError | import("../Errors.ts").ConfigError | import("../Errors.ts").RateLimitError | import("../Errors.ts").TimeoutError | import("../Errors.ts").TurnLimitError, never>;
17
- export {};
18
- //# sourceMappingURL=ToolCallingExecutor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ToolCallingExecutor.d.ts","sourceRoot":"","sources":["../../src/tools/ToolCallingExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,mBAAmB,EAAiB,MAAM,cAAc,CAAA;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAEjE,OAAO,EAAkB,KAAK,IAAI,EAAE,MAAM,WAAW,CAAA;AACrD,OAAO,EAAmB,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAA;;;;;;AAE5F,qBAAa,cAAe,SAAQ,mBAIlC;CAAG;AAEL,eAAO,MAAM,uBAAuB,GAClC,gBAAgB,MAAM,EACtB,UAAU,gBAAgB,EAC1B,SAAS,aAAa,CAAC,UAAU,CAAC,KACjC,MAYF,CAAA;AAED,eAAO,MAAM,kBAAkB,kiBAwE9B,CAAA"}
@@ -1,64 +0,0 @@
1
- import * as Effect from "effect/Effect";
2
- import * as Schema from "effect/Schema";
3
- import { InvalidRequestError } from "../Errors.js";
4
- import { LlmResponse } from "../Models.js";
5
- import { jsonText } from "../providers/CliSupport.js";
6
- import { toolDefinition } from "./Tool.js";
7
- import { toolResultValue } from "./ToolRegistry.js";
8
- export class ToolLoopConfig extends Schema.Class("ToolLoopConfig")({
9
- maxIterations: Schema.Int.pipe(Schema.withConstructorDefault(Effect.succeed(8))),
10
- maxDenials: Schema.optionalKey(Schema.Int),
11
- maxConcurrency: Schema.Int.pipe(Schema.withConstructorDefault(Effect.succeed(1)))
12
- }) {
13
- }
14
- export const buildToolFollowUpPrompt = (previousPrompt, response, results) => {
15
- const renderedResults = results
16
- .map((result) => `tool_call_id=${result.toolCallId} result=${jsonText(toolResultValue(result))}`)
17
- .join("\n");
18
- return (`${previousPrompt}\n\n` +
19
- `Assistant requested tool execution with finishReason='${response.finishReason}'.\n` +
20
- `Tool results:\n${renderedResults}\n\n` +
21
- "Continue the task. If no further tools are needed, respond with final user-facing content.\n");
22
- };
23
- export const runToolCallingLoop = Effect.fn("@llm4ts/core/tools/ToolCallingExecutor.run")(function* (prompt, tools, llmService, registry, config = ToolLoopConfig.make({})) {
24
- if (config.maxIterations < 0) {
25
- return yield* InvalidRequestError.make({
26
- message: `Tool loop maxIterations must be non-negative; received ${config.maxIterations}`
27
- });
28
- }
29
- if (config.maxDenials !== undefined && config.maxDenials < 0) {
30
- return yield* InvalidRequestError.make({
31
- message: `Tool loop maxDenials must be non-negative; received ${config.maxDenials}`
32
- });
33
- }
34
- const definitions = tools.map(toolDefinition);
35
- const loop = (currentPrompt, iteration, denials) => {
36
- if (iteration >= config.maxIterations) {
37
- return Effect.fail(InvalidRequestError.make({
38
- message: `Tool call loop reached max iterations (${config.maxIterations})`
39
- }));
40
- }
41
- return Effect.flatMap(llmService.executeWithTools(currentPrompt, definitions), (response) => {
42
- if (response.toolCalls.length === 0) {
43
- return Effect.succeed(LlmResponse.make({
44
- content: response.content ?? "",
45
- metadata: {
46
- finish_reason: response.finishReason,
47
- tool_iterations: String(iteration)
48
- }
49
- }));
50
- }
51
- return Effect.flatMap(registry.executeAll(response.toolCalls, config.maxConcurrency), (results) => {
52
- const totalDenials = denials + results.filter((result) => result.denied).length;
53
- if (config.maxDenials !== undefined && totalDenials >= config.maxDenials) {
54
- return Effect.fail(InvalidRequestError.make({
55
- message: "Tool loop exceeded the capability-denial budget " + `(${config.maxDenials})`
56
- }));
57
- }
58
- return Effect.suspend(() => loop(buildToolFollowUpPrompt(currentPrompt, response, results), iteration + 1, totalDenials));
59
- });
60
- });
61
- };
62
- return yield* loop(prompt, 0, 0);
63
- });
64
- //# sourceMappingURL=ToolCallingExecutor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ToolCallingExecutor.js","sourceRoot":"","sources":["../../src/tools/ToolCallingExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,mBAAmB,EAAiB,MAAM,cAAc,CAAA;AAEjE,OAAO,EAAE,WAAW,EAAyB,MAAM,cAAc,CAAA;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrD,OAAO,EAAE,cAAc,EAAa,MAAM,WAAW,CAAA;AACrD,OAAO,EAAE,eAAe,EAA2C,MAAM,mBAAmB,CAAA;AAE5F,MAAM,OAAO,cAAe,SAAQ,MAAM,CAAC,KAAK,CAAiB,gBAAgB,CAAC,CAAC;IACjF,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAChF,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC;IAC1C,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;CAClF,CAAC;CAAG;AAEL,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,cAAsB,EACtB,QAA0B,EAC1B,OAAkC,EAC1B,EAAE;IACV,MAAM,eAAe,GAAG,OAAO;SAC5B,GAAG,CACF,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,MAAM,CAAC,UAAU,WAAW,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,CAC5F;SACA,IAAI,CAAC,IAAI,CAAC,CAAA;IACb,OAAO,CACL,GAAG,cAAc,MAAM;QACvB,yDAAyD,QAAQ,CAAC,YAAY,MAAM;QACpF,kBAAkB,eAAe,MAAM;QACvC,8FAA8F,CAC/F,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC,4CAA4C,CAAC,CACvF,QAAQ,CAAC,EACP,MAAc,EACd,KAA0B,EAC1B,UAA2B,EAC3B,QAA2B,EAC3B,SAAyB,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;IAEhD,IAAI,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC;YACrC,OAAO,EAAE,0DAA0D,MAAM,CAAC,aAAa,EAAE;SAC1F,CAAC,CAAA;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QAC7D,OAAO,KAAK,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC;YACrC,OAAO,EAAE,uDAAuD,MAAM,CAAC,UAAU,EAAE;SACpF,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IAC7C,MAAM,IAAI,GAAG,CACX,aAAqB,EACrB,SAAiB,EACjB,OAAe,EACuB,EAAE;QACxC,IAAI,SAAS,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACtC,OAAO,MAAM,CAAC,IAAI,CAChB,mBAAmB,CAAC,IAAI,CAAC;gBACvB,OAAO,EAAE,0CAA0C,MAAM,CAAC,aAAa,GAAG;aAC3E,CAAC,CACH,CAAA;QACH,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,aAAa,EAAE,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE;YAC1F,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpC,OAAO,MAAM,CAAC,OAAO,CACnB,WAAW,CAAC,IAAI,CAAC;oBACf,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,EAAE;oBAC/B,QAAQ,EAAE;wBACR,aAAa,EAAE,QAAQ,CAAC,YAAY;wBACpC,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC;qBACnC;iBACF,CAAC,CACH,CAAA;YACH,CAAC;YAED,OAAO,MAAM,CAAC,OAAO,CACnB,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,EAC9D,CAAC,OAAO,EAAE,EAAE;gBACV,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAA;gBAC/E,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,YAAY,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACzE,OAAO,MAAM,CAAC,IAAI,CAChB,mBAAmB,CAAC,IAAI,CAAC;wBACvB,OAAO,EACL,kDAAkD,GAAG,IAAI,MAAM,CAAC,UAAU,GAAG;qBAChF,CAAC,CACH,CAAA;gBACH,CAAC;gBACD,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CACzB,IAAI,CACF,uBAAuB,CAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,EACzD,SAAS,GAAG,CAAC,EACb,YAAY,CACb,CACF,CAAA;YACH,CAAC,CACF,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AAClC,CAAC,CACF,CAAA"}