feat(plugin): support enterprise extension (#861)

This commit is contained in:
Haze
2026-04-16 17:15:25 +08:00
committed by GitHub
Unverified
parent 2fefbf3aba
commit b884db629e
29 changed files with 847 additions and 22 deletions

View File

@@ -0,0 +1,43 @@
import type {
Extension,
ExtensionContext,
MarketplaceProviderExtension,
MarketplaceCapability,
} from '../types';
import type {
ClawHubSearchParams,
ClawHubInstallParams,
ClawHubSkillResult,
} from '../../gateway/clawhub';
class ClawHubMarketplaceExtension implements MarketplaceProviderExtension {
readonly id = 'builtin/clawhub-marketplace';
setup(_ctx: ExtensionContext): void {
// No setup needed -- search/install delegates to the ClawHubService CLI runner
}
async getCapability(): Promise<MarketplaceCapability> {
return {
mode: 'clawhub',
canSearch: true,
canInstall: true,
};
}
async search(params: ClawHubSearchParams): Promise<ClawHubSkillResult[]> {
const { ClawHubService } = await import('../../gateway/clawhub');
const svc = new ClawHubService();
return svc.search(params);
}
async install(params: ClawHubInstallParams): Promise<void> {
const { ClawHubService } = await import('../../gateway/clawhub');
const svc = new ClawHubService();
return svc.install(params);
}
}
export function createClawHubMarketplaceExtension(): Extension {
return new ClawHubMarketplaceExtension();
}

View File

@@ -0,0 +1,25 @@
import type {
Extension,
ExtensionContext,
HostApiRouteExtension,
RouteHandler,
} from '../types';
class DiagnosticsExtension implements HostApiRouteExtension {
readonly id = 'builtin/diagnostics';
setup(_ctx: ExtensionContext): void {
// Diagnostics routes are stateless; no setup needed.
}
getRouteHandler(): RouteHandler {
return async (req, res, url, ctx) => {
const { handleDiagnosticsRoutes } = await import('../../api/routes/diagnostics');
return handleDiagnosticsRoutes(req, res, url, ctx);
};
}
}
export function createDiagnosticsExtension(): Extension {
return new DiagnosticsExtension();
}

View File

@@ -0,0 +1,8 @@
import { registerBuiltinExtension } from '../loader';
import { createClawHubMarketplaceExtension } from './clawhub-marketplace';
import { createDiagnosticsExtension } from './diagnostics';
export function registerAllBuiltinExtensions(): void {
registerBuiltinExtension('builtin/clawhub-marketplace', createClawHubMarketplaceExtension);
registerBuiltinExtension('builtin/diagnostics', createDiagnosticsExtension);
}