@llm4ts/core 3.3.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ConnectorConfig.d.ts +3 -1
- package/dist/ConnectorConfig.d.ts.map +1 -1
- package/dist/ConnectorConfig.js +4 -17
- package/dist/ConnectorConfig.js.map +1 -1
- package/dist/Models.d.ts +177 -22
- package/dist/Models.d.ts.map +1 -1
- package/dist/Models.js +144 -99
- package/dist/Models.js.map +1 -1
- package/dist/UsageLimits.d.ts.map +1 -1
- package/dist/UsageLimits.js +1 -0
- package/dist/UsageLimits.js.map +1 -1
- package/dist/eval/Checks.d.ts +1 -1
- package/dist/eval/Checks.d.ts.map +1 -1
- package/dist/eval/Checks.js.map +1 -1
- package/dist/eval/Eval.d.ts +4 -1
- package/dist/eval/Eval.d.ts.map +1 -1
- package/dist/eval/Eval.js.map +1 -1
- package/dist/eval/EvalSuite.d.ts +1 -2
- package/dist/eval/EvalSuite.d.ts.map +1 -1
- package/dist/eval/EvalSuite.js.map +1 -1
- package/dist/eval/Evaluator.d.ts +1 -6
- package/dist/eval/Evaluator.d.ts.map +1 -1
- package/dist/eval/Evaluator.js.map +1 -1
- package/dist/eval/Judge.d.ts +1 -2
- package/dist/eval/Judge.d.ts.map +1 -1
- package/dist/eval/Judge.js.map +1 -1
- package/dist/providers/AntigravityConnector.d.ts.map +1 -1
- package/dist/providers/AntigravityConnector.js +5 -4
- package/dist/providers/AntigravityConnector.js.map +1 -1
- package/dist/providers/ClaudeCliConnector.d.ts.map +1 -1
- package/dist/providers/ClaudeCliConnector.js +7 -6
- package/dist/providers/ClaudeCliConnector.js.map +1 -1
- package/dist/providers/CodexConnector.d.ts.map +1 -1
- package/dist/providers/CodexConnector.js +8 -7
- package/dist/providers/CodexConnector.js.map +1 -1
- package/dist/providers/ConnectorFactories.d.ts.map +1 -1
- package/dist/providers/ConnectorFactories.js +26 -20
- package/dist/providers/ConnectorFactories.js.map +1 -1
- package/dist/providers/CopilotConnector.d.ts.map +1 -1
- package/dist/providers/CopilotConnector.js +5 -4
- package/dist/providers/CopilotConnector.js.map +1 -1
- package/dist/providers/CursorConnector.d.ts.map +1 -1
- package/dist/providers/CursorConnector.js +6 -5
- package/dist/providers/CursorConnector.js.map +1 -1
- package/dist/providers/GeminiAcpSession.d.ts.map +1 -1
- package/dist/providers/GeminiAcpSession.js +3 -1
- package/dist/providers/GeminiAcpSession.js.map +1 -1
- package/dist/providers/GeminiCliProvider.d.ts.map +1 -1
- package/dist/providers/GeminiCliProvider.js +4 -3
- package/dist/providers/GeminiCliProvider.js.map +1 -1
- package/dist/providers/GrokCliConnector.d.ts.map +1 -1
- package/dist/providers/GrokCliConnector.js +11 -5
- package/dist/providers/GrokCliConnector.js.map +1 -1
- package/dist/providers/OpenCodeCliConnector.d.ts.map +1 -1
- package/dist/providers/OpenCodeCliConnector.js +6 -5
- package/dist/providers/OpenCodeCliConnector.js.map +1 -1
- package/dist/providers/PiConnector.d.ts.map +1 -1
- package/dist/providers/PiConnector.js +8 -7
- package/dist/providers/PiConnector.js.map +1 -1
- package/package.json +17 -20
- package/src/ConnectorConfig.ts +18 -17
- package/src/Models.ts +238 -101
- package/src/UsageLimits.ts +1 -0
- package/src/eval/Checks.ts +2 -2
- package/src/eval/Eval.ts +4 -1
- package/src/eval/EvalSuite.ts +1 -2
- package/src/eval/Evaluator.ts +1 -6
- package/src/eval/Judge.ts +2 -2
- package/src/providers/AntigravityConnector.ts +12 -4
- package/src/providers/ClaudeCliConnector.ts +9 -6
- package/src/providers/CodexConnector.ts +10 -7
- package/src/providers/ConnectorFactories.ts +53 -51
- package/src/providers/CopilotConnector.ts +6 -4
- package/src/providers/CursorConnector.ts +7 -5
- package/src/providers/GeminiAcpSession.ts +4 -1
- package/src/providers/GeminiCliProvider.ts +6 -3
- package/src/providers/GrokCliConnector.ts +12 -5
- package/src/providers/OpenCodeCliConnector.ts +7 -5
- package/src/providers/PiConnector.ts +15 -7
- package/dist/AgentSession.d.ts +0 -66
- package/dist/AgentSession.d.ts.map +0 -1
- package/dist/AgentSession.js +0 -53
- package/dist/AgentSession.js.map +0 -1
- package/dist/providers/ClaudeAgentSession.d.ts +0 -11
- package/dist/providers/ClaudeAgentSession.d.ts.map +0 -1
- package/dist/providers/ClaudeAgentSession.js +0 -161
- package/dist/providers/ClaudeAgentSession.js.map +0 -1
- package/src/AgentSession.ts +0 -69
- package/src/providers/ClaudeAgentSession.ts +0 -230
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect"
|
|
2
2
|
import * as Layer from "effect/Layer"
|
|
3
|
+
import * as Record from "effect/Record"
|
|
3
4
|
import {
|
|
4
5
|
ApiConnectorConfig,
|
|
5
6
|
CliConnectorConfig,
|
|
6
7
|
toLlmConfig,
|
|
7
|
-
type ConnectorConfig
|
|
8
|
+
type ConnectorConfig,
|
|
9
|
+
type ConnectorConfigOf
|
|
8
10
|
} from "../ConnectorConfig.ts"
|
|
9
11
|
import {
|
|
10
12
|
ConnectorRegistry,
|
|
@@ -15,7 +17,14 @@ import {
|
|
|
15
17
|
import type { ConnectorShape } from "../Connector.ts"
|
|
16
18
|
import { ConfigError, type LlmError } from "../Errors.ts"
|
|
17
19
|
import { HttpClient, type HttpClientShape } from "../HttpClient.ts"
|
|
18
|
-
import {
|
|
20
|
+
import {
|
|
21
|
+
ConnectorIds,
|
|
22
|
+
LlmConfig,
|
|
23
|
+
isCliConnectorName,
|
|
24
|
+
type ConnectorId,
|
|
25
|
+
type ConnectorKind,
|
|
26
|
+
type ConnectorName
|
|
27
|
+
} from "../Models.ts"
|
|
19
28
|
import { ProcessExecutor, type ProcessExecutorShape } from "../ProcessExecutor.ts"
|
|
20
29
|
import { TemporaryFiles, type TemporaryFilesShape } from "../TemporaryFiles.ts"
|
|
21
30
|
import { makeAnthropicProvider } from "./AnthropicProvider.ts"
|
|
@@ -76,58 +85,51 @@ const cliFactory = (
|
|
|
76
85
|
: Effect.fail(expectedConfig("Cli", id))
|
|
77
86
|
})
|
|
78
87
|
|
|
88
|
+
// A connector without an entry here does not compile. The registry lists
|
|
89
|
+
// them in this order.
|
|
90
|
+
const builders: {
|
|
91
|
+
readonly [K in ConnectorName]: (
|
|
92
|
+
config: ConnectorConfigOf<K>,
|
|
93
|
+
dependencies: ConnectorFactoryDependencies
|
|
94
|
+
) => ConnectorShape
|
|
95
|
+
} = {
|
|
96
|
+
OpenAI: (config, { http }) => makeOpenAIProvider(toLlmConfig(config), http),
|
|
97
|
+
Anthropic: (config, { http }) => makeAnthropicProvider(toLlmConfig(config), http),
|
|
98
|
+
GeminiApi: (config, { http }) => makeGeminiApiProvider(toLlmConfig(config), http),
|
|
99
|
+
LmStudio: (config, { http }) => makeLmStudioProvider(toLlmConfig(config), http),
|
|
100
|
+
Ollama: (config, { http }) => makeOllamaProvider(toLlmConfig(config), http),
|
|
101
|
+
MlxLm: (config, { http }) => makeMlxLmProvider(toLlmConfig(config), http),
|
|
102
|
+
ClaudeCli: (config, { process }) => makeClaudeCliConnector(config, process),
|
|
103
|
+
OpenCode: (config, { process }) => makeOpenCodeCliConnector(config, process),
|
|
104
|
+
GeminiCli: (config, { geminiCli }) =>
|
|
105
|
+
makeGeminiCliProvider(
|
|
106
|
+
LlmConfig.make({
|
|
107
|
+
provider: "GeminiCli",
|
|
108
|
+
model: config.model ?? "gemini-2.5-flash"
|
|
109
|
+
}),
|
|
110
|
+
geminiCli,
|
|
111
|
+
geminiCliExecutionContextFrom(config)
|
|
112
|
+
),
|
|
113
|
+
Codex: (config, { process, temporaryFiles }) =>
|
|
114
|
+
makeCodexConnector(config, process, temporaryFiles),
|
|
115
|
+
Copilot: (config, { process }) => makeCopilotConnector(config, process),
|
|
116
|
+
Pi: (config, { process }) => makePiConnector(config, process),
|
|
117
|
+
AntigravityCli: (config, { process }) => makeAntigravityConnector(config, process),
|
|
118
|
+
Grok: (config, { process }) => makeGrokCliConnector(config, process),
|
|
119
|
+
Cursor: (config, { process }) => makeCursorConnector(config, process),
|
|
120
|
+
Mock: (config) => makeMockProvider(toLlmConfig(config))
|
|
121
|
+
}
|
|
122
|
+
|
|
79
123
|
export const createConnectorRegistry = (
|
|
80
124
|
dependencies: ConnectorFactoryDependencies
|
|
81
125
|
): ConnectorRegistryShape =>
|
|
82
|
-
makeConnectorRegistry(
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
apiFactory(ConnectorIds.GeminiApi, (config) =>
|
|
90
|
-
makeGeminiApiProvider(toLlmConfig(config), dependencies.http)
|
|
91
|
-
),
|
|
92
|
-
apiFactory(ConnectorIds.LmStudio, (config) =>
|
|
93
|
-
makeLmStudioProvider(toLlmConfig(config), dependencies.http)
|
|
94
|
-
),
|
|
95
|
-
apiFactory(ConnectorIds.Ollama, (config) =>
|
|
96
|
-
makeOllamaProvider(toLlmConfig(config), dependencies.http)
|
|
97
|
-
),
|
|
98
|
-
apiFactory(ConnectorIds.MlxLm, (config) =>
|
|
99
|
-
makeMlxLmProvider(toLlmConfig(config), dependencies.http)
|
|
100
|
-
),
|
|
101
|
-
cliFactory(ConnectorIds.ClaudeCli, (config) =>
|
|
102
|
-
makeClaudeCliConnector(config, dependencies.process)
|
|
103
|
-
),
|
|
104
|
-
cliFactory(ConnectorIds.OpenCode, (config) =>
|
|
105
|
-
makeOpenCodeCliConnector(config, dependencies.process)
|
|
106
|
-
),
|
|
107
|
-
cliFactory(ConnectorIds.GeminiCli, (config) =>
|
|
108
|
-
makeGeminiCliProvider(
|
|
109
|
-
LlmConfig.make({
|
|
110
|
-
provider: "GeminiCli",
|
|
111
|
-
model: config.model ?? "gemini-2.5-flash"
|
|
112
|
-
}),
|
|
113
|
-
dependencies.geminiCli,
|
|
114
|
-
geminiCliExecutionContextFrom(config)
|
|
115
|
-
)
|
|
116
|
-
),
|
|
117
|
-
cliFactory(ConnectorIds.Codex, (config) =>
|
|
118
|
-
makeCodexConnector(config, dependencies.process, dependencies.temporaryFiles)
|
|
119
|
-
),
|
|
120
|
-
cliFactory(ConnectorIds.Copilot, (config) =>
|
|
121
|
-
makeCopilotConnector(config, dependencies.process)
|
|
122
|
-
),
|
|
123
|
-
cliFactory(ConnectorIds.Pi, (config) => makePiConnector(config, dependencies.process)),
|
|
124
|
-
cliFactory(ConnectorIds.AntigravityCli, (config) =>
|
|
125
|
-
makeAntigravityConnector(config, dependencies.process)
|
|
126
|
-
),
|
|
127
|
-
cliFactory(ConnectorIds.Grok, (config) => makeGrokCliConnector(config, dependencies.process)),
|
|
128
|
-
cliFactory(ConnectorIds.Cursor, (config) => makeCursorConnector(config, dependencies.process)),
|
|
129
|
-
apiFactory(ConnectorIds.Mock, (config) => makeMockProvider(toLlmConfig(config)))
|
|
130
|
-
])
|
|
126
|
+
makeConnectorRegistry(
|
|
127
|
+
Record.keys(builders).map((name) =>
|
|
128
|
+
isCliConnectorName(name)
|
|
129
|
+
? cliFactory(ConnectorIds[name], (config) => builders[name](config, dependencies))
|
|
130
|
+
: apiFactory(ConnectorIds[name], (config) => builders[name](config, dependencies))
|
|
131
|
+
)
|
|
132
|
+
)
|
|
131
133
|
|
|
132
134
|
export const ConnectorRegistryLive = Layer.effect(
|
|
133
135
|
ConnectorRegistry,
|
|
@@ -2,12 +2,14 @@ import * as Effect from "effect/Effect"
|
|
|
2
2
|
import * as Stream from "effect/Stream"
|
|
3
3
|
import { makeCliConnector, type CliConnectorShape } from "../Connector.ts"
|
|
4
4
|
import type { CliConnectorConfig } from "../ConnectorConfig.ts"
|
|
5
|
-
import { ConnectorCapabilities, ConnectorIds, LlmChunk } from "../Models.ts"
|
|
5
|
+
import { ConnectorCapabilities, ConnectorIds, LlmChunk, cliExecutable } from "../Models.ts"
|
|
6
6
|
import type { ProcessExecutorShape } from "../ProcessExecutor.ts"
|
|
7
7
|
import { failClassifiedCliError } from "./CliSupport.ts"
|
|
8
8
|
|
|
9
|
+
const executable = cliExecutable("Copilot")
|
|
10
|
+
|
|
9
11
|
export const buildCopilotArgv = (prompt: string): ReadonlyArray<string> => [
|
|
10
|
-
|
|
12
|
+
executable,
|
|
11
13
|
"copilot",
|
|
12
14
|
"suggest",
|
|
13
15
|
"-t",
|
|
@@ -46,7 +48,7 @@ export const makeCopilotConnector = (
|
|
|
46
48
|
readOnlyEnforcement: "ignored"
|
|
47
49
|
}),
|
|
48
50
|
buildArgv: (prompt, _context) => buildCopilotArgv(prompt),
|
|
49
|
-
buildInteractiveArgv: (_context) => [
|
|
51
|
+
buildInteractiveArgv: (_context) => [executable, "copilot"],
|
|
50
52
|
complete,
|
|
51
53
|
completeStream: (prompt) =>
|
|
52
54
|
Stream.fromEffect(complete(prompt)).pipe(
|
|
@@ -55,6 +57,6 @@ export const makeCopilotConnector = (
|
|
|
55
57
|
// No auth probe: `gh auth status` validates every stored token against
|
|
56
58
|
// the GitHub API (and `gh auth token` would print the secret), so there
|
|
57
59
|
// is no offline login check to run; the login stays Unknown.
|
|
58
|
-
versionProbe: { executor, binary:
|
|
60
|
+
versionProbe: { executor, binary: executable, versionArgs: ["copilot", "--version"], cwd: "." }
|
|
59
61
|
})
|
|
60
62
|
}
|
|
@@ -2,7 +2,7 @@ import * as Effect from "effect/Effect"
|
|
|
2
2
|
import * as Stream from "effect/Stream"
|
|
3
3
|
import { makeCliConnector, type CliAuthProbe, type CliConnectorShape } from "../Connector.ts"
|
|
4
4
|
import type { CliConnectorConfig } from "../ConnectorConfig.ts"
|
|
5
|
-
import { ConnectorCapabilities, ConnectorIds, LlmChunk } from "../Models.ts"
|
|
5
|
+
import { ConnectorCapabilities, ConnectorIds, LlmChunk, cliExecutable } from "../Models.ts"
|
|
6
6
|
import type { ProcessExecutorShape } from "../ProcessExecutor.ts"
|
|
7
7
|
import {
|
|
8
8
|
failClassifiedCliError,
|
|
@@ -19,6 +19,8 @@ import {
|
|
|
19
19
|
type JsonValue
|
|
20
20
|
} from "./CliSupport.ts"
|
|
21
21
|
|
|
22
|
+
const executable = cliExecutable("Cursor")
|
|
23
|
+
|
|
22
24
|
/**
|
|
23
25
|
* `cursor-agent status --format json` (alias `whoami`) answers
|
|
24
26
|
* `{"isAuthenticated": true|false, ...}` from the stored tokens.
|
|
@@ -84,7 +86,7 @@ export const makeCursorConnector = (
|
|
|
84
86
|
const cwd = config.workingDir ?? "."
|
|
85
87
|
const extraArgs = cursorExtraArgs(config)
|
|
86
88
|
const buildArgv = (prompt: string): ReadonlyArray<string> => [
|
|
87
|
-
|
|
89
|
+
executable,
|
|
88
90
|
...extraArgs,
|
|
89
91
|
"-p",
|
|
90
92
|
prompt
|
|
@@ -107,7 +109,7 @@ export const makeCursorConnector = (
|
|
|
107
109
|
const completeStream = (prompt: string) =>
|
|
108
110
|
executor
|
|
109
111
|
.runStreaming(
|
|
110
|
-
[
|
|
112
|
+
[executable, "--output-format", "stream-json", ...extraArgs, "-p", prompt],
|
|
111
113
|
cwd,
|
|
112
114
|
config.envVars
|
|
113
115
|
)
|
|
@@ -133,9 +135,9 @@ export const makeCursorConnector = (
|
|
|
133
135
|
readOnlyEnforcement: "ignored"
|
|
134
136
|
}),
|
|
135
137
|
buildArgv: (prompt, _context) => buildArgv(prompt),
|
|
136
|
-
buildInteractiveArgv: (_context) => [
|
|
138
|
+
buildInteractiveArgv: (_context) => [executable, ...extraArgs],
|
|
137
139
|
complete,
|
|
138
140
|
completeStream,
|
|
139
|
-
versionProbe: { executor, binary:
|
|
141
|
+
versionProbe: { executor, binary: executable, cwd, authProbe: cursorAuthProbe }
|
|
140
142
|
})
|
|
141
143
|
}
|
|
@@ -16,6 +16,9 @@ import {
|
|
|
16
16
|
type JsonRecord,
|
|
17
17
|
type JsonValue
|
|
18
18
|
} from "./CliSupport.ts"
|
|
19
|
+
import { cliExecutable } from "../Models.ts"
|
|
20
|
+
|
|
21
|
+
const executable = cliExecutable("GeminiCli")
|
|
19
22
|
|
|
20
23
|
/**
|
|
21
24
|
* ACP (Agent Client Protocol, `gemini --experimental-acp`) message shapes
|
|
@@ -28,7 +31,7 @@ import {
|
|
|
28
31
|
* integration smoke test, not a substitute for that determinism.
|
|
29
32
|
*/
|
|
30
33
|
export const geminiAcpArgv = (model: string | undefined): ReadonlyArray<string> => [
|
|
31
|
-
|
|
34
|
+
executable,
|
|
32
35
|
"--experimental-acp",
|
|
33
36
|
...(model === undefined ? [] : ["-m", model])
|
|
34
37
|
]
|
|
@@ -22,7 +22,8 @@ import {
|
|
|
22
22
|
TokenUsage,
|
|
23
23
|
type JsonSchema,
|
|
24
24
|
type LlmConfig,
|
|
25
|
-
type Message
|
|
25
|
+
type Message,
|
|
26
|
+
cliExecutable
|
|
26
27
|
} from "../Models.ts"
|
|
27
28
|
import { collect } from "../Streaming.ts"
|
|
28
29
|
import { jsonCandidates, parseFromText, withSchemaHint } from "../StructuredOutput.ts"
|
|
@@ -41,6 +42,8 @@ import {
|
|
|
41
42
|
type JsonValue
|
|
42
43
|
} from "./CliSupport.ts"
|
|
43
44
|
|
|
45
|
+
const executable = cliExecutable("GeminiCli")
|
|
46
|
+
|
|
44
47
|
export class GeminiCliLogLine extends Schema.TaggedClass<GeminiCliLogLine>()("LogLine", {
|
|
45
48
|
line: Schema.String
|
|
46
49
|
}) {}
|
|
@@ -1005,14 +1008,14 @@ export const makeGeminiCliProvider = (
|
|
|
1005
1008
|
id: ConnectorIds.GeminiCli,
|
|
1006
1009
|
interactionSupport: "InteractiveStdin",
|
|
1007
1010
|
buildArgv: (prompt, context) => [
|
|
1008
|
-
|
|
1011
|
+
executable,
|
|
1009
1012
|
"--yolo",
|
|
1010
1013
|
...(context.repoPath.length === 0 ? [] : ["--include-directories", context.repoPath]),
|
|
1011
1014
|
"-p",
|
|
1012
1015
|
prompt
|
|
1013
1016
|
],
|
|
1014
1017
|
buildInteractiveArgv: (context) => [
|
|
1015
|
-
|
|
1018
|
+
executable,
|
|
1016
1019
|
"--yolo",
|
|
1017
1020
|
...(context.repoPath.length === 0 ? [] : ["--include-directories", context.repoPath])
|
|
1018
1021
|
],
|
|
@@ -2,7 +2,7 @@ import * as Effect from "effect/Effect"
|
|
|
2
2
|
import * as Stream from "effect/Stream"
|
|
3
3
|
import { makeCliConnector, type CliConnectorShape } from "../Connector.ts"
|
|
4
4
|
import type { CliConnectorConfig } from "../ConnectorConfig.ts"
|
|
5
|
-
import { ConnectorIds, LlmChunk, TokenUsage } from "../Models.ts"
|
|
5
|
+
import { ConnectorIds, LlmChunk, TokenUsage, cliExecutable } from "../Models.ts"
|
|
6
6
|
import type { ProcessExecutorShape } from "../ProcessExecutor.ts"
|
|
7
7
|
import {
|
|
8
8
|
failClassifiedCliError,
|
|
@@ -16,6 +16,8 @@ import {
|
|
|
16
16
|
usageEventChunk
|
|
17
17
|
} from "./CliSupport.ts"
|
|
18
18
|
|
|
19
|
+
const executable = cliExecutable("Grok")
|
|
20
|
+
|
|
19
21
|
export const grokCliExtraArgs = (config: CliConnectorConfig): ReadonlyArray<string> => [
|
|
20
22
|
...optionalModelArgs(config.model),
|
|
21
23
|
...(config.readOnly ? ["--permission-mode", "plan"] : ["--always-approve"]),
|
|
@@ -75,7 +77,12 @@ export const makeGrokCliConnector = (
|
|
|
75
77
|
): CliConnectorShape => {
|
|
76
78
|
const cwd = config.workingDir ?? "."
|
|
77
79
|
const extraArgs = grokCliExtraArgs(config)
|
|
78
|
-
const buildArgv = (prompt: string): ReadonlyArray<string> => [
|
|
80
|
+
const buildArgv = (prompt: string): ReadonlyArray<string> => [
|
|
81
|
+
executable,
|
|
82
|
+
...extraArgs,
|
|
83
|
+
"-p",
|
|
84
|
+
prompt
|
|
85
|
+
]
|
|
79
86
|
|
|
80
87
|
const complete = Effect.fn("@llm4ts/core/providers/GrokCliConnector.complete")(function* (
|
|
81
88
|
prompt: string
|
|
@@ -91,7 +98,7 @@ export const makeGrokCliConnector = (
|
|
|
91
98
|
const completeStream = (prompt: string) =>
|
|
92
99
|
executor
|
|
93
100
|
.runStreaming(
|
|
94
|
-
[
|
|
101
|
+
[executable, "--output-format", "streaming-json", ...extraArgs, "-p", prompt],
|
|
95
102
|
cwd,
|
|
96
103
|
config.envVars
|
|
97
104
|
)
|
|
@@ -109,10 +116,10 @@ export const makeGrokCliConnector = (
|
|
|
109
116
|
id: ConnectorIds.Grok,
|
|
110
117
|
interactionSupport: "ContinuationOnly",
|
|
111
118
|
buildArgv: (prompt, _context) => buildArgv(prompt),
|
|
112
|
-
buildInteractiveArgv: (_context) => [
|
|
119
|
+
buildInteractiveArgv: (_context) => [executable, ...extraArgs],
|
|
113
120
|
complete,
|
|
114
121
|
completeStream,
|
|
115
122
|
// No auth probe: grok offers `login` but no status subcommand; Unknown.
|
|
116
|
-
versionProbe: { executor, binary:
|
|
123
|
+
versionProbe: { executor, binary: executable, cwd }
|
|
117
124
|
})
|
|
118
125
|
}
|
|
@@ -2,7 +2,7 @@ import * as Effect from "effect/Effect"
|
|
|
2
2
|
import * as Stream from "effect/Stream"
|
|
3
3
|
import { makeCliConnector, type CliConnectorShape } from "../Connector.ts"
|
|
4
4
|
import type { CliConnectorConfig } from "../ConnectorConfig.ts"
|
|
5
|
-
import { ConnectorIds, LlmChunk, TokenUsage } from "../Models.ts"
|
|
5
|
+
import { ConnectorIds, LlmChunk, TokenUsage, cliExecutable } from "../Models.ts"
|
|
6
6
|
import type { ProcessExecutorShape } from "../ProcessExecutor.ts"
|
|
7
7
|
import {
|
|
8
8
|
failClassifiedCliError,
|
|
@@ -17,6 +17,8 @@ import {
|
|
|
17
17
|
usageEventChunk
|
|
18
18
|
} from "./CliSupport.ts"
|
|
19
19
|
|
|
20
|
+
const executable = cliExecutable("OpenCode")
|
|
21
|
+
|
|
20
22
|
export const openCodeCliExtraArgs = (config: CliConnectorConfig): ReadonlyArray<string> => [
|
|
21
23
|
...optionalModelArgs(config.model),
|
|
22
24
|
...(config.readOnly ? ["--agent", "plan"] : ["--auto"]),
|
|
@@ -98,7 +100,7 @@ export const makeOpenCodeCliConnector = (
|
|
|
98
100
|
const cwd = config.workingDir ?? "."
|
|
99
101
|
const extraArgs = openCodeCliExtraArgs(config)
|
|
100
102
|
const buildArgv = (prompt: string): ReadonlyArray<string> => [
|
|
101
|
-
|
|
103
|
+
executable,
|
|
102
104
|
"run",
|
|
103
105
|
...extraArgs,
|
|
104
106
|
prompt
|
|
@@ -122,7 +124,7 @@ export const makeOpenCodeCliConnector = (
|
|
|
122
124
|
const completeStream = (prompt: string) =>
|
|
123
125
|
executor
|
|
124
126
|
.runStreaming(
|
|
125
|
-
[
|
|
127
|
+
[executable, "run", "--format", "json", ...extraArgs, prompt],
|
|
126
128
|
cwd,
|
|
127
129
|
config.envVars
|
|
128
130
|
)
|
|
@@ -142,11 +144,11 @@ export const makeOpenCodeCliConnector = (
|
|
|
142
144
|
id: ConnectorIds.OpenCode,
|
|
143
145
|
interactionSupport: "ContinuationOnly",
|
|
144
146
|
buildArgv: (prompt, _context) => buildArgv(prompt),
|
|
145
|
-
buildInteractiveArgv: (_context) => [
|
|
147
|
+
buildInteractiveArgv: (_context) => [executable],
|
|
146
148
|
complete,
|
|
147
149
|
completeStream,
|
|
148
150
|
// No auth probe: `opencode auth list` lists stored credentials by
|
|
149
151
|
// provider, not whether the provider this seat runs has any; Unknown.
|
|
150
|
-
versionProbe: { executor, binary:
|
|
152
|
+
versionProbe: { executor, binary: executable, cwd }
|
|
151
153
|
})
|
|
152
154
|
}
|
|
@@ -3,7 +3,13 @@ import * as Stream from "effect/Stream"
|
|
|
3
3
|
import { makeCliConnector, type CliAuthProbe, type CliConnectorShape } from "../Connector.ts"
|
|
4
4
|
import type { CliConnectorConfig } from "../ConnectorConfig.ts"
|
|
5
5
|
import { InvalidRequestError, ProviderError, type LlmError } from "../Errors.ts"
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
ConnectorCapabilities,
|
|
8
|
+
ConnectorIds,
|
|
9
|
+
LlmChunk,
|
|
10
|
+
TokenUsage,
|
|
11
|
+
cliExecutable
|
|
12
|
+
} from "../Models.ts"
|
|
7
13
|
import type { ProcessExecutorShape } from "../ProcessExecutor.ts"
|
|
8
14
|
import {
|
|
9
15
|
atLeastVersion,
|
|
@@ -26,6 +32,8 @@ import {
|
|
|
26
32
|
statusChunk
|
|
27
33
|
} from "./CliSupport.ts"
|
|
28
34
|
|
|
35
|
+
const executable = cliExecutable("Pi")
|
|
36
|
+
|
|
29
37
|
/**
|
|
30
38
|
* `pi auth check --model <model> --no-refresh --json` says whether pi holds
|
|
31
39
|
* credentials for the provider that model resolves to:
|
|
@@ -235,7 +243,7 @@ export const makePiConnector = (
|
|
|
235
243
|
const checkFloorOnce: Effect.Effect<void, LlmError> = Effect.suspend(() =>
|
|
236
244
|
floorChecked
|
|
237
245
|
? Effect.void
|
|
238
|
-
: Effect.flatMap(executor.run([
|
|
246
|
+
: Effect.flatMap(executor.run([executable, "--version"], cwd, config.envVars), (result) => {
|
|
239
247
|
const problem = piReadOnlyProblem([...result.stdout, ...result.stderr].join("\n"))
|
|
240
248
|
return problem === undefined
|
|
241
249
|
? Effect.sync(() => {
|
|
@@ -250,7 +258,7 @@ export const makePiConnector = (
|
|
|
250
258
|
) {
|
|
251
259
|
yield* checkFloorOnce
|
|
252
260
|
const result = yield* executor.runWithStdin(
|
|
253
|
-
[
|
|
261
|
+
[executable, "-p", ...extraArgs],
|
|
254
262
|
cwd,
|
|
255
263
|
config.envVars,
|
|
256
264
|
prompt
|
|
@@ -273,7 +281,7 @@ export const makePiConnector = (
|
|
|
273
281
|
Stream.drain,
|
|
274
282
|
Stream.concat(
|
|
275
283
|
executor.runStreamingWithStdin(
|
|
276
|
-
[
|
|
284
|
+
[executable, "-p", "--mode", "json", ...extraArgs],
|
|
277
285
|
cwd,
|
|
278
286
|
config.envVars,
|
|
279
287
|
prompt
|
|
@@ -306,13 +314,13 @@ export const makePiConnector = (
|
|
|
306
314
|
}),
|
|
307
315
|
// `--` ends the options (pi >= 0.84.3): a prompt starting with a dash
|
|
308
316
|
// is a prompt, not a flag. Stdin paths need no separator.
|
|
309
|
-
buildArgv: (prompt, _context) => [
|
|
310
|
-
buildInteractiveArgv: (_context) => [
|
|
317
|
+
buildArgv: (prompt, _context) => [executable, "-p", ...extraArgs, "--", prompt],
|
|
318
|
+
buildInteractiveArgv: (_context) => [executable, ...extraArgs],
|
|
311
319
|
complete,
|
|
312
320
|
completeStream,
|
|
313
321
|
versionProbe: {
|
|
314
322
|
executor,
|
|
315
|
-
binary:
|
|
323
|
+
binary: executable,
|
|
316
324
|
cwd,
|
|
317
325
|
...(config.model === undefined ? {} : { authProbe: piAuthProbe(config.model) })
|
|
318
326
|
}
|
package/dist/AgentSession.d.ts
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import type * as Effect from "effect/Effect";
|
|
2
|
-
import * as Schema from "effect/Schema";
|
|
3
|
-
import type * as Stream from "effect/Stream";
|
|
4
|
-
import type { LlmError } from "./Errors.ts";
|
|
5
|
-
import { TokenUsage } from "./Models.ts";
|
|
6
|
-
declare const SessionTextDelta_base: Schema.Class<SessionTextDelta, Schema.TaggedStruct<"TextDelta", {
|
|
7
|
-
readonly text: Schema.String;
|
|
8
|
-
}>, {}>;
|
|
9
|
-
export declare class SessionTextDelta extends SessionTextDelta_base {
|
|
10
|
-
}
|
|
11
|
-
declare const SessionToolUse_base: Schema.Class<SessionToolUse, Schema.TaggedStruct<"ToolUse", {
|
|
12
|
-
readonly tool: Schema.String;
|
|
13
|
-
readonly rawInput: Schema.String;
|
|
14
|
-
readonly id: Schema.String;
|
|
15
|
-
}>, {}>;
|
|
16
|
-
export declare class SessionToolUse extends SessionToolUse_base {
|
|
17
|
-
}
|
|
18
|
-
declare const SessionToolResult_base: Schema.Class<SessionToolResult, Schema.TaggedStruct<"ToolResult", {
|
|
19
|
-
readonly id: Schema.String;
|
|
20
|
-
readonly status: Schema.String;
|
|
21
|
-
readonly content: Schema.String;
|
|
22
|
-
}>, {}>;
|
|
23
|
-
export declare class SessionToolResult extends SessionToolResult_base {
|
|
24
|
-
}
|
|
25
|
-
declare const SessionAskUser_base: Schema.Class<SessionAskUser, Schema.TaggedStruct<"AskUser", {
|
|
26
|
-
readonly question: Schema.String;
|
|
27
|
-
}>, {}>;
|
|
28
|
-
export declare class SessionAskUser extends SessionAskUser_base {
|
|
29
|
-
}
|
|
30
|
-
declare const SessionApprovalRequest_base: Schema.Class<SessionApprovalRequest, Schema.TaggedStruct<"ApprovalRequest", {
|
|
31
|
-
readonly tool: Schema.String;
|
|
32
|
-
readonly rawInput: Schema.String;
|
|
33
|
-
readonly id: Schema.String;
|
|
34
|
-
}>, {}>;
|
|
35
|
-
export declare class SessionApprovalRequest extends SessionApprovalRequest_base {
|
|
36
|
-
}
|
|
37
|
-
declare const SessionUsage_base: Schema.Class<SessionUsage, Schema.TaggedStruct<"Usage", {
|
|
38
|
-
readonly usage: typeof TokenUsage;
|
|
39
|
-
readonly model: Schema.optionalKey<Schema.String>;
|
|
40
|
-
}>, {}>;
|
|
41
|
-
export declare class SessionUsage extends SessionUsage_base {
|
|
42
|
-
}
|
|
43
|
-
declare const SessionDone_base: Schema.Class<SessionDone, Schema.TaggedStruct<"Done", {
|
|
44
|
-
readonly result: Schema.String;
|
|
45
|
-
}>, {}>;
|
|
46
|
-
export declare class SessionDone extends SessionDone_base {
|
|
47
|
-
}
|
|
48
|
-
export declare const SessionEvent: Schema.Union<readonly [typeof SessionTextDelta, typeof SessionToolUse, typeof SessionToolResult, typeof SessionAskUser, typeof SessionApprovalRequest, typeof SessionUsage, typeof SessionDone]>;
|
|
49
|
-
export type SessionEvent = typeof SessionEvent.Type;
|
|
50
|
-
declare const SessionResult_base: Schema.Class<SessionResult, Schema.Struct<{
|
|
51
|
-
readonly text: Schema.String;
|
|
52
|
-
readonly usage: Schema.optionalKey<typeof TokenUsage>;
|
|
53
|
-
readonly model: Schema.optionalKey<Schema.String>;
|
|
54
|
-
}>, {}>;
|
|
55
|
-
export declare class SessionResult extends SessionResult_base {
|
|
56
|
-
}
|
|
57
|
-
export interface AgentSessionShape {
|
|
58
|
-
readonly events: Stream.Stream<SessionEvent, LlmError>;
|
|
59
|
-
readonly sendUserMessage: (text: string) => Effect.Effect<void, LlmError>;
|
|
60
|
-
readonly respondToAsk: (answer: string) => Effect.Effect<void, LlmError>;
|
|
61
|
-
readonly respondToApproval: (id: string, approved: boolean) => Effect.Effect<void, LlmError>;
|
|
62
|
-
readonly awaitResult: Effect.Effect<SessionResult, LlmError>;
|
|
63
|
-
readonly cancel: Effect.Effect<void>;
|
|
64
|
-
}
|
|
65
|
-
export {};
|
|
66
|
-
//# sourceMappingURL=AgentSession.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AgentSession.d.ts","sourceRoot":"","sources":["../src/AgentSession.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;;;;AAExC,qBAAa,gBAAiB,SAAQ,qBAEpC;CAAG;;;;;;AAEL,qBAAa,cAAe,SAAQ,mBAIlC;CAAG;;;;;;AAEL,qBAAa,iBAAkB,SAAQ,sBAIrC;CAAG;;;;AAEL,qBAAa,cAAe,SAAQ,mBAElC;CAAG;;;;;;AAEL,qBAAa,sBAAuB,SAAQ,2BAO3C;CAAG;;;;;AAEJ,qBAAa,YAAa,SAAQ,iBAGhC;CAAG;;;;AAEL,qBAAa,WAAY,SAAQ,gBAE/B;CAAG;AAEL,eAAO,MAAM,YAAY,kMAQvB,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;;;;;;AAEnD,qBAAa,aAAc,SAAQ,kBAIjC;CAAG;AAEL,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;IACtD,QAAQ,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IACzE,QAAQ,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IACxE,QAAQ,CAAC,iBAAiB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC5F,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAA;IAC5D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CACrC"}
|
package/dist/AgentSession.js
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import * as Schema from "effect/Schema";
|
|
2
|
-
import { TokenUsage } from "./Models.js";
|
|
3
|
-
export class SessionTextDelta extends Schema.TaggedClass()("TextDelta", {
|
|
4
|
-
text: Schema.String
|
|
5
|
-
}) {
|
|
6
|
-
}
|
|
7
|
-
export class SessionToolUse extends Schema.TaggedClass()("ToolUse", {
|
|
8
|
-
tool: Schema.String,
|
|
9
|
-
rawInput: Schema.String,
|
|
10
|
-
id: Schema.String
|
|
11
|
-
}) {
|
|
12
|
-
}
|
|
13
|
-
export class SessionToolResult extends Schema.TaggedClass()("ToolResult", {
|
|
14
|
-
id: Schema.String,
|
|
15
|
-
status: Schema.String,
|
|
16
|
-
content: Schema.String
|
|
17
|
-
}) {
|
|
18
|
-
}
|
|
19
|
-
export class SessionAskUser extends Schema.TaggedClass()("AskUser", {
|
|
20
|
-
question: Schema.String
|
|
21
|
-
}) {
|
|
22
|
-
}
|
|
23
|
-
export class SessionApprovalRequest extends Schema.TaggedClass()("ApprovalRequest", {
|
|
24
|
-
tool: Schema.String,
|
|
25
|
-
rawInput: Schema.String,
|
|
26
|
-
id: Schema.String
|
|
27
|
-
}) {
|
|
28
|
-
}
|
|
29
|
-
export class SessionUsage extends Schema.TaggedClass()("Usage", {
|
|
30
|
-
usage: TokenUsage,
|
|
31
|
-
model: Schema.optionalKey(Schema.String)
|
|
32
|
-
}) {
|
|
33
|
-
}
|
|
34
|
-
export class SessionDone extends Schema.TaggedClass()("Done", {
|
|
35
|
-
result: Schema.String
|
|
36
|
-
}) {
|
|
37
|
-
}
|
|
38
|
-
export const SessionEvent = Schema.Union([
|
|
39
|
-
SessionTextDelta,
|
|
40
|
-
SessionToolUse,
|
|
41
|
-
SessionToolResult,
|
|
42
|
-
SessionAskUser,
|
|
43
|
-
SessionApprovalRequest,
|
|
44
|
-
SessionUsage,
|
|
45
|
-
SessionDone
|
|
46
|
-
]);
|
|
47
|
-
export class SessionResult extends Schema.Class("SessionResult")({
|
|
48
|
-
text: Schema.String,
|
|
49
|
-
usage: Schema.optionalKey(TokenUsage),
|
|
50
|
-
model: Schema.optionalKey(Schema.String)
|
|
51
|
-
}) {
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=AgentSession.js.map
|
package/dist/AgentSession.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AgentSession.js","sourceRoot":"","sources":["../src/AgentSession.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,EAAoB,CAAC,WAAW,EAAE;IACxF,IAAI,EAAE,MAAM,CAAC,MAAM;CACpB,CAAC;CAAG;AAEL,MAAM,OAAO,cAAe,SAAQ,MAAM,CAAC,WAAW,EAAkB,CAAC,SAAS,EAAE;IAClF,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,EAAE,EAAE,MAAM,CAAC,MAAM;CAClB,CAAC;CAAG;AAEL,MAAM,OAAO,iBAAkB,SAAQ,MAAM,CAAC,WAAW,EAAqB,CAAC,YAAY,EAAE;IAC3F,EAAE,EAAE,MAAM,CAAC,MAAM;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CAAC;CAAG;AAEL,MAAM,OAAO,cAAe,SAAQ,MAAM,CAAC,WAAW,EAAkB,CAAC,SAAS,EAAE;IAClF,QAAQ,EAAE,MAAM,CAAC,MAAM;CACxB,CAAC;CAAG;AAEL,MAAM,OAAO,sBAAuB,SAAQ,MAAM,CAAC,WAAW,EAA0B,CACtF,iBAAiB,EACjB;IACE,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,EAAE,EAAE,MAAM,CAAC,MAAM;CAClB,CACF;CAAG;AAEJ,MAAM,OAAO,YAAa,SAAQ,MAAM,CAAC,WAAW,EAAgB,CAAC,OAAO,EAAE;IAC5E,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;CACzC,CAAC;CAAG;AAEL,MAAM,OAAO,WAAY,SAAQ,MAAM,CAAC,WAAW,EAAe,CAAC,MAAM,EAAE;IACzE,MAAM,EAAE,MAAM,CAAC,MAAM;CACtB,CAAC;CAAG;AAEL,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;IACvC,gBAAgB;IAChB,cAAc;IACd,iBAAiB;IACjB,cAAc;IACd,sBAAsB;IACtB,YAAY;IACZ,WAAW;CACZ,CAAC,CAAA;AAGF,MAAM,OAAO,aAAc,SAAQ,MAAM,CAAC,KAAK,CAAgB,eAAe,CAAC,CAAC;IAC9E,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC;IACrC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;CACzC,CAAC;CAAG"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import * as Effect from "effect/Effect";
|
|
2
|
-
import type * as Scope from "effect/Scope";
|
|
3
|
-
import { type AgentSessionShape, type SessionEvent } from "../AgentSession.ts";
|
|
4
|
-
import { ProviderError } from "../Errors.ts";
|
|
5
|
-
import type { ProcessExecutorShape } from "../ProcessExecutor.ts";
|
|
6
|
-
export declare const claudeSessionArgv: (model: string | undefined, extraFlags: ReadonlyArray<string>) => ReadonlyArray<string>;
|
|
7
|
-
export declare const claudeUserMessageJson: (text: string) => string;
|
|
8
|
-
export declare const parseClaudeSessionLine: (line: string) => ReadonlyArray<SessionEvent>;
|
|
9
|
-
export declare const claudeSessionInitModel: (line: string) => string | undefined;
|
|
10
|
-
export declare const openClaudeAgentSession: (executor: ProcessExecutorShape, argv: readonly string[], cwd: string, envVars?: Readonly<Record<string, string>> | undefined) => Effect.Effect<AgentSessionShape, ProviderError | import("../Errors.ts").UsageLimitError | import("../Errors.ts").AuthenticationError | import("../Errors.ts").InvalidRequestError | import("../Errors.ts").ParseError | import("../Errors.ts").ToolError | import("../Errors.ts").ConfigError | import("../Errors.ts").RateLimitError | import("../Errors.ts").TimeoutError | import("../Errors.ts").TurnLimitError, Scope.Scope>;
|
|
11
|
-
//# sourceMappingURL=ClaudeAgentSession.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ClaudeAgentSession.d.ts","sourceRoot":"","sources":["../../src/providers/ClaudeAgentSession.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAIvC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAE1C,OAAO,EAOL,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,aAAa,EAAiB,MAAM,cAAc,CAAA;AAE3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAajE,eAAO,MAAM,iBAAiB,GAC5B,OAAO,MAAM,GAAG,SAAS,EACzB,YAAY,aAAa,CAAC,MAAM,CAAC,KAChC,aAAa,CAAC,MAAM,CAUtB,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,MAAM,MAAM,KAAG,MAOjD,CAAA;AAyEJ,eAAO,MAAM,sBAAsB,GAAI,MAAM,MAAM,KAAG,aAAa,CAAC,YAAY,CAe/E,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,SAK9D,CAAA;AAED,eAAO,MAAM,sBAAsB,qiBA8ElC,CAAA"}
|