@fabric-harness/client
v6.2.0
Published
Typed HTTP client for TechFabric Harness servers: send durable agent submissions, observe conversations by offset, wait for settlements, invoke jobs.
Readme
@fabric-harness/client
Typed HTTP client for TechFabric Harness servers.
Agent interactions ride the durable submission lifecycle: send is fire-and-forget (202 +
submission id + offset-addressed stream), updates multiplexes durable records with token and
reasoning deltas over reconnecting SSE, reply reads a canonical response after settlement,
abort records a durable abort, and prompt is the synchronous convenience. Finite jobs support
synchronous results and durable run receipts.
npm install @fabric-harness/clientimport { createFabricClient } from '@fabric-harness/client';
const client = createFabricClient({
baseUrl: 'http://localhost:4317',
headers: { authorization: `Bearer ${process.env.FABRIC_HARNESS_TOKEN}` },
});
// Bind a durable conversation once.
const support = client.agent({ agent: 'support', id: 'user-42' });
const sent = await support.send('hello');
// Reattach in this or a later process using only the submission id.
const reply = await support.read(sent.submissionId, { timeoutMs: 30_000 });
console.log(reply.text);
// Live tail durable records plus transient token/reasoning deltas.
for await (const update of support.updates()) {
if (update.type === 'delta') process.stdout.write(update.delta);
}
// Synchronous convenience, and finite jobs.
const { result } = await client.agents.prompt({ agent: 'support', id: 'user-42', message: 'status?' });
const jobResult = await client.jobs.invoke('daily-report', { day: '2026-07-08' });
// Durable finite run: admit, inspect/observe, and abort without a long HTTP request.
const run = await client.jobs.invoke(
'daily-report',
{ day: '2026-07-08' },
{ wait: false, idempotencyKey: 'daily-report:2026-07-08' },
);
const status = await client.runs.get(run.runId);
const recent = await client.runs.list({ job: 'daily-report', limit: 20 });
for await (const event of client.runs.observe(run.runId)) console.log(event);
await client.runs.abort(run.runId);
// Durable abort for everything unsettled on the instance session.
await client.agents.abort({ agent: 'support', id: 'user-42' });Deployment conformance polls bounded transient health/readiness failures before invoking model or job routes:
import { assertDeploymentConformance } from '@fabric-harness/client';
await assertDeploymentConformance({
target: 'databricks-app',
baseUrl: process.env.DATABRICKS_APP_URL!,
job: { name: 'smoke' },
timeoutMs: 120_000,
pollIntervalMs: 1_000,
signal: AbortSignal.timeout(125_000),
});HTTP 502, 503, and 504, network startup failures, and non-ready bodies are retried. Permanent
HTTP failures fail fast, and lifecycle routes are not invoked before readiness.
Apache-2.0
