مرکزی مواد پر جائیں
اے آئی ٹیوٹوریلز

Python کے ذریعے اپنے AI کوڈنگ اسسٹنٹ چیٹس نکالیں اور یکساں فارمیٹ میں تبدیل کریں

جانیں کہ AI کوڈنگ اسسٹنٹ ڈیٹا ایکسٹریکشن کے ذریعے Claude Code، Codex CLI، Cursor، Windsurf، Trae، Continue، Gemini CLI، OpenCode، Cline، Roo Code اور Aider سے مقامی چیٹ ہسٹری کیسے دریافت کی جائے، پھر بیک اپ، تجزیے یا تربیت کے لیے انہیں یکساں JSONL میں تبدیل کریں۔

Python کے ذریعے AI کوڈنگ اسسٹنٹ چیٹس نکالیں اور یکساں فارمیٹ میں تبدیل کریں

یہ پروجیکٹ کیا کرتا ہے

AI Coding Assistant Data Extraction متعدد کوڈنگ اسسٹنٹس سے آپ کی مقامی طور پر محفوظ گفتگوئیں جمع کرتا ہے اور انہیں یکساں JSONL فارمیٹ میں لکھتا ہے۔ یہ چیٹ ہسٹری کا بیک اپ لینے، ذاتی تجزیات کرنے، فائن ٹیوننگ ڈیٹا تیار کرنے، یا کسی ایپلیکیشن کے مقامی ڈیٹابیس کو صاف کرنے سے پہلے گفتگوئیں محفوظ کرنے کے لیے مفید ہے۔

یہ ٹول کٹ macOS، Linux، اور Windows پر اسٹوریج کے مقامات خودکار طور پر تلاش کرتی ہے۔ یہ کسی تیسرے فریق کی Python dependencies کے بغیر JSONL فائلیں، JSON سیشن فائلیں، Markdown ٹرانسکرپٹس، SQLite ڈیٹابیسز، اور nested JSON اسٹوریج ٹریز پڑھ سکتی ہے۔

معاونت یافتہ ذرائع

یہ پروجیکٹ فی الحال درج ذیل ٹولز کو سپورٹ کرتا ہے:

  • Claude Code: ~/.claude/projects/ کے اندر JSONL سیشن فائلیں۔
  • Codex CLI: ~/.codex/sessions/ کے اندر JSONL رول آؤٹ فائلیں۔
  • Cursor: گلوبل اور ورک اسپیس اسٹوریج میں موجود SQLite state.vscdb فائلیں۔
  • Windsurf: بہترین کوشش پر مبنی heuristic کے ذریعے پارس کیا گیا SQLite اسٹوریج۔
  • Trae: بہترین کوشش پر مبنی heuristic کے ذریعے پارس کیا گیا SQLite اور JSONL اسٹوریج۔
  • Continue: ~/.continue/sessions/ میں موجود JSON فائلیں۔
  • Gemini CLI: ~/.gemini/tmp/ کے اندر موجود JSON چیٹ فائلیں۔
  • OpenCode: JSON سیشن، پیغام، اور part ٹریز۔
  • Cline اور Roo Code: ایڈیٹر ایکسٹینشن کے ذریعے محفوظ کیے گئے JSON ٹاسک فولڈرز۔
  • Aider: پروجیکٹ ڈائریکٹریز کے اندر .aider.chat.history.md نامی Markdown ٹرانسکرپٹس۔

انسٹالیشن اور سیٹ اپ

ریپوزٹری کو کلون یا ڈاؤن لوڈ کریں، پھر پروجیکٹ روٹ سے اس کے اسکرپٹس چلائیں۔ ایکسٹریکٹر صرف Python کی معیاری لائبریری استعمال کرتا ہے۔ Python 3.9 یا اس کے بعد کا ورژن درکار ہے، جبکہ Python 3.10 یا اس کے بعد کا ورژن تجویز کیا جاتا ہے۔

python --version

بنیادی ایکسٹریکٹر کے لیے ورچوئل ماحول یا dependencies کی انسٹالیشن ضروری نہیں۔ ڈیٹا نکالنے سے پہلے یقینی بنائیں کہ متعلقہ AI کوڈنگ ٹولز اس مشین پر استعمال کیے جا چکے ہیں، تاکہ مقامی گفتگو فائلیں یا ڈیٹابیسز موجود ہوں۔

اپنا پہلا ڈیٹا ایکسٹریکشن چلائیں

انٹرایکٹو ورک فلو کے لیے مرکزی اسکرپٹ بغیر arguments کے چلائیں۔ یہ ایک نمبر والی مینو دکھاتا ہے، جس سے آپ نکالنے کے لیے ذرائع منتخب کر سکتے ہیں۔

python extract.py

تمام معاونت یافتہ ذرائع سے بغیر prompts کے ڈیٹا نکالنے کے لیے --all استعمال کریں۔

python extract.py --all

آپ comma-separated فہرست کے ذریعے مخصوص ذرائع بھی منتخب کر سکتے ہیں۔ سورس IDs ریپوزٹری کی source table میں یا --list استعمال کرنے پر دکھائی جاتی ہیں۔

python extract.py --sources cursor,claude_code,aider

کسی بھی گفتگو کو نکالے بغیر یہ دیکھنے کے لیے کہ کون سی installations دریافت ہوئی ہیں، چلائیں:

python extract.py --list

شامل کردہ shell shortcut، جہاں دستیاب ہو، تمام ذرائع سے ایکسٹریکشن انجام دیتا ہے:

./extract_all.sh

آؤٹ پٹ اور تلاش کے راستے منتخب کریں

بطور ڈیفالٹ، timestamp والی JSONL فائلیں ./extracted_data میں لکھی جاتی ہیں۔ مختلف منزل منتخب کرنے کے لیے --output-dir استعمال کریں۔

python extract.py --all --output-dir ./chat-backup

زیادہ تر ٹولز کے application-data ڈائریکٹریز قابل پیش گوئی ہوتی ہیں، اس لیے ایکسٹریکٹر عام آپریٹنگ سسٹم کے مقامات خودکار طور پر تلاش کرتا ہے۔ Aider مختلف ہے: یہ مرکزی application-data فولڈر استعمال کرنے کے بجائے ہر پروجیکٹ ڈائریکٹری کے اندر ایک Markdown ٹرانسکرپٹ محفوظ کرتا ہے۔

جب آپ کے پروجیکٹس یا application data معمول کے مقامات سے باہر ہوں تو ایک یا زیادہ --search-path آپشنز استعمال کریں۔

python extract.py --sources aider \
  --search-path ~/client-work \
  --search-path /mnt/data/repos

اضافی تلاش کے راستے دیگر معاونت یافتہ ٹولز کی غیرمعیاری installations کے لیے بھی مفید ہیں۔

گفتگوئیں ایک فائل میں ضم کریں

ہر منتخب سورس کو عموماً اپنی الگ timestamp والی آؤٹ پٹ فائل ملتی ہے۔ تمام نکالی گئی گفتگوؤں کو all_conversations.jsonl میں بھی یکجا کرنے کے لیے --merge شامل کریں۔

python extract.py --all --merge

ایک عام آؤٹ پٹ ڈائریکٹری میں ایسی فائلیں شامل ہو سکتی ہیں:

extracted_data/
├── claude_code_conversations_20260816_143022.jsonl
├── cursor_conversations_20260816_143022.jsonl
├── aider_conversations_20260816_143022.jsonl
├── cline_conversations_20260816_143022.jsonl
└── all_conversations.jsonl

معیاری فارمیٹ کو سمجھیں

آؤٹ پٹ فائل کی ہر سطر ایک گفتگو کی نمائندگی کرتی ہے۔ عام ساخت میں messages array، ایک source identifier، اور ایک session_id شامل ہوتے ہیں۔ دیگر فیلڈز اس بات پر منحصر ہوتے ہیں کہ اصل ٹول نے کیا ریکارڈ کیا تھا۔

{
  "messages": [
    {
      "role": "user",
      "content": "How do I fix this TypeScript error?",
      "code_context": [
        {
          "file": "/Users/you/project/index.ts",
          "code": "const x: string = 123;"
        }
      ],
      "timestamp": "2026-01-16T14:30:22Z"
    },
    {
      "role": "assistant",
      "content": "The error occurs because a number is assigned to a string type.",
      "tool_use": [
        {
          "name": "edit_file",
          "input": {"path": "src/index.ts"}
        }
      ],
      "timestamp": "2026-01-16T14:30:25Z"
    }
  ],
  "source": "cursor-composer",
  "session_id": "c1a2b3...",
  "project_path": "/Users/you/project",
  "name": "TypeScript Type Error Fix",
  "created_at": 1705414222000
}

code_context، token usage، project paths، timestamps، tool calls، اور diffs جیسے فیلڈز اس وقت شامل کیے جاتے ہیں جب سورس انہیں محفوظ کرتا ہو۔ جن فیلڈز پر آپ مستقل طور پر بھروسا کر سکتے ہیں وہ messages، source، اور session_id ہیں۔

ایکسٹریکشن کیسے کام کرتی ہے

  1. پروگرام آپریٹنگ سسٹم کا پتا لگاتا ہے اور ممکنہ ڈیٹا روٹس کی فہرست بناتا ہے، جس میں Application Support، .config، .local/share، %APPDATA% اور %LOCALAPPDATA% جیسی جگہیں شامل ہیں۔
  2. ہر سورس ان روٹس میں اپنے معلوم فولڈر اور فائل نام تلاش کرتا ہے۔
  3. متعلقہ ریڈر JSONL، JSON، SQLite، Markdown یا نیسٹڈ JSON اسٹوریج لوڈ کرتا ہے۔
  4. ایکسٹریکٹر دریافت شدہ ریکارڈز کو مشترکہ پیغام اسکیما میں معمول پر لاتا ہے۔
  5. ٹائم اسٹیمپ والے JSONL فائلیں آؤٹ پٹ ڈائریکٹری میں لکھی جاتی ہیں۔

SQLite ڈیٹابیسز صرف پڑھنے کے لیے کھولے جاتے ہیں، جس سے چلتے ہوئے ایڈیٹر کو بلاک ہونے سے بچانے میں مدد ملتی ہے۔ ریڈرز کو الگ بھی رکھا گیا ہے، اس لیے خراب یا لاک شدہ فائل مکمل ایکسٹریکشن روکنے کے بجائے جزوی نتائج پیدا کرتی ہے۔

غیر دستاویزی اسٹوریج فارمیٹس سنبھالیں

Cursor، Windsurf اور Trae مستحکم اسٹوریج اسکیما شائع نہیں کرتے۔ Cursor کا ایکسٹریکٹر واضح طور پر کئی معلوم ساختوں کو سنبھالتا ہے، جن میں ورک اسپیس ItemTable چیٹ، ان لائن کمپوزر ڈیٹا اور الگ کیے گئے bubbleId کمپوزر ڈیٹا شامل ہیں۔

Windsurf اور Trae extractors/common.py میں ایک عمومی ہیورسٹک استعمال کرتے ہیں۔ یہ چیٹ سے متعلق کلیدوں کو تلاش کرتا ہے اور پارس کیے گئے JSON میں ایسی آبجیکٹس ڈھونڈتا ہے جو کردار اور متن پر مشتمل پیغام کے جوڑوں سے مشابہ ہوں۔ یہ جان بوجھ کر بہترین ممکنہ کوشش کے طور پر کام کرتا ہے۔ اگر مستقبل میں ایپلیکیشن کی اپ ڈیٹ اسٹوریج کی ساخت تبدیل کر دے تو متعلقہ KEY_HINTS اقدار کو اپ ڈیٹ کرنے کی ضرورت پڑ سکتی ہے۔

آؤٹ پٹ کو تربیتی ڈیٹا کے لیے استعمال کریں

معمول پر لائی گئی JSONL فائلیں Hugging Face کی datasets لائبریری سے لوڈ کی جا سکتی ہیں۔ درج ذیل مثال تمام ایکسٹریکٹ کی گئی فائلیں لوڈ کرتی ہے، اسسٹنٹ پیغامات پر مشتمل گفتگو برقرار رکھتی ہے، اور ٹوکنائزر کے چیٹ ٹیمپلیٹ کے ذریعے ان کی فارمیٹنگ کرتی ہے۔

from datasets import load_dataset

dataset = load_dataset(
    "json",
    data_files="extracted_data/*.jsonl",
    split="train"
)
dataset = dataset.filter(
    lambda x: any(m["role"] == "assistant" for m in x["messages"])
)

def format_chat(example):
    return {
        "text": tokenizer.apply_chat_template(
            example["messages"],
            tokenize=False
        )
    }

dataset = dataset.map(format_chat)

اپنے ماڈل کی ضروریات کے مطابق ریکارڈز کا مزید معائنہ اور تبدیلی کریں۔ مختلف سورسز میں مختلف اختیاری فیلڈز ہو سکتے ہیں، اس لیے تربیتی پائپ لائنز کو بنیادی طور پر مشترکہ پیغام کی ساخت پر انحصار کرنا چاہیے۔

نئے سورس کے ساتھ ایکسٹریکٹر کو وسعت دیں

ہر سورس ایکسٹریکٹر دو چھوٹے فنکشنز والے انٹرفیس کی پیروی کرتا ہے۔ continue_ext.py کی نقل بنا کر ایک سادہ نقطۂ آغاز حاصل کیا جا سکتا ہے۔

DISPLAY_NAME = "My Tool"
SOURCE_ID = "my_tool"

def find_installations(extra_paths: list[Path] | None = None) -> list[Path]:
    """Return directories or files worth scanning."""

def extract(installations: list[Path]) -> list[dict]:
    """Return normalized conversation dictionaries."""

ماڈیول بنانے کے بعد اسے extract.py میں موجود REGISTRY فہرست میں رجسٹر کریں۔ مشترکہ ریڈرز اور عمومی ہیورسٹکس extractors/common.py میں دستیاب ہیں۔

حساس گفتگو کے ڈیٹا کا تحفظ کریں

مقامی چیٹ ہسٹریز میں API کیز، ملکیتی کوڈ، ذاتی راستے، کلائنٹ کی معلومات اور ٹول ان پٹس شامل ہو سکتے ہیں۔ ایکسٹریکٹ کی گئی فائلیں شیئر کرنے یا تربیت کے لیے استعمال کرنے سے پہلے ان کا جائزہ لیں۔

  1. آؤٹ پٹ میں راز تلاش کریں۔
  2. code_context اور tool_use فیلڈز کا احتیاط سے جائزہ لیں۔
  3. extracted_data/ کو عوامی ریپوزٹری میں کمٹ نہ کریں۔
  4. حساس بیک اپس کو انکرپٹڈ اسٹوریج پر رکھیں۔
pip install detect-secrets --break-system-packages
detect-secrets scan extracted_data/*.jsonl

پروجیکٹ نے extracted_data/ کو .gitignore میں شامل کیا ہوا ہے، لیکن پھر بھی کچھ شائع کرنے سے پہلے اپنی ریپوزٹری اور بیک اپ کے طریقۂ کار کی تصدیق کر لیں۔

مسائل کا حل

کوئی انسٹالیشن نہیں ملی

ممکن ہے ٹول انسٹال نہ ہو، اس میں محفوظ چیٹ ہسٹری موجود نہ ہو، یا یہ غیر معیاری جگہ استعمال کرتا ہو۔ پہلے --list چلائیں، پھر متعلقہ ڈائریکٹری --search-path کے ذریعے فراہم کریں۔ آپ سورس ایکسٹریکٹر کے SEARCH_DIRS یا APP_DIR_NAMES مستقلات کا بھی معائنہ کر سکتے ہیں۔

Cursor یا Windsurf لاک شدہ ڈیٹابیس کی اطلاع دیتا ہے

ایکسٹریکٹر صرف پڑھنے کے لیے SQLite کنکشنز استعمال کرتے ہیں، اس لیے عام طور پر چلتی ہوئی ایپلیکیشن ایکسٹریکشن کو بلاک نہیں کرے گی۔ اگر غلطیاں جاری رہیں تو ایپلیکیشن بند کر کے ایکسٹریکشن دوبارہ چلائیں۔

Windsurf یا Trae صفر گفتگوئیں تیار کرتا ہے

--list کے ذریعے تصدیق کریں کہ ایپلیکیشن ڈائریکٹری مل گئی ہے۔ اگر ڈائریکٹری مل گئی ہو لیکن کوئی چیٹ ایکسٹریکٹ نہ ہوئی ہو تو متعلقہ state.vscdb کلیدوں کا معائنہ کریں اور مناسب ایکسٹریکٹر میں KEY_HINTS کے لیے مماثل پیٹرنز شامل کریں۔

نتیجہ

AI Coding Assistant Data Extraction متعدد اسٹوریج فارمیٹس اور آپریٹنگ سسٹمز میں مقامی کوڈنگ گفتگوؤں کو محفوظ اور معمول پر لانے کا ایک ایسا طریقہ فراہم کرتا ہے جس کے لیے بیرونی انحصارات درکار نہیں۔ python extract.py --list سے آغاز کریں، مطلوبہ سورسز منتخب کریں، حساس معلومات کے لیے تیار کردہ JSONL کا جائزہ لیں، پھر بیک اپ، تجزیے یا احتیاط سے تیار کردہ تربیتی ورک فلو کے لیے معمول پر لائے گئے ریکارڈز استعمال کریں۔

یہ ٹول کٹ آپ کی اپنی مشین پر انسٹال کردہ AI ٹولز کے ڈیٹا کے لیے ہے۔ ڈیٹا ایکسٹریکٹ کرنے کے حقوق حاصل کرنا، حساس معلومات کا تحفظ، ہر ٹول کی شرائط کی پابندی، اور نتائج شیئر کرنے یا ان پر تربیت دینے سے پہلے رازوں کی جانچ کرنا آپ کی ذمہ داری ہے۔