diff --git a/packages/cli/src/cli.ts b/packages/cli/src/cli.ts index b2b8954..339b936 100644 --- a/packages/cli/src/cli.ts +++ b/packages/cli/src/cli.ts @@ -144,6 +144,23 @@ program } } + // Auto-create a conversation if none was specified + let conversationId = opts.conversation; + if (!conversationId) { + try { + const { createConversation } = await import('./tui/gateway-api.js'); + const conv = await createConversation(opts.gateway, session.cookie, { + ...(projectId ? { projectId } : {}), + }); + conversationId = conv.id; + } catch (err) { + console.error( + `Failed to create conversation: ${err instanceof Error ? err.message : String(err)}`, + ); + process.exit(1); + } + } + // Dynamic import to avoid loading React/Ink for other commands const { render } = await import('ink'); const React = await import('react'); @@ -152,7 +169,7 @@ program render( React.createElement(TuiApp, { gatewayUrl: opts.gateway, - conversationId: opts.conversation, + conversationId, sessionCookie: session.cookie, initialModel: opts.model, initialProvider: opts.provider, diff --git a/packages/cli/src/tui/gateway-api.ts b/packages/cli/src/tui/gateway-api.ts index 8c63bd7..f41913d 100644 --- a/packages/cli/src/tui/gateway-api.ts +++ b/packages/cli/src/tui/gateway-api.ts @@ -110,6 +110,31 @@ async function handleResponse(res: Response, errorPrefix: string): Promise return (await res.json()) as T; } +// ── Conversation types ── + +export interface ConversationInfo { + id: string; + title: string | null; + archived: boolean; + createdAt: string; + updatedAt: string; +} + +// ── Conversation endpoints ── + +export async function createConversation( + gatewayUrl: string, + sessionCookie: string, + data: { title?: string; projectId?: string } = {}, +): Promise { + const res = await fetch(`${gatewayUrl}/api/conversations`, { + method: 'POST', + headers: jsonHeaders(sessionCookie, gatewayUrl), + body: JSON.stringify(data), + }); + return handleResponse(res, 'Failed to create conversation'); +} + // ── Provider / Model endpoints ── export async function fetchAvailableModels(