eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
102 lines (101 loc) • 4.19 kB
TypeScript
import type { PackageManagerKind } from "../../package-manager.js";
import { type NodeEngineOverride } from "../../node-engine.js";
import { type EvePackageContract } from "../create/project.js";
export declare const SLACK_CHANNEL_DEFAULT_ROUTE = "/eve/v1/slack";
export declare const DEFAULT_SLACK_CONNECTOR_SLUG = "my-agent";
declare const slackConnectorSlugBrand: unique symbol;
export type ChannelKind = "slack" | "web";
export type SlackConnectorSlug = string & {
readonly [slackConnectorSlugBrand]: true;
};
export interface PackageJsonMutation {
path: string;
dependencies: string[];
devDependencies: string[];
scripts: string[];
}
export type ChannelMutationAction = "created" | "overwritten" | "skipped";
export type ChannelMutationResult = SlackChannelMutationResult | WebChannelMutationResult;
interface SlackChannelWrittenResult {
kind: "slack";
action: "created" | "overwritten";
filesWritten: [string];
filesOverwritten?: [string];
filesSkipped: [];
packageJsonUpdated: PackageJsonMutation[];
slackConnectorSlug: SlackConnectorSlug;
}
interface SlackChannelSkippedResult {
kind: "slack";
action: "skipped";
filesWritten: [];
filesOverwritten?: [];
filesSkipped: [string];
packageJsonUpdated: [];
}
type SlackChannelMutationResult = SlackChannelWrittenResult | SlackChannelSkippedResult;
interface WebChannelWrittenResult {
kind: "web";
action: "created" | "overwritten";
filesWritten: string[];
filesOverwritten?: string[];
competingNextConfigFiles?: string[];
nodeEngineOverride?: NodeEngineOverride;
filesSkipped: string[];
packageJsonUpdated: PackageJsonMutation[];
}
interface WebChannelSkippedResult {
kind: "web";
action: "skipped";
skipReason: "nextjs-project";
filesWritten: [];
filesOverwritten?: [];
filesSkipped: [string];
packageJsonUpdated: [];
}
type WebChannelMutationResult = WebChannelWrittenResult | WebChannelSkippedResult;
/**
* Whether the project already carries a Next.js app: `package.json` declares a
* `next` dependency in the same dependency fields Vercel framework detection
* checks. This is the exact predicate the
* web scaffold skips on (`skipReason: "nextjs-project"`), so pickers can mark
* Web Chat as already present precisely when scaffolding would be a no-op.
* A missing `package.json` reads as "no app".
*/
export declare function isNextJsProject(projectRoot: string): Promise<boolean>;
/**
* Whether the root app declares a Vercel framework that should own the
* top-level deployment while eve runs as a sibling service. These match Eve's
* current framework integrations: Next.js, Nuxt, and SvelteKit.
*/
export declare function hasVercelHostFramework(projectRoot: string): Promise<boolean>;
export declare function normalizeSlackConnectorSlug(input: string): SlackConnectorSlug;
export declare function deriveSlackConnectorSlug(projectRoot: string, projectNameHint?: string): Promise<SlackConnectorSlug>;
export interface EnsureChannelOptions {
projectRoot: string;
kind: ChannelKind;
/** Manager that owns generated project configuration. Defaults to pnpm. */
packageManager?: PackageManagerKind;
force?: boolean;
/** Exact UID returned by Vercel Connect; takes precedence over the derived slug. */
slackConnectorUid?: string;
slackConnectorSlug?: SlackConnectorSlug;
connectPackageVersion?: string;
webPackageVersions?: WebPackageVersions;
/** When false, Web Chat leaves Vercel Services config unwritten for preview-only scaffolds. */
configureVercelServices?: boolean;
}
export interface WebPackageVersions {
evePackage?: EvePackageContract;
aiPackageVersion?: string;
nextPackageVersion?: string;
reactPackageVersion?: string;
reactDomPackageVersion?: string;
streamdownPackageVersion?: string;
zodPackageVersion?: string;
typesReactPackageVersion?: string;
typesReactDomPackageVersion?: string;
}
export declare function ensureChannel(options: EnsureChannelOptions): Promise<ChannelMutationResult>;
export declare function listAuthoredChannels(projectRoot: string): Promise<string[]>;
export {};