Skip to content

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

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

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

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

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

التهيئة

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

yaml
instance_display:
  fields:
    - key: structured_turns
      type: coding_trace
      label: "Agent session"
      display_options:
        # Diff rendering
        diff_view: unified          # "unified" or "side_by_side"
 
        # Terminal output
        terminal_theme: dark        # "dark" or "light"
 
        # Long output
        collapse_long_outputs: true
        max_output_lines: 50        # collapse after this many lines
 
        # Step chrome
        show_file_tree: true
        show_step_numbers: true
        show_tool_badges: true
        show_reasoning: true
        compact: false

ميزات العرض

عرض الـ 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كشف تلقائييفحص بنية التتبع ويختار المحوّل الأنسب تلقائياً

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

bash
python -m potato.trace_converter \
  --input traces.json \
  --input-format claude_code \
  --output data/traces.jsonl

محوّل 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": [
    {
      "role": "assistant",
      "content": "I'll read the parser first to see how it handles empty input.",
      "tool_calls": [
        {
          "tool": "Read",
          "input": { "file_path": "src/parser.py" },
          "output": "def parse(input_str):\n    tokens = tokenize(input_str)\n    ..."
        }
      ]
    },
    {
      "role": "assistant",
      "content": "Empty input returns None where the test expects a ParseError.",
      "tool_calls": [
        {
          "tool": "Edit",
          "input": {
            "file_path": "src/parser.py",
            "old_string": "    if len(tokens) == 0:\n        return None",
            "new_string": "    if len(tokens) == 0:\n        raise ParseError('Empty input')"
          },
          "output": "Edited src/parser.py"
        },
        {
          "tool": "Bash",
          "input": { "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"
        }
      ]
    }
  ],
  "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
annotation_task_name: "Coding Agent Evaluation"
task_dir: "."
 
data_files:
  - "data/coding_traces.jsonl"
 
item_properties:
  id_key: id
  text_key: task_description
 
instance_display:
  fields:
    - key: structured_turns
      type: coding_trace
      label: "Agent session"
      display_options:
        diff_view: unified
        terminal_theme: dark
        collapse_long_outputs: true
        max_output_lines: 50
        show_file_tree: true
        show_step_numbers: true
        show_tool_badges: true
        show_reasoning: true
 
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: trajectory_eval
    name: step_quality
    description: "Rate this step"
    steps_key: agentic_steps
    correctness_options:
      - "Good"
      - "Acceptable"
      - "Unnecessary"
      - "Incorrect"
 
  # Code quality rating
  - annotation_type: likert
    name: code_quality
    size: 5
    min_label: "Poor"
    max_label: "Excellent"
    description: "Rate the quality of the code changes"
    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/"
export_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 يصف مهمة التعليق.

انظر أيضاً

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