test: close the per-file coverage gaps for the scoping surface
Every subject-extractor row of the invariants carrier table is exercised with a matching and a foreign-keyed carrier; the HMR re-apply seed path (sessions of agents that predate the plugin are marked started) is pinned; the scoped tool-provider disposal, plural restrict() validation, singular scopeHost absentee, tool-subagent passthrough, stale-stage drop, and disposing-parent spawn (INACTIVE_EFFECT, no orphan) each gain their test. Two genuinely defensive branches carry justified v8-ignore markers.
This commit is contained in:
@@ -100,6 +100,19 @@ describe('scoped tool providers and toolOrder × restriction', () => {
|
||||
expect(global.tools.map(t => t.name)).toEqual(['global_tool'])
|
||||
})
|
||||
|
||||
it('disposing a scoped tool provider empties its layer without residue', async () => {
|
||||
const ctx = await mount()
|
||||
const scope = await mintScope(ctx, 'child')
|
||||
const dispose = scope.ctx.systemPrompt.tools(() => ({ schemas: [schema('scoped_tool')] }))
|
||||
dispose()
|
||||
const after = await ctx.systemPrompt.assemble({ scope: scopeKeyOf(scope) })
|
||||
expect(after.tools.map(t => t.name)).toEqual([])
|
||||
// Re-registering through the same scope starts a fresh layer.
|
||||
scope.ctx.systemPrompt.tools(() => ({ schemas: [schema('again')] }))
|
||||
const again = await ctx.systemPrompt.assemble({ scope: scopeKeyOf(scope) })
|
||||
expect(again.tools.map(t => t.name)).toEqual(['again'])
|
||||
})
|
||||
|
||||
it('a toolOrder entry restricted away for a scope is a normal absence, while a typo still throws', async () => {
|
||||
const ctx = await mount({ toolOrder: ['bash', TOOL_ORDER_REST] })
|
||||
// A provider mimicking the registry's restriction split: bash exists
|
||||
|
||||
Reference in New Issue
Block a user