@opencode-ai/ai
Advanced tools
@@ -802,10 +802,9 @@ import { Effect, Schema } from "effect"; | ||
| const reasoningEmitted = state.reasoningEmitted || lifecycle.reasoning.has("reasoning-0"); | ||
| if (delta?.content) { | ||
| lifecycle = Lifecycle.reasoningEnd(lifecycle, events, "reasoning-0", reasoningMetadata(state.providerMetadataKey, reasoningField, reasoningDetailsObserved ? state.reasoningDetails : undefined)); | ||
| // Reasoning is one response-wide channel: it stays open alongside text and | ||
| // refusal output so late reasoning deltas and details join the same block, | ||
| // and `finishEvents` closes it once with the complete metadata. | ||
| if (delta?.content) | ||
| lifecycle = Lifecycle.textDelta(lifecycle, events, "text-0", delta.content); | ||
| } | ||
| if (delta?.refusal) { | ||
| lifecycle = Lifecycle.reasoningEnd(lifecycle, events, "reasoning-0", reasoningMetadata(state.providerMetadataKey, reasoningField, reasoningDetailsObserved ? state.reasoningDetails : undefined)); | ||
| if (delta?.refusal) | ||
| lifecycle = Lifecycle.textDelta(lifecycle, events, "text-0", delta.refusal); | ||
| } | ||
| // Compatible providers may omit indexes. Prefer durable identity, then use | ||
@@ -898,3 +897,5 @@ // batch position for parallel deltas or the latest call for sparse chunks. | ||
| : { normalized: hasToolCalls ? "tool-calls" : "stop" }; | ||
| const metadata = reasoningMetadata(state.providerMetadataKey, state.reasoningField, state.reasoningDetailsObserved ? state.reasoningDetails : undefined); | ||
| // Snapshot details at publish time so the emitted event never observes later | ||
| // mutation of the accumulated `reasoningDetails` array. | ||
| const metadata = reasoningMetadata(state.providerMetadataKey, state.reasoningField, state.reasoningDetailsObserved ? [...state.reasoningDetails] : undefined); | ||
| const started = state.reasoningDetailsObserved && !state.reasoningEmitted | ||
@@ -901,0 +902,0 @@ ? Lifecycle.reasoningStart(state.lifecycle, events, "reasoning-0", reasoningMetadata(state.providerMetadataKey, state.reasoningField)) |
+3
-3
| { | ||
| "$schema": "https://json.schemastore.org/package.json", | ||
| "version": "0.0.0-dev-18575", | ||
| "version": "0.0.0-dev-18581", | ||
| "name": "@opencode-ai/ai", | ||
@@ -33,3 +33,3 @@ "type": "module", | ||
| "@effect/platform-node": "4.0.0-rc.112", | ||
| "@opencode-ai/http-recorder": "0.0.0-dev-18575", | ||
| "@opencode-ai/http-recorder": "0.0.0-dev-18581", | ||
| "@tsconfig/bun": "1.0.9", | ||
@@ -43,3 +43,3 @@ "@types/bun": "1.3.13", | ||
| "@smithy/util-utf8": "4.2.2", | ||
| "@opencode-ai/schema": "0.0.0-dev-18575", | ||
| "@opencode-ai/schema": "0.0.0-dev-18581", | ||
| "aws4fetch": "1.0.20", | ||
@@ -46,0 +46,0 @@ "effect": "4.0.0-rc.112", |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
34070
01479603
0+ Added
- Removed