takt/src/core/piece/instruction/instruction-context.ts

68 lines
2.8 KiB
TypeScript

/**
* Instruction context types and edit rule generation
*
* Defines the context structures used by instruction builders.
*/
import type { AgentResponse, Language } from '../../models/types.js';
/**
* Context for building instruction from template.
*/
export interface InstructionContext {
/** The main task/prompt */
task: string;
/** Current iteration number (piece-wide turn count) */
iteration: number;
/** Maximum iterations allowed */
maxIterations: number;
/** Current movement's iteration number (how many times this movement has been executed) */
movementIteration: number;
/** Working directory (agent work dir, may be a clone) */
cwd: string;
/** Project root directory (where .takt/ lives). */
projectCwd: string;
/** User inputs accumulated during piece */
userInputs: string[];
/** Previous movement output if available */
previousOutput?: AgentResponse;
/** Report directory path */
reportDir?: string;
/** Language for metadata rendering. Defaults to 'en'. */
language?: Language;
/** Whether interactive-only rules are enabled */
interactive?: boolean;
/** Top-level piece movements for piece structure display */
pieceMovements?: ReadonlyArray<{ name: string; description?: string }>;
/** Index of the current movement in pieceMovements (0-based) */
currentMovementIndex?: number;
/** Piece name */
pieceName?: string;
/** Piece description (optional) */
pieceDescription?: string;
/** Retry note explaining why task is being retried */
retryNote?: string;
}
/**
* Build the edit rule string for the execution context section.
*
* Returns a localized string describing the edit permission for this movement.
* Returns empty string when edit is undefined (no explicit permission).
*/
export function buildEditRule(edit: boolean | undefined, language: Language): string {
if (edit === true) {
if (language === 'ja') {
return '**このムーブメントでは編集が許可されています。** ユーザーの要求に応じて、ファイルの作成・変更・削除を行ってください。';
}
return '**Editing is ENABLED for this movement.** You may create, modify, and delete files as needed to fulfill the user\'s request.';
}
if (edit === false) {
if (language === 'ja') {
return '**このムーブメントでは編集が禁止されています。** プロジェクトのソースファイルを作成・変更・削除しないでください。コードの読み取り・検索のみ行ってください。レポート出力は後のフェーズで自動的に行われます。';
}
return '**Editing is DISABLED for this movement.** Do NOT create, modify, or delete any project source files. You may only read and search code. Report output will be handled automatically in a later phase.';
}
return '';
}