Add prepared request preview
This commit is contained in:
@@ -7,7 +7,7 @@ import (
|
||||
commandkit "go.maximumdirect.net/commandkit"
|
||||
)
|
||||
|
||||
type validationCommandInput[I any] struct {
|
||||
type concreteRequestInput[I any] struct {
|
||||
promptID string
|
||||
request ValidationRequest
|
||||
execution ExecutionInput
|
||||
@@ -22,8 +22,8 @@ type requestValidationReport struct {
|
||||
Valid bool `json:"valid"`
|
||||
}
|
||||
|
||||
func newValidationCommand[I, S any](suite Suite[I, S]) commandkit.Command {
|
||||
flags := commandkit.CaptureFlags(suite.Selectors, func(input **validationCommandInput[I]) *commandkit.FlagValues[I] {
|
||||
func newConcreteRequestSpec[I, S any](suite Suite[I, S]) commandkit.CommandSpec[*concreteRequestInput[I]] {
|
||||
flags := commandkit.CaptureFlags(suite.Selectors, func(input **concreteRequestInput[I]) *commandkit.FlagValues[I] {
|
||||
if input == nil || *input == nil {
|
||||
return nil
|
||||
}
|
||||
@@ -31,38 +31,36 @@ func newValidationCommand[I, S any](suite Suite[I, S]) commandkit.Command {
|
||||
})
|
||||
flags = append(flags,
|
||||
commandkit.ValueFlag(commandkit.FlagMeta{Name: "config", Usage: "Configuration input path.", Completion: commandkit.CompleteFiles()}, (*string)(nil), parseDefinitionString,
|
||||
func(input **validationCommandInput[I], value commandkit.Supplied[string]) {
|
||||
func(input **concreteRequestInput[I], value commandkit.Supplied[string]) {
|
||||
(*input).request.Selection.Config = value
|
||||
}),
|
||||
commandkit.ValueFlag(commandkit.FlagMeta{Name: "overlay", Usage: "Configuration overlay path.", Completion: commandkit.CompleteFiles()}, (*string)(nil), parseDefinitionString,
|
||||
func(input **validationCommandInput[I], value commandkit.Supplied[string]) {
|
||||
func(input **concreteRequestInput[I], value commandkit.Supplied[string]) {
|
||||
(*input).request.Selection.Overlay = value
|
||||
}),
|
||||
)
|
||||
|
||||
resources := NewResourceFlags(func(input **validationCommandInput[I]) *ResourceInput { return &(*input).resources })
|
||||
execution := NewExecutionFlags(func(input **validationCommandInput[I]) *ExecutionInput { return &(*input).execution })
|
||||
inputs := NewPromptInputFlags(func(input **validationCommandInput[I]) *PromptInputs { return &(*input).inputs })
|
||||
resources := NewResourceFlags(func(input **concreteRequestInput[I]) *ResourceInput { return &(*input).resources })
|
||||
execution := NewExecutionFlags(func(input **concreteRequestInput[I]) *ExecutionInput { return &(*input).execution })
|
||||
inputs := NewPromptInputFlags(func(input **concreteRequestInput[I]) *PromptInputs { return &(*input).inputs })
|
||||
flags = append(flags, resources.Profile, resources.SessionID, inputs.Variable, inputs.Text, inputs.File)
|
||||
flags = append(flags, execution.All()...)
|
||||
|
||||
return commandkit.NewCommand(commandkit.CommandSpec[*validationCommandInput[I]]{
|
||||
Name: "validate",
|
||||
Summary: "Validate a concrete PromptKit request without executing it.",
|
||||
NewInput: func() *validationCommandInput[I] {
|
||||
return &validationCommandInput[I]{}
|
||||
return commandkit.CommandSpec[*concreteRequestInput[I]]{
|
||||
NewInput: func() *concreteRequestInput[I] {
|
||||
return &concreteRequestInput[I]{}
|
||||
},
|
||||
Flags: flags,
|
||||
Arguments: []commandkit.Argument[*validationCommandInput[I]]{
|
||||
Arguments: []commandkit.Argument[*concreteRequestInput[I]]{
|
||||
commandkit.ValueArgument(commandkit.ArgumentMeta{Name: "id", Usage: "Prompt ID."}, true, parseDefinitionString,
|
||||
func(input **validationCommandInput[I], value commandkit.Supplied[string]) {
|
||||
func(input **concreteRequestInput[I], value commandkit.Supplied[string]) {
|
||||
(*input).promptID = value.Value
|
||||
(*input).request.Request.PromptID = value.Value
|
||||
}),
|
||||
},
|
||||
CheckInput: func(input *validationCommandInput[I]) error {
|
||||
CheckInput: func(input *concreteRequestInput[I]) error {
|
||||
if input == nil {
|
||||
return errors.New("PromptKit validation input must not be nil")
|
||||
return errors.New("PromptKit request input must not be nil")
|
||||
}
|
||||
input.request.Request.ProfileID = input.resources.Profile.Value
|
||||
input.request.Request.SessionID = input.resources.SessionID.Value
|
||||
@@ -77,13 +75,20 @@ func newValidationCommand[I, S any](suite Suite[I, S]) commandkit.Command {
|
||||
input.selected = selected
|
||||
return nil
|
||||
},
|
||||
Run: func(invocation commandkit.Invocation, input *validationCommandInput[I]) commandkit.Outcome {
|
||||
return runRequestValidation(invocation, suite, input)
|
||||
},
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func runRequestValidation[I, S any](invocation commandkit.Invocation, suite Suite[I, S], input *validationCommandInput[I]) commandkit.Outcome {
|
||||
func newValidationCommand[I, S any](suite Suite[I, S]) commandkit.Command {
|
||||
spec := newConcreteRequestSpec(suite)
|
||||
spec.Name = "validate"
|
||||
spec.Summary = "Validate a concrete PromptKit request without executing it."
|
||||
spec.Run = func(invocation commandkit.Invocation, input *concreteRequestInput[I]) commandkit.Outcome {
|
||||
return runRequestValidation(invocation, suite, input)
|
||||
}
|
||||
return commandkit.NewCommand(spec)
|
||||
}
|
||||
|
||||
func runRequestValidation[I, S any](invocation commandkit.Invocation, suite Suite[I, S], input *concreteRequestInput[I]) commandkit.Outcome {
|
||||
if err := promptKitContextError(invocation.Context); err != nil {
|
||||
return definitionFailure("PromptKit request validation was canceled.", commandkit.Explanation{}, err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user