109 lines
3.5 KiB
TypeScript
109 lines
3.5 KiB
TypeScript
import type { ServerAdapterModule } from "./types.js";
|
|
import {
|
|
execute as claudeExecute,
|
|
testEnvironment as claudeTestEnvironment,
|
|
sessionCodec as claudeSessionCodec,
|
|
} from "@paperclipai/adapter-claude-local/server";
|
|
import { agentConfigurationDoc as claudeAgentConfigurationDoc, models as claudeModels } from "@paperclipai/adapter-claude-local";
|
|
import {
|
|
execute as codexExecute,
|
|
testEnvironment as codexTestEnvironment,
|
|
sessionCodec as codexSessionCodec,
|
|
} from "@paperclipai/adapter-codex-local/server";
|
|
import { agentConfigurationDoc as codexAgentConfigurationDoc, models as codexModels } from "@paperclipai/adapter-codex-local";
|
|
import {
|
|
execute as openclawExecute,
|
|
testEnvironment as openclawTestEnvironment,
|
|
} from "@paperclipai/adapter-openclaw/server";
|
|
import {
|
|
agentConfigurationDoc as openclawAgentConfigurationDoc,
|
|
models as openclawModels,
|
|
} from "@paperclipai/adapter-openclaw";
|
|
import {
|
|
execute as openCodeExecute,
|
|
testEnvironment as openCodeTestEnvironment,
|
|
sessionCodec as openCodeSessionCodec,
|
|
listOpenCodeModels,
|
|
} from "@paperclipai/adapter-opencode-local/server";
|
|
import {
|
|
agentConfigurationDoc as openCodeAgentConfigurationDoc,
|
|
models as openCodeModels,
|
|
} from "@paperclipai/adapter-opencode-local";
|
|
import { listCodexModels } from "./codex-models.js";
|
|
import { processAdapter } from "./process/index.js";
|
|
import { httpAdapter } from "./http/index.js";
|
|
|
|
const claudeLocalAdapter: ServerAdapterModule = {
|
|
type: "claude_local",
|
|
execute: claudeExecute,
|
|
testEnvironment: claudeTestEnvironment,
|
|
sessionCodec: claudeSessionCodec,
|
|
models: claudeModels,
|
|
supportsLocalAgentJwt: true,
|
|
agentConfigurationDoc: claudeAgentConfigurationDoc,
|
|
};
|
|
|
|
const codexLocalAdapter: ServerAdapterModule = {
|
|
type: "codex_local",
|
|
execute: codexExecute,
|
|
testEnvironment: codexTestEnvironment,
|
|
sessionCodec: codexSessionCodec,
|
|
models: codexModels,
|
|
listModels: listCodexModels,
|
|
supportsLocalAgentJwt: true,
|
|
agentConfigurationDoc: codexAgentConfigurationDoc,
|
|
};
|
|
|
|
const openclawAdapter: ServerAdapterModule = {
|
|
type: "openclaw",
|
|
execute: openclawExecute,
|
|
testEnvironment: openclawTestEnvironment,
|
|
models: openclawModels,
|
|
supportsLocalAgentJwt: false,
|
|
agentConfigurationDoc: openclawAgentConfigurationDoc,
|
|
};
|
|
|
|
const openCodeLocalAdapter: ServerAdapterModule = {
|
|
type: "opencode_local",
|
|
execute: openCodeExecute,
|
|
testEnvironment: openCodeTestEnvironment,
|
|
sessionCodec: openCodeSessionCodec,
|
|
models: openCodeModels,
|
|
listModels: listOpenCodeModels,
|
|
supportsLocalAgentJwt: true,
|
|
agentConfigurationDoc: openCodeAgentConfigurationDoc,
|
|
};
|
|
|
|
const adaptersByType = new Map<string, ServerAdapterModule>(
|
|
[claudeLocalAdapter, codexLocalAdapter, openCodeLocalAdapter, openclawAdapter, processAdapter, httpAdapter].map(
|
|
(a) => [a.type, a],
|
|
),
|
|
);
|
|
|
|
export function getServerAdapter(type: string): ServerAdapterModule {
|
|
const adapter = adaptersByType.get(type);
|
|
if (!adapter) {
|
|
// Fall back to process adapter for unknown types
|
|
return processAdapter;
|
|
}
|
|
return adapter;
|
|
}
|
|
|
|
export async function listAdapterModels(type: string): Promise<{ id: string; label: string }[]> {
|
|
const adapter = adaptersByType.get(type);
|
|
if (!adapter) return [];
|
|
if (adapter.listModels) {
|
|
const discovered = await adapter.listModels();
|
|
if (discovered.length > 0) return discovered;
|
|
}
|
|
return adapter.models ?? [];
|
|
}
|
|
|
|
export function listServerAdapters(): ServerAdapterModule[] {
|
|
return Array.from(adaptersByType.values());
|
|
}
|
|
|
|
export function findServerAdapter(type: string): ServerAdapterModule | null {
|
|
return adaptersByType.get(type) ?? null;
|
|
}
|