This commit is contained in:
2026-02-19 21:48:24 +00:00
42 changed files with 1674 additions and 374 deletions
@@ -1,6 +1,6 @@
export type UserSettings = {
chat: {
defaultProvider: 'claude' | 'opencode';
defaultProvider: 'claude' | 'opencode' | 'pi-mono';
defaultModel: string | null;
systemPrompt: string;
temperature: number;
@@ -11,7 +11,7 @@ export type UserSettings = {
enabledProviders: string[];
};
tasks: {
defaultProvider: 'claude' | 'opencode';
defaultProvider: 'claude' | 'opencode' | 'pi-mono';
defaultModel: string | null;
};
appearance: {
@@ -15,14 +15,14 @@ export const useChatSessions = () => {
queryFn: () => client.get<SessionEntry[]>('/sessions'),
});
const getMessages = (provider: 'claude' | 'opencode', sessionId: string) =>
const getMessages = (provider: 'claude' | 'opencode' | 'pi-mono', sessionId: string) =>
client.get<ChatMessage[]>(`/sessions/${provider}/${sessionId}/messages`);
const saveMessages = (provider: 'claude' | 'opencode', sessionId: string, messages: ChatMessage[]) =>
const saveMessages = (provider: 'claude' | 'opencode' | 'pi-mono', sessionId: string, messages: ChatMessage[]) =>
client.put(`/sessions/${provider}/${sessionId}/messages`, messages);
const renameSession = async (
provider: 'claude' | 'opencode',
provider: 'claude' | 'opencode' | 'pi-mono',
sessionId: string | null,
args: string,
): Promise<SlashCommandResult> => {
@@ -42,12 +42,12 @@ export const useChatSessions = () => {
}
};
const archiveSession = async (provider: 'claude' | 'opencode', sessionId: string) => {
const archiveSession = async (provider: 'claude' | 'opencode' | 'pi-mono', sessionId: string) => {
await client.post(`/sessions/${provider}/${sessionId}/archive`);
queryClient.setQueryData<SessionEntry[]>(['SESSIONS'], (prev) => prev?.filter((s) => s.id !== sessionId) ?? []);
};
const deleteSession = async (provider: 'claude' | 'opencode', sessionId: string) => {
const deleteSession = async (provider: 'claude' | 'opencode' | 'pi-mono', sessionId: string) => {
await client.delete(`/sessions/${provider}/${sessionId}`);
queryClient.setQueryData<SessionEntry[]>(['SESSIONS'], (prev) => prev?.filter((s) => s.id !== sessionId) ?? []);
};
+21
View File
@@ -66,3 +66,24 @@ export const useVisibleOpenCodeModels = () => {
[models, providers, enabled],
);
};
export const usePiMonoModels = () => {
const client = useClient();
const { isAuthenticated } = useAuth();
const { data: models = [] } = useQuery<ModelOption[]>({
queryKey: ['PI_MONO_MODELS'],
enabled: isAuthenticated,
queryFn: () => client.get<ModelOption[]>('/pi-mono/models'),
staleTime: 5 * 60 * 1000,
});
return models;
};
export const useVisiblePiMonoModels = () => {
const models = usePiMonoModels();
const { settings } = useSettings();
const enabled = settings.ai?.enabledModels ?? [];
return useMemo(() => models.filter((m) => enabled.includes(modelKey(m))), [models, enabled]);
};
@@ -5,6 +5,7 @@ import { useClient } from 'hooks/useClient';
type AIHarnesses = {
claudeCode: boolean;
opencode: boolean;
piMono: boolean;
};
type ServerSettings = {