chore: pi family 0.85.1 -> 0.87.1 (finishTurn, transcript contexts, typebox 1.3.27)
Mechanical fallout only; semantic deltas flagged in the wave report:
- shouldStopAfterTurn -> finishTurn ({action:'end'} wrap; loop order verified
equivalent for Wave C stranding)
- transcript rework: seeded leading SystemMessage filtered at both
state.messages read seams (ui-stream settleWith, pi-run slice); prompt
and tool declarations now ride the transcript
- streamOnce sites normalizeContext() (Context -> TranscriptContext)
- AgentToolResult details / ToolCall.arguments JsonValue narrowing (casts)
- AUTH_PROVIDER_KEYS regenerated (meta added); glm-5.3-flash price pin
follows the 0.87.1 catalog (0.15/0.5/0.05)
- vanish probe: 0/12 vs 2/6 baseline; live smoke green on PORT=3004
This commit is contained in:
@@ -65,9 +65,13 @@ export async function runSubagent(tools: AgentTool<any, any>[], opts: SubagentRu
|
||||
messages: opts.messages ?? [],
|
||||
},
|
||||
streamFn: engine.streamFn,
|
||||
shouldStopAfterTurn: (context) => {
|
||||
// 0.87.1: shouldStopAfterTurn → finishTurn (same call point; "end"
|
||||
// exits before the steering poll, exactly the old boolean-true).
|
||||
finishTurn: (turn) => {
|
||||
turns++;
|
||||
return turns >= opts.maxTurns || opts.shouldStop?.(context.message, context.toolResults) === true;
|
||||
return turns >= opts.maxTurns || opts.shouldStop?.(turn.message, turn.toolResults) === true
|
||||
? { action: "end" }
|
||||
: undefined;
|
||||
},
|
||||
});
|
||||
|
||||
@@ -119,7 +123,12 @@ export async function runSubagent(tools: AgentTool<any, any>[], opts: SubagentRu
|
||||
}
|
||||
if (errorMessage !== undefined) throw new Error(errorMessage);
|
||||
|
||||
const newMessages = agent.state.messages.slice(before);
|
||||
// 0.87.1: drop the seeded leading SystemMessage (transcript rework —
|
||||
// see ui-stream's settleWith) before slicing past the input count, or
|
||||
// the seed displaces the slice and the last INPUT message leaks in.
|
||||
const newMessages = agent.state.messages
|
||||
.filter((m) => (m as { role?: string }).role !== "system")
|
||||
.slice(before);
|
||||
const assistants = newMessages.filter((m) => (m as { role?: string }).role === "assistant") as AssistantMessage[];
|
||||
const last = assistants[assistants.length - 1];
|
||||
const text = last
|
||||
|
||||
Reference in New Issue
Block a user