ما تحتاج إلى معرفته عند مغادرة GitHub والانتقال إلى Buzz و Nostr
يأتي وقت يصبح فيه دفع الكود إلى مستودعات مركزية مقلقًا. فالسياسات تتغير بشكل متكرر، ولا يمكنك معرفة أين يُستخدم الكود الخاص بك. بالنسبة للمستقلين أو الفرق الصغيرة، تُعد سيادة البيانات مسألة بقاء. يُعد بروتوكول Buzz و Nostr NIP-34 بديلين عمليين لا يعتمدان على شركة واحدة. ومع ذلك، عندما تحاول الهجرة حقًا، يبدو الأمر مربكًا. إذ يتعين عليك حل إجراءات التكلفة ومشاكل الأمان بنفسك.
كيفية نقل المستودعات الحالية إلى Buzz دون فقدان البيانات
إذا قمت ببساطة كتابة git-push --mirror، فسيرفض الخادم ذلك بسبب مراجع GitHub الداخلية مثل refs/pull/*. لا يقبل الخادم المستهدف المراجع المخفية. لنقل الكود دون تعارضات، يجب عليك إزالة المراجع غير الضرورية والدفع بشكل صريح.
عليك إنشاء مستودع فارغ (bare repository) في دليل مؤقت، وحذف المراجع الخاصة بـ GitHub، ثم دفع الكود إلى نقطة نهاية Buzz. وإذا كانت هناك ملفات كبيرة، فيجب عليك أيضًا التعامل مع كائنات LFS بشكل منفصل.
`bash
#!/usr/bin/env bash
set -euo pipefail
GITHUB_REPO_URL="1"BUZZREMOTEURL="2"
TEMP_DIR=$(mktemp -d -t buzz-migration-XXXXXX)
trap 'rm -rf "$TEMP_DIR"' EXIT
git clone --mirror "GITHUBREPOURL""TEMP_DIR/bare_repo.git"
cd "$TEMP_DIR/bare_repo.git"
git for-each-ref --format='%(refname)' refs/pull/ | while read -r ref; do
git update-ref -d "$ref"
done
git remote add buzz "$BUZZ_REMOTE_URL"
git push --force --prune buzz "+refs/heads/:refs/heads/" "+refs/tags/:refs/tags/"
ROOT_COMMIT=(gitrev−list−−max−parents=0HEAD∣head−n1)echo"اكتملالانتقال:RootCommitID(ROOT_COMMIT)"
`
عند تشغيل هذا البرنامج النصي، يتم الاحتفاظ بتاريخ الالتزام (commit history) بنسبة 100%. وتصبح قيمة الهاش للالتزام الأولي المعرف الفريد للمشروع.
| المقارنة |
GitHub |
Buzz / Nostr NIP-34 |
| تحديد المستودع |
سجل قاعدة بيانات الخادم المركزي (org/repo) |
معرف الالتزام الأولي ومعرف حدث Nostr |
| طريقة المصادقة |
OAuth, PAT, SSH Key |
توقيع غير متماثل بمنحنى secp256k1 البيضاوي |
| تبادل التصحيحات |
واجهة برمجة تطبيقات خاصة بـ GitHub |
حدث تصحيح NIP-34 (kind: 1617) |
الهوية المشفرة المستندة إلى Nostr وتكامل الوكلاء (Agents)
في بيئة Nostr، سواء كان المستخدم بشريًا أو وكيل ذكاء اصطناعي، فهما كيانان مشفران متطابقان. تتم المصادقة على بعضهم البعض باستخدام مفتاح عام بـ 32 بايت وتوقيعات Schnorr. بمجرد ترك مفتاح سرّي داخل الكود، سيؤدي ذلك إلى حادث أمني. يجب الاحتفاظ به فقط في الذاكرة كمتغيرات بيئية أو استخدام مُوقّع عن بُعد.
للتحقق مما إذا كان التصحيح المرسل بواسطة الوكيل قد تم تعديله في المنتصف، يجب عليك التحقق من هاش التسلسل لـ NIP-01.
`python
import json
import hashlib
from coincurve import PrivateKey
def create_signed_agent_event(secret_key_hex: str, kind: int, content: str, tags: list) -> dict:
sk = PrivateKey.from_hex(secret_key_hex)
pubkey_hex = sk.public_key.format(compressed=True)[1:].hex()
created_at = 1710000000
serialized_data = json.dumps(
[0, pubkey_hex, created_at, kind, tags, content],
separators=(',', ':'),
ensure_ascii=False
)
event_id = hashlib.sha256(serialized_data.encode('utf-8')).hexdigest()
sig_hex = sk.schnorr_sign(bytes.fromhex(event_id), None, raw=True).hex()
return {
"id": event_id,
"pubkey": pubkey_hex,
"created_at": created_at,
"kind": kind,
"tags": tags,
"content": content,
"sig": sig_hex
}
def verify_agent_event(event: dict) -> bool:
preimage = [0, event["pubkey"], event["created_at"], event["kind"], event["tags"], event["content"]]
serialized = json.dumps(preimage, separators=(',', ':'), ensure_ascii=False)
computed_id = hashlib.sha256(serialized.encode('utf-8')).hexdigest()
return computed_id == event["id"]
`
عندما تحتاج إلى تبادل الكود بشكل سري، استخدم مواصفات NIP-44 v2 للتشفير باستخدام ChaCha20.
إدارة تكلفة أتمتة الوكلاء المتعددين
عندما تترك كتابة الكود لوكيل، فإنه يدخل في حلقة تعديل ذاتي ويحرق الرموز (tokens) بسرعة. وكلما تراكمت سجلات الفشل، كلما تلوث السياق وارتفعت التكاليف. لمنع ذلك، يجب وضع حدود على مستوى الوكيل (proxy).
ضع وكيل LiteLLM في الأمام وقم بتقييد الميزانية اليومية والسرعة لكل مفتاح افتراضي.
`bash
curl -X POST 'http://localhost:4000/key/generate'
-H 'Authorization: Bearer sk-master-key-1234'
-H 'Content-Type: application/json'
-d '{
"key_alias": "auto-coder-agent-01",
"max_budget": 5.0,
"budget_duration": "1d",
"tpm_limit": 50000,
"rpm_limit": 30,
"models": ["agent-code-model"]
}'
`
إذا تجاوزت ميزانية اليوم 5 دولارات، فستظهر رسالة خطأ وتتوقف على الفور. يمكنك أيضًا تقليل ميزانية الفريق بأكمله باستخدام ملف التكوين.
`yaml
model_list:
- model_name: agent-code-model
litellm_params:
model: openai/gpt-4o
api_key: os.environ/OPENAI_API_KEY
litellm_settings:
max_budget: 100.0
budget_duration: "30d"
default_team_settings:
- team_id: "decentralized-dev-team"
max_budget: 20.0
budget_duration: "1d"
`
يجب عليك أيضًا التوقف عن وضع الكود بأكمله في السياق. استخدم Tree-Sitter لقص توقيعات الدوال المطلوبة فقط والمنطقة المحيطة بالتغييرات لتقليل هدر الرموز. يؤدي استخدام هذه الطريقة إلى تقليل استدعاءات الأدوات غير الضرورية بنصف النصف أو أكثر.