تنفيذ أصلي بالكامل باستخدام ADK-Rust

تعرّف على Ralph

حلقة وكلاء مستقلة تعمل باستمرار حتى اكتمال جميع عناصر وثيقة متطلبات المنتج. لا حاجة إلى نصوص Bash، فكل شيء يعمل داخل ADK-Rust.

عرض حي لـ ADK-Ralph v2

أعط Ralph منتجًا صغيرًا واحدًا ليبنيه.

يشغل هذا الملف الثنائي الحقيقي لـ Rust. يحدد وكيل PRD قصة مستخدم واحدة، ينشئ وكيل المهندس التصميم وخطة المهمة، ويكتب وكيل Ralph Loop المشروع ويتحقق منه في مساحة عمل معزولة.

01 · PRD Agent

تعريف المنتج

1

02 · Architect Agent

تصميم النظام

2

03 · Ralph Loop Agent

ابنِ وتحقق

3

مشروع واحد · ثلاث تكرارات تنفيذ · حد زمني ثماني دقائق · حذف الملفات المؤقتة بعد التسليم

تنفيذ Ralph
عملية حقيقية · متدفقة

التشغيل الحقيقي سيظهر هنا.

سترى مراحل الوكيل، نشاط الأدوات، فحوصات الجودة، والملفات التي يعيدها رالف.

البنية نظرة عامة

مبني بالكامل بلغة Rust باستخدام إمكانات الحلقات الأصلية في ADK-Rust

وكيل الحلقة
المنسّق
وكيل التنفيذ
منفّذ المهام
أداة PRD
مدير المهام
أداة Git
إدارة الإصدارات
أداة الاختبار
فحص الجودة
1

وكيل الحلقة

يمر المنسّق الرئيسي على المهام، ويفوّض العمل، ويتابع التقدم العام.

2

وكيل التنفيذ

ينفذ كل مهمة ضمن سياق مركز، ثم يطبق التغييرات ويختبرها ويسجلها.

3

أدوات مخصصة

أدوات ADK-Rust أصلية لـ Git وعمليات الملفات وفحوص الجودة وإدارة وثيقة المتطلبات.

أهم الإمكانات

يعرض Ralph أهم إمكانات ADK-Rust لبناء الوكلاء المستقلين

🔄

حلقة مستقلة

تنفيذ مستمر حتى اكتمال جميع عناصر وثيقة المتطلبات، مع دمج أصلي لأدوات الحلقة ومن دون نصوص Bash.

🤖

تنسيق عدة وكلاء

ينسّق وكيل الحلقة وكلاء التنفيذ. يتخصص كل وكيل في دوره ليعمل بكفاءة أعلى.

🛠️

أدوات مخصصة

تم بناء Git وعمليات الملفات وفحوص الجودة وإدارة وثيقة المتطلبات كلها كأدوات ADK-Rust أصلية.

📋

مدفوع بوثيقة المتطلبات

إدارة مهام مبنية على JSON مع قصص المستخدم ومعايير القبول وتتبع النجاح والإخفاق.

بوابات الجودة

تشغيل cargo check وtest وclippy وfmt تلقائياً قبل كل commit.

💾

حفظ الحالة

توفر سجلات Git وسجلات التقدم وتحديثات AGENTS.md سياقاً كاملاً وقابلية للتدقيق.

التنفيذ بالتفصيل

شفرة Rust واضحة ومعتادة تستفيد من مجموعة إمكانات ADK-Rust كاملة

use serde::{Deserialize, Serialize};
use std::fs;
use anyhow::Result;

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Prd {
    pub project: String,
    pub branch_name: String,
    pub description: String,
    pub user_stories: Vec<UserStory>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UserStory {
    pub id: String,
    pub title: String,
    pub description: String,
    pub acceptance_criteria: Vec<String>,
    pub priority: u32,
    pub passes: bool,
    #[serde(default)]
    pub notes: String,
}

impl Prd {
    pub fn load(path: &str) -> Result<Self> {
        let content = fs::read_to_string(path)?;
        let prd: Prd = serde_json::from_str(&content)?;
        Ok(prd)
    }
    
    pub fn save(&self, path: &str) -> Result<()> {
        let content = serde_json::to_string_pretty(self)?;
        fs::write(path, content)?;
        Ok(())
    }
    
    pub fn get_next_task(&self) -> Option<&UserStory> {
        self.user_stories
            .iter()
            .filter(|story| !story.passes)
            .min_by_key(|story| story.priority)
    }
    
    pub fn mark_complete(&mut self, task_id: &str) -> Result<()> {
        if let Some(story) = self.user_stories
            .iter_mut()
            .find(|s| s.id == task_id) 
        {
            story.passes = true;
        }
        Ok(())
    }
    
    pub fn is_complete(&self) -> bool {
        self.user_stories.iter().all(|story| story.passes)
    }
    
    pub fn stats(&self) -> (usize, usize) {
        let complete = self.user_stories
            .iter()
            .filter(|s| s.passes)
            .count();
        let total = self.user_stories.len();
        (complete, total)
    }
}

بنية المشروع

تنظيم معياري واضح يفصل الوكلاء والأدوات والنماذج لتسهيل الصيانة والتوسعة.

ralph/
├── Cargo.toml                # Ralph agent config
├── src/
│   ├── main.rs               # Entry point
│   ├── agents/
│   │   ├── mod.rs
│   │   ├── loop_agent.rs     # Main orchestrator
│   │   └── worker_agent.rs   # Task executor
│   ├── tools/
│   │   ├── mod.rs
│   │   ├── git_tool.rs       # Git operations
│   │   ├── file_tool.rs      # File manipulation
│   │   ├── test_tool.rs      # Quality checks
│   │   └── prd_tool.rs       # PRD management
│   └── models/
│       ├── prd.rs            # PRD data structures
│       └── config.rs         # Configuration
├── prd.json                  # Task list
└── progress.txt              # Learnings log

التنفيذ الأصلي مقابل Bash

لماذا نبني الوكلاء المستقلين مباشرة بلغة Rust بدلاً من تنسيقهم باستخدام نصوص shell؟

الجانبBashأصلي
التنفيذنص shell + ADK-RustRust خالصة
أمان الأنواعوقت التشغيلوقت الترجمة
معالجة الأخطاءرموز الخروجResult<T, E>
التزامنتسلسليAsync/await
دمج الأدواتأوامر shellأدوات ADK-Rust أصلية
تصحيح الأخطاءملفات السجلالتتبع + السجلات المنظمة
الأداءتكلفة إنشاء العملياتتجريدات بلا تكلفة تشغيلية
أمان الذاكرةإدارة يدويةيضمنها المترجم
الاختباراتاختبارات تكامل فقطاختبارات وحدات + تكامل

هل أنت مستعد لبناء Ralph الخاص بك؟

استكشف الشفرة المصدرية كاملة، وعدّلها لتناسب حالة استخدامك، أو استخدمها أساساً لبناء أنظمة الوكلاء المستقلة الخاصة بك.