@absolutejs/ai 0.2.4 → 0.2.5

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 CHANGED
@@ -6,6 +6,12 @@ This file is generated by `absolute-changelog` from the entries in
6
6
  `changelog/`. Edit an entry, not this file — and add new ones under
7
7
  `changelog/unreleased/`.
8
8
 
9
+ ## 0.2.5 — 2026-09-20
10
+
11
+ ### Fixed
12
+
13
+ - **Allow SSE tool loops to reread changed files without silently completing; retain turn, time and token limits** (`streamAIToSSE`)
14
+
9
15
  ## 0.2.4 — 2026-09-20
10
16
 
11
17
  ### Added
package/changelog.json CHANGED
@@ -2,6 +2,19 @@
2
2
  "contract": 1,
3
3
  "name": "@absolutejs/ai",
4
4
  "releases": [
5
+ {
6
+ "changes": [
7
+ {
8
+ "kind": "fixed",
9
+ "summary": "Allow SSE tool loops to reread changed files without silently completing; retain turn, time and token limits",
10
+ "symbols": [
11
+ "streamAIToSSE"
12
+ ]
13
+ }
14
+ ],
15
+ "date": "2026-09-20",
16
+ "version": "0.2.5"
17
+ },
5
18
  {
6
19
  "changes": [
7
20
  {
package/dist/ai/index.js CHANGED
@@ -4892,7 +4892,6 @@ var executeTool2 = async (options, toolName, toolInput) => {
4892
4892
  return `Error: ${err instanceof Error ? err.message : String(err)}`;
4893
4893
  }
4894
4894
  };
4895
- var serializeToolCall2 = (name, input) => `${name}:${JSON.stringify(input)}`;
4896
4895
  var contentEvent = (options, renderers, delta, full) => options.structuredEvents ? { data: JSON.stringify({ delta, full }), event: "content" } : { data: renderers.chunk(delta, full), event: "content" };
4897
4896
  var thinkingEvent = (options, renderers, text) => options.structuredEvents ? { data: JSON.stringify({ text }), event: "thinking" } : { data: renderers.thinking(text), event: "thinking" };
4898
4897
  var imageEvent = (options, renderers, data, format, revisedPrompt) => options.structuredEvents ? { data: JSON.stringify({ data, format, revisedPrompt }), event: "images" } : { data: renderers.image(data, format, revisedPrompt), event: "images" };
@@ -5074,7 +5073,6 @@ var executeToolCalls = async function* (pendingToolCalls, options, renderers, tu
5074
5073
  tool_use_id: toolCall.id,
5075
5074
  type: "tool_result"
5076
5075
  });
5077
- turnState.executedToolKeys.add(serializeToolCall2(toolCall.name, toolCall.input));
5078
5076
  }
5079
5077
  return toolResultBlocks;
5080
5078
  };
@@ -5089,12 +5087,7 @@ var consumeStream2 = async function* (stream, chunkState, renderers, options, tu
5089
5087
  turnState.fullResponse = prevResponse + chunk.content;
5090
5088
  }
5091
5089
  };
5092
- var shouldStopToolLoop = (chunkState, turnState, signal) => {
5093
- if (chunkState.pendingToolCalls.length === 0 || signal.aborted) {
5094
- return true;
5095
- }
5096
- return chunkState.pendingToolCalls.every((toolCall) => turnState.executedToolKeys.has(serializeToolCall2(toolCall.name, toolCall.input)));
5097
- };
5090
+ var shouldStopToolLoop = (chunkState, signal) => chunkState.pendingToolCalls.length === 0 || signal.aborted;
5098
5091
  var processTurn = async function* (chunkState, options, renderers, turnState) {
5099
5092
  turnState.currentMessages.push({
5100
5093
  content: chunkState.contentBlocks,
@@ -5110,7 +5103,6 @@ var streamTurns = async function* (options, renderers, messages, signal, startTi
5110
5103
  const turnState = {
5111
5104
  allToolsHtml: "",
5112
5105
  currentMessages: [...messages],
5113
- executedToolKeys: new Set,
5114
5106
  fullResponse: "",
5115
5107
  turn: 0
5116
5108
  };
@@ -5172,7 +5164,7 @@ var streamTurns = async function* (options, renderers, messages, signal, startTi
5172
5164
  yield stoppedEvent(options, renderers, "max_duration_ms", `Stopped: time budget reached (${Math.round((Date.now() - startTime) / 1000)}s over ` + `${turnState.turn} turns). Narrow the request or raise maxDurationMs.`);
5173
5165
  return;
5174
5166
  }
5175
- if (shouldStopToolLoop(chunkState, turnState, signal)) {
5167
+ if (shouldStopToolLoop(chunkState, signal)) {
5176
5168
  if (signal.aborted) {
5177
5169
  finishReason = "aborted";
5178
5170
  yield stoppedEvent(options, renderers, "aborted", "Aborted by caller.");
@@ -8888,5 +8880,5 @@ export {
8888
8880
  xai
8889
8881
  };
8890
8882
 
8891
- //# debugId=C24827A491DCDA4A64756E2164756E21
8883
+ //# debugId=3B9702E9B461551864756E2164756E21
8892
8884
  //# sourceMappingURL=index.js.map