/** * TextGeneration - Effect service contract for AI-generated Git content. * * Generates commit messages and pull request titles/bodies from repository * context prepared by Git services. * * @module TextGeneration */ import { ServiceMap } from "effect"; import type { Effect } from "effect"; import type { ChatAttachment } from "@t3tools/contracts"; import type { TextGenerationError } from "../Errors.ts"; export interface CommitMessageGenerationInput { cwd: string; branch: string | null; stagedSummary: string; stagedPatch: string; /** When true, the model also returns a semantic branch name for the change. */ includeBranch?: boolean; /** Model to use for generation. Defaults to gpt-5.4-mini if not specified. */ model?: string; } export interface CommitMessageGenerationResult { subject: string; body: string; /** Only present when `includeBranch` was set on the input. */ branch?: string | undefined; } export interface PrContentGenerationInput { cwd: string; baseBranch: string; headBranch: string; commitSummary: string; diffSummary: string; diffPatch: string; /** Model to use for generation. Defaults to gpt-5.4-mini if not specified. */ model?: string; } export interface PrContentGenerationResult { title: string; body: string; } export interface BranchNameGenerationInput { cwd: string; message: string; attachments?: ReadonlyArray | undefined; /** Model to use for generation. Defaults to gpt-5.4-mini if not specified. */ model?: string; } export interface BranchNameGenerationResult { branch: string; } export interface TextGenerationService { generateCommitMessage( input: CommitMessageGenerationInput, ): Promise; generatePrContent(input: PrContentGenerationInput): Promise; generateBranchName(input: BranchNameGenerationInput): Promise; } /** * TextGenerationShape - Service API for commit/PR text generation. */ export interface TextGenerationShape { /** * Generate a commit message from staged change context. */ readonly generateCommitMessage: ( input: CommitMessageGenerationInput, ) => Effect.Effect; /** * Generate pull request title/body from branch and diff context. */ readonly generatePrContent: ( input: PrContentGenerationInput, ) => Effect.Effect; /** * Generate a concise branch name from a user message. */ readonly generateBranchName: ( input: BranchNameGenerationInput, ) => Effect.Effect; } /** * TextGeneration - Service tag for commit and PR text generation. */ export class TextGeneration extends ServiceMap.Service()( "t3/git/Services/TextGeneration", ) {}