/** * 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<ChatAttachment> | 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<CommitMessageGenerationResult>; generatePrContent(input: PrContentGenerationInput): Promise<PrContentGenerationResult>; generateBranchName(input: BranchNameGenerationInput): Promise<BranchNameGenerationResult>;}/** * 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<CommitMessageGenerationResult, TextGenerationError>; /** * Generate pull request title/body from branch and diff context. */ readonly generatePrContent: ( input: PrContentGenerationInput, ) => Effect.Effect<PrContentGenerationResult, TextGenerationError>; /** * Generate a concise branch name from a user message. */ readonly generateBranchName: ( input: BranchNameGenerationInput, ) => Effect.Effect<BranchNameGenerationResult, TextGenerationError>;}/** * TextGeneration - Service tag for commit and PR text generation. */export class TextGeneration extends ServiceMap.Service<TextGeneration, TextGenerationShape>()( "t3/git/Services/TextGeneration",) {}
/**
* 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<ChatAttachment> | 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<CommitMessageGenerationResult>;
generatePrContent(input: PrContentGenerationInput): Promise<PrContentGenerationResult>;
generateBranchName(input: BranchNameGenerationInput): Promise<BranchNameGenerationResult>;
}
/**
* 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<CommitMessageGenerationResult, TextGenerationError>;
/**
* Generate pull request title/body from branch and diff context.
*/
readonly generatePrContent: (
input: PrContentGenerationInput,
) => Effect.Effect<PrContentGenerationResult, TextGenerationError>;
/**
* Generate a concise branch name from a user message.
*/
readonly generateBranchName: (
input: BranchNameGenerationInput,
) => Effect.Effect<BranchNameGenerationResult, TextGenerationError>;
}
/**
* TextGeneration - Service tag for commit and PR text generation.
*/
export class TextGeneration extends ServiceMap.Service<TextGeneration, TextGenerationShape>()(
"t3/git/Services/TextGeneration",
) {}