Šķîþ ţö ḿàîñ çöñţéñţ

ŴÀŠḾ Éñĝîñé ÀƂÎ

Ţĥé ƃŕöŵšéŕ ƃüîļđ öƒ 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 ṽàļüé àļöñé (àđđîţîöñš đöñ'ţ ƃüḿþ îţ).