mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-11-05 12:29:37 +01:00
30 lines
3.6 KiB
TypeScript
30 lines
3.6 KiB
TypeScript
/** Finite authoring contract for the actual remote/runtime scenario consumers.
|
|
* Metadata is private prerequisite context, never proof of a qualified target. */
|
|
export const runtimePrivateRequirements = {
|
|
"execution-environments.prepare-image": { provider: "daytona", fields: ["imageDigest", "imageRef", "region", "disposableNamespace", "toolsManifest"], credentials: ["DAYTONA_API_KEY"] },
|
|
"execution-environments.assign-computer": { provider: "daytona", fields: ["imageDigest", "imageRef", "region", "disposableNamespace", "qualifiedHarness"], credentials: ["DAYTONA_API_KEY"] },
|
|
"agents.ambiguous-cloud-code": { provider: "daytona", fields: ["imageDigest", "imageRef", "region", "disposableNamespace", "qualifiedHarness"], credentials: ["ANTHROPIC_API_KEY", "DAYTONA_API_KEY"] },
|
|
"execution-environments.add-computer": { provider: "ssh", fields: ["hostname", "port", "login", "hostKeySha256", "knownHosts", "allowedRemoteRoot", "privateKeyEnv", "qualifiedHarness"], credentials: [] },
|
|
"execution-environments.test-computer": { provider: "ssh", fields: ["hostname", "port", "login", "hostKeySha256", "knownHosts", "allowedRemoteRoot", "privateKeyEnv", "qualifiedHarness"], credentials: [] },
|
|
"execution-environments.choose-capable-target": { provider: "ssh", fields: ["hostname", "port", "login", "hostKeySha256", "knownHosts", "allowedRemoteRoot", "privateKeyEnv", "qualifiedHarness"], credentials: [] },
|
|
"agents.existing-grok-bot": { provider: "grok", fields: ["botId", "endpoint", "challengeMethod", "credentialEnvName"], credentials: [] },
|
|
"agents.managed-profile": { provider: "anthropicManaged", fields: ["lockedEnvironmentId", "operatorProfileId", "retentionPolicyVersion", "retentionAckId", "providerAccountRef"], credentials: ["ANTHROPIC_API_KEY"] },
|
|
"agents.hire-claude-code": { provider: "claude", fields: ["targetRef", "harnessExecutable", "model", "accountBindingRef"], credentials: ["ANTHROPIC_API_KEY"] },
|
|
"agents.hire-needs-account": { provider: "claude", fields: ["targetRef", "harnessExecutable", "model", "accountBindingRef"], credentials: ["ANTHROPIC_API_KEY"] },
|
|
"runs-adapters.validate-hire": { provider: "claude", fields: ["targetRef", "harnessExecutable", "model", "accountBindingRef"], credentials: ["ANTHROPIC_API_KEY"] },
|
|
"runs-adapters.upgrade-runner": { provider: "claude", fields: ["targetRef", "harnessExecutable", "model", "accountBindingRef", "legacySettingsRef"], credentials: ["ANTHROPIC_API_KEY"] },
|
|
} as const;
|
|
export type RuntimePrivateProvider = typeof runtimePrivateRequirements[keyof typeof runtimePrivateRequirements]["provider"];
|
|
export const runtimePrivateProviders: readonly string[] = ["daytona", "ssh", "grok", "anthropicManaged", "claude"];
|
|
export function validateRuntimePrivateRequirement(scenarioId: string | undefined, provider: string, fields: readonly string[], credentials: readonly string[]) {
|
|
if (!runtimePrivateProviders.includes(provider)) return false;
|
|
const spec = runtimePrivateRequirements[scenarioId as keyof typeof runtimePrivateRequirements];
|
|
const same = (a: readonly string[], b: readonly string[]) => JSON.stringify([...a].sort()) === JSON.stringify([...b].sort());
|
|
if (!spec || spec.provider !== provider || !same(fields, spec.fields) || !same(credentials, spec.credentials))
|
|
throw new Error("Runtime private inputs require the exact selected canonical case, fields and credential names");
|
|
return true;
|
|
}
|
|
export function runtimePrivateReferenceNames(provider: string): readonly string[] {
|
|
return provider === "ssh" ? ["PAPERCLIP_CHAT_EVAL_SSH_PRIVATE_KEY"] : provider === "grok" ? ["PAPERCLIP_CHAT_EVAL_GROK_BOT_TOKEN"] : [];
|
|
}
|