Apply namespace scopes to inspections and diagnostics
This commit is contained in:
@@ -153,7 +153,9 @@ func New(cfg Config, options Options) (*Engine, error) {
|
||||
}
|
||||
|
||||
// WithNamespaces returns an immutable view sharing this engine's assembled
|
||||
// collaborators and configuration snapshot.
|
||||
// collaborators and configuration snapshot. Caller-supplied selection IDs are
|
||||
// qualified at each operation boundary; captured configuration references are
|
||||
// not rewritten.
|
||||
func (e *Engine) WithNamespaces(prompt, profile, backend string) *Engine {
|
||||
view := *e
|
||||
view.namespaces = resourceNamespaces{prompt: prompt, profile: profile, backend: backend}
|
||||
@@ -198,15 +200,34 @@ func fileSource(name string) (fs.FS, string, string, error) {
|
||||
}
|
||||
|
||||
func (e *Engine) InspectPrompt(ctx context.Context, id string) (*domain.PromptInspection, error) {
|
||||
var err error
|
||||
id, err = e.qualifyResourceID(id, e.namespaces.prompt, "prompt")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return e.runner.InspectPrompt(ctx, id)
|
||||
}
|
||||
func (e *Engine) InspectRequirements(
|
||||
ctx context.Context,
|
||||
request usecase.RequirementInspectionRequest,
|
||||
) (*domain.RequirementInspection, error) {
|
||||
var err error
|
||||
request.PromptID, err = e.qualifyResourceID(request.PromptID, e.namespaces.prompt, "prompt")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
request.ProfileID, err = e.qualifyResourceID(request.ProfileID, e.namespaces.profile, "profile")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return e.runner.InspectRequirements(ctx, request)
|
||||
}
|
||||
func (e *Engine) InspectProfile(ctx context.Context, id string) (*domain.ProfileInspection, error) {
|
||||
var err error
|
||||
id, err = e.qualifyResourceID(id, e.namespaces.profile, "profile")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return e.runner.InspectProfile(ctx, id)
|
||||
}
|
||||
|
||||
@@ -240,21 +261,29 @@ func (e *Engine) Run(ctx context.Context, request domain.RunRequest) (*domain.Ru
|
||||
}
|
||||
|
||||
func (e *Engine) qualifyRunRequest(request domain.RunRequest) (domain.RunRequest, error) {
|
||||
var ok bool
|
||||
if request.PromptID != "" {
|
||||
request.PromptID, ok = domain.QualifyResourceID(request.PromptID, e.namespaces.prompt)
|
||||
if !ok {
|
||||
return domain.RunRequest{}, fmt.Errorf("%w: invalid prompt ID", usecase.ErrInvalidRequest)
|
||||
}
|
||||
var err error
|
||||
request.PromptID, err = e.qualifyResourceID(request.PromptID, e.namespaces.prompt, "prompt")
|
||||
if err != nil {
|
||||
return domain.RunRequest{}, err
|
||||
}
|
||||
if request.ProfileID != "" {
|
||||
request.ProfileID, ok = domain.QualifyResourceID(request.ProfileID, e.namespaces.profile)
|
||||
if !ok {
|
||||
return domain.RunRequest{}, fmt.Errorf("%w: invalid profile ID", usecase.ErrInvalidRequest)
|
||||
}
|
||||
request.ProfileID, err = e.qualifyResourceID(request.ProfileID, e.namespaces.profile, "profile")
|
||||
if err != nil {
|
||||
return domain.RunRequest{}, err
|
||||
}
|
||||
return request, nil
|
||||
}
|
||||
|
||||
func (e *Engine) qualifyResourceID(id, namespace, kind string) (string, error) {
|
||||
if id == "" {
|
||||
return "", nil
|
||||
}
|
||||
qualified, ok := domain.QualifyResourceID(id, namespace)
|
||||
if !ok {
|
||||
return "", fmt.Errorf("%w: invalid %s ID", usecase.ErrInvalidRequest, kind)
|
||||
}
|
||||
return qualified, nil
|
||||
}
|
||||
|
||||
func (e *Engine) RunPrepared(ctx context.Context, prepared *usecase.PreparedExecution) (*domain.RunResult, error) {
|
||||
return e.runner.RunPrepared(ctx, prepared)
|
||||
}
|
||||
@@ -263,5 +292,18 @@ func (e *Engine) SmokeTest(ctx context.Context, request domain.SmokeTestRequest)
|
||||
if e == nil || e.smokeTester == nil {
|
||||
return nil, fmt.Errorf("%w: smoke tester is not configured", usecase.ErrInvalidRequest)
|
||||
}
|
||||
var err error
|
||||
request.PromptID, err = e.qualifyResourceID(request.PromptID, e.namespaces.prompt, "prompt")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
request.ProfileID, err = e.qualifyResourceID(request.ProfileID, e.namespaces.profile, "profile")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
request.BackendID, err = e.qualifyResourceID(request.BackendID, e.namespaces.backend, "backend")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return e.smokeTester.Run(ctx, request)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user