@wframe/core
v1.4.0
Published
Infer a protocol state machine from black-box agent sessions, compile a safe deterministic driver, and prove it. No LLM on the learned path.
Maintainers
Readme
@wframe/core
Infer a protocol state machine from black-box agent sessions, compile a safe deterministic driver, and prove it. No LLM on the learned path.
Part of Wireframe. Full documentation: https://wframe.org/docs
Install
npm i @wframe/coreUse
import { Recorder, infer, compile } from '@wframe/core'
// 1. Record a few successful sessions. No SDK, no source code.
const recorder = new Recorder()
recorder.observe(session) // { steps: [{ verb, response }], outcome: 'success' }
// 2. Infer the protocol state machine (evidence-driven red-blue merging).
const model = infer(recorder.sessions)
// 3. Compile behind a coverage gate. Hold out some sessions to verify.
const { driver, report } = compile(model, { coverageGate: 0.95, heldOut })
if (!report.passed) throw new Error('coverage gate not met, keep recording')
// 4. Drive the learned path. Zero model calls. Escalate on anything unseen.
driver.start()
const r = driver.step(symbol) // { action } or { escalate: true }Versioned artifacts
Use compileArtifact when the driver must retain the evidence and settings needed for later
maintenance:
import { compileArtifact, recompile, diff, probe, MockAdapter } from '@wframe/core'
const v1 = compileArtifact('inventory', training, {
coverageGate: 0.95,
heldOut,
})
// Save v1.artifact as JSON. It is also accepted by Driver.fromJSON().
const next = recompile(v1.artifact, newlyRecordedSessions)
if (!next.accepted) {
console.error(next.refusal, next.report)
process.exit(1)
}
// next.artifact is version 2 and its parentHash is v1's contentHash.
const compatibility = diff(v1.artifact, next.artifact)
process.exitCode = compatibility.exitCode
// Probes replay only the sessions supplied here.
const live = await probe(v1.artifact, new MockAdapter(), selectedProbeSessions, {
maxSteps: 3,
})Public maintenance signatures:
compileArtifact(protocol, training, options)
loadArtifact(json, options?)
resolveArtifactAbstraction(artifact, baseAbstraction?)
driverContentHash(driver, abstractionConfig?)
recompile(parentArtifact, newSessions, options?)
diff(oldArtifact, newArtifact)
probe(artifact, adapter, sessions, options?)Artifacts keep the driver fields at the top level and add manifest, corpus, and settings.
This means existing Driver.fromJSON() calls continue to work. loadArtifact() also upgrades an old
bare-driver JSON document in memory as version 1 and computes its content hash. For legacy
recompilation, pass the old corpus with baseSessions if it is available.
recompile() deduplicates identical sessions and applies coverage, unsafe-continuation, and
forward-ambiguity gates. A failed candidate returns accepted:false, the report, and the failed gate
names. It does not return a replacement artifact.
diff() reports structural additions, removals, and relabels. Its interface verdict is compatible
only when every old reachable goal, command, command route, and command successor meaning remains
valid. exitCode is 0 for compatible and 1 for breaking.
probe() sends the commands in the caller-supplied sessions to a live adapter. Commands can have
side effects. Selecting a read-safe corpus is the caller's responsibility. The probe stops a session
at its first divergence and never sends a later command from that session. maxSteps limits the
number of commands sent from each supplied session.
License
MIT
