- Delete legacy hooks: useClaude.ts, useOpenCode.ts, usePiMono.ts, App.backup.tsx - Update all components to use usePi instead of legacy hooks - Replace useVisiblePiMonoModels/useClaudeModels/useOpenCodeModels with useVisiblePiModels - Migrate from LegacyChatMessage to ChatMessage type throughout - Update SessionBar to remove provider and archive props - Simplify ChatDetailPanel to Pi-only (remove Claude/OpenCode components) - Fix useChatSessions calls (remove provider parameter) - Update user-settings types: provider now only 'pi' instead of legacy values - Update PI_HARNESS_REBUILD.md to mark phases complete
32 lines
1.0 KiB
TypeScript
32 lines
1.0 KiB
TypeScript
import { useChatSessions } from '@/state/useChatSessions';
|
|
|
|
export type SlashCommandResult = { handled: true; feedback: string } | { handled: false };
|
|
|
|
type UseSlashCommandsParams = {
|
|
sessionId: string | null;
|
|
};
|
|
|
|
export const useSlashCommands = ({ sessionId }: UseSlashCommandsParams) => {
|
|
const { renameSession } = useChatSessions();
|
|
|
|
const execute = async (input: string): Promise<SlashCommandResult> => {
|
|
const trimmed = input.trim();
|
|
if (!trimmed.startsWith('/')) return { handled: false };
|
|
|
|
const spaceIndex = trimmed.indexOf(' ');
|
|
const command = spaceIndex === -1 ? trimmed.slice(1) : trimmed.slice(1, spaceIndex);
|
|
const args = spaceIndex === -1 ? '' : trimmed.slice(spaceIndex + 1).trim();
|
|
|
|
switch (command) {
|
|
case 'rename':
|
|
if (!sessionId || !args) return { handled: false };
|
|
await renameSession(sessionId, args);
|
|
return { handled: true, feedback: `Session renamed to "${args}"` };
|
|
default:
|
|
return { handled: false };
|
|
}
|
|
};
|
|
|
|
return { execute };
|
|
};
|