feat(runtime): 即梦本机运行时 - 接入安全生成闭环与桌面本机渠道

Refs #225

Co-authored-by: zkhyww <127009345+zkhyww@users.noreply.github.com>
This commit is contained in:
ddCat
2026-08-15 12:45:29 +08:00
parent 8f2232feee
commit 57e1820f41
179 changed files with 49746 additions and 1897 deletions

View File

@@ -0,0 +1,93 @@
import crypto from "node:crypto";
import { canonicalize } from "json-canonicalize";
export const LOCAL_RUNTIME_ENDPOINT = "http://127.0.0.1:17371";
export const LOCAL_RUNTIME_ID = "framefield-local-runtime";
export const LOCAL_RUNTIME_API_VERSION = 2;
export type LocalRuntimeModuleId = "canvas-agent" | "dreamina";
export type LocalRuntimeScope =
| "runtime:status"
| "runtime:revoke"
| "canvas:connect"
| "dreamina:status"
| "dreamina:login"
| "dreamina:logout"
| "dreamina:run"
| "dreamina:models"
| "dreamina:generate";
export type DreaminaModelOperation =
| "text-to-image"
| "image-to-image"
| "text-to-video"
| "image-to-video"
| "reference-to-video";
export type DreaminaModelDescriptor = {
provider: "dreamina-cli";
id: string;
displayName: string;
modality: "image" | "video";
adapterSupported: boolean;
accountEntitlement: "yes" | "no" | "unknown";
currentlyObservedAvailable: "yes" | "no" | "unknown";
operations: DreaminaModelOperation[];
settings: {
aliases: string[];
aspects: string[];
minDuration?: number;
maxDuration?: number;
maxReferenceImages: number;
tiers?: string[];
};
source: "runtime-execution-contract";
};
export type LocalRuntimeModuleDescriptor = {
id: LocalRuntimeModuleId;
displayName: string;
apiVersion: 1;
scopes: readonly LocalRuntimeScope[];
};
export type RuntimeSessionChallengePayload = {
protocol: "framefield-runtime-session-v1";
challengeId: string;
nonce: string;
origin: string;
endpoint: string;
runtimeInstanceId: string;
expiresAt: string;
};
export type RuntimeRequestPayload = {
protocol: "framefield-runtime-request-v1";
sessionId: string;
keyId: string;
method: string;
pathAndQuery: string;
bodySha256: string;
lastEventId: string | null;
origin: string;
endpoint: string;
runtimeInstanceId: string;
requestNonce: string;
timestamp: number;
sessionExpiresAt: string;
};
export function canonicalRuntimeJson(value: unknown) {
return canonicalize(value);
}
export function sha256Base64Url(value: string | Uint8Array) {
return crypto.createHash("sha256").update(value).digest("base64url");
}
export function createRuntimeRequestPayload(
value: Omit<RuntimeRequestPayload, "protocol">,
): RuntimeRequestPayload {
return { protocol: "framefield-runtime-request-v1", ...value };
}