feat(#2088): migrate Codex onto the Embeddable Orchestration System (ADR-1239)
Drive Codex install/uninstall through the descriptor-driven Host-Integration Interface (declarative embedding adapter → engine surface dispatch) and fold every positive `runtime === 'codex'` / `isCodex` projection into descriptor-driven `runtime.hostBehaviors`. Install/uninstall output stays byte-parity-gated (tests/fixtures/golden-install-parity/codex.json); no other runtime changes. Three Context7-verified upgrades, each with a test on the user-reachable surface: - Skill root → canonical $HOME/.agents/skills via a skills-kind `home` override, with pre-move migration cleanup (stale ~/.codex/skills/gsd-* removed on install and uninstall; user content preserved). Fixes getGlobalSkillsBase, writeManifest, and the skill-manifest inventory to honor the override so --skills-root / sync-skills / the manifest report the real location. - Six new hooks.json lifecycle events (PreToolUse, PermissionRequest, PreCompact, PostCompact, SubagentStop, UserPromptSubmit) shared by install + uninstall; extendedHookEvents reconciled [] -> the schema-valid wired subset. - Explicit `[agents] max_depth = 1` in the managed config.toml block, pinning the negotiated dispatch.maxDepth:1 axis. validateCodexConfigSchema now permits a known-scalar-only bare `[agents]` AgentsToml table (still rejects [[agents]] and unknown-key break-forms, #2760); mergeCodexConfig preserves the user's own AgentsToml scalars (max_threads etc.) instead of dropping them. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -118,6 +118,9 @@ type ConfigHomeDescriptor =
|
||||
interface RuntimeArtifactKindDescriptor {
|
||||
kind: string;
|
||||
destSubpath: string;
|
||||
// ADR-1239 upgrade 3 (#2088): optional split-home override (relative to
|
||||
// os.homedir()), e.g. Codex skills → ".agents". Absent for most runtimes.
|
||||
home?: string;
|
||||
}
|
||||
|
||||
interface RuntimeDescriptor {
|
||||
@@ -416,6 +419,14 @@ export function getGlobalSkillsBase(runtime: string): string | null {
|
||||
const runtimeEntry = getRegistry().runtimes[runtime];
|
||||
const descriptor = runtimeEntry?.runtime;
|
||||
const globalSkillsKind = descriptor?.artifactLayout?.global?.find((entry) => entry.kind === 'skills');
|
||||
// ADR-1239 upgrade 3 (#2088): honor a skills-kind `home` override (e.g. Codex
|
||||
// → $HOME/.agents/skills, independent of $CODEX_HOME) so the reported skills
|
||||
// root matches where the installer actually writes (the artifact layout /
|
||||
// _resolveSkillsRootDir). Without this, `--skills-root` and the sync-skills
|
||||
// workflow would look under configHome/skills while skills live under ~/.agents.
|
||||
if (globalSkillsKind?.home && globalSkillsKind?.destSubpath) {
|
||||
return path.join(os.homedir(), globalSkillsKind.home, globalSkillsKind.destSubpath);
|
||||
}
|
||||
if (descriptor?.configHome && globalSkillsKind?.destSubpath) {
|
||||
return resolveSkillsBaseFromDescriptor(
|
||||
descriptor.configHome,
|
||||
|
||||
Reference in New Issue
Block a user