@usine/agents 0.0.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +28 -1
  3. package/dist/index.d.ts +4 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +4 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/pi/authentication.d.ts +13 -0
  8. package/dist/pi/authentication.d.ts.map +1 -0
  9. package/dist/pi/authentication.js +14 -0
  10. package/dist/pi/authentication.js.map +1 -0
  11. package/dist/pi/children.d.ts +5 -0
  12. package/dist/pi/children.d.ts.map +1 -0
  13. package/dist/pi/children.js +26 -0
  14. package/dist/pi/children.js.map +1 -0
  15. package/dist/pi/claude.d.ts +32 -0
  16. package/dist/pi/claude.d.ts.map +1 -0
  17. package/dist/pi/claude.js +237 -0
  18. package/dist/pi/claude.js.map +1 -0
  19. package/dist/pi/codex/app-server.d.ts +24 -0
  20. package/dist/pi/codex/app-server.d.ts.map +1 -0
  21. package/dist/pi/codex/app-server.js +188 -0
  22. package/dist/pi/codex/app-server.js.map +1 -0
  23. package/dist/pi/codex/codex.d.ts +5 -0
  24. package/dist/pi/codex/codex.d.ts.map +1 -0
  25. package/dist/pi/codex/codex.js +342 -0
  26. package/dist/pi/codex/codex.js.map +1 -0
  27. package/dist/pi/index.d.ts +11 -0
  28. package/dist/pi/index.d.ts.map +1 -0
  29. package/dist/pi/index.js +18 -0
  30. package/dist/pi/index.js.map +1 -0
  31. package/dist/pi/pi.d.ts +7 -0
  32. package/dist/pi/pi.d.ts.map +1 -0
  33. package/dist/pi/pi.js +273 -0
  34. package/dist/pi/pi.js.map +1 -0
  35. package/dist/pi/sdk.d.ts +66 -0
  36. package/dist/pi/sdk.d.ts.map +1 -0
  37. package/dist/pi/sdk.js +154 -0
  38. package/dist/pi/sdk.js.map +1 -0
  39. package/dist/pi/session.d.ts +46 -0
  40. package/dist/pi/session.d.ts.map +1 -0
  41. package/dist/pi/session.js +180 -0
  42. package/dist/pi/session.js.map +1 -0
  43. package/dist/pi/subagents.d.ts +23 -0
  44. package/dist/pi/subagents.d.ts.map +1 -0
  45. package/dist/pi/subagents.js +83 -0
  46. package/dist/pi/subagents.js.map +1 -0
  47. package/dist/prompt.d.ts +22 -0
  48. package/dist/prompt.d.ts.map +1 -0
  49. package/dist/prompt.js +42 -0
  50. package/dist/prompt.js.map +1 -0
  51. package/dist/protocol/codex.d.ts +56 -0
  52. package/dist/protocol/codex.d.ts.map +1 -0
  53. package/dist/protocol/codex.js +2 -0
  54. package/dist/protocol/codex.js.map +1 -0
  55. package/dist/runtime.d.ts +114 -0
  56. package/dist/runtime.d.ts.map +1 -0
  57. package/dist/runtime.js +96 -0
  58. package/dist/runtime.js.map +1 -0
  59. package/package.json +54 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.d.ts","sourceRoot":"","sources":["../../src/pi/pi.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,KAAK,EAAkB,MAAM,QAAQ,CAAC;AAExE,OAAO,EAEL,YAAY,EACZ,YAAY,EAGZ,cAAc,EAKf,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,KAAK,EAAc,MAAM,UAAU,CAAC;AAG7C,OAAO,EACL,KAAK,EACL,yBAAyB,EACzB,SAAS,EACT,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,UAAU,CAAC;AAsWlB,eAAO,MAAM,aAAa,wDAA2C,CAAC;AACtE,eAAO,MAAM,mBAAmB,2CAA4C,CAAC"}
package/dist/pi/pi.js ADDED
@@ -0,0 +1,273 @@
1
+ import { Agent } from "@usine/core";
2
+ import { Deferred, Effect, Fiber, Layer, Option, Stream } from "effect";
3
+ import { assemblePrompt } from "../prompt.js";
4
+ import { AgentRuntime, ChildBackend, PiChildBackend, PoolUnavailableError, SessionOperationError, UnknownModelError, } from "../runtime.js";
5
+ import { lastPiMessageText, sessionChannel, subscribePiSession } from "./session.js";
6
+ import { PiSdk, usePiStart } from "./sdk.js";
7
+ import { subagentsExtension } from "./subagents.js";
8
+ export { PiSdk, piParentSessionToolPolicy, piSdkLive, } from "./sdk.js";
9
+ const parentError = (operation, request, message, cause) => new SessionOperationError({
10
+ operation,
11
+ sessionId: Option.some(Agent.SessionId.make(`parent:${request.spec.attemptId}`)),
12
+ message,
13
+ cause,
14
+ });
15
+ const childError = (operation, request, message, cause) => new SessionOperationError({
16
+ operation,
17
+ sessionId: Option.some(request.session.id),
18
+ message,
19
+ cause,
20
+ });
21
+ const makePiChild = Effect.gen(function* () {
22
+ const sdk = yield* PiSdk;
23
+ const launch = Effect.fn("PiChildBackend.launch")(function* (request) {
24
+ yield* Effect.annotateCurrentSpan({
25
+ agent: request.session.agent,
26
+ effort: request.session.brain.effort,
27
+ harness: request.session.brain.harness,
28
+ model: request.session.brain.model,
29
+ parentSessionId: request.session.parentId,
30
+ sessionId: request.session.id,
31
+ });
32
+ yield* Effect.logInfo("Launching Pi child session");
33
+ return yield* usePiStart((signal) => sdk.start({
34
+ cwd: request.cwd,
35
+ extensions: [],
36
+ model: Option.some(request.session.brain.model),
37
+ signal,
38
+ thinkingLevel: request.session.brain.effort,
39
+ toolMode: "repository",
40
+ }), (cause) => childError("launch", request, "Pi child session failed to start", cause), (acquired) => Effect.gen(function* () {
41
+ const started = acquired.result;
42
+ if (started._tag === "UnknownModel") {
43
+ yield* Effect.logError("Pi child rejected an unknown model", {
44
+ model: request.session.brain.model,
45
+ });
46
+ return yield* new UnknownModelError({
47
+ harness: "pi",
48
+ model: request.session.brain.model,
49
+ message: `Pi does not expose model ${request.session.brain.model}`,
50
+ });
51
+ }
52
+ if (started._tag === "AuthenticationUnavailable") {
53
+ yield* Effect.logError("Pi child has no credential for its model", {
54
+ model: started.model,
55
+ requiredPool: "apiKeys",
56
+ });
57
+ return yield* new PoolUnavailableError({
58
+ harness: "pi",
59
+ model: started.model,
60
+ pool: "apiKeys",
61
+ message: `Pi child model ${started.model} must use an API key`,
62
+ });
63
+ }
64
+ if (started._tag === "UnsupportedAuthentication") {
65
+ yield* Effect.logError("Pi child model has unsupported OAuth authentication", {
66
+ model: started.model,
67
+ requiredPool: "apiKeys",
68
+ subscription: started.authentication.subscription,
69
+ });
70
+ return yield* new PoolUnavailableError({
71
+ harness: "pi",
72
+ model: started.model,
73
+ pool: "apiKeys",
74
+ message: `Pi child model ${started.model} must use an API key`,
75
+ });
76
+ }
77
+ if (started.pool !== "apiKeys") {
78
+ yield* Effect.logError("Pi child resolved to an unsupported billing pool", {
79
+ model: started.model,
80
+ requiredPool: "apiKeys",
81
+ resolvedPool: started.pool,
82
+ });
83
+ return yield* new PoolUnavailableError({
84
+ harness: "pi",
85
+ model: started.model,
86
+ pool: "apiKeys",
87
+ message: `Pi child model ${started.model} must use an API key`,
88
+ });
89
+ }
90
+ const session = new Agent.ChildSession({
91
+ id: request.session.id,
92
+ parentId: request.session.parentId,
93
+ agent: request.session.agent,
94
+ brain: new Agent.BrainSpec({
95
+ harness: "pi",
96
+ model: started.model,
97
+ effort: request.session.brain.effort,
98
+ }),
99
+ });
100
+ const channel = yield* sessionChannel({
101
+ label: "Pi child session",
102
+ sessionId: session.id,
103
+ });
104
+ yield* channel.emit(new Agent.SessionStarted({ session }));
105
+ const subscription = yield* subscribePiSession(started.session, session, channel);
106
+ // Once setup succeeds, the ambient scope owns both subscription and SDK session.
107
+ yield* Effect.addFinalizer(() => Effect.sync(subscription.unsubscribe).pipe(Effect.andThen(Effect.sync(acquired.dispose))));
108
+ yield* Effect.tryPromise({
109
+ try: () => started.session.prompt(request.prompt),
110
+ catch: (cause) => childError("stream", request, "Pi child session failed", cause),
111
+ }).pipe(Effect.flatMap(() => channel.finish(session, subscription.lastText() ??
112
+ lastPiMessageText(started.session.messages) ??
113
+ "Pi child session completed")), Effect.catch((error) => channel.fail(error)), Effect.forkScoped);
114
+ const steer = Effect.fn("PiChildBackend.steer")((message) => Effect.logDebug("Steering Pi child session", {
115
+ sessionId: session.id,
116
+ }).pipe(Effect.andThen(Effect.tryPromise({
117
+ try: () => started.session.steer(message),
118
+ catch: (cause) => childError("steer", request, "Could not steer Pi child", cause),
119
+ }))));
120
+ const interrupt = Effect.logInfo("Interrupting Pi child session", {
121
+ sessionId: session.id,
122
+ }).pipe(Effect.andThen(Effect.tryPromise({
123
+ try: () => started.session.abort(),
124
+ catch: (cause) => childError("interrupt", request, "Could not interrupt Pi child", cause),
125
+ })));
126
+ return {
127
+ session,
128
+ events: Stream.fromQueue(channel.events),
129
+ interrupt,
130
+ result: Deferred.await(channel.result),
131
+ steer,
132
+ };
133
+ }));
134
+ });
135
+ return PiChildBackend.of({ launch });
136
+ });
137
+ const makePiParent = Effect.gen(function* () {
138
+ const children = yield* ChildBackend;
139
+ const sdk = yield* PiSdk;
140
+ const launch = Effect.fn("PiParentRuntime.launch")(function* (request) {
141
+ const parentId = Agent.SessionId.make(`parent:${request.spec.attemptId}`);
142
+ yield* Effect.annotateCurrentSpan({
143
+ agent: request.spec.agent.name,
144
+ attemptId: request.spec.attemptId,
145
+ effort: request.spec.agent.brain.effort,
146
+ parentModel: Option.getOrUndefined(request.spec.parentModel),
147
+ repository: request.spec.repository,
148
+ sessionId: parentId,
149
+ });
150
+ yield* Effect.logInfo("Launching Pi parent session");
151
+ const channel = yield* sessionChannel({
152
+ label: "Pi parent session",
153
+ sessionId: parentId,
154
+ });
155
+ // The Pi tool callback runs outside any usine fiber. Child programs must
156
+ // still carry this fiber's services (stderr logging, tracing) and die
157
+ // with this launch scope, so the extension receives a runner instead of
158
+ // reaching for the default runtime.
159
+ const scope = yield* Effect.scope;
160
+ const context = yield* Effect.context();
161
+ const runChild = (program) => Effect.runPromise(program.pipe(Effect.provideContext(context), Effect.forkIn(scope), Effect.flatMap(Fiber.join)));
162
+ return yield* usePiStart((signal) => sdk.start({
163
+ cwd: request.cwd,
164
+ extensions: [
165
+ subagentsExtension({
166
+ agent: request.spec.agent,
167
+ backend: children,
168
+ cwd: request.cwd,
169
+ emit: channel.emit,
170
+ parentId,
171
+ run: runChild,
172
+ }),
173
+ ],
174
+ model: request.spec.parentModel,
175
+ signal,
176
+ thinkingLevel: request.spec.agent.brain.effort,
177
+ toolMode: "orchestration",
178
+ }), (cause) => parentError("launch", request, "Pi parent session failed to start", cause), (acquired) => Effect.gen(function* () {
179
+ const started = acquired.result;
180
+ if (started._tag === "UnknownModel") {
181
+ const model = Option.getOrElse(request.spec.parentModel, () => Agent.ModelId.make("unknown"));
182
+ yield* Effect.logError("Pi parent rejected an unknown model", {
183
+ model,
184
+ });
185
+ return yield* new UnknownModelError({
186
+ harness: "pi",
187
+ model,
188
+ message: `Pi does not expose model ${model}`,
189
+ });
190
+ }
191
+ if (started._tag === "AuthenticationUnavailable") {
192
+ yield* Effect.logError("Pi parent has no credential for its model", {
193
+ model: started.model,
194
+ requiredPool: started.requiredPool,
195
+ });
196
+ return yield* new PoolUnavailableError({
197
+ harness: "pi",
198
+ model: started.model,
199
+ pool: started.requiredPool,
200
+ message: `Pi parent model ${started.model} requires a credential from the ${started.requiredPool} pool`,
201
+ });
202
+ }
203
+ if (started._tag === "UnsupportedAuthentication") {
204
+ yield* Effect.logError("Pi parent model has unsupported OAuth authentication", {
205
+ model: started.model,
206
+ requiredPool: started.requiredPool,
207
+ subscription: started.authentication.subscription,
208
+ });
209
+ return yield* new PoolUnavailableError({
210
+ harness: "pi",
211
+ model: started.model,
212
+ pool: started.requiredPool,
213
+ message: `Pi parent model ${started.model} requires a credential from the ${started.requiredPool} pool`,
214
+ });
215
+ }
216
+ yield* Effect.annotateCurrentSpan({ parentPool: started.pool });
217
+ yield* Effect.logInfo("Pi parent session authenticated", {
218
+ model: started.model,
219
+ pool: started.pool,
220
+ });
221
+ const parent = new Agent.ParentSession({
222
+ id: parentId,
223
+ agent: request.spec.agent.name,
224
+ brain: new Agent.BrainSpec({
225
+ harness: "pi",
226
+ model: started.model,
227
+ effort: request.spec.agent.brain.effort,
228
+ }),
229
+ });
230
+ yield* channel.emit(new Agent.SessionStarted({ session: parent }));
231
+ const subscription = yield* subscribePiSession(started.session, parent, channel);
232
+ // Once setup succeeds, the ambient scope owns both subscription and SDK session.
233
+ yield* Effect.addFinalizer(() => Effect.sync(subscription.unsubscribe).pipe(Effect.andThen(Effect.sync(acquired.dispose))));
234
+ const prompt = assemblePrompt({
235
+ repository: request.spec.repository,
236
+ payload: request.spec.payload,
237
+ agent: request.spec.agent.name,
238
+ persona: request.spec.agent.persona,
239
+ task: request.spec.task,
240
+ });
241
+ const run = Effect.tryPromise({
242
+ try: () => started.session.prompt(prompt),
243
+ catch: (cause) => parentError("stream", request, "Pi parent session failed", cause),
244
+ }).pipe(Effect.flatMap(() => channel.finish(parent, subscription.lastText() ??
245
+ lastPiMessageText(started.session.messages) ??
246
+ "Pi parent session completed")), Effect.catch((error) => channel.fail(error)));
247
+ yield* Effect.forkScoped(run);
248
+ const steer = Effect.fn("PiParentRuntime.steer")((message) => Effect.logDebug("Steering Pi parent session", {
249
+ sessionId: parentId,
250
+ }).pipe(Effect.andThen(Effect.tryPromise({
251
+ try: () => started.session.steer(message),
252
+ catch: (cause) => parentError("steer", request, "Could not steer Pi", cause),
253
+ }))));
254
+ const interrupt = Effect.logInfo("Interrupting Pi parent session", {
255
+ sessionId: parentId,
256
+ }).pipe(Effect.andThen(Effect.tryPromise({
257
+ try: () => started.session.abort(),
258
+ catch: (cause) => parentError("interrupt", request, "Could not interrupt Pi", cause),
259
+ })));
260
+ return {
261
+ session: parent,
262
+ events: Stream.fromQueue(channel.events),
263
+ interrupt,
264
+ result: Deferred.await(channel.result),
265
+ steer,
266
+ };
267
+ }));
268
+ });
269
+ return AgentRuntime.of({ launch });
270
+ });
271
+ export const piParentLayer = Layer.effect(AgentRuntime, makePiParent);
272
+ export const piChildBackendLayer = Layer.effect(PiChildBackend, makePiChild);
273
+ //# sourceMappingURL=pi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.js","sourceRoot":"","sources":["../../src/pi/pi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import { createAgentSession, type AgentSessionEvent, type InlineExtension } from "@earendil-works/pi-coding-agent";
2
+ import { Agent } from "@usine/core";
3
+ import { Context, Effect, Layer, Option } from "effect";
4
+ import { type PiAuthentication, type PiPool } from "./authentication.ts";
5
+ export type PiSessionEvent = AgentSessionEvent;
6
+ export type PiMessage = Awaited<ReturnType<typeof createAgentSession>>["session"]["messages"][number];
7
+ /** Narrow in-process Pi session surface consumed by the adapter. */
8
+ export interface PiSession {
9
+ readonly messages: ReadonlyArray<PiMessage>;
10
+ readonly subscribe: (listener: (event: PiSessionEvent) => void) => () => void;
11
+ readonly prompt: (prompt: string) => Promise<void>;
12
+ readonly steer: (message: string) => Promise<void>;
13
+ readonly abort: () => Promise<void>;
14
+ readonly dispose: () => void;
15
+ }
16
+ export interface PiStartOptions {
17
+ readonly cwd: string;
18
+ readonly extensions: ReadonlyArray<InlineExtension>;
19
+ readonly model: Option.Option<Agent.ModelId>;
20
+ readonly signal: AbortSignal;
21
+ readonly thinkingLevel: Agent.Effort;
22
+ readonly toolMode: "orchestration" | "repository";
23
+ }
24
+ export type PiStartResult = {
25
+ readonly _tag: "AuthenticationUnavailable";
26
+ readonly model: Agent.ModelId;
27
+ readonly requiredPool: PiPool;
28
+ } | {
29
+ readonly _tag: "UnsupportedAuthentication";
30
+ readonly authentication: Extract<PiAuthentication, {
31
+ readonly _tag: "OAuth";
32
+ }>;
33
+ readonly model: Agent.ModelId;
34
+ readonly requiredPool: PiPool;
35
+ } | {
36
+ readonly _tag: "UnknownModel";
37
+ } | {
38
+ readonly _tag: "Started";
39
+ readonly model: Agent.ModelId;
40
+ readonly pool: PiPool;
41
+ readonly session: PiSession;
42
+ };
43
+ /** The parent orchestrates through usine extensions; harnesses own repository tools. */
44
+ export declare const piParentSessionToolPolicy: {
45
+ readonly noTools: "builtin";
46
+ };
47
+ declare const PiSdk_base: Context.ServiceClass<PiSdk, "@usine/agents/pi/PiSdk", {
48
+ readonly start: (options: PiStartOptions) => Promise<PiStartResult>;
49
+ }>;
50
+ /** Narrow SDK seam keeps vendor setup testable without module replacement. */
51
+ export declare class PiSdk extends PiSdk_base {
52
+ }
53
+ export declare const piSdkLive: Layer.Layer<PiSdk, never, never>;
54
+ export interface AcquiredPiStart {
55
+ readonly result: PiStartResult;
56
+ /** Idempotent because both failed setup and the ambient scope may request cleanup. */
57
+ readonly dispose: () => void;
58
+ }
59
+ /**
60
+ * Keeps SDK startup interruptible while retaining ownership until setup succeeds.
61
+ * A result that loses the race with interruption is disposed in its Promise
62
+ * continuation; a result already handed to `use` is disposed by `onExit`.
63
+ */
64
+ 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>;
65
+ export {};
66
+ //# sourceMappingURL=sdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/pi/sdk.ts"],"names":[],"mappings":"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"}
package/dist/pi/sdk.js ADDED
@@ -0,0 +1,154 @@
1
+ import { createAgentSession, DefaultResourceLoader, getAgentDir, ModelRuntime, SessionManager, SettingsManager, } from "@earendil-works/pi-coding-agent";
2
+ import { Agent } from "@usine/core";
3
+ import { Context, Effect, Exit, Layer, Option } from "effect";
4
+ import { requiredPiPool, resolvePiPool, } from "./authentication.js";
5
+ /** The parent orchestrates through usine extensions; harnesses own repository tools. */
6
+ export const piParentSessionToolPolicy = { noTools: "builtin" };
7
+ /** Narrow SDK seam keeps vendor setup testable without module replacement. */
8
+ export class PiSdk extends Context.Service()("@usine/agents/pi/PiSdk") {
9
+ }
10
+ const splitModel = (model) => {
11
+ const separator = model.indexOf("/");
12
+ return separator <= 0 || separator === model.length - 1
13
+ ? undefined
14
+ : [model.slice(0, separator), model.slice(separator + 1)];
15
+ };
16
+ export const piSdkLive = Layer.succeed(PiSdk)({
17
+ start: async (options) => {
18
+ const modelRuntime = await ModelRuntime.create({ signal: options.signal });
19
+ let selected;
20
+ if (Option.isSome(options.model)) {
21
+ const parts = splitModel(options.model.value);
22
+ if (parts === undefined)
23
+ return { _tag: "UnknownModel" };
24
+ selected = modelRuntime.getModel(parts[0], parts[1]);
25
+ if (selected === undefined)
26
+ return { _tag: "UnknownModel" };
27
+ }
28
+ const agentDir = getAgentDir();
29
+ // The Attempt worktree is repository-controlled input: never trust its
30
+ // `.pi/` settings, SYSTEM.md, extensions, or skills. The subagents tool
31
+ // arrives as an inline factory, which the loader registers regardless.
32
+ const settingsManager = SettingsManager.create(options.cwd, agentDir, {
33
+ projectTrusted: false,
34
+ });
35
+ const resourceLoader = new DefaultResourceLoader({
36
+ agentDir,
37
+ cwd: options.cwd,
38
+ extensionFactories: [...options.extensions],
39
+ settingsManager,
40
+ noExtensions: true,
41
+ noPromptTemplates: true,
42
+ noSkills: true,
43
+ noThemes: true,
44
+ });
45
+ await resourceLoader.reload();
46
+ const sessionOptions = {
47
+ cwd: options.cwd,
48
+ modelRuntime,
49
+ resourceLoader,
50
+ sessionManager: SessionManager.inMemory(options.cwd),
51
+ settingsManager,
52
+ thinkingLevel: options.thinkingLevel,
53
+ };
54
+ const toolScopedSessionOptions = options.toolMode === "orchestration"
55
+ ? { ...sessionOptions, ...piParentSessionToolPolicy }
56
+ : sessionOptions;
57
+ const { session } = selected === undefined
58
+ ? await createAgentSession(toolScopedSessionOptions)
59
+ : await createAgentSession({ ...toolScopedSessionOptions, model: selected });
60
+ let ownershipTransferred = false;
61
+ try {
62
+ const active = session.model;
63
+ if (active === undefined)
64
+ throw new Error("Pi started without an active model");
65
+ const model = Agent.ModelId.make(`${active.provider}/${active.id}`);
66
+ const resolvedAuthentication = await modelRuntime.checkAuth(active.provider, {
67
+ signal: options.signal,
68
+ });
69
+ const authentication = resolvedAuthentication?.type === "api_key"
70
+ ? { _tag: "ApiKey" }
71
+ : resolvedAuthentication?.type === "oauth"
72
+ ? {
73
+ _tag: "OAuth",
74
+ subscription: modelRuntime.getProvider(active.provider)?.auth.oauth?.isSubscription === true,
75
+ }
76
+ : undefined;
77
+ const requiredPool = requiredPiPool(active.provider);
78
+ const pool = resolvePiPool(active.provider, authentication);
79
+ if (authentication === undefined) {
80
+ return { _tag: "AuthenticationUnavailable", model, requiredPool };
81
+ }
82
+ if (pool === undefined && authentication._tag === "OAuth") {
83
+ return {
84
+ _tag: "UnsupportedAuthentication",
85
+ authentication,
86
+ model,
87
+ requiredPool,
88
+ };
89
+ }
90
+ if (pool === undefined) {
91
+ throw new Error("Pi could not map a configured API key to a billing pool");
92
+ }
93
+ ownershipTransferred = true;
94
+ return {
95
+ _tag: "Started",
96
+ model,
97
+ pool,
98
+ session,
99
+ };
100
+ }
101
+ finally {
102
+ if (!ownershipTransferred)
103
+ session.dispose();
104
+ }
105
+ },
106
+ });
107
+ /**
108
+ * Keeps SDK startup interruptible while retaining ownership until setup succeeds.
109
+ * A result that loses the race with interruption is disposed in its Promise
110
+ * continuation; a result already handed to `use` is disposed by `onExit`.
111
+ */
112
+ export const usePiStart = (start, onError, use) => Effect.suspend(() => {
113
+ let acquired;
114
+ let abandoned = false;
115
+ let pending = true;
116
+ const acquire = Effect.tryPromise({
117
+ try: (signal) => start(signal).then((result) => {
118
+ pending = false;
119
+ let disposed = false;
120
+ acquired = {
121
+ result,
122
+ dispose: () => {
123
+ if (disposed)
124
+ return;
125
+ disposed = true;
126
+ if (result._tag === "Started")
127
+ result.session.dispose();
128
+ },
129
+ };
130
+ if (abandoned || signal.aborted)
131
+ acquired.dispose();
132
+ return acquired;
133
+ }, (cause) => {
134
+ pending = false;
135
+ throw cause;
136
+ }),
137
+ catch: onError,
138
+ });
139
+ return acquire.pipe(Effect.flatMap(use), Effect.onExit((exit) => {
140
+ if (Exit.isSuccess(exit))
141
+ return Effect.void;
142
+ abandoned = true;
143
+ if (acquired?.result._tag === "Started") {
144
+ return Effect.logWarning("Disposing Pi session after an incomplete launch", {
145
+ model: acquired.result.model,
146
+ pool: acquired.result.pool,
147
+ }).pipe(Effect.andThen(Effect.sync(acquired.dispose)));
148
+ }
149
+ return pending
150
+ ? Effect.logWarning("Pi launch ended during SDK startup; any late-created session will be disposed")
151
+ : Effect.void;
152
+ }));
153
+ });
154
+ //# sourceMappingURL=sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/pi/sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { Agent } from "@usine/core";
2
+ import { Cause, Deferred, Effect, Queue } from "effect";
3
+ import { type AgentSessionError, SessionResult } from "../runtime.ts";
4
+ import type { PiMessage, PiSession } from "./sdk.ts";
5
+ export interface SessionChannelOptions {
6
+ /** Human-readable adapter name used in the terminal log lines. */
7
+ readonly label: string;
8
+ readonly sessionId: Agent.SessionId;
9
+ }
10
+ /**
11
+ * Terminal-once state every session adapter shares: one event queue, one
12
+ * result, and a latch guaranteeing exactly one terminal transition. Cleanups
13
+ * registered through `onTerminal` run on whichever transition wins.
14
+ */
15
+ export interface SessionChannel {
16
+ readonly events: Queue.Queue<Agent.SessionEvent, AgentSessionError | Cause.Done>;
17
+ readonly result: Deferred.Deferred<SessionResult, AgentSessionError>;
18
+ readonly isTerminal: Effect.Effect<boolean>;
19
+ readonly onTerminal: (cleanup: () => void) => void;
20
+ /** Offers one event, logging instead of silently dropping it after the terminal transition. */
21
+ readonly emit: (event: Agent.SessionEvent) => Effect.Effect<void>;
22
+ readonly fail: (error: AgentSessionError) => Effect.Effect<void>;
23
+ readonly finish: (session: Agent.Session, message: string) => Effect.Effect<void>;
24
+ }
25
+ export declare const sessionChannel: (options: SessionChannelOptions) => Effect.Effect<{
26
+ events: Queue.Queue<Agent.PoolRateLimitsUpdated | Agent.SessionFinished | Agent.SessionStarted | Agent.TextOutput | Agent.ToolFinished | Agent.ToolStarted, import("../runtime.ts").AgentResultError | Cause.Done<void> | import("../runtime.ts").PoolUnavailableError | import("../runtime.ts").SessionOperationError | import("../runtime.ts").UnknownModelError | import("../runtime.ts").UnsupportedEffortError>;
27
+ result: Deferred.Deferred<SessionResult, import("../runtime.ts").AgentResultError | import("../runtime.ts").PoolUnavailableError | import("../runtime.ts").SessionOperationError | import("../runtime.ts").UnknownModelError | import("../runtime.ts").UnsupportedEffortError>;
28
+ isTerminal: Effect.Effect<boolean, never, never>;
29
+ onTerminal: (cleanup: () => void) => void;
30
+ emit: (event: Agent.SessionEvent) => Effect.Effect<void, never, never>;
31
+ fail: (error: import("../runtime.ts").AgentResultError | import("../runtime.ts").PoolUnavailableError | import("../runtime.ts").SessionOperationError | import("../runtime.ts").UnknownModelError | import("../runtime.ts").UnsupportedEffortError) => Effect.Effect<void, never, never>;
32
+ finish: (session: Agent.ChildSession | Agent.ParentSession, message: string) => Effect.Effect<void, never, never>;
33
+ }, never, never>;
34
+ export declare const lastPiMessageText: (messages: ReadonlyArray<PiMessage>) => string | undefined;
35
+ /**
36
+ * Bridges the Pi SDK's synchronous subscriber onto one session channel.
37
+ * Normalized events reach the queue on the SDK's own tick — no async hop, so
38
+ * nothing can trail the prompt's resolution — while operational events with
39
+ * no normalized shape (retry backoffs, compactions) are logged through the
40
+ * launch fiber's captured services so a silent wait stays explainable.
41
+ */
42
+ export declare const subscribePiSession: (piSession: PiSession, session: Agent.Session, channel: SessionChannel) => Effect.Effect<{
43
+ lastText: () => string | undefined;
44
+ unsubscribe: () => void;
45
+ }, never, never>;
46
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/pi/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAe,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,KAAK,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAkB,MAAM,UAAU,CAAC;AAErE,MAAM,WAAW,qBAAqB;IACpC,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;CACrC;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IACjF,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;IACrE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5C,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IACnD,+FAA+F;IAC/F,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClE,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjE,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACnF;AAED,eAAO,MAAM,cAAc;;;;0BAqDD,MAAM,IAAI;kBA1Cb,KAAK,CAAC,YAAY;;;gBAiDvC,CAAC;AAyCH,eAAO,MAAM,iBAAiB,aAAc,aAAa,CAAC,SAAS,CAAC,KAAG,MAAM,GAAG,SAQ/E,CAAC;AA8BF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,cAClB,SAAS,WACX,KAAK,CAAC,OAAO,WACb,cAAc;;;gBAsDrB,CAAC"}