Rename Foundry handoffs to tasks (#239)

* Restore foundry onboarding stack

* Consolidate foundry rename

* Create foundry tasks without prompts

* Rename Foundry handoffs to tasks
This commit is contained in:
Nathan Flurry 2026-03-11 13:23:54 -07:00 committed by GitHub
parent d30cc0bcc8
commit d75e8c31d1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
281 changed files with 9242 additions and 4356 deletions

View file

@ -1,137 +0,0 @@
import type { SandboxSessionEventRecord } from "@openhandoff/client";
import type { SandboxSessionRecord } from "@openhandoff/client";
function fromPromptArray(value: unknown): string | null {
if (!Array.isArray(value)) {
return null;
}
const parts: string[] = [];
for (const item of value) {
if (!item || typeof item !== "object") {
continue;
}
const text = (item as { text?: unknown }).text;
if (typeof text === "string" && text.trim().length > 0) {
parts.push(text.trim());
}
}
return parts.length > 0 ? parts.join("\n") : null;
}
function fromSessionUpdate(value: unknown): string | null {
if (!value || typeof value !== "object") {
return null;
}
const update = value as {
content?: unknown;
sessionUpdate?: unknown;
};
if (update.sessionUpdate !== "agent_message_chunk") {
return null;
}
const content = update.content;
if (!content || typeof content !== "object") {
return null;
}
const text = (content as { text?: unknown }).text;
return typeof text === "string" ? text : null;
}
export function extractEventText(payload: unknown): string {
if (!payload || typeof payload !== "object") {
return String(payload ?? "");
}
const envelope = payload as {
method?: unknown;
params?: unknown;
result?: unknown;
error?: unknown;
};
const params = envelope.params;
if (params && typeof params === "object") {
const updateText = fromSessionUpdate((params as { update?: unknown }).update);
if (typeof updateText === "string") {
return updateText;
}
const text = (params as { text?: unknown }).text;
if (typeof text === "string" && text.trim().length > 0) {
return text.trim();
}
const prompt = fromPromptArray((params as { prompt?: unknown }).prompt);
if (prompt) {
return prompt;
}
}
const result = envelope.result;
if (result && typeof result === "object") {
const text = (result as { text?: unknown }).text;
if (typeof text === "string" && text.trim().length > 0) {
return text.trim();
}
}
if (envelope.error) {
return JSON.stringify(envelope.error, null, 2);
}
if (typeof envelope.method === "string") {
return envelope.method;
}
return JSON.stringify(payload, null, 2);
}
export function buildTranscript(events: SandboxSessionEventRecord[]): Array<{
id: string;
sender: "client" | "agent";
text: string;
createdAt: number;
}> {
return events.map((event) => ({
id: event.id,
sender: event.sender,
text: extractEventText(event.payload),
createdAt: event.createdAt,
}));
}
export function resolveSessionSelection(input: { explicitSessionId: string | null; handoffSessionId: string | null; sessions: SandboxSessionRecord[] }): {
sessionId: string | null;
staleSessionId: string | null;
} {
const sessionIds = new Set(input.sessions.map((session) => session.id));
const hasSession = (id: string | null): id is string => Boolean(id && sessionIds.has(id));
if (hasSession(input.explicitSessionId)) {
return { sessionId: input.explicitSessionId, staleSessionId: null };
}
if (hasSession(input.handoffSessionId)) {
return { sessionId: input.handoffSessionId, staleSessionId: null };
}
const fallbackSessionId = input.sessions[0]?.id ?? null;
if (fallbackSessionId) {
return { sessionId: fallbackSessionId, staleSessionId: null };
}
if (input.explicitSessionId) {
return { sessionId: null, staleSessionId: input.explicitSessionId };
}
if (input.handoffSessionId) {
return { sessionId: null, staleSessionId: input.handoffSessionId };
}
return { sessionId: null, staleSessionId: null };
}