chore(vendor): import pi 1.3.0
Imported as a linear vendor commit so forge rebases do not replay the upstream root tree. git-subtree-dir: third_party/pi git-subtree-split: 71023aec1546d6d677a65669c5665c0927ce0dd0
This commit is contained in:
25
third_party/pi/packages/ai/src/providers/opencode-headers.ts
vendored
Normal file
25
third_party/pi/packages/ai/src/providers/opencode-headers.ts
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
import type { ProviderHeaders, ProviderStreams, StreamOptions } from "../types.ts";
|
||||
|
||||
const OPENCODE_SESSION_HEADER = "x-opencode-session";
|
||||
|
||||
function hasHeader(headers: ProviderHeaders | undefined, name: string): boolean {
|
||||
const expected = name.toLowerCase();
|
||||
return Object.keys(headers ?? {}).some((key) => key.toLowerCase() === expected);
|
||||
}
|
||||
|
||||
function withSessionHeader<TOptions extends StreamOptions>(options: TOptions | undefined): TOptions | undefined {
|
||||
if (!options?.sessionId || hasHeader(options.headers, OPENCODE_SESSION_HEADER)) return options;
|
||||
return {
|
||||
...options,
|
||||
headers: { ...options.headers, [OPENCODE_SESSION_HEADER]: options.sessionId },
|
||||
};
|
||||
}
|
||||
|
||||
/** Adds OpenCode's required per-conversation routing header before API dispatch. */
|
||||
export function withOpenCodeSessionHeader(streams: ProviderStreams): ProviderStreams {
|
||||
return {
|
||||
...streams,
|
||||
stream: (model, context, options) => streams.stream(model, context, withSessionHeader(options)),
|
||||
streamSimple: (model, context, options) => streams.streamSimple(model, context, withSessionHeader(options)),
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user