Add room skill setting mutations (#133)
* add gated codex goals support * sync README SDK versions * bump claude agent sdk * add codex goals settings toggle * reuse status dashboard message and simplify settings actions * refine settings page UX * fix settings nav hash routing * add dashboard UX verification * refine dashboard settings and inbox UX * remove inbox top-level navigation * remove dashboard health top-level navigation * fix: allow runtime image attachment paths * feat: configure attachment allowlist dirs * fix: clean duplicate dashboard status messages * fix: poll dashboard duplicate cleanup between status updates * fix: delete dashboard duplicates on create * Refine settings IA with tabbed sections * Add read-only runtime inventory settings * Fix runtime inventory MCP JSON parsing * Add room skill settings inventory * Add room skill setting mutations
This commit is contained in:
@@ -3,7 +3,11 @@ import { Database } from 'bun:sqlite';
|
||||
import { describe, expect, it } from 'vitest';
|
||||
|
||||
import { initializeDatabaseSchema } from './db/bootstrap.js';
|
||||
import { getStoredRoomSkillOverridesFromDatabase } from './db/rooms.js';
|
||||
import {
|
||||
deleteStoredRoomSkillOverrideFromDatabase,
|
||||
getStoredRoomSkillOverridesFromDatabase,
|
||||
upsertStoredRoomSkillOverrideInDatabase,
|
||||
} from './db/rooms.js';
|
||||
import {
|
||||
buildRoomSkillSettingsSnapshot,
|
||||
type RoomSkillSettingsBuildInput,
|
||||
@@ -146,6 +150,39 @@ describe('room skill settings', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('keeps default mode when explicit enable rows do not change effective skills', () => {
|
||||
const snapshot = buildRoomSkillSettingsSnapshot({
|
||||
generatedAt: '2026-05-04T00:00:00.000Z',
|
||||
inventory: inventoryFixture(),
|
||||
roomBindings: {
|
||||
'room-1': {
|
||||
name: 'Room One',
|
||||
folder: 'room-one',
|
||||
added_at: '2026-05-04T00:00:00.000Z',
|
||||
agentType: 'codex',
|
||||
},
|
||||
},
|
||||
registeredAgentTypesByJid: new Map([['room-1', ['codex']]]),
|
||||
overrides: [
|
||||
{
|
||||
chatJid: 'room-1',
|
||||
agentType: 'codex',
|
||||
skillScope: 'runner',
|
||||
skillName: 'runner-browser',
|
||||
enabled: true,
|
||||
createdAt: '2026-05-04T00:00:00.000Z',
|
||||
updatedAt: '2026-05-04T00:00:00.000Z',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
expect(snapshot.rooms[0]?.agents[0]).toMatchObject({
|
||||
mode: 'all-enabled',
|
||||
explicitEnabledSkillIds: ['runner:runner-browser'],
|
||||
effectiveEnabledSkillIds: ['codex-user:browser', 'runner:runner-browser'],
|
||||
});
|
||||
});
|
||||
|
||||
it('reads normalized room skill overrides from the database', () => {
|
||||
const database = new Database(':memory:');
|
||||
try {
|
||||
@@ -192,4 +229,58 @@ describe('room skill settings', () => {
|
||||
database.close();
|
||||
}
|
||||
});
|
||||
|
||||
it('upserts and deletes room skill overrides in the database', () => {
|
||||
const database = new Database(':memory:');
|
||||
try {
|
||||
initializeDatabaseSchema(database);
|
||||
database
|
||||
.prepare(
|
||||
`INSERT INTO room_settings (
|
||||
chat_jid, room_mode, mode_source, name, folder, updated_at
|
||||
) VALUES (?, 'single', 'explicit', ?, ?, ?)`,
|
||||
)
|
||||
.run('room-1', 'Room One', 'room-one', '2026-05-04T00:00:00.000Z');
|
||||
|
||||
upsertStoredRoomSkillOverrideInDatabase(database, {
|
||||
chatJid: 'room-1',
|
||||
agentType: 'codex',
|
||||
skillScope: 'runner',
|
||||
skillName: 'agent-browser',
|
||||
enabled: false,
|
||||
});
|
||||
expect(getStoredRoomSkillOverridesFromDatabase(database)).toMatchObject([
|
||||
{
|
||||
chatJid: 'room-1',
|
||||
agentType: 'codex',
|
||||
skillScope: 'runner',
|
||||
skillName: 'agent-browser',
|
||||
enabled: false,
|
||||
},
|
||||
]);
|
||||
|
||||
upsertStoredRoomSkillOverrideInDatabase(database, {
|
||||
chatJid: 'room-1',
|
||||
agentType: 'codex',
|
||||
skillScope: 'runner',
|
||||
skillName: 'agent-browser',
|
||||
enabled: true,
|
||||
});
|
||||
expect(
|
||||
getStoredRoomSkillOverridesFromDatabase(database)[0],
|
||||
).toMatchObject({
|
||||
enabled: true,
|
||||
});
|
||||
|
||||
deleteStoredRoomSkillOverrideFromDatabase(database, {
|
||||
chatJid: 'room-1',
|
||||
agentType: 'codex',
|
||||
skillScope: 'runner',
|
||||
skillName: 'agent-browser',
|
||||
});
|
||||
expect(getStoredRoomSkillOverridesFromDatabase(database)).toEqual([]);
|
||||
} finally {
|
||||
database.close();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user