Documentation
¶
Overview ¶
Package eprun runs a bound script inline on each request to its endpoint (#2172): handle(req) is called on the replica that received the request, in an in-memory MCP session presenting the roles its version's author held at the save, as a scheduled run presents them. Every platform call the handler makes is authorized, rate limited and audited as a script's. A request writes one audit row and its metrics, a failed one is kept for the script's owner to read, and no script_runs row is written.
The compiled module is kept per script version on each replica. Before a request runs, one read of when its binding and its script were last written (epbinding.Stamp) says whether what the replica holds is current, so the first request after a save, on any replica, runs the new version.
Index ¶
Constants ¶
const MaxConcurrent = 32
MaxConcurrent is how many requests a replica runs handlers for at once, across every endpoint. A request past it is answered 503 at once rather than held: a burst inside every endpoint's rate limit could otherwise hold as many executions as it sends, each with its own memory budget.
const MaxResponseBytes = 10 << 20
MaxResponseBytes bounds the body a handler answers with.
const SourceEndpoint = "endpoint"
SourceEndpoint is the audit source of the one row a request writes. The tool-call rows its handler's calls produce are the script source's, which is what every rule a script's calls answer to keys on.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Request ¶
type Request struct {
Method string
Path string
Params map[string]string
Query map[string][]string
Header http.Header
Body []byte
// Caller is nil on a public endpoint.
Caller *Caller
}
Request is one request to an endpoint, as the HTTP surface read it.
type Runner ¶
type Runner struct {
Bindings epbinding.Store
Scripts Scripts
// Server is the assembled MCP server a request's session opens against.
Server *mcp.Server
Audit middleware.AuditLogger
Metrics *observability.Metrics
// Subjects resolves the subject the version's author authenticates as,
// for where a request's managed resources land; nil leaves it empty.
Subjects interface {
ForRun(ctx context.Context, address string) string
}
// Limits are a platform run's ceilings; a binding's timeout and memory
// budget replace those two.
Limits scriptrun.PlatformLimits
Destinations []script.Destination
// Libraries is where the libraries a version loads are read from, given
// the version; nil refuses every load.
Libraries func(ctx context.Context, v *script.Version) (scriptlib.Source, error)
// Tokens answers platform.mint_token and platform.verify_token, bound to
// the endpoint a request reached (#2175); nil refuses them.
Tokens *scripttoken.Issuer
// contains filtered or unexported fields
}
Runner runs bound scripts.