@usine/agents 0.3.0 → 0.5.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/LICENSE +661 -21
- package/README.md +100 -30
- package/dist/child-host/child-host.d.ts +90 -0
- package/dist/child-host/child-host.d.ts.map +1 -0
- package/dist/child-host/child-host.js +119 -0
- package/dist/child-host/child-host.js.map +1 -0
- package/dist/child-host/command.d.ts +22 -0
- package/dist/child-host/command.d.ts.map +1 -0
- package/dist/child-host/command.js +43 -0
- package/dist/child-host/command.js.map +1 -0
- package/dist/openai-prices.d.ts +8 -0
- package/dist/openai-prices.d.ts.map +1 -0
- package/dist/openai-prices.js +28 -0
- package/dist/openai-prices.js.map +1 -0
- package/dist/pi/authentication.d.ts +11 -2
- package/dist/pi/authentication.d.ts.map +1 -1
- package/dist/pi/authentication.js +15 -2
- package/dist/pi/authentication.js.map +1 -1
- package/dist/pi/children.d.ts +1 -4
- package/dist/pi/children.d.ts.map +1 -1
- package/dist/pi/children.js +1 -4
- package/dist/pi/children.js.map +1 -1
- package/dist/pi/claude/claude.d.ts +10 -0
- package/dist/pi/claude/claude.d.ts.map +1 -0
- package/dist/pi/claude/claude.js +610 -0
- package/dist/pi/claude/claude.js.map +1 -0
- package/dist/pi/claude/codec.d.ts +67 -0
- package/dist/pi/claude/codec.d.ts.map +1 -0
- package/dist/pi/claude/codec.js +140 -0
- package/dist/pi/claude/codec.js.map +1 -0
- package/dist/pi/{claude.d.ts → claude/sdk.d.ts} +11 -10
- package/dist/pi/claude/sdk.d.ts.map +1 -0
- package/dist/pi/claude/sdk.js +63 -0
- package/dist/pi/claude/sdk.js.map +1 -0
- package/dist/pi/codex/account.d.ts +11 -5
- package/dist/pi/codex/account.d.ts.map +1 -1
- package/dist/pi/codex/account.js +23 -6
- package/dist/pi/codex/account.js.map +1 -1
- package/dist/pi/codex/app-server.d.ts +19 -7
- package/dist/pi/codex/app-server.d.ts.map +1 -1
- package/dist/pi/codex/app-server.js +41 -36
- package/dist/pi/codex/app-server.js.map +1 -1
- package/dist/pi/codex/codec.d.ts +10 -84
- package/dist/pi/codex/codec.d.ts.map +1 -1
- package/dist/pi/codex/codec.js +18 -80
- package/dist/pi/codex/codec.js.map +1 -1
- package/dist/pi/codex/codex.d.ts +0 -1
- package/dist/pi/codex/codex.d.ts.map +1 -1
- package/dist/pi/codex/codex.js +89 -18
- package/dist/pi/codex/codex.js.map +1 -1
- package/dist/pi/conversation.d.ts +33 -12
- package/dist/pi/conversation.d.ts.map +1 -1
- package/dist/pi/conversation.js +58 -18
- package/dist/pi/conversation.js.map +1 -1
- package/dist/pi/pi.d.ts +1 -4
- package/dist/pi/pi.d.ts.map +1 -1
- package/dist/pi/pi.js +29 -175
- package/dist/pi/pi.js.map +1 -1
- package/dist/pi/sdk.d.ts +18 -15
- package/dist/pi/sdk.d.ts.map +1 -1
- package/dist/pi/sdk.js +45 -55
- package/dist/pi/sdk.js.map +1 -1
- package/dist/pi/session.d.ts +13 -14
- package/dist/pi/session.d.ts.map +1 -1
- package/dist/pi/session.js +63 -24
- package/dist/pi/session.js.map +1 -1
- package/dist/pi/turns.d.ts +7 -7
- package/dist/pi/turns.d.ts.map +1 -1
- package/dist/pi/turns.js +22 -9
- package/dist/pi/turns.js.map +1 -1
- package/dist/pi/usage.d.ts +36 -22
- package/dist/pi/usage.d.ts.map +1 -1
- package/dist/pi/usage.js +79 -33
- package/dist/pi/usage.js.map +1 -1
- package/dist/preflight/command.d.ts +16 -4
- package/dist/preflight/command.d.ts.map +1 -1
- package/dist/preflight/command.js +29 -27
- package/dist/preflight/command.js.map +1 -1
- package/dist/preflight/preflight.d.ts +19 -7
- package/dist/preflight/preflight.d.ts.map +1 -1
- package/dist/preflight/preflight.js +73 -32
- package/dist/preflight/preflight.js.map +1 -1
- package/dist/prompt.d.ts +12 -9
- package/dist/prompt.d.ts.map +1 -1
- package/dist/prompt.js +33 -4
- package/dist/prompt.js.map +1 -1
- package/dist/protocol/codex.d.ts +122 -7
- package/dist/protocol/codex.d.ts.map +1 -1
- package/dist/protocol/codex.js +109 -1
- package/dist/protocol/codex.js.map +1 -1
- package/dist/protocol/count.d.ts +4 -0
- package/dist/protocol/count.d.ts.map +1 -0
- package/dist/protocol/count.js +4 -0
- package/dist/protocol/count.js.map +1 -0
- package/dist/runtime.d.ts +110 -55
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +114 -27
- package/dist/runtime.js.map +1 -1
- package/package.json +35 -19
- package/dist/pi/claude.d.ts.map +0 -1
- package/dist/pi/claude.js +0 -302
- package/dist/pi/claude.js.map +0 -1
- package/dist/pi/live.d.ts +0 -4
- package/dist/pi/live.d.ts.map +0 -1
- package/dist/pi/live.js +0 -11
- package/dist/pi/live.js.map +0 -1
- package/dist/pi/subagents.d.ts +0 -29
- package/dist/pi/subagents.d.ts.map +0 -1
- package/dist/pi/subagents.js +0 -120
- package/dist/pi/subagents.js.map +0 -1
- package/dist/pi/thinking.d.ts +0 -8
- package/dist/pi/thinking.d.ts.map +0 -1
- package/dist/pi/thinking.js +0 -15
- package/dist/pi/thinking.js.map +0 -1
package/dist/pi/pi.js
CHANGED
|
@@ -1,27 +1,19 @@
|
|
|
1
|
-
import { BrainSpec
|
|
2
|
-
import {
|
|
3
|
-
import { Deferred, Effect,
|
|
4
|
-
import {
|
|
5
|
-
import { AgentRuntime, ChildBackend, ChildSessionBudgetExceededError, PiChildBackend, PoolUnavailableError, SessionOperationError, UnknownModelError, UnsupportedEffortError, } from "../runtime.js";
|
|
1
|
+
import { BrainSpec } from "@usine/core/agent/brain";
|
|
2
|
+
import { ChildSession, SessionStarted } from "@usine/core/agent/session";
|
|
3
|
+
import { Deferred, Effect, Layer, Option, Stream } from "effect";
|
|
4
|
+
import { AgentResultError, PiChildBackend, PoolUnavailableError, SessionOperationError, UnknownModelError, UnsupportedEffortError, } from "../runtime.js";
|
|
6
5
|
import { sessionChannel, subscribePiSession } from "./session.js";
|
|
7
6
|
import { PiSdk, usePiStart } from "./sdk.js";
|
|
8
|
-
import { subagentsExtension } from "./subagents.js";
|
|
9
7
|
import { piPauseGate, piTurns } from "./turns.js";
|
|
10
8
|
export { PiSdk, piSdkLive, } from "./sdk.js";
|
|
11
|
-
const parentError = (operation, request, message, cause) => new SessionOperationError({
|
|
12
|
-
operation,
|
|
13
|
-
sessionId: Option.some(AgentSessionId.make(`parent:${request.spec.attemptId}`)),
|
|
14
|
-
message,
|
|
15
|
-
cause,
|
|
16
|
-
});
|
|
17
9
|
const childError = (operation, request, message, cause) => new SessionOperationError({
|
|
18
10
|
operation,
|
|
19
11
|
sessionId: Option.some(request.session.id),
|
|
20
12
|
message,
|
|
21
13
|
cause,
|
|
22
14
|
});
|
|
23
|
-
const unsupportedEffort = Effect.fn("Pi.unsupportedEffort")(function* (
|
|
24
|
-
yield* Effect.logError(
|
|
15
|
+
const unsupportedEffort = Effect.fn("Pi.unsupportedEffort")(function* (started) {
|
|
16
|
+
yield* Effect.logError("Pi child rejected an unsupported effort", {
|
|
25
17
|
effort: started.effort,
|
|
26
18
|
model: started.model,
|
|
27
19
|
supported: started.supported,
|
|
@@ -30,7 +22,7 @@ const unsupportedEffort = Effect.fn("Pi.unsupportedEffort")(function* (role, sta
|
|
|
30
22
|
harness: "pi",
|
|
31
23
|
model: started.model,
|
|
32
24
|
effort: started.effort,
|
|
33
|
-
message: `Pi model ${started.model}
|
|
25
|
+
message: `Pi model "${started.model}" doesn't support effort ${started.effort}. Supported efforts: ${started.supported.join(", ")}`,
|
|
34
26
|
});
|
|
35
27
|
});
|
|
36
28
|
const makePiChild = Effect.gen(function* () {
|
|
@@ -44,15 +36,24 @@ const makePiChild = Effect.gen(function* () {
|
|
|
44
36
|
parentSessionId: request.session.parentId,
|
|
45
37
|
sessionId: request.session.id,
|
|
46
38
|
});
|
|
39
|
+
if (request.host._tag === "RemoteShell") {
|
|
40
|
+
yield* Effect.logError("Pi child refused a remote host", {
|
|
41
|
+
destination: request.host.destination,
|
|
42
|
+
});
|
|
43
|
+
return yield* new AgentResultError({
|
|
44
|
+
sessionId: Option.some(request.session.id),
|
|
45
|
+
message: "Pi children run only on local workers: their tools run in the orchestrator process, not on the worker",
|
|
46
|
+
});
|
|
47
|
+
}
|
|
47
48
|
yield* Effect.logInfo("Launching Pi child session");
|
|
48
49
|
const gate = yield* piPauseGate;
|
|
49
50
|
return yield* usePiStart((signal) => sdk.start({
|
|
50
51
|
cwd: request.cwd,
|
|
52
|
+
environment: Option.some(request.environment),
|
|
51
53
|
extensions: [gate.extension],
|
|
52
|
-
model:
|
|
54
|
+
model: request.session.brain.model,
|
|
53
55
|
signal,
|
|
54
56
|
thinkingLevel: request.session.brain.effort,
|
|
55
|
-
toolMode: "repository",
|
|
56
57
|
}), (cause) => childError("launch", request, "Pi child session failed to start", cause), (acquired) => Effect.gen(function* () {
|
|
57
58
|
const started = acquired.result;
|
|
58
59
|
if (started._tag === "UnknownModel") {
|
|
@@ -62,11 +63,11 @@ const makePiChild = Effect.gen(function* () {
|
|
|
62
63
|
return yield* new UnknownModelError({
|
|
63
64
|
harness: "pi",
|
|
64
65
|
model: request.session.brain.model,
|
|
65
|
-
message: `Pi
|
|
66
|
+
message: `Pi has no model "${request.session.brain.model}"`,
|
|
66
67
|
});
|
|
67
68
|
}
|
|
68
69
|
if (started._tag === "UnsupportedEffort") {
|
|
69
|
-
return yield* unsupportedEffort(
|
|
70
|
+
return yield* unsupportedEffort(started);
|
|
70
71
|
}
|
|
71
72
|
if (started._tag === "AuthenticationUnavailable") {
|
|
72
73
|
yield* Effect.logError("Pi child has no credential for its model", {
|
|
@@ -77,7 +78,7 @@ const makePiChild = Effect.gen(function* () {
|
|
|
77
78
|
harness: "pi",
|
|
78
79
|
model: started.model,
|
|
79
80
|
pool: "apiKeys",
|
|
80
|
-
message: `Pi child model ${started.model} must use an API key`,
|
|
81
|
+
message: `Pi child model "${started.model}" must use an API key`,
|
|
81
82
|
});
|
|
82
83
|
}
|
|
83
84
|
if (started._tag === "UnsupportedAuthentication") {
|
|
@@ -90,7 +91,7 @@ const makePiChild = Effect.gen(function* () {
|
|
|
90
91
|
harness: "pi",
|
|
91
92
|
model: started.model,
|
|
92
93
|
pool: "apiKeys",
|
|
93
|
-
message: `Pi child model ${started.model} must use an API key`,
|
|
94
|
+
message: `Pi child model "${started.model}" must use an API key`,
|
|
94
95
|
});
|
|
95
96
|
}
|
|
96
97
|
if (started.pool !== "apiKeys") {
|
|
@@ -103,9 +104,14 @@ const makePiChild = Effect.gen(function* () {
|
|
|
103
104
|
harness: "pi",
|
|
104
105
|
model: started.model,
|
|
105
106
|
pool: "apiKeys",
|
|
106
|
-
message: `Pi child model ${started.model} must use an API key`,
|
|
107
|
+
message: `Pi child model "${started.model}" must use an API key`,
|
|
107
108
|
});
|
|
108
109
|
}
|
|
110
|
+
yield* Effect.logDebug("Pi child session started", {
|
|
111
|
+
model: started.model,
|
|
112
|
+
pool: started.pool,
|
|
113
|
+
tools: started.tools,
|
|
114
|
+
});
|
|
109
115
|
const session = new ChildSession({
|
|
110
116
|
id: request.session.id,
|
|
111
117
|
parentId: request.session.parentId,
|
|
@@ -115,6 +121,7 @@ const makePiChild = Effect.gen(function* () {
|
|
|
115
121
|
model: started.model,
|
|
116
122
|
effort: request.session.brain.effort,
|
|
117
123
|
}),
|
|
124
|
+
gatewayCredential: request.session.gatewayCredential,
|
|
118
125
|
});
|
|
119
126
|
const channel = yield* sessionChannel({
|
|
120
127
|
label: "Pi child session",
|
|
@@ -122,7 +129,6 @@ const makePiChild = Effect.gen(function* () {
|
|
|
122
129
|
});
|
|
123
130
|
yield* channel.emit(new SessionStarted({ session }));
|
|
124
131
|
const subscription = yield* subscribePiSession(started.session, session, channel);
|
|
125
|
-
// After setup succeeds, the ambient scope closes both the subscription and the SDK session.
|
|
126
132
|
yield* Effect.addFinalizer(() => Effect.sync(subscription.unsubscribe).pipe(Effect.andThen(Effect.sync(acquired.dispose))));
|
|
127
133
|
const controls = yield* piTurns({
|
|
128
134
|
session,
|
|
@@ -143,157 +149,5 @@ const makePiChild = Effect.gen(function* () {
|
|
|
143
149
|
});
|
|
144
150
|
return PiChildBackend.of({ launch });
|
|
145
151
|
});
|
|
146
|
-
const makePiParent = Effect.gen(function* () {
|
|
147
|
-
const childBackend = yield* ChildBackend;
|
|
148
|
-
const sdk = yield* PiSdk;
|
|
149
|
-
const launch = Effect.fn("PiParentRuntime.launch")(function* (request, children) {
|
|
150
|
-
const parentId = AgentSessionId.make(`parent:${request.spec.attemptId}`);
|
|
151
|
-
yield* Effect.annotateCurrentSpan({
|
|
152
|
-
agent: request.spec.agent.name,
|
|
153
|
-
attemptId: request.spec.attemptId,
|
|
154
|
-
effort: request.spec.agent.brain.effort,
|
|
155
|
-
parentEffort: request.spec.parentEffort,
|
|
156
|
-
parentModel: Option.getOrUndefined(request.spec.parentModel),
|
|
157
|
-
repository: request.spec.repository,
|
|
158
|
-
sessionId: parentId,
|
|
159
|
-
});
|
|
160
|
-
yield* Effect.logInfo("Launching Pi parent session");
|
|
161
|
-
const gate = yield* piPauseGate;
|
|
162
|
-
const channel = yield* sessionChannel({
|
|
163
|
-
label: "Pi parent session",
|
|
164
|
-
sessionId: parentId,
|
|
165
|
-
});
|
|
166
|
-
const childBudgetExceeded = yield* Deferred.make();
|
|
167
|
-
// Pi calls the tool outside any usine fiber. Child programs still need
|
|
168
|
-
// this fiber's services (stderr logging, tracing) and must end with this
|
|
169
|
-
// launch scope, so the extension gets a runner instead of the default
|
|
170
|
-
// runtime.
|
|
171
|
-
const scope = yield* Effect.scope;
|
|
172
|
-
const context = yield* Effect.context();
|
|
173
|
-
const runChild = (program) => Effect.runPromise(program.pipe(Effect.provideContext(context), Effect.forkIn(scope), Effect.flatMap(Fiber.join)));
|
|
174
|
-
return yield* usePiStart((signal) => sdk.start({
|
|
175
|
-
cwd: request.cwd,
|
|
176
|
-
extensions: [
|
|
177
|
-
gate.extension,
|
|
178
|
-
subagentsExtension({
|
|
179
|
-
agent: request.spec.agent,
|
|
180
|
-
backend: childBackend,
|
|
181
|
-
cwd: request.cwd,
|
|
182
|
-
emit: channel.emit,
|
|
183
|
-
maxChildren: request.spec.maxChildren,
|
|
184
|
-
onBudgetExceeded: (error) => Deferred.succeed(childBudgetExceeded, error).pipe(Effect.asVoid),
|
|
185
|
-
parentId,
|
|
186
|
-
register: children.register,
|
|
187
|
-
run: runChild,
|
|
188
|
-
}),
|
|
189
|
-
],
|
|
190
|
-
model: request.spec.parentModel,
|
|
191
|
-
signal,
|
|
192
|
-
thinkingLevel: request.spec.parentEffort,
|
|
193
|
-
toolMode: "orchestration",
|
|
194
|
-
}), (cause) => parentError("launch", request, "Pi parent session failed to start", cause), (acquired) => Effect.gen(function* () {
|
|
195
|
-
const started = acquired.result;
|
|
196
|
-
if (started._tag === "UnknownModel") {
|
|
197
|
-
const model = Option.getOrElse(request.spec.parentModel, () => ModelId.make("unknown"));
|
|
198
|
-
yield* Effect.logError("Pi parent rejected an unknown model", {
|
|
199
|
-
model,
|
|
200
|
-
});
|
|
201
|
-
return yield* new UnknownModelError({
|
|
202
|
-
harness: "pi",
|
|
203
|
-
model,
|
|
204
|
-
message: `Pi does not expose model ${model}`,
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
if (started._tag === "UnsupportedEffort") {
|
|
208
|
-
return yield* unsupportedEffort("parent", started);
|
|
209
|
-
}
|
|
210
|
-
if (started._tag === "AuthenticationUnavailable") {
|
|
211
|
-
yield* Effect.logError("Pi parent has no credential for its model", {
|
|
212
|
-
model: started.model,
|
|
213
|
-
requiredPool: started.requiredPool,
|
|
214
|
-
});
|
|
215
|
-
return yield* new PoolUnavailableError({
|
|
216
|
-
harness: "pi",
|
|
217
|
-
model: started.model,
|
|
218
|
-
pool: started.requiredPool,
|
|
219
|
-
message: `Pi parent model ${started.model} requires a credential from the ${started.requiredPool} pool`,
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
if (started._tag === "UnsupportedAuthentication") {
|
|
223
|
-
yield* Effect.logError("Pi parent model has unsupported OAuth authentication", {
|
|
224
|
-
model: started.model,
|
|
225
|
-
requiredPool: started.requiredPool,
|
|
226
|
-
subscription: started.authentication.subscription,
|
|
227
|
-
});
|
|
228
|
-
return yield* new PoolUnavailableError({
|
|
229
|
-
harness: "pi",
|
|
230
|
-
model: started.model,
|
|
231
|
-
pool: started.requiredPool,
|
|
232
|
-
message: `Pi parent model ${started.model} requires a credential from the ${started.requiredPool} pool`,
|
|
233
|
-
});
|
|
234
|
-
}
|
|
235
|
-
yield* Effect.annotateCurrentSpan({ parentPool: started.pool });
|
|
236
|
-
yield* Effect.logInfo("Pi parent session authenticated", {
|
|
237
|
-
model: started.model,
|
|
238
|
-
pool: started.pool,
|
|
239
|
-
});
|
|
240
|
-
const parent = new ParentSession({
|
|
241
|
-
id: parentId,
|
|
242
|
-
agent: request.spec.agent.name,
|
|
243
|
-
brain: new BrainSpec({
|
|
244
|
-
harness: "pi",
|
|
245
|
-
model: started.model,
|
|
246
|
-
effort: request.spec.parentEffort,
|
|
247
|
-
}),
|
|
248
|
-
});
|
|
249
|
-
yield* channel.emit(new SessionStarted({ session: parent }));
|
|
250
|
-
const subscription = yield* subscribePiSession(started.session, parent, channel);
|
|
251
|
-
// After setup succeeds, the ambient scope closes both the subscription and the SDK session.
|
|
252
|
-
yield* Effect.addFinalizer(() => Effect.sync(subscription.unsubscribe).pipe(Effect.andThen(Effect.sync(acquired.dispose))));
|
|
253
|
-
const prompt = assemblePrompt({
|
|
254
|
-
repository: request.spec.repository,
|
|
255
|
-
payload: request.spec.payload,
|
|
256
|
-
agent: request.spec.agent.name,
|
|
257
|
-
persona: request.spec.agent.persona,
|
|
258
|
-
task: request.spec.task,
|
|
259
|
-
});
|
|
260
|
-
const abort = Effect.tryPromise({
|
|
261
|
-
try: () => started.session.abort(),
|
|
262
|
-
catch: (cause) => parentError("interrupt", request, "Could not interrupt Pi", cause),
|
|
263
|
-
});
|
|
264
|
-
// Fail the channel before aborting the SDK: abort settles the
|
|
265
|
-
// in-flight prompt, and its fiber must find the result already
|
|
266
|
-
// terminal instead of racing it to `channel.finish`.
|
|
267
|
-
const budgetFailure = Deferred.await(childBudgetExceeded).pipe(Effect.tap((error) => Effect.logWarning("Stopping Pi parent after its child session budget was exceeded", {
|
|
268
|
-
attemptedChildren: error.attemptedChildren,
|
|
269
|
-
maxChildren: error.maxChildren,
|
|
270
|
-
sessionId: parentId,
|
|
271
|
-
})), Effect.flatMap((error) => channel.fail(error)), Effect.andThen(abort.pipe(Effect.catch((error) => Effect.logWarning("Pi parent kept running after its budget failure", {
|
|
272
|
-
message: error.message,
|
|
273
|
-
sessionId: parentId,
|
|
274
|
-
})))));
|
|
275
|
-
yield* Effect.forkScoped(budgetFailure);
|
|
276
|
-
const controls = yield* piTurns({
|
|
277
|
-
session: parent,
|
|
278
|
-
sdk: started.session,
|
|
279
|
-
channel,
|
|
280
|
-
gate,
|
|
281
|
-
prompt,
|
|
282
|
-
lastText: subscription.lastText,
|
|
283
|
-
error: (operation, cause) => parentError(operation, request, `Pi parent ${operation} failed`, cause),
|
|
284
|
-
});
|
|
285
|
-
return {
|
|
286
|
-
session: parent,
|
|
287
|
-
events: Stream.fromQueue(channel.events),
|
|
288
|
-
...controls,
|
|
289
|
-
result: Deferred.await(channel.result),
|
|
290
|
-
};
|
|
291
|
-
}));
|
|
292
|
-
});
|
|
293
|
-
return AgentRuntime.of({ launch });
|
|
294
|
-
});
|
|
295
|
-
/** Provides the coordinating Pi parent; supply the child backend that will perform its delegated coding work. */
|
|
296
|
-
export const piParentLayer = Layer.effect(AgentRuntime, makePiParent);
|
|
297
|
-
/** Provides Pi coding sessions for tasks delegated by a parent. */
|
|
298
152
|
export const piChildBackendLayer = Layer.effect(PiChildBackend, makePiChild);
|
|
299
153
|
//# sourceMappingURL=pi.js.map
|
package/dist/pi/pi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi.js","sourceRoot":"","sources":["../../src/pi/pi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,cAAc,GACf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAEL,YAAY,EACZ,YAAY,EACZ,+BAA+B,EAG/B,cAAc,EACd,oBAAoB,EAEpB,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,KAAK,EAAsB,UAAU,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,EACL,KAAK,EACL,SAAS,GAKV,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,GAAG,CAClB,SAA6C,EAC7C,OAAsB,EACtB,OAAe,EACf,KAAc,EACd,EAAE,CACF,IAAI,qBAAqB,CAAC;IACxB,SAAS;IACT,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAC/E,OAAO;IACP,KAAK;CACN,CAAC,CAAC;AAEL,MAAM,UAAU,GAAG,CACjB,SAA6C,EAC7C,OAAqB,EACrB,OAAe,EACf,KAAc,EACd,EAAE,CACF,IAAI,qBAAqB,CAAC;IACxB,SAAS;IACT,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1C,OAAO;IACP,KAAK;CACN,CAAC,CAAC;AAEL,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,EACnE,IAAwB,EACxB,OAAuE;IAEvE,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,iCAAiC,EAAE;QAClE,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,CAAC,IAAI,sBAAsB,CAAC;QACvC,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,YAAY,OAAO,CAAC,KAAK,4BAA4B,OAAO,CAAC,MAAM,gBAAgB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;KAC3H,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACtC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC;IAEzB,MAAM,MAAM,GAAwC,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAC,CACpF,QAAQ,CAAC,EAAE,OAAO;QAChB,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC;YAChC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK;YAC5B,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM;YACpC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO;YACtC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;YAClC,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;YACzC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;SAC9B,CAAC,CAAC;QACH,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;QAChC,OAAO,KAAK,CAAC,CAAC,UAAU,CACtB,CAAC,MAAM,EAAE,EAAE,CACT,GAAG,CAAC,KAAK,CAAC;YACR,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,UAAU,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;YAC5B,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;YAC/C,MAAM;YACN,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM;YAC3C,QAAQ,EAAE,YAAY;SACvB,CAAC,EACJ,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,kCAAkC,EAAE,KAAK,CAAC,EACnF,CAAC,QAAQ,EAAE,EAAE,CACX,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC;YAChC,IAAI,OAAO,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACpC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,oCAAoC,EAAE;oBAC3D,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;iBACnC,CAAC,CAAC;gBACH,OAAO,KAAK,CAAC,CAAC,IAAI,iBAAiB,CAAC;oBAClC,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;oBAClC,OAAO,EAAE,4BAA4B,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE;iBACnE,CAAC,CAAC;YACL,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBACzC,OAAO,KAAK,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACpD,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,KAAK,2BAA2B,EAAE,CAAC;gBACjD,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,0CAA0C,EAAE;oBACjE,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,YAAY,EAAE,SAAS;iBACxB,CAAC,CAAC;gBACH,OAAO,KAAK,CAAC,CAAC,IAAI,oBAAoB,CAAC;oBACrC,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,kBAAkB,OAAO,CAAC,KAAK,sBAAsB;iBAC/D,CAAC,CAAC;YACL,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,KAAK,2BAA2B,EAAE,CAAC;gBACjD,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,qDAAqD,EAAE;oBAC5E,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,YAAY,EAAE,SAAS;oBACvB,YAAY,EAAE,OAAO,CAAC,cAAc,CAAC,YAAY;iBAClD,CAAC,CAAC;gBACH,OAAO,KAAK,CAAC,CAAC,IAAI,oBAAoB,CAAC;oBACrC,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,kBAAkB,OAAO,CAAC,KAAK,sBAAsB;iBAC/D,CAAC,CAAC;YACL,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC/B,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,kDAAkD,EAAE;oBACzE,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,YAAY,EAAE,SAAS;oBACvB,YAAY,EAAE,OAAO,CAAC,IAAI;iBAC3B,CAAC,CAAC;gBACH,OAAO,KAAK,CAAC,CAAC,IAAI,oBAAoB,CAAC;oBACrC,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,kBAAkB,OAAO,CAAC,KAAK,sBAAsB;iBAC/D,CAAC,CAAC;YACL,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC;gBAC/B,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;gBACtB,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;gBAClC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK;gBAC5B,KAAK,EAAE,IAAI,SAAS,CAAC;oBACnB,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM;iBACrC,CAAC;aACH,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC;gBACpC,KAAK,EAAE,kBAAkB;gBACzB,SAAS,EAAE,OAAO,CAAC,EAAE;aACtB,CAAC,CAAC;YACH,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YACrD,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAClF,4FAA4F;YAC5F,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAC9B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,IAAI,CACxC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAC9C,CACF,CAAC;YACF,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC;gBAC9B,OAAO;gBACP,GAAG,EAAE,OAAO,CAAC,OAAO;gBACpB,OAAO;gBACP,IAAI;gBACJ,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,QAAQ,EAAE,YAAY,CAAC,QAAQ;gBAC/B,KAAK,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAC1B,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,YAAY,SAAS,SAAS,EAAE,KAAK,CAAC;aACxE,CAAC,CAAC;YACH,OAAO;gBACL,OAAO;gBACP,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;gBACxC,GAAG,QAAQ;gBACX,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;aACd,CAAC;QAC7B,CAAC,CAAC,CACL,CAAC;IACJ,CAAC,CACF,CAAC;IACF,OAAO,cAAc,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AACvC,CAAC,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACvC,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC;IACzC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC;IAEzB,MAAM,MAAM,GAAsC,MAAM,CAAC,EAAE,CAAC,wBAAwB,CAAC,CACnF,QAAQ,CAAC,EAAE,OAAO,EAAE,QAAQ;QAC1B,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACzE,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC;YAChC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;YAC9B,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS;YACjC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;YACvC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY;YACvC,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;YAC5D,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU;YACnC,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;QACH,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;QAChC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC;YACpC,KAAK,EAAE,mBAAmB;YAC1B,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;QACH,MAAM,mBAAmB,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAmC,CAAC;QACpF,uEAAuE;QACvE,yEAAyE;QACzE,sEAAsE;QACtE,WAAW;QACX,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAClC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAS,CAAC;QAC/C,MAAM,QAAQ,GAAG,CAAI,OAA4C,EAAc,EAAE,CAC/E,MAAM,CAAC,UAAU,CACf,OAAO,CAAC,IAAI,CACV,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,EAC9B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EACpB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAC3B,CACF,CAAC;QACJ,OAAO,KAAK,CAAC,CAAC,UAAU,CACtB,CAAC,MAAM,EAAE,EAAE,CACT,GAAG,CAAC,KAAK,CAAC;YACR,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,UAAU,EAAE;gBACV,IAAI,CAAC,SAAS;gBACd,kBAAkB,CAAC;oBACjB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK;oBACzB,OAAO,EAAE,YAAY;oBACrB,GAAG,EAAE,OAAO,CAAC,GAAG;oBAChB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW;oBACrC,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAC1B,QAAQ,CAAC,OAAO,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;oBAClE,QAAQ;oBACR,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,GAAG,EAAE,QAAQ;iBACd,CAAC;aACH;YACD,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW;YAC/B,MAAM;YACN,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY;YACxC,QAAQ,EAAE,eAAe;SAC1B,CAAC,EACJ,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,mCAAmC,EAAE,KAAK,CAAC,EACrF,CAAC,QAAQ,EAAE,EAAE,CACX,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC;YAChC,IAAI,OAAO,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACpC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAC5D,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CACxB,CAAC;gBACF,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,qCAAqC,EAAE;oBAC5D,KAAK;iBACN,CAAC,CAAC;gBACH,OAAO,KAAK,CAAC,CAAC,IAAI,iBAAiB,CAAC;oBAClC,OAAO,EAAE,IAAI;oBACb,KAAK;oBACL,OAAO,EAAE,4BAA4B,KAAK,EAAE;iBAC7C,CAAC,CAAC;YACL,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBACzC,OAAO,KAAK,CAAC,CAAC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,KAAK,2BAA2B,EAAE,CAAC;gBACjD,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,2CAA2C,EAAE;oBAClE,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,YAAY,EAAE,OAAO,CAAC,YAAY;iBACnC,CAAC,CAAC;gBACH,OAAO,KAAK,CAAC,CAAC,IAAI,oBAAoB,CAAC;oBACrC,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,IAAI,EAAE,OAAO,CAAC,YAAY;oBAC1B,OAAO,EAAE,mBAAmB,OAAO,CAAC,KAAK,mCAAmC,OAAO,CAAC,YAAY,OAAO;iBACxG,CAAC,CAAC;YACL,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,KAAK,2BAA2B,EAAE,CAAC;gBACjD,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,sDAAsD,EAAE;oBAC7E,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,YAAY,EAAE,OAAO,CAAC,cAAc,CAAC,YAAY;iBAClD,CAAC,CAAC;gBACH,OAAO,KAAK,CAAC,CAAC,IAAI,oBAAoB,CAAC;oBACrC,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,IAAI,EAAE,OAAO,CAAC,YAAY;oBAC1B,OAAO,EAAE,mBAAmB,OAAO,CAAC,KAAK,mCAAmC,OAAO,CAAC,YAAY,OAAO;iBACxG,CAAC,CAAC;YACL,CAAC;YACD,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAChE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,iCAAiC,EAAE;gBACvD,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC;gBAC/B,EAAE,EAAE,QAAQ;gBACZ,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;gBAC9B,KAAK,EAAE,IAAI,SAAS,CAAC;oBACnB,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY;iBAClC,CAAC;aACH,CAAC,CAAC;YACH,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAC7D,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACjF,4FAA4F;YAC5F,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAC9B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,IAAI,CACxC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAC9C,CACF,CAAC;YAEF,MAAM,MAAM,GAAG,cAAc,CAAC;gBAC5B,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU;gBACnC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO;gBAC7B,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;gBAC9B,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO;gBACnC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI;aACxB,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;gBAC9B,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE;gBAClC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,wBAAwB,EAAE,KAAK,CAAC;aACrF,CAAC,CAAC;YACH,8DAA8D;YAC9D,+DAA+D;YAC/D,qDAAqD;YACrD,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAC5D,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACnB,MAAM,CAAC,UAAU,CACf,gEAAgE,EAChE;gBACE,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;gBAC1C,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,SAAS,EAAE,QAAQ;aACpB,CACF,CACF,EACD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAC9C,MAAM,CAAC,OAAO,CACZ,KAAK,CAAC,IAAI,CACR,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CACrB,MAAM,CAAC,UAAU,CAAC,iDAAiD,EAAE;gBACnE,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,SAAS,EAAE,QAAQ;aACpB,CAAC,CACH,CACF,CACF,CACF,CAAC;YACF,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC;gBAC9B,OAAO,EAAE,MAAM;gBACf,GAAG,EAAE,OAAO,CAAC,OAAO;gBACpB,OAAO;gBACP,IAAI;gBACJ,MAAM;gBACN,QAAQ,EAAE,YAAY,CAAC,QAAQ;gBAC/B,KAAK,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAC1B,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,SAAS,SAAS,EAAE,KAAK,CAAC;aAC1E,CAAC,CAAC;YACH,OAAO;gBACL,OAAO,EAAE,MAAM;gBACf,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;gBACxC,GAAG,QAAQ;gBACX,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;aACd,CAAC;QAC7B,CAAC,CAAC,CACL,CAAC;IACJ,CAAC,CACF,CAAC;IACF,OAAO,YAAY,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,iHAAiH;AACjH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AACtE,mEAAmE;AACnE,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"pi.js","sourceRoot":"","sources":["../../src/pi/pi.ts"],"names":[],"mappings":"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"}
|
package/dist/pi/sdk.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createAgentSession, type AgentSessionEvent, type InlineExtension } from "@earendil-works/pi-coding-agent";
|
|
1
|
+
import { createAgentSession, type AgentSessionEvent, type CreateAgentSessionOptions, type InlineExtension, type ToolDefinition } from "@earendil-works/pi-coding-agent";
|
|
2
2
|
import { Effort, ModelId } from "@usine/core/agent/brain";
|
|
3
3
|
import { Context, Effect, Layer, Option } from "effect";
|
|
4
4
|
import { type PiAuthentication, type PiPool } from "./authentication.ts";
|
|
@@ -9,29 +9,28 @@ export interface PiSession {
|
|
|
9
9
|
readonly messages: ReadonlyArray<PiMessage>;
|
|
10
10
|
readonly subscribe: (listener: (event: PiSessionEvent) => void) => () => void;
|
|
11
11
|
readonly prompt: (prompt: string) => Promise<void>;
|
|
12
|
-
readonly steer: (message: string) => Promise<void>;
|
|
12
|
+
readonly steer: (message: string) => Promise<"handled" | "queued" | void>;
|
|
13
13
|
readonly abort: () => Promise<void>;
|
|
14
14
|
readonly dispose: () => void;
|
|
15
15
|
}
|
|
16
16
|
export interface PiStartOptions {
|
|
17
17
|
readonly cwd: string;
|
|
18
|
+
/** The complete environment of every command the bash tool runs; `None` inherits this process's environment. */
|
|
19
|
+
readonly environment: Option.Option<Readonly<Record<string, string>>>;
|
|
18
20
|
readonly extensions: ReadonlyArray<InlineExtension>;
|
|
19
|
-
readonly model:
|
|
21
|
+
readonly model: ModelId;
|
|
20
22
|
readonly signal: AbortSignal;
|
|
21
23
|
readonly thinkingLevel: Effort;
|
|
22
|
-
readonly toolMode: "orchestration" | "repository";
|
|
23
24
|
}
|
|
24
25
|
export type PiStartResult = {
|
|
25
26
|
readonly _tag: "AuthenticationUnavailable";
|
|
26
27
|
readonly model: ModelId;
|
|
27
|
-
readonly requiredPool: PiPool;
|
|
28
28
|
} | {
|
|
29
29
|
readonly _tag: "UnsupportedAuthentication";
|
|
30
30
|
readonly authentication: Extract<PiAuthentication, {
|
|
31
31
|
readonly _tag: "OAuth";
|
|
32
32
|
}>;
|
|
33
33
|
readonly model: ModelId;
|
|
34
|
-
readonly requiredPool: PiPool;
|
|
35
34
|
} | {
|
|
36
35
|
readonly _tag: "UnknownModel";
|
|
37
36
|
} | {
|
|
@@ -44,27 +43,31 @@ export type PiStartResult = {
|
|
|
44
43
|
readonly model: ModelId;
|
|
45
44
|
readonly pool: PiPool;
|
|
46
45
|
readonly session: PiSession;
|
|
46
|
+
/** The names of the tools active in `session`. */
|
|
47
|
+
readonly tools: ReadonlyArray<string>;
|
|
47
48
|
};
|
|
48
|
-
/**
|
|
49
|
-
export declare const
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
/** Returns a bash tool whose commands run with exactly `environment`; Pi's `PI_*` variables are not added. */
|
|
50
|
+
export declare const environmentBashTool: (cwd: string, environment: Readonly<Record<string, string>>) => ToolDefinition;
|
|
51
|
+
/**
|
|
52
|
+
* Returns the session options that give a Pi child exactly Pi's default tools. With `environment`,
|
|
53
|
+
* the bash tool runs its commands with exactly that environment.
|
|
54
|
+
*/
|
|
55
|
+
export declare const piChildTools: (cwd: string, environment: Option.Option<Readonly<Record<string, string>>>) => Pick<CreateAgentSessionOptions, "customTools" | "tools">;
|
|
52
56
|
declare const PiSdk_base: Context.ServiceClass<PiSdk, "@usine/agents/pi/PiSdk", {
|
|
53
57
|
readonly start: (options: PiStartOptions) => Promise<PiStartResult>;
|
|
54
58
|
}>;
|
|
55
|
-
/**
|
|
59
|
+
/** The service that starts a Pi session with the selected model and its repository tools. */
|
|
56
60
|
export declare class PiSdk extends PiSdk_base {
|
|
57
61
|
}
|
|
58
62
|
export declare const piSdkLive: Layer.Layer<PiSdk, never, never>;
|
|
59
63
|
export interface AcquiredPiStart {
|
|
60
64
|
readonly result: PiStartResult;
|
|
61
|
-
/**
|
|
65
|
+
/** Disposes the session; idempotent, because both failed setup and the enclosing scope can call it. */
|
|
62
66
|
readonly dispose: () => void;
|
|
63
67
|
}
|
|
64
68
|
/**
|
|
65
|
-
* Runs SDK startup so an interruption cannot leak a session
|
|
66
|
-
*
|
|
67
|
-
* one already handed to `use` is disposed by `onExit`.
|
|
69
|
+
* Runs SDK startup so an interruption cannot leak a session: a result that arrives after the
|
|
70
|
+
* interruption is disposed when its Promise settles, and one passed to `use` is disposed on exit.
|
|
68
71
|
*/
|
|
69
72
|
export declare const usePiStart: <A, E, R, E2>(start: (signal: AbortSignal) => Promise<PiStartResult>, onError: (cause: unknown) => E, use: (acquired: AcquiredPiStart) => Effect.Effect<A, E2, R>) => Effect.Effect<A, E | E2, R>;
|
|
70
73
|
export {};
|
package/dist/pi/sdk.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/pi/sdk.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/pi/sdk.ts"],"names":[],"mappings":"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"}
|
package/dist/pi/sdk.js
CHANGED
|
@@ -1,35 +1,45 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getSupportedThinkingLevels } from "@earendil-works/pi-ai";
|
|
2
|
+
import { createAgentSession, createBashToolDefinition, DefaultResourceLoader, defineTool, getAgentDir, ModelRuntime, SessionManager, SettingsManager, } from "@earendil-works/pi-coding-agent";
|
|
2
3
|
import { Effort, ModelId } from "@usine/core/agent/brain";
|
|
3
4
|
import { Context, Effect, Exit, Layer, Option } from "effect";
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
import { piAuthentication, resolvePiPool, splitPiModel, } from "./authentication.js";
|
|
6
|
+
/** Returns a bash tool whose commands run with exactly `environment`; Pi's `PI_*` variables are not added. */
|
|
7
|
+
export const environmentBashTool = (cwd, environment) => {
|
|
8
|
+
const exact = (context) => ({ ...context, env: { ...environment } });
|
|
9
|
+
return defineTool(createBashToolDefinition(cwd, { exposeSessionEnvironment: false, spawnHook: exact }));
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Pi's default tools, named so that the global `defaultTools` setting can't add a tool whose
|
|
13
|
+
* processes inherit this process's environment, such as `grep` or `find`.
|
|
14
|
+
*/
|
|
15
|
+
const piChildToolNames = ["read", "bash", "edit", "write"];
|
|
16
|
+
/**
|
|
17
|
+
* Returns the session options that give a Pi child exactly Pi's default tools. With `environment`,
|
|
18
|
+
* the bash tool runs its commands with exactly that environment.
|
|
19
|
+
*/
|
|
20
|
+
export const piChildTools = (cwd, environment) => ({
|
|
21
|
+
tools: [...piChildToolNames],
|
|
22
|
+
// A custom tool replaces the built-in tool of the same name.
|
|
23
|
+
customTools: Option.match(environment, {
|
|
24
|
+
onNone: () => [],
|
|
25
|
+
onSome: (exact) => [environmentBashTool(cwd, exact)],
|
|
26
|
+
}),
|
|
27
|
+
});
|
|
28
|
+
/** The service that starts a Pi session with the selected model and its repository tools. */
|
|
9
29
|
export class PiSdk extends Context.Service()("@usine/agents/pi/PiSdk") {
|
|
10
30
|
}
|
|
11
|
-
const splitModel = (model) => {
|
|
12
|
-
const separator = model.indexOf("/");
|
|
13
|
-
return separator <= 0 || separator === model.length - 1
|
|
14
|
-
? undefined
|
|
15
|
-
: [model.slice(0, separator), model.slice(separator + 1)];
|
|
16
|
-
};
|
|
17
31
|
export const piSdkLive = Layer.succeed(PiSdk)({
|
|
18
32
|
start: async (options) => {
|
|
19
33
|
const modelRuntime = await ModelRuntime.create({ signal: options.signal });
|
|
20
|
-
|
|
21
|
-
if (
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if (selected === undefined)
|
|
27
|
-
return { _tag: "UnknownModel" };
|
|
28
|
-
}
|
|
34
|
+
const parts = splitPiModel(options.model);
|
|
35
|
+
if (parts === undefined)
|
|
36
|
+
return { _tag: "UnknownModel" };
|
|
37
|
+
const selected = modelRuntime.getModel(parts.provider, parts.modelId);
|
|
38
|
+
if (selected === undefined)
|
|
39
|
+
return { _tag: "UnknownModel" };
|
|
29
40
|
const agentDir = getAgentDir();
|
|
30
|
-
// The worktree is
|
|
31
|
-
//
|
|
32
|
-
// inline factory, which the loader registers regardless.
|
|
41
|
+
// The worktree is untrusted, so its `.pi/` settings, SYSTEM.md, extensions, and skills are not
|
|
42
|
+
// loaded; inline extension factories, such as the pause gate, still register.
|
|
33
43
|
const settingsManager = SettingsManager.create(options.cwd, agentDir, {
|
|
34
44
|
projectTrusted: false,
|
|
35
45
|
});
|
|
@@ -44,53 +54,33 @@ export const piSdkLive = Layer.succeed(PiSdk)({
|
|
|
44
54
|
noThemes: true,
|
|
45
55
|
});
|
|
46
56
|
await resourceLoader.reload();
|
|
47
|
-
const
|
|
57
|
+
const { session } = await createAgentSession({
|
|
58
|
+
...piChildTools(options.cwd, options.environment),
|
|
48
59
|
cwd: options.cwd,
|
|
60
|
+
model: selected,
|
|
49
61
|
modelRuntime,
|
|
50
62
|
resourceLoader,
|
|
51
63
|
sessionManager: SessionManager.inMemory(options.cwd),
|
|
52
64
|
settingsManager,
|
|
53
65
|
thinkingLevel: options.thinkingLevel,
|
|
54
|
-
};
|
|
55
|
-
const toolScopedSessionOptions = options.toolMode === "orchestration"
|
|
56
|
-
? { ...sessionOptions, ...piParentSessionToolPolicy }
|
|
57
|
-
: sessionOptions;
|
|
58
|
-
const { session } = selected === undefined
|
|
59
|
-
? await createAgentSession(toolScopedSessionOptions)
|
|
60
|
-
: await createAgentSession({ ...toolScopedSessionOptions, model: selected });
|
|
66
|
+
});
|
|
61
67
|
let ownershipTransferred = false;
|
|
62
68
|
try {
|
|
63
69
|
const active = session.model;
|
|
64
70
|
if (active === undefined)
|
|
65
71
|
throw new Error("Pi started without an active model");
|
|
66
72
|
const model = ModelId.make(`${active.provider}/${active.id}`);
|
|
67
|
-
const supported =
|
|
73
|
+
const supported = getSupportedThinkingLevels(active);
|
|
68
74
|
if (!supported.includes(options.thinkingLevel)) {
|
|
69
75
|
return { _tag: "UnsupportedEffort", effort: options.thinkingLevel, model, supported };
|
|
70
76
|
}
|
|
71
|
-
const
|
|
72
|
-
signal: options.signal,
|
|
73
|
-
});
|
|
74
|
-
const authentication = resolvedAuthentication?.type === "api_key"
|
|
75
|
-
? { _tag: "ApiKey" }
|
|
76
|
-
: resolvedAuthentication?.type === "oauth"
|
|
77
|
-
? {
|
|
78
|
-
_tag: "OAuth",
|
|
79
|
-
subscription: modelRuntime.getProvider(active.provider)?.auth.oauth?.isSubscription === true,
|
|
80
|
-
}
|
|
81
|
-
: undefined;
|
|
82
|
-
const requiredPool = requiredPiPool(active.provider);
|
|
77
|
+
const authentication = piAuthentication(await modelRuntime.checkAuth(active.provider, { signal: options.signal }), modelRuntime.getProvider(active.provider)?.auth.oauth?.isSubscription === true);
|
|
83
78
|
const pool = resolvePiPool(active.provider, authentication);
|
|
84
79
|
if (authentication === undefined) {
|
|
85
|
-
return { _tag: "AuthenticationUnavailable", model
|
|
80
|
+
return { _tag: "AuthenticationUnavailable", model };
|
|
86
81
|
}
|
|
87
82
|
if (pool === undefined && authentication._tag === "OAuth") {
|
|
88
|
-
return {
|
|
89
|
-
_tag: "UnsupportedAuthentication",
|
|
90
|
-
authentication,
|
|
91
|
-
model,
|
|
92
|
-
requiredPool,
|
|
93
|
-
};
|
|
83
|
+
return { _tag: "UnsupportedAuthentication", authentication, model };
|
|
94
84
|
}
|
|
95
85
|
if (pool === undefined) {
|
|
96
86
|
throw new Error("Pi could not map a configured API key to a billing pool");
|
|
@@ -101,6 +91,7 @@ export const piSdkLive = Layer.succeed(PiSdk)({
|
|
|
101
91
|
model,
|
|
102
92
|
pool,
|
|
103
93
|
session,
|
|
94
|
+
tools: session.getActiveToolNames(),
|
|
104
95
|
};
|
|
105
96
|
}
|
|
106
97
|
finally {
|
|
@@ -110,9 +101,8 @@ export const piSdkLive = Layer.succeed(PiSdk)({
|
|
|
110
101
|
},
|
|
111
102
|
});
|
|
112
103
|
/**
|
|
113
|
-
* Runs SDK startup so an interruption cannot leak a session
|
|
114
|
-
*
|
|
115
|
-
* one already handed to `use` is disposed by `onExit`.
|
|
104
|
+
* Runs SDK startup so an interruption cannot leak a session: a result that arrives after the
|
|
105
|
+
* interruption is disposed when its Promise settles, and one passed to `use` is disposed on exit.
|
|
116
106
|
*/
|
|
117
107
|
export const usePiStart = (start, onError, use) => Effect.suspend(() => {
|
|
118
108
|
let acquired;
|
package/dist/pi/sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/pi/sdk.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/pi/sdk.ts"],"names":[],"mappings":"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"}
|