diff --git a/crates/manifest/src/profile.rs b/crates/manifest/src/profile.rs index 729a78b8..308cbaad 100644 --- a/crates/manifest/src/profile.rs +++ b/crates/manifest/src/profile.rs @@ -999,7 +999,8 @@ fn apply_role_profile( value["feature"]["memory"] = serde_json::json!({ "enabled": memory }); value["feature"]["web"] = serde_json::json!({ "enabled": web }); value["feature"]["sub_worker"] = serde_json::json!({ "enabled": sub_worker }); - value["feature"]["worker"] = serde_json::json!({ "enabled": slug == "orchestrator" }); + value["feature"]["worker"] = + serde_json::json!({ "enabled": matches!(slug, "companion" | "orchestrator") }); value["feature"]["manage_workdir"] = serde_json::json!({ "enabled": slug == "orchestrator" }); let ticket = match slug { "companion" => serde_json::json!({ "enabled": true, "authoring": true, "thread": true }), @@ -1459,7 +1460,7 @@ mod tests { let companion = resolve("companion"); assert!(companion.feature.task.enabled); assert!(companion.feature.sub_worker.enabled); - assert!(!companion.feature.worker.enabled); + assert!(companion.feature.worker.enabled); assert!(companion.scope.allow.is_empty()); assert!(companion.scope.deny.is_empty()); assert!(companion.delegation_scope.allow.is_empty()); diff --git a/crates/workspace-server/src/hosts.rs b/crates/workspace-server/src/hosts.rs index 582d65dd..86669e35 100644 --- a/crates/workspace-server/src/hosts.rs +++ b/crates/workspace-server/src/hosts.rs @@ -3988,6 +3988,23 @@ mod tests { assert!(manifest.feature.worker.enabled); } + #[test] + fn embedded_companion_profile_enables_worker_management() { + let root = tempfile::tempdir().unwrap(); + let selector = ProfileSelector::Builtin("builtin:companion".to_string()); + let archive = builtin_profile_source_archive(&selector) + .unwrap() + .verify() + .unwrap(); + let manifest = archive + .resolve_profile("builtin:companion", root.path(), "companion-test-worker") + .unwrap(); + + assert!(manifest.feature.worker.enabled); + assert!(manifest.feature.sub_worker.enabled); + assert!(!manifest.feature.manage_workdir.enabled); + } + #[test] fn embedded_builtin_decodal_profiles_resolve_through_archive() { let root = tempfile::tempdir().unwrap(); @@ -4033,7 +4050,10 @@ mod tests { .resolve_profile(&selector_key, root.path(), "embedded-test-worker") .unwrap(); assert_eq!(manifest.worker.name, "embedded-test-worker"); - assert_eq!(manifest.model.ref_.as_deref(), Some("codex-oauth/gpt-5.5")); + assert_eq!( + manifest.model.ref_.as_deref(), + Some("codex-oauth/gpt-5.6-sol") + ); if selector_key == "builtin:memory-consolidation" { assert!(manifest.feature.memory.enabled); assert!(manifest.feature.memory.staging); diff --git a/resources/profiles/companion.dcdl b/resources/profiles/companion.dcdl index 150db6a0..e17d7b6a 100644 --- a/resources/profiles/companion.dcdl +++ b/resources/profiles/companion.dcdl @@ -8,7 +8,7 @@ import "./base.dcdl" // { memory = { enabled = true; }; web = { enabled = true; }; sub_worker = { enabled = true; }; - worker = { enabled = false; }; + worker = { enabled = true; }; ticket = { enabled = true; authoring = true; thread = true; }; }; }