Module: test
API 参考仅提供英文版本;正文与英文站点相同。
Classes
AgentTestError
Every harness failure. The message carries the route identity, the module provenance, and the recovery step, so a failing consumer test never has to be re-run under a debugger to learn which route and which proof level produced it.
Extends
Error
Extended by
Constructors
Constructor
new AgentTestError(
code,message,options?):AgentTestError
Parameters
code
message
string
options?
cause?
unknown
details?
readonly string[]
provenance?
recovery?
string
Returns
Overrides
Error.constructor
Properties
~effect/ErrorReporter/attributes?
readonlyoptional~effect/ErrorReporter/attributes?:ReadonlyRecord<string,unknown>
Inherited from
Error.~effect/ErrorReporter/attributes
~effect/ErrorReporter/ignore?
readonlyoptional~effect/ErrorReporter/ignore?:boolean
Inherited from
Error.~effect/ErrorReporter/ignore
~effect/ErrorReporter/severity?
readonlyoptional~effect/ErrorReporter/severity?:Severity
Inherited from
Error.~effect/ErrorReporter/severity
~effect/Runtime/errorExitCode?
readonlyoptional~effect/Runtime/errorExitCode?:number
Inherited from
Error.~effect/Runtime/errorExitCode
~effect/Runtime/errorReported?
readonlyoptional~effect/Runtime/errorReported?:boolean
Inherited from
Error.~effect/Runtime/errorReported
cause?
optionalcause?:unknown
Inherited from
Error.cause
code
readonlycode:AgentTestErrorCode
message
message:
string
Inherited from
Error.message
name
name:
string
Inherited from
Error.name
provenance?
readonlyoptionalprovenance?:RenderedRouteProvenance
stack?
optionalstack?:string
Inherited from
Error.stack
stackTraceLimit
staticstackTraceLimit:number
The Error.stackTraceLimit property specifies the number of stack frames
collected by a stack trace (whether generated by new Error().stack or
Error.captureStackTrace(obj)).
The default value is 10 but may be set to any valid JavaScript number. Changes
will affect any stack trace captured after the value has been changed.
If set to a non-number value, or set to a negative number, stack traces will not capture any frames.
Inherited from
Error.stackTraceLimit
Methods
captureStackTrace()
staticcaptureStackTrace(targetObject,constructorOpt?):void
Creates a .stack property on targetObject, which when accessed returns
a string representing the location in the code at which
Error.captureStackTrace() was called.
The first line of the trace will be prefixed with
${myObject.name}: ${myObject.message}.
The optional constructorOpt argument accepts a function. If given, all frames
above constructorOpt, including constructorOpt, will be omitted from the
generated stack trace.
The constructorOpt argument is useful for hiding implementation
details of error generation from the user. For instance:
Parameters
targetObject
object
constructorOpt?
Function
Returns
void
Inherited from
Error.captureStackTrace
prepareStackTrace()
staticprepareStackTrace(err,stackTraces):any
Parameters
err
Error
stackTraces
CallSite[]
Returns
any
See
https://v8.dev/docs/stack-trace-api#customizing-stack-traces
Inherited from
Error.prepareStackTrace
ContractMatrixViolationError
Every harness failure. The message carries the route identity, the module provenance, and the recovery step, so a failing consumer test never has to be re-run under a debugger to learn which route and which proof level produced it.
Extends
Constructors
Constructor
new ContractMatrixViolationError(
message,failures,report,options):ContractMatrixViolationError
Parameters
message
string
failures
readonly ContractMatrixFailure[]
report
options
details
readonly string[]
recovery
string
Returns
Overrides
Properties
~effect/ErrorReporter/attributes?
readonlyoptional~effect/ErrorReporter/attributes?:ReadonlyRecord<string,unknown>
Inherited from
AgentTestError.~effect/ErrorReporter/attributes
~effect/ErrorReporter/ignore?
readonlyoptional~effect/ErrorReporter/ignore?:boolean
Inherited from
AgentTestError.~effect/ErrorReporter/ignore
~effect/ErrorReporter/severity?
readonlyoptional~effect/ErrorReporter/severity?:Severity
Inherited from
AgentTestError.~effect/ErrorReporter/severity
~effect/Runtime/errorExitCode?
readonlyoptional~effect/Runtime/errorExitCode?:number
Inherited from
AgentTestError.~effect/Runtime/errorExitCode
~effect/Runtime/errorReported?
readonlyoptional~effect/Runtime/errorReported?:boolean
Inherited from
AgentTestError.~effect/Runtime/errorReported
cause?
optionalcause?:unknown
Inherited from
code
readonlycode:AgentTestErrorCode
Inherited from
failures
readonlyfailures: readonlyContractMatrixFailure[]
message
message:
string
Inherited from
name
name:
string
Inherited from
provenance?
readonlyoptionalprovenance?:RenderedRouteProvenance
Inherited from
report
readonlyreport:ContractMatrixReport
stack?
optionalstack?:string
Inherited from
stackTraceLimit
staticstackTraceLimit:number
The Error.stackTraceLimit property specifies the number of stack frames
collected by a stack trace (whether generated by new Error().stack or
Error.captureStackTrace(obj)).
The default value is 10 but may be set to any valid JavaScript number. Changes
will affect any stack trace captured after the value has been changed.
If set to a non-number value, or set to a negative number, stack traces will not capture any frames.
Inherited from
AgentTestError.stackTraceLimit
Methods
captureStackTrace()
staticcaptureStackTrace(targetObject,constructorOpt?):void
Creates a .stack property on targetObject, which when accessed returns
a string representing the location in the code at which
Error.captureStackTrace() was called.
The first line of the trace will be prefixed with
${myObject.name}: ${myObject.message}.
The optional constructorOpt argument accepts a function. If given, all frames
above constructorOpt, including constructorOpt, will be omitted from the
generated stack trace.
The constructorOpt argument is useful for hiding implementation
details of error generation from the user. For instance:
Parameters
targetObject
object
constructorOpt?
Function
Returns
void
Inherited from
AgentTestError.captureStackTrace
prepareStackTrace()
staticprepareStackTrace(err,stackTraces):any
Parameters
err
Error
stackTraces
CallSite[]
Returns
any
See
https://v8.dev/docs/stack-trace-api#customizing-stack-traces
Inherited from
AgentTestError.prepareStackTrace
Interfaces
AgentEventRouteInput
The { canonical, native, renderInput? } half of AgentEventRouteProps<E>; the harness supplies signal.
Type Parameters
E
E extends CanonicalAgentEvent = CanonicalAgentEvent
Properties
canonical
readonlycanonical:AgentEventCanonicalIdentity<E>
native
readonlynative:AgentEventNativePayload
renderInput?
readonlyoptionalrenderInput?:JsonValue
AgentRouteModule
One route module the harness renders: the public route contract's async
default component, plus the schemas the generated server and the routed CLI
validate through — inputSchema on the way in (the CLI dispatch level's
boundary) and resultSchema on the document value coming out.
Properties
default
readonlydefault: (props) =>unknown
Parameters
props
never
Returns
unknown
inputSchema?
readonlyoptionalinputSchema?:AgentRouteSchema
resultSchema?
readonlyoptionalresultSchema?:AgentRouteSchema
AgentTestRouteRegistry
Properties
layoutLoaders?
readonlyoptionallayoutLoaders?:Readonly<Record<string,AgentLayoutModuleLoader>>
Lazy loaders keyed by compiled layout id (layout:root, layout:mcp:<server>).
loaders
readonlyloaders:Readonly<Record<string,AgentRouteModuleLoader>>
Lazy loaders keyed by compiled route id, so a test only compiles the routes it renders.
manifest
readonlymanifest:AgentBundleTestManifest
projectionLoaders?
readonlyoptionalprojectionLoaders?:Readonly<Record<string,AgentProjectionModuleLoader>>
Lazy loaders keyed by backing tool route id; present only for explicit CLI projections.
providerLoaders?
readonlyoptionalproviderLoaders?:Readonly<Record<string,AgentProviderModuleLoader>>
Lazy loaders keyed by compiled provider id; present only when the project declares providers.
stateLoader?
readonlyoptionalstateLoader?:AgentStateModuleLoader
version
readonlyversion:number
ApplicationLeaf
Properties
command?
readonlyoptionalcommand?:ArtifactManifestCliCommand
config
readonlyconfig: readonlyRouteManifestConfigEntry[]
description?
readonlyoptionaldescription?:string
document?
readonlyoptionaldocument?:ServedStaticDocument
event?
readonlyoptionalevent?:string
execution
readonlyexecution:ApplicationLeafExecution
handler?
readonlyoptionalhandler?:string
inputSchema?
readonlyoptionalinputSchema?:RouteInputSchema
key
readonlykey:string
label
readonlylabel:string
ref
readonlyref:ApplicationNodeRef
resultSchemaState
readonlyresultSchemaState:RouteResultSchemaState
routeId?
readonlyoptionalrouteId?:string
source?
readonlyoptionalsource?:string
ApplicationServerGroup
Properties
key
readonlykey:string
label
readonlylabel:string
mode
readonlymode:string
server
readonlyserver:string
subgroups
readonlysubgroups: readonlyApplicationSubgroup[]
ApplicationSubgroup
Properties
key
readonlykey:string
label
readonlylabel:string
leaves
readonlyleaves: readonlyApplicationLeaf[]
ApplicationTree
Properties
diagnostics
readonlydiagnostics: readonlyDiagnostic[]
groups
readonlygroups: readonlyApplicationGroup[]
leafCount
readonlyleafCount:number
message?
readonlyoptionalmessage?:string
state
readonlystate:ApplicationTreeState
CliDispatchProvenance
Extends
Pick<RenderedRouteProvenance,"manifestDigest"|"projectRoot">
Properties
commands
readonlycommands: readonlystring[]
Every command the graph compiled, so a dispatch failure can name the alternatives.
manifestDigest?
readonlyoptionalmanifestDigest?:string
The manifest digest when the route came from the compiler; absent for a module rendered directly.
Inherited from
RenderedRouteProvenance.manifestDigest
projectRoot?
readonlyoptionalprojectRoot?:string
Inherited from
RenderedRouteProvenance.projectRoot
proofLevel
readonlyproofLevel:"cli-dispatch"
CliInvocation
Properties
argv
readonlyargv: readonlystring[]
The argv vector as dispatched, including the command path segments.
command?
readonlyoptionalcommand?:string
The resolved command path (db migrate); absent for help, --version, and usage failures.
exitCode
readonlyexitCode:number
The process exit code the routed shell mapped: 0 success (or the result's
exitCode under config.exitCode: 'result'), 1 execution failure,
2 usage or input-validation failure.
provenance
readonlyprovenance:CliDispatchProvenance
routeId?
readonlyoptionalrouteId?:string
The compiled route the shell executed: a cli: route, or the tool:
route behind a projected MCP command. Typed from the project's route
registration once .agent-bundle/routes.d.ts is in the program (both
kinds register), string without it; absent for help, --version, and
usage failures. argv itself stays readonly string[] — it is the shell's
input, not a route id.
stderr
readonlystderr:string
Everything the shell wrote to its diagnostic stream.
stdout
readonlystdout:string
Everything the shell wrote to stdout, including rendered Markdown, TTY, JSON, or NDJSON output.
value?
readonlyoptionalvalue?:unknown
The validated plain result or rendered document value; absent unless a command completed validation.
CompileTestManifestOptions
Properties
configPath?
readonlyoptionalconfigPath?:string
root?
readonlyoptionalroot?:string
ContractCheckOutcome
Properties
reason?
readonlyoptionalreason?:string
status
readonlystatus:ContractCheckStatus
ContractLifecycleFixture
Type Parameters
Input
Input = unknown
Properties
state?
readonlyoptionalstate?:object
budget?
readonlyoptionalbudget?:object
budget.codePath
readonlycodePath: readonlystring[]
budget.expectedCode
readonlyexpectedCode:string
budget.input
readonlyinput:Input
budget.revisionPath
readonlyrevisionPath: readonlystring[]
catalog?
readonlyoptionalcatalog?:object
catalog.id
readonlyid:string
catalog.lifetime
readonlylifetime:"request"|"process"|"workspace-durable"
durability?
readonlyoptionaldurability?:object
durability.expectedStructuredContent
readonlyexpectedStructuredContent:unknown
durability.input
readonlyinput:Input
idempotency?
readonlyoptionalidempotency?:object
idempotency.phase
readonlyphase:ContractLifecyclePhase
idempotency.replayedPath
readonlyreplayedPath: readonlystring[]
idempotency.revisionPath
readonlyrevisionPath: readonlystring[]
journal?
readonlyoptionaljournal?:object
journal.expected
readonlyexpected:unknown
journal.path
readonlypath: readonlystring[]
notice?
readonlyoptionalnotice?:object
notice.expected
readonlyexpected:unknown
notice.path
readonlypath: readonlystring[]
notice.phase
readonlyphase:ContractLifecyclePhase
transitionDriver
readonlytransitionDriver: () => readonlyContractLifecycleTransition<Input>[]
Pure deterministic phase driver; transport and assertions remain framework-owned.
Returns
readonly ContractLifecycleTransition<Input>[]
ContractLifecycleTransition
One lifecycle phase's invocation. Input is the route's input, bound to
its registered type by ContractRouteFixtures for a registered id.
Type Parameters
Input
Input = unknown
Properties
expectedStructuredContent
readonlyexpectedStructuredContent:unknown
input
readonlyinput:Input
phase
readonlyphase:ContractLifecyclePhase
progressNotifications
readonlyprogressNotifications:number
renderedTextIncludes?
readonlyoptionalrenderedTextIncludes?:string
ContractMatrixFailure
Properties
check
readonlycheck:string
reason
readonlyreason:string
routeId
readonlyrouteId:string
ContractMatrixOptions
Session options; context holds the request-scoped overrides applied to
every route render in this session; omitting it (or its providers) mounts
the project's conventional providers exactly as the generated server does
(see RenderRouteContextInit).
Extends
Properties
apps?
readonlyoptionalapps?:ContractAppCoverage
Accepted for parity with the other entry points; apps are never registered here.
context?
readonlyoptionalcontext?:RenderRouteContext
Inherited from
InMemoryMcpSessionOptions.context
fixtures
readonlyfixtures:ContractRouteFixtures
Route id -> fixture. Every compiled tool, prompt, and resource route on
the server must be covered. App routes are not registered at
mcp-in-memory; entries for them are accepted and ignored.
limits?
readonlyoptionallimits?:Partial<AgentRenderLimits>
The server dispatcher's base render limits, as the generated entry's
dispatcher has them (the runtime defaults when omitted). A route's compiled
config.render budget layers over them per call exactly as in the
artifact, so a low maxElapsedMs here observes a route's raised budget
without waiting out the 60-second default.
Inherited from
InMemoryMcpSessionOptionsBase.limits
lineage?
readonlyoptionallineage?:AgentLineageRegistry
Inherited from
InMemoryMcpSessionOptionsBase.lineage
lineageHost?
readonlyoptionallineageHost?:LineageHost
The host vocabulary the registry applies when the in-memory client name maps to none.
Inherited from
InMemoryMcpSessionOptionsBase.lineageHost
manifest?
readonlyoptionalmanifest?:AgentBundleTestManifest
Overrides
InMemoryMcpSessionOptions.manifest
restart?
readonlyoptionalrestart?: () =>Promise<ContractMatrixRestartSession>
Reopens the same durable store after the matrix closes its initial in-memory session.
Returns
Promise<ContractMatrixRestartSession>
server?
readonlyoptionalserver?:string
MCP server name. Optional when the project compiled exactly one server.
Overrides
InMemoryMcpSessionOptions.server
state?
readonlyoptionalstate?:object
Optional state owner input for parity with a generated Flight worker.
definition
readonlydefinition:AgentStateDefinition<unknown,Readonly<Record<string,ZodType<unknown,unknown,$ZodTypeInternals<unknown,unknown>>>>>
driver
readonlydriver:AgentStateDriver
noticeDelivery?
readonlyoptionalnoticeDelivery?:Readonly<Record<"next-event"|"mcp-resource-updated"|"mcp-inbox"|"current-response"|"directed-push"|"host-toast",NoticeDeliveryRouteState>>
The host advertisement the generated runtime would mount (a
TargetAdapter.noticeDelivery value): its per-route sensitivity
ceilings decide what the inbox discloses. Absent means every route
admits internal, exactly as a generated artifact without one.
noticeRetention?
readonlyoptionalnoticeRetention?:NormalizedNoticeRetentionPolicy
The project's resolved notices.retention; the runtime defaults apply when absent.
Inherited from
InMemoryMcpSessionOptions.state
ContractMatrixProgressSource
The explicit progress path a non-SDK client exposes to lifecycle fixtures.
Returns the unsubscribe; an SDK Client needs none because its handler map
is observed directly.
Properties
observeProgress
readonlyobserveProgress: (listener) => () =>void
Parameters
listener
(notification) => void
Returns
() => void
ContractMatrixReport
Properties
checks
readonlychecks:Readonly<Record<string,ContractCheckOutcome>>
provenance
readonlyprovenance:ContractMatrixProvenance
routes
readonlyroutes:Readonly<Record<string,ContractRouteReport>>
ContractMatrixRestartSession
Properties
client
readonlyclient:Client
ContractProgressNotification
The shape of one notifications/progress delivery a lifecycle fixture counts.
Properties
params?
readonlyoptionalparams?:object
progressToken?
readonlyoptionalprogressToken?:string|number
ContractResourceFixture
The explicit fixture form for a resource or MCP App route: the sweep reads the route's wire URI and no input, policy, or lifecycle applies. Declaring it on a tool or prompt route is a coverage failure.
Properties
kind
readonlykind:"resource"
ContractRouteFixture
One route's contract fixture. Every input here is handed to the route as
its tool or prompt input, so Input is that route's input type:
ContractRouteFixtures binds it to the registered input for a
registered route id and leaves it unknown otherwise. previousResults
stays unknown by design — those payloads come from previous server
versions and need not match the current schema's type.
Type Parameters
Input
Input = unknown
Properties
cancellation?
readonlyoptionalcancellation?:object
Cancellation case: invocation aborted mid-flight must settle rejected and
leave the session usable. The input must stay in flight past
abortAfterMs (default 50ms); an invocation that settles before the abort
fires is reported not-applicable, not failed.
abortAfterMs?
readonlyoptionalabortAfterMs?:number
input?
readonlyoptionalinput?:Input
input?
readonlyoptionalinput?:Input
Valid input for the sweep invocation (tools/prompts; resources need none).
inputs?
readonlyoptionalinputs?: readonlyInput[]
Additional valid inputs — e.g. one per declared status/discriminant value.
kind?
readonlyoptionalkind?:"resource"
'resource' marks a resource/MCP App fixture (see ContractResourceFixture).
Required for resource and app routes; omit it for tool and prompt fixtures.
lifecycle?
readonlyoptionallifecycle?:ContractLifecycleFixture<Input>
Optional stateful replay over this matrix run's single open client.
previousResults?
readonlyoptionalpreviousResults?: readonlyunknown[]
Serialized payloads captured from previous server versions; each must parse
under the CURRENT resultSchema (previous-server + current-client skew).
resultCompat?
readonlyoptionalresultCompat?:ResultCompatPolicy
Declared serialized-result compatibility policy. REQUIRED for tool routes.
ContractRouteReport
Properties
checks
readonlychecks:Readonly<Record<string,ContractCheckOutcome>>
CreateEventRouteInputOptions
Properties
host
readonlyhost:"claude"|"codex"|"cursor"|string&object
The host the envelope came from; selects the canonical payload mapping and the validator.
hostContractRevision?
readonlyoptionalhostContractRevision?:string
The pinned host contract revision recorded in canonical.provenance.
A route-unit test rarely depends on it; defaults to 'route-unit'.
nativeEvent?
readonlyoptionalnativeEvent?:string
The host-native event name; defaults to the envelope's own hook_event_name.
validate?
readonlyoptionalvalidate?:boolean
Validate the envelope with the same per-host, per-event rules the
generated wrapper applies before it reaches a route (default true).
Pass false to hand a route a deliberately partial envelope.
DeletedSourceReceipt
Verified project-relative paths removed before a packed entry is spawned. The receipt upgrades only a session whose entry and any explicit cwd belong to this same project root.
Properties
projectRoot
readonlyprojectRoot:string
Absolute root that must contain the launched entry and any explicit cwd.
removed
readonlyremoved: readonlystring[]
Sorted project-relative POSIX paths that existed, were removed, and were verified absent.
DevEpochContractMatrixOptions
Properties
apps?
readonlyoptionalapps?:ContractAppCoverage
App route coverage at this boundary; defaults to 'auto'.
fixtures
readonlyfixtures:ContractRouteFixtures
manifest
readonlymanifest:AgentBundleTestManifest
server?
readonlyoptionalserver?:string
session
readonlysession:DevEpochContractMatrixSession
An already-open epoch-pinned generated stdio session; this entry point never opens or closes it.
DevEpochContractMatrixSession
Properties
client
readonlyclient:ContractMatrixClient
provenance
readonlyprovenance:DevEpochMcpProvenance
stderr
readonlystderr: () =>string
Returns
string
DevEpochMcpProvenance
Properties
epochId
readonlyepochId:string
proofLevel
readonlyproofLevel:"dev-epoch"
serverName
readonlyserverName:string
target
readonlytarget:string
DocumentAssertions
Fluent assertions over one final Agent Document. Every failure names the
route, its module, and the proof level that produced the document; passing
the whole renderRoute result (rather than just .document) is what makes
that provenance available.
Properties
toContainAudio
readonlytoContainAudio: (expected?) =>DocumentAssertions
Asserts an audio node matches every supplied media field.
Parameters
expected?
Returns
toContainContext
readonlytoContainContext: (text) =>DocumentAssertions
Asserts a context node contains text — the additional context an event route returns to its host.
Parameters
text
string
Returns
toContainImage
readonlytoContainImage: (expected?) =>DocumentAssertions
Asserts an image node matches every supplied media field.
Parameters
expected?
Returns
toContainMarkdown
readonlytoContainMarkdown: (text) =>DocumentAssertions
Asserts a Markdown node contains text.
Parameters
text
string
Returns
toContainResource
readonlytoContainResource: (expected?) =>DocumentAssertions
Asserts a resource node matches every supplied link field.
Parameters
expected?
Returns
toContainText
readonlytoContainText: (text) =>DocumentAssertions
Asserts a text node contains text.
Parameters
text
string
Returns
toHaveError
readonlytoHaveError: (code?) =>DocumentAssertions
Asserts the document represents an error node, optionally with code.
Parameters
code?
string
Returns
toHaveNodeKinds
readonlytoHaveNodeKinds: (kinds) =>DocumentAssertions
Asserts the document's node kinds in document order.
Parameters
kinds
readonly ("result" | "markdown" | "text" | "context" | "json" | "progress" | "image" | "audio" | "resource" | "error")[]
Returns
toHaveStatus
readonlytoHaveStatus: (status) =>DocumentAssertions
Parameters
status
AgentDocumentStatus
Returns
toHaveValue
readonlytoHaveValue: (value) =>DocumentAssertions
Asserts the document's structured value equals value (JSON structural
equality). undefined asserts the document emitted no value at all, which
null does not satisfy.
Parameters
value
unknown
Returns
InMemoryMcpSession
Extends
AsyncDisposable
Properties
client
readonlyclient:Client
The real MCP SDK client, for protocol calls this module does not wrap.
close
readonlyclose: () =>Promise<void>
Returns
Promise<void>
provenance
readonlyprovenance:McpProjectionProvenance
Methods
[asyncDispose]()
[asyncDispose]():
PromiseLike<void>
Returns
PromiseLike<void>
Inherited from
AsyncDisposable.[asyncDispose]
InMemoryMcpSessionOptionsBase
Type Parameters
TState
TState = unknown
TEvents
TEvents extends AgentStateEventSchemas = AgentStateEventSchemas
Properties
limits?
readonlyoptionallimits?:Partial<AgentRenderLimits>
The server dispatcher's base render limits, as the generated entry's
dispatcher has them (the runtime defaults when omitted). A route's compiled
config.render budget layers over them per call exactly as in the
artifact, so a low maxElapsedMs here observes a route's raised budget
without waiting out the 60-second default.
lineage?
readonlyoptionallineage?:AgentLineageRegistry
lineageHost?
readonlyoptionallineageHost?:LineageHost
The host vocabulary the registry applies when the in-memory client name maps to none.
manifest?
readonlyoptionalmanifest?:AgentBundleTestManifest
server?
readonlyoptionalserver?:string
MCP server name. Optional when the project compiled exactly one server.
state?
readonlyoptionalstate?:object
Optional state owner input for parity with a generated Flight worker.
definition
readonlydefinition:AgentStateDefinition<TState,TEvents>
driver
readonlydriver:AgentStateDriver
noticeDelivery?
readonlyoptionalnoticeDelivery?:Readonly<Record<"next-event"|"mcp-resource-updated"|"mcp-inbox"|"current-response"|"directed-push"|"host-toast",NoticeDeliveryRouteState>>
The host advertisement the generated runtime would mount (a
TargetAdapter.noticeDelivery value): its per-route sensitivity
ceilings decide what the inbox discloses. Absent means every route
admits internal, exactly as a generated artifact without one.
noticeRetention?
readonlyoptionalnoticeRetention?:NormalizedNoticeRetentionPolicy
The project's resolved notices.retention; the runtime defaults apply when absent.
InspectWorkbenchSurfaceOptions
Properties
configPath?
readonlyoptionalconfigPath?:string
Explicit Agent Bundle configuration path; discovered from root when omitted.
root?
readonlyoptionalroot?:string
Project root; defaults to the working directory.
InstalledHostCheckOutcome
Properties
reason?
readonlyoptionalreason?:string
status
readonlystatus:"failed"|"passed"
InstalledHostContractMatrixOptions
Properties
apps?
readonlyoptionalapps?:ContractAppCoverage
App route coverage at this boundary; defaults to 'auto'.
fixtures
readonlyfixtures:ContractRouteFixtures
manifest
readonlymanifest:AgentBundleTestManifest
server?
readonlyoptionalserver?:string
session
readonlysession:InstalledHostMcpSession
An already-open installed-host session; this entry point never opens or closes it.
InstalledHostContractMatrixReport
Properties
checks
readonlychecks:Readonly<Record<string,InstalledHostCheckOutcome>>
host
readonlyhost:InstalledMcpHost
matrix
readonlymatrix:ContractMatrixReport
metadata
readonlymetadata:InstalledHostEvidenceMetadata
proofLevel
readonlyproofLevel:string
sessionEvidence
readonlysessionEvidence:string
status
readonlystatus:"passed"
versions
readonlyversions:InstalledHostVersionQuadruple
InstalledHostEvidenceMetadata
Properties
adapterRevision
readonlyadapterRevision:string
frameworkVersion
readonlyframeworkVersion:string
hostBinaryVersion
readonlyhostBinaryVersion:InstalledHostBinaryVersion
manifestSchemaDigest
readonlymanifestSchemaDigest:string
InstalledHostMcpProvenance
Properties
entry
readonlyentry:string
Installed-root-relative command entry, never an absolute host path.
host
readonlyhost:InstalledMcpHost
pid
readonlypid:number|undefined
proofLevel
readonlyproofLevel:"simulated"|"host-install"
InstalledHostMcpSession
Extends
AsyncDisposable
Properties
client
readonlyclient:Client
close
readonlyclose: () =>Promise<void>
Returns
Promise<void>
eventRuntimeEndpoint?
readonlyoptionaleventRuntimeEndpoint?:string
Raw read-only status socket for the installed generated event runtime.
observation
readonlyobservation:InstalledHostObservation
provenance
readonlyprovenance:InstalledHostMcpProvenance
stderr
readonlystderr: () =>string
Returns
string
Methods
[asyncDispose]()
[asyncDispose]():
PromiseLike<void>
Returns
PromiseLike<void>
Inherited from
AsyncDisposable.[asyncDispose]
InstalledHostObservation
Properties
checks
readonlychecks:Readonly<Record<InstalledHostCheckName,InstalledHostCheckOutcome>>
host
readonlyhost:InstalledMcpHost
metadata
readonlymetadata:InstalledHostEvidenceMetadata
proofLevel
readonlyproofLevel:string
sessionEvidence
readonlysessionEvidence:string
versions
readonlyversions:InstalledHostVersionQuadruple
InstalledHostVersionQuadruple
Properties
builtArtifact
readonlybuiltArtifact:string
installedArtifact
readonlyinstalledArtifact:string
runningProcess
readonlyrunningProcess:string
source
readonlysource:string
InvokeCliOptionsBase
Properties
manifest?
readonlyoptionalmanifest?:AgentBundleTestManifest
signal?
readonlyoptionalsignal?:AbortSignal
tty?
readonlyoptionaltty?:boolean
Selects interactive rendered output explicitly. Generated binaries probe
process.stdout; the in-process harness defaults to piped output. The
same knob shapes the request.terminal the command observes (#511): a
synthetic 80×24 basic-color terminal on both streams, or two color-free
pipes. Inject context.terminal to choose other values.
LoadedRouteModule
The evaluated module loadRouteModule returns: the same object the generated
server, the routed CLI, and renderRoute execute, so inputSchema and
resultSchema are the route's own schema instances by reference (not copies
or JSON), config is the module's static config export, and default its
component — absent for a plain src/scripts/*.ts module, whose contract is
main. Any other named export is reachable through the index signature.
Type Parameters
Target
Target extends string = string
Indexable
[
exportName:string]:unknown
Properties
config?
readonlyoptionalconfig?:unknown
default?
readonlyoptionaldefault?: (props) =>unknown
Parameters
props
never
Returns
unknown
inputSchema?
readonlyoptionalinputSchema?:RouteModuleSchema<RouteTargetParsedInput<Target>>
parse returns the component's input — the caller's input after defaults and transforms.
resultSchema?
readonlyoptionalresultSchema?:RouteModuleSchema<RouteTargetResult<Target>>
LoadRouteModuleOptions
Properties
manifest?
readonlyoptionalmanifest?:AgentBundleTestManifest
Loads against an explicit manifest instead of the one the generated configuration registered.
McpContentBlock
Properties
data?
readonlyoptionaldata?:string
mimeType?
readonlyoptionalmimeType?:string
name?
readonlyoptionalname?:string
text?
readonlyoptionaltext?:string
type
readonlytype:string
uri?
readonlyoptionaluri?:string
McpProjectionProvenance
Where an in-memory projection result came from and what it proves.
Properties
manifestDigest
readonlymanifestDigest:string
projectRoot
readonlyprojectRoot:string
proofLevel
readonlyproofLevel:"mcp-in-memory"
routeIds
readonlyrouteIds: readonlystring[]
Compiled route ids this server registered.
serverName
readonlyserverName:string
The MCP server name as the protocol sees it, e.g. curator.
McpPromptResult
Properties
messages
readonlymessages: readonlyReadonly<Record<string,unknown>>[]
provenance
readonlyprovenance:McpProjectionProvenance
McpResourceRead
Properties
contents
readonlycontents: readonlyReadonly<Record<string,unknown>>[]
provenance
readonlyprovenance:McpProjectionProvenance
McpSurfaceListing
Properties
prompts
readonlyprompts: readonlystring[]
provenance
readonlyprovenance:McpProjectionProvenance
resources
readonlyresources: readonlystring[]
tools
readonlytools: readonlystring[]
McpToolInvocation
Properties
_meta?
readonlyoptional_meta?:Readonly<Record<string,unknown>>
Result-level CallToolResult._meta, projected from Agent.Result metadata.
content
readonlycontent: readonlyMcpContentBlock[]
isError
readonlyisError:boolean
provenance
readonlyprovenance:McpProjectionProvenance
structuredContent?
readonlyoptionalstructuredContent?:unknown
MediaNodeExpectation
Properties
data?
readonlyoptionaldata?:string
mimeType?
readonlyoptionalmimeType?:string
MountedTestState
One state owner mounted for a whole test rather than one render: the same
state handle and noticeLedger for every renderRoute /
renderRouteEvents call that spreads MountedTestState.context into
its context, a typed snapshot read, the ledger's snapshot, and one
close().
Extends
MountedTestStateContext<TState,TEvents>
Type Parameters
TState
TState = unknown
TEvents
TEvents extends AgentState.AgentStateEventSchemas = AgentState.AgentStateEventSchemas
Properties
noticeLedger
readonlynoticeLedger:AgentNoticeLedger
Inherited from
MountedTestStateContext.noticeLedger
state
readonlystate:AgentStateHandle<TState,TEvents>
Inherited from
Methods
close()
close():
Promise<void>
Releases the bindings, closes the owner and its driver, and removes the disposable sqlite root. Idempotent.
Returns
Promise<void>
context()
context():
MountedTestStateContext<TState,TEvents>
{ noticeLedger, state }, to spread into the context of any number of renders.
Returns
MountedTestStateContext<TState, TEvents>
notices()
notices():
Promise<AgentNoticeLedgerSnapshot>
The notice ledger's current snapshot: every notice with its delivery state.
Returns
Promise<AgentNoticeLedgerSnapshot>
read()
read():
Promise<AgentStateSnapshot<TState>>
The project state's current snapshot, typed by the mounted definition.
Returns
Promise<AgentStateSnapshot<TState>>
MountedTestStateContext
The state and noticeLedger context members one mounted test state hands every render.
Extended by
Type Parameters
TState
TState = unknown
TEvents
TEvents extends AgentState.AgentStateEventSchemas = AgentState.AgentStateEventSchemas
Properties
noticeLedger
readonlynoticeLedger:AgentNoticeLedger
state
readonlystate:AgentStateHandle<TState,TEvents>
MountTestStateOptions
Type Parameters
TState
TState = unknown
TEvents
TEvents extends AgentState.AgentStateEventSchemas = AgentState.AgentStateEventSchemas
Properties
definition?
readonlyoptionaldefinition?:AgentStateDefinition<TState,TEvents>
The state definition to mount instead of the manifest's registered state
module. It also types state and read(); without it, pass the
definition's types as type arguments (mountTestState<State, Events>()).
driver?
readonlyoptionaldriver?:AgentStateDriver
A driver of your own, closed with the mount; replaces the disposable-sqlite / memory choice.
manifest?
readonlyoptionalmanifest?:AgentBundleTestManifest
Mounts the state declared by an explicit manifest instead of the one the generated configuration registered.
signal?
readonlyoptionalsignal?:AbortSignal
OpenInstalledHostMcpServerOptions
Properties
artifactRoot
readonlyartifactRoot:string
Root containing agent-bundle.manifest.json and target directories.
env?
readonlyoptionalenv?:Readonly<Record<string,string>>
host
readonlyhost:InstalledMcpHost
hostBinaryVersion?
readonlyoptionalhostBinaryVersion?:string
Version observed from the real host binary, when that lane invoked one.
installedRoot
readonlyinstalledRoot:string
Host-owned installed plugin root, not the build target directory.
manifest
readonlymanifest:AgentBundleTestManifest
server?
readonlyoptionalserver?:string
sessionEvidence?
readonlyoptionalsessionEvidence?:string
PackedContractMatrixOptions
Properties
apps?
readonlyoptionalapps?:ContractAppCoverage
App route coverage at this boundary; defaults to 'auto'.
eventRuntime?
readonlyoptionaleventRuntime?:ContractEventRuntimeAddress
Read-only status address for the generated event runtime, when this artifact has one.
fixtures
readonlyfixtures:ContractRouteFixtures
Route id -> fixture. Every compiled tool, prompt, and resource route on
the server must be covered; app routes are auto-covered unless
apps: 'explicit'.
manifest
readonlymanifest:AgentBundleTestManifest
restart?
readonlyoptionalrestart?: () =>Promise<ContractMatrixRestartSession>
Caller-owned packed restart; it must close the initial session and reopen the same artifact/store.
Returns
Promise<ContractMatrixRestartSession>
server?
readonlyoptionalserver?:string
session
readonlysession:PackedMcpSession
An already-open packed session; this entry point never opens or closes it.
PackedMcpProvenance
Where a packed session's evidence came from.
Properties
entry
readonlyentry:string
Absolute path of the generated stdio entry that was spawned.
pid
readonlypid:number|undefined
proofLevel
readonlyproofLevel:"packed-stdio"|"packed-deleted-source"
sourceRemoved?
readonlyoptionalsourceRemoved?: readonlystring[]
Project-relative paths verified absent immediately before the process spawn.
PackedMcpSession
Extends
AsyncDisposable
Properties
client
readonlyclient:Client
close
readonlyclose: () =>Promise<void>
Returns
Promise<void>
provenance
readonlyprovenance:PackedMcpProvenance
stderr
readonlystderr: () =>string
Everything the server wrote to stderr, bounded — stdout is the protocol channel.
Returns
string
Methods
[asyncDispose]()
[asyncDispose]():
PromiseLike<void>
Returns
PromiseLike<void>
Inherited from
AsyncDisposable.[asyncDispose]
PackedMcpSessionOptions
Properties
args?
readonlyoptionalargs?: readonlystring[]
Extra argv appended after the entry path.
cwd?
readonlyoptionalcwd?:string
Working directory for the spawned process; defaults to the entry's directory.
deletedSource?
readonlyoptionaldeletedSource?:DeletedSourceReceipt
Receipt whose paths must still be absent and whose project root must contain the entry and any explicit cwd before this session may claim deleted-source proof.
entry
readonlyentry:string
Absolute path of the generated stdio entry (<artifact>/mcp/<server>.mjs, emitted once at the composite root).
env?
readonlyoptionalenv?:Readonly<Record<string,string>>
Environment for the spawned process; defaults to the current one.
execPath?
readonlyoptionalexecPath?:string
Node binary to spawn; defaults to the running one.
name?
readonlyoptionalname?:string
Client identity sent in initialize.
ProgressExpectation
Properties
atLeast?
readonlyoptionalatLeast?:number
atMost?
readonlyoptionalatMost?:number
messages?
readonlyoptionalmessages?: readonlystring[]
Every listed substring must appear in some progress message, in order.
RenderedRoute
Extended by
Type Parameters
Target
Target = RenderRouteTarget
Properties
document
readonlydocument:AgentDocument
The final Agent Document the real renderer produced.
invocation
readonlyinvocation:AgentRenderInvocation
progress
readonlyprogress: readonlyAgentProgressUpdate[]
Request-scoped progress the route reported. These are not render events; the final-only dispatcher emits no event stream.
provenance
readonlyprovenance:RenderedRouteProvenance
result?
readonlyoptionalresult?:RouteTargetResult<Target>
The document value parsed by the route's own resultSchema, typed from that schema once the id is registered; absent when the module exports none.
RenderedRouteEvents
Extends
RenderedRoute<Target>
Type Parameters
Target
Target = RenderRouteTarget
Properties
document
readonlydocument:AgentDocument
The final Agent Document the real renderer produced.
Inherited from
events
readonlyevents: readonlyAgentRenderEvent[]
Every render event the runtime emitted, in the order it emitted them.
invocation
readonlyinvocation:AgentRenderInvocation
Inherited from
progress
readonlyprogress: readonlyAgentProgressUpdate[]
Request-scoped progress the route reported. These are not render events; the final-only dispatcher emits no event stream.
Inherited from
provenance
readonlyprovenance:RenderedRouteProvenance
Inherited from
result?
readonlyoptionalresult?:RouteTargetResult<Target>
The document value parsed by the route's own resultSchema, typed from that schema once the id is registered; absent when the module exports none.
Inherited from
RenderedRouteProvenance
Where a rendered route came from and what the render proves. Every harness failure reports this block so a red test names the route, the module, the compiler pass behind it, and the level of proof it actually carried.
Properties
kind
readonlykind:RenderableRouteKind
manifestDigest?
readonlyoptionalmanifestDigest?:string
The manifest digest when the route came from the compiler; absent for a module rendered directly.
modulePath?
readonlyoptionalmodulePath?:string
Absolute module path when known.
projectRoot?
readonlyoptionalprojectRoot?:string
proofLevel
readonlyproofLevel:AgentTestProofLevel
relativePath?
readonlyoptionalrelativePath?:string
Project-relative POSIX path when the route came from the compiler.
routeId
readonlyrouteId:string
serverId?
readonlyoptionalserverId?:string
source
readonlysource:"manifest"|"module"
manifest when the compiler named the route; module when the test passed a module in.
targets
readonlytargets: readonlystring[]
The project's selected host targets. Route-unit rendering is target-neutral.
RenderEventAssertions
Properties
toBeBoundedBy
readonlytoBeBoundedBy: (maxEvents) =>RenderEventAssertions
Asserts a total event count ceiling — the #120 bound that keeps tolerance honest.
Parameters
maxEvents
number
Returns
toCompleteOnce
readonlytoCompleteOnce: () =>RenderEventAssertions
Asserts exactly one terminal complete, and that it is last.
Returns
toContainSequence
readonlytoContainSequence: (expected) =>RenderEventAssertions
Asserts the expected types appear in order, tolerating extra events between them.
Parameters
expected
readonly ("progress" | "error" | "shell" | "replace" | "complete")[]
Returns
toHaveErrorCode
readonlytoHaveErrorCode: (code?) =>RenderEventAssertions
Asserts an error event, optionally with code.
Parameters
code?
string
Returns
toHaveMonotonicSequence
readonlytoHaveMonotonicSequence: () =>RenderEventAssertions
Asserts strictly increasing sequence numbers with no repeats or regressions.
Returns
toHaveNoErrors
readonlytoHaveNoErrors: () =>RenderEventAssertions
Asserts no error event was emitted.
Returns
toHaveProgress
readonlytoHaveProgress: (expectation?) =>RenderEventAssertions
Asserts progress reporting: a count window and/or ordered message substrings.
Parameters
expectation?
Returns
toHaveTypes
readonlytoHaveTypes: (expected) =>RenderEventAssertions
Asserts the exact event-type array. Prefer toContainSequence unless the exact frame set is the contract.
Parameters
expected
readonly ("progress" | "error" | "shell" | "replace" | "complete")[]
Returns
RenderRouteOptionsBase
Type Parameters
Target
Target = RenderRouteTarget
Properties
args?
readonlyoptionalargs?: readonlystring[]
CLI route arguments; cli routes only.
input?
readonlyoptionalinput?:RouteTargetInput<Target>
The route's input: tool input, event payload, or script input — typed from the route's own schema once the id is registered.
kind?
readonlyoptionalkind?:RenderableRouteKind
Overrides the route kind when a module is rendered directly; ignored for manifest routes.
limits?
readonlyoptionallimits?:Partial<AgentRenderLimits>
The dispatcher's base render limits, as the generated executable's
dispatcher has them. A manifest route's compiled config.render budget
layers over them exactly as in the generated MCP server and routed CLI;
a module rendered directly has no compiled config, so these apply alone.
manifest?
readonlyoptionalmanifest?:AgentBundleTestManifest
Renders against an explicit manifest instead of the one the generated configuration registered.
routeId?
readonlyoptionalrouteId?:string
Names a module rendered directly, so failure diagnostics carry a route identity.
signal?
readonlyoptionalsignal?:AbortSignal
ResourceNodeExpectation
Properties
mimeType?
readonlyoptionalmimeType?:string
name?
readonlyoptionalname?:string
uri?
readonlyoptionaluri?:string
RouteModuleSchema
A route schema whose parsed value is typed from the route's registration once the id is registered.
Extends
AgentRouteSchema
Type Parameters
Value
Value
Properties
parse
readonlyparse: (value) =>Value
Parameters
value
unknown
Returns
Value
Overrides
AgentRouteSchema.parse
RunScriptOptionsBase
Properties
manifest?
readonlyoptionalmanifest?:AgentBundleTestManifest
signal?
readonlyoptionalsignal?:AbortSignal
stdin?
readonlyoptionalstdin?:string
Input piped to a plain script's stdin, ended after the last byte. Omitted, the script reads end-of-file at once. A generated executable inherits the invoking terminal's stdin; a test names its input instead. Plain scripts only.
tty?
readonlyoptionaltty?:boolean
Selects interactive rendered output explicitly. Generated executables
probe process.stdout; the in-process harness defaults to piped output.
The same knob shapes the request.terminal the script observes (#511):
a synthetic 80×24 basic-color terminal on both streams, or two
color-free pipes. Rendered scripts only; a plain script's main receives
the real child process's probe.
ScriptDispatchProvenance
Extends
Pick<RenderedRouteProvenance,"manifestDigest"|"projectRoot">
Properties
execution
readonlyexecution:ScriptExecution
manifestDigest?
readonlyoptionalmanifestDigest?:string
The manifest digest when the route came from the compiler; absent for a module rendered directly.
Inherited from
RenderedRouteProvenance.manifestDigest
projectRoot?
readonlyoptionalprojectRoot?:string
Inherited from
RenderedRouteProvenance.projectRoot
proofLevel
readonlyproofLevel:"script-dispatch"
scripts
readonlyscripts: readonlystring[]
Every conventional script the graph compiled, so a lookup failure can name the alternatives.
ScriptInvocation
Properties
argv
readonlyargv: readonlystring[]
The argv vector as dispatched; for rendered scripts this still includes the --json / --ndjson mode flags.
exitCode
readonlyexitCode:number
The process status the contract mapped: rendered scripts exit 0 on a
success document and 1 otherwise (2 for conflicting mode flags); plain
scripts report their process's exit status — a numeric main return, an
assigned process.exitCode, a process.exit call, 1 after an escaped
rejection, or 128 + the signal number when a signal ended the process.
kind
readonlykind:"plain"|"rendered"
name
readonlyname:string
provenance
readonlyprovenance:ScriptDispatchProvenance
routeId
readonlyrouteId:string
stderr
readonlystderr:string
Everything the script wrote to its diagnostic stream.
stdout
readonlystdout:string
Everything the script wrote to stdout, including rendered Markdown, TTY, JSON, or NDJSON output.
value?
readonlyoptionalvalue?:unknown
Rendered scripts: the completed document value the shell passed through. Absent for plain scripts.
TargetCapabilityFixture
An explicit target-capability fixture for route-unit projection.
This is projection-layer proof only. It does not open an MCP transport, start a packed process, or prove that a host accepts any projected block.
Extends
Properties
audio
readonlyaudio:boolean
Inherited from
TargetCapabilityFixtureInput.audio
image
readonlyimage:boolean
Inherited from
TargetCapabilityFixtureInput.image
progress
readonlyprogress:boolean
Inherited from
TargetCapabilityFixtureInput.progress
proofLevel
readonlyproofLevel:"route-unit"
resource
readonlyresource:boolean
Inherited from
TargetCapabilityFixtureInput.resource
richContentFallback
readonlyrichContentFallback:McpRichContentFallback
Inherited from
TargetCapabilityFixtureInput.richContentFallback
text
readonlytext:true
TargetCapabilityFixtureInput
The capabilities one route-unit fixture explicitly advertises. Text is not configurable because MCP text is the projector's always-supported baseline. Progress is separate from document content: it controls whether the real MCP event-stream projector receives a progress token and notification sink.
Extended by
Properties
audio
readonlyaudio:boolean
image
readonlyimage:boolean
progress
readonlyprogress:boolean
resource
readonlyresource:boolean
richContentFallback
readonlyrichContentFallback:McpRichContentFallback
TargetCapabilityProjection
The real MCP projector's output plus any progress notifications it emitted.
Properties
content
readonlycontent: readonlyMcpContentBlock[]
isError
readonlyisError:boolean
progress
readonlyprogress: readonlyMcpProgressNotificationParams[]
provenance
readonlyprovenance:RenderedRouteProvenance
structuredContent?
readonlyoptionalstructuredContent?:unknown
TestableAppDescriptor
One normalized MCP App declaration addressable by the browser proof level.
Properties
_meta?
readonlyoptional_meta?:Readonly<Record<string,unknown>>
id
readonlyid:string
name
readonlyname:string
prebuilt?
readonlyoptionalprebuilt?:true
relativePath
readonlyrelativePath:string
Project-relative POSIX path of the browser entry module.
resourceUri
readonlyresourceUri:string
serverIds
readonlyserverIds: readonlystring[]
Every MCP server sharing this identical app declaration.
source
readonlysource:string
Absolute browser entry module path.
targets
readonlytargets: readonlystring[]
template?
readonlyoptionaltemplate?:string
Absolute optional HTML shell template path.
TestableLayoutDescriptor
One conventional layout module the harness composes around manifest route renders, exactly as generated workers do.
Properties
id
readonlyid:string
layout:root or layout:mcp:<server>.
relativePath
readonlyrelativePath:string
Project-relative POSIX path of the layout module.
scope
readonlyscope:CompiledLayoutScope
serverId?
readonlyoptionalserverId?:string
The owning MCP server id (mcp:<name>); server scope only.
source
readonlysource:string
Absolute layout module path.
TestableScriptDescriptor
One conventional src/scripts/<name> module the script-dispatch level can
run. rendered is the extension contract (#102 stage 3): .tsx/.jsx
scripts render through the Agent renderer, everything else is a plain
executable module. Explicit scripts: configuration entries are bundled
entries rather than routes, so they never appear here.
Properties
name
readonlyname:string
The path-derived script name (script:verify -> verify).
relativePath
readonlyrelativePath:string
Project-relative POSIX path of the script module.
rendered
readonlyrendered:boolean
routeId
readonlyrouteId:string
source
readonlysource:string
Absolute script module path.
TestManifestPluginIdentity
The project identity a generated MCP server advertises on the wire.
Properties
name
readonlyname:string
packageName?
readonlyoptionalpackageName?:string
The validated npm package name, absent for unpackaged development projects.
packageVersion?
readonlyoptionalpackageVersion?:string
The validated semantic release version, absent for unpackaged development projects.
version
readonlyversion:string
ValidateClaudePluginOptions
Properties
executable?
readonlyoptionalexecutable?:string
loadCheck?
readonlyoptionalloadCheck?:boolean
Also run claude --plugin-dir <bundle-dir> plugin list --json after the
validation runs and read the plugin's row (default true). plugin validate --strict accepts manifests Claude Code then refuses to load
(observed 2.1.250–2.1.260); the listing's errors[] is the only load
verdict. Doctor passes false because it runs its own registration proof.
pluginDirectory
readonlypluginDirectory:string
run?
readonlyoptionalrun?:ClaudePluginCommandRunner
Injectable proof seam. Production always uses the bounded process runner.
strict?
readonlyoptionalstrict?:boolean
Promote host warnings to Agent Bundle errors. Claude itself always runs with --strict.
target
readonlytarget:string
version?
readonlyoptionalversion?:string
The claude --version number the caller already probed from the same
executable; skips this run's own probe (Doctor validates several
directories per host and probes once).
ValidateCodexPluginOptions
Properties
executable?
readonlyoptionalexecutable?:string
pluginDirectory
readonlypluginDirectory:string
run?
readonlyoptionalrun?:CodexPluginCommandRunner
Injectable proof seam. Production always uses the bounded process runner.
strict?
readonlyoptionalstrict?:boolean
Promote live-schema drift to an Agent Bundle error.
target
readonlytarget:string
ValidateCursorPluginOptions
Properties
executable?
readonlyoptionalexecutable?:string
pluginDirectory
readonlypluginDirectory:string
run?
readonlyoptionalrun?:CursorPluginCommandRunner
Injectable proof seam. Production always uses the bounded process runner.
target
readonlytarget:string
WorkbenchCapabilityCounts
The capability counts the Workbench derives its navigation from, as the built artifact's inventory would list them: one instance per hook, MCP server, or script declaration per selected target it names (a hook shipped to two hosts counts twice; a declaration whose targets select none of the project's targets emits nothing and counts nothing), plus the declared Skills, eval suites, and targets.
Properties
evalSuites
readonlyevalSuites:number
hooks
readonlyhooks:number
mcpServers
readonlymcpServers:number
scripts
readonlyscripts:number
skills
readonlyskills:number
targets
readonlytargets:number
WorkbenchRouteCatalog
Properties
diagnostics
readonlydiagnostics: readonlyDiagnostic[]
digest
readonlydigest:string
groups
readonlygroups: readonlyWorkbenchRouteCatalogGroup[]
providers
readonlyproviders: readonlyArtifactManifestProvider[]
routeCount
readonlyrouteCount:number
The number of compiled routes in the catalog.
servers
readonlyservers: readonlyWorkbenchRouteCatalogServer[]
stateDefinition?
readonlyoptionalstateDefinition?:StateDefinitionProjection
The effective state declaration; absent when the project declares none.
WorkbenchRouteCatalogEntry
One route as the Workbench catalog lists it: the manifest route plus, for CLI routes, its compiled command.
Properties
command?
readonlyoptionalcommand?:ArtifactManifestCliCommand
commandUsage?
readonlyoptionalcommandUsage?:string
The <bin> <command> … usage line the route workspace renders for a CLI command.
route
readonlyroute:RouteManifestRoute
WorkbenchRouteCatalogGroup
One catalog section, exactly as the application tree groups them: per server and
kind for MCP routes (curator · Tools), project-level for event routes,
CLI commands, and scripts.
Properties
entries
readonlyentries: readonlyWorkbenchRouteCatalogEntry[]
kind
readonlykind:CompiledRouteKind
label
readonlylabel:string
The heading text the application tree renders for this group.
mode?
readonlyoptionalmode?:string
server?
readonlyoptionalserver?:string
serverId?
readonlyoptionalserverId?:string
WorkbenchRouteCatalogServer
Properties
id
readonlyid:string
mode
readonlymode:CompiledServerMode
name
readonlyname:string
routeCount
readonlyrouteCount:number
WorkbenchSurface
Properties
advanced
readonlyadvanced: readonlyAdvancedSection[]
application
readonlyapplication:ApplicationTree
catalog
readonlycatalog:WorkbenchRouteCatalog
counts
readonlycounts:WorkbenchCapabilityCounts
lifecycles
readonlylifecycles: readonlyLifecycle[]
Every event route with the concrete hosts and starter fixtures available for replay.
manifest
readonlymanifest:RouteManifest
Exactly the wire body of GET /api/routes/manifest.
provenance
readonlyprovenance:WorkbenchSurfaceProvenance
WorkbenchSurfaceFromGraphInput
Properties
configPath?
readonlyoptionalconfigPath?:string
counts
readonlycounts:WorkbenchCapabilityCounts
graph
readonlygraph:CompiledRouteGraph
inspection?
readonlyoptionalinspection?:Readonly<{hooks: readonlyApplicationTreeInspectionHook[];mcpServers: readonlyApplicationTreeInspectionMcpServer[];scripts: readonlyApplicationTreeInspectionScript[]; }>
lifecycles
readonlylifecycles:LifecycleListResponse
notices?
readonlyoptionalnotices?:NormalizedNotices
projectRoot
readonlyprojectRoot:string
skills?
readonlyoptionalskills?: readonlyobject[]
sourceRevision
readonlysourceRevision:string
state?
readonlyoptionalstate?:NormalizedStateDefinition
staticDocuments?
readonlyoptionalstaticDocuments?: readonlyServedStaticDocument[]
targets
readonlytargets: readonlystring[]
WorkbenchSurfaceProvenance
Properties
configPath?
readonlyoptionalconfigPath?:string
manifestDigest
readonlymanifestDigest:string
projectRoot
readonlyprojectRoot:string
proofLevel
readonlyproofLevel:"workbench-surface"
sourceRevision
readonlysourceRevision:string
The compiler pass revision the dev server would stamp on the manifest.
targets
readonlytargets: readonlystring[]
Type Aliases
AdvancedSection
AdvancedSection =
"artifact"|"evals"|"hosts"|"logs"|"protocol"
A content-bearing destination within the Workbench's Advanced area.
AgentDocumentNodeKind
AgentDocumentNodeKind =
AgentDocumentNode["kind"]
AgentProviderModuleLoader
AgentProviderModuleLoader = () =>
Promise<{default?:unknown; }>
Returns
Promise<{ default?: unknown; }>
AgentRenderEventType
AgentRenderEventType =
AgentRenderEvent["type"]
AgentRouteModuleLoader
AgentRouteModuleLoader = () =>
Promise<AgentRouteModule>
Returns
Promise<AgentRouteModule>
AgentTestErrorCode
AgentTestErrorCode =
"assertion-failed"|"command-not-found"|"contract-violation"|"deleted-source-unverified"|"invalid-input"|"invalid-route-module"|"manifest-unavailable"|"packed-unavailable"|"projection-failed"|"render-failed"|"result-rejected"|"route-not-found"|"script-not-found"|"server-not-found"|"unsupported-rich-content"|"unsupported-route-kind"
AgentTestProofLevel
AgentTestProofLevel =
"route-unit"|"mcp-in-memory"|"dev-epoch"|"cli-dispatch"|"script-dispatch"|"workbench-surface"|"packed-stdio"|"packed-deleted-source"|"browser-app"|"simulated"|"host-install"
The proof level one harness helper supplies. The levels are deliberately separate and separately named: a pass at one is never a receipt for another, and every helper stamps the level it actually carried into its provenance and its failure text.
route-unitrenders a route module through the real Agent renderer. No transport, no browser surface, no host artifact.mcp-in-memoryruns the real generated MCP server against a real MCP client over the SDK's in-memory transport pair. It proves the protocol contract — registration, schemas, content projection — and proves nothing about a process, stdout framing, or a packed artifact.dev-epochopens an epoch-pinned generated stdio entry through the Workbench session service and drives its real process. It proves the generated development artifact, not packed or native-host provenance.cli-dispatchruns an argv vector through the routed CLI's own shell over the compiled command graph, in this process. It proves command resolution, argv projection, and exit codes, not a spawned binary.script-dispatchruns one conventionalsrc/scripts/*module through the contract its generatedscripts/<name>.mjsexecutable carries: a rendered.tsxscript through the rendered-script shell and its four output modes in this process, a plain.tsscript as a Node child process of its own over the source module with themainenvelope. It proves the script's behavior and output contract — process exit, streams, and signals included for a plain script — not the bundled artifact.workbench-surfaceprojects the compiled route graph the way the dev server serves it to the Workbench — route catalog, state, lifecycle fixtures, page availability — without a browser or a dev server. It proves what the Workbench would be given, not that the Workbench rendered it.packed-stdioinstalls the packed release tarball into a clean consumer, spawns the generated stdio entry as a real process, and drives it with a real MCP client. This is the packed process-and-protocol evidence level.packed-deleted-sourcecarries thepacked-stdioproof after project source and configuration have been removed and verified absent. It proves that the generated entry is self-contained; it does not prove native-host install or dispatch, or an install mode that copies the artifact elsewhere.browser-appcompiles MCP App HTML through the production Rsbuild profile and mounts it over the product bridge in a real browser page. It does not prove host embedding, a packed artifact, or Workbench behavior.simulatedstages an emitted bundle directly into an isolated host-shaped root and spawns its MCP command. It does not prove a host-owned install.host-installinstalls a built bundle into an isolated real host home through the public install path and observes registration through the host's own CLI. It does not prove session behavior or packed provenance.
ApplicationGroup
ApplicationGroup =
Readonly<{key:string;kind:"mcp";label:"MCP";servers: readonlyApplicationServerGroup[]; }> |Readonly<{key:string;kind:Exclude<ApplicationGroupKind,"mcp">;label:string;leaves: readonlyApplicationLeaf[]; }>
ApplicationGroupKind
ApplicationGroupKind =
"cli"|"events"|"mcp"|"rules"|"scripts"|"skills"
ApplicationLeafExecution
ApplicationLeafExecution =
"invoke"|"preview"|"document"
ClaudePluginCommandResult
ClaudePluginCommandResult =
BoundedChildProcessResult<ClaudePluginTermination>
ClaudePluginCommandRunner
ClaudePluginCommandRunner = (
request) =>Promise<ClaudePluginCommandResult>
Parameters
request
BoundedChildProcessRequest
Returns
Promise<ClaudePluginCommandResult>
ClaudePluginValidationStatus
ClaudePluginValidationStatus =
"failed"|"passed"|"unavailable"|"warnings"
CodexPluginCommandResult
CodexPluginCommandResult =
BoundedChildProcessResult<CodexPluginTermination>
CodexPluginCommandRunner
CodexPluginCommandRunner = (
request) =>Promise<CodexPluginCommandResult>
Parameters
request
BoundedChildProcessRequest
Returns
Promise<CodexPluginCommandResult>
CodexPluginValidationStatus
CodexPluginValidationStatus =
"failed"|"passed"|"unavailable"|"warnings"
ContractAppCoverage
ContractAppCoverage =
"auto"|"explicit"
How MCP App routes are covered at boundaries that register app resources.
'auto'(default): app routes need no fixture entry;coveragepasses and the sweep reads the compiledui://resource. Explicit entries are still accepted.'explicit': every compiled app route must have a fixture entry ({ kind: 'resource' }), matching the rule for every other route kind.
Has no effect at mcp-in-memory, where apps are never registered.
ContractCheckStatus
ContractCheckStatus =
"failed"|"not-applicable"|"passed"
ContractEventRuntimeAddress
ContractEventRuntimeAddress = {
endpoint:string;endpointId?:never; } | {endpoint?:never;endpointId:string; }
ContractLifecyclePhase
ContractLifecyclePhase =
"unknown"|"queued"|"running"|"first-progress"|"repeated-progress"|"terminal"
ContractMatrixClient
ContractMatrixClient =
Pick<Client,"callTool"|"getPrompt"|"listPrompts"|"listResources"|"listTools"|"readResource"> &Partial<ContractMatrixProgressSource>
ContractMatrixProvenance
ContractMatrixProvenance =
DevEpochMcpProvenance|InstalledHostMcpProvenance|McpProjectionProvenance|PackedMcpProvenance
ContractRouteFixtures
ContractRouteFixtures =
{ readonly [Id in RegisteredRouteId]?: ContractRouteFixture<RegisteredRouteInput<Id>> }&object
Route id -> fixture, the fixtures member of every contract-matrix entry
point. Once the generated .agent-bundle/routes.d.ts registers the
project's routes, a registered id's fixture carries that route's registered
input in input, inputs, cancellation.input, and its lifecycle
transitions (a mistyped literal is rejected at the key), while any other
key — an MCP App route, which the registration never lists, or a value typed
Record<string, ContractRouteFixture> built dynamically — stays legal with
unknown inputs, exactly as before. Without a registration every key is a
string and every input unknown.
CursorPluginCommandResult
CursorPluginCommandResult =
BoundedChildProcessResult<CursorPluginTermination>
CursorPluginCommandRunner
CursorPluginCommandRunner = (
request) =>Promise<CursorPluginCommandResult>
Parameters
request
BoundedChildProcessRequest
Returns
Promise<CursorPluginCommandResult>
CursorPluginValidationStatus
CursorPluginValidationStatus =
"failed"|"passed"|"unavailable"|"warnings"
DocumentSubject
DocumentSubject =
AgentDocument|RenderedRoute
HarnessOptionsArguments
HarnessOptionsArguments<
Options> = readonly [Options]
The trailing options parameter of every harness entry point. It is always optional: a call that omits it mounts the project's conventional providers exactly as the generated request scopes do (see RenderRouteContextInit).
Type Parameters
Options
Options
InMemoryMcpSessionOptions
InMemoryMcpSessionOptions<
TState,TEvents> =InMemoryMcpSessionOptionsBase<TState,TEvents> &RenderRouteContextInit
Session options; context holds the request-scoped overrides applied to
every route render in this session; omitting it (or its providers) mounts
the project's conventional providers exactly as the generated server does
(see RenderRouteContextInit).
Type Parameters
TState
TState = unknown
TEvents
TEvents extends AgentStateEventSchemas = AgentStateEventSchemas
InstalledHostBinaryVersion
InstalledHostBinaryVersion = {
status:"observed";value:string; } | {reason:string;status:"unavailable"; }
InstalledHostCheckName
InstalledHostCheckName =
"component-paths"|"hook-commands"|"manifest-schema"|"mcp-command"|"resources"|"version-digests"|"version-quadruple"
InvokeCliOptions
InvokeCliOptions =
InvokeCliOptionsBase&RenderRouteContextInit
Dispatch options; context carries the request-scope overrides for the
dispatched command over the runtime's request contract; omitting it (or its
providers) mounts the project's conventional providers exactly as the
generated executable does (see RenderRouteContextInit).
LoadRouteModuleConstraint
LoadRouteModuleConstraint<
Target> =stringextendsTarget?string:RegisteredRouteId|`script:${string}`
The constraint one loadRouteModule id must satisfy. Conventional scripts
are loadable but are not part of the generated route registration
(.agent-bundle/routes.d.ts registers tool, resource, prompt, CLI, and
event routes), so a script: literal is admitted unchecked while every
other literal is checked against the registered ids exactly as renderRoute
checks its target; a value typed string stays legal for dynamic lookups,
and without a registration every string is legal. The union is spelled
inline so a rejection lists the registered ids rather than an alias name.
Type Parameters
Target
Target
McpInvocationOptions
McpInvocationOptions<
Input,Server> =InMemoryMcpSessionOptions&object
Options of one wire invocation. Input is the payload a caller sends over
the wire — the route's inputSchema input, before the server parses it into
what the route receives: invokeMcpTool and getMcpPrompt bind it to the
route's registered input (McpRouteInput) when the name is a literal, and
it stays unknown — the previous shape — for a dynamic name or an
unregistered project. Server is the literal server option, when given;
it selects which server's route the name resolves to.
Type Declaration
input?
readonlyoptionalinput?:Input
server?
readonlyoptionalserver?:Server&McpServerConstraint<Server> |McpServerConstraint<Server>
Type Parameters
Input
Input = unknown
Server
Server extends string = string
McpRouteInput
McpRouteInput<
Name,Kind,Server> =NameextendsRegisteredMcpRouteName<Kind,McpRouteServer<Server>> ?RegisteredRouteInput<RegisteredMcpRouteId<Kind,McpRouteServer<Server>,Name>> :unknown
The registered input of the Kind route named Name on Server — on any
compiled server when Server is string, a union when two of them register
the same name; unknown for a dynamic name or an unregistered project.
Type Parameters
Name
Name extends string
Kind
Kind extends RegisteredMcpRouteKind
Server
Server extends string = string
McpRouteNameConstraint
McpRouteNameConstraint<
Name,Kind,Server> =stringextendsName?string:RegisteredMcpRouteName<Kind,McpRouteServer<Server>> &string
The constraint one protocol name must satisfy — RouteTargetConstraint for
the wire helpers. Once the generated .agent-bundle/routes.d.ts registers
the project's routes, a string literal must be the protocol name of a
registered Kind route on Server (find for tool:curator/find; the
editor completes them and a typo is rejected naming the alternatives) —
on any compiled server when server is omitted or dynamic — while a value
typed string stays legal for dynamic lookups. Without a registration
RegisteredMcpRouteName is string, so every name is legal, as before.
The & string is not a widening: it makes the compiler reduce the alias
instantiation to a fresh literal union, so a rejection lists the registered
names rather than printing RegisteredMcpRouteName<"tool">.
Type Parameters
Name
Name
Kind
Kind extends RegisteredMcpRouteKind
Server
Server extends string = string
McpRouteServer
McpRouteServer<
Server> =ServerextendsRegisteredMcpServerName?Server:string
The server the wire helpers look a name up on: a registered literal narrows
the lookup to that server's routes; string (omitted or dynamic) and an
unregistered literal — already rejected by McpServerConstraint —
match every compiled server, so the one error lands on server.
Type Parameters
Server
Server extends string
McpServerConstraint
McpServerConstraint<
Server> =stringextendsServer?string:RegisteredMcpServerName&string
The constraint a server option must satisfy: once the project's routes
are registered, a literal must name a compiled server (curator for
tool:curator/find; a typo is rejected naming the alternatives), while a
value typed string stays legal. string for an unregistered project.
Type Parameters
Server
Server
RenderableRouteKind
RenderableRouteKind =
"cli"|"event-route"|"prompt"|"resource"|"script"|"tool"
The route kinds the route-unit level renders. app routes are browser
surfaces, so the browser proof level owns them; every other compiled kind
renders here the way the generated server renders it.
RenderEventSubject
RenderEventSubject = readonly
AgentRenderEvent[] | {events: readonlyAgentRenderEvent[];provenance?:RenderedRouteProvenance; }
Anything that carries render events: the raw array or a harness result.
RenderRouteContext
RenderRouteContext =
Omit<AgentRequestInit,"invocation"|"progress"|"providers"|"signal"> &object
Request-scoped overrides for one rendered route, over the runtime's own
request contract. host, session, actor, workspace, and
capabilities are the identity-injection seam for context-dependent route
tests; construct observed values with available or unavailable from
@agent-bundle/runtime. providers is the opt-out for conventional
provider discovery: supplied values seed provider(key); otherwise the harness
loads requested factories from src/providers/* as generated scopes do. It stays optional even once the generated
.agent-bundle/routes.d.ts augmentation declares provider keys — omitting
it runs requested providers, which is the artifact's behavior — while an
explicit map seeds only the keys the test supplies, so a fixture can leave
a promised value undefined.
Type Declaration
invocation?
readonlyoptionalinvocation?:Omit<AgentInvocationInput,"kind">
progress?
readonlyoptionalprogress?:AgentProgressReporter
providers?
readonlyoptionalproviders?:Partial<AgentProviderValues>
RenderRouteContextInit
RenderRouteContextInit =
object
Optional request context; explicit provider values replace conventional discovery.
Properties
context?
readonlyoptionalcontext?:RenderRouteContext
RenderRouteOptions
RenderRouteOptions<
Target> =RenderRouteOptionsBase<Target> &RenderRouteContextInit
Type Parameters
Target
Target = RenderRouteTarget
RenderRouteTarget
RenderRouteTarget =
AgentRouteModule|string
What renderRoute accepts: a route module rendered directly, or a route id.
ResultCompatPolicy
ResultCompatPolicy =
"additive"|"closed"
Declared serialized-result compatibility policy for tool routes.
RouteTargetConstraint
RouteTargetConstraint<
Target> =TargetextendsAgentRouteModule?AgentRouteModule:stringextendsTarget?string:RegisteredRouteId
The constraint one target must satisfy. Once the generated
.agent-bundle/routes.d.ts registers the project's routes on
@agent-bundle/runtime's Register, a string literal must be one of the
registered ids (the editor completes them and a typo is rejected naming the
alternatives), while a value typed string stays legal for dynamic lookups
and a module target is unaffected. Without a registration RegisteredRouteId
is string, so every string is legal, exactly as before.
renderRoute infers Target from a literal while checking it against this
constraint through TanStack Router's ConstrainLiteral shape,
(Target & Constraint) | Constraint, spelled inline in each signature so the
rejection message lists the registered ids rather than an alias name.
Type Parameters
Target
Target
RouteTargetInput
RouteTargetInput<
Target> =TargetextendsRegisteredRouteId?RegisteredRouteInput<Target> :unknown
The registered input type of a route target; unknown for a module target, a dynamic string, or an unregistered project.
Type Parameters
Target
Target
RouteTargetParsedInput
RouteTargetParsedInput<
Target> =TargetextendsRegisteredRouteId?RegisteredRouteParsedInput<Target> :unknown
The registered parsed input of a route target — what its component receives after defaults and transforms; unknown when unregistered.
Type Parameters
Target
Target
RouteTargetResult
RouteTargetResult<
Target> =TargetextendsRegisteredRouteId?RegisteredRouteResult<Target> :unknown
The registered result type of a route target; unknown for a module target, a dynamic string, or an unregistered project.
Type Parameters
Target
Target
RunScriptOptions
RunScriptOptions =
RunScriptOptionsBase&RenderRouteContextInit
Run options. context carries the request-scope overrides for a rendered
script over the runtime's request contract (see RenderRouteContextInit):
omitted, the harness mounts the project's src/providers/* with the
script invocation exactly as the generated executable does before the
component renders, and context.providers substitutes a fixture map. A
plain script has no request scope and accepts no context.
ScriptExecution
ScriptExecution =
"main-envelope"|"rendered-shell"|"self-executing"
How one script module executed at this level.
Variables
AGENT_TEST_REGISTRY_VERSION
constAGENT_TEST_REGISTRY_VERSION:7=7
Bumped whenever the registry layout changes so a setup module and the
helpers reading it never silently disagree about what the registry carries.
4: providerLoaders (conventional context providers mounted by the harness).
5: layoutLoaders (conventional layouts composed around manifest renders).
6: manifest.scripts (the script-dispatch level's inventory).
7: projectionLoaders (explicit CLI projection modules).
BROWSER_APP_PROOF_LEVEL
constBROWSER_APP_PROOF_LEVEL:"browser-app"
agent-bundle/test — the consumer test harness helpers.
Ten Node proof levels ship here, and the browser-safe eleventh level ships
from agent-bundle/test/browser. The repository's real-host install proof
uses the same level convention. Each helper names the level it supplies,
stamps it into its provenance, and prints it in every failure:
Contract-matrix fixtures cover every compiled tool, prompt, and resource
route. App routes are auto-covered (apps: 'auto', the default) wherever
they are registered; { kind: 'resource' } names one explicitly and
apps: 'explicit' requires that for every app route.
A pass at one level is never a receipt for another. The deletedSource
option upgrades openPackedMcpServer provenance only after every path in a
non-empty removal receipt is verified absent immediately before spawn.
CLI_DISPATCH_PROOF_LEVEL
constCLI_DISPATCH_PROOF_LEVEL:"cli-dispatch"
agent-bundle/test — the consumer test harness helpers.
Ten Node proof levels ship here, and the browser-safe eleventh level ships
from agent-bundle/test/browser. The repository's real-host install proof
uses the same level convention. Each helper names the level it supplies,
stamps it into its provenance, and prints it in every failure:
Contract-matrix fixtures cover every compiled tool, prompt, and resource
route. App routes are auto-covered (apps: 'auto', the default) wherever
they are registered; { kind: 'resource' } names one explicitly and
apps: 'explicit' requires that for every app route.
A pass at one level is never a receipt for another. The deletedSource
option upgrades openPackedMcpServer provenance only after every path in a
non-empty removal receipt is verified absent immediately before spawn.
cliJson
constcliJson: (invocation) =>unknown
The parsed canonical JSON line a successful command wrote to stdout.
Parameters
invocation
Returns
unknown
cliNdjson
constcliNdjson: (invocation) => readonlyCliRenderedEvent[]
The ordered render events a successful --ndjson invocation wrote to stdout.
Parameters
invocation
Returns
readonly CliRenderedEvent[]
compileTestManifest
constcompileTestManifest: (options?) =>Promise<AgentBundleTestManifest>
Compiles one project's test manifest from the same preparation the build
and inspect run: configuration load, conventional discovery (which owns
route-graph compilation), normalization, and validation. No artifact is
built and no bundler runs, so route-unit tests get the manifest without a
build.
The compiler is reached through a dynamic import on purpose: the generated Rstest configuration compiles the manifest once in the runner process and hands it to workers, so a test worker that only renders routes never loads the compiler at all.
Parameters
options?
Returns
Promise<AgentBundleTestManifest>
createEventRouteInput
constcreateEventRouteInput: <E>(event,native,options) =>AgentEventRouteInput<E>
Builds the renderRoute input of an event route from one host-native
envelope, exactly as the generated wrapper does: the envelope is validated
per host and event, frozen as native, and projected into the family's
canonical payload through the same table the artifact uses (#466). A
route test therefore reads canonical.payload.toolName from a real Claude,
Codex, or Cursor fixture instead of hand-writing the identity.
Type Parameters
E
E extends CanonicalAgentEvent
Parameters
event
E
native
Readonly<Record<string, unknown>>
options
Returns
createTargetCapabilityFixture
constcreateTargetCapabilityFixture: (input) =>TargetCapabilityFixture
Creates an immutable, explicit fixture. No rich capability defaults to supported: callers must choose every boolean and the fallback policy.
Parameters
input
Returns
DEV_EPOCH_PROOF_LEVEL
constDEV_EPOCH_PROOF_LEVEL:"dev-epoch"
agent-bundle/test — the consumer test harness helpers.
Ten Node proof levels ship here, and the browser-safe eleventh level ships
from agent-bundle/test/browser. The repository's real-host install proof
uses the same level convention. Each helper names the level it supplies,
stamps it into its provenance, and prints it in every failure:
Contract-matrix fixtures cover every compiled tool, prompt, and resource
route. App routes are auto-covered (apps: 'auto', the default) wherever
they are registered; { kind: 'resource' } names one explicitly and
apps: 'explicit' requires that for every app route.
A pass at one level is never a receipt for another. The deletedSource
option upgrades openPackedMcpServer provenance only after every path in a
non-empty removal receipt is verified absent immediately before spawn.
expectDocument
constexpectDocument: (subject) =>DocumentAssertions
Parameters
subject
Returns
expectEvents
constexpectEvents: (subject) =>RenderEventAssertions
Parameters
subject
Returns
getMcpPrompt
constgetMcpPrompt: <Name,Server>(prompt, ...[options]) =>Promise<McpPromptResult>
Gets one compiled prompt route through the real protocol. prompt is the
wire name (brief for prompt:curator/brief); once registered, a literal
is checked against the compiled prompt names (of the literal server, when
passed) and input is typed from that route's inputSchema, exactly as
invokeMcpTool types a tool.
Type Parameters
Name
Name extends string
Server
Server extends string = string
Parameters
prompt
Name & McpRouteNameConstraint<Name, "prompt", Server> | McpRouteNameConstraint<Name, "prompt", Server>
[options]
...HarnessOptionsArguments<McpInvocationOptions<McpRouteInput<Name, "prompt", Server>, Server>>
Returns
Promise<McpPromptResult>
HOST_INSTALL_PROOF_LEVEL
constHOST_INSTALL_PROOF_LEVEL:"host-install"
agent-bundle/test — the consumer test harness helpers.
Ten Node proof levels ship here, and the browser-safe eleventh level ships
from agent-bundle/test/browser. The repository's real-host install proof
uses the same level convention. Each helper names the level it supplies,
stamps it into its provenance, and prints it in every failure:
Contract-matrix fixtures cover every compiled tool, prompt, and resource
route. App routes are auto-covered (apps: 'auto', the default) wherever
they are registered; { kind: 'resource' } names one explicitly and
apps: 'explicit' requires that for every app route.
A pass at one level is never a receipt for another. The deletedSource
option upgrades openPackedMcpServer provenance only after every path in a
non-empty removal receipt is verified absent immediately before spawn.
inspectWorkbenchSurface
constinspectWorkbenchSurface: (options?) =>Promise<WorkbenchSurface>
Runs the dev server's own preparation for one project and projects it the way the Workbench receives it. No artifact is built and no server starts.
This is the workbench-surface proof level.
Parameters
options?
InspectWorkbenchSurfaceOptions
Returns
Promise<WorkbenchSurface>
invokeCli
constinvokeCli: (argv, ...[options]) =>Promise<CliInvocation>
Dispatches one argv vector through the routed CLI shell in this process and returns its exit code, streams, and validated result.
This is the cli-dispatch proof level. Nothing is spawned.
Parameters
argv
readonly string[]
[options]
...HarnessOptionsArguments<InvokeCliOptions>
Returns
Promise<CliInvocation>
invokeMcpTool
constinvokeMcpTool: <Name,Server>(tool, ...[options]) =>Promise<McpToolInvocation>
Calls one compiled tool through the real protocol and returns the projected
result. mcp-in-memory level: protocol contract proof, not process proof.
tool is the wire name (find for the route tool:curator/find). Once
the project's routes are registered, a literal is checked against the
compiled tool names — of the literal server when one is passed, since
the session mounts only that server's routes — and input is typed from
that route's inputSchema (see McpRouteNameConstraint). The
projected structuredContent stays unknown: the wire carries it only for
object-valued documents, so the route's resultSchema output is not what
every call yields.
Type Parameters
Name
Name extends string
Server
Server extends string = string
Parameters
tool
Name & McpRouteNameConstraint<Name, "tool", Server> | McpRouteNameConstraint<Name, "tool", Server>
[options]
...HarnessOptionsArguments<McpInvocationOptions<McpRouteInput<Name, "tool", Server>, Server>>
Returns
Promise<McpToolInvocation>
listMcpSurface
constlistMcpSurface: (...[options]) =>Promise<McpSurfaceListing>
Lists what the generated server actually registered — the cheapest proof that a compiled route reached the protocol at all.
Parameters
[options]
...HarnessOptionsArguments<InMemoryMcpSessionOptions>
Returns
Promise<McpSurfaceListing>
loadRouteModule
constloadRouteModule: <Target>(routeId, ...[options]) =>Promise<LoadedRouteModule<Target>>
Loads the evaluated module of one compiled route by its id, through the
lazy loader the generated Rstest setup registered for it — the loader
renderRoute uses. This is the supported replacement for a hand-maintained
list of static import * as m from '../../src/mcp/<server>/tools/<tool>'
statements in a schema-identity suite: iterate testManifest().routes and
load each id instead (#493).
The id is checked against the registered route ids exactly as renderRoute
checks its target, so a removed placement is a type error (script: ids are
not registered and pass unchecked; see LoadRouteModuleConstraint). Outside a pool
built with agentBundleRstest() it throws manifest-unavailable, and a
manifest describing another project rejects with the same mismatch report
renderRoute gives: route loaders are bound to the compilation that
produced them. Every renderable kind loads — tools, resources, prompts,
event routes, CLI commands, and scripts; App routes are browser builds and
are not loadable here (unsupported-route-kind).
Type Parameters
Target
Target extends string
Parameters
routeId
Target & LoadRouteModuleConstraint<Target> | LoadRouteModuleConstraint<Target>
[options]
...HarnessOptionsArguments<LoadRouteModuleOptions>
Returns
Promise<LoadedRouteModule<Target>>
MCP_IN_MEMORY_PROOF_LEVEL
constMCP_IN_MEMORY_PROOF_LEVEL:"mcp-in-memory"
agent-bundle/test — the consumer test harness helpers.
Ten Node proof levels ship here, and the browser-safe eleventh level ships
from agent-bundle/test/browser. The repository's real-host install proof
uses the same level convention. Each helper names the level it supplies,
stamps it into its provenance, and prints it in every failure:
Contract-matrix fixtures cover every compiled tool, prompt, and resource
route. App routes are auto-covered (apps: 'auto', the default) wherever
they are registered; { kind: 'resource' } names one explicitly and
apps: 'explicit' requires that for every app route.
A pass at one level is never a receipt for another. The deletedSource
option upgrades openPackedMcpServer provenance only after every path in a
non-empty removal receipt is verified absent immediately before spawn.
mountTestState
constmountTestState: <TState,TEvents>(...[options]) =>Promise<MountedTestState<TState,TEvents>>
Mounts the project's state definition and notice ledger once, for a journey
that spans several renders — record on one event, read on the next — where
the fresh per-render owner renderRoute mounts by default would forget
everything between calls. The same driver rules apply: a
workspace-durable definition opens a disposable sqlite root that close()
removes; every other lifetime uses the memory driver. renderRoute and
renderRouteEvents honour a caller-supplied state and noticeLedger, so
spreading context() into each render's context is the whole wiring; a
render that omits them still mounts its own isolated owner. Each render
that receives the handles binds the shared owner to its own request
signal, exactly as a generated request scope does, so a render's signal
still cancels its state operations; read(), notices(), and the handles
themselves are bound to options.signal. The owner is held as one request's
bindings, so a request-lifetime definition behaves as one long request.
Always close() it (or use withTestState).
Type Parameters
TState
TState = unknown
TEvents
TEvents extends AgentState.AgentStateEventSchemas = AgentState.AgentStateEventSchemas
Parameters
[options]
...HarnessOptionsArguments<MountTestStateOptions<TState, TEvents>>
Returns
Promise<MountedTestState<TState, TEvents>>
negativeInputsFromJsonSchema
constnegativeInputsFromJsonSchema: (schema) => readonlyobject[] |undefined
Derives negative input cases from a tool's ADVERTISED input JSON Schema — the
wire contract from listTools, not the route module's zod source.
Generates, when the schema has top-level object structure:
- one unknown-extra-key case
- one missing-required-property case per required field
- one wrong-JSON-type case per typed top-level property
Unknown-extra-key tolerance: when the advertised schema declares
additionalProperties: false, plain z.object tool routes may still strip
unknown keys without a protocol failure. The negative-inputs check records
that acceptance when other generated negatives still prove rejection paths.
Does NOT prove deep nested validation, format constraints, or enum exhaustiveness beyond the top-level object shape the MCP SDK advertises.
Parameters
schema
Record<string, unknown>
Returns
readonly object[] | undefined
openInMemoryMcpServer
constopenInMemoryMcpServer: <TState,TEvents>(...[options]) =>Promise<InMemoryMcpSession>
Opens a real MCP client against the real generated server for one compiled MCP surface, over the SDK's in-memory transport pair.
Compiled MCP Apps are deliberately not registered: their HTML is a browser build output, and claiming an App resource without it would be exactly the fake this level must not become. App surfaces belong to the browser level.
Type Parameters
TState
TState = unknown
TEvents
TEvents extends AgentStateEventSchemas = AgentStateEventSchemas
Parameters
[options]
...HarnessOptionsArguments<InMemoryMcpSessionOptions<TState, TEvents>>
Returns
Promise<InMemoryMcpSession>
openInstalledHostMcpServer
constopenInstalledHostMcpServer: (options) =>Promise<InstalledHostMcpSession>
Discovers an emitted MCP command from a host-owned installed layout, checks the artifact/install boundary, then opens a real stdio client session.
The running-process version is read only from the live initialize result. The helper also derives the installed generated event-runtime socket so the shared matrix can read WarmRuntimeIdentity without crossing into source.
Parameters
options
OpenInstalledHostMcpServerOptions
Returns
Promise<InstalledHostMcpSession>
openPackedMcpServer
constopenPackedMcpServer: (options) =>Promise<PackedMcpSession>
Spawns a built stdio MCP entry and connects a real MCP client to it.
The entry must already exist: build the artifact once per suite and reuse the session for every assertion. A connect failure reports the captured stderr, because a generated entry that dies on startup says why there and nowhere else.
Parameters
options
Returns
Promise<PackedMcpSession>
PACKED_DELETED_SOURCE_PROOF_LEVEL
constPACKED_DELETED_SOURCE_PROOF_LEVEL:"packed-deleted-source"
agent-bundle/test — the consumer test harness helpers.
Ten Node proof levels ship here, and the browser-safe eleventh level ships
from agent-bundle/test/browser. The repository's real-host install proof
uses the same level convention. Each helper names the level it supplies,
stamps it into its provenance, and prints it in every failure:
Contract-matrix fixtures cover every compiled tool, prompt, and resource
route. App routes are auto-covered (apps: 'auto', the default) wherever
they are registered; { kind: 'resource' } names one explicitly and
apps: 'explicit' requires that for every app route.
A pass at one level is never a receipt for another. The deletedSource
option upgrades openPackedMcpServer provenance only after every path in a
non-empty removal receipt is verified absent immediately before spawn.
PACKED_STDIO_PROOF_LEVEL
constPACKED_STDIO_PROOF_LEVEL:"packed-stdio"
agent-bundle/test — the consumer test harness helpers.
Ten Node proof levels ship here, and the browser-safe eleventh level ships
from agent-bundle/test/browser. The repository's real-host install proof
uses the same level convention. Each helper names the level it supplies,
stamps it into its provenance, and prints it in every failure:
Contract-matrix fixtures cover every compiled tool, prompt, and resource
route. App routes are auto-covered (apps: 'auto', the default) wherever
they are registered; { kind: 'resource' } names one explicitly and
apps: 'explicit' requires that for every app route.
A pass at one level is never a receipt for another. The deletedSource
option upgrades openPackedMcpServer provenance only after every path in a
non-empty removal receipt is verified absent immediately before spawn.
projectTargetCapabilities
constprojectTargetCapabilities: (rendered,fixture) =>Promise<TargetCapabilityProjection>
Reprojects a real route render-event stream through the runtime's
projectMcpRenderStream, using exactly the capabilities and fallback the
fixture advertises.
Proof level: route-unit. The events came from the real Agent renderer and
the projection is real, but no MCP transport, packed artifact, or host is
involved. A denied rich block either becomes the runtime's exact text
placeholder or fails closed; this helper never marks it as accepted.
Parameters
rendered
fixture
Returns
Promise<TargetCapabilityProjection>
proofLevelLabel
constproofLevelLabel: (level) =>string
One line per level, printed in every harness failure. A red test has to say what the passing case would have proven, or the level discipline is only a naming convention.
Parameters
level
Returns
string
readMcpResource
constreadMcpResource: (uri, ...[options]) =>Promise<McpResourceRead>
Reads one compiled resource route by URI through the real protocol.
Parameters
uri
string
[options]
...HarnessOptionsArguments<InMemoryMcpSessionOptions>
Returns
Promise<McpResourceRead>
registerTestRoutes
constregisterTestRoutes: (registry) =>void
Parameters
registry
Returns
void
removeProjectSource
constremoveProjectSource: (options) =>Promise<DeletedSourceReceipt>
Removes a consumer project's conventional source inputs and verifies their absence before minting deleted-source evidence.
The default set is src plus every root agent-bundle.config.* entry;
callers may add project-relative paths for non-conventional inputs. A
project with nothing to remove is refused, because absence observed without
a deletion is not evidence that the artifact survived source removal.
Parameters
options
extraPaths?
readonly string[]
projectRoot
string
Returns
Promise<DeletedSourceReceipt>
renderRoute
constrenderRoute: <Target>(target, ...[options]) =>Promise<RenderedRoute<Target>>
Renders one route through the real Agent renderer and returns its final Agent Document. The route component executes inside a real request scope, its output is encoded as React Flight, and the runtime's own final-only dispatcher decodes it — the harness owns no second rendering path.
This is the route-unit proof level: no transport is opened, no browser surface is compiled, and no host artifact is built.
Type Parameters
Target
Target extends RenderRouteTarget
Parameters
target
Target & RouteTargetConstraint<Target> | RouteTargetConstraint<Target>
[options]
...HarnessOptionsArguments<RenderRouteOptions<Target>>
Returns
Promise<RenderedRoute<Target>>
renderRouteEvents
constrenderRouteEvents: <Target>(target, ...[options]) =>Promise<RenderedRouteEvents<Target>>
Renders one route and collects the ordered render-event stream (#140)
alongside the final document, for the event matchers in
agent-bundle/test. Same proof level and same renderer as
renderRoute: this drains the dispatcher's public event stream
rather than its final-only entry point.
Type Parameters
Target
Target extends RenderRouteTarget
Parameters
target
Target & RouteTargetConstraint<Target> | RouteTargetConstraint<Target>
[options]
...HarnessOptionsArguments<RenderRouteOptions<Target>>
Returns
Promise<RenderedRouteEvents<Target>>
ROUTE_UNIT_PROOF_LEVEL
constROUTE_UNIT_PROOF_LEVEL:"route-unit"
agent-bundle/test — the consumer test harness helpers.
Ten Node proof levels ship here, and the browser-safe eleventh level ships
from agent-bundle/test/browser. The repository's real-host install proof
uses the same level convention. Each helper names the level it supplies,
stamps it into its provenance, and prints it in every failure:
Contract-matrix fixtures cover every compiled tool, prompt, and resource
route. App routes are auto-covered (apps: 'auto', the default) wherever
they are registered; { kind: 'resource' } names one explicitly and
apps: 'explicit' requires that for every app route.
A pass at one level is never a receipt for another. The deletedSource
option upgrades openPackedMcpServer provenance only after every path in a
non-empty removal receipt is verified absent immediately before spawn.
runContractMatrix
construnContractMatrix: (options) =>Promise<ContractMatrixReport>
Runs the contract matrix against one compiled MCP server at the
mcp-in-memory proof level. Returns a per-route report; throws one
aggregated AgentTestError with code contract-violation when any check
failed (never first-failure-only).
Parameters
options
Returns
Promise<ContractMatrixReport>
runDevEpochContractMatrix
construnDevEpochContractMatrix: (options) =>Promise<ContractMatrixReport>
Runs #218 stage 4's shared matrix against an already-open dev epoch session. The caller owns the epoch lease and process lifetime so host adoption can settle without replacing or dropping an existing live host connection.
Parameters
options
Returns
Promise<ContractMatrixReport>
runInstalledHostContractMatrix
construnInstalledHostContractMatrix: (options) =>Promise<InstalledHostContractMatrixReport>
Runs the shared contract matrix over an already-open MCP process discovered and spawned from a host-owned installed layout. The returned report carries the separately observed source/artifact/installed/running version evidence.
Parameters
options
InstalledHostContractMatrixOptions
Returns
Promise<InstalledHostContractMatrixReport>
runPackedContractMatrix
construnPackedContractMatrix: (options) =>Promise<ContractMatrixReport>
Runs the contract matrix against an already-open packed stdio session.
Never opens or closes the session; stamps the session's own proof level.
Compiled MCP App routes are covered here (surface + ui:// sweep) and
auto-covered without a fixture entry unless apps: 'explicit'.
Parameters
options
Returns
Promise<ContractMatrixReport>
runScript
construnScript: (name,argv?, ...[options]) =>Promise<ScriptInvocation>
Runs one conventional script through its generated-executable contract — a rendered script in this process, a plain script as a Node process of its own over the source — and returns its exit code, streams, and (for rendered scripts) the completed document value.
This is the script-dispatch proof level. Nothing is bundled.
Parameters
name
string
argv?
readonly string[]
[options]
...HarnessOptionsArguments<RunScriptOptions>
Returns
Promise<ScriptInvocation>
SCRIPT_DISPATCH_PROOF_LEVEL
constSCRIPT_DISPATCH_PROOF_LEVEL:"script-dispatch"
agent-bundle/test — the consumer test harness helpers.
Ten Node proof levels ship here, and the browser-safe eleventh level ships
from agent-bundle/test/browser. The repository's real-host install proof
uses the same level convention. Each helper names the level it supplies,
stamps it into its provenance, and prints it in every failure:
Contract-matrix fixtures cover every compiled tool, prompt, and resource
route. App routes are auto-covered (apps: 'auto', the default) wherever
they are registered; { kind: 'resource' } names one explicitly and
apps: 'explicit' requires that for every app route.
A pass at one level is never a receipt for another. The deletedSource
option upgrades openPackedMcpServer provenance only after every path in a
non-empty removal receipt is verified absent immediately before spawn.
scriptJson
constscriptJson: (invocation) =>unknown
The parsed canonical JSON line a successful --json rendered-script run wrote to stdout.
Parameters
invocation
Returns
unknown
scriptNdjson
constscriptNdjson: (invocation) => readonlyCliRenderedEvent[]
The ordered render events a successful --ndjson rendered-script run wrote to stdout.
Parameters
invocation
Returns
readonly CliRenderedEvent[]
SIMULATED_PROOF_LEVEL
constSIMULATED_PROOF_LEVEL:"simulated"
agent-bundle/test — the consumer test harness helpers.
Ten Node proof levels ship here, and the browser-safe eleventh level ships
from agent-bundle/test/browser. The repository's real-host install proof
uses the same level convention. Each helper names the level it supplies,
stamps it into its provenance, and prints it in every failure:
Contract-matrix fixtures cover every compiled tool, prompt, and resource
route. App routes are auto-covered (apps: 'auto', the default) wherever
they are registered; { kind: 'resource' } names one explicitly and
apps: 'explicit' requires that for every app route.
A pass at one level is never a receipt for another. The deletedSource
option upgrades openPackedMcpServer provenance only after every path in a
non-empty removal receipt is verified absent immediately before spawn.
testManifest
consttestManifest: () =>AgentBundleTestManifest
The manifest the generated configuration registered for this test process. Throws with the wiring step when nothing is registered — a silent empty manifest would read as "this project declares no routes".
Returns
testManifestFromRouteGraph
consttestManifestFromRouteGraph: (input) =>AgentBundleTestManifest
Projects the compiled route graph into the manifest the harness addresses.
The graph is an input here, never recompiled: one compiler pass feeds the
build, inspect, and the harness alike.
Parameters
input
apps?
readonly NormalizedMcpApp[]
configPath?
string
diagnostics?
readonly Diagnostic[]
graph
plugin?
projectRoot
string
scripts?
readonly NormalizedScript[]
The normalized script inventory; its config-provenance entries decide which conventional routes conflict.
state?
NormalizedStateDefinition
targets?
readonly string[]
Returns
withTestState
constwithTestState: <TState,TEvents,T>(run, ...[options]) =>Promise<T>
mountTestState scoped to one callback: the mounted state is closed
— and its disposable root removed — when run settles, whether it resolved
or threw.
Type Parameters
TState
TState = unknown
TEvents
TEvents extends AgentState.AgentStateEventSchemas = AgentState.AgentStateEventSchemas
T
T = void
Parameters
run
(state) => Promise<T>
[options]
...HarnessOptionsArguments<MountTestStateOptions<TState, TEvents>>
Returns
Promise<T>
WORKBENCH_SURFACE_PROOF_LEVEL
constWORKBENCH_SURFACE_PROOF_LEVEL:"workbench-surface"
agent-bundle/test — the consumer test harness helpers.
Ten Node proof levels ship here, and the browser-safe eleventh level ships
from agent-bundle/test/browser. The repository's real-host install proof
uses the same level convention. Each helper names the level it supplies,
stamps it into its provenance, and prints it in every failure:
Contract-matrix fixtures cover every compiled tool, prompt, and resource
route. App routes are auto-covered (apps: 'auto', the default) wherever
they are registered; { kind: 'resource' } names one explicitly and
apps: 'explicit' requires that for every app route.
A pass at one level is never a receipt for another. The deletedSource
option upgrades openPackedMcpServer provenance only after every path in a
non-empty removal receipt is verified absent immediately before spawn.
workbenchCommandUsage
constworkbenchCommandUsage: (command) =>string
The usage line the route workspace renders: positionals in order, then flags, required ones unbracketed.
Parameters
command
RouteManifestCliCommand
Returns
string
workbenchLeafPath
constworkbenchLeafPath: (leaf) =>string
The Workbench route for one application leaf.
Parameters
leaf
Returns
string
workbenchRouteCatalog
constworkbenchRouteCatalog: (manifest) =>WorkbenchRouteCatalog
The route catalog derived from one route manifest, by the Workbench's grouping rules.
Parameters
manifest
RouteManifest
Returns
workbenchSurfaceFromRouteGraph
constworkbenchSurfaceFromRouteGraph: (input) =>WorkbenchSurface
The pure projection behind inspectWorkbenchSurface: the same
routeManifestFor the dev server serves, grouped by the application tree's
rules, with Advanced availability applied over the declared counts.
Parameters
input
WorkbenchSurfaceFromGraphInput
Returns
References
AgentBundleTestManifest
Re-exports AgentBundleTestManifest
ClaudePluginValidationReport
Re-exports ClaudePluginValidationReport
CliRenderedEvent
Re-exports CliRenderedEvent
CodexPluginValidationReport
Re-exports CodexPluginValidationReport
CursorPluginValidationReport
Re-exports CursorPluginValidationReport
TestableProviderDescriptor
Re-exports TestableProviderDescriptor
TestableRouteDescriptor
Re-exports TestableRouteDescriptor
TestableStateDescriptor
Re-exports TestableStateDescriptor
validateClaudePlugin
Re-exports validateClaudePlugin
validateCodexPlugin
Re-exports validateCodexPlugin
validateCursorPlugin
Re-exports validateCursorPlugin