
Bu loyiha nima qiladi
AI Coding Assistant Data Extraction bir nechta kodlash yordamchilarida kompyuteringizda mahalliy saqlangan suhbatlarni yig‘ib, ularni yagona JSONL formatida yozadi. U chat tarixini zaxiralash, shaxsiy tahlil o‘tkazish, fine-tuning ma’lumotlarini tayyorlash yoki ilova mahalliy ma’lumotlar bazasini tozalashidan oldin suhbatlarni saqlab qolish uchun foydalidir.
Toolkit macOS, Linux va Windows tizimlaridagi saqlash joylarini avtomatik aniqlaydi. U uchinchi tomon Python bog‘liqliklarini talab qilmasdan JSONL fayllari, JSON sessiya fayllari, Markdown transkriptlari, SQLite ma’lumotlar bazalari va ichma-ich JSON saqlash daraxtlarini o‘qiy oladi.
Qo‘llab-quvvatlanadigan manbalar
Loyiha hozirda quyidagi vositalarni qo‘llab-quvvatlaydi:
- Claude Code:
~/.claude/projects/ichidagi JSONL sessiya fayllari. - Codex CLI:
~/.codex/sessions/ichidagi JSONL rollout fayllari. - Cursor: global va ish sohasi xotirasidagi SQLite
state.vscdbfayllari. - Windsurf: eng yaxshi natijaga yo‘naltirilgan evristik usulda tahlil qilinadigan SQLite saqlash ma’lumotlari.
- Trae: eng yaxshi natijaga yo‘naltirilgan evristik usulda tahlil qilinadigan SQLite va JSONL saqlash ma’lumotlari.
- Continue:
~/.continue/sessions/ichidagi JSON fayllari. - Gemini CLI:
~/.gemini/tmp/ichidagi JSON chat fayllari. - OpenCode: JSON sessiya, xabar va qism daraxtlari.
- Cline va Roo Code: muharrir kengaytmasi saqlaydigan JSON vazifa papkalari.
- Aider: loyiha kataloglari ichidagi
.aider.chat.history.mdnomli Markdown transkriptlari.
O‘rnatish va sozlash
Repositoryni klonlang yoki yuklab oling, so‘ng uning skriptlarini loyiha ildiz katalogidan ishga tushiring. Extractor faqat Python standart kutubxonasidan foydalanadi. Python 3.9 yoki undan yangiroq versiya talab qilinadi, Python 3.10 yoki undan yangiroq versiya tavsiya etiladi.
python --version
Asosiy extractor uchun virtual muhit yaratish yoki bog‘liqliklarni o‘rnatish talab qilinmaydi. Ajratib olishdan oldin tegishli AI kodlash vositalari ushbu kompyuterda ishlatilganiga ishonch hosil qiling, shunda mahalliy suhbat fayllari yoki ma’lumotlar bazalari mavjud bo‘ladi.
Birinchi ma’lumotlarni ajratib oling
Interaktiv ish jarayoni uchun asosiy skriptni argumentsiz ishga tushiring. U manbalarni tanlashingiz uchun raqamlangan menyuni ko‘rsatadi.
python extract.py
Barcha qo‘llab-quvvatlanadigan manbalarni so‘rovlarsiz ajratib olish uchun --all dan foydalaning.
python extract.py --all
Shuningdek, vergul bilan ajratilgan ro‘yxat yordamida muayyan manbalarni tanlashingiz mumkin. Manba identifikatorlari repositorydagi manbalar jadvalida yoki --list yordamida ko‘rsatiladi.
python extract.py --sources cursor,claude_code,aider
Hech qanday suhbatni ajratib olmasdan, qaysi o‘rnatishlar aniqlanganini ko‘rish uchun quyidagini ishga tushiring:
python extract.py --list
Qo‘shilgan shell yorlig‘i mavjud tizimlarda barcha manbalardan ma’lumot ajratib oladi:
./extract_all.sh
Chiqish va qidiruv yo‘llarini tanlash
Odatiy bo‘yicha vaqt tamg‘asi qo‘yilgan JSONL fayllari ./extracted_data katalogiga yoziladi. Boshqa manzilni tanlash uchun --output-dir dan foydalaning.
python extract.py --all --output-dir ./chat-backup
Ko‘pchilik vositalar ilova ma’lumotlari uchun oldindan ma’lum kataloglardan foydalanadi, shuning uchun extractor odatiy operatsion tizim joylashuvlarini avtomatik qidiradi. Aider bundan farq qiladi: u markaziy ilova ma’lumotlari katalogidan foydalanish o‘rniga har bir loyiha katalogida bitta Markdown transkriptini saqlaydi.
Loyihalaringiz yoki ilova ma’lumotlaringiz odatiy joylardan tashqarida bo‘lsa, bir yoki bir nechta --search-path opsiyasidan foydalaning.
python extract.py --sources aider \
--search-path ~/client-work \
--search-path /mnt/data/repos
Qo‘shimcha qidiruv yo‘llari boshqa qo‘llab-quvvatlanadigan vositalarning nostandart o‘rnatishlari uchun ham foydalidir.
Suhbatlarni bitta faylga birlashtirish
Odatda har bir tanlangan manba uchun alohida vaqt tamg‘asi qo‘yilgan chiqish fayli yaratiladi. Ajratib olingan barcha suhbatlarni all_conversations.jsonl fayliga qo‘shish uchun --merge ni ham qo‘shing.
python extract.py --all --merge
Odatdagi chiqish katalogida quyidagiga o‘xshash fayllar bo‘lishi mumkin:
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
Standartlashtirilgan formatni tushunish
Chiqish faylidagi har bir satr bitta suhbatni ifodalaydi. Umumiy tuzilma messages massivi, source identifikatori va session_id ni o‘z ichiga oladi. Boshqa maydonlar dastlabki vosita nimalarni yozib olganiga bog‘liq.
{
"messages": [
{
"role": "user",
"content": "Bu TypeScript xatosini qanday tuzataman?",
"code_context": [
{
"file": "/Users/you/project/index.ts",
"code": "const x: string = 123;"
}
],
"timestamp": "2026-01-16T14:30:22Z"
},
{
"role": "assistant",
"content": "Xato son string turiga tayinlangani sababli yuzaga kelmoqda.",
"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 turidagi xatoni tuzatish",
"created_at": 1705414222000
}
code_context, token sarfi, loyiha yo‘llari, vaqt tamg‘alari, vosita chaqiruvlari va diff kabi maydonlar manba ularni saqlagan bo‘lsa, kiritiladi. Doimiy ravishda tayanishingiz mumkin bo‘lgan maydonlar messages, source va session_id dir.
Ajratib olish qanday ishlaydi
- Dastur operatsion tizimini aniqlaydi va maʼlumotlarning ehtimoliy ildiz kataloglari roʻyxatini tuzadi. Bunga
Application Support,.config,.local/share,%APPDATA%va%LOCALAPPDATA%kabi joylar kiradi. - Har bir manba ushbu ildiz kataloglardan oʻziga maʼlum papka va fayl nomlarini qidiradi.
- Tegishli oʻquvchi JSONL, JSON, SQLite, Markdown yoki ichma-ich JSON xotirasini yuklaydi.
- Ekstraktor topilgan yozuvlarni umumiy xabar sxemasiga moslashtiradi.
- Vaqt tamgʻasi qoʻyilgan JSONL fayllari chiqish katalogiga yoziladi.
SQLite maʼlumotlar bazalari faqat oʻqish rejimida ochiladi, bu ishlayotgan muharrirni bloklamaslikka yordam beradi. Oʻquvchilar ham alohida izolyatsiya qilingan, shuning uchun buzilgan yoki bloklangan fayl butun ekstraksiyani toʻxtatish oʻrniga qisman natijalar hosil qiladi.
Hujjatlashtirilmagan xotira formatlarini qayta ishlash
Cursor, Windsurf va Trae barqaror xotira sxemalarini eʼlon qilmaydi. Cursor ekstraktori bir nechta maʼlum tuzilmalarni, jumladan workspace ItemTable chatini, ichki composer maʼlumotlarini va alohida bubbleId composer maʼlumotlarini aniq qayta ishlaydi.
Windsurf va Trae extractors/common.py faylida umumiy evristikadan foydalanadi. U chatga oid kalitlarni qidiradi va tahlil qilingan JSON boʻylab yurib, rol va matn juftliklaridan iborat xabarlarga oʻxshash obyektlarni izlaydi. Bu ataylab taxminiy yondashuvdir. Kelajakdagi ilova yangilanishi xotira tuzilmasini oʻzgartirsa, tegishli KEY_HINTS qiymatlarini yangilash kerak boʻlishi mumkin.
Chiqish maʼlumotlaridan oʻqitish uchun foydalanish
Normallashtirilgan JSONL fayllarini Hugging Face datasets kutubxonasi yordamida yuklash mumkin. Quyidagi misol barcha ajratib olingan fayllarni yuklaydi, yordamchi xabarlari mavjud suhbatlarni saqlab qoladi va ularni tokenizerning chat shabloni bilan formatlaydi.
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)
Yozuvlarni modelingiz talablariga muvofiq qoʻshimcha tekshiring va oʻzgartiring. Turli manbalarda turli ixtiyoriy maydonlar boʻlishi mumkin, shuning uchun oʻqitish konveyerlari asosan umumiy xabar tuzilmasiga tayanishi kerak.
Ekstraktorga yangi manba qoʻshish
Har bir manba ekstraktori ikki funksiyadan iborat kichik interfeysga amal qiladi. continue_ext.py faylidan nusxa olish oddiy boshlangʻich nuqtani beradi.
DISPLAY_NAME = "My Tool"
SOURCE_ID = "my_tool"
def find_installations(extra_paths: list[Path] | None = None) -> list[Path]:
"""Skanerlashga arziydigan katalog yoki fayllarni qaytaradi."""
def extract(installations: list[Path]) -> list[dict]:
"""Normallashtirilgan suhbat lugʻatlarini qaytaradi."""
Modul yaratilgach, uni extract.py faylidagi REGISTRY roʻyxatiga qoʻshing. Umumiy oʻquvchilar va evristikalar extractors/common.py faylida mavjud.
Maxfiy suhbat maʼlumotlarini himoyalash
Mahalliy chat tarixlarida API kalitlari, mulkiy kod, shaxsiy yoʻllar, mijoz maʼlumotlari va vosita kiritmalari boʻlishi mumkin. Ajratib olingan fayllarni ulashish yoki oʻqitishda ishlatishdan oldin tekshiring.
- Chiqish maʼlumotlaridan maxfiy maʼlumotlarni qidiring.
code_contextvatool_usemaydonlarini diqqat bilan tekshiring.extracted_data/katalogini ommaviy repozitoriyga yubormang.- Maxfiy zaxira nusxalarini shifrlangan xotirada saqlang.
pip install detect-secrets --break-system-packages
detect-secrets scan extracted_data/*.jsonl
Loyiha extracted_data/ katalogini .gitignore fayliga qoʻshadi, ammo biror narsani eʼlon qilishdan oldin repozitoriy va zaxiralash amaliyotlaringizni baribir tekshirishingiz kerak.
Muammolarni bartaraf etish
Oʻrnatilgan dastur topilmadi
Vosita oʻrnatilmagan, unda saqlangan chat tarixi boʻlmasligi yoki nostandart joydan foydalanishi mumkin. Avval --list buyrugʻini ishga tushiring, soʻng tegishli katalogni --search-path orqali ko'rsating. Shuningdek, manba ekstraktoridagi SEARCH_DIRS yoki APP_DIR_NAMES konstantalarini tekshirishingiz mumkin.
Cursor yoki Windsurf maʼlumotlar bazasi bloklanganini bildiradi
Ekstraktorlar faqat oʻqish uchun SQLite ulanishlaridan foydalanadi, shuning uchun ishlayotgan ilova odatda ekstraksiyani bloklamaydi. Xatolar davom etsa, ilovani yoping va ekstraksiyani qayta ishga tushiring.
Windsurf yoki Trae hech qanday suhbat chiqarmayapti
Ilova katalogi --list orqali topilganini tasdiqlang. Agar topilgan boʻlsa-yu, lekin hech qanday chat ajratib olinmagan boʻlsa, tegishli state.vscdb kalitlarini tekshiring va mos andozalarni tegishli ekstraktordagi KEY_HINTS ga qoʻshing.
Xulosa
AI Coding Assistant Data Extraction koʻplab xotira formatlari va operatsion tizimlarda mahalliy kodlash suhbatlarini saqlash hamda normallashtirishning bogʻliqliklarsiz usulini taqdim etadi. python extract.py --list buyrugʻidan boshlang, kerakli manbalarni tanlang, yaratilgan JSONL fayllarini maxfiy maʼlumotlar bor-yoʻqligi uchun tekshiring, soʻng normallashtirilgan yozuvlardan zaxiralash, tahlil qilish yoki puxta tayyorlangan oʻqitish jarayonlarida foydalaning.
Ushbu vositalar toʻplami oʻz qurilmangizga oʻrnatilgan AI vositalari maʼlumotlari uchun moʻljallangan. Maʼlumotlarni ajratib olish huquqiga ega boʻlish, maxfiy maʼlumotlarni himoyalash, har bir vositaning shartlariga rioya qilish hamda natijalarni ulashish yoki ular asosida oʻqitishdan oldin maxfiy maʼlumotlarni tekshirish uchun siz javobgarsiz.
