build: align plugin sdk package boundaries

This commit is contained in:
Peter Steinberger
2026-04-07 05:45:08 +01:00
parent 5b1b7f0f80
commit 67c4733267
6 changed files with 181 additions and 40 deletions

View File

@@ -3,11 +3,17 @@
"compilerOptions": {
"paths": {
"openclaw/extension-api": ["../src/extensionAPI.ts"],
"openclaw/plugin-sdk": ["../packages/plugin-sdk/dist/src/plugin-sdk/index.d.ts"],
"openclaw/plugin-sdk/*": ["../packages/plugin-sdk/dist/src/plugin-sdk/*.d.ts"],
"openclaw/plugin-sdk": [
"../packages/plugin-sdk/dist/packages/plugin-sdk/src/src/plugin-sdk/index.d.ts"
],
"openclaw/plugin-sdk/*": [
"../packages/plugin-sdk/dist/packages/plugin-sdk/src/src/plugin-sdk/*.d.ts"
],
"openclaw/plugin-sdk/account-id": ["../src/plugin-sdk/account-id.ts"],
"@openclaw/*": ["../packages/plugin-sdk/dist/extensions/*", "../extensions/*"],
"@openclaw/plugin-sdk/*": ["../packages/plugin-sdk/dist/src/plugin-sdk/*.d.ts"]
"@openclaw/plugin-sdk/*": [
"../packages/plugin-sdk/dist/packages/plugin-sdk/src/src/plugin-sdk/*.d.ts"
]
}
}
}

View File

@@ -4,14 +4,17 @@
"rootDir": ".",
"paths": {
"openclaw/extension-api": ["../../src/extensionAPI.ts"],
"openclaw/plugin-sdk": ["../../packages/plugin-sdk/dist/src/plugin-sdk/index.d.ts"],
"openclaw/plugin-sdk": [
"../../packages/plugin-sdk/dist/packages/plugin-sdk/src/src/plugin-sdk/index.d.ts"
],
"openclaw/plugin-sdk/*": [
"../../packages/plugin-sdk/dist/src/plugin-sdk/*.d.ts",
"../../packages/plugin-sdk/dist/packages/plugin-sdk/src/*.d.ts"
"../../packages/plugin-sdk/dist/packages/plugin-sdk/src/src/plugin-sdk/*.d.ts"
],
"openclaw/plugin-sdk/account-id": ["../../src/plugin-sdk/account-id.ts"],
"@openclaw/*": ["../*"],
"@openclaw/plugin-sdk/*": ["../../packages/plugin-sdk/dist/packages/plugin-sdk/src/*.d.ts"],
"@openclaw/plugin-sdk/*": [
"../../packages/plugin-sdk/dist/packages/plugin-sdk/src/src/plugin-sdk/*.d.ts"
],
"@openclaw/anthropic-vertex/api.js": ["./.boundary-stubs/anthropic-vertex-api.d.ts"],
"@openclaw/ollama/api.js": ["./.boundary-stubs/ollama-api.d.ts"],
"@openclaw/ollama/runtime-api.js": ["./.boundary-stubs/ollama-runtime-api.d.ts"],

View File

@@ -5,63 +5,63 @@
"type": "module",
"exports": {
"./config-runtime": {
"types": "./dist/src/plugin-sdk/config-runtime.d.ts",
"types": "./dist/packages/plugin-sdk/src/src/plugin-sdk/config-runtime.d.ts",
"default": "./src/config-runtime.ts"
},
"./plugin-entry": {
"types": "./dist/src/plugin-sdk/plugin-entry.d.ts",
"types": "./dist/packages/plugin-sdk/src/src/plugin-sdk/plugin-entry.d.ts",
"default": "./src/plugin-entry.ts"
},
"./provider-auth": {
"types": "./dist/src/plugin-sdk/provider-auth.d.ts",
"types": "./dist/packages/plugin-sdk/src/src/plugin-sdk/provider-auth.d.ts",
"default": "./src/provider-auth.ts"
},
"./provider-auth-runtime": {
"types": "./dist/src/plugin-sdk/provider-auth-runtime.d.ts",
"types": "./dist/packages/plugin-sdk/src/src/plugin-sdk/provider-auth-runtime.d.ts",
"default": "./src/provider-auth-runtime.ts"
},
"./provider-entry": {
"types": "./dist/src/plugin-sdk/provider-entry.d.ts",
"types": "./dist/packages/plugin-sdk/src/src/plugin-sdk/provider-entry.d.ts",
"default": "./src/provider-entry.ts"
},
"./provider-http": {
"types": "./dist/src/plugin-sdk/provider-http.d.ts",
"types": "./dist/packages/plugin-sdk/src/src/plugin-sdk/provider-http.d.ts",
"default": "./src/provider-http.ts"
},
"./provider-model-shared": {
"types": "./dist/src/plugin-sdk/provider-model-shared.d.ts",
"types": "./dist/packages/plugin-sdk/src/src/plugin-sdk/provider-model-shared.d.ts",
"default": "./src/provider-model-shared.ts"
},
"./provider-onboard": {
"types": "./dist/src/plugin-sdk/provider-onboard.d.ts",
"types": "./dist/packages/plugin-sdk/src/src/plugin-sdk/provider-onboard.d.ts",
"default": "./src/provider-onboard.ts"
},
"./provider-stream-shared": {
"types": "./dist/src/plugin-sdk/provider-stream-shared.d.ts",
"types": "./dist/packages/plugin-sdk/src/src/plugin-sdk/provider-stream-shared.d.ts",
"default": "./src/provider-stream-shared.ts"
},
"./provider-tools": {
"types": "./dist/src/plugin-sdk/provider-tools.d.ts",
"types": "./dist/packages/plugin-sdk/src/src/plugin-sdk/provider-tools.d.ts",
"default": "./src/provider-tools.ts"
},
"./provider-web-search": {
"types": "./dist/src/plugin-sdk/provider-web-search.d.ts",
"types": "./dist/packages/plugin-sdk/src/src/plugin-sdk/provider-web-search.d.ts",
"default": "./src/provider-web-search.ts"
},
"./runtime-env": {
"types": "./dist/src/plugin-sdk/runtime-env.d.ts",
"types": "./dist/packages/plugin-sdk/src/src/plugin-sdk/runtime-env.d.ts",
"default": "./src/runtime-env.ts"
},
"./secret-input": {
"types": "./dist/src/plugin-sdk/secret-input.d.ts",
"types": "./dist/packages/plugin-sdk/src/src/plugin-sdk/secret-input.d.ts",
"default": "./src/secret-input.ts"
},
"./testing": {
"types": "./dist/src/plugin-sdk/testing.d.ts",
"types": "./dist/packages/plugin-sdk/src/src/plugin-sdk/testing.d.ts",
"default": "./src/testing.ts"
},
"./video-generation": {
"types": "./dist/src/plugin-sdk/video-generation.d.ts",
"types": "./dist/packages/plugin-sdk/src/src/plugin-sdk/video-generation.d.ts",
"default": "./src/video-generation.ts"
}
}

View File

@@ -12,6 +12,7 @@
},
"include": [
"../../src/plugin-sdk/config-runtime.ts",
"../../src/plugin-sdk/index.ts",
"../../src/plugin-sdk/lazy-value.ts",
"../../src/plugin-sdk/oauth-utils.ts",
"../../src/plugin-sdk/plugin-entry.ts",

View File

@@ -1,19 +1,143 @@
// Public video-generation helpers and types for provider plugins.
//
// Keep these public type declarations local to the plugin-sdk entrypoint so the
// emitted declaration surface stays stable for package-boundary consumers.
export type {
GeneratedVideoAsset,
VideoGenerationMode,
VideoGenerationModeCapabilities,
VideoGenerationProvider,
VideoGenerationProviderCapabilities,
VideoGenerationProviderConfiguredContext,
VideoGenerationRequest,
VideoGenerationResolution,
VideoGenerationResult,
VideoGenerationSourceAsset,
VideoGenerationTransformCapabilities,
import type { AuthProfileStore } from "../agents/auth-profiles.js";
import type { OpenClawConfig } from "../config/config.js";
import type {
GeneratedVideoAsset as CoreGeneratedVideoAsset,
VideoGenerationMode as CoreVideoGenerationMode,
VideoGenerationModeCapabilities as CoreVideoGenerationModeCapabilities,
VideoGenerationProvider as CoreVideoGenerationProvider,
VideoGenerationProviderCapabilities as CoreVideoGenerationProviderCapabilities,
VideoGenerationProviderConfiguredContext as CoreVideoGenerationProviderConfiguredContext,
VideoGenerationRequest as CoreVideoGenerationRequest,
VideoGenerationResolution as CoreVideoGenerationResolution,
VideoGenerationResult as CoreVideoGenerationResult,
VideoGenerationSourceAsset as CoreVideoGenerationSourceAsset,
VideoGenerationTransformCapabilities as CoreVideoGenerationTransformCapabilities,
} from "../video-generation/types.js";
export type GeneratedVideoAsset = {
buffer: Buffer;
mimeType: string;
fileName?: string;
metadata?: Record<string, unknown>;
};
export type VideoGenerationResolution = "480P" | "720P" | "768P" | "1080P";
export type VideoGenerationSourceAsset = {
url?: string;
buffer?: Buffer;
mimeType?: string;
fileName?: string;
metadata?: Record<string, unknown>;
};
export type VideoGenerationProviderConfiguredContext = {
cfg?: OpenClawConfig;
agentDir?: string;
};
export type VideoGenerationRequest = {
provider: string;
model: string;
prompt: string;
cfg: OpenClawConfig;
agentDir?: string;
authStore?: AuthProfileStore;
timeoutMs?: number;
size?: string;
aspectRatio?: string;
resolution?: VideoGenerationResolution;
durationSeconds?: number;
audio?: boolean;
watermark?: boolean;
inputImages?: VideoGenerationSourceAsset[];
inputVideos?: VideoGenerationSourceAsset[];
};
export type VideoGenerationResult = {
videos: GeneratedVideoAsset[];
model?: string;
metadata?: Record<string, unknown>;
};
export type VideoGenerationMode = "generate" | "imageToVideo" | "videoToVideo";
export type VideoGenerationModeCapabilities = {
maxVideos?: number;
maxInputImages?: number;
maxInputVideos?: number;
maxDurationSeconds?: number;
supportedDurationSeconds?: readonly number[];
supportedDurationSecondsByModel?: Readonly<Record<string, readonly number[]>>;
sizes?: readonly string[];
aspectRatios?: readonly string[];
resolutions?: readonly VideoGenerationResolution[];
supportsSize?: boolean;
supportsAspectRatio?: boolean;
supportsResolution?: boolean;
supportsAudio?: boolean;
supportsWatermark?: boolean;
};
export type VideoGenerationTransformCapabilities = VideoGenerationModeCapabilities & {
enabled: boolean;
};
export type VideoGenerationProviderCapabilities = VideoGenerationModeCapabilities & {
generate?: VideoGenerationModeCapabilities;
imageToVideo?: VideoGenerationTransformCapabilities;
videoToVideo?: VideoGenerationTransformCapabilities;
};
export type VideoGenerationProvider = {
id: string;
aliases?: string[];
label?: string;
defaultModel?: string;
models?: string[];
capabilities: VideoGenerationProviderCapabilities;
isConfigured?: (ctx: VideoGenerationProviderConfiguredContext) => boolean;
generateVideo: (req: VideoGenerationRequest) => Promise<VideoGenerationResult>;
};
type AssertAssignable<_Left extends _Right, _Right> = true;
type _VideoGenerationSdkCompat = [
AssertAssignable<GeneratedVideoAsset, CoreGeneratedVideoAsset>,
AssertAssignable<CoreGeneratedVideoAsset, GeneratedVideoAsset>,
AssertAssignable<VideoGenerationMode, CoreVideoGenerationMode>,
AssertAssignable<CoreVideoGenerationMode, VideoGenerationMode>,
AssertAssignable<VideoGenerationModeCapabilities, CoreVideoGenerationModeCapabilities>,
AssertAssignable<CoreVideoGenerationModeCapabilities, VideoGenerationModeCapabilities>,
AssertAssignable<VideoGenerationProvider, CoreVideoGenerationProvider>,
AssertAssignable<CoreVideoGenerationProvider, VideoGenerationProvider>,
AssertAssignable<VideoGenerationProviderCapabilities, CoreVideoGenerationProviderCapabilities>,
AssertAssignable<CoreVideoGenerationProviderCapabilities, VideoGenerationProviderCapabilities>,
AssertAssignable<
VideoGenerationProviderConfiguredContext,
CoreVideoGenerationProviderConfiguredContext
>,
AssertAssignable<
CoreVideoGenerationProviderConfiguredContext,
VideoGenerationProviderConfiguredContext
>,
AssertAssignable<VideoGenerationRequest, CoreVideoGenerationRequest>,
AssertAssignable<CoreVideoGenerationRequest, VideoGenerationRequest>,
AssertAssignable<VideoGenerationResolution, CoreVideoGenerationResolution>,
AssertAssignable<CoreVideoGenerationResolution, VideoGenerationResolution>,
AssertAssignable<VideoGenerationResult, CoreVideoGenerationResult>,
AssertAssignable<CoreVideoGenerationResult, VideoGenerationResult>,
AssertAssignable<VideoGenerationSourceAsset, CoreVideoGenerationSourceAsset>,
AssertAssignable<CoreVideoGenerationSourceAsset, VideoGenerationSourceAsset>,
AssertAssignable<VideoGenerationTransformCapabilities, CoreVideoGenerationTransformCapabilities>,
AssertAssignable<CoreVideoGenerationTransformCapabilities, VideoGenerationTransformCapabilities>,
];
export {
DEFAULT_VIDEO_GENERATION_DURATION_SECONDS,
DEFAULT_VIDEO_GENERATION_TIMEOUT_MS,

View File

@@ -37,11 +37,17 @@ describe("opt-in extension package boundaries", () => {
expect(pathsConfig.extends).toBe("../tsconfig.json");
expect(pathsConfig.compilerOptions?.paths).toEqual({
"openclaw/extension-api": ["../src/extensionAPI.ts"],
"openclaw/plugin-sdk": ["../packages/plugin-sdk/dist/src/plugin-sdk/index.d.ts"],
"openclaw/plugin-sdk/*": ["../packages/plugin-sdk/dist/src/plugin-sdk/*.d.ts"],
"openclaw/plugin-sdk": [
"../packages/plugin-sdk/dist/packages/plugin-sdk/src/src/plugin-sdk/index.d.ts",
],
"openclaw/plugin-sdk/*": [
"../packages/plugin-sdk/dist/packages/plugin-sdk/src/src/plugin-sdk/*.d.ts",
],
"openclaw/plugin-sdk/account-id": ["../src/plugin-sdk/account-id.ts"],
"@openclaw/*": ["../packages/plugin-sdk/dist/extensions/*", "../extensions/*"],
"@openclaw/plugin-sdk/*": ["../packages/plugin-sdk/dist/src/plugin-sdk/*.d.ts"],
"@openclaw/plugin-sdk/*": [
"../packages/plugin-sdk/dist/packages/plugin-sdk/src/src/plugin-sdk/*.d.ts",
],
});
const baseConfig = readJsonFile<TsConfigJson>(EXTENSION_PACKAGE_BOUNDARY_BASE_CONFIG);
@@ -88,6 +94,7 @@ describe("opt-in extension package boundaries", () => {
expect(tsconfig.compilerOptions?.rootDir).toBe("../..");
expect(tsconfig.include).toEqual([
"../../src/plugin-sdk/config-runtime.ts",
"../../src/plugin-sdk/index.ts",
"../../src/plugin-sdk/lazy-value.ts",
"../../src/plugin-sdk/oauth-utils.ts",
"../../src/plugin-sdk/plugin-entry.ts",
@@ -117,13 +124,13 @@ describe("opt-in extension package boundaries", () => {
expect(packageJson.name).toBe("@openclaw/plugin-sdk");
expect(packageJson.exports?.["./core"]).toBeUndefined();
expect(packageJson.exports?.["./plugin-entry"]?.types).toBe(
"./dist/src/plugin-sdk/plugin-entry.d.ts",
"./dist/packages/plugin-sdk/src/src/plugin-sdk/plugin-entry.d.ts",
);
expect(packageJson.exports?.["./provider-http"]?.types).toBe(
"./dist/src/plugin-sdk/provider-http.d.ts",
"./dist/packages/plugin-sdk/src/src/plugin-sdk/provider-http.d.ts",
);
expect(packageJson.exports?.["./video-generation"]?.types).toBe(
"./dist/src/plugin-sdk/video-generation.d.ts",
"./dist/packages/plugin-sdk/src/src/plugin-sdk/video-generation.d.ts",
);
expect(existsSync(resolve(REPO_ROOT, "packages/plugin-sdk/types/plugin-entry.d.ts"))).toBe(
false,