diff --git a/src/apps/officer-web/Screens/Dashboard/Layout.tsx b/src/apps/officer-web/Screens/Dashboard/Layout.tsx
index 91522d2b..8d25bab6 100644
--- a/src/apps/officer-web/Screens/Dashboard/Layout.tsx
+++ b/src/apps/officer-web/Screens/Dashboard/Layout.tsx
@@ -130,7 +130,8 @@ export function DashboardLayout({ children, mobileFull }: DashboardLayoutProps)
- {isProduction && passkeyCount === 0 ?
: children}
+ {/* {isProduction && passkeyCount === 0 ?
: children} */}
+ {children}
diff --git a/src/apps/officer-web/Screens/Dashboard/Settings/ResourceSettings/index.tsx b/src/apps/officer-web/Screens/Dashboard/Settings/ResourceSettings/index.tsx
index 024dc351..c9a99de9 100644
--- a/src/apps/officer-web/Screens/Dashboard/Settings/ResourceSettings/index.tsx
+++ b/src/apps/officer-web/Screens/Dashboard/Settings/ResourceSettings/index.tsx
@@ -6,6 +6,8 @@ import { Button } from '@/components/ui/button';
import { Card } from '@/components/Card';
import { useClient } from 'hooks/useClient';
import { DashboardLayout } from '../../Layout';
+import { EmbeddableChat, useClaude, useOpenCode } from 'plugins/Chat/client';
+import { useVisibleClaudeModels, useVisibleOpenCodeModels } from '@/state/useModels';
type AppStatus = {
id: string;
@@ -77,10 +79,12 @@ export const ResourceSettings = () => {
return app.hasUpdate && !(app.manualUpdateCommand ?? app.manualInstallCommand);
};
+ const [provider, setProvider] = useState<'claude' | 'opencode'>('claude');
+
return (
-
-
+
+
Applications
System tools and dependencies used by Officer.dev
@@ -163,7 +167,47 @@ export const ResourceSettings = () => {
)}
+
+
+ {provider === 'claude' ? (
+
+ ) : (
+
+ )}
+
);
};
+
+type ChatInnerProps = {
+ onProviderChange: (p: 'claude' | 'opencode') => void;
+};
+
+const ClaudeChat = ({ onProviderChange }: ChatInnerProps) => {
+ const chat = useClaude(undefined, undefined, { replaceUrl: false });
+ const models = useVisibleClaudeModels();
+ return (
+
+ );
+};
+
+const OpenCodeChat = ({ onProviderChange }: ChatInnerProps) => {
+ const chat = useOpenCode(undefined, undefined, { replaceUrl: false });
+ const models = useVisibleOpenCodeModels();
+ return (
+
+ );
+};