Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions python3/vimini/agent/review.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import os
from datetime import datetime
import logging
import re
import json
Expand Down Expand Up @@ -142,10 +143,23 @@ def _construct_review_prompt(
content_source_description,
security_focus,
max_turns=DEFAULT_MAX_TURNS,
current_time=None,
):
"""
Constructs the prompt for the review.
"""
if current_time is None:
current_time_str = datetime.now().astimezone().strftime("%Y-%m-%d %H:%M:%S %z")
elif isinstance(current_time, datetime):
current_time_str = current_time.astimezone().strftime("%Y-%m-%d %H:%M:%S %z")
else:
current_time_str = str(current_time)

time_instruction = (
f"The current date and time is {current_time_str}. "
"Use this as the reference for the current time when evaluating timestamps, commit dates, or other time-sensitive context."
)

if security_focus:
review_instructions = (
f"Please review {content_source_description} exclusively for potential security issues or hazards. "
Expand All @@ -168,6 +182,7 @@ def _construct_review_prompt(
)

prompt_text = (
f"{time_instruction}\n\n"
f"{review_instructions}\n\n"
f"{tools_guideline}\n\n"
"--- CONTENT TO REVIEW ---\n"
Expand Down
19 changes: 13 additions & 6 deletions python3/vimini/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -287,25 +287,32 @@ def _build_highlight_command(group, color_val, is_custom, extra=""):
attrs = f"ctermfg={color_val} guifg={color_val} {extra}".strip()
return f"highlight {default_clause}{group} {attrs}"

def _is_custom(field):
return (
field in ui_cfg
and bool(ui_cfg[field])
and ui_cfg[field] != DEFAULT_UI_CONFIG.get(field)
)

thinking_color = ui_cfg.get("thinking_color") or DEFAULT_UI_CONFIG["thinking_color"]
is_custom_thinking = "thinking_color" in ui_cfg and bool(ui_cfg["thinking_color"])
is_custom_thinking = _is_custom("thinking_color")

prompt_color = ui_cfg.get("prompt_color") or DEFAULT_UI_CONFIG["prompt_color"]
is_custom_prompt = "prompt_color" in ui_cfg and bool(ui_cfg["prompt_color"])
is_custom_prompt = _is_custom("prompt_color")

waiting_color = ui_cfg.get("waiting_color") or DEFAULT_UI_CONFIG["waiting_color"]
is_custom_waiting = "waiting_color" in ui_cfg and bool(ui_cfg["waiting_color"])
is_custom_waiting = _is_custom("waiting_color")

service_color = ui_cfg.get("service_color") or DEFAULT_UI_CONFIG["service_color"]
is_custom_service = "service_color" in ui_cfg and bool(ui_cfg["service_color"])
is_custom_service = _is_custom("service_color")

error_color = ui_cfg.get("error_color") or DEFAULT_UI_CONFIG["error_color"]
is_custom_error = "error_color" in ui_cfg and bool(ui_cfg["error_color"])
is_custom_error = _is_custom("error_color")

prompt_hint_color = (
ui_cfg.get("prompt_hint_color") or DEFAULT_UI_CONFIG["prompt_hint_color"]
)
is_custom_hint = "prompt_hint_color" in ui_cfg and bool(ui_cfg["prompt_hint_color"])
is_custom_hint = _is_custom("prompt_hint_color")

cmds = [
_build_highlight_command("ViminiWaiting", waiting_color, is_custom_waiting),
Expand Down
19 changes: 19 additions & 0 deletions tests/test_review_agent.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import sys
from datetime import datetime
import os
import pytest
from unittest.mock import MagicMock, patch, call
Expand Down Expand Up @@ -263,6 +264,24 @@ def test_construct_review_prompt_max_turns():
assert "maximum limit of 50 tool iterations" in prompt_custom


def test_construct_review_prompt_includes_current_time():
prompt_custom = _construct_review_prompt(
"Prompt",
"diff",
"buffer",
security_focus=False,
current_time="2026-10-29 14:30:00 +0000",
)
assert "The current date and time is 2026-10-29 14:30:00 +0000." in prompt_custom
assert "Use this as the reference for the current time" in prompt_custom

prompt_default = _construct_review_prompt(
"Prompt", "diff", "buffer", security_focus=False
)
assert "The current date and time is" in prompt_default
assert str(datetime.now().year) in prompt_default


def test_execute_review_stream_reaches_max_turns():
mock_session = MagicMock()
mock_session._check_running.return_value = True
Expand Down
Loading