@llm4ts/core 0.1.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 (284) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +47 -0
  3. package/dist/AgentSession.d.ts +66 -0
  4. package/dist/AgentSession.d.ts.map +1 -0
  5. package/dist/AgentSession.js +53 -0
  6. package/dist/AgentSession.js.map +1 -0
  7. package/dist/Capability.d.ts +101 -0
  8. package/dist/Capability.d.ts.map +1 -0
  9. package/dist/Capability.js +210 -0
  10. package/dist/Capability.js.map +1 -0
  11. package/dist/Connector.d.ts +69 -0
  12. package/dist/Connector.d.ts.map +1 -0
  13. package/dist/Connector.js +86 -0
  14. package/dist/Connector.js.map +1 -0
  15. package/dist/ConnectorConfig.d.ts +70 -0
  16. package/dist/ConnectorConfig.d.ts.map +1 -0
  17. package/dist/ConnectorConfig.js +110 -0
  18. package/dist/ConnectorConfig.js.map +1 -0
  19. package/dist/ConnectorRegistry.d.ts +28 -0
  20. package/dist/ConnectorRegistry.d.ts.map +1 -0
  21. package/dist/ConnectorRegistry.js +87 -0
  22. package/dist/ConnectorRegistry.js.map +1 -0
  23. package/dist/ContextManagement.d.ts +78 -0
  24. package/dist/ContextManagement.d.ts.map +1 -0
  25. package/dist/ContextManagement.js +221 -0
  26. package/dist/ContextManagement.js.map +1 -0
  27. package/dist/Conversation.d.ts +18 -0
  28. package/dist/Conversation.d.ts.map +1 -0
  29. package/dist/Conversation.js +17 -0
  30. package/dist/Conversation.js.map +1 -0
  31. package/dist/Errors.d.ts +64 -0
  32. package/dist/Errors.d.ts.map +1 -0
  33. package/dist/Errors.js +76 -0
  34. package/dist/Errors.js.map +1 -0
  35. package/dist/HttpClient.d.ts +43 -0
  36. package/dist/HttpClient.d.ts.map +1 -0
  37. package/dist/HttpClient.js +99 -0
  38. package/dist/HttpClient.js.map +1 -0
  39. package/dist/LlmService.d.ts +24 -0
  40. package/dist/LlmService.d.ts.map +1 -0
  41. package/dist/LlmService.js +4 -0
  42. package/dist/LlmService.js.map +1 -0
  43. package/dist/Models.d.ts +138 -0
  44. package/dist/Models.d.ts.map +1 -0
  45. package/dist/Models.js +209 -0
  46. package/dist/Models.js.map +1 -0
  47. package/dist/ProcessExecutor.d.ts +57 -0
  48. package/dist/ProcessExecutor.d.ts.map +1 -0
  49. package/dist/ProcessExecutor.js +71 -0
  50. package/dist/ProcessExecutor.js.map +1 -0
  51. package/dist/RateLimiter.d.ts +44 -0
  52. package/dist/RateLimiter.d.ts.map +1 -0
  53. package/dist/RateLimiter.js +155 -0
  54. package/dist/RateLimiter.js.map +1 -0
  55. package/dist/Streaming.d.ts +17 -0
  56. package/dist/Streaming.d.ts.map +1 -0
  57. package/dist/Streaming.js +65 -0
  58. package/dist/Streaming.js.map +1 -0
  59. package/dist/StructuredOutput.d.ts +10 -0
  60. package/dist/StructuredOutput.d.ts.map +1 -0
  61. package/dist/StructuredOutput.js +97 -0
  62. package/dist/StructuredOutput.js.map +1 -0
  63. package/dist/TemporaryFiles.d.ts +20 -0
  64. package/dist/TemporaryFiles.d.ts.map +1 -0
  65. package/dist/TemporaryFiles.js +18 -0
  66. package/dist/TemporaryFiles.js.map +1 -0
  67. package/dist/UsageLimits.d.ts +5 -0
  68. package/dist/UsageLimits.d.ts.map +1 -0
  69. package/dist/UsageLimits.js +187 -0
  70. package/dist/UsageLimits.js.map +1 -0
  71. package/dist/eval/Checks.d.ts +6 -0
  72. package/dist/eval/Checks.d.ts.map +1 -0
  73. package/dist/eval/Checks.js +39 -0
  74. package/dist/eval/Checks.js.map +1 -0
  75. package/dist/eval/Eval.d.ts +57 -0
  76. package/dist/eval/Eval.d.ts.map +1 -0
  77. package/dist/eval/Eval.js +91 -0
  78. package/dist/eval/Eval.js.map +1 -0
  79. package/dist/eval/EvalSuite.d.ts +21 -0
  80. package/dist/eval/EvalSuite.d.ts.map +1 -0
  81. package/dist/eval/EvalSuite.js +30 -0
  82. package/dist/eval/EvalSuite.js.map +1 -0
  83. package/dist/eval/Evaluator.d.ts +10 -0
  84. package/dist/eval/Evaluator.d.ts.map +1 -0
  85. package/dist/eval/Evaluator.js +14 -0
  86. package/dist/eval/Evaluator.js.map +1 -0
  87. package/dist/eval/Judge.d.ts +15 -0
  88. package/dist/eval/Judge.d.ts.map +1 -0
  89. package/dist/eval/Judge.js +73 -0
  90. package/dist/eval/Judge.js.map +1 -0
  91. package/dist/observability/MeteredLlmService.d.ts +16 -0
  92. package/dist/observability/MeteredLlmService.d.ts.map +1 -0
  93. package/dist/observability/MeteredLlmService.js +66 -0
  94. package/dist/observability/MeteredLlmService.js.map +1 -0
  95. package/dist/observability/Metrics.d.ts +71 -0
  96. package/dist/observability/Metrics.d.ts.map +1 -0
  97. package/dist/observability/Metrics.js +147 -0
  98. package/dist/observability/Metrics.js.map +1 -0
  99. package/dist/observability/Redaction.d.ts +8 -0
  100. package/dist/observability/Redaction.d.ts.map +1 -0
  101. package/dist/observability/Redaction.js +38 -0
  102. package/dist/observability/Redaction.js.map +1 -0
  103. package/dist/observability/StreamRecorder.d.ts +9 -0
  104. package/dist/observability/StreamRecorder.d.ts.map +1 -0
  105. package/dist/observability/StreamRecorder.js +10 -0
  106. package/dist/observability/StreamRecorder.js.map +1 -0
  107. package/dist/observability/StructuredLogger.d.ts +31 -0
  108. package/dist/observability/StructuredLogger.d.ts.map +1 -0
  109. package/dist/observability/StructuredLogger.js +34 -0
  110. package/dist/observability/StructuredLogger.js.map +1 -0
  111. package/dist/observability/Tracing.d.ts +38 -0
  112. package/dist/observability/Tracing.d.ts.map +1 -0
  113. package/dist/observability/Tracing.js +75 -0
  114. package/dist/observability/Tracing.js.map +1 -0
  115. package/dist/providers/AnthropicModels.d.ts +95 -0
  116. package/dist/providers/AnthropicModels.d.ts.map +1 -0
  117. package/dist/providers/AnthropicModels.js +83 -0
  118. package/dist/providers/AnthropicModels.js.map +1 -0
  119. package/dist/providers/AnthropicProvider.d.ts +13 -0
  120. package/dist/providers/AnthropicProvider.d.ts.map +1 -0
  121. package/dist/providers/AnthropicProvider.js +177 -0
  122. package/dist/providers/AnthropicProvider.js.map +1 -0
  123. package/dist/providers/AntigravityConnector.d.ts +7 -0
  124. package/dist/providers/AntigravityConnector.d.ts.map +1 -0
  125. package/dist/providers/AntigravityConnector.js +52 -0
  126. package/dist/providers/AntigravityConnector.js.map +1 -0
  127. package/dist/providers/ClaudeAgentSession.d.ts +11 -0
  128. package/dist/providers/ClaudeAgentSession.d.ts.map +1 -0
  129. package/dist/providers/ClaudeAgentSession.js +158 -0
  130. package/dist/providers/ClaudeAgentSession.js.map +1 -0
  131. package/dist/providers/ClaudeCliConnector.d.ts +9 -0
  132. package/dist/providers/ClaudeCliConnector.d.ts.map +1 -0
  133. package/dist/providers/ClaudeCliConnector.js +123 -0
  134. package/dist/providers/ClaudeCliConnector.js.map +1 -0
  135. package/dist/providers/CliSupport.d.ts +21 -0
  136. package/dist/providers/CliSupport.d.ts.map +1 -0
  137. package/dist/providers/CliSupport.js +62 -0
  138. package/dist/providers/CliSupport.js.map +1 -0
  139. package/dist/providers/CodexConnector.d.ts +12 -0
  140. package/dist/providers/CodexConnector.d.ts.map +1 -0
  141. package/dist/providers/CodexConnector.js +175 -0
  142. package/dist/providers/CodexConnector.js.map +1 -0
  143. package/dist/providers/ConnectorFactories.d.ts +15 -0
  144. package/dist/providers/ConnectorFactories.d.ts.map +1 -0
  145. package/dist/providers/ConnectorFactories.js +74 -0
  146. package/dist/providers/ConnectorFactories.js.map +1 -0
  147. package/dist/providers/CopilotConnector.d.ts +6 -0
  148. package/dist/providers/CopilotConnector.d.ts.map +1 -0
  149. package/dist/providers/CopilotConnector.js +35 -0
  150. package/dist/providers/CopilotConnector.js.map +1 -0
  151. package/dist/providers/CursorConnector.d.ts +8 -0
  152. package/dist/providers/CursorConnector.d.ts.map +1 -0
  153. package/dist/providers/CursorConnector.js +82 -0
  154. package/dist/providers/CursorConnector.js.map +1 -0
  155. package/dist/providers/GeminiApiProvider.d.ts +9 -0
  156. package/dist/providers/GeminiApiProvider.d.ts.map +1 -0
  157. package/dist/providers/GeminiApiProvider.js +181 -0
  158. package/dist/providers/GeminiApiProvider.js.map +1 -0
  159. package/dist/providers/GeminiCliProvider.d.ts +106 -0
  160. package/dist/providers/GeminiCliProvider.d.ts.map +1 -0
  161. package/dist/providers/GeminiCliProvider.js +596 -0
  162. package/dist/providers/GeminiCliProvider.js.map +1 -0
  163. package/dist/providers/GeminiModels.d.ts +92 -0
  164. package/dist/providers/GeminiModels.d.ts.map +1 -0
  165. package/dist/providers/GeminiModels.js +80 -0
  166. package/dist/providers/GeminiModels.js.map +1 -0
  167. package/dist/providers/GrokCliConnector.d.ts +8 -0
  168. package/dist/providers/GrokCliConnector.d.ts.map +1 -0
  169. package/dist/providers/GrokCliConnector.js +82 -0
  170. package/dist/providers/GrokCliConnector.js.map +1 -0
  171. package/dist/providers/LmStudioModels.d.ts +114 -0
  172. package/dist/providers/LmStudioModels.d.ts.map +1 -0
  173. package/dist/providers/LmStudioModels.js +102 -0
  174. package/dist/providers/LmStudioModels.js.map +1 -0
  175. package/dist/providers/LmStudioProvider.d.ts +13 -0
  176. package/dist/providers/LmStudioProvider.d.ts.map +1 -0
  177. package/dist/providers/LmStudioProvider.js +158 -0
  178. package/dist/providers/LmStudioProvider.js.map +1 -0
  179. package/dist/providers/MockProvider.d.ts +6 -0
  180. package/dist/providers/MockProvider.d.ts.map +1 -0
  181. package/dist/providers/MockProvider.js +271 -0
  182. package/dist/providers/MockProvider.js.map +1 -0
  183. package/dist/providers/OllamaModels.d.ts +68 -0
  184. package/dist/providers/OllamaModels.d.ts.map +1 -0
  185. package/dist/providers/OllamaModels.js +59 -0
  186. package/dist/providers/OllamaModels.js.map +1 -0
  187. package/dist/providers/OllamaProvider.d.ts +7 -0
  188. package/dist/providers/OllamaProvider.d.ts.map +1 -0
  189. package/dist/providers/OllamaProvider.js +134 -0
  190. package/dist/providers/OllamaProvider.js.map +1 -0
  191. package/dist/providers/OpenAIModels.d.ts +139 -0
  192. package/dist/providers/OpenAIModels.d.ts.map +1 -0
  193. package/dist/providers/OpenAIModels.js +123 -0
  194. package/dist/providers/OpenAIModels.js.map +1 -0
  195. package/dist/providers/OpenAIProvider.d.ts +9 -0
  196. package/dist/providers/OpenAIProvider.d.ts.map +1 -0
  197. package/dist/providers/OpenAIProvider.js +185 -0
  198. package/dist/providers/OpenAIProvider.js.map +1 -0
  199. package/dist/providers/OpenCodeCliConnector.d.ts +8 -0
  200. package/dist/providers/OpenCodeCliConnector.d.ts.map +1 -0
  201. package/dist/providers/OpenCodeCliConnector.js +93 -0
  202. package/dist/providers/OpenCodeCliConnector.js.map +1 -0
  203. package/dist/providers/OpenCodeModels.d.ts +61 -0
  204. package/dist/providers/OpenCodeModels.d.ts.map +1 -0
  205. package/dist/providers/OpenCodeModels.js +53 -0
  206. package/dist/providers/OpenCodeModels.js.map +1 -0
  207. package/dist/providers/OpenCodeProvider.d.ts +10 -0
  208. package/dist/providers/OpenCodeProvider.d.ts.map +1 -0
  209. package/dist/providers/OpenCodeProvider.js +154 -0
  210. package/dist/providers/OpenCodeProvider.js.map +1 -0
  211. package/dist/providers/PiConnector.d.ts +8 -0
  212. package/dist/providers/PiConnector.d.ts.map +1 -0
  213. package/dist/providers/PiConnector.js +99 -0
  214. package/dist/providers/PiConnector.js.map +1 -0
  215. package/dist/tools/Tool.d.ts +83 -0
  216. package/dist/tools/Tool.d.ts.map +1 -0
  217. package/dist/tools/Tool.js +278 -0
  218. package/dist/tools/Tool.js.map +1 -0
  219. package/dist/tools/ToolCallingExecutor.d.ts +18 -0
  220. package/dist/tools/ToolCallingExecutor.d.ts.map +1 -0
  221. package/dist/tools/ToolCallingExecutor.js +64 -0
  222. package/dist/tools/ToolCallingExecutor.js.map +1 -0
  223. package/dist/tools/ToolRegistry.d.ts +45 -0
  224. package/dist/tools/ToolRegistry.d.ts.map +1 -0
  225. package/dist/tools/ToolRegistry.js +133 -0
  226. package/dist/tools/ToolRegistry.js.map +1 -0
  227. package/package.json +105 -0
  228. package/src/.gitkeep +1 -0
  229. package/src/AgentSession.ts +69 -0
  230. package/src/Capability.ts +240 -0
  231. package/src/Connector.ts +220 -0
  232. package/src/ConnectorConfig.ts +146 -0
  233. package/src/ConnectorRegistry.ts +184 -0
  234. package/src/ContextManagement.ts +372 -0
  235. package/src/Conversation.ts +21 -0
  236. package/src/Errors.ts +87 -0
  237. package/src/HttpClient.ts +202 -0
  238. package/src/LlmService.ts +45 -0
  239. package/src/Models.ts +250 -0
  240. package/src/ProcessExecutor.ts +157 -0
  241. package/src/RateLimiter.ts +238 -0
  242. package/src/Streaming.ts +164 -0
  243. package/src/StructuredOutput.ts +138 -0
  244. package/src/TemporaryFiles.ts +51 -0
  245. package/src/UsageLimits.ts +242 -0
  246. package/src/eval/Checks.ts +68 -0
  247. package/src/eval/Eval.ts +112 -0
  248. package/src/eval/EvalSuite.ts +63 -0
  249. package/src/eval/Evaluator.ts +31 -0
  250. package/src/eval/Judge.ts +92 -0
  251. package/src/observability/MeteredLlmService.ts +156 -0
  252. package/src/observability/Metrics.ts +195 -0
  253. package/src/observability/Redaction.ts +55 -0
  254. package/src/observability/StreamRecorder.ts +32 -0
  255. package/src/observability/StructuredLogger.ts +62 -0
  256. package/src/observability/Tracing.ts +141 -0
  257. package/src/providers/AnthropicModels.ts +96 -0
  258. package/src/providers/AnthropicProvider.ts +320 -0
  259. package/src/providers/AntigravityConnector.ts +77 -0
  260. package/src/providers/ClaudeAgentSession.ts +226 -0
  261. package/src/providers/ClaudeCliConnector.ts +201 -0
  262. package/src/providers/CliSupport.ts +100 -0
  263. package/src/providers/CodexConnector.ts +251 -0
  264. package/src/providers/ConnectorFactories.ts +142 -0
  265. package/src/providers/CopilotConnector.ts +47 -0
  266. package/src/providers/CursorConnector.ts +120 -0
  267. package/src/providers/GeminiApiProvider.ts +337 -0
  268. package/src/providers/GeminiCliProvider.ts +793 -0
  269. package/src/providers/GeminiModels.ts +97 -0
  270. package/src/providers/GrokCliConnector.ts +117 -0
  271. package/src/providers/LmStudioModels.ts +117 -0
  272. package/src/providers/LmStudioProvider.ts +260 -0
  273. package/src/providers/MockProvider.ts +322 -0
  274. package/src/providers/OllamaModels.ts +64 -0
  275. package/src/providers/OllamaProvider.ts +236 -0
  276. package/src/providers/OpenAIModels.ts +152 -0
  277. package/src/providers/OpenAIProvider.ts +331 -0
  278. package/src/providers/OpenCodeCliConnector.ts +135 -0
  279. package/src/providers/OpenCodeModels.ts +60 -0
  280. package/src/providers/OpenCodeProvider.ts +278 -0
  281. package/src/providers/PiConnector.ts +142 -0
  282. package/src/tools/Tool.ts +379 -0
  283. package/src/tools/ToolCallingExecutor.ts +106 -0
  284. package/src/tools/ToolRegistry.ts +224 -0
@@ -0,0 +1,86 @@
1
+ import * as Clock from "effect/Clock";
2
+ import * as Duration from "effect/Duration";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Schema from "effect/Schema";
5
+ import { CliSandbox } from "./ConnectorConfig.js";
6
+ import { InvalidRequestError } from "./Errors.js";
7
+ import { ConnectorCapabilities, HealthStatus } from "./Models.js";
8
+ import { parseFromText, withSchemaHint } from "./StructuredOutput.js";
9
+ export class CliContext extends Schema.Class("CliContext")({
10
+ worktreePath: Schema.String,
11
+ repoPath: Schema.String,
12
+ envVars: Schema.Record(Schema.String, Schema.String).pipe(Schema.withConstructorDefault(Effect.succeed(Object.freeze({})))),
13
+ sandbox: Schema.optionalKey(CliSandbox),
14
+ turnLimit: Schema.optionalKey(Schema.Int)
15
+ }) {
16
+ }
17
+ export const apiConnectorCapabilities = () => ConnectorCapabilities.make({});
18
+ export const timedHealthCheck = (isAvailable) => Effect.gen(function* () {
19
+ const startedAt = yield* Clock.currentTimeNanos;
20
+ const available = yield* isAvailable;
21
+ const completedAt = yield* Clock.currentTimeNanos;
22
+ return HealthStatus.make({
23
+ availability: available ? "Healthy" : "Unhealthy",
24
+ authStatus: available ? "Valid" : "Invalid",
25
+ latency: Duration.nanos(completedAt - startedAt)
26
+ });
27
+ });
28
+ export const makeApiConnector = (primitives) => {
29
+ const executeStructured = (prompt, schema, jsonSchema) => Effect.map(primitives.executeStructuredWithUsage(prompt, schema, jsonSchema), ([value]) => value);
30
+ return {
31
+ ...primitives,
32
+ kind: "Api",
33
+ capabilities: primitives.capabilities ?? apiConnectorCapabilities(),
34
+ healthCheck: timedHealthCheck(primitives.isAvailable),
35
+ executeStructured
36
+ };
37
+ };
38
+ export const cliConnectorCapabilities = (interactionSupport) => ConnectorCapabilities.make({
39
+ interactiveSessions: interactionSupport === "InteractiveStdin"
40
+ });
41
+ export const flattenHistory = (messages) => {
42
+ const systemBlock = messages
43
+ .filter((message) => message.role === "System" && message.content.length > 0)
44
+ .map((message) => message.content)
45
+ .join("\n\n");
46
+ const turns = messages
47
+ .filter((message) => message.role !== "System")
48
+ .map((message) => `**${message.role}:** ${message.content}`)
49
+ .join("\n\n");
50
+ return `${systemBlock.length === 0 ? "" : `${systemBlock}\n\n`}${turns}`;
51
+ };
52
+ const cliProbeHealthy = HealthStatus.make({ availability: "Healthy", authStatus: "Valid" });
53
+ const cliProbeUnhealthy = HealthStatus.make({ availability: "Unhealthy", authStatus: "Unknown" });
54
+ export const cliVersionProbeHealthCheck = (probe) => probe.executor
55
+ .run([probe.binary, ...(probe.versionArgs ?? ["--version"])], probe.cwd ?? ".", {})
56
+ .pipe(Effect.as(cliProbeHealthy), Effect.catch(() => Effect.succeed(cliProbeUnhealthy)));
57
+ const unsupportedTools = (id, _prompt, _tools) => Effect.fail(InvalidRequestError.make({
58
+ message: `CLI connector ${id.value} does not support tool calling`
59
+ }));
60
+ export const makeCliConnector = (primitives) => {
61
+ const executeStructured = (prompt, schema, jsonSchema) => Effect.flatMap(primitives.complete(withSchemaHint(prompt, jsonSchema)), (text) => parseFromText(text, schema, jsonSchema));
62
+ const executeStructuredWithUsage = (prompt, schema, jsonSchema) => Effect.map(executeStructured(prompt, schema, jsonSchema), (value) => [
63
+ value,
64
+ undefined,
65
+ undefined
66
+ ]);
67
+ const healthCheck = primitives.healthCheck ??
68
+ (primitives.versionProbe === undefined
69
+ ? Effect.succeed(HealthStatus.make({ availability: "Unknown", authStatus: "Unknown" }))
70
+ : cliVersionProbeHealthCheck(primitives.versionProbe));
71
+ const isAvailable = primitives.isAvailable ??
72
+ healthCheck.pipe(Effect.map((status) => status.availability === "Healthy"), Effect.catch(() => Effect.succeed(false)));
73
+ return {
74
+ ...primitives,
75
+ kind: "Cli",
76
+ capabilities: primitives.capabilities ?? cliConnectorCapabilities(primitives.interactionSupport),
77
+ healthCheck,
78
+ isAvailable,
79
+ executeStream: primitives.completeStream,
80
+ executeStreamWithHistory: (messages) => primitives.completeStream(flattenHistory(messages)),
81
+ executeWithTools: (prompt, tools) => unsupportedTools(primitives.id, prompt, tools),
82
+ executeStructured,
83
+ executeStructuredWithUsage
84
+ };
85
+ };
86
+ //# sourceMappingURL=Connector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Connector.js","sourceRoot":"","sources":["../src/Connector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import * as Schema from "effect/Schema";
2
+ import { ConnectorId, LlmConfig } from "./Models.ts";
3
+ declare const DockerSandbox_base: Schema.Class<DockerSandbox, Schema.TaggedStruct<"Docker", {
4
+ readonly image: Schema.String;
5
+ readonly mount: Schema.withConstructorDefault<Schema.Boolean>;
6
+ readonly network: Schema.optionalKey<Schema.String>;
7
+ }>, {}>;
8
+ export declare class DockerSandbox extends DockerSandbox_base {
9
+ }
10
+ declare const PodmanSandbox_base: Schema.Class<PodmanSandbox, Schema.TaggedStruct<"Podman", {}>, {}>;
11
+ export declare class PodmanSandbox extends PodmanSandbox_base {
12
+ }
13
+ declare const SeatbeltMacOsSandbox_base: Schema.Class<SeatbeltMacOsSandbox, Schema.TaggedStruct<"SeatbeltMacOS", {}>, {}>;
14
+ export declare class SeatbeltMacOsSandbox extends SeatbeltMacOsSandbox_base {
15
+ }
16
+ declare const RunscSandbox_base: Schema.Class<RunscSandbox, Schema.TaggedStruct<"Runsc", {}>, {}>;
17
+ export declare class RunscSandbox extends RunscSandbox_base {
18
+ }
19
+ declare const LxcSandbox_base: Schema.Class<LxcSandbox, Schema.TaggedStruct<"Lxc", {}>, {}>;
20
+ export declare class LxcSandbox extends LxcSandbox_base {
21
+ }
22
+ export declare const CliSandbox: Schema.Union<readonly [typeof DockerSandbox, typeof PodmanSandbox, typeof SeatbeltMacOsSandbox, typeof RunscSandbox, typeof LxcSandbox]>;
23
+ export type CliSandbox = typeof CliSandbox.Type;
24
+ declare const ApiConnectorConfig_base: Schema.Class<ApiConnectorConfig, Schema.TaggedStruct<"ApiConnectorConfig", {
25
+ readonly connectorId: typeof ConnectorId;
26
+ readonly model: Schema.optionalKey<Schema.String>;
27
+ readonly baseUrl: Schema.optionalKey<Schema.String>;
28
+ readonly apiKey: Schema.optionalKey<Schema.Redacted<Schema.String>>;
29
+ readonly timeout: Schema.withConstructorDefault<Schema.Duration>;
30
+ readonly maxRetries: Schema.withConstructorDefault<Schema.Int>;
31
+ readonly requestsPerMinute: Schema.withConstructorDefault<Schema.Int>;
32
+ readonly burstSize: Schema.withConstructorDefault<Schema.Int>;
33
+ readonly acquireTimeout: Schema.withConstructorDefault<Schema.Duration>;
34
+ readonly temperature: Schema.optionalKey<Schema.Number>;
35
+ readonly maxTokens: Schema.optionalKey<Schema.Int>;
36
+ }>, {}>;
37
+ export declare class ApiConnectorConfig extends ApiConnectorConfig_base {
38
+ }
39
+ declare const CliConnectorConfig_base: Schema.Class<CliConnectorConfig, Schema.TaggedStruct<"CliConnectorConfig", {
40
+ readonly connectorId: typeof ConnectorId;
41
+ readonly model: Schema.optionalKey<Schema.String>;
42
+ readonly timeout: Schema.withConstructorDefault<Schema.Duration>;
43
+ readonly maxRetries: Schema.withConstructorDefault<Schema.Int>;
44
+ readonly flags: Schema.withConstructorDefault<Schema.$Record<Schema.String, Schema.String>>;
45
+ readonly sandbox: Schema.optionalKey<Schema.Union<readonly [typeof DockerSandbox, typeof PodmanSandbox, typeof SeatbeltMacOsSandbox, typeof RunscSandbox, typeof LxcSandbox]>>;
46
+ readonly turnLimit: Schema.optionalKey<Schema.Int>;
47
+ readonly envVars: Schema.withConstructorDefault<Schema.$Record<Schema.String, Schema.String>>;
48
+ readonly workingDir: Schema.optionalKey<Schema.String>;
49
+ readonly readOnly: Schema.withConstructorDefault<Schema.Boolean>;
50
+ }>, {}>;
51
+ export declare class CliConnectorConfig extends CliConnectorConfig_base {
52
+ }
53
+ export declare const ConnectorConfig: Schema.Union<readonly [typeof ApiConnectorConfig, typeof CliConnectorConfig]>;
54
+ export type ConnectorConfig = typeof ConnectorConfig.Type;
55
+ export declare const toLlmConfig: (config: ApiConnectorConfig) => LlmConfig;
56
+ declare const FallbackChain_base: Schema.Class<FallbackChain, Schema.Struct<{
57
+ readonly connectors: Schema.withConstructorDefault<Schema.$Array<Schema.Union<readonly [typeof ApiConnectorConfig, typeof CliConnectorConfig]>>>;
58
+ }>, {}>;
59
+ export declare class FallbackChain extends FallbackChain_base {
60
+ get isEmpty(): boolean;
61
+ get nonEmpty(): boolean;
62
+ }
63
+ export declare const emptyFallbackChain: FallbackChain;
64
+ export declare const defaultCliConnectorConfigs: Readonly<{
65
+ Claude: CliConnectorConfig;
66
+ Codex: CliConnectorConfig;
67
+ }>;
68
+ export declare const defaultReasoningConfig: (coder: ConnectorConfig, explicit?: ConnectorConfig) => ConnectorConfig;
69
+ export {};
70
+ //# sourceMappingURL=ConnectorConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectorConfig.d.ts","sourceRoot":"","sources":["../src/ConnectorConfig.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,WAAW,EAAgB,SAAS,EAAoB,MAAM,aAAa,CAAA;;;;;;AAEpF,qBAAa,aAAc,SAAQ,kBAIjC;CAAG;;AAEL,qBAAa,aAAc,SAAQ,kBAAiD;CAAG;;AACvF,qBAAa,oBAAqB,SAAQ,yBAGzC;CAAG;;AACJ,qBAAa,YAAa,SAAQ,iBAA+C;CAAG;;AACpF,qBAAa,UAAW,SAAQ,eAA2C;CAAG;AAE9E,eAAO,MAAM,UAAU,0IAMrB,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;;;;;;;;;;;;;;AAI/C,qBAAa,kBAAmB,SAAQ,uBAuBvC;CAAG;;;;;;;;;;;;;AAEJ,qBAAa,kBAAmB,SAAQ,uBAoBvC;CAAG;AAEJ,eAAO,MAAM,eAAe,+EAAyD,CAAA;AACrF,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;AAmBzD,eAAO,MAAM,WAAW,GAAI,QAAQ,kBAAkB,KAAG,SAarD,CAAA;;;;AAIJ,qBAAa,aAAc,SAAQ,kBAIjC;IACA,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;CACF;AAED,eAAO,MAAM,kBAAkB,eAAsB,CAAA;AAErD,eAAO,MAAM,0BAA0B;;;EAGrC,CAAA;AAEF,eAAO,MAAM,sBAAsB,GACjC,OAAO,eAAe,EACtB,WAAW,eAAe,KACzB,eAOF,CAAA"}
@@ -0,0 +1,110 @@
1
+ import * as Duration from "effect/Duration";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Schema from "effect/Schema";
4
+ import { ConnectorId, ConnectorIds, LlmConfig } from "./Models.js";
5
+ export class DockerSandbox extends Schema.TaggedClass()("Docker", {
6
+ image: Schema.String,
7
+ mount: Schema.Boolean.pipe(Schema.withConstructorDefault(Effect.succeed(true))),
8
+ network: Schema.optionalKey(Schema.String)
9
+ }) {
10
+ }
11
+ export class PodmanSandbox extends Schema.TaggedClass()("Podman", {}) {
12
+ }
13
+ export class SeatbeltMacOsSandbox extends Schema.TaggedClass()("SeatbeltMacOS", {}) {
14
+ }
15
+ export class RunscSandbox extends Schema.TaggedClass()("Runsc", {}) {
16
+ }
17
+ export class LxcSandbox extends Schema.TaggedClass()("Lxc", {}) {
18
+ }
19
+ export const CliSandbox = Schema.Union([
20
+ DockerSandbox,
21
+ PodmanSandbox,
22
+ SeatbeltMacOsSandbox,
23
+ RunscSandbox,
24
+ LxcSandbox
25
+ ]);
26
+ const emptyStringRecord = Object.freeze({});
27
+ export class ApiConnectorConfig extends Schema.TaggedClass()("ApiConnectorConfig", {
28
+ connectorId: ConnectorId,
29
+ model: Schema.optionalKey(Schema.String),
30
+ baseUrl: Schema.optionalKey(Schema.String),
31
+ apiKey: Schema.optionalKey(Schema.Redacted(Schema.String, {
32
+ disallowJsonEncode: true
33
+ })),
34
+ timeout: Schema.Duration.pipe(Schema.withConstructorDefault(Effect.succeed(Duration.seconds(300)))),
35
+ maxRetries: Schema.Int.pipe(Schema.withConstructorDefault(Effect.succeed(3))),
36
+ requestsPerMinute: Schema.Int.pipe(Schema.withConstructorDefault(Effect.succeed(60))),
37
+ burstSize: Schema.Int.pipe(Schema.withConstructorDefault(Effect.succeed(10))),
38
+ acquireTimeout: Schema.Duration.pipe(Schema.withConstructorDefault(Effect.succeed(Duration.seconds(30)))),
39
+ temperature: Schema.optionalKey(Schema.Number),
40
+ maxTokens: Schema.optionalKey(Schema.Int)
41
+ }) {
42
+ }
43
+ export class CliConnectorConfig extends Schema.TaggedClass()("CliConnectorConfig", {
44
+ connectorId: ConnectorId,
45
+ model: Schema.optionalKey(Schema.String),
46
+ timeout: Schema.Duration.pipe(Schema.withConstructorDefault(Effect.succeed(Duration.seconds(300)))),
47
+ maxRetries: Schema.Int.pipe(Schema.withConstructorDefault(Effect.succeed(3))),
48
+ flags: Schema.Record(Schema.String, Schema.String).pipe(Schema.withConstructorDefault(Effect.succeed(emptyStringRecord))),
49
+ sandbox: Schema.optionalKey(CliSandbox),
50
+ turnLimit: Schema.optionalKey(Schema.Int),
51
+ envVars: Schema.Record(Schema.String, Schema.String).pipe(Schema.withConstructorDefault(Effect.succeed(emptyStringRecord))),
52
+ workingDir: Schema.optionalKey(Schema.String),
53
+ readOnly: Schema.Boolean.pipe(Schema.withConstructorDefault(Effect.succeed(false)))
54
+ }) {
55
+ }
56
+ export const ConnectorConfig = Schema.Union([ApiConnectorConfig, CliConnectorConfig]);
57
+ const providerForConnector = (connectorId) => {
58
+ switch (connectorId.value) {
59
+ case "anthropic":
60
+ return "Anthropic";
61
+ case "gemini-api":
62
+ return "GeminiApi";
63
+ case "lm-studio":
64
+ return "LmStudio";
65
+ case "ollama":
66
+ return "Ollama";
67
+ case "mock":
68
+ return "Mock";
69
+ default:
70
+ return "OpenAI";
71
+ }
72
+ };
73
+ export const toLlmConfig = (config) => new LlmConfig({
74
+ provider: providerForConnector(config.connectorId),
75
+ model: config.model ?? "",
76
+ timeout: config.timeout,
77
+ maxRetries: config.maxRetries,
78
+ requestsPerMinute: config.requestsPerMinute,
79
+ burstSize: config.burstSize,
80
+ acquireTimeout: config.acquireTimeout,
81
+ ...(config.baseUrl === undefined ? {} : { baseUrl: config.baseUrl }),
82
+ ...(config.apiKey === undefined ? {} : { apiKey: config.apiKey }),
83
+ ...(config.temperature === undefined ? {} : { temperature: config.temperature }),
84
+ ...(config.maxTokens === undefined ? {} : { maxTokens: config.maxTokens })
85
+ });
86
+ const emptyConnectors = Object.freeze([]);
87
+ export class FallbackChain extends Schema.Class("FallbackChain")({
88
+ connectors: Schema.Array(ConnectorConfig).pipe(Schema.withConstructorDefault(Effect.succeed(emptyConnectors)))
89
+ }) {
90
+ get isEmpty() {
91
+ return this.connectors.length === 0;
92
+ }
93
+ get nonEmpty() {
94
+ return this.connectors.length > 0;
95
+ }
96
+ }
97
+ export const emptyFallbackChain = new FallbackChain();
98
+ export const defaultCliConnectorConfigs = Object.freeze({
99
+ Claude: new CliConnectorConfig({ connectorId: ConnectorIds.ClaudeCli }),
100
+ Codex: new CliConnectorConfig({ connectorId: ConnectorIds.Codex })
101
+ });
102
+ export const defaultReasoningConfig = (coder, explicit) => {
103
+ if (explicit !== undefined) {
104
+ return explicit;
105
+ }
106
+ return coder instanceof CliConnectorConfig
107
+ ? CliConnectorConfig.make({ ...coder, readOnly: true })
108
+ : coder;
109
+ };
110
+ //# sourceMappingURL=ConnectorConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectorConfig.js","sourceRoot":"","sources":["../src/ConnectorConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAoB,MAAM,aAAa,CAAA;AAEpF,MAAM,OAAO,aAAc,SAAQ,MAAM,CAAC,WAAW,EAAiB,CAAC,QAAQ,EAAE;IAC/E,KAAK,EAAE,MAAM,CAAC,MAAM;IACpB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/E,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;CAC3C,CAAC;CAAG;AAEL,MAAM,OAAO,aAAc,SAAQ,MAAM,CAAC,WAAW,EAAiB,CAAC,QAAQ,EAAE,EAAE,CAAC;CAAG;AACvF,MAAM,OAAO,oBAAqB,SAAQ,MAAM,CAAC,WAAW,EAAwB,CAClF,eAAe,EACf,EAAE,CACH;CAAG;AACJ,MAAM,OAAO,YAAa,SAAQ,MAAM,CAAC,WAAW,EAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;CAAG;AACpF,MAAM,OAAO,UAAW,SAAQ,MAAM,CAAC,WAAW,EAAc,CAAC,KAAK,EAAE,EAAE,CAAC;CAAG;AAE9E,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;IACrC,aAAa;IACb,aAAa;IACb,oBAAoB;IACpB,YAAY;IACZ,UAAU;CACX,CAAC,CAAA;AAGF,MAAM,iBAAiB,GAAqC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAE7E,MAAM,OAAO,kBAAmB,SAAQ,MAAM,CAAC,WAAW,EAAsB,CAC9E,oBAAoB,EACpB;IACE,WAAW,EAAE,WAAW;IACxB,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;QAC7B,kBAAkB,EAAE,IAAI;KACzB,CAAC,CACH;IACD,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAC3B,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CACrE;IACD,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,iBAAiB,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IACrF,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7E,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CACpE;IACD,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC;CAC1C,CACF;CAAG;AAEJ,MAAM,OAAO,kBAAmB,SAAQ,MAAM,CAAC,WAAW,EAAsB,CAC9E,oBAAoB,EACpB;IACE,WAAW,EAAE,WAAW;IACxB,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAC3B,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CACrE;IACD,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CACrD,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CACjE;IACD,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC;IACzC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CACvD,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CACjE;IACD,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IAC7C,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;CACpF,CACF;CAAG;AAEJ,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CAAA;AAGrF,MAAM,oBAAoB,GAAG,CAAC,WAAwB,EAAe,EAAE;IACrE,QAAQ,WAAW,CAAC,KAAK,EAAE,CAAC;QAC1B,KAAK,WAAW;YACd,OAAO,WAAW,CAAA;QACpB,KAAK,YAAY;YACf,OAAO,WAAW,CAAA;QACpB,KAAK,WAAW;YACd,OAAO,UAAU,CAAA;QACnB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAA;QACjB,KAAK,MAAM;YACT,OAAO,MAAM,CAAA;QACf;YACE,OAAO,QAAQ,CAAA;IACnB,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAA0B,EAAa,EAAE,CACnE,IAAI,SAAS,CAAC;IACZ,QAAQ,EAAE,oBAAoB,CAAC,MAAM,CAAC,WAAW,CAAC;IAClD,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;IACzB,OAAO,EAAE,MAAM,CAAC,OAAO;IACvB,UAAU,EAAE,MAAM,CAAC,UAAU;IAC7B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;IAC3C,SAAS,EAAE,MAAM,CAAC,SAAS;IAC3B,cAAc,EAAE,MAAM,CAAC,cAAc;IACrC,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IACpE,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IACjE,GAAG,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;IAChF,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;CAC3E,CAAC,CAAA;AAEJ,MAAM,eAAe,GAAmC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAEzE,MAAM,OAAO,aAAc,SAAQ,MAAM,CAAC,KAAK,CAAgB,eAAe,CAAC,CAAC;IAC9E,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAC5C,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAC/D;CACF,CAAC;IACA,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAA;IACrC,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAA;IACnC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,aAAa,EAAE,CAAA;AAErD,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,MAAM,CAAC;IACtD,MAAM,EAAE,IAAI,kBAAkB,CAAC,EAAE,WAAW,EAAE,YAAY,CAAC,SAAS,EAAE,CAAC;IACvE,KAAK,EAAE,IAAI,kBAAkB,CAAC,EAAE,WAAW,EAAE,YAAY,CAAC,KAAK,EAAE,CAAC;CACnE,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,KAAsB,EACtB,QAA0B,EACT,EAAE;IACnB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,OAAO,KAAK,YAAY,kBAAkB;QACxC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACvD,CAAC,CAAC,KAAK,CAAA;AACX,CAAC,CAAA"}
@@ -0,0 +1,28 @@
1
+ import * as Context from "effect/Context";
2
+ import * as Effect from "effect/Effect";
3
+ import type { ApiConnectorConfig, CliConnectorConfig, ConnectorConfig, FallbackChain } from "./ConnectorConfig.ts";
4
+ import type { ApiConnectorShape, CliConnectorShape, ConnectorShape } from "./Connector.ts";
5
+ import { type LlmError } from "./Errors.ts";
6
+ import { HealthStatus, type ConnectorId, type ConnectorKind } from "./Models.ts";
7
+ export interface ConnectorFactory {
8
+ readonly connectorId: ConnectorId;
9
+ readonly kind: ConnectorKind;
10
+ readonly create: (config: ConnectorConfig) => Effect.Effect<ConnectorShape, LlmError>;
11
+ }
12
+ export interface ConnectorRegistryShape {
13
+ readonly resolve: (config: ConnectorConfig) => Effect.Effect<ConnectorShape, LlmError>;
14
+ readonly resolveApi: (config: ApiConnectorConfig) => Effect.Effect<ApiConnectorShape, LlmError>;
15
+ readonly resolveCli: (config: CliConnectorConfig) => Effect.Effect<CliConnectorShape, LlmError>;
16
+ readonly resolveFallback: (chain: FallbackChain) => Effect.Effect<ConnectorShape, LlmError>;
17
+ readonly available: Effect.Effect<ReadonlyArray<ConnectorId>>;
18
+ readonly healthCheckAll: Effect.Effect<ReadonlyMap<ConnectorId, HealthStatus>>;
19
+ }
20
+ declare const ConnectorRegistry_base: Context.ServiceClass<ConnectorRegistry, "@llm4ts/core/ConnectorRegistry", ConnectorRegistryShape>;
21
+ export declare class ConnectorRegistry extends ConnectorRegistry_base {
22
+ }
23
+ export declare const makeConnectorRegistry: (factories: Iterable<ConnectorFactory>) => ConnectorRegistryShape;
24
+ export declare const resolveConnector: (config: ConnectorConfig) => Effect.Effect<ConnectorShape, LlmError, ConnectorRegistry>;
25
+ export declare const resolveApiConnector: (config: ApiConnectorConfig) => Effect.Effect<ApiConnectorShape, LlmError, ConnectorRegistry>;
26
+ export declare const resolveCliConnector: (config: CliConnectorConfig) => Effect.Effect<CliConnectorShape, LlmError, ConnectorRegistry>;
27
+ export {};
28
+ //# sourceMappingURL=ConnectorRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectorRegistry.d.ts","sourceRoot":"","sources":["../src/ConnectorRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACd,MAAM,sBAAsB,CAAA;AAK7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC1F,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;CACtF;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;IACtF,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAA;IAC/F,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAA;IAC/F,QAAQ,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;IAC3F,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAA;IAC7D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAA;CAC/E;;AAED,qBAAa,iBAAkB,SAAQ,sBAEtC;CAAG;AAwBJ,eAAO,MAAM,qBAAqB,GAChC,WAAW,QAAQ,CAAC,gBAAgB,CAAC,KACpC,sBA6GF,CAAA;AAED,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,eAAe,KACtB,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,QAAQ,EAAE,iBAAiB,CACe,CAAA;AAE3E,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,kBAAkB,KACzB,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,CACe,CAAA;AAE9E,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,kBAAkB,KACzB,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,CACe,CAAA"}
@@ -0,0 +1,87 @@
1
+ import * as Context from "effect/Context";
2
+ import * as Effect from "effect/Effect";
3
+ import { ApiConnectorConfig as ApiConfig, CliConnectorConfig as CliConfig } from "./ConnectorConfig.js";
4
+ import { ConfigError } from "./Errors.js";
5
+ import { HealthStatus } from "./Models.js";
6
+ export class ConnectorRegistry extends Context.Service()("@llm4ts/core/ConnectorRegistry") {
7
+ }
8
+ const unknownHealth = () => HealthStatus.make({
9
+ availability: "Unknown",
10
+ authStatus: "Unknown"
11
+ });
12
+ const isApiConnector = (connector) => connector.kind === "Api";
13
+ const isCliConnector = (connector) => connector.kind === "Cli" &&
14
+ "interactionSupport" in connector &&
15
+ "buildArgv" in connector &&
16
+ "buildInteractiveArgv" in connector &&
17
+ "complete" in connector &&
18
+ "completeStream" in connector;
19
+ const healthEntry = (id, status) => [id, status];
20
+ export const makeConnectorRegistry = (factories) => {
21
+ const byId = new Map();
22
+ for (const factory of factories) {
23
+ byId.set(factory.connectorId.value, factory);
24
+ }
25
+ const resolve = (config) => {
26
+ const factory = byId.get(config.connectorId.value);
27
+ return factory === undefined
28
+ ? Effect.fail(ConfigError.make({
29
+ message: `Unknown connector: ${config.connectorId.value}`
30
+ }))
31
+ : factory.create(config);
32
+ };
33
+ const resolveApi = (config) => Effect.flatMap(resolve(config), (connector) => isApiConnector(connector)
34
+ ? Effect.succeed(connector)
35
+ : Effect.fail(ConfigError.make({
36
+ message: `Expected ApiConnector, got ${connector.kind}`
37
+ })));
38
+ const resolveCli = (config) => Effect.flatMap(resolve(config), (connector) => isCliConnector(connector)
39
+ ? Effect.succeed(connector)
40
+ : Effect.fail(ConfigError.make({
41
+ message: `Expected CliConnector, got ${connector.kind}`
42
+ })));
43
+ const resolveFallback = (chain) => {
44
+ const loop = (remaining, failures) => {
45
+ const [config, ...tail] = remaining;
46
+ if (config === undefined) {
47
+ return Effect.fail(ConfigError.make({
48
+ message: failures.length === 0
49
+ ? "Fallback chain is empty"
50
+ : `No fallback connector is available: ${failures.join("; ")}`
51
+ }));
52
+ }
53
+ return Effect.result(Effect.flatMap(resolve(config), (connector) => Effect.map(connector.isAvailable, (available) => ({
54
+ connector,
55
+ available
56
+ })))).pipe(Effect.flatMap((result) => {
57
+ if (result._tag === "Success" && result.success.available) {
58
+ return Effect.succeed(result.success.connector);
59
+ }
60
+ const reason = result._tag === "Failure"
61
+ ? `${config.connectorId.value}: ${result.failure.message}`
62
+ : `${config.connectorId.value}: unavailable`;
63
+ return Effect.suspend(() => loop(tail, [...failures, reason]));
64
+ }));
65
+ };
66
+ return loop(chain.connectors, []);
67
+ };
68
+ const available = Effect.sync(() => Array.from(byId.values(), (factory) => factory.connectorId));
69
+ const healthCheckAll = Effect.forEach(Array.from(byId.values()), (factory) => {
70
+ const defaultConfig = factory.kind === "Api"
71
+ ? ApiConfig.make({ connectorId: factory.connectorId })
72
+ : CliConfig.make({ connectorId: factory.connectorId });
73
+ return Effect.result(Effect.flatMap(factory.create(defaultConfig), (connector) => connector.healthCheck)).pipe(Effect.map((result) => healthEntry(factory.connectorId, result._tag === "Success" ? result.success : unknownHealth())));
74
+ }).pipe(Effect.map((entries) => new Map(entries)));
75
+ return {
76
+ resolve,
77
+ resolveApi,
78
+ resolveCli,
79
+ resolveFallback,
80
+ available,
81
+ healthCheckAll
82
+ };
83
+ };
84
+ export const resolveConnector = (config) => Effect.flatMap(ConnectorRegistry, (registry) => registry.resolve(config));
85
+ export const resolveApiConnector = (config) => Effect.flatMap(ConnectorRegistry, (registry) => registry.resolveApi(config));
86
+ export const resolveCliConnector = (config) => Effect.flatMap(ConnectorRegistry, (registry) => registry.resolveCli(config));
87
+ //# sourceMappingURL=ConnectorRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectorRegistry.js","sourceRoot":"","sources":["../src/ConnectorRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import * as Crypto from "effect/Crypto";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Schema from "effect/Schema";
4
+ import { ConversationMessage } from "./Conversation.ts";
5
+ import type { LlmProvider } from "./Models.ts";
6
+ declare const ContextInvalidInput_base: Schema.Class<ContextInvalidInput, Schema.TaggedStruct<"InvalidInput", {
7
+ readonly message: Schema.String;
8
+ }>, import("effect/Cause").YieldableError>;
9
+ export declare class ContextInvalidInput extends ContextInvalidInput_base {
10
+ }
11
+ declare const ContextParseFailed_base: Schema.Class<ContextParseFailed, Schema.TaggedStruct<"ParseFailed", {
12
+ readonly message: Schema.String;
13
+ }>, import("effect/Cause").YieldableError>;
14
+ export declare class ContextParseFailed extends ContextParseFailed_base {
15
+ }
16
+ declare const ContextSummarizationFailed_base: Schema.Class<ContextSummarizationFailed, Schema.TaggedStruct<"SummarizationFailed", {
17
+ readonly message: Schema.String;
18
+ }>, import("effect/Cause").YieldableError>;
19
+ export declare class ContextSummarizationFailed extends ContextSummarizationFailed_base {
20
+ }
21
+ declare const ContextToolLoopFailed_base: Schema.Class<ContextToolLoopFailed, Schema.TaggedStruct<"ToolLoopFailed", {
22
+ readonly message: Schema.String;
23
+ }>, import("effect/Cause").YieldableError>;
24
+ export declare class ContextToolLoopFailed extends ContextToolLoopFailed_base {
25
+ }
26
+ export declare const ContextError: Schema.Union<readonly [typeof ContextInvalidInput, typeof ContextParseFailed, typeof ContextSummarizationFailed, typeof ContextToolLoopFailed]>;
27
+ export type ContextError = typeof ContextError.Type;
28
+ declare const ContextLimits_base: Schema.Class<ContextLimits, Schema.Struct<{
29
+ readonly maxTokens: Schema.Int;
30
+ readonly warningThresholdPct: Schema.withConstructorDefault<Schema.Number>;
31
+ }>, {}>;
32
+ export declare class ContextLimits extends ContextLimits_base {
33
+ }
34
+ declare const ContextWindow_base: Schema.Class<ContextWindow, Schema.Struct<{
35
+ readonly messages: Schema.$Array<typeof ConversationMessage>;
36
+ readonly totalTokens: Schema.Int;
37
+ readonly approachingLimit: Schema.Boolean;
38
+ readonly trimmed: Schema.Boolean;
39
+ }>, {}>;
40
+ export declare class ContextWindow extends ContextWindow_base {
41
+ }
42
+ declare const DropOldestFifo_base: Schema.Class<DropOldestFifo, Schema.TaggedStruct<"DropOldestFifo", {}>, {}>;
43
+ export declare class DropOldestFifo extends DropOldestFifo_base {
44
+ }
45
+ declare const SlidingWindow_base: Schema.Class<SlidingWindow, Schema.TaggedStruct<"SlidingWindow", {}>, {}>;
46
+ export declare class SlidingWindow extends SlidingWindow_base {
47
+ }
48
+ declare const PriorityBased_base: Schema.Class<PriorityBased, Schema.TaggedStruct<"PriorityBased", {}>, {}>;
49
+ export declare class PriorityBased extends PriorityBased_base {
50
+ }
51
+ declare const SummarizeOldMessages_base: Schema.Class<SummarizeOldMessages, Schema.TaggedStruct<"SummarizeOldMessages", {
52
+ readonly summaryTargetTokens: Schema.withConstructorDefault<Schema.Int>;
53
+ }>, {}>;
54
+ export declare class SummarizeOldMessages extends SummarizeOldMessages_base {
55
+ }
56
+ export declare const ContextTrimmingStrategy: Schema.Union<readonly [typeof DropOldestFifo, typeof SlidingWindow, typeof PriorityBased, typeof SummarizeOldMessages]>;
57
+ export type ContextTrimmingStrategy = typeof ContextTrimmingStrategy.Type;
58
+ export declare const ContextTrimmingStrategies: Readonly<{
59
+ DropOldestFifo: DropOldestFifo;
60
+ SlidingWindow: SlidingWindow;
61
+ PriorityBased: PriorityBased;
62
+ SummarizeOldMessages: (summaryTargetTokens?: number) => SummarizeOldMessages;
63
+ }>;
64
+ export interface TokenCounter {
65
+ readonly countText: (provider: LlmProvider, text: string) => number;
66
+ readonly countMessage: (provider: LlmProvider, message: ConversationMessage) => number;
67
+ readonly countMessages: (provider: LlmProvider, messages: Iterable<ConversationMessage>) => number;
68
+ }
69
+ export declare const defaultTokenCounter: TokenCounter;
70
+ export interface MessageSummarizer<R = never> {
71
+ readonly summarize: (messages: ReadonlyArray<ConversationMessage>, targetTokens: number) => Effect.Effect<ConversationMessage, ContextError, R>;
72
+ }
73
+ export declare const simpleMessageSummarizer: MessageSummarizer<Crypto.Crypto>;
74
+ export declare function applyContextWindow(messages: ReadonlyArray<ConversationMessage>, provider: LlmProvider, limits: ContextLimits, strategy: DropOldestFifo | SlidingWindow | PriorityBased, tokenCounter?: TokenCounter): Effect.Effect<ContextWindow, ContextError>;
75
+ export declare function applyContextWindow(messages: ReadonlyArray<ConversationMessage>, provider: LlmProvider, limits: ContextLimits, strategy: ContextTrimmingStrategy, tokenCounter?: TokenCounter): Effect.Effect<ContextWindow, ContextError, Crypto.Crypto>;
76
+ export declare function applyContextWindow<R>(messages: ReadonlyArray<ConversationMessage>, provider: LlmProvider, limits: ContextLimits, strategy: ContextTrimmingStrategy, tokenCounter: TokenCounter, summarizer: MessageSummarizer<R>): Effect.Effect<ContextWindow, ContextError, R>;
77
+ export {};
78
+ //# sourceMappingURL=ContextManagement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextManagement.d.ts","sourceRoot":"","sources":["../src/ContextManagement.ts"],"names":[],"mappings":"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"}