fix: restore Grep and Glob reliability on OpenAI paths (#461)
* fix: restore Grep and Glob reliability on OpenAI paths Preserve Grep and Glob pattern fields during OpenAI/Codex schema sanitization, and fall back to system ripgrep when the packaged binary is missing. This keeps search tool schemas intact and improves Linux usability for npm/source installs. Co-Authored-By: Claude Opus 4.6 <noreply@openclaude.dev> * test: clean up ripgrep fallback test helpers Remove the unused ripgrepCommand import and normalize mocked builtin ripgrep paths so the test behaves consistently across platforms. Co-Authored-By: Claude Opus 4.6 <noreply@openclaude.dev> * test: remove duplicate Codex URI schema case Drop the duplicated WebFetch URI-format test in codexShim.test.ts so test names stay unique and failures remain easier to read. Co-Authored-By: Claude Opus 4.6 <noreply@openclaude.dev> * test: stabilize ripgrep fallback coverage Avoid fs/module mocking in ripgrep fallback tests by extracting the config selection logic into a pure helper. This preserves the fallback coverage while removing the test interaction that caused the narrowed Bun hang repro. Co-Authored-By: Claude Opus 4.6 <noreply@openclaude.dev> * test: tighten ripgrep and schema coverage Align the ripgrep fallback test with the actual auto-fallback branch, clean up strict typing in schema sanitizer tests, and tighten ripgrep error narrowing for type safety. Co-Authored-By: Claude Opus 4.6 <noreply@openclaude.dev> --------- Co-authored-by: Claude Opus 4.6 <noreply@openclaude.dev>
This commit is contained in:
@@ -33,6 +33,15 @@ function stripSchemaKeywords(schema: unknown, keywords: Set<string>): unknown {
|
||||
|
||||
const result: Record<string, unknown> = {}
|
||||
for (const [key, value] of Object.entries(schema)) {
|
||||
if (key === 'properties' && isSchemaRecord(value)) {
|
||||
const sanitizedProps: Record<string, unknown> = {}
|
||||
for (const [propName, propSchema] of Object.entries(value)) {
|
||||
sanitizedProps[propName] = stripSchemaKeywords(propSchema, keywords)
|
||||
}
|
||||
result[key] = sanitizedProps
|
||||
continue
|
||||
}
|
||||
|
||||
if (keywords.has(key)) {
|
||||
continue
|
||||
}
|
||||
@@ -215,10 +224,13 @@ export function sanitizeSchemaForOpenAICompat(
|
||||
}
|
||||
}
|
||||
|
||||
if (Array.isArray(record.required) && isSchemaRecord(record.properties)) {
|
||||
const properties = isSchemaRecord(record.properties)
|
||||
? record.properties
|
||||
: undefined
|
||||
|
||||
if (Array.isArray(record.required) && properties) {
|
||||
record.required = record.required.filter(
|
||||
(value): value is string =>
|
||||
typeof value === 'string' && value in record.properties,
|
||||
(value): value is string => typeof value === 'string' && value in properties,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user