@oh-my-pi/pi-agent-core 3.3.1337 → 3.5.1337

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oh-my-pi/pi-agent-core",
3
- "version": "3.3.1337",
3
+ "version": "3.5.1337",
4
4
  "description": "General-purpose agent with transport abstraction, state management, and attachment support",
5
5
  "type": "module",
6
6
  "main": "./src/index.ts",
@@ -13,8 +13,8 @@
13
13
  "test": "vitest --run"
14
14
  },
15
15
  "dependencies": {
16
- "@oh-my-pi/pi-ai": "3.3.1337",
17
- "@oh-my-pi/pi-tui": "3.3.1337"
16
+ "@oh-my-pi/pi-ai": "3.5.1337",
17
+ "@oh-my-pi/pi-tui": "3.5.1337"
18
18
  },
19
19
  "keywords": [
20
20
  "ai",
package/src/agent-loop.ts CHANGED
@@ -225,6 +225,11 @@ async function streamAssistantResponse(
225
225
  let addedPartial = false;
226
226
 
227
227
  for await (const event of response) {
228
+ // Check abort early - allows TTSR and other abort sources to break immediately
229
+ if (signal?.aborted) {
230
+ break;
231
+ }
232
+
228
233
  switch (event.type) {
229
234
  case "start":
230
235
  partialMessage = event.partial;
@@ -268,6 +273,22 @@ async function streamAssistantResponse(
268
273
  return finalMessage;
269
274
  }
270
275
  }
276
+
277
+ // Check abort after processing - allows handlers to abort mid-stream
278
+ if (signal?.aborted) {
279
+ break;
280
+ }
281
+ }
282
+
283
+ // If we broke out due to abort, return an aborted message
284
+ if (signal?.aborted && partialMessage) {
285
+ const abortedMessage: AssistantMessage = {
286
+ ...partialMessage,
287
+ stopReason: "aborted",
288
+ };
289
+ context.messages[context.messages.length - 1] = abortedMessage;
290
+ stream.push({ type: "message_end", message: abortedMessage });
291
+ return abortedMessage;
271
292
  }
272
293
 
273
294
  return await response.result();
package/src/agent.ts CHANGED
@@ -174,6 +174,14 @@ export class Agent {
174
174
  this._state.messages = [];
175
175
  }
176
176
 
177
+ /** Remove and return the last message from the message list */
178
+ popMessage(): AgentMessage | undefined {
179
+ if (this._state.messages.length === 0) return undefined;
180
+ const popped = this._state.messages[this._state.messages.length - 1];
181
+ this._state.messages = this._state.messages.slice(0, -1);
182
+ return popped;
183
+ }
184
+
177
185
  abort() {
178
186
  this.abortController?.abort();
179
187
  }