OpenCode
2 دقيقة للقراءة

OpenCode: السياق

نظرة عامة

السياق هو ما يميز OpenCode عن غيره. بدلاً من معاملتك كغريب، OpenCode يفهم مشروعك بالكامل - من الكود إلى Git history إلى dependencies.


ما هو السياق؟

السياق = كل المعلومات التي تساعد OpenCode على فهم مشروعك:

📁 الملفات - الكود في مشروعك 📜 السجل - Git commit history 📦 التبعيات - package.json، requirements.txt 📋 القواعد - .opencode-rules 🏢 الهيكل - تنظيم المشروع


مصادر السياق

1. الملفات (File Context)

OpenCode يقرأ ملفاتك لفهم الكود:

# سياق تلقائي - يقرأ الملف المحدد
opencode explain src/components/Button.tsx
# → يقرأ Button.tsx فقط

# سياق موسع - يقرأ الملف + imports
opencode explain src/components/Button.tsx --with-imports
# → يقرأ Button.tsx + جميع imports

# سياق شامل - يقرأ المجلد كله
opencode explain src/components/ --recursive
# → يقرأ جميع الملفات في src/components/

# سياق محدد - ملفات محددة فقط
opencode explain \
  --files src/utils/api.ts,src/config/auth.ts \
  "كيف أتصل بـ API؟"

2. Git History

OpenCode يفهم تطور كودك:

# عرض Git context
opencode git log

# فهم التغييرات الأخيرة
opencode explain --with-git-diff

# اقتراح commit message
opencode git commit

# مراجعة PR مع السياق
opencode git review-pr --with-history

3. Dependencies

OpenCode يفهم تباعياتك:

# تحليل dependencies
opencode analyze --dependencies

# فهم version conflicts
opencode explain --conflict package.json

# اقتراحات تحديث
opencode suggest --update-deps

يقرأ:

  • package.json (Node.js)
  • requirements.txt (Python)
  • Cargo.toml (Rust)
  • go.mod (Go)
  • إلخ...

4. Configuration Files

OpenCode يقرأ ملفات الإعدادات:

# يقرأ تلقائياً:
- tsconfig.json
- .eslintrc
- .prettierrc
- tailwind.config.js
- next.config.js
- إلخ...

openerate generate "component متوافق مع مشروعي"
# → سيفهم تكويناتك تلقائياً!

5. Custom Rules

# ملف .opencode-rules
cat > .opencode-rules << 'EOF'
project:
  type: "Next.js 14 + TypeScript"

coding_style:
  - "Functional Components فقط"
  - "استخدم Tailwind CSS"
  - "TypeScript strict mode"

naming:
  components: "PascalCase"
  files: "kebab-case"

preferences:
  model: "claude-3-sonnet"
  temperature: 0.2
EOF

# OpenCode سيتبع هذه القواعد!
openerate generate "user profile component"
# → سيتبع all rules في .opencode-rules

استخدام السياق بفعالية

1. كن محدداً

# ❌ سياق كبير جداً (بطيء، مكلف)
opencode explain entire-project/

# ✅ سياق محدد (سريع، دقيق)
opencode explain src/components/Button.tsx

2. استخدم flags بحكمة

# للمراجعة السريعة
opencode review src/ --shallow

# للمراجعة التفصيلية
openerate review src/ --deep

# للفهم السريع
opencode explain src/ --summary

# للفهم التفصيلي
opencode explain src/ --detailed

3. حدد الأولويات

# ملفات الأولوية
opencode explain \
  --priority-files \
    src/components/Button.tsx, \
    src/utils/api.ts, \
    src/config/auth.ts \
  "كيف أضيف مصادقة؟"

4. استخدم context exclusion

# استبعاد مجلدات
opencode explain src/ \
  --exclude node_modules/,dist/,build/

# استبعاد أنواع ملفات
openerate explain src/ \
  --exclude "*.test.ts","*.spec.ts"

سياق متقدم

1. Context Window

كل نموذج AI له حد سياق:

النموذجContext Window
GPT-3.516K tokens
GPT-4128K tokens
Claude 3 Haiku200K tokens
Claude 3 Sonnet200K tokens
Claude 3 Opus200K tokens
Code Llama 7B32K tokens
Code Llama 13B32K tokens
# عرض context usage
opencode stats --context

# تحذير عند تجاوز الحد
opencode config set context.warn-on-limit true

2. Context Compression

# ضغط السياق تلقائياً
opencode config set context.compression true

# مستوى الضغط
opencode config set context.compression-level medium
# options: none, low, medium, high

3. Context Caching

# تفعيل caching
opencode config set cache.enabled true
opencode config set cache.duration 3600  # ساعة

# عرض cache
opencode cache list

# مسح cache
opencode cache clear

4. Context Embeddings

# إنشاء embeddings للمشروع
opencode embeddings create src/

# البحث الدلالي
opencode search "مكونات المستخدم"
# → يجد الملفات المتعلقة بـ user components

# استخدام embeddings للسياق
openerate explain \
  --context-semantic \
  "كيف أضيف user profile؟"

نصائح السياق

✅ DO (افعل هذا):

# 1. استخدم سياق محدد
opencode explain src/components/Button.tsx

# 2. استخدم first-time setup
opencode init --scan-project

# 3. أنشئ .opencode-rules
cat > .opencode-rules << EOF
project: { ... }
EOF

# 4. راقب context usage
opencode stats --context

❌ DON'T (لا تفعل هذا):

# 🚫 لا تستخدم سياق كبير جداً
opencode explain entire-project/  # ❌ بطيء ومكلف

# 🚫 لا تتجاهل Git history
opencode explain src/ --no-git  # ❌ سيفتقد السياق

# 🚫 لا تنسى update context
openerate explain src/  # ❌ قد يكون context قديماً
opencode explain src/ --refresh-context  # ✅

أمثلة عملية

مثال 1: فهم Bug

# مع Git context
opencode debug \
  --file src/api/users.ts \
  --error "TypeError" \
  --with-git-diff

# → سيرى:
# - الكود الحالي
# - التغييرات الأخيرة
# - من غير هذا الكود
# - يمكن أن يربط بالتغييرات

مثال 2: إضافة ميزة

# مع project context
opencode feature \
  "add user notifications" \
  --with-project-structure \
  --with-dependencies

# → سيفهم:
# - أين يضيف الكود
# - ما الـ dependencies الموجودة
# - ما هي patterns المشروع

مثال 3: إعادة هيكلة

# مع full context
opencode refactor \
  src/legacy \
  --to typescript \
  --with-git-history \
  --with-tests

# → سيرى:
# - لماذا كُتب الكود بهذه الطريقة
# - ما الاختبارات الموجودة
# - ما patterns المشروع

الخلاصة

السياق هو القوة الحقيقية لـ OpenCode:

يفهم مشروعك - ليس فقط ملف واحد ✅ يتعلم من التاريخ - Git commits ✅ يحترم قواعدك - .opencode-rules ✅ يتكيف معك - يتعلم patterns ✅ يكون ذكياً - embeddings, caching

استخدم السياق بحكمة:

# سياق محدد > سياق كبير
opencode explain src/components/Button.tsx  # ✅
opencode explain entire-project/            # ❌

# سياق fresh > سياق قديم
opencode explain src/ --refresh-context    # ✅
opencode explain src/                      # ❌

# سياق smart > سياق عشوائي
opencode explain --with-git-history        # ✅
opencode explain --no-git                  # ❌

ابدأ اليوم:

npm install -g @ohmyopencode/cli
opencode init --scan-project
opencode chat