ŴÀŠḾ Éñĝîñé ÀƂÎ
Ţĥé ƃŕöŵšéŕ ƃüîļđ öƒ kapi (kapi/cmd/kapi-wasm-cli) ŕéĝîšţéŕš à šéţ öƒ ĝļöƃàļ
ĴŠ ƒüñçţîöñš àţ ƃööţ. Ţĥàţ šéţ îš à ṽéŕšîöñéđ çöñţŕàçţ, ţĥé ÀƂÎ çöñšüḿéđ ƃý
ţĥé @neokapi/engine ñþḿ þàçķàĝé (packages/engine), ŵĥîçĥ ŵŕàþš îţ îñ ţĥé
ţýþéđ KapiRuntime ƒàçàđé.
Çöñţŕàçţ
- Šîñĝļé ŕéĝîšţŕàţîöñ þöîñţ. Éṽéŕý éñţŕý þöîñţ îš đéçļàŕéđ îñ ţĥé
engineExportsţàƃļé îñkapi/cmd/kapi-wasm-cli/main.goàñđ îñšţàļļéđ öñglobalThisƒŕöḿ ţĥéŕé. Ñöţĥîñĝ éļšé ŕéĝîšţéŕš éñĝîñé ĝļöƃàļš. - Ƒéàţüŕé đéţéçţîöñ.
kapiEngineABI()ŕéţüŕñš{abi, version, functions}: ţĥé ÀƂÎ ḿàĵöŕ ṽéŕšîöñ, ţĥé kapi ƃüîļđ ṽéŕšîöñ, àñđ ţĥé ļîšţ öƒ ŕéĝîšţéŕéđ ĝļöƃàļ ñàḿéš. À ƃüîļđ ŵîţĥöüţkapiEngineABIþŕéđàţéš ţĥé đéšçŕîþţöŕ àñđ îš ţŕéàţéđ àš àƃî 0 (þŕöƃé îñđîṽîđüàļ ĝļöƃàļš). - Àđđîţîṽé ŵîţĥîñ à ṽéŕšîöñ. Ƒöŕ öñé
abiṽàļüé, çĥàñĝéš àŕé šţŕîçţļý àđđîţîṽé: ñéŵ ƒüñçţîöñš ḿàý àþþéàŕ îñfunctions, ƃüţ éẋîšţîñĝ ñàḿéš, šîĝñàţüŕéš, àñđ þàýļöàđ šĥàþéš ñéṽéŕ çĥàñĝé öŕ đîšàþþéàŕ. Ŕéñàḿîñĝ öŕ ŕéḿöṽîñĝ àñ éñţŕý þöîñţ, öŕ çĥàñĝîñĝ à šîĝñàţüŕé îñçöḿþàţîƃļý, ƃüḿþš ţĥé ṽéŕšîöñ. - Ƃööţ ĥàñđšĥàķé. Ţĥé ĥöšţ îñšţàļļš îţš
fs/processšĥîḿš (ţĥéwasm_exec.jséñṽîŕöñḿéñţ) ƃéƒöŕé îñšţàñţîàţîöñ; àƒţéŕ ŕéĝîšţéŕîñĝ ţĥé ĝļöƃàļš, ţĥé éñĝîñé îñṽöķéš ţĥé ĥöšţ'š__kapiCliReady()çàļļƃàçķ àñđ ţĥéñ ƃļöçķš ƒöŕéṽéŕ šö ţĥé ĝļöƃàļš šţàý çàļļàƃļé. - Ŕéṽéŕšé ƃŕîđĝéš. Šöḿé ƒéàţüŕéš çàļļ ƃàçķ îñţö öþţîöñàļ ĥöšţ-þŕöṽîđéđ
ĝļöƃàļš:
__kapiPdfium(ÞĐƑ ţéẋţ + ĝéöḿéţŕý),kapiLocalGenerate(öñ-đéṽîçé ĻĻḾ),kapiLocalNER(öñ-đéṽîçé ÑÉŔ), àñđkapiBrowserTranslate(ŵîţĥ ţĥé þļàţƒöŕḿTranslatorÀÞÎ). Éàçĥ đéĝŕàđéš ŵîţĥ àñ àçţîöñàƃļé éŕŕöŕ ŵĥéñ îţš ƃŕîđĝé îš àƃšéñţ. Ţĥé ţýþéđ îñţéŕƒàçéš ļîṽé îñpackages/engine/src/capabilities.ts.
Çöḿḿàñđ šüŕƒàçé
kapiRun(argv) éẋéçüţéš ţĥé öŕđîñàŕý kapi ÇĻÎ, šö ţĥé ƃŕöŵšéŕ ƃüîļđ ĥàš à
šéçöñđ çöñţŕàçţ àļöñĝšîđé ţĥé ĝļöƃàļ ƒüñçţîöñ šéţ: ŵĥîçĥ ṽéŕƃš îţ àñšŵéŕš.
- Öñé đéçļàŕàţîöñ.
cli.BrowserCommandSetîš ţĥé ƃŕöŵšéŕ ƃüîļđ'š çöḿḿàñđ šéţ, ḿîŕŕöŕîñĝcli.KapiCommandSet(ţĥé ñàţîṽé ƃîñàŕý'š) ṽéŕƃ ƒöŕ ṽéŕƃ.kapi/cmd/kapi-wasm-cliŕéĝîšţéŕš îţ ŵĥöļéšàļé àñđ đéçļàŕéš ñöţĥîñĝ îţšéļƒ. - Ñö ḿîššîñĝ ṽéŕƃš. À ṽéŕƃ ţĥé ƃŕöŵšéŕ çàññöţ ŕüñ (öñé ñééđîñĝ à
šüƃþŕöçéšš, ţĥé ÖŠ ķéýçĥàîñ, ţĥé ñéţŵöŕķ, öŕ à šöçķéţ) îš ŕéçöŕđéđ îñ
cli.browserGapsŵîţĥ ţĥé ƒàçîļîţý îţ ñééđš, àñđ ŕéĝîšţéŕš à çöḿḿàñđ ţĥàţ ŕéþöŕţš îţ.unknown commandţĥéŕéƒöŕé ḿéàñš ţĥé ṽéŕƃ đöéš ñöţ éẋîšţ îñ kapi àţ àļļ, ñéṽéŕ ţĥàţ ţĥé ƃŕöŵšéŕ öḿîţţéđ îţ.--helpšţîļļ ŵöŕķš öñ ţĥöšé ṽéŕƃš; ţĥéîŕ ĥéļþ ţéẋţ çàŕŕîéš ţĥé ļîḿîţàţîöñ. - Đŕîƒţ îš à ţéšţ ƒàîļüŕé.
cli.TestBrowserCommandSurfaceçöḿþàŕéš ţĥé ţŵö šéţš àñđ ƒàîļš ŵĥéñ à ṽéŕƃ àþþéàŕš îñ öñé àñđ ñöţ ţĥé öţĥéŕ, öŕ ŵĥéñ à ĝàþ'š ĥéļþ ḿéţàđàţà đŕîƒţš ƒŕöḿ ţĥé çöḿḿàñđ îţ šţàñđš îñ ƒöŕ. Àđđîñĝ à ṽéŕƃ ţöKapiCommandSetîš à đéçîšîöñ: ŵîŕé îţ üþ ƒöŕ ţĥé ƃŕöŵšéŕ, öŕ ŕéçöŕđ ŵĥý îţ çàññöţ ŕüñ ţĥéŕé. - Ŕüñţîḿé ĝüàŕđ.
make wasm-surface-smoke(scripts/verify-snippets/command-surface-smoke.ts) ƃööţš ţĥé ŕéàļ ŵàšḿ îñ Ñöđé, šŵééþš éṽéŕý ŕéàçĥàƃļé ṽéŕƃ ƒöŕunknown command, àššéŕţš éàçĥ ĝàþ'š ḿéššàĝé, àñđ ŕéþļàýš ţĥé àŕĝṽ ţĥé ļàƃ éẋþļöŕéŕš ţĥéḿšéļṽéš üšé. Îţ ŕüñš îñ ţĥé đöçš šñîþþéţ-ṽéŕîƒîçàţîöñ ŵöŕķƒļöŵ (docs-verify-snippets.yml). - Çàþţüŕé šţŕîþš ÀÑŠÎ. Ţĥé éñĝîñé ƃööţš ŵîţĥ
CLICOLOR_FORCE=1šö ţĥé þļàýĝŕöüñđ ţéŕḿîñàļ ŕéñđéŕš kapi'š ŕéàļ šţýļîñĝ;runCaptureĥàñđš öüţþüţ ţö þŕöĝŕàḿ çöđé îñšţéàđ, àñđ šţŕîþš ţĥé éšçàþéš šö à--jsonþàýļöàđ þàŕšéš.
Ţĥé šàḿé đéŕîṽàţîöñ ƒééđš ţĥé đöçš: scripts/gen-refs ŕéàđš
cli.BrowserUnavailableReason ƒöŕ éàçĥ çöḿḿàñđ'š ŕüññàƃļé-îñ-ƃŕöŵšéŕ ƃàđĝé, šö
ţĥé Çöḿḿàñđ Ŕéƒéŕéñçé çàññöţ çļàîḿ à ṽéŕƃ ŕüñš îñ ţĥé ļàƃ ŵĥéñ îţ đöéš ñöţ.
Ŵĥéŕé ţĥé þîéçéš ļîṽé
| Çöñçéŕñ | Ļöçàţîöñ |
|---|---|
Ŕéĝîšţŕàţîöñ ţàƃļé + kapiEngineABI() | kapi/cmd/kapi-wasm-cli/main.go |
| Ƃŕöŵšéŕ çöḿḿàñđ šéţ + ŕéçöŕđéđ ĝàþš | cli/browsercmds.go |
| Šüŕƒàçé đŕîƒţ ĝüàŕđ | cli/browsercmds_test.go |
| Ŕüñţîḿé šüŕƒàçé šḿöķé | scripts/verify-snippets/command-surface-smoke.ts |
| Àḿƃîéñţ ŢŠ ţýþîñĝš ƒöŕ ţĥé ĝļöƃàļš | packages/engine/src/globals.ts |
Ŵîŕé šĥàþéš + engineABI() ĥéļþéŕ | packages/engine/src/abi.ts |
KapiRuntime ƒàçàđé + ƃööţ | packages/engine/src/runtime.ts |
| Ŕéṽéŕšé-ƃŕîđĝé çàþàƃîļîţý ţýþéš | packages/engine/src/capabilities.ts |
| Þàýļöàđ ţýþéš (ÇöñţéñţŢŕéé, ŕüñš) | @neokapi/contract-types (ĝéñéŕàţéđ) |
Ŵĥéñ àđđîñĝ àñ éñţŕý þöîñţ: àđđ îţ ţö engineExports, ţýþé îţ îñ
globals.ts, šüŕƒàçé îţ öñ ţĥé ƒàçàđé îƒ üšéŕ-ƒàçîñĝ, àñđ ļéàṽé ţĥé abi
ṽàļüé àļöñé (àđđîţîöñš đöñ'ţ ƃüḿþ îţ).