User Story
As a farm operator, I want provider_profile_sources to be the only catalog the gateway uses — including sandbox create — so I can turn off compiled-in builtins and replace stock ids (github, nvidia, aws-bedrock, …) with our own profiles, which may be more strict.
Problem Statement
provider_profile_sources is documented as the exact ordered source set. Omitting { type = "builtin" } is supposed to make the remaining catalog authoritative.
That is only true for some RPCs. openshell provider list-profiles, import, and delete use state.provider_profile_sources from gateway.toml. CreateSandbox does not. It snapshots the catalog with ProviderProfileSources::with_default_sources(), which is always builtin + user.
Builtins are compiled into the gateway (builtin_profiles()), not DB rows. openshell provider profile delete github is rejected (managed by source 'builtin'). YAML under /etc/openshell/providers is not a source until --global import. There is no way to disable or replace a builtin id.
Impact / Why This Matters
We cannot run an operator-owned catalog. A user-only gateway.toml hides builtins in list-profiles and lets us import farm copies of those ids, then every sandbox create fails while merging builtin + user:
duplicate provider profile id 'aws-bedrock' across configured sources 'builtin' and 'user'
That fires on catalog snapshot, even if the sandbox does not attach the colliding type. We had to drop farm profiles that reused builtin ids and put { type = "builtin" } back, so we cannot ship a stricter github (or drop types we do not want on the farm).
Acceptance Criteria
- With
provider_profile_sources = [{ type = "user" }], CreateSandbox (and provider attach) uses that catalog, not hardcoded builtin + user. - Importing id: github as a user profile succeeds, and sandbox create does not report a builtin/user duplicate.
openshell provider list-profiles and sandbox create show the same set of profile ids.- Builtins stay unavailable for --type until
{ type = "builtin" } is listed again. - Existing builtin + user deployments keep current behavior when that is still the configured source list.
Reproduction Steps
Run OpenShell 0.0.110 with:
[openshell.gateway]
provider_profile_sources = [
{ type = "user" },
]
- Confirm
openshell provider list-profiles does not list github / aws-bedrock. openshell provider profile import --global --from … a profile whose id is aws-bedrock (or github). Import succeeds.openshell sandbox create -- bash (no --provider required).
Environment
- OpenShell 0.0.110
- Rocky Linux 9 gateway (Vagrant), Docker compute
providers_v2_enabled=true- Farm catalog imported
--global as user profiles gateway.toml tried as user-only, then reverted to builtin + user as a workaround
Logs
provider profile id 'aws-bedrock' across configured sources 'builtin' and 'user'
profile 'github' is managed by source'builtin' and cannot be deleted
User Story
As a farm operator, I want
provider_profile_sourcesto be the only catalog the gateway uses — includingsandbox create— so I can turn off compiled-in builtins and replace stock ids (github, nvidia, aws-bedrock, …) with our own profiles, which may be more strict.Problem Statement
provider_profile_sourcesis documented as the exact ordered source set. Omitting{ type = "builtin" }is supposed to make the remaining catalog authoritative.That is only true for some RPCs.
openshell provider list-profiles,import, anddeleteusestate.provider_profile_sourcesfromgateway.toml.CreateSandboxdoes not. It snapshots the catalog withProviderProfileSources::with_default_sources(), which is always builtin + user.Builtins are compiled into the gateway (
builtin_profiles()), not DB rows.openshell provider profile delete githubis rejected (managed by source 'builtin'). YAML under/etc/openshell/providersis not a source until--globalimport. There is no way to disable or replace a builtin id.Impact / Why This Matters
We cannot run an operator-owned catalog. A user-only
gateway.tomlhides builtins inlist-profilesand lets us import farm copies of those ids, then every sandbox create fails while merging builtin + user:duplicate provider profile id 'aws-bedrock' across configured sources 'builtin' and 'user'That fires on catalog snapshot, even if the sandbox does not attach the colliding type. We had to drop farm profiles that reused builtin ids and put
{ type = "builtin" }back, so we cannot ship a stricter github (or drop types we do not want on the farm).Acceptance Criteria
provider_profile_sources = [{ type = "user" }],CreateSandbox(andprovider attach) uses that catalog, not hardcoded builtin + user.openshell provider list-profilesand sandbox create show the same set of profile ids.{ type = "builtin" }is listed again.Reproduction Steps
Run OpenShell 0.0.110 with:
openshell provider list-profilesdoes not list github / aws-bedrock.openshell provider profile import --global --from …a profile whose id is aws-bedrock (or github). Import succeeds.openshell sandbox create -- bash(no--providerrequired).Environment
providers_v2_enabled=true--globalas user profilesgateway.tomltried as user-only, then reverted to builtin + user as a workaroundLogs