Skip to content

تعليق وكلاء البرمجة

علّق على تتبعات وكلاء البرمجة مع تصيير الفروق ومخرجات الطرفية والتنقل في شجرة الملفات. استورد من Claude Code وAider وSWE-Agent وغيرها من مساعدات البرمجة.

جديد في الإصدار v2.4.0

تنتج وكلاء البرمجة -- Claude Code وAider وSWE-Agent وOpenHands وغيرها -- تتبعات تختلف عن تتبعات الوكلاء العامة. فهي تحتوي على فروق كود ومخرجات طرفية وقراءات ملفات وتنقل في المجلدات ونتائج اختبارات. ومراجعة هذه التتبعات تتطلب تصييراً متخصصاً يفهم بنية تغييرات الكود ويعرضها بصيغة مألوفة لمهندسي البرمجيات.

وCodingTraceDisplay في Potato نوع عرض مخصص لجلسات وكلاء البرمجة. يصيّر الفروق الموحّدة بأسطر حمراء/خضراء مبرزة صياغياً، ومخرجات الطرفية في كتل داكنة، وقراءات الملفات مع أرقام الأسطر، ويوفر شريطاً جانبياً بشجرة الملفات يعرض كل ملف لمسه الوكيل. ويستطيع المعلّقون التنقل بين الملفات، وتوسيع المخرجات الطويلة أو طيّها، وتقييم العمليات فرادى أو التتبع ككل.

التهيئة

فعّل عرض تتبع البرمجة في تهيئة مشروعك:

yaml
agentic:
  enabled: true
  trace_converter: claude_code
  display_type: coding_trace
 
  coding_trace_display:
    # Diff rendering
    diff_style: unified          # "unified" or "side_by_side"
    diff_context_lines: 3        # lines of context around changes
    syntax_highlight: true       # language-aware highlighting
    show_line_numbers: true
 
    # Terminal output
    terminal_theme: dark         # "dark" or "light"
    terminal_max_lines: 80       # auto-collapse after this many lines
    show_exit_codes: true
 
    # File reads
    file_read_max_lines: 100     # auto-collapse file reads longer than this
    show_file_path: true
    show_line_range: true        # display "lines 42-87" when partial reads
 
    # File tree sidebar
    file_tree:
      enabled: true
      position: left             # "left" or "right"
      show_operation_icons: true # icons for read/edit/create/delete
      group_by_directory: true
      click_to_navigate: true    # click a file to jump to its operations
 
    # Collapsible sections
    auto_collapse_threshold: 500 # characters before auto-collapsing
    collapse_file_reads: true
    collapse_terminal_output: true

ميزات العرض

عرض الـ diff الموحّد

تُصيَّر عمليات التحرير على هيئة فروق موحّدة بإبراز أحمر/أخضر. تظهر الأسطر المحذوفة بخلفية حمراء وبادئة -، وتظهر الأسطر المضافة بخلفية خضراء وبادئة +. أما أسطر السياق فتظهر برمادي محايد. ويظهر مسار الملف ونطاق الأسطر في شريط علوي فوق كل كتلة diff.

وحين تُضبط diff_style: side_by_side، تظهر النسختان القديمة والجديدة في عمودين متجاورين، فيسهل تبيّن ما تغيّر في التحريرات المعقدة.

كتل الطرفية الداكنة

تُصيَّر أوامر bash والصدفة في كتل طرفية داكنة بخط أحادي العرض. ويظهر الأمر نفسه ببادئة موجّه $، ويظهر المخرج تحته. وتُعرض رموز الخروج في شارة صغيرة (خضراء للقيمة 0، وحمراء لغيرها). أما المخرجات الطويلة فتُطوى تلقائياً مع موسّع يقول Show N more lines.

قراءات الملفات مرقّمة الأسطر

حين يقرأ الوكيل ملفاً، يُعرض المحتوى مع أرقام الأسطر في كتلة كود فاتحة. وتعرض القراءات الجزئية نطاق الأسطر (مثلاً lines 42-87 of 312). ويُطبَّق الإبراز الصياغي بحسب امتداد الملف.

الشريط الجانبي لشجرة الملفات

يعرض الشريط الجانبي لشجرة الملفات كل ملف لمسه الوكيل خلال التتبع. وتُجمَّع الملفات بحسب المجلد وتُرتَّب أبجدياً. ولكل ملف أيقونة تدل على العمليات التي جرت عليه:

  • أيقونة قلم للملفات المحرَّرة
  • أيقونة عين للملفات المقروءة فقط
  • أيقونة زائد للملفات المنشأة حديثاً
  • أيقونة سلة للملفات المحذوفة
  • أيقونة طرفية للسكربتات المنفَّذة

والنقر على ملف في الشجرة يمرّر اللوحة الرئيسية إلى أول عملية تخص ذلك الملف.

طيّ المخرجات الطويلة

تُطوى تلقائياً أي كتلة مخرجات تتجاوز auto_collapse_threshold. ويعرض سطر ملخص أول أسطر قليلة وآخرها مع زر Show all N lines. وهذا يبقي التتبع قابلاً للتصفح حتى حين تنتج عملية واحدة مئات الأسطر من المخرجات.

محوّلات التتبعات

يأتي Potato بأربعة محوّلات خاصة بوكلاء البرمجة تحوّل صيغ التتبعات إلى التمثيل الموحّد لتتبع البرمجة.

المحوّلالمصدرالصيغة
claude_codeClaude Code / Anthropic APIMessages API مع كتل tool_use (أدوات Read وEdit وBash وWrite)
aiderAiderسجلات محادثة بصيغة Markdown مع كتل تحرير SEARCH/REPLACE وORIGINAL/UPDATED
swe_agent_trajectorySWE-Agentملفات JSON للمسارات بثلاثيات فكرة/إجراء/ملاحظة
autoكشف تلقائييفحص بنية التتبع ويختار المحوّل الأنسب تلقائياً

حدّد المحوّل في تهيئتك:

yaml
agentic:
  trace_converter: claude_code    # or aider, swe_agent_trajectory, auto

محوّل Claude Code

يتعامل محوّل claude_code مع التتبعات القادمة من Anthropic Messages API حيث يُمثَّل استخدام الأدوات بكتل محتوى tool_use وtool_result. وهو يتعرف على أدوات Claude Code القياسية:

  • نداءات أداة Read تصير عروض قراءة ملفات
  • نداءات أداة Edit تصير فروقاً موحّدة
  • نداءات أداة Write تصير عروض إنشاء ملفات
  • نداءات أداة Bash تصير كتل طرفية
  • نداءات أداتي Glob/Grep تصير عروض نتائج بحث

محوّل Aider

يحلّل محوّل aider صيغة محادثة Aider القائمة على Markdown. ويستخرج كتل SEARCH/REPLACE (والصيغة الأقدم ORIGINAL/UPDATED) ويحولها إلى فروق موحّدة. أما أوامر الصدفة ومخرجاتها فتُستخرج من كتل الكود المسوّرة الموسومة بـ bash أو shell.

محوّل مسارات SWE-Agent

يقرأ محوّل swe_agent_trajectory ملفات JSON لمسارات SWE-Agent. ويحتوي كل مدخل مسار على فكرة (تفكير الوكيل) وإجراء (الأمر المنفَّذ) وملاحظة (مخرج الأمر). ويصنّف المحوّل الإجراءات إلى تحريرات ملفات وقراءات ملفات وأوامر صدفة وعمليات تنقل.

استخدام سطر الأوامر

حوّل التتبعات الخام قبل تشغيل خادم التعليق:

bash
# Convert Claude Code traces
python -m potato.trace_converter \
  -i traces.json \
  -f claude_code \
  -o data/converted.jsonl
 
# Convert Aider chat logs
python -m potato.trace_converter \
  -i aider_chat_history/ \
  -f aider \
  -o data/aider_converted.jsonl
 
# Convert SWE-Agent trajectories
python -m potato.trace_converter \
  -i trajectories/ \
  -f swe_agent_trajectory \
  -o data/swe_converted.jsonl
 
# Auto-detect format
python -m potato.trace_converter \
  -i mixed_traces/ \
  -f auto \
  -o data/auto_converted.jsonl

يقبل الخيار -i ملفاً واحداً أو مجلداً. وحين يُعطى مجلد، تُعالَج كل ملفات .json و.jsonl. ويكتب المحوّل كائن JSON واحداً في كل سطر من ملف المخرجات.

خيارات إضافية:

bash
# Filter by file extension
python -m potato.trace_converter \
  -i traces/ -f claude_code -o data/out.jsonl \
  --include "*.json"
 
# Add metadata fields from a CSV
python -m potato.trace_converter \
  -i traces/ -f claude_code -o data/out.jsonl \
  --metadata metadata.csv --join-key trace_id
 
# Validate output without writing
python -m potato.trace_converter \
  -i traces.json -f claude_code --validate

صيغة البيانات

بعد التحويل، يتبع كل سطر في ملف JSONL الناتج هذه البنية:

json
{
  "id": "trace_001",
  "task_description": "Fix the failing test in test_parser.py",
  "repository": "myproject",
  "structured_turns": [
    {
      "type": "file_read",
      "tool": "Read",
      "file_path": "src/parser.py",
      "content": "def parse(input_str):\n    tokens = tokenize(input_str)\n    ...",
      "line_start": 1,
      "line_end": 45
    },
    {
      "type": "edit",
      "tool": "Edit",
      "file_path": "src/parser.py",
      "old_content": "    if len(tokens) == 0:\n        return None",
      "new_content": "    if len(tokens) == 0:\n        raise ParseError('Empty input')",
      "line_start": 12,
      "line_end": 13
    },
    {
      "type": "terminal",
      "tool": "Bash",
      "command": "python -m pytest test_parser.py -v",
      "output": "test_parser.py::test_empty_input PASSED\ntest_parser.py::test_valid_input PASSED\n\n2 passed in 0.34s",
      "exit_code": 0
    },
    {
      "type": "file_write",
      "tool": "Write",
      "file_path": "src/parser.py",
      "content": "...",
      "is_new_file": false
    }
  ],
  "metadata": {
    "agent": "claude_code",
    "model": "claude-sonnet-4-20250514",
    "total_tokens": 15234,
    "duration_seconds": 42
  }
}

يحفظ مصفوف structured_turns ترتيب العمليات كما وقعت بالضبط. ولكل دور حقل type (file_read أو edit أو terminal أو file_write أو search أو thought) وحقول خاصة بكل نوع.

مرجع التهيئة

هذه تهيئة كاملة تجمع بين عرض تتبع البرمجة ومخططات تعليق لتقييم مخرجات وكلاء البرمجة:

yaml
task_name: "Coding Agent Evaluation"
task_dir: "."
 
data_files:
  - "data/coding_traces.jsonl"
 
item_properties:
  id_key: id
  text_key: task_description
 
agentic:
  enabled: true
  trace_converter: claude_code
  display_type: coding_trace
 
  coding_trace_display:
    diff_style: unified
    diff_context_lines: 3
    syntax_highlight: true
    show_line_numbers: true
    terminal_theme: dark
    terminal_max_lines: 80
    show_exit_codes: true
    file_read_max_lines: 100
    file_tree:
      enabled: true
      position: left
      show_operation_icons: true
      group_by_directory: true
      click_to_navigate: true
    auto_collapse_threshold: 500
 
annotation_schemes:
  # Did the agent complete the task?
  - annotation_type: radio
    name: task_completion
    description: "Did the agent successfully complete the task?"
    labels:
      - "Fully Complete"
      - "Partially Complete"
      - "Failed"
      - "Made Things Worse"
 
  # Per-step correctness
  - annotation_type: per_turn_rating
    name: step_quality
    description: "Rate this step"
    target: agentic_steps
    rating_type: radio
    labels:
      - "Good"
      - "Acceptable"
      - "Unnecessary"
      - "Incorrect"
 
  # Code quality rating
  - annotation_type: likert
    name: code_quality
    description: "Rate the quality of the code changes"
    min: 1
    max: 5
    labels:
      1: "Very Poor"
      2: "Poor"
      3: "Acceptable"
      4: "Good"
      5: "Excellent"
 
  # Free-text notes
  - annotation_type: text
    name: notes
    description: "Any additional observations about the coding trace"
    label_requirement:
      required: false
 
output_annotation_dir: "output/"
output_annotation_format: "jsonl"

تشغيل المشاريع النموذجية

يتضمن Potato مشاريع نموذجية لتعليق وكلاء البرمجة:

bash
# Clone the repository
git clone https://github.com/davidjurgens/potato.git
cd potato
 
# Run the Claude Code trace evaluation example
potato start example/coding_agent_eval/config.yaml -p 8000
 
# Run the SWE-bench evaluation example
potato start example/swe_bench_eval/config.yaml -p 8000
 
# Run the multi-agent comparison example
potato start example/coding_agent_comparison/config.yaml -p 8000

ويشمل كل مثال تتبعات عيّنة وملف تهيئة كاملاً وملف README يصف مهمة التعليق.

انظر أيضاً

للاطلاع على تفاصيل التنفيذ، انظر الوثائق المصدرية.