Add BRAIN_DISABLED flag and fix Ollama tool call formatting
Features: - Add BRAIN_DISABLED feature flag to hide all Brain functionality - When enabled, hides Brain banner, status indicator, menu, and commands - Flag location: src/constants/brain.ts Fixes: - Fix Ollama 400 error by properly formatting tool_calls in messages - Update OllamaMessage type to include tool_calls field - Fix Brain menu keyboard not working (add missing modes to isMenuOpen) UI Changes: - Remove "^Tab toggle mode" hint from status bar - Remove "ctrl+t to hide todos" hint from status bar Files modified: - src/constants/brain.ts (add BRAIN_DISABLED flag) - src/types/ollama.ts (add tool_calls to OllamaMessage) - src/providers/ollama/chat.ts (format tool_calls in messages) - src/tui-solid/components/header.tsx (hide Brain UI when disabled) - src/tui-solid/components/status-bar.tsx (remove hints) - src/tui-solid/components/command-menu.tsx (filter brain command) - src/tui-solid/components/input-area.tsx (fix isMenuOpen modes) - src/tui-solid/routes/session.tsx (skip brain menu when disabled) - src/services/brain.ts (early return when disabled) - src/services/chat-tui/initialize.ts (skip brain init when disabled)
This commit is contained in:
@@ -44,23 +44,41 @@ const PROVIDER_ENV_VARS: Record<Provider, string> = {
|
||||
* Config state (singleton pattern using closure)
|
||||
*/
|
||||
let configState: Config = getDefaults();
|
||||
let configLoaded = false;
|
||||
let configLoadPromise: Promise<void> | null = null;
|
||||
|
||||
/**
|
||||
* Load configuration from file
|
||||
* Load configuration from file (with caching)
|
||||
*/
|
||||
export const loadConfig = async (): Promise<void> => {
|
||||
try {
|
||||
const data = await fs.readFile(FILES.config, "utf-8");
|
||||
const loaded = JSON.parse(data);
|
||||
|
||||
// Clean up deprecated keys
|
||||
delete loaded.models;
|
||||
|
||||
configState = { ...getDefaults(), ...loaded };
|
||||
} catch {
|
||||
// Config file doesn't exist or is invalid, use defaults
|
||||
configState = getDefaults();
|
||||
// Return cached config if already loaded
|
||||
if (configLoaded) {
|
||||
return;
|
||||
}
|
||||
|
||||
// If loading is in progress, wait for it
|
||||
if (configLoadPromise) {
|
||||
return configLoadPromise;
|
||||
}
|
||||
|
||||
// Start loading
|
||||
configLoadPromise = (async () => {
|
||||
try {
|
||||
const data = await fs.readFile(FILES.config, "utf-8");
|
||||
const loaded = JSON.parse(data);
|
||||
|
||||
// Clean up deprecated keys
|
||||
delete loaded.models;
|
||||
|
||||
configState = { ...getDefaults(), ...loaded };
|
||||
} catch {
|
||||
// Config file doesn't exist or is invalid, use defaults
|
||||
configState = getDefaults();
|
||||
}
|
||||
configLoaded = true;
|
||||
})();
|
||||
|
||||
return configLoadPromise;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user