51 lines
1.6 KiB
TypeScript
51 lines
1.6 KiB
TypeScript
import React from 'react';
|
|
import { render } from 'ink';
|
|
import { App } from './components/index.js';
|
|
import type { ManagedSession } from '../../session/index.js';
|
|
import type { ModelClient } from '../../models/types.js';
|
|
import type { ModelRouter } from '../../models/router.js';
|
|
import type { NativeAgent } from '../../backends/native/agent.js';
|
|
import type { HookEngine } from '../../hooks/index.js';
|
|
import type { ModelConfig, ModelProvider } from '../../config/index.js';
|
|
|
|
export interface FullscreenTuiConfig {
|
|
session: ManagedSession;
|
|
modelClient: ModelClient;
|
|
modelRouter?: ModelRouter;
|
|
systemPrompt: string;
|
|
model: string;
|
|
agent?: NativeAgent;
|
|
hookEngine?: HookEngine;
|
|
modelProviderConfigs?: Partial<Record<ModelProvider, ModelConfig>>;
|
|
contextThresholdPct?: number;
|
|
onExit?: () => void;
|
|
}
|
|
|
|
export async function startFullscreenTui(config: FullscreenTuiConfig): Promise<void> {
|
|
// Ensure stdin is in a clean state for Ink
|
|
if (process.stdin.isPaused()) {
|
|
process.stdin.resume();
|
|
}
|
|
|
|
if (config.agent && config.modelRouter) {
|
|
config.agent.setModelTier(config.modelRouter.getTier());
|
|
}
|
|
|
|
const { waitUntilExit } = render(
|
|
React.createElement(App, {
|
|
session: config.session,
|
|
modelClient: config.modelClient,
|
|
modelRouter: config.modelRouter,
|
|
systemPrompt: config.systemPrompt,
|
|
model: config.model,
|
|
agent: config.agent,
|
|
hookEngine: config.hookEngine,
|
|
modelProviderConfigs: config.modelProviderConfigs,
|
|
contextThresholdPct: config.contextThresholdPct,
|
|
onExit: config.onExit,
|
|
}),
|
|
);
|
|
|
|
await waitUntilExit();
|
|
}
|