Extension host: organize foundation modules
This commit is contained in:
parent
67ca7cc1d8
commit
1ea8fc0db6
BIN
src/agents/.DS_Store
vendored
Normal file
BIN
src/agents/.DS_Store
vendored
Normal file
Binary file not shown.
@ -14,8 +14,15 @@ import {
|
||||
} from "./agent-scope.js";
|
||||
import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "./defaults.js";
|
||||
import type { ModelCatalogEntry } from "./model-catalog.js";
|
||||
import { normalizeGoogleModelId } from "./model-id-normalization.js";
|
||||
import { splitTrailingAuthProfile } from "./model-ref-profile.js";
|
||||
import {
|
||||
legacyModelKey,
|
||||
modelKey,
|
||||
normalizeModelRef,
|
||||
parseModelRef,
|
||||
type ModelRef,
|
||||
} from "./model-ref.js";
|
||||
import { normalizeProviderId, normalizeProviderIdForAuth } from "./provider-id.js";
|
||||
|
||||
const log = createSubsystemLogger("model-selection");
|
||||
|
||||
@ -588,3 +595,13 @@ export function normalizeModelSelection(value: unknown): string | undefined {
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
export {
|
||||
legacyModelKey,
|
||||
modelKey,
|
||||
normalizeModelRef,
|
||||
normalizeProviderId,
|
||||
normalizeProviderIdForAuth,
|
||||
parseModelRef,
|
||||
};
|
||||
export type { ModelRef };
|
||||
|
||||
BIN
src/agents/pi-embedded-runner/.DS_Store
vendored
Normal file
BIN
src/agents/pi-embedded-runner/.DS_Store
vendored
Normal file
Binary file not shown.
@ -4,7 +4,7 @@ import type { OpenClawConfig } from "../../config/config.js";
|
||||
import {
|
||||
loadResolvedExtensionRegistry,
|
||||
type ResolvedExtensionRegistry,
|
||||
} from "../../extension-host/resolved-registry.js";
|
||||
} from "../../extension-host/manifests/resolved-registry.js";
|
||||
import { createSubsystemLogger } from "../../logging/subsystem.js";
|
||||
import {
|
||||
normalizePluginsConfig,
|
||||
|
||||
BIN
src/auto-reply/.DS_Store
vendored
Normal file
BIN
src/auto-reply/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
src/auto-reply/reply/.DS_Store
vendored
Normal file
BIN
src/auto-reply/reply/.DS_Store
vendored
Normal file
Binary file not shown.
@ -8,7 +8,7 @@
|
||||
import {
|
||||
executeExtensionHostPluginCommand,
|
||||
matchExtensionHostPluginCommand,
|
||||
} from "../../extension-host/command-runtime.js";
|
||||
} from "../../extension-host/contributions/command-runtime.js";
|
||||
import type { CommandHandler, CommandHandlerResult } from "./commands-types.js";
|
||||
|
||||
/**
|
||||
|
||||
@ -20,7 +20,7 @@ import {
|
||||
type SessionEntry,
|
||||
type SessionScope,
|
||||
} from "../config/sessions.js";
|
||||
import { listExtensionHostPluginCommands } from "../extension-host/command-runtime.js";
|
||||
import { listExtensionHostPluginCommands } from "../extension-host/contributions/command-runtime.js";
|
||||
import { formatTimeAgo } from "../infra/format-time/format-relative.ts";
|
||||
import { resolveCommitHash } from "../infra/git-commit.js";
|
||||
import type { MediaUnderstandingDecision } from "../media-understanding/types.js";
|
||||
@ -799,7 +799,7 @@ type CommandsListItem = {
|
||||
|
||||
function buildCommandItems(
|
||||
commands: ChatCommandDefinition[],
|
||||
pluginCommands: ReturnType<typeof listPluginCommands>,
|
||||
pluginCommands: ReturnType<typeof listExtensionHostPluginCommands>,
|
||||
): CommandsListItem[] {
|
||||
const grouped = groupCommandsByCategory(commands);
|
||||
const items: CommandsListItem[] = [];
|
||||
|
||||
BIN
src/channels/.DS_Store
vendored
Normal file
BIN
src/channels/.DS_Store
vendored
Normal file
Binary file not shown.
@ -8,8 +8,8 @@ import {
|
||||
resolveChannelGroupRequireMention,
|
||||
resolveChannelGroupToolsPolicy,
|
||||
} from "../config/group-policy.js";
|
||||
import { requireActiveExtensionHostRegistry } from "../extension-host/active-registry.js";
|
||||
import { listExtensionHostChannelRegistrations } from "../extension-host/runtime-registry.js";
|
||||
import { listExtensionHostChannelRegistrations } from "../extension-host/contributions/runtime-registry.js";
|
||||
import { requireActiveExtensionHostRegistry } from "../extension-host/static/active-registry.js";
|
||||
import {
|
||||
formatAllowFromLowercase,
|
||||
formatNormalizedAllowFromEntries,
|
||||
|
||||
BIN
src/channels/plugins/.DS_Store
vendored
Normal file
BIN
src/channels/plugins/.DS_Store
vendored
Normal file
Binary file not shown.
@ -4,7 +4,7 @@ import {
|
||||
getExtensionPackageMetadata,
|
||||
type OpenClawPackageManifest,
|
||||
type PackageManifest,
|
||||
} from "../../extension-host/schema.js";
|
||||
} from "../../extension-host/manifests/schema.js";
|
||||
import { discoverOpenClawPlugins } from "../../plugins/discovery.js";
|
||||
import type { PluginOrigin } from "../../plugins/types.js";
|
||||
import { isRecord, resolveConfigDir, resolveUserPath } from "../../utils.js";
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { listExtensionHostChannelRegistrations } from "../../extension-host/contributions/runtime-registry.js";
|
||||
import {
|
||||
getActiveExtensionHostRegistryVersion,
|
||||
requireActiveExtensionHostRegistry,
|
||||
} from "../../extension-host/active-registry.js";
|
||||
import { listExtensionHostChannelRegistrations } from "../../extension-host/runtime-registry.js";
|
||||
} from "../../extension-host/static/active-registry.js";
|
||||
import { CHAT_CHANNEL_ORDER, type ChatChannelId, normalizeAnyChannelId } from "../registry.js";
|
||||
import type { ChannelId, ChannelPlugin } from "./types.js";
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@ import type { SlackProbe } from "../../../extensions/slack/src/probe.js";
|
||||
import type { TelegramProbe } from "../../../extensions/telegram/src/probe.js";
|
||||
import type { TelegramTokenResolution } from "../../../extensions/telegram/src/token.js";
|
||||
import type { OpenClawConfig } from "../../config/config.js";
|
||||
import { addExtensionHostChannelRegistration } from "../../extension-host/runtime-registry.js";
|
||||
import { addExtensionHostChannelRegistration } from "../../extension-host/contributions/runtime-registry.js";
|
||||
import type { LineProbeResult } from "../../line/types.js";
|
||||
import { setActivePluginRegistry } from "../../plugins/runtime.js";
|
||||
import {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { getActiveExtensionHostRegistry } from "../../extension-host/active-registry.js";
|
||||
import { listExtensionHostChannelRegistrations } from "../../extension-host/runtime-registry.js";
|
||||
import { listExtensionHostChannelRegistrations } from "../../extension-host/contributions/runtime-registry.js";
|
||||
import { getActiveExtensionHostRegistry } from "../../extension-host/static/active-registry.js";
|
||||
import type { PluginChannelRegistration, PluginRegistry } from "../../plugins/registry.js";
|
||||
import type { ChannelId } from "./types.js";
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { requireActiveExtensionHostRegistry } from "../extension-host/active-registry.js";
|
||||
import { listExtensionHostChannelRegistrations } from "../extension-host/runtime-registry.js";
|
||||
import { listExtensionHostChannelRegistrations } from "../extension-host/contributions/runtime-registry.js";
|
||||
import { requireActiveExtensionHostRegistry } from "../extension-host/static/active-registry.js";
|
||||
import type { ChannelMeta } from "./plugins/types.js";
|
||||
import type { ChannelId } from "./plugins/types.js";
|
||||
|
||||
|
||||
BIN
src/cli/.DS_Store
vendored
Normal file
BIN
src/cli/.DS_Store
vendored
Normal file
Binary file not shown.
@ -1,6 +1,6 @@
|
||||
import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent-scope.js";
|
||||
import { loadConfig } from "../config/config.js";
|
||||
import { hasExtensionHostRuntimeEntries } from "../extension-host/runtime-registry.js";
|
||||
import { hasExtensionHostRuntimeEntries } from "../extension-host/contributions/runtime-registry.js";
|
||||
import { createSubsystemLogger } from "../logging.js";
|
||||
import { loadOpenClawPlugins } from "../plugins/loader.js";
|
||||
import { getActivePluginRegistry } from "../plugins/runtime.js";
|
||||
|
||||
BIN
src/commands/.DS_Store
vendored
Normal file
BIN
src/commands/.DS_Store
vendored
Normal file
Binary file not shown.
@ -20,7 +20,7 @@ const runExtensionHostProviderModelSelectedHook = vi.hoisted(() => vi.fn(async (
|
||||
vi.mock("../plugins/provider-wizard.js", () => ({
|
||||
resolveProviderPluginChoice,
|
||||
}));
|
||||
vi.mock("../extension-host/provider-model-selection.js", () => ({
|
||||
vi.mock("../extension-host/contributions/provider-model-selection.js", () => ({
|
||||
runExtensionHostProviderModelSelectedHook,
|
||||
}));
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@ import {
|
||||
applyExtensionHostPluginProvider,
|
||||
runExtensionHostProviderAuthMethod,
|
||||
type ExtensionHostPluginProviderAuthChoiceOptions,
|
||||
} from "../extension-host/provider-auth-flow.js";
|
||||
} from "../extension-host/contributions/provider-auth-flow.js";
|
||||
import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js";
|
||||
|
||||
export type PluginProviderAuthChoiceOptions = ExtensionHostPluginProviderAuthChoiceOptions;
|
||||
|
||||
@ -401,7 +401,7 @@ export async function promptDefaultModel(
|
||||
workspaceDir: params.workspaceDir,
|
||||
});
|
||||
if (applied.defaultModel) {
|
||||
await runExtensionHostProviderModelSelectedHook({
|
||||
await runProviderModelSelectedHook({
|
||||
config: applied.config,
|
||||
model: applied.defaultModel,
|
||||
prompter: params.prompter,
|
||||
|
||||
BIN
src/commands/onboard-non-interactive/.DS_Store
vendored
Normal file
BIN
src/commands/onboard-non-interactive/.DS_Store
vendored
Normal file
Binary file not shown.
@ -4,7 +4,7 @@ import {
|
||||
mergeExtensionHostConfigPatch,
|
||||
pickExtensionHostAuthMethod,
|
||||
resolveExtensionHostProviderMatch,
|
||||
} from "../extension-host/provider-auth.js";
|
||||
} from "../extension-host/contributions/provider-auth.js";
|
||||
import type { ProviderAuthMethod, ProviderPlugin } from "../plugins/types.js";
|
||||
|
||||
export function resolveProviderMatch(
|
||||
|
||||
BIN
src/config/.DS_Store
vendored
Normal file
BIN
src/config/.DS_Store
vendored
Normal file
Binary file not shown.
@ -6,7 +6,7 @@ import type { ChannelPlugin } from "../channels/plugins/index.js";
|
||||
import {
|
||||
loadResolvedExtensionRegistry,
|
||||
type ResolvedExtensionRegistry,
|
||||
} from "../extension-host/resolved-registry.js";
|
||||
} from "../extension-host/manifests/resolved-registry.js";
|
||||
import { resolveOpenClawPackageRootSync } from "../infra/openclaw-root.js";
|
||||
import { FIELD_HELP } from "./schema.help.js";
|
||||
import { buildConfigSchema, type ConfigSchemaResponse } from "./schema.js";
|
||||
|
||||
@ -13,7 +13,7 @@ import {
|
||||
loadResolvedExtensionRegistry,
|
||||
resolvedExtensionRegistryFromPluginManifestRegistry,
|
||||
type ResolvedExtensionRegistry,
|
||||
} from "../extension-host/resolved-registry.js";
|
||||
} from "../extension-host/manifests/resolved-registry.js";
|
||||
import { type PluginManifestRegistry } from "../plugins/manifest-registry.js";
|
||||
import { isRecord } from "../utils.js";
|
||||
import type { OpenClawConfig } from "./config.js";
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
import type { ResolvedExtensionRegistry } from "../extension-host/resolved-registry.js";
|
||||
import type { ResolvedExtensionRegistry } from "../extension-host/manifests/resolved-registry.js";
|
||||
|
||||
export type ResolvedExtensionValidationEntry = {
|
||||
id: string;
|
||||
origin: "workspace" | "bundled" | "global" | "config";
|
||||
format?: "bundle" | "openclaw";
|
||||
kind?: string;
|
||||
channels: string[];
|
||||
configSchema?: Record<string, unknown>;
|
||||
@ -37,6 +38,7 @@ export function buildResolvedExtensionValidationIndex(
|
||||
return {
|
||||
id: extension.id,
|
||||
origin: extension.origin ?? "workspace",
|
||||
format: record.manifestPath.endsWith("package.json") ? "openclaw" : "bundle",
|
||||
kind: extension.kind,
|
||||
channels,
|
||||
configSchema: extension.staticMetadata.configSchema,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import path from "node:path";
|
||||
import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent-scope.js";
|
||||
import { CHANNEL_IDS, normalizeChatChannelId } from "../channels/registry.js";
|
||||
import { loadResolvedExtensionRegistry } from "../extension-host/resolved-registry.js";
|
||||
import { loadResolvedExtensionRegistry } from "../extension-host/manifests/resolved-registry.js";
|
||||
import {
|
||||
normalizePluginsConfig,
|
||||
resolveEffectiveEnableState,
|
||||
|
||||
BIN
src/extension-host/.DS_Store
vendored
Normal file
BIN
src/extension-host/.DS_Store
vendored
Normal file
Binary file not shown.
@ -5,7 +5,7 @@ import { activateExtensionHostRegistry } from "./activation.js";
|
||||
import {
|
||||
getActiveExtensionHostRegistry,
|
||||
getActiveExtensionHostRegistryKey,
|
||||
} from "./active-registry.js";
|
||||
} from "./static/active-registry.js";
|
||||
|
||||
describe("extension host activation", () => {
|
||||
beforeEach(() => {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { initializeGlobalHookRunner } from "../plugins/hook-runner-global.js";
|
||||
import type { PluginRegistry } from "../plugins/registry.js";
|
||||
import { setActiveExtensionHostRegistry } from "./active-registry.js";
|
||||
import { setActiveExtensionHostRegistry } from "./static/active-registry.js";
|
||||
|
||||
export function activateExtensionHostRegistry(registry: PluginRegistry, cacheKey: string): void {
|
||||
setActiveExtensionHostRegistry(registry, cacheKey);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { createEmptyPluginRegistry } from "../plugins/registry.js";
|
||||
import { createEmptyPluginRegistry } from "../../plugins/registry.js";
|
||||
import { bootstrapExtensionHostPluginLoad } from "./loader-bootstrap.js";
|
||||
|
||||
describe("extension host loader bootstrap", () => {
|
||||
@ -1,20 +1,20 @@
|
||||
import type { OpenClawConfig } from "../config/config.js";
|
||||
import type { NormalizedPluginsConfig } from "../plugins/config-state.js";
|
||||
import { discoverOpenClawPlugins, type PluginCandidate } from "../plugins/discovery.js";
|
||||
import type { OpenClawConfig } from "../../config/config.js";
|
||||
import type { NormalizedPluginsConfig } from "../../plugins/config-state.js";
|
||||
import { discoverOpenClawPlugins, type PluginCandidate } from "../../plugins/discovery.js";
|
||||
import {
|
||||
loadPluginManifestRegistry,
|
||||
type PluginManifestRecord,
|
||||
type PluginManifestRegistry,
|
||||
} from "../plugins/manifest-registry.js";
|
||||
import type { PluginRegistry } from "../plugins/registry.js";
|
||||
import type { PluginLogger } from "../plugins/types.js";
|
||||
import { resolveExtensionHostDiscoveryPolicy } from "./loader-discovery-policy.js";
|
||||
} from "../../plugins/manifest-registry.js";
|
||||
import type { PluginRegistry } from "../../plugins/registry.js";
|
||||
import type { PluginLogger } from "../../plugins/types.js";
|
||||
import { resolveExtensionHostDiscoveryPolicy } from "../policy/loader-discovery-policy.js";
|
||||
import {
|
||||
buildExtensionHostProvenanceIndex,
|
||||
compareExtensionHostDuplicateCandidateOrder,
|
||||
pushExtensionHostDiagnostics,
|
||||
} from "./loader-policy.js";
|
||||
import type { ExtensionHostProvenanceIndex } from "./loader-provenance.js";
|
||||
} from "../policy/loader-policy.js";
|
||||
import type { ExtensionHostProvenanceIndex } from "../policy/loader-provenance.js";
|
||||
|
||||
export function bootstrapExtensionHostPluginLoad(params: {
|
||||
config: OpenClawConfig;
|
||||
@ -1,5 +1,5 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import type { PluginRegistry } from "../plugins/registry.js";
|
||||
import type { PluginRegistry } from "../../plugins/registry.js";
|
||||
import {
|
||||
buildExtensionHostRegistryCacheKey,
|
||||
clearExtensionHostRegistryCache,
|
||||
@ -1,8 +1,8 @@
|
||||
import type { PluginInstallRecord } from "../config/types.plugins.js";
|
||||
import type { NormalizedPluginsConfig } from "../plugins/config-state.js";
|
||||
import type { PluginRegistry } from "../plugins/registry.js";
|
||||
import { resolvePluginCacheInputs } from "../plugins/roots.js";
|
||||
import { resolveUserPath } from "../utils.js";
|
||||
import type { PluginInstallRecord } from "../../config/types.plugins.js";
|
||||
import type { NormalizedPluginsConfig } from "../../plugins/config-state.js";
|
||||
import type { PluginRegistry } from "../../plugins/registry.js";
|
||||
import { resolvePluginCacheInputs } from "../../plugins/roots.js";
|
||||
import { resolveUserPath } from "../../utils.js";
|
||||
|
||||
export const MAX_EXTENSION_HOST_REGISTRY_CACHE_ENTRIES = 32;
|
||||
|
||||
@ -1,17 +1,17 @@
|
||||
import type { OpenClawConfig } from "../config/config.js";
|
||||
import type { NormalizedPluginsConfig } from "../plugins/config-state.js";
|
||||
import { createPluginRegistry, type PluginRegistry } from "../plugins/registry.js";
|
||||
import type { CreatePluginRuntimeOptions } from "../plugins/runtime/index.js";
|
||||
import type { PluginRuntime } from "../plugins/runtime/types.js";
|
||||
import type { PluginLogger } from "../plugins/types.js";
|
||||
import { bootstrapExtensionHostPluginLoad } from "./loader-bootstrap.js";
|
||||
import { resolveExtensionHostDiscoveryPolicy } from "./loader-discovery-policy.js";
|
||||
import { createExtensionHostModuleLoader } from "./loader-module-loader.js";
|
||||
import type { OpenClawConfig } from "../../config/config.js";
|
||||
import type { NormalizedPluginsConfig } from "../../plugins/config-state.js";
|
||||
import { createPluginRegistry, type PluginRegistry } from "../../plugins/registry.js";
|
||||
import type { CreatePluginRuntimeOptions } from "../../plugins/runtime/index.js";
|
||||
import type { PluginRuntime } from "../../plugins/runtime/types.js";
|
||||
import type { PluginLogger } from "../../plugins/types.js";
|
||||
import { resolveExtensionHostDiscoveryPolicy } from "../policy/loader-discovery-policy.js";
|
||||
import {
|
||||
buildExtensionHostProvenanceIndex,
|
||||
compareExtensionHostDuplicateCandidateOrder,
|
||||
pushExtensionHostDiagnostics,
|
||||
} from "./loader-policy.js";
|
||||
} from "../policy/loader-policy.js";
|
||||
import { bootstrapExtensionHostPluginLoad } from "./loader-bootstrap.js";
|
||||
import { createExtensionHostModuleLoader } from "./loader-module-loader.js";
|
||||
import { createExtensionHostLazyRuntime } from "./loader-runtime-proxy.js";
|
||||
import {
|
||||
createExtensionHostLoaderSession,
|
||||
@ -56,7 +56,7 @@ export function prepareExtensionHostLoaderExecution(params: {
|
||||
config: params.config,
|
||||
workspaceDir: params.workspaceDir,
|
||||
env: params.env,
|
||||
warningCacheKey: params.cacheKey,
|
||||
cacheKey: params.cacheKey,
|
||||
warningCache: params.warningCache,
|
||||
cache: params.cache,
|
||||
normalizedConfig: params.normalizedConfig,
|
||||
@ -1,7 +1,7 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import type { PluginRegistry } from "../plugins/registry.js";
|
||||
import type { PluginRegistry } from "../../plugins/registry.js";
|
||||
import { createExtensionHostPluginRecord } from "../policy/loader-policy.js";
|
||||
import { finalizeExtensionHostRegistryLoad } from "./loader-finalize.js";
|
||||
import { createExtensionHostPluginRecord } from "./loader-policy.js";
|
||||
import { setExtensionHostPluginRecordLifecycleState } from "./loader-state.js";
|
||||
|
||||
function createRegistry(): PluginRegistry {
|
||||
@ -1,7 +1,7 @@
|
||||
import type { PluginRegistry } from "../plugins/registry.js";
|
||||
import type { PluginLogger } from "../plugins/types.js";
|
||||
import { resolveExtensionHostFinalizationPolicy } from "./loader-finalization-policy.js";
|
||||
import type { ExtensionHostProvenanceIndex } from "./loader-policy.js";
|
||||
import type { PluginRegistry } from "../../plugins/registry.js";
|
||||
import type { PluginLogger } from "../../plugins/types.js";
|
||||
import { resolveExtensionHostFinalizationPolicy } from "../policy/loader-finalization-policy.js";
|
||||
import type { ExtensionHostProvenanceIndex } from "../policy/loader-provenance.js";
|
||||
import { markExtensionHostRegistryPluginsReady } from "./loader-state.js";
|
||||
|
||||
export function finalizeExtensionHostRegistryLoad(params: {
|
||||
@ -2,10 +2,10 @@ import fs from "node:fs";
|
||||
import os from "node:os";
|
||||
import path from "node:path";
|
||||
import { afterEach, describe, expect, it } from "vitest";
|
||||
import { normalizePluginsConfig } from "../plugins/config-state.js";
|
||||
import type { PluginCandidate } from "../plugins/discovery.js";
|
||||
import type { PluginManifestRecord } from "../plugins/manifest-registry.js";
|
||||
import type { PluginRegistry } from "../plugins/registry.js";
|
||||
import { normalizePluginsConfig } from "../../plugins/config-state.js";
|
||||
import type { PluginCandidate } from "../../plugins/discovery.js";
|
||||
import type { PluginManifestRecord } from "../../plugins/manifest-registry.js";
|
||||
import type { PluginRegistry } from "../../plugins/registry.js";
|
||||
import { processExtensionHostPluginCandidate } from "./loader-flow.js";
|
||||
|
||||
const tempDirs: string[] = [];
|
||||
@ -1,11 +1,12 @@
|
||||
import type { OpenClawConfig } from "../config/config.js";
|
||||
import type { PluginCandidate } from "../plugins/discovery.js";
|
||||
import type { PluginManifestRecord } from "../plugins/manifest-registry.js";
|
||||
import type { PluginRecord, PluginRegistry } from "../plugins/registry.js";
|
||||
import type { OpenClawPluginApi, OpenClawPluginModule, PluginLogger } from "../plugins/types.js";
|
||||
import { resolveExtensionHostActivationPolicy } from "./loader-activation-policy.js";
|
||||
import type { OpenClawConfig } from "../../config/config.js";
|
||||
import type { NormalizedPluginsConfig } from "../../plugins/config-state.js";
|
||||
import type { PluginCandidate } from "../../plugins/discovery.js";
|
||||
import type { PluginManifestRecord } from "../../plugins/manifest-registry.js";
|
||||
import type { PluginRecord, PluginRegistry } from "../../plugins/registry.js";
|
||||
import type { OpenClawPluginApi, OpenClawPluginModule, PluginLogger } from "../../plugins/types.js";
|
||||
import { resolveExtensionHostActivationPolicy } from "../policy/loader-activation-policy.js";
|
||||
import { recordExtensionHostPluginError } from "../policy/loader-policy.js";
|
||||
import { importExtensionHostPluginModule } from "./loader-import.js";
|
||||
import { recordExtensionHostPluginError } from "./loader-policy.js";
|
||||
import {
|
||||
planExtensionHostLoadedPlugin,
|
||||
runExtensionHostPluginRegister,
|
||||
@ -13,6 +14,7 @@ import {
|
||||
import { resolveExtensionHostModuleExport } from "./loader-runtime.js";
|
||||
import {
|
||||
appendExtensionHostPluginRecord,
|
||||
setExtensionHostPluginRecordDisabled,
|
||||
setExtensionHostPluginRecordLifecycleState,
|
||||
setExtensionHostPluginRecordError,
|
||||
} from "./loader-state.js";
|
||||
@ -20,21 +22,7 @@ import {
|
||||
export function processExtensionHostPluginCandidate(params: {
|
||||
candidate: PluginCandidate;
|
||||
manifestRecord: PluginManifestRecord;
|
||||
normalizedConfig: {
|
||||
entries: Record<
|
||||
string,
|
||||
{
|
||||
enabled?: boolean;
|
||||
hooks?: {
|
||||
allowPromptInjection?: boolean;
|
||||
};
|
||||
config?: unknown;
|
||||
}
|
||||
>;
|
||||
slots: {
|
||||
memory?: string | null;
|
||||
};
|
||||
};
|
||||
normalizedConfig: NormalizedPluginsConfig;
|
||||
rootConfig: OpenClawConfig;
|
||||
validateOnly: boolean;
|
||||
logger: PluginLogger;
|
||||
@ -85,7 +73,7 @@ export function processExtensionHostPluginCandidate(params: {
|
||||
level: "error",
|
||||
pluginId: record.id,
|
||||
source: record.source,
|
||||
message: record.error,
|
||||
message: record.error ?? message,
|
||||
});
|
||||
};
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
import { openBoundaryFileSync } from "../infra/boundary-file-read.js";
|
||||
import type { PluginRecord } from "../plugins/registry.js";
|
||||
import { openBoundaryFileSync } from "../../infra/boundary-file-read.js";
|
||||
import type { PluginRecord } from "../../plugins/registry.js";
|
||||
|
||||
export function importExtensionHostPluginModule(params: {
|
||||
rootDir: string;
|
||||
@ -1,6 +1,6 @@
|
||||
import { createJiti } from "jiti";
|
||||
import type { OpenClawPluginModule } from "../plugins/types.js";
|
||||
import { resolvePluginSdkAlias, resolvePluginSdkScopedAliasMap } from "./loader-compat.js";
|
||||
import type { OpenClawPluginModule } from "../../plugins/types.js";
|
||||
import { resolvePluginSdkAlias, resolvePluginSdkScopedAliasMap } from "../compat/loader-compat.js";
|
||||
|
||||
type JitiLoaderFactory = typeof createJiti;
|
||||
type JitiLoader = ReturnType<JitiLoaderFactory>;
|
||||
@ -1,9 +1,12 @@
|
||||
import type { OpenClawConfig } from "../config/config.js";
|
||||
import { createSubsystemLogger } from "../logging/subsystem.js";
|
||||
import type { PluginRegistry } from "../plugins/registry.js";
|
||||
import { createPluginRuntime, type CreatePluginRuntimeOptions } from "../plugins/runtime/index.js";
|
||||
import type { PluginLogger } from "../plugins/types.js";
|
||||
import { clearExtensionHostPluginCommands } from "./command-runtime.js";
|
||||
import type { OpenClawConfig } from "../../config/config.js";
|
||||
import { createSubsystemLogger } from "../../logging/subsystem.js";
|
||||
import type { PluginRegistry } from "../../plugins/registry.js";
|
||||
import {
|
||||
createPluginRuntime,
|
||||
type CreatePluginRuntimeOptions,
|
||||
} from "../../plugins/runtime/index.js";
|
||||
import type { PluginLogger } from "../../plugins/types.js";
|
||||
import { clearExtensionHostPluginCommands } from "../contributions/command-runtime.js";
|
||||
import {
|
||||
clearExtensionHostLoaderHostState,
|
||||
getExtensionHostDiscoveryWarningCache,
|
||||
@ -18,7 +21,7 @@ export type ExtensionHostPluginLoadOptions = {
|
||||
logger?: PluginLogger;
|
||||
coreGatewayHandlers?: Record<
|
||||
string,
|
||||
import("../gateway/server-methods/types.js").GatewayRequestHandler
|
||||
import("../../gateway/server-methods/types.js").GatewayRequestHandler
|
||||
>;
|
||||
runtimeOptions?: CreatePluginRuntimeOptions;
|
||||
cache?: boolean;
|
||||
@ -1,8 +1,8 @@
|
||||
import type { GatewayRequestHandler } from "../gateway/server-methods/types.js";
|
||||
import type { PluginRegistry } from "../plugins/registry.js";
|
||||
import type { CreatePluginRuntimeOptions } from "../plugins/runtime/index.js";
|
||||
import type { PluginRuntime } from "../plugins/runtime/types.js";
|
||||
import { activateExtensionHostRegistry } from "./activation.js";
|
||||
import type { GatewayRequestHandler } from "../../gateway/server-methods/types.js";
|
||||
import type { PluginRegistry } from "../../plugins/registry.js";
|
||||
import type { CreatePluginRuntimeOptions } from "../../plugins/runtime/index.js";
|
||||
import type { PluginRuntime } from "../../plugins/runtime/types.js";
|
||||
import { activateExtensionHostRegistry } from "../activation.js";
|
||||
import { setCachedExtensionHostRegistry } from "./loader-cache.js";
|
||||
import { prepareExtensionHostLoaderExecution } from "./loader-execution.js";
|
||||
import type { ExtensionHostLoaderPreflightReady } from "./loader-preflight.js";
|
||||
@ -1,7 +1,7 @@
|
||||
import type { OpenClawConfig } from "../config/config.js";
|
||||
import { applyTestPluginDefaults, normalizePluginsConfig } from "../plugins/config-state.js";
|
||||
import type { PluginLogger } from "../plugins/types.js";
|
||||
import { activateExtensionHostRegistry } from "./activation.js";
|
||||
import type { OpenClawConfig } from "../../config/config.js";
|
||||
import { applyTestPluginDefaults, normalizePluginsConfig } from "../../plugins/config-state.js";
|
||||
import type { PluginLogger } from "../../plugins/types.js";
|
||||
import { activateExtensionHostRegistry } from "../activation.js";
|
||||
import {
|
||||
buildExtensionHostRegistryCacheKey,
|
||||
getCachedExtensionHostRegistry,
|
||||
@ -1,8 +1,8 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import type { OpenClawConfig } from "../config/config.js";
|
||||
import { normalizePluginsConfig } from "../plugins/config-state.js";
|
||||
import type { PluginCandidate } from "../plugins/discovery.js";
|
||||
import type { PluginManifestRecord } from "../plugins/manifest-registry.js";
|
||||
import type { OpenClawConfig } from "../../config/config.js";
|
||||
import { normalizePluginsConfig } from "../../plugins/config-state.js";
|
||||
import type { PluginCandidate } from "../../plugins/discovery.js";
|
||||
import type { PluginManifestRecord } from "../../plugins/manifest-registry.js";
|
||||
import { prepareExtensionHostPluginCandidate } from "./loader-records.js";
|
||||
|
||||
function createCandidate(overrides: Partial<PluginCandidate> = {}): PluginCandidate {
|
||||
@ -1,12 +1,12 @@
|
||||
import type { OpenClawConfig } from "../config/config.js";
|
||||
import type { OpenClawConfig } from "../../config/config.js";
|
||||
import {
|
||||
resolveEffectiveEnableState,
|
||||
type NormalizedPluginsConfig,
|
||||
} from "../plugins/config-state.js";
|
||||
import type { PluginCandidate } from "../plugins/discovery.js";
|
||||
import type { PluginManifestRecord } from "../plugins/manifest-registry.js";
|
||||
import type { PluginRecord } from "../plugins/registry.js";
|
||||
import { createExtensionHostPluginRecord } from "./loader-policy.js";
|
||||
} from "../../plugins/config-state.js";
|
||||
import type { PluginCandidate } from "../../plugins/discovery.js";
|
||||
import type { PluginManifestRecord } from "../../plugins/manifest-registry.js";
|
||||
import type { PluginRecord } from "../../plugins/registry.js";
|
||||
import { createExtensionHostPluginRecord } from "../policy/loader-policy.js";
|
||||
import { setExtensionHostPluginRecordDisabled } from "./loader-state.js";
|
||||
|
||||
type CandidateEntry = NormalizedPluginsConfig["entries"][string];
|
||||
@ -1,6 +1,6 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import type { PluginDiagnostic } from "../plugins/types.js";
|
||||
import { createExtensionHostPluginRecord } from "./loader-policy.js";
|
||||
import type { PluginDiagnostic } from "../../plugins/types.js";
|
||||
import { createExtensionHostPluginRecord } from "../policy/loader-policy.js";
|
||||
import {
|
||||
planExtensionHostLoadedPlugin,
|
||||
runExtensionHostPluginRegister,
|
||||
@ -1,12 +1,11 @@
|
||||
import type { OpenClawConfig } from "../config/config.js";
|
||||
import type { PluginManifestRecord } from "../plugins/manifest-registry.js";
|
||||
import type { PluginRecord } from "../plugins/registry.js";
|
||||
import type { OpenClawConfig } from "../../config/config.js";
|
||||
import type { PluginManifestRecord } from "../../plugins/manifest-registry.js";
|
||||
import type { PluginRecord } from "../../plugins/registry.js";
|
||||
import type {
|
||||
OpenClawPluginApi,
|
||||
OpenClawPluginDefinition,
|
||||
OpenClawPluginHookOptions,
|
||||
PluginDiagnostic,
|
||||
} from "../plugins/types.js";
|
||||
} from "../../plugins/types.js";
|
||||
import {
|
||||
applyExtensionHostDefinitionToRecord,
|
||||
resolveExtensionHostMemoryDecision,
|
||||
@ -105,10 +104,11 @@ export function planExtensionHostLoadedPlugin(params: {
|
||||
value: params.entryConfig,
|
||||
});
|
||||
if (!validatedConfig.ok) {
|
||||
const errors = validatedConfig.errors ?? ["invalid config"];
|
||||
return {
|
||||
kind: "invalid-config",
|
||||
message: `invalid config: ${validatedConfig.errors.join(", ")}`,
|
||||
errors: validatedConfig.errors,
|
||||
message: `invalid config: ${errors.join(", ")}`,
|
||||
errors,
|
||||
memorySlotMatched,
|
||||
selectedMemoryPluginId: nextSelectedMemoryPluginId,
|
||||
};
|
||||
@ -147,13 +147,13 @@ export function runExtensionHostPluginRegister(params: {
|
||||
options: {
|
||||
config: OpenClawConfig;
|
||||
pluginConfig?: Record<string, unknown>;
|
||||
hookPolicy?: OpenClawPluginHookOptions;
|
||||
hookPolicy?: { allowPromptInjection?: boolean };
|
||||
},
|
||||
) => OpenClawPluginApi;
|
||||
record: PluginRecord;
|
||||
config: OpenClawConfig;
|
||||
pluginConfig?: Record<string, unknown>;
|
||||
hookPolicy?: OpenClawPluginHookOptions;
|
||||
hookPolicy?: { allowPromptInjection?: boolean };
|
||||
diagnostics: PluginDiagnostic[];
|
||||
}):
|
||||
| {
|
||||
@ -1,5 +1,5 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import type { PluginRegistry } from "../plugins/registry.js";
|
||||
import type { PluginRegistry } from "../../plugins/registry.js";
|
||||
import { runExtensionHostLoaderSession } from "./loader-run.js";
|
||||
|
||||
vi.mock("./loader-session.js", () => ({
|
||||
@ -1,6 +1,7 @@
|
||||
import type { OpenClawConfig } from "../config/config.js";
|
||||
import type { PluginRecord } from "../plugins/registry.js";
|
||||
import type { OpenClawPluginApi, OpenClawPluginModule } from "../plugins/types.js";
|
||||
import type { OpenClawConfig } from "../../config/config.js";
|
||||
import type { NormalizedPluginsConfig } from "../../plugins/config-state.js";
|
||||
import type { PluginRecord } from "../../plugins/registry.js";
|
||||
import type { OpenClawPluginApi, OpenClawPluginModule } from "../../plugins/types.js";
|
||||
import type { ExtensionHostLoaderSession } from "./loader-session.js";
|
||||
import {
|
||||
finalizeExtensionHostLoaderSession,
|
||||
@ -13,21 +14,7 @@ export function runExtensionHostLoaderSession(params: {
|
||||
rootDir: string;
|
||||
}>;
|
||||
manifestByRoot: Map<string, { rootDir: string }>;
|
||||
normalizedConfig: {
|
||||
entries: Record<
|
||||
string,
|
||||
{
|
||||
enabled?: boolean;
|
||||
hooks?: {
|
||||
allowPromptInjection?: boolean;
|
||||
};
|
||||
config?: unknown;
|
||||
}
|
||||
>;
|
||||
slots: {
|
||||
memory?: string | null;
|
||||
};
|
||||
};
|
||||
normalizedConfig: NormalizedPluginsConfig;
|
||||
rootConfig: OpenClawConfig;
|
||||
validateOnly: boolean;
|
||||
createApi: (
|
||||
@ -1,4 +1,4 @@
|
||||
import type { PluginRuntime } from "../plugins/runtime/types.js";
|
||||
import type { PluginRuntime } from "../../plugins/runtime/types.js";
|
||||
|
||||
export function createExtensionHostLazyRuntime<TOptions>(params: {
|
||||
runtimeOptions?: TOptions;
|
||||
@ -1,5 +1,5 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { createExtensionHostPluginRecord } from "./loader-policy.js";
|
||||
import { createExtensionHostPluginRecord } from "../policy/loader-policy.js";
|
||||
import {
|
||||
applyExtensionHostDefinitionToRecord,
|
||||
resolveExtensionHostEarlyMemoryDecision,
|
||||
@ -1,7 +1,7 @@
|
||||
import { resolveMemorySlotDecision } from "../plugins/config-state.js";
|
||||
import type { PluginRecord } from "../plugins/registry.js";
|
||||
import { validateJsonSchemaValue } from "../plugins/schema-validator.js";
|
||||
import type { OpenClawPluginDefinition, PluginDiagnostic } from "../plugins/types.js";
|
||||
import { resolveMemorySlotDecision } from "../../plugins/config-state.js";
|
||||
import type { PluginRecord } from "../../plugins/registry.js";
|
||||
import { validateJsonSchemaValue } from "../../plugins/schema-validator.js";
|
||||
import type { OpenClawPluginDefinition, PluginDiagnostic } from "../../plugins/types.js";
|
||||
|
||||
export function validateExtensionHostConfig(params: {
|
||||
schema?: Record<string, unknown>;
|
||||
@ -87,7 +87,7 @@ export function resolveExtensionHostEarlyMemoryDecision(params: {
|
||||
origin: PluginRecord["origin"];
|
||||
manifestKind?: PluginRecord["kind"];
|
||||
recordId: string;
|
||||
memorySlot?: string;
|
||||
memorySlot?: string | null;
|
||||
selectedMemoryPluginId: string | null;
|
||||
}): { enabled: boolean; reason?: string } {
|
||||
if (params.origin !== "bundled" || params.manifestKind !== "memory") {
|
||||
@ -108,7 +108,7 @@ export function resolveExtensionHostEarlyMemoryDecision(params: {
|
||||
export function resolveExtensionHostMemoryDecision(params: {
|
||||
recordId: string;
|
||||
recordKind?: PluginRecord["kind"];
|
||||
memorySlot?: string;
|
||||
memorySlot?: string | null;
|
||||
selectedMemoryPluginId: string | null;
|
||||
}): { enabled: boolean; selected: boolean; reason?: string } {
|
||||
const decision = resolveMemorySlotDecision({
|
||||
@ -119,7 +119,7 @@ export function resolveExtensionHostMemoryDecision(params: {
|
||||
});
|
||||
return {
|
||||
enabled: decision.enabled,
|
||||
selected: decision.selected,
|
||||
selected: decision.selected === true,
|
||||
...(decision.enabled ? {} : { reason: decision.reason }),
|
||||
};
|
||||
}
|
||||
@ -2,9 +2,9 @@ import fs from "node:fs";
|
||||
import os from "node:os";
|
||||
import path from "node:path";
|
||||
import { afterEach, describe, expect, it } from "vitest";
|
||||
import { normalizePluginsConfig } from "../plugins/config-state.js";
|
||||
import type { PluginManifestRecord } from "../plugins/manifest-registry.js";
|
||||
import type { PluginRegistry } from "../plugins/registry.js";
|
||||
import { normalizePluginsConfig } from "../../plugins/config-state.js";
|
||||
import type { PluginManifestRecord } from "../../plugins/manifest-registry.js";
|
||||
import type { PluginRegistry } from "../../plugins/registry.js";
|
||||
import {
|
||||
createExtensionHostLoaderSession,
|
||||
finalizeExtensionHostLoaderSession,
|
||||
@ -1,11 +1,12 @@
|
||||
import type { OpenClawConfig } from "../config/config.js";
|
||||
import type { PluginCandidate } from "../plugins/discovery.js";
|
||||
import type { PluginManifestRecord } from "../plugins/manifest-registry.js";
|
||||
import type { PluginRecord, PluginRegistry } from "../plugins/registry.js";
|
||||
import type { OpenClawPluginApi, OpenClawPluginModule, PluginLogger } from "../plugins/types.js";
|
||||
import type { OpenClawConfig } from "../../config/config.js";
|
||||
import type { NormalizedPluginsConfig } from "../../plugins/config-state.js";
|
||||
import type { PluginCandidate } from "../../plugins/discovery.js";
|
||||
import type { PluginManifestRecord } from "../../plugins/manifest-registry.js";
|
||||
import type { PluginRecord, PluginRegistry } from "../../plugins/registry.js";
|
||||
import type { OpenClawPluginApi, OpenClawPluginModule, PluginLogger } from "../../plugins/types.js";
|
||||
import type { ExtensionHostProvenanceIndex } from "../policy/loader-provenance.js";
|
||||
import { finalizeExtensionHostRegistryLoad } from "./loader-finalize.js";
|
||||
import { processExtensionHostPluginCandidate } from "./loader-flow.js";
|
||||
import type { ExtensionHostProvenanceIndex } from "./loader-policy.js";
|
||||
|
||||
export type ExtensionHostLoaderSession = {
|
||||
registry: PluginRegistry;
|
||||
@ -53,21 +54,7 @@ export function processExtensionHostLoaderSessionCandidate(params: {
|
||||
session: ExtensionHostLoaderSession;
|
||||
candidate: PluginCandidate;
|
||||
manifestRecord: PluginManifestRecord;
|
||||
normalizedConfig: {
|
||||
entries: Record<
|
||||
string,
|
||||
{
|
||||
enabled?: boolean;
|
||||
hooks?: {
|
||||
allowPromptInjection?: boolean;
|
||||
};
|
||||
config?: unknown;
|
||||
}
|
||||
>;
|
||||
slots: {
|
||||
memory?: string | null;
|
||||
};
|
||||
};
|
||||
normalizedConfig: NormalizedPluginsConfig;
|
||||
rootConfig: OpenClawConfig;
|
||||
validateOnly: boolean;
|
||||
createApi: (
|
||||
@ -1,6 +1,6 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import type { PluginRegistry } from "../plugins/registry.js";
|
||||
import { createExtensionHostPluginRecord } from "./loader-policy.js";
|
||||
import type { PluginRegistry } from "../../plugins/registry.js";
|
||||
import { createExtensionHostPluginRecord } from "../policy/loader-policy.js";
|
||||
import {
|
||||
appendExtensionHostPluginRecord,
|
||||
markExtensionHostRegistryPluginsReady,
|
||||
@ -2,7 +2,7 @@ import type {
|
||||
PluginRecord,
|
||||
PluginRecordLifecycleState,
|
||||
PluginRegistry,
|
||||
} from "../plugins/registry.js";
|
||||
} from "../../plugins/registry.js";
|
||||
|
||||
const EXTENSION_HOST_LIFECYCLE_STATUS_MAP: Record<
|
||||
PluginRecordLifecycleState,
|
||||
@ -1,13 +1,13 @@
|
||||
import { registerInternalHook, type InternalHookHandler } from "../hooks/internal-hooks.js";
|
||||
import { registerInternalHook, type InternalHookHandler } from "../../hooks/internal-hooks.js";
|
||||
import type {
|
||||
PluginHookHandlerMap,
|
||||
PluginHookName,
|
||||
PluginHookRegistration as TypedPluginHookRegistration,
|
||||
} from "../plugins/types.js";
|
||||
} from "../../plugins/types.js";
|
||||
import {
|
||||
isPromptInjectionHookName,
|
||||
stripPromptMutationFieldsFromLegacyHookResult,
|
||||
} from "../plugins/types.js";
|
||||
} from "../../plugins/types.js";
|
||||
|
||||
export function constrainExtensionHostPromptInjectionHook(
|
||||
handler: PluginHookHandlerMap["before_agent_start"],
|
||||
@ -1,7 +1,7 @@
|
||||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { resolveOpenClawPackageRootSync } from "../infra/openclaw-root.js";
|
||||
import { resolveOpenClawPackageRootSync } from "../../infra/openclaw-root.js";
|
||||
|
||||
type PluginSdkAliasCandidateKind = "dist" | "src";
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import type { PluginRecord } from "../plugins/registry.js";
|
||||
import type { PluginRecord } from "../../plugins/registry.js";
|
||||
import { createExtensionHostPluginApi, normalizeExtensionHostPluginLogger } from "./plugin-api.js";
|
||||
|
||||
function createRecord(): PluginRecord {
|
||||
@ -1,19 +1,21 @@
|
||||
import type { PluginRecord } from "../plugins/registry.js";
|
||||
import type { PluginRuntime } from "../plugins/runtime/types.js";
|
||||
import type { AnyAgentTool } from "../../agents/tools/common.js";
|
||||
import type { PluginRecord } from "../../plugins/registry.js";
|
||||
import type { PluginRuntime } from "../../plugins/runtime/types.js";
|
||||
import type {
|
||||
OpenClawPluginApi,
|
||||
OpenClawPluginChannelRegistration,
|
||||
OpenClawPluginCliRegistrar,
|
||||
OpenClawPluginCommandDefinition,
|
||||
OpenClawPluginHttpRouteParams,
|
||||
PluginInteractiveHandlerRegistration,
|
||||
OpenClawPluginService,
|
||||
OpenClawPluginToolFactory,
|
||||
PluginLogger,
|
||||
PluginHookName,
|
||||
PluginHookHandlerMap,
|
||||
ProviderPlugin,
|
||||
} from "../plugins/types.js";
|
||||
import { resolveUserPath } from "../utils.js";
|
||||
} from "../../plugins/types.js";
|
||||
import { resolveUserPath } from "../../utils.js";
|
||||
|
||||
export function normalizeExtensionHostPluginLogger(logger: PluginLogger): PluginLogger {
|
||||
return {
|
||||
@ -31,7 +33,7 @@ export function createExtensionHostPluginApi(params: {
|
||||
config: OpenClawPluginApi["config"];
|
||||
pluginConfig?: Record<string, unknown>;
|
||||
registerTool: (
|
||||
tool: OpenClawPluginToolFactory | { name: string },
|
||||
tool: OpenClawPluginToolFactory | AnyAgentTool,
|
||||
opts?: { name?: string; names?: string[]; optional?: boolean },
|
||||
) => void;
|
||||
registerHook: (
|
||||
@ -48,6 +50,7 @@ export function createExtensionHostPluginApi(params: {
|
||||
? H
|
||||
: never,
|
||||
) => void;
|
||||
registerInteractiveHandler: (registration: PluginInteractiveHandlerRegistration) => void;
|
||||
registerCli: (registrar: OpenClawPluginCliRegistrar, opts?: { commands?: string[] }) => void;
|
||||
registerService: (service: OpenClawPluginService) => void;
|
||||
registerCommand: (command: OpenClawPluginCommandDefinition) => void;
|
||||
@ -77,6 +80,7 @@ export function createExtensionHostPluginApi(params: {
|
||||
registerChannel: (registration) => params.registerChannel(registration),
|
||||
registerProvider: (provider) => params.registerProvider(provider),
|
||||
registerGatewayMethod: (method, handler) => params.registerGatewayMethod(method, handler),
|
||||
registerInteractiveHandler: (registration) => params.registerInteractiveHandler(registration),
|
||||
registerCli: (registrar, opts) => params.registerCli(registrar, opts),
|
||||
registerService: (service) => params.registerService(service),
|
||||
registerCommand: (command) => params.registerCommand(command),
|
||||
@ -1,6 +1,6 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import { clearPluginCommands } from "../plugins/commands.js";
|
||||
import { createEmptyPluginRegistry, type PluginRecord } from "../plugins/registry.js";
|
||||
import { clearPluginCommands } from "../../plugins/commands.js";
|
||||
import { createEmptyPluginRegistry, type PluginRecord } from "../../plugins/registry.js";
|
||||
import {
|
||||
resolveExtensionHostCommandCompatibility,
|
||||
resolveExtensionHostProviderCompatibility,
|
||||
@ -1,18 +1,18 @@
|
||||
import { normalizeRegisteredProvider } from "../plugins/provider-validation.js";
|
||||
import type { PluginRecord, PluginRegistry } from "../plugins/registry.js";
|
||||
import { normalizeRegisteredProvider } from "../../plugins/provider-validation.js";
|
||||
import type { PluginRecord, PluginRegistry } from "../../plugins/registry.js";
|
||||
import type {
|
||||
OpenClawPluginCommandDefinition,
|
||||
PluginDiagnostic,
|
||||
ProviderPlugin,
|
||||
} from "../plugins/types.js";
|
||||
import { registerExtensionHostPluginCommand } from "./command-runtime.js";
|
||||
} from "../../plugins/types.js";
|
||||
import { registerExtensionHostPluginCommand } from "../contributions/command-runtime.js";
|
||||
import {
|
||||
type ExtensionHostCommandRegistration,
|
||||
type ExtensionHostProviderRegistration,
|
||||
resolveExtensionCommandRegistration,
|
||||
resolveExtensionProviderRegistration,
|
||||
} from "./runtime-registrations.js";
|
||||
import { listExtensionHostProviderRegistrations } from "./runtime-registry.js";
|
||||
} from "../contributions/runtime-registrations.js";
|
||||
import { listExtensionHostProviderRegistrations } from "../contributions/runtime-registry.js";
|
||||
|
||||
export function pushExtensionHostRegistryDiagnostic(params: {
|
||||
registry: PluginRegistry;
|
||||
@ -1,5 +1,5 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { createEmptyPluginRegistry, type PluginRecord } from "../plugins/registry.js";
|
||||
import { createEmptyPluginRegistry, type PluginRecord } from "../../plugins/registry.js";
|
||||
import { createExtensionHostPluginRegistrationActions } from "./plugin-registry-registrations.js";
|
||||
|
||||
function createRecord(): PluginRecord {
|
||||
@ -1,9 +1,9 @@
|
||||
import type { AnyAgentTool } from "../agents/tools/common.js";
|
||||
import type { ChannelPlugin } from "../channels/plugins/types.js";
|
||||
import { registerContextEngine as registerLegacyContextEngine } from "../context-engine/registry.js";
|
||||
import type { GatewayRequestHandler } from "../gateway/server-methods/types.js";
|
||||
import { registerInternalHook } from "../hooks/internal-hooks.js";
|
||||
import type { PluginRecord, PluginRegistry } from "../plugins/registry.js";
|
||||
import type { AnyAgentTool } from "../../agents/tools/common.js";
|
||||
import type { ChannelPlugin } from "../../channels/plugins/types.js";
|
||||
import { registerContextEngine as registerLegacyContextEngine } from "../../context-engine/registry.js";
|
||||
import type { GatewayRequestHandler } from "../../gateway/server-methods/types.js";
|
||||
import { registerInternalHook } from "../../hooks/internal-hooks.js";
|
||||
import type { PluginRecord, PluginRegistry } from "../../plugins/registry.js";
|
||||
import type {
|
||||
PluginHookHandlerMap,
|
||||
PluginHookName,
|
||||
@ -15,12 +15,7 @@ import type {
|
||||
OpenClawPluginService,
|
||||
OpenClawPluginToolFactory,
|
||||
PluginHookRegistration as TypedPluginHookRegistration,
|
||||
} from "../plugins/types.js";
|
||||
import {
|
||||
applyExtensionHostTypedHookPolicy,
|
||||
bridgeExtensionHostLegacyHooks,
|
||||
} from "./hook-compat.js";
|
||||
import { pushExtensionHostRegistryDiagnostic } from "./plugin-registry-compat.js";
|
||||
} from "../../plugins/types.js";
|
||||
import {
|
||||
addExtensionChannelRegistration,
|
||||
addExtensionCliRegistration,
|
||||
@ -31,7 +26,7 @@ import {
|
||||
addExtensionServiceRegistration,
|
||||
addExtensionToolRegistration,
|
||||
addExtensionTypedHookRegistration,
|
||||
} from "./registry-writes.js";
|
||||
} from "../contributions/registry-writes.js";
|
||||
import {
|
||||
resolveExtensionChannelRegistration,
|
||||
resolveExtensionCliRegistration,
|
||||
@ -42,12 +37,17 @@ import {
|
||||
resolveExtensionServiceRegistration,
|
||||
resolveExtensionToolRegistration,
|
||||
resolveExtensionTypedHookRegistration,
|
||||
} from "./runtime-registrations.js";
|
||||
} from "../contributions/runtime-registrations.js";
|
||||
import {
|
||||
listExtensionHostChannelRegistrations,
|
||||
getExtensionHostGatewayHandlers,
|
||||
listExtensionHostHttpRoutes,
|
||||
} from "./runtime-registry.js";
|
||||
} from "../contributions/runtime-registry.js";
|
||||
import {
|
||||
applyExtensionHostTypedHookPolicy,
|
||||
bridgeExtensionHostLegacyHooks,
|
||||
} from "./hook-compat.js";
|
||||
import { pushExtensionHostRegistryDiagnostic } from "./plugin-registry-compat.js";
|
||||
|
||||
export type PluginTypedHookPolicy = {
|
||||
allowPromptInjection?: boolean;
|
||||
@ -1,6 +1,6 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import { clearPluginCommands } from "../plugins/commands.js";
|
||||
import { createEmptyPluginRegistry, type PluginRecord } from "../plugins/registry.js";
|
||||
import { clearPluginCommands } from "../../plugins/commands.js";
|
||||
import { createEmptyPluginRegistry, type PluginRecord } from "../../plugins/registry.js";
|
||||
import { createExtensionHostPluginRegistry } from "./plugin-registry.js";
|
||||
|
||||
function createRecord(): PluginRecord {
|
||||
@ -1,10 +1,16 @@
|
||||
import type { PluginRecord, PluginRegistry, PluginRegistryParams } from "../plugins/registry.js";
|
||||
import { registerPluginInteractiveHandler } from "../../plugins/interactive.js";
|
||||
import type { PluginRecord, PluginRegistry, PluginRegistryParams } from "../../plugins/registry.js";
|
||||
import type {
|
||||
PluginDiagnostic,
|
||||
OpenClawPluginApi,
|
||||
OpenClawPluginCommandDefinition,
|
||||
PluginInteractiveHandlerRegistration,
|
||||
ProviderPlugin,
|
||||
} from "../plugins/types.js";
|
||||
} from "../../plugins/types.js";
|
||||
import {
|
||||
addExtensionCommandRegistration,
|
||||
addExtensionProviderRegistration,
|
||||
} from "../contributions/registry-writes.js";
|
||||
import { createExtensionHostPluginApi } from "./plugin-api.js";
|
||||
import {
|
||||
resolveExtensionHostCommandCompatibility,
|
||||
@ -14,10 +20,6 @@ import {
|
||||
createExtensionHostPluginRegistrationActions,
|
||||
type PluginTypedHookPolicy,
|
||||
} from "./plugin-registry-registrations.js";
|
||||
import {
|
||||
addExtensionCommandRegistration,
|
||||
addExtensionProviderRegistration,
|
||||
} from "./registry-writes.js";
|
||||
|
||||
export function createExtensionHostPluginRegistry(params: {
|
||||
registry: PluginRegistry;
|
||||
@ -85,6 +87,20 @@ export function createExtensionHostPluginRegistry(params: {
|
||||
registerProvider: (provider) => registerProvider(record, provider),
|
||||
registerGatewayMethod: (method, handler) =>
|
||||
actions.registerGatewayMethod(record, method, handler),
|
||||
registerInteractiveHandler: (registration: PluginInteractiveHandlerRegistration) => {
|
||||
const result = registerPluginInteractiveHandler(record.id, registration, {
|
||||
pluginName: record.name,
|
||||
pluginRoot: record.rootDir,
|
||||
});
|
||||
if (!result.ok) {
|
||||
pushDiagnostic({
|
||||
level: "warn",
|
||||
pluginId: record.id,
|
||||
source: record.source,
|
||||
message: result.error ?? "interactive handler registration failed",
|
||||
});
|
||||
}
|
||||
},
|
||||
registerCli: (registrar, opts) => actions.registerCli(record, registrar, opts),
|
||||
registerService: (service) => actions.registerService(record, service),
|
||||
registerCommand: (command) => registerCommand(record, command),
|
||||
@ -1,7 +1,7 @@
|
||||
import { Command } from "commander";
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import { createEmptyPluginRegistry } from "../plugins/registry.js";
|
||||
import type { PluginLogger } from "../plugins/types.js";
|
||||
import { createEmptyPluginRegistry } from "../../plugins/registry.js";
|
||||
import type { PluginLogger } from "../../plugins/types.js";
|
||||
import { registerExtensionHostCliCommands } from "./cli-lifecycle.js";
|
||||
|
||||
function createLogger(): PluginLogger {
|
||||
@ -1,7 +1,7 @@
|
||||
import type { Command } from "commander";
|
||||
import type { OpenClawConfig } from "../config/config.js";
|
||||
import type { PluginRegistry } from "../plugins/registry.js";
|
||||
import type { PluginLogger } from "../plugins/types.js";
|
||||
import type { OpenClawConfig } from "../../config/config.js";
|
||||
import type { PluginRegistry } from "../../plugins/registry.js";
|
||||
import type { PluginLogger } from "../../plugins/types.js";
|
||||
import { listExtensionHostCliRegistrations } from "./runtime-registry.js";
|
||||
|
||||
export function registerExtensionHostCliCommands(params: {
|
||||
@ -1,10 +1,10 @@
|
||||
import type { OpenClawConfig } from "../config/config.js";
|
||||
import { logVerbose } from "../globals.js";
|
||||
import type { OpenClawConfig } from "../../config/config.js";
|
||||
import { logVerbose } from "../../globals.js";
|
||||
import type {
|
||||
OpenClawPluginCommandDefinition,
|
||||
PluginCommandContext,
|
||||
PluginCommandResult,
|
||||
} from "../plugins/types.js";
|
||||
} from "../../plugins/types.js";
|
||||
|
||||
export type RegisteredExtensionHostPluginCommand = OpenClawPluginCommandDefinition & {
|
||||
pluginId: string;
|
||||
@ -210,6 +210,12 @@ export async function executeExtensionHostPluginCommand(params: {
|
||||
to: params.to,
|
||||
accountId: params.accountId,
|
||||
messageThreadId: params.messageThreadId,
|
||||
requestConversationBinding: async () => ({
|
||||
status: "error" as const,
|
||||
message: "Conversation binding is unavailable for this command surface.",
|
||||
}),
|
||||
detachConversationBinding: async () => ({ removed: false }),
|
||||
getCurrentConversationBinding: async () => null,
|
||||
};
|
||||
|
||||
extensionHostCommandRegistryLocked = true;
|
||||
@ -1,5 +1,5 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import { createEmptyPluginRegistry } from "../plugins/registry.js";
|
||||
import { createEmptyPluginRegistry } from "../../plugins/registry.js";
|
||||
import {
|
||||
createExtensionHostGatewayExtraHandlers,
|
||||
logExtensionHostPluginDiagnostics,
|
||||
@ -1,6 +1,6 @@
|
||||
import type { GatewayRequestHandlers } from "../gateway/server-methods/types.js";
|
||||
import type { PluginRegistry } from "../plugins/registry.js";
|
||||
import type { PluginDiagnostic } from "../plugins/types.js";
|
||||
import type { GatewayRequestHandlers } from "../../gateway/server-methods/types.js";
|
||||
import type { PluginRegistry } from "../../plugins/registry.js";
|
||||
import type { PluginDiagnostic } from "../../plugins/types.js";
|
||||
import { getExtensionHostGatewayHandlers } from "./runtime-registry.js";
|
||||
|
||||
export function resolveExtensionHostGatewayMethods(params: {
|
||||
@ -1,23 +1,23 @@
|
||||
import { resolveOpenClawAgentDir } from "../agents/agent-paths.js";
|
||||
import { resolveOpenClawAgentDir } from "../../agents/agent-paths.js";
|
||||
import {
|
||||
resolveDefaultAgentId,
|
||||
resolveAgentDir,
|
||||
resolveAgentWorkspaceDir,
|
||||
} from "../agents/agent-scope.js";
|
||||
import { upsertAuthProfile } from "../agents/auth-profiles.js";
|
||||
import { resolveDefaultAgentWorkspaceDir } from "../agents/workspace.js";
|
||||
} from "../../agents/agent-scope.js";
|
||||
import { upsertAuthProfile } from "../../agents/auth-profiles.js";
|
||||
import { resolveDefaultAgentWorkspaceDir } from "../../agents/workspace.js";
|
||||
import type {
|
||||
ApplyAuthChoiceParams,
|
||||
ApplyAuthChoiceResult,
|
||||
} from "../commands/auth-choice.apply.js";
|
||||
import { isRemoteEnvironment } from "../commands/oauth-env.js";
|
||||
import { createVpsAwareOAuthHandlers } from "../commands/oauth-flow.js";
|
||||
import { applyAuthProfileConfig } from "../commands/onboard-auth.js";
|
||||
import { openUrl } from "../commands/onboard-helpers.js";
|
||||
import { enablePluginInConfig } from "../plugins/enable.js";
|
||||
import { resolveProviderPluginChoice } from "../plugins/provider-wizard.js";
|
||||
import { resolvePluginProviders } from "../plugins/providers.js";
|
||||
import type { ProviderAuthMethod } from "../plugins/types.js";
|
||||
} from "../../commands/auth-choice.apply.js";
|
||||
import { isRemoteEnvironment } from "../../commands/oauth-env.js";
|
||||
import { createVpsAwareOAuthHandlers } from "../../commands/oauth-flow.js";
|
||||
import { applyAuthProfileConfig } from "../../commands/onboard-auth.js";
|
||||
import { openUrl } from "../../commands/onboard-helpers.js";
|
||||
import { enablePluginInConfig } from "../../plugins/enable.js";
|
||||
import { resolveProviderPluginChoice } from "../../plugins/provider-wizard.js";
|
||||
import { resolvePluginProviders } from "../../plugins/providers.js";
|
||||
import type { ProviderAuthMethod } from "../../plugins/types.js";
|
||||
import {
|
||||
applyExtensionHostDefaultModel,
|
||||
mergeExtensionHostConfigPatch,
|
||||
@ -1,5 +1,5 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import type { ProviderPlugin } from "../plugins/types.js";
|
||||
import type { ProviderPlugin } from "../../plugins/types.js";
|
||||
import {
|
||||
applyExtensionHostDefaultModel,
|
||||
mergeExtensionHostConfigPatch,
|
||||
@ -1,6 +1,6 @@
|
||||
import { normalizeProviderId } from "../agents/provider-id.js";
|
||||
import type { OpenClawConfig } from "../config/config.js";
|
||||
import type { ProviderAuthMethod, ProviderPlugin } from "../plugins/types.js";
|
||||
import { normalizeProviderId } from "../../agents/provider-id.js";
|
||||
import type { OpenClawConfig } from "../../config/config.js";
|
||||
import type { ProviderAuthMethod, ProviderPlugin } from "../../plugins/types.js";
|
||||
|
||||
export function resolveExtensionHostProviderMatch(
|
||||
providers: ProviderPlugin[],
|
||||
@ -1,6 +1,6 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import type { ModelProviderConfig } from "../config/types.js";
|
||||
import type { ProviderDiscoveryOrder, ProviderPlugin } from "../plugins/types.js";
|
||||
import type { ModelProviderConfig } from "../../config/types.js";
|
||||
import type { ProviderDiscoveryOrder, ProviderPlugin } from "../../plugins/types.js";
|
||||
import {
|
||||
groupExtensionHostDiscoveryProvidersByOrder,
|
||||
normalizeExtensionHostDiscoveryResult,
|
||||
@ -1,6 +1,6 @@
|
||||
import { normalizeProviderId } from "../agents/provider-id.js";
|
||||
import type { ModelProviderConfig } from "../config/types.js";
|
||||
import type { ProviderDiscoveryOrder, ProviderPlugin } from "../plugins/types.js";
|
||||
import { normalizeProviderId } from "../../agents/provider-id.js";
|
||||
import type { ModelProviderConfig } from "../../config/types.js";
|
||||
import type { ProviderDiscoveryOrder, ProviderPlugin } from "../../plugins/types.js";
|
||||
|
||||
const DISCOVERY_ORDER: readonly ProviderDiscoveryOrder[] = ["simple", "profile", "paired", "late"];
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
import { DEFAULT_PROVIDER } from "../agents/defaults.js";
|
||||
import { parseModelRef } from "../agents/model-ref.js";
|
||||
import { normalizeProviderId } from "../agents/provider-id.js";
|
||||
import type { OpenClawConfig } from "../config/config.js";
|
||||
import { resolvePluginProviders } from "../plugins/providers.js";
|
||||
import type { WizardPrompter } from "../wizard/prompts.js";
|
||||
import { DEFAULT_PROVIDER } from "../../agents/defaults.js";
|
||||
import { parseModelRef } from "../../agents/model-ref.js";
|
||||
import { normalizeProviderId } from "../../agents/provider-id.js";
|
||||
import type { OpenClawConfig } from "../../config/config.js";
|
||||
import { resolvePluginProviders } from "../../plugins/providers.js";
|
||||
import type { WizardPrompter } from "../../wizard/prompts.js";
|
||||
|
||||
export async function runExtensionHostProviderModelSelectedHook(params: {
|
||||
config: OpenClawConfig;
|
||||
@ -1,5 +1,5 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { createEmptyPluginRegistry } from "../plugins/registry.js";
|
||||
import { createEmptyPluginRegistry } from "../../plugins/registry.js";
|
||||
import { resolveExtensionHostProviders } from "./provider-runtime.js";
|
||||
import { addExtensionHostProviderRegistration } from "./runtime-registry.js";
|
||||
|
||||
22
src/extension-host/contributions/provider-runtime.ts
Normal file
22
src/extension-host/contributions/provider-runtime.ts
Normal file
@ -0,0 +1,22 @@
|
||||
import type { PluginRegistry } from "../../plugins/registry.js";
|
||||
import type { ProviderPlugin } from "../../plugins/types.js";
|
||||
import { listExtensionHostProviderRegistrations } from "./runtime-registry.js";
|
||||
|
||||
export function resolveExtensionHostProviders(params: {
|
||||
registry: Pick<
|
||||
PluginRegistry,
|
||||
| "channels"
|
||||
| "tools"
|
||||
| "providers"
|
||||
| "cliRegistrars"
|
||||
| "commands"
|
||||
| "services"
|
||||
| "httpRoutes"
|
||||
| "gatewayHandlers"
|
||||
>;
|
||||
}): ProviderPlugin[] {
|
||||
return listExtensionHostProviderRegistrations(params.registry).map((entry) => ({
|
||||
...entry.provider,
|
||||
pluginId: entry.pluginId,
|
||||
}));
|
||||
}
|
||||
@ -1,5 +1,5 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import type { ProviderPlugin } from "../plugins/types.js";
|
||||
import type { ProviderPlugin } from "../../plugins/types.js";
|
||||
import {
|
||||
buildExtensionHostProviderMethodChoice,
|
||||
resolveExtensionHostProviderChoice,
|
||||
@ -1,10 +1,10 @@
|
||||
import { normalizeProviderId } from "../agents/provider-id.js";
|
||||
import { normalizeProviderId } from "../../agents/provider-id.js";
|
||||
import type {
|
||||
ProviderAuthMethod,
|
||||
ProviderPlugin,
|
||||
ProviderPluginWizardModelPicker,
|
||||
ProviderPluginWizardOnboarding,
|
||||
} from "../plugins/types.js";
|
||||
} from "../../plugins/types.js";
|
||||
|
||||
export const EXTENSION_HOST_PROVIDER_CHOICE_PREFIX = "provider-plugin:";
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import { createEmptyPluginRegistry, type PluginRecord } from "../plugins/registry.js";
|
||||
import { createEmptyPluginRegistry, type PluginRecord } from "../../plugins/registry.js";
|
||||
import {
|
||||
addExtensionChannelRegistration,
|
||||
addExtensionCliRegistration,
|
||||
@ -1,5 +1,5 @@
|
||||
import { registerContextEngine, type ContextEngineFactory } from "../context-engine/registry.js";
|
||||
import type { GatewayRequestHandler } from "../gateway/server-methods/types.js";
|
||||
import { registerContextEngine, type ContextEngineFactory } from "../../context-engine/registry.js";
|
||||
import type { GatewayRequestHandler } from "../../gateway/server-methods/types.js";
|
||||
import type {
|
||||
PluginChannelRegistration,
|
||||
PluginCliRegistration,
|
||||
@ -11,8 +11,8 @@ import type {
|
||||
PluginProviderRegistration,
|
||||
PluginServiceRegistration,
|
||||
PluginToolRegistration,
|
||||
} from "../plugins/registry.js";
|
||||
import type { PluginHookRegistration as TypedPluginHookRegistration } from "../plugins/types.js";
|
||||
} from "../../plugins/registry.js";
|
||||
import type { PluginHookRegistration as TypedPluginHookRegistration } from "../../plugins/types.js";
|
||||
import type {
|
||||
ExtensionHostChannelRegistration,
|
||||
ExtensionHostCliRegistration,
|
||||
@ -1,9 +1,9 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import type { AnyAgentTool } from "../agents/tools/common.js";
|
||||
import type { ChannelPlugin } from "../channels/plugins/types.js";
|
||||
import type { ContextEngineFactory } from "../context-engine/registry.js";
|
||||
import type { InternalHookHandler } from "../hooks/internal-hooks.js";
|
||||
import type { HookEntry } from "../hooks/types.js";
|
||||
import type { AnyAgentTool } from "../../agents/tools/common.js";
|
||||
import type { ChannelPlugin } from "../../channels/plugins/types.js";
|
||||
import type { ContextEngineFactory } from "../../context-engine/registry.js";
|
||||
import type { InternalHookHandler } from "../../hooks/internal-hooks.js";
|
||||
import type { HookEntry } from "../../hooks/types.js";
|
||||
import type {
|
||||
OpenClawPluginCliContext,
|
||||
OpenClawPluginCommandDefinition,
|
||||
@ -11,7 +11,7 @@ import type {
|
||||
OpenClawPluginService,
|
||||
PluginHookRegistration,
|
||||
ProviderPlugin,
|
||||
} from "../plugins/types.js";
|
||||
} from "../../plugins/types.js";
|
||||
import {
|
||||
resolveExtensionChannelRegistration,
|
||||
resolveExtensionCliRegistration,
|
||||
@ -1,16 +1,16 @@
|
||||
import path from "node:path";
|
||||
import type { AnyAgentTool } from "../agents/tools/common.js";
|
||||
import type { ChannelDock } from "../channels/dock.js";
|
||||
import type { ChannelPlugin } from "../channels/plugins/types.js";
|
||||
import type { ContextEngineFactory } from "../context-engine/registry.js";
|
||||
import type { AnyAgentTool } from "../../agents/tools/common.js";
|
||||
import type { ChannelDock } from "../../channels/dock.js";
|
||||
import type { ChannelPlugin } from "../../channels/plugins/types.js";
|
||||
import type { ContextEngineFactory } from "../../context-engine/registry.js";
|
||||
import type {
|
||||
GatewayRequestHandler,
|
||||
GatewayRequestHandlers,
|
||||
} from "../gateway/server-methods/types.js";
|
||||
import type { InternalHookHandler } from "../hooks/internal-hooks.js";
|
||||
import type { HookEntry } from "../hooks/types.js";
|
||||
import { normalizePluginHttpPath } from "../plugins/http-path.js";
|
||||
import { findOverlappingPluginHttpRoute } from "../plugins/http-route-overlap.js";
|
||||
} from "../../gateway/server-methods/types.js";
|
||||
import type { InternalHookHandler } from "../../hooks/internal-hooks.js";
|
||||
import type { HookEntry } from "../../hooks/types.js";
|
||||
import { normalizePluginHttpPath } from "../../plugins/http-path.js";
|
||||
import { findOverlappingPluginHttpRoute } from "../../plugins/http-route-overlap.js";
|
||||
import type {
|
||||
OpenClawPluginCliRegistrar,
|
||||
OpenClawPluginCommandDefinition,
|
||||
@ -27,8 +27,8 @@ import type {
|
||||
PluginHookName,
|
||||
PluginHookRegistration,
|
||||
ProviderPlugin,
|
||||
} from "../plugins/types.js";
|
||||
import { isPluginHookName } from "../plugins/types.js";
|
||||
} from "../../plugins/types.js";
|
||||
import { isPluginHookName } from "../../plugins/types.js";
|
||||
|
||||
export type ExtensionHostChannelRegistration = {
|
||||
pluginId: string;
|
||||
@ -110,10 +110,13 @@ export function resolveExtensionToolRegistration(params: {
|
||||
names.push(params.tool.name);
|
||||
}
|
||||
const normalizedNames = normalizeNameList(names);
|
||||
const factory: OpenClawPluginToolFactory =
|
||||
typeof params.tool === "function"
|
||||
? params.tool
|
||||
: (_ctx: OpenClawPluginToolContext) => params.tool;
|
||||
let factory: OpenClawPluginToolFactory;
|
||||
if (typeof params.tool === "function") {
|
||||
factory = params.tool;
|
||||
} else {
|
||||
const tool = params.tool;
|
||||
factory = (_ctx: OpenClawPluginToolContext) => tool;
|
||||
}
|
||||
|
||||
return {
|
||||
names: normalizedNames,
|
||||
@ -1,5 +1,5 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import { createEmptyPluginRegistry } from "../plugins/registry.js";
|
||||
import { createEmptyPluginRegistry } from "../../plugins/registry.js";
|
||||
import {
|
||||
addExtensionHostChannelRegistration,
|
||||
addExtensionHostCliRegistration,
|
||||
@ -1,4 +1,4 @@
|
||||
import type { GatewayRequestHandlers } from "../gateway/server-methods/types.js";
|
||||
import type { GatewayRequestHandlers } from "../../gateway/server-methods/types.js";
|
||||
import type {
|
||||
PluginChannelRegistration,
|
||||
PluginCliRegistration,
|
||||
@ -8,7 +8,7 @@ import type {
|
||||
PluginRegistry,
|
||||
PluginServiceRegistration,
|
||||
PluginToolRegistration,
|
||||
} from "../plugins/registry.js";
|
||||
} from "../../plugins/registry.js";
|
||||
|
||||
const EMPTY_PROVIDERS: readonly PluginProviderRegistration[] = [];
|
||||
const EMPTY_TOOLS: readonly PluginToolRegistration[] = [];
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user