eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
184 lines (183 loc) • 7.39 kB
TypeScript
import type { UserContent } from "ai";
import { type JsonObject } from "#shared/json.js";
/** GitHub conversation kinds represented by the channel state. */
export type GitHubConversationKind = "issue" | "pull_request" | "review_thread";
/** Stable repository identity normalized from webhook payloads. */
export interface GitHubRepositoryRef {
readonly fullName: string;
readonly id: number;
readonly name: string;
readonly owner: string;
readonly private: boolean;
}
/** GitHub actor metadata normalized from webhook payloads. */
export interface GitHubUser {
readonly htmlUrl: string | undefined;
readonly id: number;
readonly login: string;
readonly type: string;
readonly url: string | undefined;
}
/** Verified GitHub webhook delivery headers. */
export interface GitHubDelivery {
readonly event: string;
readonly hookId: string | undefined;
readonly id: string;
}
/** Channel-local conversation reference. */
export interface GitHubConversationRef {
readonly issueNumber: number | null;
readonly kind: GitHubConversationKind;
readonly pullRequestNumber: number | null;
}
/**
* Normalized GitHub comment handed to the `onComment` hook. Covers issue and PR
* timeline comments and inline review comments alike; `ctx.conversation.kind`
* distinguishes them.
*/
export interface GitHubComment {
readonly author: GitHubUser | undefined;
readonly body: string;
readonly htmlUrl: string | undefined;
readonly id: number;
readonly raw: JsonObject;
readonly url: string | undefined;
}
/** Normalized issue/PR timeline comment. */
export interface GitHubIssueComment {
readonly author: GitHubUser | undefined;
readonly body: string;
readonly htmlUrl: string | undefined;
readonly id: number;
readonly issueNumber: number;
readonly pullRequestNumber: number | null;
readonly raw: JsonObject;
readonly url: string | undefined;
}
/** Normalized inline pull-request review comment. */
export interface GitHubPullRequestReviewComment {
readonly author: GitHubUser | undefined;
readonly body: string;
readonly htmlUrl: string | undefined;
readonly id: number;
readonly inReplyToId: number | null;
readonly pullRequestNumber: number;
readonly raw: JsonObject;
readonly reviewThreadRootCommentId: number;
readonly url: string | undefined;
}
/**
* Common `issues` webhook actions, kept open to any action GitHub sends so
* authors get autocomplete without losing forward compatibility.
*/
export type GitHubIssueAction = "assigned" | "closed" | "edited" | "labeled" | "opened" | "reopened" | "unassigned" | "unlabeled" | (string & {});
/** Common `pull_request` webhook actions, kept open to any action GitHub sends. */
export type GitHubPullRequestAction = "closed" | "edited" | "labeled" | "opened" | "ready_for_review" | "reopened" | "synchronize" | "unlabeled" | (string & {});
/** Normalized issue event payload. */
export interface GitHubIssueEvent {
readonly action: GitHubIssueAction;
readonly issueNumber: number;
readonly raw: JsonObject;
}
/** Normalized pull-request event payload. */
export interface GitHubPullRequestEvent {
readonly action: GitHubPullRequestAction;
readonly headSha: string | null;
readonly pullRequestNumber: number;
readonly raw: JsonObject;
}
export interface GitHubPingEvent extends GitHubInboundEventBase {
readonly kind: "ping";
}
export interface GitHubIssueCommentEvent extends GitHubInboundEventBase {
readonly action: string;
readonly baseRef: string | null;
readonly baseSha: string | null;
readonly comment: GitHubIssueComment;
readonly conversation: GitHubConversationRef;
readonly defaultBranch: string | null;
readonly headRef: string | null;
readonly headSha: string | null;
readonly kind: "issue_comment";
}
export interface GitHubPullRequestReviewCommentEvent extends GitHubInboundEventBase {
readonly action: string;
readonly baseRef: string | null;
readonly baseSha: string | null;
readonly comment: GitHubPullRequestReviewComment;
readonly conversation: GitHubConversationRef;
readonly defaultBranch: string | null;
readonly headRef: string | null;
readonly headSha: string | null;
readonly kind: "pull_request_review_comment";
}
export interface GitHubIssueWebhookEvent extends GitHubInboundEventBase {
readonly action: string;
readonly conversation: GitHubConversationRef;
readonly issue: GitHubIssueEvent;
readonly kind: "issues";
}
export interface GitHubPullRequestWebhookEvent extends GitHubInboundEventBase {
readonly action: string;
readonly baseRef: string | null;
readonly baseSha: string | null;
readonly conversation: GitHubConversationRef;
readonly defaultBranch: string | null;
readonly headRef: string | null;
readonly headSha: string | null;
readonly kind: "pull_request";
readonly pullRequest: GitHubPullRequestEvent;
}
interface GitHubInboundEventBase {
readonly delivery: GitHubDelivery;
readonly installationId: number | undefined;
readonly raw: JsonObject;
readonly repository: GitHubRepositoryRef;
readonly sender: GitHubUser;
}
/** Parsed GitHub webhook event shape consumed by the channel. */
export type GitHubInboundEvent = GitHubIssueCommentEvent | GitHubIssueWebhookEvent | GitHubPingEvent | GitHubPullRequestReviewCommentEvent | GitHubPullRequestWebhookEvent;
/** Parsed mention trigger for a bot-directed GitHub comment. */
export interface GitHubCommentTrigger {
readonly kind: "mention";
readonly message: string;
readonly token: string;
}
/** Builds the channel-local continuation token for a GitHub conversation. */
export declare function githubContinuationToken(input: {
readonly conversationKind: GitHubConversationKind;
readonly issueNumber?: number | null;
readonly pullRequestNumber?: number | null;
readonly repositoryId: number;
readonly reviewThreadRootCommentId?: number | null;
}): string;
/** Returns true when a comment @mentions the bot and should wake the channel. */
export declare function shouldDispatchGitHubComment(input: {
readonly author?: GitHubUser;
readonly body: string;
readonly botName?: string;
}): boolean;
/** Extracts and strips the bot `@mention` from a comment body. */
export declare function extractGitHubCommentTrigger(input: {
readonly body: string;
readonly botName?: string;
}): GitHubCommentTrigger | null;
/** Parses GitHub webhook headers and body into an eve-owned event shape. */
export declare function parseGitHubWebhookEvent(input: {
readonly body: string;
readonly contentType?: string;
readonly headers: Headers;
}): GitHubInboundEvent | null;
/** Renders deterministic GitHub metadata for the model-visible turn. */
export declare function formatGitHubContextBlock(input: {
readonly commentUrl?: string;
readonly deliveryId: string;
readonly headSha?: string | null;
readonly issueNumber?: number | null;
readonly pullRequestNumber?: number | null;
readonly repository: GitHubRepositoryRef;
readonly sender: GitHubUser;
}): string;
/** Prepends a `<github_context>` block to the inbound turn message. */
export declare function prependGitHubContext(message: string | UserContent, block: string): string | UserContent;
export {};