fix(hooks): match Codex Rust regex syntax

This commit is contained in:
ZiyaZhang
2026-07-28 10:37:53 -07:00
parent 140a1eaccc
commit 0ef2327e34
21 changed files with 115 additions and 62 deletions
@@ -61,9 +61,9 @@ describe('parseCodexConfig', () => {
expect('matcher' in config.Stop![0]!).toBe(false)
})
it('keeps a matcher when present', () => {
const { config } = parseCodexConfig({ PreToolUse: [{ matcher: '^Bash$', hooks: [{ type: 'command', command: 'b.sh' }] }] })
expect(config.PreToolUse![0]!.matcher).toBe('^Bash$')
it('keeps a valid Rust-regex matcher when present', () => {
const { config } = parseCodexConfig({ PreToolUse: [{ matcher: '(?i)^bash$', hooks: [{ type: 'command', command: 'b.sh' }] }] })
expect(config.PreToolUse![0]!.matcher).toBe('(?i)^bash$')
})
it('rejects an invalid regex matcher with its event name', () => {
@@ -72,6 +72,12 @@ describe('parseCodexConfig', () => {
})).toThrow('invalid codex regex matcher "[" on event "PreToolUse"')
})
it('rejects JavaScript-only regex syntax that Codex cannot execute', () => {
expect(() => parseCodexConfig({
PreToolUse: [{ matcher: '(?=Bash)', hooks: [{ type: 'command', command: 's.sh' }] }],
})).toThrow('invalid codex regex matcher "(?=Bash)" on event "PreToolUse"')
})
it('discards matcher fields on events without matcher subjects before validation', () => {
const { config } = parseCodexConfig({
UserPromptSubmit: [{ matcher: '[', hooks: [{ type: 'command', command: 'prompt.sh' }] }],