chat: rename the pi-mono provider router + purge residual pi names (Stage 4b/2)

Renames the AI-harness/provider settings router into the chat namespace and
clears the remaining "pi" identifiers from the chat stack.

- server-settings/pi-mono.ts → chat-providers.ts; piMonoRouter → chatProvidersRouter;
  route /server-settings/pi-mono → /server-settings/chat-providers (+ all callers)
- piId → providerId (PROVIDERS map + AIHarnessesSection UI), PiProvider → ChatProvider,
  PI_MONO_* query keys → CHAT_PROVIDERS_*, installPiMono → installAgent
- data-path: PI_CONFIG_DIR → AGENT_CONFIG_DIR (path ~/.pi/agent unchanged);
  drop dead getPiMonoDir/getPiMonoSessionDir exports
- settings: flip the vestigial defaultProvider literal 'pi' → 'chat' (never read;
  only defaultModel drives behavior); access-policy config key 'pi-access-policy'
  → 'chat-access-policy'
- misc: ModelSelector fallback label, TaskDefaults model grouping, CapabilityPage
  chat var, a stale stream-parser comment

Intentionally left (genuine external `pi`/opencode references, not ours to rename):
the `pi` binary install/version flow (@mariozechner/pi-coding-agent, `which pi`),
the ~/.pi/agent config path, PI_TOOLS_DIRS/PI_SEARXNG_URL runtime env-var contract,
TOOL.md `targets: pi` metadata, and the "Pi Mono" installer UI label.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-24 15:52:58 +00:00
co-authored by Claude Opus 4.8
parent 49df1c0b0c
commit 669692355d
15 changed files with 140 additions and 144 deletions
@@ -92,7 +92,7 @@ export function ModelSelector({
<div className="flex items-center justify-between mt-2">
{isLocked ? (
<span className="rounded-md bg-duck-dark/80 px-3 py-1 text-xs font-medium text-white">
{activeProvider ? displayName(activeProvider) : 'Pi'}
{activeProvider ? displayName(activeProvider) : 'Chat'}
</span>
) : (
<div className="flex items-center gap-1 rounded-lg bg-background/60 p-1">
+2 -2
View File
@@ -17,14 +17,14 @@ export function useAccessPolicy() {
const { data: policy = { allowedModels: [] } } = useQuery<AccessPolicy>({
queryKey: QUERY_KEY,
enabled: isAuthenticated,
queryFn: () => client.get<AccessPolicy>('/server-settings/pi-mono/access-policy'),
queryFn: () => client.get<AccessPolicy>('/server-settings/chat-providers/access-policy'),
staleTime: 5 * 60 * 1000,
});
const savePolicy = useCallback(
async (newPolicy: AccessPolicy) => {
queryClient.setQueryData(QUERY_KEY, newPolicy);
await client.put('/server-settings/pi-mono/access-policy', newPolicy);
await client.put('/server-settings/chat-providers/access-policy', newPolicy);
},
[client, queryClient],
);
+4 -4
View File
@@ -49,7 +49,7 @@ export type UseSettingsType = ReturnType<typeof useSettings>;
export type UserSettings = {
chat: {
defaultProvider: 'pi';
defaultProvider: 'chat';
defaultModel: string | null;
defaultProjectModel: string | null;
systemPrompt: string;
@@ -63,7 +63,7 @@ export type UserSettings = {
disabledProviders: string[];
};
tasks: {
defaultProvider: 'pi';
defaultProvider: 'chat';
defaultModel: string | null;
};
appearance: {
@@ -87,7 +87,7 @@ export type UserState = Record<string, unknown>;
export const DEFAULT_SETTINGS: UserSettings = {
chat: {
defaultProvider: 'pi',
defaultProvider: 'chat',
defaultModel: 'claude-code',
defaultProjectModel: 'claude-code',
systemPrompt: '',
@@ -100,7 +100,7 @@ export const DEFAULT_SETTINGS: UserSettings = {
disabledProviders: [],
},
tasks: {
defaultProvider: 'pi',
defaultProvider: 'chat',
defaultModel: 'claude-code',
},
appearance: {