Alat ejen terbina
Ini ialah alat terikat pelayan yang didaftarkan secara langsung oleh masa jalan ejen terbina — pelayan bahasa, carian struktur, nyahpepijat, kernel, soalan dan kawalan pekerja — berbanding alat MCP yang dijambatkannya masuk serta alat fail, carian dan shell generik daripada masa jalan harness. Alat-alat ini tiada dalam daftar MCP: klien MCP luaran tidak akan melihatnya, kerana setiap satunya terikat pada sumber sisi pelayan yang hidup — proses pelayan bahasa, penyesuai nyahpepijat, penterjemah — yang dimiliki oleh satu larian.
Setiap alat di sini didaftarkan hanya apabila sumber sokongannya disambungkan untuk larian itu — penyelia pelayan bahasa atau nyahpepijat, penghurai tree-sitter, kilang kernel, port soalan, senarai pekerja vibe. Pengesanan pelayan bahasa atau penyesuai nyahpepijat bagi checkout ini ialah pemeriksaan berasingan yang kemudian (status / adapters): alat itu kekal di permukaan supaya ejen boleh bertanya mengapa tiada apa yang boleh digunakan, dan bukannya meneka.
Tahap kelulusan
Bahagian bertajuk “Tahap kelulusan”Setiap alat menyatakan satu tahap, dan tahap itu menentukan permukaan mana yang melihatnya — bukan sekadar sama ada ia menggesa. Modus pelan dan subejen baca sahaja dihadkan pada read, jadi alat bertahap write atau exec langsung tidak ada dalam skema mereka.
| Tahap | Maksud | Alat di sini |
|---|---|---|
read |
Tiada kesan sampingan | lsp, ast_grep, ask_user, kelima-lima vibe_* |
write |
Mengubah fail | lsp_rename, ast_edit, resolve |
exec |
Memulakan atau mengawal satu proses | debug, eval |
lsp — pertanyaan pelayan bahasa
Bahagian bertajuk “lsp — pertanyaan pelayan bahasa”Didaftarkan apabila larian itu mempunyai penyelia pelayan bahasa dan direktori kerja. Sama ada pelayan benar-benar boleh menjawab dikesan pada masa panggilan, sebagai satu persilangan: penanda akar mesti wujud dan binari pelayan mesti dapat diselesaikan. Salah satu sahaja bermakna tiada pelayan dimulakan — status menyatakannya — dan bukannya tekaan senyap.
Kedudukan dialamatkan melalui line serta subrentetan symbol, tidak sekali-kali melalui lajur. Model yang diminta memberikan lajur akan meneka, dan tekaan yang salah akan menyelesaikan kepada simbol yang berbeza pada baris yang sama — jawapan yang kelihatan betul tetapi mengenai perkara lain. Meninggalkan symbol pada tindakan navigasi ialah satu ralat, bukan tekaan lajur pertama.
| Tindakan | Argumen | Memulangkan |
|---|---|---|
diagnostics |
file (atau "*") |
Ralat dan amaran; "*" menjalankan pemeriksa projek dan bukannya |
definition |
file, line, symbol |
Di mana simbol itu diisytiharkan |
type_definition |
file, line, symbol |
Di mana jenisnya diisytiharkan |
implementation |
file, line, symbol |
Implementasi konkrit |
references |
file, line, symbol |
Setiap penggunaan, dihadkan pada 50 |
hover |
file, line, symbol |
Tandatangan dan komen doc |
symbols |
query atau file |
Carian ruang kerja dengan query (dihadkan pada 100); simbol dokumen dengan file (dihadkan pada 200) |
code_actions |
file, line, symbol |
Pembetulan pantas yang ditawarkan pelayan |
status |
— | Pelayan mana yang sedang berjalan, dan untuk akar yang mana |
reload |
— | Memulakan semula pelayan untuk akar ini |
Diagnostik semasa menulis
Bahagian bertajuk “Diagnostik semasa menulis”Yang berbaloi bukan alat itu. write, edit dan apply_patch dibalut: selepas penulisan, fail itu disegerakkan dan disimpan melalui pelayan bahasa, dan hanya diagnostik yang baru diperkenalkan dilipat masuk ke dalam hasil alat. Ejen tahu ia telah memecahkan binaan pada saat ia memecahkannya, tanpa perlu terfikir untuk bertanya.
Diagnostik yang telah dilaporkan disekat oleh lejar setiap larian yang berkunci pada keterukan, kod dan mesej — kedudukan sengaja dikecualikan, jadi diagnostik yang hanya berpindah turun empat baris tidak dilaporkan semula sebagai baharu.
lsp_rename — penamaan semula seluruh projek
Bahagian bertajuk “lsp_rename — penamaan semula seluruh projek”Alat berasingan bertahap write atas satu sebab yang tepat: tahap itu menentukan keterlihatan. Memasukkan penamaan semula ke dalam lsp sama ada akan memberikan penjelajah baca sahaja keupayaan menulis semula repo, atau meletakkan setiap hover di sebalik gesaan kelulusan.
| Argumen | Maksud |
|---|---|
file |
Di mana simbol itu berada |
line |
Baris berindeks 1 |
symbol |
Subrentetan yang mengenal pastinya pada baris itu |
new_name |
Apa hendak dinamakannya |
ast_grep — carian struktur
Bahagian bertajuk “ast_grep — carian struktur”Mencari kod mengikut bentuk dan bukan mengikut teks. $NAME memadankan mana-mana nod, $$$NAME memadankan satu jujukan bersaudara, dan $_ ialah kad bebas yang tidak mengikat apa-apa.
Sifat yang menjadikannya pemadan dan bukan satu regex dengan beberapa langkah tambahan: metapembolehubah yang berulang dalam satu corak mesti menangkap teks yang sama.
ast_grep(pattern: "if ($X != null) $X.dispose()", language: "dart")memadankan satu pengawal yang melupuskan apa yang diujinya, dan tidak memadankan pengawal yang melupuskan benda lain.
| Argumen | Maksud |
|---|---|
pattern |
Serpihan kod dengan metapembolehubah |
path |
Fail atau direktori untuk dicari; lalainya seluruh ruang kerja |
language |
Id tatabahasa yang disertakan (dart, python, rust, c, …). Diinferensikan apabila path menamakan satu fail |
max_results |
Lalai 50 |
ast_edit — penulisan semula struktur, diperingkatkan
Bahagian bertajuk “ast_edit — penulisan semula struktur, diperingkatkan”Padanan yang sama, ditambah templat rewrite dengan metapembolehubah disubstitusikan semula. Tiada apa-apa ditulis. Perubahan itu diperingkatkan dan hasilnya menamakan satu edit_id.
ast_edit(pattern: "dispose($X)", rewrite: "$X.dispose()", language: "dart")→ (proposed) 12 replacements in 4 files … call resolve with edit_id "edit_1"| Argumen | Maksud |
|---|---|
pattern |
Apa yang hendak dipadankan |
rewrite |
Apa yang hendak diletakkan di situ, dengan $NAME disubstitusikan |
path |
Skop; lalainya seluruh ruang kerja |
language |
Id bahasa |
resolve — komit atau buang perubahan yang diperingkatkan
Bahagian bertajuk “resolve — komit atau buang perubahan yang diperingkatkan”| Argumen | Maksud |
|---|---|
edit_id |
Daripada hasil (proposed) |
action |
accept atau discard |
Setiap fail dibandingkan dengan kandungan yang ditangkap pada masa ia diperingkatkan, dan sebarang ketakpadanan menolak keseluruhan perubahan itu. Penulisan semula struktur yang hanya sebahagian diterapkan meninggalkan pokok yang tidak dapat dikompil di bawah bentuk lama mahupun bentuk baharu.
debug — memandu penyahpepijat
Bahagian bertajuk “debug — memandu penyahpepijat”Didaftarkan apabila larian itu mempunyai penyelia sesi nyahpepijat, direktori kerja dan id perbualan. Sama ada penyesuai benar-benar boleh bermula dikesan pada masa panggilan, melalui peraturan persilangan yang sama seperti pelayan bahasa (penanda akar dan binari). Tahap exec; tidak selamat selari (sesi ialah keadaan merentasi panggilan, jadi continue yang memintas stack akan membaca bingkai yang sudahpun bergerak).
Satu sesi bagi setiap perbualan, dengan TTL keras (30 minit). launch kedua ditolak dan bukan secara senyap menggantikan yang pertama.
| Op | Argumen | Nota |
|---|---|---|
adapters |
— | Penyesuai mana yang boleh digunakan di sini, dan mengapa tidak |
status |
— | Sama ada sesi sedang berjalan, dan di mana ia berhenti |
breakpoints |
file, lines[] |
lines kosong mengosongkan fail itu. Boleh ditetapkan sebelum melancarkan |
launch |
program, args[] |
Memulakan program dalam keadaan berhenti pada titik henti anda |
attach |
port |
Menyambung kepada proses yang dinyahpepijat yang sudah berjalan |
continue |
thread_id? |
Berjalan sehingga hentian seterusnya |
pause |
thread_id? |
Menghentikannya di tempat ia berada |
step_over / step_in / step_out |
thread_id? |
Bergerak satu langkah |
threads |
— | Id dan nama bebenang |
stack |
thread_id? |
Bingkai, dihadkan pada 30 |
scopes |
frame_id |
Skop pada satu bingkai, masing-masing dengan satu reference |
variables |
reference |
Anak, dihadkan pada 50, nilai dihadkan pada 400 aksara |
evaluate |
expression, frame_id? |
Dinilai dalam skop bingkai itu sendiri |
output |
— | stdout/stderr proses yang dinyahpepijat, terbatas |
terminate |
— | Menamatkan sesi dan membunuh penyesuai |
Penyesuai
Bahagian bertajuk “Penyesuai”| Id | Perintah | Penanda akar |
|---|---|---|
dart |
dart debug_adapter |
pubspec.yaml |
debugpy |
python3 -m debugpy.adapter |
pyproject.toml, setup.py, requirements.txt |
lldb |
lldb-dap |
Cargo.toml, CMakeLists.txt |
delve |
dlv dap |
go.mod |
debugpy mengutamakan .venv/bin atau venv/bin dalam projek berbanding $PATH: python $PATH ialah persekitaran yang berbeza, dan melampirkan daripada yang salah akan gagal dengan cara yang terbaca sebagai kod rosak.
eval — penterjemah berterusan
Bahagian bertajuk “eval — penterjemah berterusan”Sel Python atau JavaScript yang pemboleh ubah, import dan data yang dimuatkannya terus kekal antara panggilan. Tahap exec; tidak selamat selari.
| Argumen | Maksud |
|---|---|
code |
Sel itu |
description |
Wajib. 5–10 patah perkataan untuk label transkrip |
language |
python (lalai) atau javascript |
reset |
Buang penterjemah itu dan mulakan yang bersih dahulu |
- Ungkapan terakhir digaungkan seperti cara notebook melakukannya.
display()berfungsi, bingkai pandas dijadikan jadual, dan rajah matplotlib kembali sebagai imej yang dipaparkan oleh transkrip.- Idiom IPython yang orang taip secara refleks —
%pip,%cd,!cmd,%%bash,%%timeit— ditulis semula menjadi kod biasa.%pipjuga mengosongkansys.modules, jadiimportseterusnya melihat apa yang baru dipasang.
Memanggil alat anda sendiri dari dalam sel
Bahagian bertajuk “Memanggil alat anda sendiri dari dalam sel”contents = tool("read", {"path": "lib/auth.dart"})Jambatan itu masuk semula ke dalam daftar alat harness, jadi guardrail, kelulusan dan setiap pembalut terpakai tepat seperti pada panggilan yang dikeluarkan oleh model. Ia menunggang paip kernel sendiri dan bukan soket gelung balik: tiada port, tiada rahsia, tiada peraturan keluar.
Timeout sel itu ialah belanjawan ketakaktifan (lalai 5 minit) dan ia digantung selagi panggilan berjambatan belum selesai, jadi sel yang menyebar ke subejen tidak dibunuh di pertengahan penyebaran.
ask_user — bertanya soalan kepada manusia
Bahagian bertajuk “ask_user — bertanya soalan kepada manusia”Tahap read. Satu-satunya cara satu larian bertanya apa-apa kepada pengendali. Ia memaparkan kad bernombor dalam perbualan dan menyekat sehingga seseorang menjawab, melangkau, atau soalan itu tamat masa. Jangan sekali-kali menulis soalan itu sebagai mesej sembang — itu menamatkan pusingan.
| Argumen | Maksud |
|---|---|
question |
Apa yang hendak ditanya |
context |
Pilihan: mengapa anda bertanya dan apa yang bergantung pada jawapannya |
options[] |
Pilihan, setiap satu {label, description?} |
allow_free_text |
Sama ada jawapan yang ditaip diterima |
multi_select |
Sama ada beberapa pilihan boleh dipilih |
Melangkau ialah kejayaan: teruskan berdasarkan andaian yang dinyatakan dan jangan bertanya lagi. Tamat masa ialah ralat dengan arahan yang sama. Gesaan kebenaran (“bolehkah saya buat ini?”) ialah pintu berasingan dan dipaparkan sebagai kad yang sama dalam perbualan.
Didaftarkan hanya apabila kedua-dua port soalan dan ruang sasaran wujud. Tanpa manusia yang bersambung, panggilan itu gagal dan bukannya menyekat selama-lamanya — pendirian gagal tertutup yang sama yang diambil oleh prompt sesuatu guardrail apabila tiada pelulus bersambung.
vibe_* — mengarahkan pekerja latar belakang
Bahagian bertajuk “vibe_* — mengarahkan pekerja latar belakang”Didaftarkan hanya semasa modus vibe dihidupkan. Kelima-limanya bertahap read: pintu itu terletak pada alat pekerja, di tempat suntingan benar-benar berlaku.
| Alat | Argumen | Nota |
|---|---|---|
vibe_spawn |
brief, label, tier? |
Kembali serta-merta; pekerja itu terus berjalan |
vibe_send |
worker_id, message |
Menambahkan pada taklimat dan menjalankan semula |
vibe_wait |
worker_id, timeout_seconds? |
Menyekat sehingga ia selesai |
vibe_kill |
worker_id |
Menghentikannya |
vibe_list |
— | Tahap, status, masa berlalu dan hasil terakhir |
tier ialah fast (kerja mekanikal dengan spesifikasi yang jelas) atau good (reka bentuk, pertimbangan, atau menyemak output pekerja fast).