Use PathUri for skill identity and path matching (#51482)

## Why

Skill selection and disabled-path matching need to recognize equivalent Windows paths across case and separator differences while preserving literal spaces, `%`, and `#` in native filenames.

## What changed

- Carry `PathUri` through skill metadata, discovery mappings, filesystem lookups, disabled-path sets, and invocation analytics.
- Match linked skill mentions and TUI selections by parsed path identity.
- Use `LegacyAppPathString` for app-server skill paths and regenerate schemas and SDK types, preserving native path strings on the wire.
- Preserve native catalog display paths and ordering. Keep host filesystem probes and configuration writes restricted to host-compatible paths.

## Testing

Add regression tests for Windows path identity and disabled-skill matching, literal filename characters, catalog resource reads, native path ordering, and foreign-path analytics normalization.

GitOrigin-RevId: c212916dc9fef0e7616542726e107f0d6a313267
This commit is contained in:
Adam Perry @ OpenAI
2026-10-06 21:29:35 +00:00
committed by copyberry
parent e79c498b5e
commit c9870d0157
66 changed files with 644 additions and 290 deletions
@@ -4906,7 +4906,7 @@ class SkillSummary(BaseModel):
enabled: bool
interface: SkillInterface | None = None
name: str
path: AbsolutePathBuf | None = None
path: LegacyAppPathString | None = None
short_description: Annotated[str | None, Field(alias="shortDescription")] = None
@@ -9794,7 +9794,7 @@ class SkillMetadata(BaseModel):
enabled: bool
interface: SkillInterface | None = None
name: str
path: AbsolutePathBuf
path: LegacyAppPathString
plugin_id: Annotated[
str | None,
Field(