feat(openclaw): add task-plane task-plane.js

This commit is contained in:
AIOS Candidate Writer
2026-07-25 18:35:21 +08:00
parent 4398caaedf
commit 51b98041d9
@@ -0,0 +1,44 @@
import crypto from "node:crypto";
import { buildProvisionRequest, validateProvisionResponse, validateTaskPlaneRequest } from "../dispatch-contract.js";
import { callBrokerProvision } from "../session-broker-client.js";
import { dispatchError } from "../dispatch-errors.js";
import { canonicalize } from "../provenance.js";
export async function dispatchTaskPlaneTransport({ permit, request, params, config, attempts }) {
const validated = validateTaskPlaneRequest({ request, permit, config });
if (!validated.ok) throw dispatchError(validated.code);
if (typeof config.protectedDispatchBrokerEndpoint !== "string" ||
typeof config.protectedDispatchBrokerCredentialPath !== "string") {
throw dispatchError("broker_config_invalid");
}
const provisionRequest = buildProvisionRequest(validated, request.idempotency_key);
let response;
try {
response = await callBrokerProvision({
endpoint: config.protectedDispatchBrokerEndpoint,
credentialPath: config.protectedDispatchBrokerCredentialPath,
payload: provisionRequest,
timeoutMs: config.protectedDispatchBrokerTimeoutMs,
});
} catch (error) {
throw dispatchError(error instanceof Error && error.code ? error.code : "broker_unreachable");
}
const checked = validateProvisionResponse(response, validated.plan);
if (!checked.ok) throw dispatchError(checked.code);
const result = {
accepted: true,
task_id: request.task_id,
provider: request.provider,
provider_source: "server_config",
provider_hint_overridden: params.provider !== request.provider,
provenance_id: permit.record.payload.provenance_id,
simulation: false,
transport: "task-plane",
real_user_impersonated: false,
attempts,
...checked.value,
};
result.receipt_sha256 = crypto.createHash("sha256").update(canonicalize(result)).digest("hex");
return result;
}