Update all import statements to use @opencode-ai/sdk/v2 Modify Vite configurations to alias new SDK path Update API client method signatures for SDK v2 compatibility
68 lines
2.8 KiB
TypeScript
68 lines
2.8 KiB
TypeScript
import type { Part } from "@opencode-ai/sdk/v2";
|
|
|
|
const extractTextFromDelta = (delta: unknown): string => {
|
|
if (!delta) return '';
|
|
if (typeof delta === 'string') return delta;
|
|
if (Array.isArray(delta)) {
|
|
return delta.map((item) => extractTextFromDelta(item)).join('');
|
|
}
|
|
if (typeof delta === 'object') {
|
|
if (typeof (delta as { text?: unknown }).text === 'string') {
|
|
return (delta as { text: string }).text;
|
|
}
|
|
if (Array.isArray((delta as { content?: unknown[] }).content)) {
|
|
return (delta as { content: unknown[] }).content.map((item: unknown) => extractTextFromDelta(item)).join('');
|
|
}
|
|
}
|
|
return '';
|
|
};
|
|
|
|
export const extractTextFromPart = (part: unknown): string => {
|
|
if (!part) return '';
|
|
const typedPart = part as { text?: string | unknown[]; delta?: unknown; content?: string | unknown[] };
|
|
if (typeof typedPart.text === 'string') return typedPart.text;
|
|
if (Array.isArray(typedPart.text)) {
|
|
return typedPart.text.map((item: unknown) => (typeof item === 'string' ? item : extractTextFromPart(item))).join('');
|
|
}
|
|
const deltaText = extractTextFromDelta(typedPart.delta);
|
|
if (deltaText) return deltaText;
|
|
if (typeof typedPart.content === 'string') return typedPart.content;
|
|
if (Array.isArray(typedPart.content)) {
|
|
return typedPart.content
|
|
.map((item: unknown) => {
|
|
if (typeof item === 'string') return item;
|
|
if (item && typeof item === 'object') {
|
|
const typedItem = item as { text?: string; delta?: unknown };
|
|
return typedItem.text || extractTextFromDelta(typedItem.delta) || '';
|
|
}
|
|
return '';
|
|
})
|
|
.join('');
|
|
}
|
|
return '';
|
|
};
|
|
|
|
export const normalizeStreamingPart = (incoming: Part, existing?: Part): Part => {
|
|
const normalized: { type?: string; text?: string; delta?: unknown; [key: string]: unknown } = { ...incoming } as { type?: string; text?: string; delta?: unknown; [key: string]: unknown };
|
|
normalized.type = normalized.type || 'text';
|
|
|
|
if (normalized.type === 'text') {
|
|
const existingText = existing && typeof (existing as { text?: string }).text === 'string' ? (existing as { text: string }).text : '';
|
|
const directText = typeof normalized.text === 'string' ? normalized.text : '';
|
|
const deltaText = extractTextFromDelta((incoming as { delta?: unknown }).delta);
|
|
|
|
if (directText) {
|
|
normalized.text = directText;
|
|
} else if (deltaText) {
|
|
normalized.text = existingText ? `${existingText}${deltaText}` : deltaText;
|
|
} else if (existingText) {
|
|
normalized.text = existingText;
|
|
} else {
|
|
normalized.text = '';
|
|
}
|
|
|
|
delete normalized.delta;
|
|
}
|
|
|
|
return normalized as Part;
|
|
}; |