Documentation
¶
Overview ¶
Package packapi defines and compiles AgentAPI Doctor's declarative Scenario and ProtocolPack authoring contracts.
Authored YAML is data, never executable code. Compilation is offline and deterministic: strict YAML and JSON Schema validation, semantic and source linkage checks, fixture resolution, restricted CEL type/cost checking, then RFC 8785 canonical JSON and SHA-256 identity.
Index ¶
- Constants
- func ExpandTemplateString(template string, values map[string]string) (string, error)
- func IsCompileStage(err error, stage CompileStage) bool
- type AssertStep
- type Assertion
- type AssertionRole
- type ByteSize
- type CELBinding
- type CancelStep
- type CapabilityRequirement
- type CaptureStep
- type Classification
- type CleanupBudget
- type CompileError
- type CompileOptions
- type CompileStage
- type CompiledCEL
- type CompiledPack
- type CompiledScenario
- type CompilerIdentity
- type ConformanceSuite
- type ControlledBackend
- type EngineCompatibility
- type FinalizeStep
- type FixturePin
- type InvokeStep
- type PackBudget
- type PackCompileOptions
- type PackIR
- type PackMetadata
- type PackSpec
- type PackSpecIR
- type ProtocolBinding
- type ProtocolPack
- type ProtocolSnapshotRef
- type ProvideToolResultStep
- type PublicationPolicy
- type RegisterResourceStep
- type RepetitionPolicy
- type ReplayStep
- type RequirementLevel
- type RequirementLink
- type RequirementRecord
- type RequirementRef
- type ResourceFinalizer
- type ResourceLease
- type RetryPolicy
- type Scenario
- type ScenarioBudget
- type ScenarioClass
- type ScenarioIR
- type ScenarioMetadata
- type ScenarioPin
- type ScenarioSelection
- type ScenarioSpec
- type SideEffectClass
- type SigningExpectation
- type Stability
- type Step
- type TemplateBinding
- type WaitForStep
Constants ¶
const ( ScenarioAPIVersion = "urn:agentapi-doctor:scenario:v1beta1" ScenarioKind = "Scenario" PackAPIVersion = "urn:agentapi-doctor:pack:v1" PackKind = "ProtocolPack" CompilerName = "agentapi-doctor-pack-compiler" CompilerSemanticVersion = "0.1.0" DefaultMaxCELCost uint64 = 1000 AbsoluteMaxCELCost uint64 = 10000 )
const (
MaxAuthoredYAMLBytes = 4 << 20
)
const MaxExpandedTemplateBytes = 1 << 20
Variables ¶
This section is empty.
Functions ¶
func ExpandTemplateString ¶
ExpandTemplateString performs literal substitution from an explicit value map. It does not evaluate expressions, recurse into replacement values, read environment variables, or access files/network. Compilation must already have admitted each variable through CompileOptions.AllowedVariables.
func IsCompileStage ¶
func IsCompileStage(err error, stage CompileStage) bool
Types ¶
type AssertStep ¶
type AssertStep []Assertion
type Assertion ¶
type Assertion struct {
Use string `json:"use,omitempty"`
Expression string `json:"expression,omitempty"`
Equals json.RawMessage `json:"equals,omitempty"`
AssertionRole AssertionRole `json:"assertionRole"`
ObservedAt string `json:"observedAt,omitempty"`
Requirement string `json:"requirement,omitempty"`
}
type AssertionRole ¶
type AssertionRole string
const ( RolePrecondition AssertionRole = "precondition" RoleNormative AssertionRole = "normative" RoleConsumerProfile AssertionRole = "consumer_profile" RoleBehavioral AssertionRole = "behavioral" RoleAdvisory AssertionRole = "advisory" )
type ByteSize ¶
type ByteSize int64
ByteSize is a positive binary byte count authored as a canonical value such as 16MiB. Canonical IR serializes it as an integer.
func (ByteSize) MarshalJSON ¶
func (*ByteSize) UnmarshalJSON ¶
type CELBinding ¶
type CELBinding struct {
StepID string `json:"step_id"`
AssertionIndex *int `json:"assertion_index,omitempty"`
Purpose string `json:"purpose"`
Compiled CompiledCEL `json:"compiled"`
}
type CancelStep ¶
type CapabilityRequirement ¶
type CaptureStep ¶
type Classification ¶
type Classification struct {
Type ScenarioClass `json:"type"`
Stability Stability `json:"stability"`
SideEffects SideEffectClass `json:"sideEffects"`
Idempotent *bool `json:"idempotent"`
}
type CleanupBudget ¶
type CleanupBudget struct {
Requests int64 `json:"requests"`
Duration publicschema.Duration `json:"duration"`
}
type CompileError ¶
type CompileError struct {
Stage CompileStage
Path string
Err error
}
CompileError identifies the failed deterministic compiler stage.
func (*CompileError) Error ¶
func (compileError *CompileError) Error() string
func (*CompileError) Unwrap ¶
func (compileError *CompileError) Unwrap() error
type CompileOptions ¶
type CompileOptions struct {
Requirements map[string]RequirementRecord
Fixtures map[string]publicschema.Digest
AllowedVariables map[string]struct{}
MaxCELCost uint64
}
type CompileStage ¶
type CompileStage string
const ( StageParse CompileStage = "parse" StageSchema CompileStage = "schema" StageSemantic CompileStage = "semantic" StageRequirement CompileStage = "requirement" StageFixture CompileStage = "fixture" StageCEL CompileStage = "cel" StageCanonical CompileStage = "canonical" )
type CompiledCEL ¶
type CompiledCEL struct {
Source string `json:"source"`
EstimatedCost uint64 `json:"estimated_cost"`
}
CompiledCEL records the deterministic, public part of a checked CEL expression. Runtime programs are deliberately not serialized into pack IR.
type CompiledPack ¶
type CompiledPack struct {
Authored ProtocolPack
IR PackIR
CanonicalJSON []byte
Digest publicschema.Digest
}
func CompileProtocolPackYAML ¶
func CompileProtocolPackYAML(raw []byte, options PackCompileOptions) (*CompiledPack, error)
CompileProtocolPackYAML resolves a pack snapshot and scenario selection to exact digests before producing the immutable Pack IR.
type CompiledScenario ¶
type CompiledScenario struct {
Authored Scenario
IR ScenarioIR
CanonicalJSON []byte
Digest publicschema.Digest
}
CompiledScenario owns a canonical immutable projection and digest.
func CompileScenarioYAML ¶
func CompileScenarioYAML(raw []byte, options CompileOptions) (*CompiledScenario, error)
CompileScenarioYAML compiles one authored Scenario without filesystem, network, environment, or credential access. All requirement and fixture facts are supplied explicitly in options.
type CompilerIdentity ¶
type ConformanceSuite ¶
type ConformanceSuite struct {
Requirements []string `json:"requirements"`
}
type ControlledBackend ¶
type ControlledBackend struct {
Fixture string `json:"fixture"`
}
type EngineCompatibility ¶
type FinalizeStep ¶
type FinalizeStep struct {
Finalize string `json:"finalize"`
}
type FixturePin ¶
type FixturePin struct {
Ref string `json:"ref"`
Digest publicschema.Digest `json:"digest"`
}
type InvokeStep ¶
type InvokeStep struct {
Operation string `json:"operation"`
Driver string `json:"driver"`
ControlledBackend *ControlledBackend `json:"controlledBackend,omitempty"`
Request map[string]any `json:"request"`
}
type PackBudget ¶
type PackBudget struct {
MaxRequests int64 `json:"maxRequests"`
MaxDuration publicschema.Duration `json:"maxDuration"`
}
type PackCompileOptions ¶
type PackCompileOptions struct {
ProtocolSnapshots map[string]publicschema.Digest
ScenarioFiles map[string]publicschema.Digest
}
type PackIR ¶
type PackIR struct {
SchemaVersion string `json:"schema_version"`
Kind string `json:"kind"`
Compiler CompilerIdentity `json:"compiler"`
Metadata PackMetadata `json:"metadata"`
Spec PackSpecIR `json:"spec"`
ProtocolSnapshotDigest publicschema.Digest `json:"protocol_snapshot_digest"`
ScenarioPins []ScenarioPin `json:"scenario_pins"`
}
type PackMetadata ¶
type PackSpec ¶
type PackSpec struct {
Engine EngineCompatibility `json:"engine"`
ProtocolSnapshot ProtocolSnapshotRef `json:"protocolSnapshot"`
Scenarios ScenarioSelection `json:"scenarios"`
ConformanceSuites map[string]ConformanceSuite `json:"conformanceSuites"`
DefaultBudget PackBudget `json:"defaultBudget"`
Signing SigningExpectation `json:"signing,omitempty"`
}
type PackSpecIR ¶
type PackSpecIR struct {
Engine EngineCompatibility `json:"engine"`
ProtocolSnapshot ProtocolSnapshotRef `json:"protocol_snapshot"`
Scenarios ScenarioSelection `json:"scenarios"`
ConformanceSuites map[string]ConformanceSuite `json:"conformance_suites"`
DefaultBudget PackBudget `json:"default_budget"`
}
type ProtocolBinding ¶
type ProtocolBinding struct {
Family string `json:"family"`
Snapshot string `json:"snapshot"`
Digest publicschema.Digest `json:"digest"`
}
type ProtocolPack ¶
type ProtocolPack struct {
APIVersion string `json:"apiVersion"`
Kind string `json:"kind"`
Metadata PackMetadata `json:"metadata"`
Spec PackSpec `json:"spec"`
}
ProtocolPack is the strict authored pack manifest.
type ProtocolSnapshotRef ¶
type ProtocolSnapshotRef struct {
Ref string `json:"ref"`
}
type ProvideToolResultStep ¶
type PublicationPolicy ¶
type PublicationPolicy struct {
DataClass string `json:"dataClass"`
}
type RegisterResourceStep ¶
type RepetitionPolicy ¶
type ReplayStep ¶
type RequirementLevel ¶
type RequirementLevel string
const ( LevelMust RequirementLevel = "MUST" LevelShould RequirementLevel = "SHOULD" LevelMay RequirementLevel = "MAY" )
type RequirementLink ¶
type RequirementLink struct {
ID string `json:"id"`
Level RequirementLevel `json:"level"`
Category ScenarioClass `json:"category"`
SourceDigest publicschema.Digest `json:"source_digest"`
}
type RequirementRecord ¶
type RequirementRecord struct {
ID string
Level RequirementLevel
SourceDigest publicschema.Digest
Category ScenarioClass
}
RequirementRecord is the immutable catalog fact supplied to the compiler. The compiler does not fetch sources or infer requirements.
type RequirementRef ¶
type RequirementRef struct {
ID string `json:"id"`
Level RequirementLevel `json:"level"`
}
type ResourceFinalizer ¶
type ResourceFinalizer struct {
Operation string `json:"operation"`
Idempotent *bool `json:"idempotent"`
Retry RetryPolicy `json:"retry"`
}
type ResourceLease ¶
type ResourceLease struct {
ID string `json:"id"`
AcquireFrom string `json:"acquireFrom"`
SideEffectClass SideEffectClass `json:"sideEffectClass"`
Finalizer ResourceFinalizer `json:"finalizer"`
CleanupBudget CleanupBudget `json:"cleanupBudget"`
}
type RetryPolicy ¶
type RetryPolicy struct {
MaxAttempts int64 `json:"maxAttempts"`
}
type Scenario ¶
type Scenario struct {
APIVersion string `json:"apiVersion"`
Kind string `json:"kind"`
Metadata ScenarioMetadata `json:"metadata"`
Spec ScenarioSpec `json:"spec"`
}
Scenario is the strict authored YAML form.
type ScenarioBudget ¶
type ScenarioBudget struct {
Timeout publicschema.Duration `json:"timeout"`
MaxRequests int64 `json:"maxRequests"`
MaxInputTokens int64 `json:"maxInputTokens"`
MaxOutputTokens int64 `json:"maxOutputTokens"`
MaxResponseBytes ByteSize `json:"maxResponseBytes,omitempty"`
MaxArtifactBytes ByteSize `json:"maxArtifactBytes"`
}
type ScenarioClass ¶
type ScenarioClass string
const ( ClassNormative ScenarioClass = "normative" ClassDeFactoClient ScenarioClass = "de-facto-client" ClassConsumerProfile ScenarioClass = "consumer-profile" ClassBehavioral ScenarioClass = "behavioral" ClassAdvisory ScenarioClass = "advisory" )
type ScenarioIR ¶
type ScenarioIR struct {
SchemaVersion string `json:"schema_version"`
Kind string `json:"kind"`
Compiler CompilerIdentity `json:"compiler"`
Scenario Scenario `json:"scenario"`
RequirementLinks []RequirementLink `json:"requirement_links"`
FixturePins []FixturePin `json:"fixture_pins"`
CELBindings []CELBinding `json:"cel_bindings,omitempty"`
TemplateBindings []TemplateBinding `json:"template_bindings,omitempty"`
}
ScenarioIR is the canonical compiler output. It contains no YAML syntax, source comments, unresolved fixtures, or executable program objects.
type ScenarioMetadata ¶
type ScenarioPin ¶
type ScenarioPin struct {
Path string `json:"path"`
Digest publicschema.Digest `json:"digest"`
}
type ScenarioSelection ¶
type ScenarioSelection struct {
Include []string `json:"include"`
}
type ScenarioSpec ¶
type ScenarioSpec struct {
Protocol ProtocolBinding `json:"protocol"`
Classification Classification `json:"classification"`
Requirements []RequirementRef `json:"requirements"`
Requires CapabilityRequirement `json:"requires,omitempty"`
Budgets ScenarioBudget `json:"budgets"`
Steps []Step `json:"steps"`
Resources []ResourceLease `json:"resources,omitempty"`
Finally []FinalizeStep `json:"finally,omitempty"`
Repetition RepetitionPolicy `json:"repetition,omitempty"`
Publication PublicationPolicy `json:"publication"`
}
type SideEffectClass ¶
type SideEffectClass string
const ( SideEffectNone SideEffectClass = "none" SideEffectReversibleLocal SideEffectClass = "reversible-local" SideEffectReversibleRemote SideEffectClass = "reversible-remote" SideEffectIrreversible SideEffectClass = "irreversible" )
type SigningExpectation ¶
type SigningExpectation struct {
Digest publicschema.Digest `json:"digest,omitempty"`
}
type Step ¶
type Step struct {
ID string `json:"id"`
Invoke *InvokeStep `json:"invoke,omitempty"`
Capture *CaptureStep `json:"capture,omitempty"`
RegisterResource *RegisterResourceStep `json:"register_resource,omitempty"`
ProvideToolResult *ProvideToolResultStep `json:"provide_tool_result,omitempty"`
WaitFor *WaitForStep `json:"wait_for,omitempty"`
Assert *AssertStep `json:"assert,omitempty"`
Cancel *CancelStep `json:"cancel,omitempty"`
Replay *ReplayStep `json:"replay,omitempty"`
Finalize *FinalizeStep `json:"finalize,omitempty"`
}
Step is a tagged union. Exactly one of the nine operation fields is legal.
type TemplateBinding ¶
TemplateBinding is a prevalidated runtime substitution site. Expansion may only use the listed variables supplied by the resolved plan; no expression, environment, file, or command evaluation is involved.
type WaitForStep ¶
type WaitForStep struct {
Source string `json:"source"`
Condition string `json:"condition"`
Timeout publicschema.Duration `json:"timeout"`
}