Select inventory namespaces before copying

This commit is contained in:
2026-11-05 14:11:41 +00:00
parent 7c435032b6
commit dbba1485a7
4 changed files with 151 additions and 97 deletions

View File

@@ -98,9 +98,9 @@ type resourceNamespaces struct {
}
type identityInventory interface {
ListBackends(context.Context) ([]string, error)
ListProfiles(context.Context) ([]string, error)
ListPrompts(context.Context) ([]domain.PromptIdentity, error)
ListBackends(context.Context, configuration.IdentityFilter) ([]string, error)
ListProfiles(context.Context, configuration.IdentityFilter) ([]string, error)
ListPrompts(context.Context, configuration.IdentityFilter) ([]domain.PromptIdentity, error)
ListNamespaces(context.Context, []string) ([]string, error)
ListCollections(context.Context) ([]configuration.CollectionIdentity, error)
}
@@ -268,24 +268,11 @@ func (e *Engine) ListProfiles(ctx context.Context, filters ...ListingFilter) ([]
}
func (e *Engine) ListPrompts(ctx context.Context, filters ...ListingFilter) ([]domain.PromptIdentity, error) {
mode, namespace, err := resolveListingFilter(filters, e.namespaces.prompt)
filter, err := inventoryFilter(filters, e.namespaces.prompt)
if err != nil {
return nil, err
}
prompts, err := e.listing.ListPrompts(ctx)
if err != nil {
return nil, err
}
var filtered []domain.PromptIdentity
for _, prompt := range prompts {
if matchesListingNamespace(prompt.ID, mode, namespace) {
filtered = append(filtered, prompt)
}
}
if err := ctx.Err(); err != nil {
return nil, err
}
return filtered, nil
return e.listing.ListPrompts(ctx, filter)
}
func (e *Engine) ListNamespaces(ctx context.Context, kinds []string) ([]string, error) {
@@ -307,26 +294,21 @@ func filterIdentityList(
ctx context.Context,
filters []ListingFilter,
scope string,
list func(context.Context) ([]string, error),
list func(context.Context, configuration.IdentityFilter) ([]string, error),
) ([]string, error) {
filter, err := inventoryFilter(filters, scope)
if err != nil {
return nil, err
}
return list(ctx, filter)
}
func inventoryFilter(filters []ListingFilter, scope string) (configuration.IdentityFilter, error) {
mode, namespace, err := resolveListingFilter(filters, scope)
if err != nil {
return nil, err
return configuration.IdentityFilter{}, err
}
ids, err := list(ctx)
if err != nil {
return nil, err
}
var filtered []string
for _, id := range ids {
if matchesListingNamespace(id, mode, namespace) {
filtered = append(filtered, id)
}
}
if err := ctx.Err(); err != nil {
return nil, err
}
return filtered, nil
return configuration.IdentityFilter{All: mode == ListingAll, Namespace: namespace}, nil
}
func resolveListingFilter(filters []ListingFilter, scope string) (ListingFilterMode, string, error) {
@@ -355,19 +337,6 @@ func resolveListingFilter(filters []ListingFilter, scope string) (ListingFilterM
}
}
func matchesListingNamespace(id string, mode ListingFilterMode, namespace string) bool {
switch mode {
case ListingNamed:
idNamespace, _, qualified := strings.Cut(id, "/")
return qualified && idNamespace == namespace
case ListingUnqualified:
return !strings.Contains(id, "/")
case ListingAll:
return true
default:
return false
}
}
func (e *Engine) Prepare(ctx context.Context, request domain.RunRequest) (*domain.PreparedRun, error) {
request, err := e.qualifyRunRequest(request)
if err != nil {