@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,8 @@
1
+ import { type CliConnectorShape } from "../Connector.ts";
2
+ import type { CliConnectorConfig } from "../ConnectorConfig.ts";
3
+ import { LlmChunk } from "../Models.ts";
4
+ import type { ProcessExecutorShape } from "../ProcessExecutor.ts";
5
+ export declare const openCodeCliExtraArgs: (config: CliConnectorConfig) => ReadonlyArray<string>;
6
+ export declare const parseOpenCodeCliStreamLine: (line: string) => ReadonlyArray<LlmChunk>;
7
+ export declare const makeOpenCodeCliConnector: (config: CliConnectorConfig, executor: ProcessExecutorShape) => CliConnectorShape;
8
+ //# sourceMappingURL=OpenCodeCliConnector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenCodeCliConnector.d.ts","sourceRoot":"","sources":["../../src/providers/OpenCodeCliConnector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAgB,QAAQ,EAAc,MAAM,cAAc,CAAA;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAajE,eAAO,MAAM,oBAAoB,GAAI,QAAQ,kBAAkB,KAAG,aAAa,CAAC,MAAM,CAIrF,CAAA;AAED,eAAO,MAAM,0BAA0B,GAAI,MAAM,MAAM,KAAG,aAAa,CAAC,QAAQ,CAsD/E,CAAA;AAED,eAAO,MAAM,wBAAwB,GACnC,QAAQ,kBAAkB,EAC1B,UAAU,oBAAoB,KAC7B,iBAmDF,CAAA"}
@@ -0,0 +1,93 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Stream from "effect/Stream";
3
+ import { makeCliConnector } from "../Connector.js";
4
+ import { ConnectorIds, LlmChunk, TokenUsage } from "../Models.js";
5
+ import { failClassifiedCliError, jsonField, jsonIntField, jsonStringField, optionalModelArgs, parseJsonLine, sortedFlagArgs, toolEventChunk, usageEventChunk } from "./CliSupport.js";
6
+ export const openCodeCliExtraArgs = (config) => [
7
+ ...optionalModelArgs(config.model),
8
+ ...(config.readOnly ? ["--agent", "plan"] : ["--auto"]),
9
+ ...sortedFlagArgs(config.flags)
10
+ ];
11
+ export const parseOpenCodeCliStreamLine = (line) => {
12
+ const json = parseJsonLine(line);
13
+ if (json === undefined) {
14
+ return [];
15
+ }
16
+ const part = jsonField(json, "part");
17
+ switch (jsonStringField(json, "type")) {
18
+ case "text": {
19
+ const text = jsonStringField(part, "text");
20
+ return text === undefined || text.length === 0 ? [] : [LlmChunk.make({ delta: text })];
21
+ }
22
+ case "tool_use":
23
+ return part === undefined
24
+ ? []
25
+ : [
26
+ toolEventChunk(jsonStringField(part, "tool") ?? "", jsonField(jsonField(part, "state"), "input"))
27
+ ];
28
+ case "step_finish": {
29
+ const tokens = jsonField(part, "tokens");
30
+ if (tokens === undefined) {
31
+ return [];
32
+ }
33
+ const prompt = jsonIntField(tokens, "input") ?? 0;
34
+ const completion = jsonIntField(tokens, "output") ?? 0;
35
+ const cached = jsonIntField(jsonField(tokens, "cache"), "read");
36
+ return [
37
+ usageEventChunk(undefined, TokenUsage.make({
38
+ prompt,
39
+ completion,
40
+ total: jsonIntField(tokens, "total") ?? prompt + completion,
41
+ ...(cached === undefined ? {} : { cached })
42
+ }))
43
+ ];
44
+ }
45
+ case "error":
46
+ return [
47
+ LlmChunk.make({
48
+ delta: "",
49
+ metadata: {
50
+ opencodeError: jsonStringField(json, "error") ?? jsonStringField(json, "message") ?? "opencode error"
51
+ }
52
+ })
53
+ ];
54
+ default:
55
+ return [];
56
+ }
57
+ };
58
+ export const makeOpenCodeCliConnector = (config, executor) => {
59
+ const cwd = config.workingDir ?? ".";
60
+ const extraArgs = openCodeCliExtraArgs(config);
61
+ const buildArgv = (prompt) => [
62
+ "opencode",
63
+ "run",
64
+ ...extraArgs,
65
+ prompt
66
+ ];
67
+ const complete = Effect.fn("@llm4ts/core/providers/OpenCodeCliConnector.complete")(function* (prompt) {
68
+ const result = yield* executor.run(buildArgv(prompt), cwd, config.envVars);
69
+ if (result.exitCode !== 0) {
70
+ const raw = result.stdout.join("\n");
71
+ return yield* failClassifiedCliError("opencode", `opencode exited with code ${result.exitCode}`, raw);
72
+ }
73
+ return result.stdout.join("\n");
74
+ });
75
+ const completeStream = (prompt) => executor
76
+ .runStreaming(["opencode", "run", "--format", "json", ...extraArgs, prompt], cwd, config.envVars)
77
+ .pipe(Stream.flatMap((line) => Stream.fromIterable(parseOpenCodeCliStreamLine(line))), Stream.mapEffect((chunk) => {
78
+ const message = chunk.metadata.opencodeError;
79
+ return message === undefined
80
+ ? Effect.succeed(chunk)
81
+ : failClassifiedCliError("opencode", "opencode error", message);
82
+ }));
83
+ return makeCliConnector({
84
+ id: ConnectorIds.OpenCode,
85
+ interactionSupport: "ContinuationOnly",
86
+ buildArgv: (prompt, _context) => buildArgv(prompt),
87
+ buildInteractiveArgv: (_context) => ["opencode"],
88
+ complete,
89
+ completeStream,
90
+ versionProbe: { executor, binary: "opencode", cwd }
91
+ });
92
+ };
93
+ //# sourceMappingURL=OpenCodeCliConnector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenCodeCliConnector.js","sourceRoot":"","sources":["../../src/providers/OpenCodeCliConnector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import * as Schema from "effect/Schema";
2
+ declare const OpenCodeMessage_base: Schema.Class<OpenCodeMessage, Schema.Struct<{
3
+ readonly role: Schema.String;
4
+ readonly content: Schema.String;
5
+ }>, {}>;
6
+ export declare class OpenCodeMessage extends OpenCodeMessage_base {
7
+ }
8
+ declare const OpenCodeJsonSchemaSpec_base: Schema.Class<OpenCodeJsonSchemaSpec, Schema.Struct<{
9
+ readonly name: Schema.String;
10
+ readonly schema: Schema.$Record<Schema.String, Schema.Codec<Schema.Json, Schema.Json, never, never>>;
11
+ }>, {}>;
12
+ export declare class OpenCodeJsonSchemaSpec extends OpenCodeJsonSchemaSpec_base {
13
+ }
14
+ declare const OpenCodeResponseFormat_base: Schema.Class<OpenCodeResponseFormat, Schema.Struct<{
15
+ readonly type: Schema.String;
16
+ readonly json_schema: Schema.optionalKey<typeof OpenCodeJsonSchemaSpec>;
17
+ }>, {}>;
18
+ export declare class OpenCodeResponseFormat extends OpenCodeResponseFormat_base {
19
+ }
20
+ declare const OpenCodeCompletionRequest_base: Schema.Class<OpenCodeCompletionRequest, Schema.Struct<{
21
+ readonly model: Schema.String;
22
+ readonly messages: Schema.$Array<typeof OpenCodeMessage>;
23
+ readonly temperature: Schema.optionalKey<Schema.Number>;
24
+ readonly max_tokens: Schema.optionalKey<Schema.Int>;
25
+ readonly max_completion_tokens: Schema.optionalKey<Schema.Int>;
26
+ readonly stream: Schema.optionalKey<Schema.Boolean>;
27
+ readonly response_format: Schema.optionalKey<typeof OpenCodeResponseFormat>;
28
+ }>, {}>;
29
+ export declare class OpenCodeCompletionRequest extends OpenCodeCompletionRequest_base {
30
+ }
31
+ declare const OpenCodeDelta_base: Schema.Class<OpenCodeDelta, Schema.Struct<{
32
+ readonly content: Schema.optionalKey<Schema.NullOr<Schema.String>>;
33
+ }>, {}>;
34
+ export declare class OpenCodeDelta extends OpenCodeDelta_base {
35
+ }
36
+ declare const OpenCodeChoice_base: Schema.Class<OpenCodeChoice, Schema.Struct<{
37
+ readonly index: Schema.optionalKey<Schema.Int>;
38
+ readonly message: Schema.optionalKey<typeof OpenCodeMessage>;
39
+ readonly delta: Schema.optionalKey<typeof OpenCodeDelta>;
40
+ readonly text: Schema.optionalKey<Schema.NullOr<Schema.String>>;
41
+ readonly finish_reason: Schema.optionalKey<Schema.NullOr<Schema.String>>;
42
+ }>, {}>;
43
+ export declare class OpenCodeChoice extends OpenCodeChoice_base {
44
+ }
45
+ declare const OpenCodeTokenUsage_base: Schema.Class<OpenCodeTokenUsage, Schema.Struct<{
46
+ readonly prompt_tokens: Schema.optionalKey<Schema.Int>;
47
+ readonly completion_tokens: Schema.optionalKey<Schema.Int>;
48
+ readonly total_tokens: Schema.optionalKey<Schema.Int>;
49
+ }>, {}>;
50
+ export declare class OpenCodeTokenUsage extends OpenCodeTokenUsage_base {
51
+ }
52
+ declare const OpenCodeCompletionResponse_base: Schema.Class<OpenCodeCompletionResponse, Schema.Struct<{
53
+ readonly id: Schema.optionalKey<Schema.String>;
54
+ readonly choices: Schema.$Array<typeof OpenCodeChoice>;
55
+ readonly usage: Schema.optionalKey<typeof OpenCodeTokenUsage>;
56
+ readonly model: Schema.optionalKey<Schema.String>;
57
+ }>, {}>;
58
+ export declare class OpenCodeCompletionResponse extends OpenCodeCompletionResponse_base {
59
+ }
60
+ export {};
61
+ //# sourceMappingURL=OpenCodeModels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenCodeModels.d.ts","sourceRoot":"","sources":["../../src/providers/OpenCodeModels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;;;;;AAGvC,qBAAa,eAAgB,SAAQ,oBAGnC;CAAG;;;;;AAEL,qBAAa,sBAAuB,SAAQ,2BAK1C;CAAG;;;;;AAEL,qBAAa,sBAAuB,SAAQ,2BAK1C;CAAG;;;;;;;;;;AAEL,qBAAa,yBAA0B,SAAQ,8BAU7C;CAAG;;;;AAEL,qBAAa,aAAc,SAAQ,kBAEjC;CAAG;;;;;;;;AAEL,qBAAa,cAAe,SAAQ,mBAMlC;CAAG;;;;;;AAEL,qBAAa,kBAAmB,SAAQ,uBAItC;CAAG;;;;;;;AAEL,qBAAa,0BAA2B,SAAQ,+BAO9C;CAAG"}
@@ -0,0 +1,53 @@
1
+ import * as Schema from "effect/Schema";
2
+ import { JsonSchema } from "../Models.js";
3
+ export class OpenCodeMessage extends Schema.Class("OpenCodeMessage")({
4
+ role: Schema.String,
5
+ content: Schema.String
6
+ }) {
7
+ }
8
+ export class OpenCodeJsonSchemaSpec extends Schema.Class("OpenCodeJsonSchemaSpec")({
9
+ name: Schema.String,
10
+ schema: JsonSchema
11
+ }) {
12
+ }
13
+ export class OpenCodeResponseFormat extends Schema.Class("OpenCodeResponseFormat")({
14
+ type: Schema.String,
15
+ json_schema: Schema.optionalKey(OpenCodeJsonSchemaSpec)
16
+ }) {
17
+ }
18
+ export class OpenCodeCompletionRequest extends Schema.Class("OpenCodeCompletionRequest")({
19
+ model: Schema.String,
20
+ messages: Schema.Array(OpenCodeMessage),
21
+ temperature: Schema.optionalKey(Schema.Number),
22
+ max_tokens: Schema.optionalKey(Schema.Int),
23
+ max_completion_tokens: Schema.optionalKey(Schema.Int),
24
+ stream: Schema.optionalKey(Schema.Boolean),
25
+ response_format: Schema.optionalKey(OpenCodeResponseFormat)
26
+ }) {
27
+ }
28
+ export class OpenCodeDelta extends Schema.Class("OpenCodeDelta")({
29
+ content: Schema.optionalKey(Schema.NullOr(Schema.String))
30
+ }) {
31
+ }
32
+ export class OpenCodeChoice extends Schema.Class("OpenCodeChoice")({
33
+ index: Schema.optionalKey(Schema.Int),
34
+ message: Schema.optionalKey(OpenCodeMessage),
35
+ delta: Schema.optionalKey(OpenCodeDelta),
36
+ text: Schema.optionalKey(Schema.NullOr(Schema.String)),
37
+ finish_reason: Schema.optionalKey(Schema.NullOr(Schema.String))
38
+ }) {
39
+ }
40
+ export class OpenCodeTokenUsage extends Schema.Class("OpenCodeTokenUsage")({
41
+ prompt_tokens: Schema.optionalKey(Schema.Int),
42
+ completion_tokens: Schema.optionalKey(Schema.Int),
43
+ total_tokens: Schema.optionalKey(Schema.Int)
44
+ }) {
45
+ }
46
+ export class OpenCodeCompletionResponse extends Schema.Class("OpenCodeCompletionResponse")({
47
+ id: Schema.optionalKey(Schema.String),
48
+ choices: Schema.Array(OpenCodeChoice),
49
+ usage: Schema.optionalKey(OpenCodeTokenUsage),
50
+ model: Schema.optionalKey(Schema.String)
51
+ }) {
52
+ }
53
+ //# sourceMappingURL=OpenCodeModels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenCodeModels.js","sourceRoot":"","sources":["../../src/providers/OpenCodeModels.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import * as Effect from "effect/Effect";
2
+ import { type ApiConnectorShape } from "../Connector.ts";
3
+ import { AuthenticationError, ConfigError, InvalidRequestError, ParseError } from "../Errors.ts";
4
+ import type { HttpClientShape } from "../HttpClient.ts";
5
+ import { LlmChunk, type LlmConfig, type Message } from "../Models.ts";
6
+ import { OpenCodeMessage } from "./OpenCodeModels.ts";
7
+ export declare const openCodeHistory: (messages: ReadonlyArray<Message>) => ReadonlyArray<OpenCodeMessage>;
8
+ export declare const parseOpenCodeSseBody: (config: LlmConfig, raw: string) => Effect.Effect<readonly LlmChunk[], import("../Errors.ts").ProviderError | import("../Errors.ts").UsageLimitError | AuthenticationError | InvalidRequestError | ParseError | import("../Errors.ts").ToolError | ConfigError | import("../Errors.ts").RateLimitError | import("../Errors.ts").TimeoutError | import("../Errors.ts").TurnLimitError, never>;
9
+ export declare const makeOpenCodeProvider: (config: LlmConfig, httpClient: HttpClientShape) => ApiConnectorShape;
10
+ //# sourceMappingURL=OpenCodeProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenCodeProvider.d.ts","sourceRoot":"","sources":["../../src/providers/OpenCodeProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAIvC,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAC1E,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,UAAU,EAEX,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEvD,OAAO,EAEL,QAAQ,EAGR,KAAK,SAAS,EACd,KAAK,OAAO,EAEb,MAAM,cAAc,CAAA;AAErB,OAAO,EAIL,eAAe,EAEhB,MAAM,qBAAqB,CAAA;AAoB5B,eAAO,MAAM,eAAe,GAAI,UAAU,aAAa,CAAC,OAAO,CAAC,KAAG,aAAa,CAAC,eAAe,CAM7F,CAAA;AA+CH,eAAO,MAAM,oBAAoB,8XAsBhC,CAAA;AAED,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,SAAS,EACjB,YAAY,eAAe,KAC1B,iBAmJF,CAAA"}
@@ -0,0 +1,154 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenCodeProvider.js","sourceRoot":"","sources":["../../src/providers/OpenCodeProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type CliConnectorShape } from "../Connector.ts";
2
+ import type { CliConnectorConfig } from "../ConnectorConfig.ts";
3
+ import { LlmChunk } from "../Models.ts";
4
+ import type { ProcessExecutorShape } from "../ProcessExecutor.ts";
5
+ export declare const piExtraArgs: (config: CliConnectorConfig) => ReadonlyArray<string>;
6
+ export declare const parsePiStreamLine: (line: string) => ReadonlyArray<LlmChunk>;
7
+ export declare const makePiConnector: (config: CliConnectorConfig, executor: ProcessExecutorShape) => CliConnectorShape;
8
+ //# sourceMappingURL=PiConnector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PiConnector.d.ts","sourceRoot":"","sources":["../../src/providers/PiConnector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAE/D,OAAO,EAAgB,QAAQ,EAAc,MAAM,cAAc,CAAA;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAajE,eAAO,MAAM,WAAW,GAAI,QAAQ,kBAAkB,KAAG,aAAa,CAAC,MAAM,CAI5E,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,aAAa,CAAC,QAAQ,CA2DtE,CAAA;AAED,eAAO,MAAM,eAAe,GAC1B,QAAQ,kBAAkB,EAC1B,UAAU,oBAAoB,KAC7B,iBAoDF,CAAA"}
@@ -0,0 +1,99 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Stream from "effect/Stream";
3
+ import { makeCliConnector } from "../Connector.js";
4
+ import { ProviderError } from "../Errors.js";
5
+ import { ConnectorIds, LlmChunk, TokenUsage } from "../Models.js";
6
+ import { jsonBooleanField, jsonField, jsonIntField, jsonStringField, optionalModelArgs, parseJsonLine, sortedFlagArgs, toolEventChunk, usageEventChunk } from "./CliSupport.js";
7
+ export const piExtraArgs = (config) => [
8
+ ...optionalModelArgs(config.model),
9
+ ...(config.readOnly ? ["--tools", "read"] : []),
10
+ ...sortedFlagArgs(config.flags)
11
+ ];
12
+ export const parsePiStreamLine = (line) => {
13
+ const json = parseJsonLine(line);
14
+ if (json === undefined) {
15
+ return [];
16
+ }
17
+ switch (jsonStringField(json, "type")) {
18
+ case "message_update": {
19
+ const event = jsonField(json, "assistantMessageEvent");
20
+ const delta = jsonStringField(event, "type") === "text_delta"
21
+ ? jsonStringField(event, "delta")
22
+ : undefined;
23
+ return delta === undefined || delta.length === 0 ? [] : [LlmChunk.make({ delta })];
24
+ }
25
+ case "tool_execution_start":
26
+ return [toolEventChunk(jsonStringField(json, "toolName") ?? "", jsonField(json, "args"))];
27
+ case "message_end":
28
+ case "agent_end": {
29
+ const usage = jsonField(jsonField(json, "message"), "usage");
30
+ if (usage === undefined) {
31
+ return [];
32
+ }
33
+ const prompt = jsonIntField(usage, "input") ?? 0;
34
+ const completion = jsonIntField(usage, "output") ?? 0;
35
+ return [
36
+ usageEventChunk(undefined, TokenUsage.make({
37
+ prompt,
38
+ completion,
39
+ total: prompt + completion
40
+ }))
41
+ ];
42
+ }
43
+ case "auto_retry_end":
44
+ return jsonBooleanField(json, "success") === false
45
+ ? [
46
+ LlmChunk.make({
47
+ delta: "",
48
+ metadata: {
49
+ piError: jsonStringField(json, "finalError") ?? "pi retry failed"
50
+ }
51
+ })
52
+ ]
53
+ : [];
54
+ case "extension_error":
55
+ return [
56
+ LlmChunk.make({
57
+ delta: "",
58
+ metadata: {
59
+ piError: jsonStringField(json, "error") ?? "pi extension error"
60
+ }
61
+ })
62
+ ];
63
+ default:
64
+ return [];
65
+ }
66
+ };
67
+ export const makePiConnector = (config, executor) => {
68
+ const cwd = config.workingDir ?? ".";
69
+ const extraArgs = piExtraArgs(config);
70
+ const complete = Effect.fn("@llm4ts/core/providers/PiConnector.complete")(function* (prompt) {
71
+ const result = yield* executor.runWithStdin(["pi", "-p", ...extraArgs], cwd, config.envVars, prompt);
72
+ if (result.exitCode !== 0) {
73
+ return yield* ProviderError.make({
74
+ message: `pi exited with code ${result.exitCode}: ${result.stdout.join("\n")}`
75
+ });
76
+ }
77
+ return result.stdout.join("\n");
78
+ });
79
+ const completeStream = (prompt) => executor
80
+ .runStreamingWithStdin(["pi", "-p", "--mode", "json", ...extraArgs], cwd, config.envVars, prompt)
81
+ .pipe(Stream.flatMap((line) => Stream.fromIterable(parsePiStreamLine(line))), Stream.mapEffect((chunk) => {
82
+ const message = chunk.metadata.piError;
83
+ return message === undefined
84
+ ? Effect.succeed(chunk)
85
+ : Effect.fail(ProviderError.make({
86
+ message: `pi error: ${message}`
87
+ }));
88
+ }));
89
+ return makeCliConnector({
90
+ id: ConnectorIds.Pi,
91
+ interactionSupport: "InteractiveStdin",
92
+ buildArgv: (prompt, _context) => ["pi", "-p", ...extraArgs, prompt],
93
+ buildInteractiveArgv: (_context) => ["pi", ...extraArgs],
94
+ complete,
95
+ completeStream,
96
+ versionProbe: { executor, binary: "pi", cwd }
97
+ });
98
+ };
99
+ //# sourceMappingURL=PiConnector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PiConnector.js","sourceRoot":"","sources":["../../src/providers/PiConnector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAA0B,MAAM,iBAAiB,CAAA;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEjE,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,cAAc,EACd,eAAe,EAChB,MAAM,iBAAiB,CAAA;AAExB,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAA0B,EAAyB,EAAE,CAAC;IAChF,GAAG,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC;IAClC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC;CAChC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAA2B,EAAE;IACzE,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IAChC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,QAAQ,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;QACtC,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAA;YACtD,MAAM,KAAK,GACT,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YAAY;gBAC7C,CAAC,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC;gBACjC,CAAC,CAAC,SAAS,CAAA;YACf,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;QACpF,CAAC;QACD,KAAK,sBAAsB;YACzB,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;QAC3F,KAAK,aAAa,CAAC;QACnB,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,CAAA;YAC5D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,EAAE,CAAA;YACX,CAAC;YACD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;YAChD,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;YACrD,OAAO;gBACL,eAAe,CACb,SAAS,EACT,UAAU,CAAC,IAAI,CAAC;oBACd,MAAM;oBACN,UAAU;oBACV,KAAK,EAAE,MAAM,GAAG,UAAU;iBAC3B,CAAC,CACH;aACF,CAAA;QACH,CAAC;QACD,KAAK,gBAAgB;YACnB,OAAO,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,KAAK;gBAChD,CAAC,CAAC;oBACE,QAAQ,CAAC,IAAI,CAAC;wBACZ,KAAK,EAAE,EAAE;wBACT,QAAQ,EAAE;4BACR,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,iBAAiB;yBAClE;qBACF,CAAC;iBACH;gBACH,CAAC,CAAC,EAAE,CAAA;QACR,KAAK,iBAAiB;YACpB,OAAO;gBACL,QAAQ,CAAC,IAAI,CAAC;oBACZ,KAAK,EAAE,EAAE;oBACT,QAAQ,EAAE;wBACR,OAAO,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,oBAAoB;qBAChE;iBACF,CAAC;aACH,CAAA;QACH;YACE,OAAO,EAAE,CAAA;IACb,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,MAA0B,EAC1B,QAA8B,EACX,EAAE;IACrB,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,IAAI,GAAG,CAAA;IACpC,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IAErC,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,6CAA6C,CAAC,CAAC,QAAQ,CAAC,EACjF,MAAc;QAEd,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,YAAY,CACzC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,EAC1B,GAAG,EACH,MAAM,CAAC,OAAO,EACd,MAAM,CACP,CAAA;QACD,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;gBAC/B,OAAO,EAAE,uBAAuB,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC/E,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;IAEF,MAAM,cAAc,GAAG,CAAC,MAAc,EAAE,EAAE,CACxC,QAAQ;SACL,qBAAqB,CACpB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,EAC5C,GAAG,EACH,MAAM,CAAC,OAAO,EACd,MAAM,CACP;SACA,IAAI,CACH,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EACtE,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAA;QACtC,OAAO,OAAO,KAAK,SAAS;YAC1B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;YACvB,CAAC,CAAC,MAAM,CAAC,IAAI,CACT,aAAa,CAAC,IAAI,CAAC;gBACjB,OAAO,EAAE,aAAa,OAAO,EAAE;aAChC,CAAC,CACH,CAAA;IACP,CAAC,CAAC,CACH,CAAA;IAEL,OAAO,gBAAgB,CAAC;QACtB,EAAE,EAAE,YAAY,CAAC,EAAE;QACnB,kBAAkB,EAAE,kBAAkB;QACtC,SAAS,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,SAAS,EAAE,MAAM,CAAC;QACnE,oBAAoB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;QACxD,QAAQ;QACR,cAAc;QACd,YAAY,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE;KAC9C,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1,83 @@
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").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