test(web): cover user-only skill invocation end to end
The policy scenario now expects the user-only quadrant in the menu with its marker (riding the description — the hint field is claim-state ghost text, which the menu never renders), and a new skill-user-invoke scenario drives /name args through the composer against the real host: the claim lands skill.invoke, the transcript shows the dedicated card with the collapsed <skill_content> body, and a paced replay answers the injected turn deterministically.
This commit is contained in:
@@ -388,7 +388,7 @@ describe('adjudication', () => {
|
||||
})
|
||||
|
||||
describe('user-only marking', () => {
|
||||
it('carries the user-only hint on candidates the model cannot invoke', async () => {
|
||||
it('prefixes the description of candidates the model cannot invoke', async () => {
|
||||
const rows: SkillRow[] = [
|
||||
{ name: 'shared-skill', description: 'both surfaces', modelInvocable: true },
|
||||
{ name: 'user-only-skill', description: 'user surface only', modelInvocable: false },
|
||||
@@ -397,7 +397,7 @@ describe('user-only marking', () => {
|
||||
const candidates = await source.candidates(proj('s1'), req(''))
|
||||
expect(candidates).toEqual([
|
||||
{ name: 'shared-skill', description: 'both surfaces' },
|
||||
{ name: 'user-only-skill', description: 'user surface only', hint: '仅用户' },
|
||||
{ name: 'user-only-skill', description: '仅用户 · user surface only' },
|
||||
])
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user