Runtime mandiri
Cara mesin Apothem berjalan dari checkout mana pun — dependensi yang di-vendor, model invokasi PYTHONPATH=src, dan bootstrap pohon plugin.
Runtime Mandiri
Mesin Apothem adalah runtime mandiri: mesin berjalan tanpa registri, langsung
dari checkout atau pohon sumber yang ditempatkan mana pun, karena dependensi
pihak ketiganya ikut terbawa bersamanya. Dua bagian membuat hal itu berfungsi —
pohon dependensi yang di-vendor dan model invokasi python -m yang tidak
memerlukan skrip konsol yang terpasang.
Pohon dependensi yang di-vendor
Tumpukan validasi dan serialisasi di-vendor sebagai sumber Python murni di
bawah src/apothem/_vendor/, setiap paket berdampingan dengan berkas lisensi
upstream-nya:
yaml(parser/emitter Python murni; ekstensi C libyaml yang opsional tidak dibawa)jsonschema, dengan rantai dependensinyaattrs(dan aliasattr-nya),referencing, danjsonschema_specificationsrpds— shim Python murni yang mengimplementasikan ulang permukaanHashTrieMap,HashTrieSet, danListyang digunakanjsonschemadanreferencing, ditopang oleh tipe bawaan, sehingga tumpukan berjalan dengan nol ekstensi terkompilasityping_extensions
Salinan yang di-vendor diutamakan di atas versi mana pun yang terpasang di
sistem: bootstrap plugin, shim npm, pemasang, dan entry point
python -m apothem itu sendiri masing-masing menempatkan direktori vendor di
sys.path mendahului site-packages. Kebijakan seleksi — apa yang di-vendor, apa
yang tidak, dan bagaimana paket yang di-vendor disegarkan — didokumentasikan
dalam strategi vendoring dependensi.
Dua dependensi tetap berada di luar pohon: click dan rich, pustaka
yang berhadapan dengan terminal yang diimpor CLI. Keduanya harus dapat diimpor
di bawah interpreter yang menjalankan mesin; pemasang memeriksa keduanya,
menyebutkan mana pun yang hilang, dan menawarkan untuk memasangnya untuk Anda —
dengan konfirmasi Anda, atau secara otomatis dengan --yes /
APOTHEM_AUTO_INSTALL_DEPS=1. Di setiap kanal lainnya, entry point memeriksa
keduanya dengan pustaka standar sebelum mengimpor CLI, dan dependensi yang
hilang menghentikannya dengan galat yang menyebutkan perintah pip yang persis
untuk interpreter yang sedang berjalan (amplop JSON dengan kode
runtime.dependency_missing di bawah --json).
Model invokasi python -m
Apothem dengan sengaja tidak mendeklarasikan skrip konsol di pyproject.toml —
skrip konsol hanya ada ketika manajer paket menempatkannya di PATH, dan
runtime mandiri tidak pernah mengasumsikan adanya manajer paket. Sebagai
gantinya, mesin memiliki dua permukaan invokasi:
| Permukaan | Invokasi | Konteks |
|---|---|---|
| CLI mesin | python -m apothem <command> | Pohon sumber dengan src/ di PYTHONPATH (checkout, cache npx, pohon plugin) |
| Runtime hook | <resolved CPython> "<harness-root>/.apothem/support/hooks/dispatch.py" <event> | Materialisasi Claude Code: salinan di bawah pohon .apothem/support/ bersama milik akar harness, melalui jalur absolut |
python -m apothemmenjalankansrc/apothem/__main__.py, yang menempatkansrc/apothem/_vendordisys.path, memeriksa bahwaclickdanrichdapat diimpor, lalu memanggilapothem.cli:main— grup command Click.- Entri hook dalam
settings.json/hooks.jsonyang termaterialisasi memanggil dispatcher (dan, untuk Claude Code, gerbang konformitas di<harness-root>/.apothem/support/conformity/gate.py) melalui jalur skrip absolut. Keduanya adalah skrip stdlib mandiri yang mem-bootstrapsys.pathmiliknya sendiri, dan fixture skema milik gerbang ikut berada di sampingnya di<harness-root>/.apothem/support/schemas/, sehingga hook berjalan tanpa paketapothemyang dapat diimpor di host. Templat membawa token${HARNESS_ROOT}yang direnderapothem installmenjadi jalur akar harness yang sebenarnya dalam bentuk garis miring maju. - Dari checkout sumber, bentuk modul
python -m apothem.hooks.dispatchdanpython -m apothem.conformity.gatemenjalankan kode yang sama untuk pengembangan.
Direktori paket menjadi dapat diimpor dengan menambahkan direktori src/ milik
checkout di awal PYTHONPATH:
PYTHONPATH="$HOME/.apothem/src" python -m apothem <command>Ketika peluncur apothem tidak ada di PATH, install.sh mencetak bentuk ini saat selesai, dengan direktori vendor diletakkan di depan src/ dan CPython yang di-resolve-nya menggantikan python. install.ps1 mencetak dua pengaturan yang sama dalam bentuk PowerShell: penugasan $env:PYTHONPATH yang menggabungkan direktori vendor dan src/ dengan ;, lalu & '<CPython>' -m apothem <command>.
Bootstrap pohon plugin
Plugin Claude Code membundel mesin di bawah <plugin_root>/lib/apothem
alih-alih bergantung pada PYTHONPATH. Modul bootstrap
apothem.lib.plugin_bootstrap mengekspos bootstrap_syspath, yang secara
idempoten menambahkan <plugin_root>/lib dan direktori vendor di awal
sys.path sehingga import apothem dan setiap dependensi yang di-vendor
di-resolve dari pohon plugin. Pohon yang cacat (tanpa lib/) memunculkan
PluginBootstrapError alih-alih diam-diam mengimpor salinan sistem yang usang.
Apa yang ditempatkan pemasang di disk
Pemasang skrip menempatkan klon git dari pohon sumber di ~/.apothem
(dapat ditimpa dengan APOTHEM_HOME) dan menjalankan mesin darinya — tidak ada
paket Python yang dipasang ke site-packages di luar tawaran prasyarat
opsional click / rich. Klon tersebut adalah repositori lengkap, termasuk
suite pengujian dan situs dokumentasi yang tidak pernah diimpor runtime, karena
dua alasan yang disengaja: mesin mematerialisasikan kohornya — aturan,
skill, command, dan templat — langsung dari pohon ke setiap harness, sehingga
pohon tersebut adalah sumber kebenaran yang hidup, bukan hanya sebuah runtime;
dan direktori .git tetap di tempatnya sehingga apothem update melakukan
checkout tag rilis di klon yang ada alih-alih mengunduh ulang.
Tata letak jalankan-dari-sumber ini adalah pola yang sama dengan yang digunakan
alat seperti nvm, pyenv, dan oh-my-zsh — beberapa megabita sumber
ditambah riwayat, yang dapat dihapus dalam satu langkah dengan pencopot pasang
(tidak ada keadaan sistem yang perlu dibatalkan). Jejak yang lebih ramping —
checkout dangkal atau jarang (sparse) yang menghilangkan tests/ dan site/ —
dimungkinkan, tetapi akan mengorbankan jalur pembaruan berbasis git yang
di tempat dan terverifikasi tanda tangan; tata letak saat ini mengutamakan
pembaruan yang sederhana dan dapat diverifikasi di atas penggunaan disk yang
minimal.
Cara runtime menemukan Python
Pemasang sekali-jalan dan shim npx memeriksa nama yang berbeda dan menerapkan
aturan yang sama. Pemasang memeriksa python3, python, dan nama-nama berversi
(python3.14 hingga python3.10). Shim npx memeriksa APOTHEM_PYTHON bila
variabel itu ditetapkan, lalu python3, python, dan py -3; shim itu tidak
memiliki nama berversi. Keduanya menolak shim peluncur Microsoft Store dan
menerima kandidat pertama yang melaporkan versi 3.10 atau yang lebih baru.
Ketika dijalankan dari pohon sumber, pemasang menggunakan ulang pelokasi
hooks/lib/find-python yang terbundel, yang menerapkan batas bawah yang sama.
Langkah Berikutnya yang Direkomendasikan
Jalankan python -m apothem --help dengan direktori src/ milik checkout
di PYTHONPATH untuk memastikan jalur CLI mandiri ter-resolve di host Anda.
Alur kerja instalasi
Bagaimana apothem install, update, dan uninstall bekerja secara menyeluruh.
Strategi internalisasi dependensi
Paket pihak ketiga mana yang diinternalkan Apothem di bawah src/apothem/_vendor/, mana yang tetap menjadi prasyarat sistem, dan bagaimana salinan yang diinternalkan disegarkan.