Reverts pass-through from the previous commit. Copilot supports a model
field but expects display names ("Claude Opus 4.5"), not Claude model IDs
or bare aliases. Unlike Droid (which natively resolves "sonnet"), Copilot
has no documented resolution for Claude-specific values. Emitting an
unrecognized value is worse than omitting the field (which falls back to
the platform default).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The Copilot spec documents model as a supported frontmatter field
(docs/specs/copilot.md). Dropping it silently removes user intent
when they explicitly set a model. Restore pass-through to preserve
the source agent's model choice.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Each target platform expects a different format for the model frontmatter
field, but converters handled this inconsistently — some passed through
raw values, others had duplicated normalization with wrong aliases.
Extracts shared utilities into src/utils/model.ts (CLAUDE_FAMILY_ALIASES,
normalizeModelWithProvider, addProviderPrefix) and applies per-target
behavior based on external research:
- OpenCode/Qwen/OpenClaw: resolve aliases + provider prefix
- Droid: pass-through (Factory natively resolves bare aliases)
- Copilot: drop (uncertain display-name format)
- Codex: drop (skill frontmatter doesn't support model)
Fixes Qwen's wrong alias mapping (claude-sonnet → claude-sonnet-4-6)
and adds test coverage for all target model behaviors.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>