Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions app/src/components/BootCheckGate/BootCheckGate.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,11 @@ function ModePicker({ onConfirm }: PickerProps) {
setTestStatus({ kind: 'auth' });
return;
}
if (response.status === 405) {
log('[boot-check] picker — test reached /rpc but method was rejected');
setTestStatus({ kind: 'ok' });
return;
}
if (!response.ok) {
log('[boot-check] picker — test failed: HTTP %d', response.status);
setTestStatus({ kind: 'unreachable', reason: `HTTP ${response.status} from /rpc` });
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,24 @@ describe('BootCheckGate — picker test connection', () => {
);
});

it('shows Connected when /rpc returns 405 Method Not Allowed', async () => {
mockTestCoreRpcConnection.mockResolvedValue({
ok: false,
status: 405,
statusText: 'Method Not Allowed',
text: async () => 'Method Not Allowed',
} as unknown as Response);

renderGate();
fillCloudInputs('https://example.trycloudflare.com/rpc', 'tok-abc');
fireEvent.click(screen.getByRole('button', { name: 'Test Connection' }));

await waitFor(() => {
expect(screen.getByTestId('test-status-ok')).toBeInTheDocument();
});
expect(screen.queryByTestId('test-status-unreachable')).not.toBeInTheDocument();
});

it('shows Auth failed on a 401 response', async () => {
mockTestCoreRpcConnection.mockResolvedValue({
ok: false,
Expand Down
2 changes: 2 additions & 0 deletions app/src/lib/i18n/chunks/de-3.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,8 @@ const de3: TranslationMap = {
'subconscious.failed': 'gescheitert',
'subconscious.tickInterval': 'Tick-Intervall',
'subconscious.runNow': 'Jetzt ausführen',
'subconscious.providerUnavailableTitle': 'Subconscious ist pausiert',
'subconscious.providerSettings': 'KI-Einstellungen',
'subconscious.approvalNeeded': 'Genehmigung erforderlich',
'subconscious.requiresApproval': 'Erfordert eine Genehmigung',
'subconscious.fixInConnections': 'Fix in Verbindungen',
Expand Down
22 changes: 22 additions & 0 deletions app/src/lib/i18n/chunks/de-5.ts
Original file line number Diff line number Diff line change
Expand Up @@ -501,6 +501,28 @@ const de5: TranslationMap = {
'settings.mascot.colorYellow': 'Gelb',
'settings.mascot.libraryUnavailable': 'OpenHuman Bibliothek nicht verfügbar',
'settings.mascot.title': 'OpenHuman',
'settings.developerMenu.mcpServer.title': 'MCP-Server',
'settings.developerMenu.mcpServer.desc':
'Konfiguriere externe MCP-Clients für die Verbindung mit OpenHuman',
'settings.mcpServer.title': 'MCP-Server',
'settings.mcpServer.toolsSectionTitle': 'Verfügbare Tools',
'settings.mcpServer.toolsSectionDesc':
'Tools, die über den MCP-stdio-Server verfügbar sind, wenn openhuman-core mcp ausgeführt wird',
'settings.mcpServer.configSectionTitle': 'Client-Konfiguration',
'settings.mcpServer.configSectionDesc':
'Wähle deinen MCP-Client aus, um den passenden Konfigurationsausschnitt zu erzeugen',
'settings.mcpServer.copySnippet': 'In Zwischenablage kopieren',
'settings.mcpServer.copied': 'Kopiert!',
'settings.mcpServer.openConfigFile': 'Konfigurationsdatei öffnen',
'settings.mcpServer.binaryPathNotFound':
'OpenHuman-Binärdatei nicht gefunden. Wenn du aus dem Quellcode arbeitest, baue sie mit: cargo build --bin openhuman-core',
'settings.mcpServer.openConfigError': 'Konfigurationsdatei konnte nicht geöffnet werden',
'settings.mcpServer.clientClaudeDesktop': 'Claude Desktop',
'settings.mcpServer.clientCursor': 'Cursor',
'settings.mcpServer.clientCodex': 'Codex',
'settings.mcpServer.clientZed': 'Zed',
'settings.mcpServer.configFilePath': 'Konfigurationsdatei',
'settings.mcpServer.clientSelectorAriaLabel': 'MCP-Client-Auswahl',
};

export default de5;
Loading