Files
hapi/shared/src/agentConfig.test.ts
T
SSU-WEI HUANGandGitHub be1ef2a2e4 feat(dsh): integrate DeepSeek Harness through ACP (#1632)
* feat(dsh): add DeepSeek Harness ACP flavor

* fix(dsh): update mobile flavor catalogs

* fix(dsh): keep mobile spawn policy managed

* fix(dsh): keep managed policy and prompt retry

* fix(dsh): suppress unsupported runner policy flags

* fix(dsh): align native managed-policy UX
2026-08-22 12:37:28 +08:00

97 lines
3.8 KiB
TypeScript

import { describe, expect, test } from 'bun:test'
import {
AgentConfigDescriptorSchema,
getAgentConfigDescriptor,
getBuiltinAgentConfigDescriptors,
resolveHapiYoloPermissionMode
} from './agentConfig'
describe('agent config descriptors', () => {
test('exposes the three primary fields with their intended placements', () => {
const descriptor = getAgentConfigDescriptor('codex')
expect(descriptor.fields.map((field) => [field.id, field.section])).toEqual([
['model', 'model'],
['effort', 'effort'],
['permission', 'permission'],
['serviceTier', 'settings'],
['collaborationMode', 'settings']
])
})
test('models Cursor variant as a dependent model field rather than a page-specific control', () => {
const descriptor = getAgentConfigDescriptor('cursor')
expect(descriptor.fields).toContainEqual(expect.objectContaining({
id: 'model',
kind: 'dependent-select',
optionSource: 'machine'
}))
})
test('reports DSH permission as managed by its ACP composition', () => {
const descriptor = getAgentConfigDescriptor('dsh')
expect(descriptor.fields).toEqual([expect.objectContaining({
id: 'permission',
kind: 'status',
availability: 'managed'
})])
expect(resolveHapiYoloPermissionMode('dsh')).toBeNull()
})
test('reports Pi permission as managed rather than pretending YOLO applies', () => {
const descriptor = getAgentConfigDescriptor('pi')
expect(descriptor.fields).toContainEqual(expect.objectContaining({
id: 'permission',
kind: 'status',
availability: 'managed'
}))
expect(descriptor.fields).toContainEqual(expect.objectContaining({
id: 'model',
kind: 'grouped-select',
optionSource: 'machine',
availability: 'both'
}))
expect(descriptor.fields).toContainEqual(expect.objectContaining({
id: 'effort',
optionSource: 'static',
availability: 'both'
}))
expect(resolveHapiYoloPermissionMode('pi')).toBeNull()
})
test('maps HAPI YOLO to each supported agent native permission mode', () => {
expect(resolveHapiYoloPermissionMode('claude')).toBe('bypassPermissions')
expect(resolveHapiYoloPermissionMode('grok')).toBe('bypassPermissions')
expect(resolveHapiYoloPermissionMode('codex')).toBe('yolo')
expect(resolveHapiYoloPermissionMode('cursor')).toBe('yolo')
expect(resolveHapiYoloPermissionMode('opencode')).toBe('yolo')
expect(resolveHapiYoloPermissionMode('kimi')).toBe('yolo')
})
test('validates descriptors received from a runner', () => {
expect(AgentConfigDescriptorSchema.safeParse({
flavor: 'example-agent',
fields: [{
id: 'model',
section: 'model',
kind: 'grouped-select',
optionSource: 'directory',
availability: 'both'
}]
}).success).toBe(true)
})
test('every builtin descriptor validates and carries a permission field', () => {
const descriptors = getBuiltinAgentConfigDescriptors()
expect(descriptors.length).toBeGreaterThan(0)
for (const descriptor of descriptors) {
expect(AgentConfigDescriptorSchema.safeParse(descriptor).success).toBe(true)
expect(descriptor.fields.some((field) => field.id === 'permission')).toBe(true)
}
})
})
test('runner capabilities carry descriptors for every built-in agent', async () => {
const { RUNNER_CAPABILITIES } = await import('./runnerCapabilities')
expect(RUNNER_CAPABILITIES.agentConfigs.map((descriptor) => descriptor.flavor)).toContain('cursor')
})