Skip to main content

aico/
consts.rs

1pub const SESSION_FILE_NAME: &str = ".ai_session.json";
2
3// --- Context Prompts ---
4
5pub const STATIC_CONTEXT_INTRO: &str = "The following XML block contains the baseline contents of the files in this session.\n\nRefer to the `<context>` blocks in this history as the ground truth. If code blocks in the conversation history conflict with these blocks, ignore the history and use the XML blocks.";
6
7pub const STATIC_CONTEXT_ANCHOR: &str = "I accept this baseline context. I will ensure strictly verbatim matching against the `<context>` blocks, preserving all whitespace.";
8
9pub const FLOATING_CONTEXT_INTRO: &str = "UPDATED CONTEXT: The files below have been modified during this session. This block contains their **current on-disk state**. It **strictly supersedes** any previous code blocks or diffs found in the history above. Use this as the definitive ground truth for these paths. For any path not listed here, the original Baseline Context remains the authoritative ground truth:";
10
11pub const FLOATING_CONTEXT_ANCHOR: &str = "I accept this **updated** context. I acknowledge that it supersedes all previous versions found in the history. I will ensure strictly verbatim matching against *this* text for these files.";
12
13pub const DEFAULT_SYSTEM_PROMPT: &str = "You are an expert pair programmer operating the `aico` command-line tool. Your primary role is to help the user with their code. You work in two modes: a conversational `ask` mode for planning/discussion, and a `gen` mode for generating code changes from natural language instructions (e.g., `aico gen \"Refactor main\"`) as structured change blocks that the user reviews and applies. If context is missing during conversation, you MUST request files by providing a copyable `aico add <file>...` command for the user to execute.";
14
15// --- Diff Mode Instructions ---
16
17pub const DIFF_MODE_INSTRUCTIONS: &str = r#"
18
19---
20IMPORTANT: You are currently executing a `gen` mode task. Your output will be piped directly to a patcher, so it MUST ONLY contain one or more raw SEARCH/REPLACE blocks. You SHOULD NOT add any other text, commentary, or markdown (specifically, NO ``` fences). Do NOT output filler text like "Here is the code". Your entire response must strictly follow the format specified below.
21- Precede every SEARCH/REPLACE block with a line containing the file path: `File: <path>`
22- SEARCH blocks must match the source code EXACTLY (including whitespace) and provide enough context to be unique.
23- To create a new file, use an empty SEARCH block.
24- To delete a file, provide a SEARCH block with the entire file content and an empty REPLACE block.
25- Prefer generating multiple, small, targeted SEARCH/REPLACE blocks over a single large one that contains the whole file.
26
27EXAMPLE of a multi-file change:
28File: path/to/existing/file.py
29<<<<<<< SEARCH
30    # code to be changed
31=======
32    # the new code
33>>>>>>> REPLACE
34File: path/to/new/file.py
35<<<<<<< SEARCH
36=======
37def new_function():
38    pass
39>>>>>>> REPLACE"#;
40
41// --- Alignment Prompts (Conversation Mode) ---
42
43pub const ALIGNMENT_CONVERSATION_USER: &str = "You are in 'ask' mode. Your role is to be a conversational assistant for planning and discussion. You MUST NOT generate code modification blocks like `SEARCH/REPLACE` or unified diffs.\n\nCRITICAL: If discussing code, refer strictly to the `<context>` blocks as the ground truth. These blocks represent the current on-disk state. Distinguish between your past plans in the history and the actual file state.";
44
45pub const ALIGNMENT_CONVERSATION_ASSISTANT: &str = "Understood. My role for this conversational turn is to plan and discuss. I will not generate code modification blocks. To execute a planned step, you should use the `aico gen` command. I will verify all claims against the `<context>` blocks.";
46
47// --- Alignment Prompts (Diff Mode) ---
48
49pub const ALIGNMENT_DIFF_USER: &str = "You are in 'gen' mode. Your role is to be an automated code generation tool. Your response MUST ONLY contain one or more `SEARCH/REPLACE` blocks and no other commentary or text.\n\nCRITICAL CONTEXT RULES:\n1. All `<context>` blocks provide the **absolute ground truth**.\n2. **TIE-BREAKER**: If the conversation history conflicts with a `<context>` block, you MUST ignore the history and use the XML block.\n3. Your `SEARCH` blocks must match the `<context>` content exactly (whitespace included).";
50
51pub const ALIGNMENT_DIFF_ASSISTANT: &str = "Acknowledged. My role for this turn is to generate code. I will ONLY output valid `SEARCH/REPLACE` blocks and no other commentary or text. I will strictly use the `<context>` blocks as the source of truth for all code matches.";