@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.
Files changed (38) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/README.md +9 -1
  3. package/dist/Session.d.ts +1 -1
  4. package/dist/Session.d.ts.map +1 -1
  5. package/dist/Session.js +1 -1
  6. package/dist/Session.js.map +1 -1
  7. package/dist/internal/ClusterSessions.d.ts +10 -1
  8. package/dist/internal/ClusterSessions.d.ts.map +1 -1
  9. package/dist/internal/ClusterSessions.js +2 -2
  10. package/dist/internal/ClusterSessions.js.map +1 -1
  11. package/dist/internal/Pi.d.ts +1 -18
  12. package/dist/internal/Pi.d.ts.map +1 -1
  13. package/dist/internal/Pi.js +28 -3
  14. package/dist/internal/Pi.js.map +1 -1
  15. package/dist/internal/Protocol.d.ts +20 -2
  16. package/dist/internal/Protocol.d.ts.map +1 -1
  17. package/dist/internal/Protocol.js +1 -1
  18. package/dist/internal/Protocol.js.map +1 -1
  19. package/dist/internal/Session.d.ts +83 -7
  20. package/dist/internal/Session.d.ts.map +1 -1
  21. package/dist/internal/Session.js +108 -7
  22. package/dist/internal/Session.js.map +1 -1
  23. package/dist-examples/cluster-session.js +4 -2
  24. package/dist-examples/cluster-session.js.map +1 -1
  25. package/dist-examples/local-session-pool.js +4 -2
  26. package/dist-examples/local-session-pool.js.map +1 -1
  27. package/dist-examples/single-session.js +4 -2
  28. package/dist-examples/single-session.js.map +1 -1
  29. package/docs/reference.md +14 -4
  30. package/examples/cluster-session.ts +4 -2
  31. package/examples/local-session-pool.ts +4 -2
  32. package/examples/single-session.ts +4 -2
  33. package/package.json +16 -24
  34. package/src/Session.ts +10 -2
  35. package/src/internal/ClusterSessions.ts +6 -3
  36. package/src/internal/Pi.ts +33 -5
  37. package/src/internal/Protocol.ts +1 -1
  38. package/src/internal/Session.ts +165 -11
@@ -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 TextDeltaEvent = Schema.TaggedStruct("TextDelta", {
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 ToolStartedEvent = Schema.TaggedStruct("ToolStarted", {
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
- /** Stable, serializable subset of Pi's live session events. */
41
- export const Event = Schema.Union([
59
+ /** Flat, serializable event protocol used across Cluster transport. */
60
+ export const WireEvent = Schema.Union([
42
61
  StatusEvent,
43
- TextDeltaEvent,
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":"AAEA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,uDAAuD;AACvD,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CACnC,MAAM,CAAC,SAAS,CAAC,8CAA8C,CAAC,CACjE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAA;AAGvD,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAA;AAG5D,MAAM,OAAO,QAAS,SAAQ,MAAM,CAAC,KAAK,CAAW,uCAAuC,CAAC,CAAC;IAC5F,EAAE,EAAE,EAAE;IACN,MAAM,EAAE,MAAM;IACd,YAAY,EAAE,MAAM,CAAC,OAAO;IAC5B,iBAAiB,EAAE,MAAM,CAAC,MAAM;CACjC,CAAC;CAAG;AAEL,+FAA+F;AAC/F,MAAM,OAAO,YAAa,SAAQ,MAAM,CAAC,KAAK,CAAe,oCAAoC,CAAC,CAAC;IACjG,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM;IACzB,WAAW,EAAE,MAAM,CAAC,OAAO;IAC3B,YAAY,EAAE,MAAM,CAAC,OAAO;IAC5B,WAAW,EAAE,MAAM,CAAC,OAAO;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;CAC/D,CAAC;CAAG;AAEL,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE;IAChD,QAAQ,EAAE,MAAM,CAAC,OAAO;IACxB,MAAM,EAAE,MAAM;CACf,CAAC,CAAA;AACF,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE;IACtD,QAAQ,EAAE,MAAM,CAAC,OAAO;IACxB,KAAK,EAAE,MAAM,CAAC,MAAM;CACrB,CAAC,CAAA;AACF,MAAM,gBAAgB,GAAG,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE;IAC1D,QAAQ,EAAE,MAAM,CAAC,OAAO;IACxB,QAAQ,EAAE,MAAM,CAAC,MAAM;CACxB,CAAC,CAAA;AACF,MAAM,iBAAiB,GAAG,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE;IAC5D,QAAQ,EAAE,MAAM,CAAC,OAAO;IACxB,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,OAAO,EAAE,MAAM,CAAC,OAAO;CACxB,CAAC,CAAA;AAEF,+DAA+D;AAC/D,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAChC,WAAW;IACX,cAAc;IACd,gBAAgB;IAChB,iBAAiB;CAClB,CAAC,CAAA;AAGF,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;IACvC,OAAO;IACP,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;IACR,MAAM;IACN,UAAU;CACX,CAAC,CAAA;AAGF,MAAM,OAAO,KAAM,SAAQ,MAAM,CAAC,WAAW,EAAS,CAAC,cAAc,EAAE;IACrE,SAAS,EAAE,EAAE;IACb,SAAS,EAAE,SAAS;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CAAC;CAAG"}
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) => Console.log(event)), Effect.catch((error) => Console.warn(error)), Effect.forkScoped({ startImmediately: true }));
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.1.0" }).pipe(Effect.provide(NodeServices.layer));
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) => Console.log(event)), Effect.catch((error) => Console.warn(error)), Effect.forkScoped({ startImmediately: true }));
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.1.0" }).pipe(Effect.provide(NodeServices.layer));
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":"AAAA,2EAA2E;AAC3E,OAAO,KAAK,WAAW,MAAM,mCAAmC,CAAA;AAChE,OAAO,KAAK,YAAY,MAAM,oCAAoC,CAAA;AAClE,OAAO,KAAK,YAAY,MAAM,sCAAsC,CAAA;AAEpE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,8BAA8B,CAAA;AACxD,OAAO,KAAK,OAAO,MAAM,6BAA6B,CAAA;AACtD,OAAO,KAAK,IAAI,MAAM,0BAA0B,CAAA;AAChD,OAAO,KAAK,aAAa,MAAM,2CAA2C,CAAA;AAE1E,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEtG,MAAM,aAAa,GAAG,cAAc,CAAC,UAAU,CAAC;IAC9C,YAAY,EAAE,wFAAwF;IACtG,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;CACxC,CAAC,CAAA;AAEF,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CACxC,MAAM,CAAC,GAAG,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAC,oBAAoB,CAAC;IACrD,OAAO,EAAE,MAAM,CAAC,cAAc,CAAC,iBAAiB,CAAC;IACjD,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC;CAC7C,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE;IAChC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE;IAC/B,QAAQ,EAAE,2BAA2B;IACrC,UAAU,EAAE,IAAI;IAChB,eAAe,EAAE,KAAK;CACvB,CAAC,CAAC,CACJ,CACF,CAAC,IAAI,CACJ,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAC7B,CAAA;AAED,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC,IAAI,CACrE,KAAK,CAAC,OAAO,CACX,YAAY,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,iCAAiC,EAAE,CAAC,CACpE,CACF,CAAA;AAED,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC;IACvC,GAAG,EAAE,GAAG;IACR,cAAc,EAAE,UAAU;IAC1B,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;CAC7D,CAAC,CAAC,IAAI,CACL,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CACtC,CAAA;AAED,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE;IAC7C,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CACpC,QAAQ,CAAC,WAAW,CAAC,kCAAkC,CAAC,CACzD;IACD,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CACrC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EACvB,IAAI,CAAC,eAAe,CAAC,2CAA2C,CAAC,CAClE;CACF,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAC1B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAA;IAEhC,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;IAE5C,4EAA4E;IAC5E,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAExC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QACpD,CAAC;QAED,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CACxB,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,kBAAkB;YAC5D,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAClE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EACvB,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAC5C,MAAM,CAAC,UAAU,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAC9C,CAAA;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAA;QAE9E,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IACvC,CAAC,CAAC,CACH,CAAA;IAED,wFAAwF;IACxF,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAExC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC1D,CAAC,CAAC,CACH,CAAA;AACH,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CACvB,CAAC,IAAI,CACJ,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAC9B,CAAA;AAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CACzD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CACnC,CAAA;AAED,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA"}
@@ -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) => Console.log(event)), Effect.catch((error) => Console.warn(error)), Effect.forkScoped({ startImmediately: true }));
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.1.0" }).pipe(Effect.provide(NodeServices.layer));
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.1.0.tgz effect@4.0.0-rc.116
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, text-delta, and tool lifecycle events.
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
- Events have monotonically increasing sequence numbers **per live resource**, resetting on restoration. The live buffer holds 1,024 events and discards oldest events on overflow. Slow subscribers can see gaps. There is no replay or subscription persistence. Reconcile using `snapshot`/`jsonl` or the completed prompt result; an event is not a durability acknowledgement.
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
- Start the stream before prompting. Across Cluster, starting a client fiber does not acknowledge that the remote subscription is established, so initial events can be missed. See [cluster-session.ts](../examples/cluster-session.ts) for best-effort event consumption in a scope.
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) => Console.log(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.1.0" }).pipe(
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) => Console.log(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.1.0" }).pipe(
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) => Console.log(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.1.0" }).pipe(
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.1.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: client.Events().pipe(
115
- Stream.mapError((cause) => transportError(id, "events", cause))
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))
@@ -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.Event>(1024), PubSub.shutdown)
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.Event): void => { Effect.runSync(PubSub.publish(events, event)) }
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({ _tag: "TextDelta", sequence: sequence++, delta: event.assistantMessageEvent.delta })
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: Stream.unwrap(ensureOpen("events").pipe(Effect.as(Stream.fromPubSub(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
  })
@@ -25,7 +25,7 @@ export const Jsonl = Rpc.make("Jsonl", {
25
25
  })
26
26
 
27
27
  export const Events = Rpc.make("Events", {
28
- success: Session.Event,
28
+ success: Session.WireEvent,
29
29
  error: Session.Error,
30
30
  stream: true
31
31
  })