Langkau ke kandungan

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.

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

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

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.

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

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.


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
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.


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. %pip juga mengosongkan sys.modules, jadi import seterusnya melihat apa yang baru dipasang.
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.


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.


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).