feat(config): add config read/write and defaults
This commit is contained in:
parent
57bb572bf5
commit
c5af4c7b6a
33
src/core/config.ts
Normal file
33
src/core/config.ts
Normal file
@ -0,0 +1,33 @@
|
||||
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
|
||||
import { dirname } from 'path';
|
||||
import { getConfigPath } from './paths.js';
|
||||
import { ConfigSchema, type Config } from './schema.js';
|
||||
|
||||
export function defaultConfig(projectName: string): Config {
|
||||
return {
|
||||
version: '1',
|
||||
projectName,
|
||||
delegationMode: 'suggest',
|
||||
roles: {
|
||||
architect: { preferredAgent: 'claude' },
|
||||
implementer: { preferredAgent: 'codex' },
|
||||
reviewer: { preferredAgent: 'claude' },
|
||||
tester: { preferredAgent: 'codex' },
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export function loadConfig(cwd: string): Config {
|
||||
const path = getConfigPath(cwd);
|
||||
if (!existsSync(path)) {
|
||||
throw new Error('AgentHub not initialized. Run: agenthub init');
|
||||
}
|
||||
const raw = JSON.parse(readFileSync(path, 'utf-8'));
|
||||
return ConfigSchema.parse(raw);
|
||||
}
|
||||
|
||||
export function saveConfig(cwd: string, config: Config): void {
|
||||
const path = getConfigPath(cwd);
|
||||
mkdirSync(dirname(path), { recursive: true });
|
||||
writeFileSync(path, JSON.stringify(config, null, 2), 'utf-8');
|
||||
}
|
||||
25
tests/config.test.ts
Normal file
25
tests/config.test.ts
Normal file
@ -0,0 +1,25 @@
|
||||
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
||||
import { mkdtempSync, rmSync } from 'fs';
|
||||
import { tmpdir } from 'os';
|
||||
import { join } from 'path';
|
||||
import { loadConfig, saveConfig, defaultConfig } from '../src/core/config.js';
|
||||
|
||||
describe('config', () => {
|
||||
let cwd: string;
|
||||
|
||||
beforeEach(() => {
|
||||
cwd = mkdtempSync(join(tmpdir(), 'agenthub-'));
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
rmSync(cwd, { recursive: true, force: true });
|
||||
});
|
||||
|
||||
it('creates and loads default config', () => {
|
||||
const cfg = defaultConfig('test-project');
|
||||
saveConfig(cwd, cfg);
|
||||
const loaded = loadConfig(cwd);
|
||||
expect(loaded.projectName).toBe('test-project');
|
||||
expect(loaded.delegationMode).toBe('suggest');
|
||||
});
|
||||
});
|
||||
Loading…
x
Reference in New Issue
Block a user