@mono-agent/agent-runtime 0.11.2 → 0.11.3
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 +1 -1
- package/src/ai/providers/pi-native/result-builder.js +8 -2
- package/src/ai/providers/pi-native/session-lifecycle.js +5 -0
- package/src/ai/providers/pi-native/transport.js +16 -0
- package/src/ai/providers/pi-native/turn-runner.js +2 -1
- package/src/ai/providers/pi-native.js +8 -2
- package/types/ai/providers/pi-native/result-builder.d.ts +6 -2
- package/types/ai/providers/pi-native/session-lifecycle.d.ts +1 -1
- package/types/ai/providers/pi-native/transport.d.ts +8 -0
- package/types/ai/providers/pi-native/turn-runner.d.ts +1 -1
package/package.json
CHANGED
|
@@ -94,9 +94,9 @@ export function emitCapabilitiesResolved(onEvent, { sdk, model, capabilitiesUsed
|
|
|
94
94
|
|
|
95
95
|
/**
|
|
96
96
|
* The aborted-run result (entry pre-check / pre-request abort). Pure factory.
|
|
97
|
-
* @param {{resolved: any, options: any, events: any[], runtimeWarnings: any[], start: number, providerSessionId: string}} params
|
|
97
|
+
* @param {{resolved: any, options: any, events: any[], runtimeWarnings: any[], start: number, providerSessionId: string, piTransport: string}} params
|
|
98
98
|
*/
|
|
99
|
-
export function abortedResult({ resolved, options, events, runtimeWarnings, start, providerSessionId }) {
|
|
99
|
+
export function abortedResult({ resolved, options, events, runtimeWarnings, start, providerSessionId, piTransport }) {
|
|
100
100
|
return {
|
|
101
101
|
text: null,
|
|
102
102
|
thinking: "",
|
|
@@ -116,6 +116,7 @@ export function abortedResult({ resolved, options, events, runtimeWarnings, star
|
|
|
116
116
|
provider_session_id: providerSessionId,
|
|
117
117
|
pi_stop_reason: "aborted",
|
|
118
118
|
pi_engine: "native",
|
|
119
|
+
pi_transport_requested: piTransport,
|
|
119
120
|
external_abort: true,
|
|
120
121
|
},
|
|
121
122
|
};
|
|
@@ -201,6 +202,7 @@ export function buildErrorResult(params) {
|
|
|
201
202
|
providerSessionId,
|
|
202
203
|
runtimeWarnings,
|
|
203
204
|
isRetryable,
|
|
205
|
+
piTransport,
|
|
204
206
|
} = params;
|
|
205
207
|
return {
|
|
206
208
|
text: assistantTexts.join("") || null,
|
|
@@ -221,6 +223,7 @@ export function buildErrorResult(params) {
|
|
|
221
223
|
max_turns_hit: maxTurnsHit,
|
|
222
224
|
provider_session_id: providerSessionId,
|
|
223
225
|
pi_engine: "native",
|
|
226
|
+
pi_transport_requested: piTransport,
|
|
224
227
|
pi_error_retryable: isRetryable,
|
|
225
228
|
},
|
|
226
229
|
failureKind: externalAbort ? null : failureKindForPiError(errorMessage, {}, { maxTurnsHit }),
|
|
@@ -230,6 +233,7 @@ export function buildErrorResult(params) {
|
|
|
230
233
|
provider_session_id: providerSessionId,
|
|
231
234
|
pi_stop_reason: externalAbort ? "aborted" : "error",
|
|
232
235
|
pi_engine: "native",
|
|
236
|
+
pi_transport_requested: piTransport,
|
|
233
237
|
max_turns_hit: maxTurnsHit,
|
|
234
238
|
turn_count: turnCount,
|
|
235
239
|
external_abort: externalAbort,
|
|
@@ -252,6 +256,7 @@ export function buildDiagnostics(params) {
|
|
|
252
256
|
runAssistantCount,
|
|
253
257
|
externalAbort,
|
|
254
258
|
maxRetries,
|
|
259
|
+
piTransport,
|
|
255
260
|
lastToolName,
|
|
256
261
|
structuredRetry,
|
|
257
262
|
contextCompactionDiagnostics,
|
|
@@ -265,6 +270,7 @@ export function buildDiagnostics(params) {
|
|
|
265
270
|
turn_count: turnCount || runAssistantCount,
|
|
266
271
|
external_abort: externalAbort,
|
|
267
272
|
pi_max_retries: maxRetries,
|
|
273
|
+
pi_transport_requested: piTransport,
|
|
268
274
|
...(lastToolName ? { last_tool_name: lastToolName } : {}),
|
|
269
275
|
...structuredOutputRetryDiagnostics(
|
|
270
276
|
structuredRetry.attempts,
|
|
@@ -177,6 +177,7 @@ function sessionUnavailableResult({
|
|
|
177
177
|
errorMessage,
|
|
178
178
|
failureKind,
|
|
179
179
|
piErrorCode,
|
|
180
|
+
piTransport,
|
|
180
181
|
}) {
|
|
181
182
|
return {
|
|
182
183
|
text: null,
|
|
@@ -196,6 +197,7 @@ function sessionUnavailableResult({
|
|
|
196
197
|
provider_session_id: sessionId,
|
|
197
198
|
pi_error_code: piErrorCode,
|
|
198
199
|
pi_engine: "native",
|
|
200
|
+
pi_transport_requested: piTransport,
|
|
199
201
|
},
|
|
200
202
|
};
|
|
201
203
|
}
|
|
@@ -221,6 +223,7 @@ export async function resolveSession(runState, {
|
|
|
221
223
|
events,
|
|
222
224
|
runtimeWarnings,
|
|
223
225
|
start,
|
|
226
|
+
piTransport,
|
|
224
227
|
}) {
|
|
225
228
|
// Resume check first: a session miss must stay cheap (no tool/MCP/harness
|
|
226
229
|
// init). This mirrors the legacy bridge's fail-fast contract.
|
|
@@ -307,6 +310,7 @@ export async function resolveSession(runState, {
|
|
|
307
310
|
errorMessage: `Pi session ${requestedSessionId} is not live`,
|
|
308
311
|
failureKind: "session_not_found",
|
|
309
312
|
piErrorCode: "pi_session_not_found",
|
|
313
|
+
piTransport,
|
|
310
314
|
}),
|
|
311
315
|
};
|
|
312
316
|
}
|
|
@@ -344,6 +348,7 @@ export async function resolveSession(runState, {
|
|
|
344
348
|
: `Pi session ${requestedSessionId} is busy with another turn`,
|
|
345
349
|
failureKind: missing ? "session_not_found" : "session_busy",
|
|
346
350
|
piErrorCode: missing ? "pi_session_not_found" : "pi_session_busy",
|
|
351
|
+
piTransport,
|
|
347
352
|
}),
|
|
348
353
|
};
|
|
349
354
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
const PI_TRANSPORTS = new Set(["auto", "sse", "websocket", "websocket-cached"]);
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Normalize the public runtime option at the untyped JS boundary. Typed/config
|
|
7
|
+
* callers already validate it; direct JavaScript callers fail safely to Pi's
|
|
8
|
+
* compatibility-preserving automatic transport selection.
|
|
9
|
+
* @param {unknown} value
|
|
10
|
+
* @returns {"auto" | "sse" | "websocket" | "websocket-cached"}
|
|
11
|
+
*/
|
|
12
|
+
export function resolvePiTransport(value) {
|
|
13
|
+
return typeof value === "string" && PI_TRANSPORTS.has(value)
|
|
14
|
+
? /** @type {"auto" | "sse" | "websocket" | "websocket-cached"} */ (value)
|
|
15
|
+
: "auto";
|
|
16
|
+
}
|
|
@@ -172,6 +172,7 @@ export function buildTurnHarness(runState, {
|
|
|
172
172
|
systemPrompt,
|
|
173
173
|
outputSchema,
|
|
174
174
|
tools,
|
|
175
|
+
transport,
|
|
175
176
|
maxRetries,
|
|
176
177
|
maxRetryDelayMs,
|
|
177
178
|
steeringMode,
|
|
@@ -187,7 +188,7 @@ export function buildTurnHarness(runState, {
|
|
|
187
188
|
thinkingLevel,
|
|
188
189
|
systemPrompt: appendStructuredOutputInstruction(systemPrompt, outputSchema, options.prompts),
|
|
189
190
|
tools,
|
|
190
|
-
streamOptions: { maxRetries, maxRetryDelayMs },
|
|
191
|
+
streamOptions: { transport, maxRetries, maxRetryDelayMs },
|
|
191
192
|
steeringMode,
|
|
192
193
|
followUpMode: steeringMode,
|
|
193
194
|
});
|
|
@@ -76,6 +76,7 @@ import {
|
|
|
76
76
|
startLiveInput,
|
|
77
77
|
thinkingLevelForEffort,
|
|
78
78
|
} from "./pi-native/turn-runner.js";
|
|
79
|
+
import { resolvePiTransport } from "./pi-native/transport.js";
|
|
79
80
|
|
|
80
81
|
async function resolveApiKey(provider, { apiKeys, resolvePiApiKey, runtimeWarnings }) {
|
|
81
82
|
if (apiKeys?.has(provider)) return apiKeys.get(provider);
|
|
@@ -302,6 +303,7 @@ export async function generatePiNativeResponse(systemPrompt, options = {}) {
|
|
|
302
303
|
let structuredOutputFinalizationRetryAttempts = 0;
|
|
303
304
|
let structuredOutputFinalizationRetryReason = null;
|
|
304
305
|
let structuredOutputFinalizationRetryFailed = false;
|
|
306
|
+
const piTransport = resolvePiTransport(options.piTransport);
|
|
305
307
|
|
|
306
308
|
const onEvent = (event) => emitCaptured(events, options.onEvent, event);
|
|
307
309
|
const approvalManager = options.onToolApprovalRequest
|
|
@@ -316,7 +318,7 @@ export async function generatePiNativeResponse(systemPrompt, options = {}) {
|
|
|
316
318
|
: null;
|
|
317
319
|
|
|
318
320
|
if (options.abortSignal?.aborted) {
|
|
319
|
-
return abortedResult({ resolved, options, events, runtimeWarnings, start, providerSessionId });
|
|
321
|
+
return abortedResult({ resolved, options, events, runtimeWarnings, start, providerSessionId, piTransport });
|
|
320
322
|
}
|
|
321
323
|
|
|
322
324
|
const durableRepo = resolveDurableNativeSessionRepo(options.piSessionsRoot);
|
|
@@ -341,6 +343,7 @@ export async function generatePiNativeResponse(systemPrompt, options = {}) {
|
|
|
341
343
|
events,
|
|
342
344
|
runtimeWarnings,
|
|
343
345
|
start,
|
|
346
|
+
piTransport,
|
|
344
347
|
});
|
|
345
348
|
if (resolvedSession.done) return resolvedSession.result;
|
|
346
349
|
|
|
@@ -432,6 +435,7 @@ export async function generatePiNativeResponse(systemPrompt, options = {}) {
|
|
|
432
435
|
systemPrompt,
|
|
433
436
|
outputSchema: options.outputSchema,
|
|
434
437
|
tools,
|
|
438
|
+
transport: piTransport,
|
|
435
439
|
maxRetries,
|
|
436
440
|
maxRetryDelayMs,
|
|
437
441
|
steeringMode: toolSteeringMode,
|
|
@@ -484,7 +488,7 @@ export async function generatePiNativeResponse(systemPrompt, options = {}) {
|
|
|
484
488
|
// and closes MCP clients. For a resume no transcript was appended yet
|
|
485
489
|
// (prompt never ran), so the live session needs no rollback.
|
|
486
490
|
await discardUncommittedSession(runState, { durableRepo });
|
|
487
|
-
return abortedResult({ resolved, options, events, runtimeWarnings, start, providerSessionId });
|
|
491
|
+
return abortedResult({ resolved, options, events, runtimeWarnings, start, providerSessionId, piTransport });
|
|
488
492
|
}
|
|
489
493
|
|
|
490
494
|
// Compaction policy against the LIVE model's context window, then proactive
|
|
@@ -619,6 +623,7 @@ export async function generatePiNativeResponse(systemPrompt, options = {}) {
|
|
|
619
623
|
runAssistantCount,
|
|
620
624
|
externalAbort: runState.externalAbort,
|
|
621
625
|
maxRetries,
|
|
626
|
+
piTransport,
|
|
622
627
|
lastToolName: runState.lastToolName,
|
|
623
628
|
structuredRetry,
|
|
624
629
|
contextCompactionDiagnostics: runState.compaction.diagnostics,
|
|
@@ -737,6 +742,7 @@ export async function generatePiNativeResponse(systemPrompt, options = {}) {
|
|
|
737
742
|
providerSessionId,
|
|
738
743
|
runtimeWarnings,
|
|
739
744
|
isRetryable,
|
|
745
|
+
piTransport,
|
|
740
746
|
});
|
|
741
747
|
} finally {
|
|
742
748
|
if (runState.sessionEntry) runState.sessionEntry.busy = false;
|
|
@@ -53,15 +53,16 @@ export function emitCapabilitiesResolved(onEvent: (event: any) => void, { sdk, m
|
|
|
53
53
|
}): void;
|
|
54
54
|
/**
|
|
55
55
|
* The aborted-run result (entry pre-check / pre-request abort). Pure factory.
|
|
56
|
-
* @param {{resolved: any, options: any, events: any[], runtimeWarnings: any[], start: number, providerSessionId: string}} params
|
|
56
|
+
* @param {{resolved: any, options: any, events: any[], runtimeWarnings: any[], start: number, providerSessionId: string, piTransport: string}} params
|
|
57
57
|
*/
|
|
58
|
-
export function abortedResult({ resolved, options, events, runtimeWarnings, start, providerSessionId }: {
|
|
58
|
+
export function abortedResult({ resolved, options, events, runtimeWarnings, start, providerSessionId, piTransport }: {
|
|
59
59
|
resolved: any;
|
|
60
60
|
options: any;
|
|
61
61
|
events: any[];
|
|
62
62
|
runtimeWarnings: any[];
|
|
63
63
|
start: number;
|
|
64
64
|
providerSessionId: string;
|
|
65
|
+
piTransport: string;
|
|
65
66
|
}): {
|
|
66
67
|
text: any;
|
|
67
68
|
thinking: string;
|
|
@@ -81,6 +82,7 @@ export function abortedResult({ resolved, options, events, runtimeWarnings, star
|
|
|
81
82
|
provider_session_id: string;
|
|
82
83
|
pi_stop_reason: string;
|
|
83
84
|
pi_engine: string;
|
|
85
|
+
pi_transport_requested: string;
|
|
84
86
|
external_abort: boolean;
|
|
85
87
|
};
|
|
86
88
|
};
|
|
@@ -140,6 +142,7 @@ export function buildErrorResult(params: object): {
|
|
|
140
142
|
max_turns_hit: any;
|
|
141
143
|
provider_session_id: any;
|
|
142
144
|
pi_engine: string;
|
|
145
|
+
pi_transport_requested: any;
|
|
143
146
|
pi_error_retryable: any;
|
|
144
147
|
};
|
|
145
148
|
failureKind: string;
|
|
@@ -149,6 +152,7 @@ export function buildErrorResult(params: object): {
|
|
|
149
152
|
provider_session_id: any;
|
|
150
153
|
pi_stop_reason: string;
|
|
151
154
|
pi_engine: string;
|
|
155
|
+
pi_transport_requested: any;
|
|
152
156
|
max_turns_hit: any;
|
|
153
157
|
turn_count: any;
|
|
154
158
|
external_abort: any;
|
|
@@ -17,7 +17,7 @@ export function retireDurableNativeSession(providerSessionId: any, piSessionsRoo
|
|
|
17
17
|
* @param {any} params
|
|
18
18
|
* @returns {Promise<{done: true, result: any} | {done: false}>}
|
|
19
19
|
*/
|
|
20
|
-
export function resolveSession(runState: any, { requestedSessionId, providerSessionId, durableRepo, sessionTtlMs, cwd, resolved, options, events, runtimeWarnings, start, }: any): Promise<{
|
|
20
|
+
export function resolveSession(runState: any, { requestedSessionId, providerSessionId, durableRepo, sessionTtlMs, cwd, resolved, options, events, runtimeWarnings, start, piTransport, }: any): Promise<{
|
|
21
21
|
done: true;
|
|
22
22
|
result: any;
|
|
23
23
|
} | {
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalize the public runtime option at the untyped JS boundary. Typed/config
|
|
3
|
+
* callers already validate it; direct JavaScript callers fail safely to Pi's
|
|
4
|
+
* compatibility-preserving automatic transport selection.
|
|
5
|
+
* @param {unknown} value
|
|
6
|
+
* @returns {"auto" | "sse" | "websocket" | "websocket-cached"}
|
|
7
|
+
*/
|
|
8
|
+
export function resolvePiTransport(value: unknown): "auto" | "sse" | "websocket" | "websocket-cached";
|
|
@@ -30,7 +30,7 @@ export function thinkingLevelForEffort(effort: string, capabilities: any): strin
|
|
|
30
30
|
* @param {any} params
|
|
31
31
|
* @returns {any}
|
|
32
32
|
*/
|
|
33
|
-
export function buildTurnHarness(runState: any, { cwd, session, piModels, model, thinkingLevel, systemPrompt, outputSchema, tools, maxRetries, maxRetryDelayMs, steeringMode, onEvent, options, toolLimits, }: any): any;
|
|
33
|
+
export function buildTurnHarness(runState: any, { cwd, session, piModels, model, thinkingLevel, systemPrompt, outputSchema, tools, transport, maxRetries, maxRetryDelayMs, steeringMode, onEvent, options, toolLimits, }: any): any;
|
|
34
34
|
/**
|
|
35
35
|
* Start the live-input steering consumer. Consumes follow-up messages and steers
|
|
36
36
|
* the harness mid-run; the consumer is tied to run completion (an internal
|