@usine/agents 0.3.0 → 0.4.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/README.md +92 -30
- package/dist/child-host/child-host.d.ts +60 -0
- package/dist/child-host/child-host.d.ts.map +1 -0
- package/dist/child-host/child-host.js +84 -0
- package/dist/child-host/child-host.js.map +1 -0
- package/dist/child-host/command.d.ts +11 -0
- package/dist/child-host/command.d.ts.map +1 -0
- package/dist/child-host/command.js +26 -0
- package/dist/child-host/command.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.d.ts +8 -9
- package/dist/pi/claude.d.ts.map +1 -1
- package/dist/pi/claude.js +366 -50
- package/dist/pi/claude.js.map +1 -1
- package/dist/pi/codex/account.d.ts +3 -3
- package/dist/pi/codex/account.d.ts.map +1 -1
- package/dist/pi/codex/account.js +5 -5
- 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 +35 -13
- package/dist/pi/codex/codec.d.ts.map +1 -1
- package/dist/pi/codex/codec.js +42 -15
- 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 +75 -14
- package/dist/pi/codex/codex.js.map +1 -1
- package/dist/pi/conversation.d.ts +29 -12
- package/dist/pi/conversation.d.ts.map +1 -1
- package/dist/pi/conversation.js +54 -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 +24 -175
- package/dist/pi/pi.js.map +1 -1
- package/dist/pi/sdk.d.ts +11 -15
- package/dist/pi/sdk.d.ts.map +1 -1
- package/dist/pi/sdk.js +35 -53
- 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 +29 -15
- package/dist/pi/usage.d.ts.map +1 -1
- package/dist/pi/usage.js +48 -24
- package/dist/pi/usage.js.map +1 -1
- package/dist/preflight/command.d.ts +16 -3
- package/dist/preflight/command.d.ts.map +1 -1
- package/dist/preflight/command.js +30 -17
- package/dist/preflight/command.js.map +1 -1
- package/dist/preflight/preflight.d.ts +10 -5
- package/dist/preflight/preflight.d.ts.map +1 -1
- package/dist/preflight/preflight.js +52 -25
- 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 +4 -7
- package/dist/protocol/codex.d.ts.map +1 -1
- package/dist/protocol/codex.js +1 -1
- package/dist/protocol/codex.js.map +1 -1
- package/dist/runtime.d.ts +100 -55
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +108 -27
- package/dist/runtime.js.map +1 -1
- package/package.json +22 -10
- 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,7 +104,7 @@ 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
|
}
|
|
109
110
|
const session = new ChildSession({
|
|
@@ -115,6 +116,7 @@ const makePiChild = Effect.gen(function* () {
|
|
|
115
116
|
model: started.model,
|
|
116
117
|
effort: request.session.brain.effort,
|
|
117
118
|
}),
|
|
119
|
+
gatewayCredential: request.session.gatewayCredential,
|
|
118
120
|
});
|
|
119
121
|
const channel = yield* sessionChannel({
|
|
120
122
|
label: "Pi child session",
|
|
@@ -122,7 +124,6 @@ const makePiChild = Effect.gen(function* () {
|
|
|
122
124
|
});
|
|
123
125
|
yield* channel.emit(new SessionStarted({ session }));
|
|
124
126
|
const subscription = yield* subscribePiSession(started.session, session, channel);
|
|
125
|
-
// After setup succeeds, the ambient scope closes both the subscription and the SDK session.
|
|
126
127
|
yield* Effect.addFinalizer(() => Effect.sync(subscription.unsubscribe).pipe(Effect.andThen(Effect.sync(acquired.dispose))));
|
|
127
128
|
const controls = yield* piTurns({
|
|
128
129
|
session,
|
|
@@ -143,157 +144,5 @@ const makePiChild = Effect.gen(function* () {
|
|
|
143
144
|
});
|
|
144
145
|
return PiChildBackend.of({ launch });
|
|
145
146
|
});
|
|
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
147
|
export const piChildBackendLayer = Layer.effect(PiChildBackend, makePiChild);
|
|
299
148
|
//# 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":"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"}
|
|
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 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
|
} | {
|
|
@@ -45,26 +44,23 @@ export type PiStartResult = {
|
|
|
45
44
|
readonly pool: PiPool;
|
|
46
45
|
readonly session: PiSession;
|
|
47
46
|
};
|
|
48
|
-
/**
|
|
49
|
-
export declare const
|
|
50
|
-
readonly noTools: "builtin";
|
|
51
|
-
};
|
|
47
|
+
/** Returns a bash tool whose commands run with exactly `environment`; Pi's `PI_*` variables are not added. */
|
|
48
|
+
export declare const environmentBashTool: (cwd: string, environment: Readonly<Record<string, string>>) => ToolDefinition;
|
|
52
49
|
declare const PiSdk_base: Context.ServiceClass<PiSdk, "@usine/agents/pi/PiSdk", {
|
|
53
50
|
readonly start: (options: PiStartOptions) => Promise<PiStartResult>;
|
|
54
51
|
}>;
|
|
55
|
-
/**
|
|
52
|
+
/** The service that starts a Pi session with the selected model and its repository tools. */
|
|
56
53
|
export declare class PiSdk extends PiSdk_base {
|
|
57
54
|
}
|
|
58
55
|
export declare const piSdkLive: Layer.Layer<PiSdk, never, never>;
|
|
59
56
|
export interface AcquiredPiStart {
|
|
60
57
|
readonly result: PiStartResult;
|
|
61
|
-
/**
|
|
58
|
+
/** Disposes the session; idempotent, because both failed setup and the enclosing scope can call it. */
|
|
62
59
|
readonly dispose: () => void;
|
|
63
60
|
}
|
|
64
61
|
/**
|
|
65
|
-
* Runs SDK startup so an interruption cannot leak a session
|
|
66
|
-
*
|
|
67
|
-
* one already handed to `use` is disposed by `onExit`.
|
|
62
|
+
* Runs SDK startup so an interruption cannot leak a session: a result that arrives after the
|
|
63
|
+
* interruption is disposed when its Promise settles, and one passed to `use` is disposed on exit.
|
|
68
64
|
*/
|
|
69
65
|
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
66
|
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,28 @@
|
|
|
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
|
+
/** The service that starts a Pi session with the selected model and its repository tools. */
|
|
9
12
|
export class PiSdk extends Context.Service()("@usine/agents/pi/PiSdk") {
|
|
10
13
|
}
|
|
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
14
|
export const piSdkLive = Layer.succeed(PiSdk)({
|
|
18
15
|
start: async (options) => {
|
|
19
16
|
const modelRuntime = await ModelRuntime.create({ signal: options.signal });
|
|
20
|
-
|
|
21
|
-
if (
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if (selected === undefined)
|
|
27
|
-
return { _tag: "UnknownModel" };
|
|
28
|
-
}
|
|
17
|
+
const parts = splitPiModel(options.model);
|
|
18
|
+
if (parts === undefined)
|
|
19
|
+
return { _tag: "UnknownModel" };
|
|
20
|
+
const selected = modelRuntime.getModel(parts.provider, parts.modelId);
|
|
21
|
+
if (selected === undefined)
|
|
22
|
+
return { _tag: "UnknownModel" };
|
|
29
23
|
const agentDir = getAgentDir();
|
|
30
|
-
// The worktree is
|
|
31
|
-
//
|
|
32
|
-
// inline factory, which the loader registers regardless.
|
|
24
|
+
// The worktree is untrusted, so its `.pi/` settings, SYSTEM.md, extensions, and skills are not
|
|
25
|
+
// loaded; inline extension factories, such as the pause gate, still register.
|
|
33
26
|
const settingsManager = SettingsManager.create(options.cwd, agentDir, {
|
|
34
27
|
projectTrusted: false,
|
|
35
28
|
});
|
|
@@ -52,45 +45,35 @@ export const piSdkLive = Layer.succeed(PiSdk)({
|
|
|
52
45
|
settingsManager,
|
|
53
46
|
thinkingLevel: options.thinkingLevel,
|
|
54
47
|
};
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
: sessionOptions
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
48
|
+
// A custom tool replaces the built-in tool of the same name.
|
|
49
|
+
const environmentScopedSessionOptions = Option.match(options.environment, {
|
|
50
|
+
onNone: () => sessionOptions,
|
|
51
|
+
onSome: (environment) => ({
|
|
52
|
+
...sessionOptions,
|
|
53
|
+
customTools: [environmentBashTool(options.cwd, environment)],
|
|
54
|
+
}),
|
|
55
|
+
});
|
|
56
|
+
const { session } = await createAgentSession({
|
|
57
|
+
...environmentScopedSessionOptions,
|
|
58
|
+
model: selected,
|
|
59
|
+
});
|
|
61
60
|
let ownershipTransferred = false;
|
|
62
61
|
try {
|
|
63
62
|
const active = session.model;
|
|
64
63
|
if (active === undefined)
|
|
65
64
|
throw new Error("Pi started without an active model");
|
|
66
65
|
const model = ModelId.make(`${active.provider}/${active.id}`);
|
|
67
|
-
const supported =
|
|
66
|
+
const supported = getSupportedThinkingLevels(active);
|
|
68
67
|
if (!supported.includes(options.thinkingLevel)) {
|
|
69
68
|
return { _tag: "UnsupportedEffort", effort: options.thinkingLevel, model, supported };
|
|
70
69
|
}
|
|
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);
|
|
70
|
+
const authentication = piAuthentication(await modelRuntime.checkAuth(active.provider, { signal: options.signal }), modelRuntime.getProvider(active.provider)?.auth.oauth?.isSubscription === true);
|
|
83
71
|
const pool = resolvePiPool(active.provider, authentication);
|
|
84
72
|
if (authentication === undefined) {
|
|
85
|
-
return { _tag: "AuthenticationUnavailable", model
|
|
73
|
+
return { _tag: "AuthenticationUnavailable", model };
|
|
86
74
|
}
|
|
87
75
|
if (pool === undefined && authentication._tag === "OAuth") {
|
|
88
|
-
return {
|
|
89
|
-
_tag: "UnsupportedAuthentication",
|
|
90
|
-
authentication,
|
|
91
|
-
model,
|
|
92
|
-
requiredPool,
|
|
93
|
-
};
|
|
76
|
+
return { _tag: "UnsupportedAuthentication", authentication, model };
|
|
94
77
|
}
|
|
95
78
|
if (pool === undefined) {
|
|
96
79
|
throw new Error("Pi could not map a configured API key to a billing pool");
|
|
@@ -110,9 +93,8 @@ export const piSdkLive = Layer.succeed(PiSdk)({
|
|
|
110
93
|
},
|
|
111
94
|
});
|
|
112
95
|
/**
|
|
113
|
-
* Runs SDK startup so an interruption cannot leak a session
|
|
114
|
-
*
|
|
115
|
-
* one already handed to `use` is disposed by `onExit`.
|
|
96
|
+
* Runs SDK startup so an interruption cannot leak a session: a result that arrives after the
|
|
97
|
+
* interruption is disposed when its Promise settles, and one passed to `use` is disposed on exit.
|
|
116
98
|
*/
|
|
117
99
|
export const usePiStart = (start, onError, use) => Effect.suspend(() => {
|
|
118
100
|
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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"}
|