feat(councils-ui): add on-demand council conversations panel and model config controls

This commit is contained in:
William Valentin
2026-02-21 11:26:04 -08:00
parent cfd7fa6fd0
commit 7c121b82c6
11 changed files with 481 additions and 4 deletions
+8
View File
@@ -424,6 +424,9 @@ describe('configSchema — councils', () => {
expect(result.councils.defaults.max_rounds).toBe(2);
expect(result.councils.defaults.top_ideas_for_bridge).toBe(3);
expect(result.councils.defaults.bridge_packet_max_chars).toBe(2500);
expect(result.councils.groups.D.model_tier).toBe('complex');
expect(result.councils.groups.P.model_tier).toBe('complex');
expect(result.councils.meta_model_tier).toBe('complex');
expect(result.councils.groups.D.novelty_bias).toBe('low');
expect(result.councils.groups.P.novelty_bias).toBe('high');
expect(result.councils.meta_arbiter_agent).toBe('council_meta_arbiter');
@@ -450,6 +453,7 @@ describe('configSchema — councils', () => {
D: {
arbiter_agent: 'd_arb',
freethinker_agent: 'd_ft',
model_tier: 'default',
group_prompt_prefix: 'd',
novelty_bias: 'low',
risk_tolerance: 'medium',
@@ -458,6 +462,7 @@ describe('configSchema — councils', () => {
P: {
arbiter_agent: 'p_arb',
freethinker_agent: 'p_ft',
model_tier: 'fast',
group_prompt_prefix: 'p',
novelty_bias: 'high',
risk_tolerance: 'high',
@@ -465,6 +470,7 @@ describe('configSchema — councils', () => {
},
},
meta_arbiter_agent: 'meta',
meta_model_tier: 'local',
},
});
@@ -472,6 +478,8 @@ describe('configSchema — councils', () => {
expect(result.councils.defaults.max_rounds).toBe(3);
expect(result.councils.groups.D.arbiter_agent).toBe('d_arb');
expect(result.councils.groups.P.freethinker_agent).toBe('p_ft');
expect(result.councils.groups.D.model_tier).toBe('default');
expect(result.councils.meta_model_tier).toBe('local');
expect(result.councils.strict_grounding).toBe(true);
expect(result.councils.meta_arbiter_agent).toBe('meta');
});
+4
View File
@@ -865,6 +865,7 @@ const councilsGroupConfigSchema = z.object({
freethinker_agent: z.string().min(1),
grounder_agent: z.string().min(1).optional(),
writer_agent: z.string().min(1).optional(),
model_tier: modelTierEnum.default('complex'),
group_prompt_prefix: z.string().min(1),
novelty_bias: z.enum(['low', 'medium', 'high']).default('medium'),
risk_tolerance: z.enum(['low', 'medium', 'high']).default('medium'),
@@ -890,6 +891,7 @@ const councilsSchema = z.object({
D: councilsGroupConfigSchema.default({
arbiter_agent: 'council_d_arbiter',
freethinker_agent: 'council_d_freethinker',
model_tier: 'complex',
group_prompt_prefix: 'Optimize for feasibility and speed-to-test. Prefer boring-but-true.',
novelty_bias: 'low',
risk_tolerance: 'low',
@@ -902,6 +904,7 @@ const councilsSchema = z.object({
P: councilsGroupConfigSchema.default({
arbiter_agent: 'council_p_arbiter',
freethinker_agent: 'council_p_freethinker',
model_tier: 'complex',
group_prompt_prefix: 'Optimize for reframing and non-obvious leverage. Weird is fine; label speculation.',
novelty_bias: 'high',
risk_tolerance: 'high',
@@ -913,6 +916,7 @@ const councilsSchema = z.object({
}),
}).default({}),
meta_arbiter_agent: z.string().min(1).default('council_meta_arbiter'),
meta_model_tier: modelTierEnum.default('complex'),
meta_writer_agent: z.string().min(1).optional(),
}).default({});