@jpowersdev/effect-pi 0.1.0 → 0.2.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/CHANGELOG.md +5 -0
- package/README.md +9 -1
- package/dist/Session.d.ts +1 -1
- package/dist/Session.d.ts.map +1 -1
- package/dist/Session.js +1 -1
- package/dist/Session.js.map +1 -1
- package/dist/internal/ClusterSessions.d.ts +10 -1
- package/dist/internal/ClusterSessions.d.ts.map +1 -1
- package/dist/internal/ClusterSessions.js +2 -2
- package/dist/internal/ClusterSessions.js.map +1 -1
- package/dist/internal/Pi.d.ts +1 -18
- package/dist/internal/Pi.d.ts.map +1 -1
- package/dist/internal/Pi.js +28 -3
- package/dist/internal/Pi.js.map +1 -1
- package/dist/internal/Protocol.d.ts +20 -2
- package/dist/internal/Protocol.d.ts.map +1 -1
- package/dist/internal/Protocol.js +1 -1
- package/dist/internal/Protocol.js.map +1 -1
- package/dist/internal/Session.d.ts +83 -7
- package/dist/internal/Session.d.ts.map +1 -1
- package/dist/internal/Session.js +108 -7
- package/dist/internal/Session.js.map +1 -1
- package/dist-examples/cluster-session.js +4 -2
- package/dist-examples/cluster-session.js.map +1 -1
- package/dist-examples/local-session-pool.js +4 -2
- package/dist-examples/local-session-pool.js.map +1 -1
- package/dist-examples/single-session.js +4 -2
- package/dist-examples/single-session.js.map +1 -1
- package/docs/reference.md +14 -4
- package/examples/cluster-session.ts +4 -2
- package/examples/local-session-pool.ts +4 -2
- package/examples/single-session.ts +4 -2
- package/package.json +16 -24
- package/src/Session.ts +10 -2
- package/src/internal/ClusterSessions.ts +6 -3
- package/src/internal/Pi.ts +33 -5
- package/src/internal/Protocol.ts +1 -1
- package/src/internal/Session.ts +165 -11
package/dist/internal/Session.js
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
|
+
import * as Deferred from "effect/Deferred";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Exit from "effect/Exit";
|
|
4
|
+
import * as PubSub from "effect/PubSub";
|
|
5
|
+
import * as Queue from "effect/Queue";
|
|
1
6
|
import * as Schema from "effect/Schema";
|
|
7
|
+
import * as Stream from "effect/Stream";
|
|
8
|
+
import * as Take from "effect/Take";
|
|
2
9
|
/** A Pi session id accepted by Pi's SessionManager. */
|
|
3
10
|
export const Id = Schema.String.check(Schema.isPattern(/^[A-Za-z0-9](?:[A-Za-z0-9._-]*[A-Za-z0-9])?$/)).pipe(Schema.brand("@jpowersdev/effect-pi/SessionId"));
|
|
4
11
|
export const Status = Schema.Literals(["idle", "streaming"]);
|
|
@@ -20,27 +27,41 @@ export class PromptResult extends Schema.Class("@jpowersdev/effect-pi/PromptResu
|
|
|
20
27
|
costUsd: Schema.Number.check(Schema.isGreaterThanOrEqualTo(0))
|
|
21
28
|
}) {
|
|
22
29
|
}
|
|
23
|
-
const StatusEvent = Schema.TaggedStruct("Status", {
|
|
30
|
+
export const StatusEvent = Schema.TaggedStruct("Status", {
|
|
24
31
|
sequence: Schema.Natural,
|
|
25
32
|
status: Status
|
|
26
33
|
});
|
|
27
|
-
const
|
|
34
|
+
export const MessageStart = Schema.TaggedStruct("MessageStart", {
|
|
28
35
|
sequence: Schema.Natural,
|
|
36
|
+
messageSequence: Schema.Natural
|
|
37
|
+
});
|
|
38
|
+
export const MessageDelta = Schema.TaggedStruct("MessageDelta", {
|
|
39
|
+
sequence: Schema.Natural,
|
|
40
|
+
messageSequence: Schema.Natural,
|
|
29
41
|
delta: Schema.String
|
|
30
42
|
});
|
|
31
|
-
const
|
|
43
|
+
export const MessageEnd = Schema.TaggedStruct("MessageEnd", {
|
|
44
|
+
sequence: Schema.Natural,
|
|
45
|
+
messageSequence: Schema.Natural,
|
|
46
|
+
content: Schema.String,
|
|
47
|
+
stopReason: Schema.String
|
|
48
|
+
});
|
|
49
|
+
export const MessagePart = Schema.Union([MessageStart, MessageDelta, MessageEnd]);
|
|
50
|
+
export const ToolStartedEvent = Schema.TaggedStruct("ToolStarted", {
|
|
32
51
|
sequence: Schema.Natural,
|
|
33
52
|
toolName: Schema.String
|
|
34
53
|
});
|
|
35
|
-
const ToolFinishedEvent = Schema.TaggedStruct("ToolFinished", {
|
|
54
|
+
export const ToolFinishedEvent = Schema.TaggedStruct("ToolFinished", {
|
|
36
55
|
sequence: Schema.Natural,
|
|
37
56
|
toolName: Schema.String,
|
|
38
57
|
isError: Schema.Boolean
|
|
39
58
|
});
|
|
40
|
-
/**
|
|
41
|
-
export const
|
|
59
|
+
/** Flat, serializable event protocol used across Cluster transport. */
|
|
60
|
+
export const WireEvent = Schema.Union([
|
|
42
61
|
StatusEvent,
|
|
43
|
-
|
|
62
|
+
MessageStart,
|
|
63
|
+
MessageDelta,
|
|
64
|
+
MessageEnd,
|
|
44
65
|
ToolStartedEvent,
|
|
45
66
|
ToolFinishedEvent
|
|
46
67
|
]);
|
|
@@ -60,4 +81,84 @@ export class Error extends Schema.TaggedError()("SessionError", {
|
|
|
60
81
|
message: Schema.String
|
|
61
82
|
}) {
|
|
62
83
|
}
|
|
84
|
+
/** Reconstruct high-level assistant-message resources from serializable event frames. */
|
|
85
|
+
export const eventsFromWire = (id, wireEvents) => Stream.unwrap(Effect.gen(function* () {
|
|
86
|
+
const output = yield* Effect.acquireRelease(PubSub.sliding({ capacity: 1024, replay: 1024 }), PubSub.shutdown);
|
|
87
|
+
let active;
|
|
88
|
+
const finishActive = (error) => {
|
|
89
|
+
const current = active;
|
|
90
|
+
active = undefined;
|
|
91
|
+
if (current === undefined)
|
|
92
|
+
return Effect.void;
|
|
93
|
+
return Effect.all([
|
|
94
|
+
Queue.offer(current.parts, Exit.fail(error)),
|
|
95
|
+
Deferred.fail(current.content, error)
|
|
96
|
+
], { discard: true });
|
|
97
|
+
};
|
|
98
|
+
const consumeFrames = wireEvents.pipe(Stream.runForEach((event) => Effect.gen(function* () {
|
|
99
|
+
switch (event._tag) {
|
|
100
|
+
case "MessageStart": {
|
|
101
|
+
yield* finishActive(new Error({
|
|
102
|
+
sessionId: id,
|
|
103
|
+
operation: "events",
|
|
104
|
+
message: "A new assistant message started before the previous message ended"
|
|
105
|
+
}));
|
|
106
|
+
const parts = yield* Queue.unbounded();
|
|
107
|
+
const content = yield* Deferred.make();
|
|
108
|
+
active = { messageSequence: event.messageSequence, parts, content };
|
|
109
|
+
yield* PubSub.publish(output, [{
|
|
110
|
+
_tag: "AssistantMessage",
|
|
111
|
+
sequence: event.sequence,
|
|
112
|
+
stream: Stream.fromQueue(parts).pipe(Stream.flattenTake),
|
|
113
|
+
content: Deferred.await(content)
|
|
114
|
+
}]);
|
|
115
|
+
yield* Queue.offer(parts, [event]);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
case "MessageDelta":
|
|
119
|
+
if (active?.messageSequence === event.messageSequence) {
|
|
120
|
+
yield* Queue.offer(active.parts, [event]);
|
|
121
|
+
}
|
|
122
|
+
return;
|
|
123
|
+
case "MessageEnd":
|
|
124
|
+
if (active?.messageSequence === event.messageSequence) {
|
|
125
|
+
const completed = active;
|
|
126
|
+
active = undefined;
|
|
127
|
+
yield* Queue.offer(completed.parts, [event]);
|
|
128
|
+
yield* Deferred.succeed(completed.content, event.content);
|
|
129
|
+
yield* Queue.offer(completed.parts, Exit.void);
|
|
130
|
+
}
|
|
131
|
+
return;
|
|
132
|
+
default:
|
|
133
|
+
if (event._tag === "Status" && event.status === "idle" && active !== undefined) {
|
|
134
|
+
yield* finishActive(new Error({
|
|
135
|
+
sessionId: id,
|
|
136
|
+
operation: "events",
|
|
137
|
+
message: "The assistant message ended with missing event frames"
|
|
138
|
+
}));
|
|
139
|
+
}
|
|
140
|
+
yield* PubSub.publish(output, [event]);
|
|
141
|
+
}
|
|
142
|
+
})));
|
|
143
|
+
const consume = consumeFrames.pipe(Effect.onExit((exit) => Effect.gen(function* () {
|
|
144
|
+
if (active !== undefined) {
|
|
145
|
+
if (Exit.isFailure(exit)) {
|
|
146
|
+
yield* Queue.offer(active.parts, exit);
|
|
147
|
+
yield* Deferred.failCause(active.content, exit.cause);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
yield* finishActive(new Error({
|
|
151
|
+
sessionId: id,
|
|
152
|
+
operation: "events",
|
|
153
|
+
message: "The event stream ended before the assistant message completed"
|
|
154
|
+
}));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
yield* PubSub.publish(output, exit);
|
|
158
|
+
})));
|
|
159
|
+
yield* Effect.forkScoped(consume, { startImmediately: true });
|
|
160
|
+
return Stream.fromPubSubTake(output);
|
|
161
|
+
}));
|
|
162
|
+
/** Flatten high-level events into the serializable Cluster wire protocol. */
|
|
163
|
+
export const eventsToWire = (events) => events.pipe(Stream.flatMap((event) => event._tag === "AssistantMessage" ? event.stream : Stream.fromIterable([event])));
|
|
63
164
|
//# sourceMappingURL=Session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Session.js","sourceRoot":"","sources":["../../src/internal/Session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Session.js","sourceRoot":"","sources":["../../src/internal/Session.ts"],"names":[],"mappings":"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"}
|
|
@@ -68,10 +68,12 @@ const cli = Command.make("cluster-session", {
|
|
|
68
68
|
return yield* Console.log(yield* session.snapshot);
|
|
69
69
|
}
|
|
70
70
|
// Remote subscriptions are best-effort; use the prompt result to reconcile.
|
|
71
|
-
yield* session.events.pipe(Stream.runForEach((event) =>
|
|
71
|
+
yield* session.events.pipe(Stream.runForEach((event) => event._tag === "AssistantMessage"
|
|
72
|
+
? Effect.flatMap(event.content, (content) => Console.log(content))
|
|
73
|
+
: Console.log(event)), Effect.catch((error) => Console.warn(error)), Effect.forkScoped({ startImmediately: true }));
|
|
72
74
|
const result = yield* session.prompt(prompt).pipe(Effect.timeout("2 minutes"));
|
|
73
75
|
yield* Console.log("Result:", result);
|
|
74
76
|
}).pipe(Effect.scoped)).pipe(Command.provide(ClientLive));
|
|
75
|
-
const program = Command.run(cli, { version: "0.
|
|
77
|
+
const program = Command.run(cli, { version: "0.2.0" }).pipe(Effect.provide(NodeServices.layer));
|
|
76
78
|
NodeRuntime.runMain(program);
|
|
77
79
|
//# sourceMappingURL=cluster-session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cluster-session.js","sourceRoot":"","sources":["../examples/cluster-session.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cluster-session.js","sourceRoot":"","sources":["../examples/cluster-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,7 +45,9 @@ const cli = Command.make("local-session-pool", {
|
|
|
45
45
|
if (snapshot) {
|
|
46
46
|
return yield* Console.log(yield* session.snapshot);
|
|
47
47
|
}
|
|
48
|
-
yield* session.events.pipe(Stream.runForEach((event) =>
|
|
48
|
+
yield* session.events.pipe(Stream.runForEach((event) => event._tag === "AssistantMessage"
|
|
49
|
+
? Effect.flatMap(event.content, (content) => Console.log(content))
|
|
50
|
+
: Console.log(event)), Effect.catch((error) => Console.warn(error)), Effect.forkScoped({ startImmediately: true }));
|
|
49
51
|
const result = yield* session.prompt(prompt).pipe(Effect.timeout("2 minutes"));
|
|
50
52
|
yield* Console.log("Result:", result);
|
|
51
53
|
}));
|
|
@@ -55,6 +57,6 @@ const cli = Command.make("local-session-pool", {
|
|
|
55
57
|
yield* Console.log("Reopened:", yield* session.snapshot);
|
|
56
58
|
}));
|
|
57
59
|
}).pipe(Effect.scoped)).pipe(Command.provide(SessionsLive));
|
|
58
|
-
const program = Command.run(cli, { version: "0.
|
|
60
|
+
const program = Command.run(cli, { version: "0.2.0" }).pipe(Effect.provide(NodeServices.layer));
|
|
59
61
|
NodeRuntime.runMain(program);
|
|
60
62
|
//# sourceMappingURL=local-session-pool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-session-pool.js","sourceRoot":"","sources":["../examples/local-session-pool.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"local-session-pool.js","sourceRoot":"","sources":["../examples/local-session-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,10 +40,12 @@ const cli = Command.make("single-session", {
|
|
|
40
40
|
if (snapshot) {
|
|
41
41
|
return yield* Console.log(yield* session.snapshot);
|
|
42
42
|
}
|
|
43
|
-
yield* session.events.pipe(Stream.runForEach((event) =>
|
|
43
|
+
yield* session.events.pipe(Stream.runForEach((event) => event._tag === "AssistantMessage"
|
|
44
|
+
? Effect.flatMap(event.content, (content) => Console.log(content))
|
|
45
|
+
: Console.log(event)), Effect.catch((error) => Console.warn(error)), Effect.forkScoped({ startImmediately: true }));
|
|
44
46
|
const result = yield* session.prompt(prompt).pipe(Effect.timeout("2 minutes"));
|
|
45
47
|
yield* Console.log("Result:", result);
|
|
46
48
|
}).pipe(Effect.scoped)).pipe(Command.provide(Layer.merge(ModelLive, StoreLive)));
|
|
47
|
-
const program = Command.run(cli, { version: "0.
|
|
49
|
+
const program = Command.run(cli, { version: "0.2.0" }).pipe(Effect.provide(NodeServices.layer));
|
|
48
50
|
NodeRuntime.runMain(program);
|
|
49
51
|
//# sourceMappingURL=single-session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"single-session.js","sourceRoot":"","sources":["../examples/single-session.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"single-session.js","sourceRoot":"","sources":["../examples/single-session.ts"],"names":[],"mappings":"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"}
|
package/docs/reference.md
CHANGED
|
@@ -14,7 +14,7 @@ pnpm pack --pack-destination /tmp/effect-pi-pack
|
|
|
14
14
|
Then, from the consuming project:
|
|
15
15
|
|
|
16
16
|
```sh
|
|
17
|
-
pnpm add /tmp/effect-pi-pack/jpowersdev-effect-pi-0.
|
|
17
|
+
pnpm add /tmp/effect-pi-pack/jpowersdev-effect-pi-0.2.0.tgz effect@4.0.0-rc.116
|
|
18
18
|
```
|
|
19
19
|
|
|
20
20
|
For a published release, use the package name in place of the tarball path.
|
|
@@ -47,7 +47,7 @@ A session provides:
|
|
|
47
47
|
- `prompt(text)` — accept a nonempty prompt, wait its turn, run Pi, save a checkpoint, and return a result.
|
|
48
48
|
- `abort` — interrupt the active prompt and wait for settlement and a checkpoint. Queued prompts are not cancelled by this call.
|
|
49
49
|
- `snapshot` — current status, message count, and last assistant text.
|
|
50
|
-
- `events` — ephemeral status,
|
|
50
|
+
- `events` — ephemeral status, finite assistant-message streams, and tool lifecycle events.
|
|
51
51
|
- `jsonl` — serialize current state. This is **not** a store flush operation.
|
|
52
52
|
|
|
53
53
|
`configure(id)` synchronously returns per-session SDK options such as tool policy and thinking level. The library owns `cwd`, `sessionManager`, `modelRuntime`, `model`, `resourceLoader`, and `settingsManager`. SDK interoperability options remain version-coupled.
|
|
@@ -214,9 +214,19 @@ Token and cost fields sum usage recorded in entries appended during the invocati
|
|
|
214
214
|
|
|
215
215
|
Operational failures use `_tag: "SessionError"` with `sessionId`, `operation`, and `message`. An explicit abort or caller interruption interrupts the prompt Effect. A failed release checkpoint surfaces as a **defect carrying `Session.Error`**, since scope finalizers do not have a typed error channel. Model-fallback and extension-load diagnostics are logged as warnings; background checkpoint failures are logged and retried at subsequent checkpoint boundaries.
|
|
216
216
|
|
|
217
|
-
|
|
217
|
+
Each Pi `message_start` produces an `AssistantMessage` event. Its `stream` is a finite stream of `MessageStart`, `MessageDelta`, and `MessageEnd` parts, ending at Pi's corresponding `message_end`. Its `content` effect waits for the authoritative final text without requiring the caller to consume the part stream. Tool-using prompts can emit multiple sequential `AssistantMessage` events separated by tool lifecycle events.
|
|
218
218
|
|
|
219
|
-
|
|
219
|
+
```ts
|
|
220
|
+
session.events.pipe(
|
|
221
|
+
Stream.runForEach((event) => event._tag === "AssistantMessage"
|
|
222
|
+
? Effect.flatMap(event.content, (content) => Console.log(content))
|
|
223
|
+
: Effect.void)
|
|
224
|
+
)
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Top-level and message-part events share monotonically increasing sequence numbers **per live resource**, resetting on restoration. A jump between top-level sequence numbers can contain the nested parts of an `AssistantMessage`; a jump in the flattened sequence can indicate loss. The top-level live buffer holds 1,024 events and discards oldest events on overflow; each message stream buffers its finite parts independently for one consumer. There is no replay or subscription persistence. Reconcile using `snapshot`/`jsonl` or the completed prompt result; an event is not a durability acknowledgement.
|
|
228
|
+
|
|
229
|
+
Start the stream before prompting. Across Cluster, starting a client fiber does not acknowledge that the remote subscription is established, so an initial message stream can be missed. See [cluster-session.ts](../examples/cluster-session.ts) for best-effort event consumption in a scope.
|
|
220
230
|
|
|
221
231
|
## Persistence contract
|
|
222
232
|
|
|
@@ -111,7 +111,9 @@ const cli = Command.make("cluster-session", {
|
|
|
111
111
|
|
|
112
112
|
// Remote subscriptions are best-effort; use the prompt result to reconcile.
|
|
113
113
|
yield* session.events.pipe(
|
|
114
|
-
Stream.runForEach((event) =>
|
|
114
|
+
Stream.runForEach((event) => event._tag === "AssistantMessage"
|
|
115
|
+
? Effect.flatMap(event.content, (content) => Console.log(content))
|
|
116
|
+
: Console.log(event)),
|
|
115
117
|
Effect.catch((error) => Console.warn(error)),
|
|
116
118
|
Effect.forkScoped({ startImmediately: true })
|
|
117
119
|
)
|
|
@@ -124,7 +126,7 @@ const cli = Command.make("cluster-session", {
|
|
|
124
126
|
Command.provide(ClientLive)
|
|
125
127
|
)
|
|
126
128
|
|
|
127
|
-
const program = Command.run(cli, { version: "0.
|
|
129
|
+
const program = Command.run(cli, { version: "0.2.0" }).pipe(
|
|
128
130
|
Effect.provide(NodeServices.layer)
|
|
129
131
|
)
|
|
130
132
|
|
|
@@ -76,7 +76,9 @@ const cli = Command.make("local-session-pool", {
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
yield* session.events.pipe(
|
|
79
|
-
Stream.runForEach((event) =>
|
|
79
|
+
Stream.runForEach((event) => event._tag === "AssistantMessage"
|
|
80
|
+
? Effect.flatMap(event.content, (content) => Console.log(content))
|
|
81
|
+
: Console.log(event)),
|
|
80
82
|
Effect.catch((error) => Console.warn(error)),
|
|
81
83
|
Effect.forkScoped({ startImmediately: true })
|
|
82
84
|
)
|
|
@@ -100,7 +102,7 @@ const cli = Command.make("local-session-pool", {
|
|
|
100
102
|
Command.provide(SessionsLive)
|
|
101
103
|
)
|
|
102
104
|
|
|
103
|
-
const program = Command.run(cli, { version: "0.
|
|
105
|
+
const program = Command.run(cli, { version: "0.2.0" }).pipe(
|
|
104
106
|
Effect.provide(NodeServices.layer)
|
|
105
107
|
)
|
|
106
108
|
|
|
@@ -65,7 +65,9 @@ const cli = Command.make("single-session", {
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
yield* session.events.pipe(
|
|
68
|
-
Stream.runForEach((event) =>
|
|
68
|
+
Stream.runForEach((event) => event._tag === "AssistantMessage"
|
|
69
|
+
? Effect.flatMap(event.content, (content) => Console.log(content))
|
|
70
|
+
: Console.log(event)),
|
|
69
71
|
Effect.catch((error) => Console.warn(error)),
|
|
70
72
|
Effect.forkScoped({ startImmediately: true })
|
|
71
73
|
)
|
|
@@ -78,7 +80,7 @@ const cli = Command.make("single-session", {
|
|
|
78
80
|
Command.provide(Layer.merge(ModelLive, StoreLive))
|
|
79
81
|
)
|
|
80
82
|
|
|
81
|
-
const program = Command.run(cli, { version: "0.
|
|
83
|
+
const program = Command.run(cli, { version: "0.2.0" }).pipe(
|
|
82
84
|
Effect.provide(NodeServices.layer)
|
|
83
85
|
)
|
|
84
86
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jpowersdev/effect-pi",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Local and clustered Effect services for durable Pi coding-agent sessions",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -9,23 +9,12 @@
|
|
|
9
9
|
},
|
|
10
10
|
"homepage": "https://github.com/jpowersdev/effect-pi#readme",
|
|
11
11
|
"bugs": "https://github.com/jpowersdev/effect-pi/issues",
|
|
12
|
-
"publishConfig": {
|
|
13
|
-
"access": "public"
|
|
14
|
-
},
|
|
12
|
+
"publishConfig": { "access": "public" },
|
|
15
13
|
"type": "module",
|
|
16
14
|
"sideEffects": false,
|
|
17
15
|
"main": "./dist/index.js",
|
|
18
16
|
"types": "./dist/index.d.ts",
|
|
19
|
-
"files": [
|
|
20
|
-
"dist",
|
|
21
|
-
"src/**/*.ts",
|
|
22
|
-
"examples/*.ts",
|
|
23
|
-
"examples/README.md",
|
|
24
|
-
"dist-examples",
|
|
25
|
-
"docs/**/*.md",
|
|
26
|
-
"CHANGELOG.md",
|
|
27
|
-
"CONTRIBUTING.md"
|
|
28
|
-
],
|
|
17
|
+
"files": ["dist", "src/**/*.ts", "examples/*.ts", "examples/README.md", "dist-examples", "docs/**/*.md", "CHANGELOG.md", "CONTRIBUTING.md"],
|
|
29
18
|
"exports": {
|
|
30
19
|
".": {
|
|
31
20
|
"types": "./dist/index.d.ts",
|
|
@@ -35,6 +24,18 @@
|
|
|
35
24
|
"engines": {
|
|
36
25
|
"node": ">=26.0.0"
|
|
37
26
|
},
|
|
27
|
+
"packageManager": "pnpm@11.25.0",
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "tsc -b src examples",
|
|
30
|
+
"check": "tsc -b",
|
|
31
|
+
"clean": "tsc -b --clean && rm -rf dist dist-test dist-examples .tsbuildinfo",
|
|
32
|
+
"prepare": "tsc -b src",
|
|
33
|
+
"prepack": "pnpm clean && pnpm check && pnpm test && pnpm build",
|
|
34
|
+
"test": "vitest run",
|
|
35
|
+
"example:session": "pnpm build && node dist-examples/single-session.js",
|
|
36
|
+
"example:pool": "pnpm build && node dist-examples/local-session-pool.js",
|
|
37
|
+
"example:cluster": "pnpm build && node dist-examples/cluster-session.js"
|
|
38
|
+
},
|
|
38
39
|
"dependencies": {
|
|
39
40
|
"@earendil-works/pi-coding-agent": "0.86.1"
|
|
40
41
|
},
|
|
@@ -49,14 +50,5 @@
|
|
|
49
50
|
"@types/node": "26.4.1",
|
|
50
51
|
"typescript": "7.0.2",
|
|
51
52
|
"vitest": "5.0.1"
|
|
52
|
-
},
|
|
53
|
-
"scripts": {
|
|
54
|
-
"build": "tsc -b src examples",
|
|
55
|
-
"check": "tsc -b",
|
|
56
|
-
"clean": "tsc -b --clean && rm -rf dist dist-test dist-examples .tsbuildinfo",
|
|
57
|
-
"test": "vitest run",
|
|
58
|
-
"example:session": "pnpm build && node dist-examples/single-session.js",
|
|
59
|
-
"example:pool": "pnpm build && node dist-examples/local-session-pool.js",
|
|
60
|
-
"example:cluster": "pnpm build && node dist-examples/cluster-session.js"
|
|
61
53
|
}
|
|
62
|
-
}
|
|
54
|
+
}
|
package/src/Session.ts
CHANGED
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
export {
|
|
2
2
|
Error,
|
|
3
|
-
Event,
|
|
4
3
|
Id,
|
|
4
|
+
MessageDelta,
|
|
5
|
+
MessageEnd,
|
|
6
|
+
MessagePart,
|
|
7
|
+
MessageStart,
|
|
8
|
+
type AssistantMessage,
|
|
5
9
|
type Config,
|
|
10
|
+
type Event,
|
|
6
11
|
type MakeOptions,
|
|
7
12
|
type Operation,
|
|
8
13
|
type PiOptions,
|
|
9
14
|
PromptResult,
|
|
10
15
|
type Session,
|
|
11
16
|
Snapshot,
|
|
12
|
-
Status
|
|
17
|
+
Status,
|
|
18
|
+
StatusEvent,
|
|
19
|
+
ToolFinishedEvent,
|
|
20
|
+
ToolStartedEvent
|
|
13
21
|
} from "./internal/Session.js"
|
|
14
22
|
export { make } from "./internal/Pi.js"
|
|
@@ -73,7 +73,7 @@ export const runnerLayerWith = <R>(
|
|
|
73
73
|
Abort: () => resource.get.pipe(Effect.flatMap((session) => session.abort)),
|
|
74
74
|
Jsonl: () => resource.get.pipe(Effect.flatMap((session) => session.jsonl)),
|
|
75
75
|
Events: () => Stream.unwrap(resource.get.pipe(
|
|
76
|
-
Effect.map((session) => session.events)
|
|
76
|
+
Effect.map((session) => Session.eventsToWire(session.events))
|
|
77
77
|
))
|
|
78
78
|
})
|
|
79
79
|
})
|
|
@@ -111,8 +111,11 @@ export const clientLayer: Layer.Layer<Sessions, never, Sharding.Sharding> = Laye
|
|
|
111
111
|
abort: client.Abort().pipe(
|
|
112
112
|
Effect.mapError((cause) => transportError(id, "abort", cause))
|
|
113
113
|
),
|
|
114
|
-
events:
|
|
115
|
-
|
|
114
|
+
events: Session.eventsFromWire(
|
|
115
|
+
id,
|
|
116
|
+
client.Events().pipe(
|
|
117
|
+
Stream.mapError((cause) => transportError(id, "events", cause))
|
|
118
|
+
)
|
|
116
119
|
),
|
|
117
120
|
jsonl: client.Jsonl().pipe(
|
|
118
121
|
Effect.mapError((cause) => transportError(id, "jsonl", cause))
|
package/src/internal/Pi.ts
CHANGED
|
@@ -151,13 +151,14 @@ export const makeWith = Effect.fn("Session.make")(function* (
|
|
|
151
151
|
yield* Effect.logWarning("Pi extension failed to load", { sessionId: id, ...diagnostic })
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
-
const events = yield* Effect.acquireRelease(PubSub.sliding<Session.
|
|
154
|
+
const events = yield* Effect.acquireRelease(PubSub.sliding<Session.WireEvent>(1024), PubSub.shutdown)
|
|
155
155
|
// A checkpoint serializes current state, not the state at notification time.
|
|
156
156
|
const checkpoints = yield* Effect.acquireRelease(Queue.dropping<void>(1), Queue.shutdown)
|
|
157
157
|
const operations = yield* Effect.acquireRelease(Scope.make("parallel"), (scope) => Scope.close(scope, Exit.void))
|
|
158
158
|
const promptGate = yield* Semaphore.make(1)
|
|
159
159
|
const saveGate = yield* Semaphore.make(1)
|
|
160
160
|
let sequence = 0
|
|
161
|
+
let activeMessageSequence: number | undefined
|
|
161
162
|
let closed = false
|
|
162
163
|
let active: Fiber.Fiber<unknown, unknown> | undefined
|
|
163
164
|
|
|
@@ -171,7 +172,7 @@ export const makeWith = Effect.fn("Session.make")(function* (
|
|
|
171
172
|
)
|
|
172
173
|
// Sliding publish is synchronous; publishUnsafe would silently use dropping
|
|
173
174
|
// behavior on overflow. This is the one synchronous SDK-to-Effect boundary.
|
|
174
|
-
const publish = (event: Session.
|
|
175
|
+
const publish = (event: Session.WireEvent): void => { Effect.runSync(PubSub.publish(events, event)) }
|
|
175
176
|
yield* Effect.acquireRelease(
|
|
176
177
|
Effect.try({
|
|
177
178
|
try: () => pi.subscribe((event) => {
|
|
@@ -190,9 +191,33 @@ export const makeWith = Effect.fn("Session.make")(function* (
|
|
|
190
191
|
case "agent_start":
|
|
191
192
|
publish({ _tag: "Status", sequence: sequence++, status: "streaming" })
|
|
192
193
|
return
|
|
194
|
+
case "message_start":
|
|
195
|
+
if (event.message.role === "assistant") {
|
|
196
|
+
const messageSequence = sequence++
|
|
197
|
+
activeMessageSequence = messageSequence
|
|
198
|
+
publish({ _tag: "MessageStart", sequence: messageSequence, messageSequence })
|
|
199
|
+
}
|
|
200
|
+
return
|
|
193
201
|
case "message_update":
|
|
194
|
-
if (event.assistantMessageEvent.type === "text_delta") {
|
|
195
|
-
publish({
|
|
202
|
+
if (event.assistantMessageEvent.type === "text_delta" && activeMessageSequence !== undefined) {
|
|
203
|
+
publish({
|
|
204
|
+
_tag: "MessageDelta",
|
|
205
|
+
sequence: sequence++,
|
|
206
|
+
messageSequence: activeMessageSequence,
|
|
207
|
+
delta: event.assistantMessageEvent.delta
|
|
208
|
+
})
|
|
209
|
+
}
|
|
210
|
+
return
|
|
211
|
+
case "message_end":
|
|
212
|
+
if (event.message.role === "assistant" && activeMessageSequence !== undefined) {
|
|
213
|
+
publish({
|
|
214
|
+
_tag: "MessageEnd",
|
|
215
|
+
sequence: sequence++,
|
|
216
|
+
messageSequence: activeMessageSequence,
|
|
217
|
+
content: assistantText(event.message),
|
|
218
|
+
stopReason: event.message.stopReason
|
|
219
|
+
})
|
|
220
|
+
activeMessageSequence = undefined
|
|
196
221
|
}
|
|
197
222
|
return
|
|
198
223
|
case "tool_execution_start":
|
|
@@ -330,7 +355,10 @@ export const makeWith = Effect.fn("Session.make")(function* (
|
|
|
330
355
|
snapshot: ensureOpen("snapshot").pipe(Effect.andThen(Effect.sync(() => snapshot(id, pi)))),
|
|
331
356
|
prompt,
|
|
332
357
|
abort,
|
|
333
|
-
events:
|
|
358
|
+
events: Session.eventsFromWire(
|
|
359
|
+
id,
|
|
360
|
+
Stream.unwrap(ensureOpen("events").pipe(Effect.as(Stream.fromPubSub(events))))
|
|
361
|
+
),
|
|
334
362
|
jsonl: ensureOpen("jsonl").pipe(Effect.andThen(serialize(id, manager, "jsonl")))
|
|
335
363
|
} satisfies Session.Session
|
|
336
364
|
})
|