mirror of
https://github.com/hansjone/dsh-im-ops.git
synced 2026-10-08 23:13:17 +08:00
Add per-DM and per-group Agent Preset overrides (4.9.1-ops.19).
Access grants can pin an agentPreset on direct members and groups; new sessions resolve override over the bot-global preset. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
7993499273
commit
2718586fda
12 changed files with 590 additions and 232 deletions
|
|
@ -15,6 +15,7 @@ import {
|
|||
parsePendingIdFromNotifyText,
|
||||
resolveAccessPending,
|
||||
upsertAccessContact,
|
||||
resolveAccessAgentPreset,
|
||||
validateAccessGrant,
|
||||
} from '../../../src/channels/shared/access-grant.mjs';
|
||||
|
||||
|
|
@ -194,3 +195,55 @@ test('quote approval helpers parse intent, pending id, and notify refs', () => {
|
|||
};
|
||||
assert.equal(findPendingByNotifyMessageId(withRef, 'MSG1')?.id, 'p_abc123');
|
||||
});
|
||||
|
||||
|
||||
test('resolveAccessAgentPreset prefers direct-member and group overrides over global', () => {
|
||||
const doc = grant({
|
||||
directMembers: [
|
||||
{ phone: '8618222222222', canExecuteCommands: true, agentPreset: 'ops-user' },
|
||||
{ phone: '8618333333333', canExecuteCommands: true },
|
||||
],
|
||||
groups: {
|
||||
[GROUP_A]: {
|
||||
title: 'A',
|
||||
agentPreset: 'ops-group',
|
||||
admins: [],
|
||||
members: [{ phone: '8618444444444', canExecuteCommands: true }],
|
||||
},
|
||||
},
|
||||
});
|
||||
assert.equal(resolveAccessAgentPreset(doc, {
|
||||
kind: 'direct',
|
||||
phone: '8618222222222',
|
||||
}), 'ops-user');
|
||||
assert.equal(resolveAccessAgentPreset(doc, {
|
||||
kind: 'direct',
|
||||
phone: '8618333333333',
|
||||
}), null);
|
||||
assert.equal(resolveAccessAgentPreset(doc, {
|
||||
kind: 'group',
|
||||
groupJid: GROUP_A,
|
||||
}), 'ops-group');
|
||||
assert.equal(resolveAccessAgentPreset(doc, {
|
||||
kind: 'group',
|
||||
groupJid: GROUP_B,
|
||||
}), null);
|
||||
});
|
||||
|
||||
test('validateAccessGrant keeps optional agentPreset on members and groups', () => {
|
||||
const doc = grant({
|
||||
directMembers: [{ phone: '8618222222222', canExecuteCommands: false, agentPreset: 'desk' }],
|
||||
groups: {
|
||||
[GROUP_A]: {
|
||||
agentPreset: 'night',
|
||||
admins: ['8618111111111'],
|
||||
members: [],
|
||||
},
|
||||
},
|
||||
});
|
||||
assert.equal(doc.directMembers[0].agentPreset, 'desk');
|
||||
assert.equal(doc.groups[GROUP_A].agentPreset, 'night');
|
||||
assert.throws(() => grant({
|
||||
directMembers: [{ phone: '8618222222222', canExecuteCommands: true, agentPreset: 'BAD Preset' }],
|
||||
}), /Agent Preset/);
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue