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

Ƒ-01: Ţĥé ƒŕàḿéŵöŕķ àñđ îţš ḿöđüļéš

Šüḿḿàŕý

neokapi îš àñ öþéñ çöñţéñţ éñĝîñé àñđ Ĝö ƒŕàḿéŵöŕķ, đîšţŕîƃüţéđ üñđéŕ Àþàçĥé-2.0. Îţ šĥîþš àš îñđéþéñđéñţ Ĝö ḿöđüļéš: ţĥé ƒŕàḿéŵöŕķ îţšéļƒ, ţĥé çöƃŕà-ƒŕéé ĥöšţ ŕüñţîḿé, ţĥé ţĥîñ Çöƃŕà šĥéļļ, ţĥé kapi ƃîñàŕý, ţĥé đéšķţöþ àþþ, àñđ öñé ḿöđüļé þéŕ öüţ-öƒ-þŕöçéšš þļüĝîñ. Ţĥé ƒîŕšţ ƒîṽé àŕé çööŕđîñàţéđ ƃý à go.work ƒîļé, ţöĝéţĥéŕ ŵîţĥ ţĥé ƃüîļđ-šüþþöŕţ ḿöđüļéš üñđéŕ scripts/ àñđ ţĥé šéþàŕàţéļý-ļîçéñšéđ ḿöđüļéš ţĥàţ ƃüîļđ öñ ţĥé ƒŕàḿéŵöŕķ; ţĥé þļüĝîñ ḿöđüļéš šîţ öüţšîđé îţ. Éṽéŕý ḿöđüļé đéçļàŕéš îţš öŵñ đéþéñđéñçý ƒööţþŕîñţ, àñđ à GOWORK=off ƃüîļđ öƒ éàçĥ ḿöđüļé þŕöṽéš ţĥé đéçļàŕàţîöñ îš ŕéàļ.

Çöñţéẋţ

Öñé çöđéƃàšé ĥàš ţö šéŕṽé šéṽéŕàļ đéþļöýḿéñţ ţàŕĝéţš: à šţàñđàļöñé ƒîļé-þŕöçéššîñĝ ÇĻÎ ƒöŕ éñĝîñééŕš, à ṽîšüàļ đéšķţöþ àþþ ƒöŕ çöñţéñţ àñđ ļàñĝüàĝé šþéçîàļîšţš, àñđ à ļîƃŕàŕý ţĥàţ ļàŕĝéŕ šýšţéḿš éḿƃéđ. Éàçĥ ţàŕĝéţ ĥàš à đéŕéñţ đéþéñđéñçý þŕöƒîļé (Ŵàîļš ƒöŕ ţĥé đéšķţöþ àþþ, ķéýçĥàîñ àççéšš ƒöŕ çŕéđéñţîàļš, ŠǪĻîţé ƒöŕ ļöçàļ šţöŕéš, ÖÑÑẊ ŕüñţîḿéš ƒöŕ ḾĻ þļüĝîñš), àñđ ƒöŕçîñĝ éṽéŕý ƃîñàŕý ţö ļîñķ éṽéŕý đéþéñđéñçý þŕöđüçéš šļöŵ ƃüîļđš àñđ ƃļöàţéđ àŕţîƒàçţš.

Ţĥé ƒŕàḿéŵöŕķ îš àļšö ţĥé Àþàçĥé-2.0 ƃàšé öƒ à ƃŕöàđéŕ éçöšýšţéḿ. Šéþàŕàţéļý-ļîçéñšéđ ļàýéŕš ƃüîļţ öñ ţöþ öƒ îţ ḿüšţ çöñšüḿé ƒŕàḿéŵöŕķ îñţéŕƒàçéš ŵîţĥöüţ þüšĥîñĝ ţĥéîŕ đéþéñđéñçîéš đöŵñ îñţö ţĥé ƒŕàḿéŵöŕķ. Ţĥàţ ƃöüñđàŕý îš éñƒöŕçéđ ƃý ţĥé ƃüîļđ ŕàţĥéŕ ţĥàñ ƃý çöñṽéñţîöñ.

Đéçîšîöñ

Îđéñţîţý

neokapi þŕöṽîđéš ƒöŕḿàţ-àŵàŕé đöçüḿéñţ þàŕšîñĝ îñţö öñé çöñţéñţ ḿöđéļ, à çĥàññéļ-ƃàšéđ çöñçüŕŕéñţ þŕöçéššîñĝ éñĝîñé, ƒàîţĥƒüļ ŵŕîţé-ƃàçķ, àñđ çöḿþöšàƃļé ţööļš ţĥàţ éđîţ, çĥéçķ, àñđ ţŕàñšļàţé ţĥé çöñţéñţ îñšîđé. Éṽéŕýţĥîñĝ îš à ļîƃŕàŕý àñđ à ţööļķîţ: îţ ŕüñš ñö šéŕṽéŕ àñđ ĥöļđš ñö àççöüñţš. Ţĥé ƒŕàḿéŵöŕķ îš ţĥé ṽéĥîçļé ƒöŕ öþéñ éẋţéñšîöñ îñ ƒöŕḿàţ šüþþöŕţ, þŕöçéššîñĝ ţööļš, àñđ ÀÎ îñţéĝŕàţîöñ.

Ţĥé éñĝîñé îš ţĥé ŕéüšàƃļé þŕöçéššîñĝ ļàýéŕ. kapi îš ţĥé þŕöĵéçţ ţööļ ţĥàţ ƃîñđš éẋîšţîñĝ ƒîļéš ţö àþþļîçàƃļé ţéŕḿš, ŵŕîţîñĝ ĝüîđàñçé àñđ çöñƒîĝüŕéđ çĥéçķš. Çöñţéẋţ ŕéšöļüţîöñ šüþþļîéš ţĥàţ ĝüîđàñçé àñđ îţš þŕöṽéñàñçé; îţ îš öñé þàŕţ öƒ ţĥé çöñţéñţ ŵöŕķƒļöŵ. À ĝŕàþĥ ŕéþŕéšéñţàţîöñ šüþþöŕţš ŕéļàţîöñšĥîþš àñđ šçöþéđ ŕéţŕîéṽàļ ŵîţĥöüţ ŕéǫüîŕîñĝ çöñšüḿéŕš ţö àđöþţ à ĝŕàþĥ đàţàƃàšé àš ţĥéîŕ þŕîḿàŕý îñţéŕƒàçé.

Ƒöŕḿàţ ƒîđéļîţý îš à þŕöþéŕţý öƒ à ŕéàđéŕ/ŵŕîţéŕ àñđ öþéŕàţîöñ, ñöţ à üñîṽéŕšàļ çļàîḿ àƃöüţ ţĥé éñĝîñé. Ñö-öþ ƃýţé þŕéšéŕṽàţîöñ, þŕéšéŕṽàţîöñ öüţšîđé éđîţéđ çöñţéñţ àñđ šéḿàñţîç ŕöüñđ-ţŕîþ éǫüîṽàļéñçé ĥàṽé šéþàŕàţé ţéšţš. Çĥéçķ ŕéšüļţš ļîķéŵîšé đîšţîñĝüîšĥ çöḿþļéţéđ àñàļýšîš ƒŕöḿ üñŕéǫüéšţéđ öŕ üñšüþþöŕţéđ àñàļýšîš. À šüççéššƒüļ çöñƒîĝüŕéđ ĝàţé îš ñöţ à ṽéŕđîçţ öñ éṽéŕý þŕöþéŕţý öƒ à đöçüḿéñţ.

Ƒîṽé đéšîĝñ þŕîñçîþļéš šĥàþé ţĥé ḿöđüļé ļàýöüţ:

  1. Šţŕéàḿîñĝ çöñçüŕŕéñçý. Đöçüḿéñţš ƒļöŵ ţĥŕöüĝĥ à þîþéļîñé öƒ çĥàññéļš; éàçĥ ţööļ ŕüñš îñ îţš öŵñ ĝöŕöüţîñé. Šéé É-01: Ţĥé þŕöçéššîñĝ éñĝîñé.
  2. Çöñţéñţ-àđđŕéššàƃļé ƃļöçķš. Üñîţš àŕé îđéñţîƒîéđ ƃý ĥàšĥéš öƒ ţĥéîŕ ñöŕḿàļîžéđ çöñţéñţ àñđ ţĥéîŕ çöñţéẋţ, éñàƃļîñĝ đéđüþļîçàţîöñ àçŕöšš šöüŕçéš àñđ îñçŕéḿéñţàļ þŕöçéššîñĝ. Šéé Ƒ-02: Ţĥé çöñţéñţ ḿöđéļ àñđ Ƒ-03: Îđéñţîţý.
  3. Þŕöĝŕéššîṽé çöḿþļéẋîţý. À šîñĝļé çöḿḿàñđ öñ đàý öñé, à ÝÀḾĻ ƒļöŵ öñ đàý ţŵö, àñ îñţéĝŕàţéđ þŕöĵéçţ öñ đàý ţéñ. Ţĥé šàḿé çöñţéñţ ḿöđéļ àñđ ţööļ çĥàîñ ŵöŕķ àţ éṽéŕý šçàļé.
  4. ÀÎ àš öŕđîñàŕý þîþéļîñé ţööļš. Ţŕàñšļàţîöñ, ṽéŕîƒîçàţîöñ, ţéŕḿ éẋţŕàçţîöñ, àñđ ŕéṽîéŵ ƃý ḿöđéļ àŕé ţööļš ţĥàţ þàŕţîçîþàţé îñ ţĥé šàḿé ƒļöŵ éẋéçüţîöñ ḿöđéļ àš ƒöŕḿàţ-àŵàŕé ţööļš.
  5. Šîñĝļé-ƃîñàŕý đîšţŕîƃüţîöñ. Ĝö çöḿþîļéš ţö šţàţîç ƃîñàŕîéš. Ţĥé šĥàŕéđ çöđéƃàšé þŕöđüçéš ţĥé kapi ÇĻÎ àñđ ţĥé đéšķţöþ àþþ ŵîţĥ ñö ĴṼḾ, ñö Ñöđé.ĵš ŕüñţîḿé, àñđ ñö çöñţàîñéŕ ŕéǫüîŕéđ ƒöŕ ƃàšîç üšàĝé.

Ţĥé ḿöđüļéš

ḾöđüļéÎḿþöŕţ þàţĥĐîŕéçţöŕýŔöļé
Ƒŕàḿéŵöŕķgithub.com/neokapi/neokapi.Çöñţéñţ ḿöđéļ, ƒöŕḿàţš, ţööļš, ƒļöŵš, ţĥé þļüĝîñ ḿàñîƒéšţ àñđ þŕöţöçöļ, çöñţéñţ ḿéḿöŕý, ţéŕḿš, ḿöđéļ þŕöṽîđéŕš
Ĥöšţgithub.com/neokapi/neokapi/hosthost/Çöƃŕà-ƒŕéé àþþļîçàţîöñ ŕüñţîḿé àñđ šéŕṽîçéš: àþþ çöñƒîĝ, çŕéđéñţîàļš, ţĥé þļüĝîñ ĥöšţ (đîšçöṽéŕý, îñšţàļļ, đîšþàţçĥ, đàéḿöñ þööļ), ƒļöŵ / çöñṽéŕĝéñçé / çĥéçķ šéŕṽîçéš
ÇĻÎgithub.com/neokapi/neokapi/clicli/Ţĥîñ Çöƃŕà šĥéļļ öṽéŕ ĥöšţ: çöḿḿàñđ ƒàçţöŕîéš, ƒļàĝ ŕéĝîšţŕàţîöñ, đîšþàţçĥ
Kapigithub.com/neokapi/neokapi/kapikapi/Ţĥé kapi ƃîñàŕý
Kapi Đéšķţöþgithub.com/neokapi/neokapi/kapi-desktopapps/kapi-desktop/Ŵàîļš ṽ3 đéšķţöþ àþþ
Þļüĝîñšgithub.com/neokapi/neokapi/plugins/<name>plugins/<name>/Öñé ḿöđüļé þéŕ öüţ-öƒ-þŕöçéšš þļüĝîñ ƃîñàŕý

Ţĥé đéþéñđéñçý ĝŕàþĥ îš šţŕîçţļý ĥîéŕàŕçĥîçàļ, àñđ ţĥé đéšķţöþ'š þöšîţîöñ îñ îţ îš ţĥé ŕéàšöñ ţĥé ŕüñţîḿé àñđ ţĥé çöḿḿàñđ šĥéļļ àŕé šéþàŕàţé ḿöđüļéš àţ àļļ:

frameworkcore/ · library onlyhostruntime + services · no cobrabuild on framework + hostkapiframework + host + clikapi-desktopframework + host · no cli, no cobra

kapi ƃüîļđš öñ ƒŕàḿéŵöŕķ + ĥöšţ + çļî; ţĥé đéšķţöþ àþþ ƃüîļđš öñ ƒŕàḿéŵöŕķ + ĥöšţ àñđ ļîñķš ñö Çöƃŕà. ÇÎ éñƒöŕçéš ƃöţĥ ƃöüñđàŕîéš.

Đéþéñđéñçý ŕüļéš

  • Ƒŕàḿéŵöŕķ îš ļîƃŕàŕý çöđé: ñö ÜÎ ţööļķîţ, ñö ĤŢŢÞ šéŕṽéŕ, ñö çöḿḿàñđ ƒŕàḿéŵöŕķ, ñö îđéñţîţý þŕöţöçöļ. Ñöţĥîñĝ ĥéŕé îḿþöŕţš Ŵàîļš, àñ ĤŢŢÞ šéŕṽéŕ ƒŕàḿéŵöŕķ, Çöƃŕà, Ṽîþéŕ, öŕ ÖÎĐÇ. Îţ đöéš ļîñķ ŠǪĻîţé àñđ ţĥé ÖŠ ķéýçĥàîñ, ƃéçàüšé ţĥé ļöçàļ šţöŕéš àñđ çŕéđéñţîàļ šţöŕàĝé àŕé ƒŕàḿéŵöŕķ çöñçéŕñš ŕàţĥéŕ ţĥàñ àþþļîçàţîöñ öñéš.
  • Ĥöšţ đéþéñđš öñļý öñ ţĥé ƒŕàḿéŵöŕķ, àñđ ḿüšţ ñöţ îḿþöŕţ Çöƃŕà. Çöḿḿàñđ ţĥŕéàđîñĝ îš ţĥé host.Command îñţéŕƒàçé (à çöñţéẋţ, à *pflag.FlagSet, àñđ ţĥé ţĥŕéé ÎÖ šţŕéàḿš), ŵĥîçĥ *cobra.Command šàţîéš ñàţîṽéļý. Éḿƃéđđéđ ŕüñš (ţĥé đéšķţöþ, ḾÇÞ ţööļš, îñţéŕñàļ öŕçĥéšţŕàţöŕš) þàšš à host.EnvCommand îñšţéàđ.
  • ÇĻÎ đéþéñđš öñ ƒŕàḿéŵöŕķ + ĥöšţ. Çöƃŕà ļîṽéš ĥéŕé àñđ ñöŵĥéŕé ƃéļöŵ.
  • Kapi đéþéñđš öñ ƒŕàḿéŵöŕķ + ĥöšţ + ÇĻÎ.
  • Kapi Đéšķţöþ đéþéñđš öñ ƒŕàḿéŵöŕķ + ĥöšţ, àñđ öñ ñéîţĥéŕ ţĥé çļî ḿöđüļé ñöŕ Çöƃŕà. Ŕéçîþé ṽöçàƃüļàŕý ƒöŕ àñ éẋţéñšîöñ ŕéàçĥéš îţ ţĥŕöüĝĥ ĥöšţ: à þàçķàĝé ţĥéŕé ŕéĝîšţéŕš ţĥé éẋţéñšîöñ'š ŕéçîþé ķéýš ŵîţĥ ţĥé ƒŕàḿéŵöŕķ'š þŕöĵéçţ ŕéĝîšţŕý, ŵĥîçĥ îš ĥöŵ ţĥé đéšķţöþ ŕéàđš à ŕéçîþé'š đéçļàŕéđ ŕüñ ṽéñüé ŵîţĥöüţ đéþéñđîñĝ öñ ţĥé éẋţéñšîöñ'š îḿþļéḿéñţàţîöñ. Ţĥé đéšķţöþ îš à šéþàŕàţé ḿöđüļé šö ţĥàţ Ŵàîļš ṽ3 šţàýš öüţ öƒ ţĥé ÇĻÎ ƃüîļđ.
  • Þļüĝîñ ḿöđüļéš đéþéñđ öñ ţĥé ƒŕàḿéŵöŕķ öñļý. Éàçĥ ƃüîļđš à šţàñđàļöñé ƃîñàŕý ţĥàţ kapi đîšçöṽéŕš àţ ŕüñţîḿé àñđ đîšþàţçĥéš àš à šüƃþŕöçéšš, šö ñö þļüĝîñ'š đéþéñđéñçîéš (ÖÑÑẊ ŕüñţîḿéš, çĝö ŕàšţéŕ ļîƃŕàŕîéš, ḿéđîà çöđéçš) ŕéàçĥ ţĥé þöŕţàƃļé kapi ƃîñàŕý. Šéé É-05: Ţĥé þļüĝîñ šýšţéḿ.

Ĥöŵ ţĥé ŕüļéš àŕé éñƒöŕçéđ

make audit-modules, ŕüñ ƃý make pre-push, ƃüîļđš éṽéŕý ŵöŕķšþàçé ḿöđüļé éẋçéþţ ţĥé ƃüîļđ-šüþþöŕţ öñéš ŵîţĥ GOWORK=off, šö éàçĥ ḿöđüļé ŕéšöļṽéš àĝàîñšţ îţš öŵñ go.mod ŕàţĥéŕ ţĥàñ ţĥé ŵöŕķšþàçé öṽéŕļàý ţĥàţ ŵöüļđ öţĥéŕŵîšé ĥîđé à ƃöüñđàŕý ṽîöļàţîöñ:

GOWORK=off go build ./... # framework
GOWORK=off bash -c "cd host && go build ./..." # host
GOWORK=off bash -c "cd cli && go build ./..." # cli
GOWORK=off bash -c "cd kapi && go build ./..." # kapi
GOWORK=off bash -c "cd apps/kapi-desktop && go build ./backend/..." # kapi-desktop

À šüççéššƒüļ GOWORK=off ƃüîļđ þŕöṽéš éṽéŕý çŕöšš-ḿöđüļé îḿþöŕţ îš à ŕéàļ đéþéñđéñçý đéçļàŕéđ îñ ţĥàţ ḿöđüļé'š go.mod. Ţĥé đéšķţöþ ƃüîļđ îš šçöþéđ ţö ./backend/... ƃéçàüšé ţĥé ḿöđüļé'š ţöþ-ļéṽéļ þàçķàĝé éḿƃéđš frontend/dist, ŵĥîçĥ đöéš ñöţ éẋîšţ üñţîļ ţĥé ƒŕöñţéñđ ĥàš ƃééñ ƃüîļţ; àñ üñšçöþéđ ./... ƒàîļš öñ ţĥé ḿîššîñĝ éḿƃéđ ƃéƒöŕé îţ éṽéŕ ţýþéçĥéçķš. go mod tidy šţîļļ ŕéšöļṽéš ţĥé ŵĥöļé ḿöđüļé ĝŕàþĥ (éḿƃéđš đö ñöţ àƒƒéçţ đéþéñđéñçý ŕéšöļüţîöñ), šö ţĥé ƃöüñđàŕý çöñţŕàçţ ĥöļđš.

Ţĥŕéé ƒüŕţĥéŕ àššéŕţîöñš ŕüñ öñ ţöþ öƒ ţĥé ƃüîļđš, àñđ ÇÎ ŕüñš ţĥéḿ öñ éṽéŕý çĥàñĝé ţĥŕöüĝĥ ţŵö ţàŕĝéţš: make check-module-boundaries (ţĥé module-boundaries ĵöƃ) çàŕŕîéš ţĥé îḿþöŕţ àššéŕţîöñš, àñđ make ci-tidy (ţĥé ţîđý-çĥéçķ ĵöƃ) çàŕŕîéš ţîđîñéšš.

  • go mod tidy ḿüšţ ƃé à ñö-öþ þéŕ ḿöđüļé. À šţàļé ŕéǫüîŕé, à ḿîššîñĝ öñé, öŕ à ŕéǫüîŕé ţĥàţ þüļļš îñ à ƒöŕƃîđđéñ ḿöđüļé àļļ ļéàṽé à đ.
  • Ţĥé đéšķţöþ ƃàçķéñđ'š ţŕàñšîţîṽé þàçķàĝé ļîšţ (go list -deps ./backend/...) ḿüšţ çöñţàîñ ñéîţĥéŕ Çöƃŕà ñöŕ ţĥé çļî ḿöđüļé. Ḿàţçĥîñĝ öñ þàçķàĝéš ŕàţĥéŕ ţĥàñ ḿöđüļéš ḿéàñš à ţŕàñšîţîṽé đéþéñđéñçý çàññöţ đöđĝé îţ.
  • Ñö Àþàçĥé-2.0 ḿöđüļé ḿàý ŕéàçĥ à þàçķàĝé üñđéŕ à šéþàŕàţéļý-ļîçéñšéđ ţŕéé. Ţĥéŕé îš ñö éẋçéþţîöñ, àñđ àđđîñĝ öñé îš ţĥé ƒàîļüŕé ḿöđé ţĥîš àššéŕţîöñ éẋîšţš ţö þŕéṽéñţ: à ţýþé ƃöţĥ šîđéš ñééđ ƃéļöñĝš ƃéļöŵ ţĥé ļîñé, ñöţ öñ àñ àļļöŵļîšţ àƃöṽé îţ.

Ţĥé þļüĝîñ ḿöđüļéš àŕé öüţšîđé go.work, ŵĥîçĥ ḿéàñš ñö ŵöŕķšþàçé ƃüîļđ ŵöüļđ ñöţîçé ţĥéḿ đŕîƒţîñĝ. make ci-tidy ţĥéŕéƒöŕé ţîđîéš ţĥéḿ àļöñĝšîđé ţĥé ŵöŕķšþàçé ḿöđüļéš, šö à ḿöđüļé ñö öŕđîñàŕý ĵöƃ ƃüîļđš šţîļļ çàññöţ ŕöţ.

Ļîçéñšé þöšţüŕé

Ţĥé ƒŕàḿéŵöŕķ àñđ éṽéŕý ƃîñàŕý ƃüîļţ ƒŕöḿ îţ (ƒŕàḿéŵöŕķ, ĥöšţ, çļî, kapi, kapi-desktop, àñđ ţĥé þļüĝîñ ḿöđüļéš üñđéŕ plugins/) àŕé Àþàçĥé-2.0 éñđ ţö éñđ àñđ îḿþöŕţ ñö çöđé ļîçéñšéđ öţĥéŕŵîšé. Šéþàŕàţéļý-ļîçéñšéđ ļàýéŕš àţţàçĥ ţĥŕöüĝĥ ţĥé éẋţéñšîöñ ḿéçĥàñîšḿ àñđ ţĥé þļüĝîñ ŕéĝîšţŕîéš: ţĥéý çöñšüḿé ƒŕàḿéŵöŕķ îñţéŕƒàçéš (çöñţéñţ ḿöđéļ, ţööļš, ƒļöŵš, ƒöŕḿàţš) àñđ àŕé đîšçöṽéŕéđ àţ ŕüñţîḿé àš šüƃþŕöçéššéš, ñéṽéŕ ļîñķéđ îñ. Ţĥé ĝŕàđîéñţ îš öñé-đîŕéçţîöñàļ, àñđ ƃéçàüšé îţ îš éẋþŕéššéđ àš îḿþöŕţ ţöþöļöĝý, àñ àççîđéñţàļ üþŵàŕđ éđĝé îš à ƃüîļđ ƒàîļüŕé ŕàţĥéŕ ţĥàñ à ŕéṽîéŵ ƒîñđîñĝ.

À šöüŕçé ƒîļé çàŕŕîéš ñö ļîçéñšé ĥéàđéŕ: îţš ļîçéñšé îš à ƒüñçţîöñ öƒ ţĥé ñéàŕéšţ LICENSE ƒîļé àƃöṽé îţ îñ ţĥé ţŕéé, àñđ öƒ ñöţĥîñĝ éļšé. Ţŵö ţĥîñĝš ƒöļļöŵ. Ḿöṽîñĝ à ƒîļé ƃéţŵééñ šüƃţŕééš îš ŕéļîçéñšîñĝ îţ, ŵîţĥ ñö ḿéţàđàţà ţö ķééþ îñ šţéþ. Àñđ ñöţĥîñĝ îñ à ƒîļé šàýš ŵĥàţ ļîçéñšé îţ îš üñđéŕ, šö ţĥé îḿþöŕţ àššéŕţîöñš àƃöṽé àŕé ţĥé öñļý ţĥîñĝ šţàñđîñĝ ƃéţŵééñ ţĥàţ þŕöþéŕţý àñđ àñ àççîđéñţ.

Ƒŕàḿéŵöŕķ þàçķàĝé ļàýöüţ

Ŵîţĥîñ ţĥé ƒŕàḿéŵöŕķ ḿöđüļé, þàçķàĝéš ĝŕöüþ ƃý ŕéšþöñšîƃîļîţý. Ţĥéšé àŕé ţĥé þŕîḿàŕý ĝŕöüþš ŕàţĥéŕ ţĥàñ àñ éẋĥàüšţîṽé ļîšţîñĝ; ţĥé šöüŕçé ţŕéé îš ţĥé àüţĥöŕîţàţîṽé šéţ:

core/
model/ Content model types (Part, Block, Layer, Run, Target, Overlay)
format/ DataFormatReader/Writer interfaces, detection, skeleton
tool/ Tool interface, BaseTool dispatch
flow/ Executor, Builder, flow definitions
registry/ Format and tool registries
engine/ Generic registry of named factories
formats/ Built-in format implementations
tools/ Built-in tools
ai/ Model-backed pipeline tools, prompts, NER
mt/ Translation-provider pipeline tools
plugin/ Plugin manifest types, protocol, protoconvert, conformance suite
proto/ Canonical content-model, engine, and sync protobuf schemas
blockstore/ Block-addressed, append-only overlay store
projectdb/ The project's local store handle
project/ Recipe file format and layout resolution
state/ Workflow-state model
convergence/ Convergence model over project state
gate/ Ship gates
check/ Deterministic and model-backed content verification
contextgraph/ Identity vocabulary of the context graph
occurrence/ Where a term is actually used
reconcile/ Matching a fresh read against the previous one
ref/ The composite freshness ref
venue/ Sync-wire conversion and the ref components a venue folds
segment/ Segmentation engines and masking
profile/ Voice-profile model
redaction/ Span redaction and restoration
structure/ Document-structure inference
structrec/ The universal structural record
projection/ Format-neutral render AST
editor/ Block index, content tree, preview generation
kbf/ Kapi Bundle Format block serialization
locale/ BCP-47 locale handling
id/ Short base62 ID generation
its/ W3C ITS metadata
vision/ asr/ av/ Framework seams for recognition and media
storage/ Shared SQLite infrastructure
safeio/ Resource-bounding parse primitives
memory/ Content memory (interface, in-memory, SQLite, matching)
terms/ Terms (interface, in-memory, SQLite, import/export)
kpz/ The .kpz project package: recipe sanitisation, packing
providers/
ai/ package aiprovider: model providers
mt/ package mtprovider: translation providers

Ŵöŕķšþàçé àñđ ṽéŕšîöñîñĝ

Ţĥé ŕööţ go.work ƒîļé çööŕđîñàţéš ļöçàļ đéṽéļöþḿéñţ àçŕöšš ţĥé ƒŕàḿéŵöŕķ, ĥöšţ, çļî, kapi, àñđ đéšķţöþ ḿöđüļéš, þļüš ƃüîļđ-šüþþöŕţ ḿöđüļéš üñđéŕ scripts/. Ŵîţĥ ţĥé ŵöŕķšþàçé àçţîṽé, à çĥàñĝé ţö ƒŕàḿéŵöŕķ çöđé îš ṽîšîƃļé ţö îţš çöñšüḿéŕš ŵîţĥöüţ þüƃļîšĥîñĝ. go mod tidy đöéš ñöţ ŕéšþéçţ go.work, šö éàçĥ çĥîļđ ḿöđüļé'š go.mod çàŕŕîéš à replace đîŕéçţîṽé þöîñţîñĝ àţ ţĥé þàŕéñţ ḿöđüļéš îţ đéþéñđš öñ.

Ţĥé ƒŕàḿéŵöŕķ ḿöđüļé îš ţàĝĝéđ ŵîţĥ ƒļàţ šéḿṽéŕ ţàĝš (vX.Y.Z). Ĥöšţ, çļî, kapi àñđ ţĥé đéšķţöþ àŕé ñéṽéŕ ţàĝĝéđ šéþàŕàţéļý: ţĥé ŵöŕķšþàçé ŕéļîéš öñ go.work þļüš replace đîŕéçţîṽéš ŕàţĥéŕ ţĥàñ þüƃļîšĥéđ þéŕ-ḿöđüļé ṽéŕšîöñš. Éàçĥ þļüĝîñ ḿöđüļé ŕéļéàšéš öñ îţš öŵñ þŕéƒîẋéđ ţàĝ (<plugin>-vX.Y.Z), ŵĥîçĥ đŕîṽéš ţĥàţ þļüĝîñ'š ŕéļéàšé ŵöŕķƒļöŵ (É-05). Àļļ ḿöđüļéš ţàŕĝéţ Ĝö 1.27 öŕ ļàţéŕ.

make help îš ţĥé àüţĥöŕîţàţîṽé çàţàļöĝ öƒ ƃüîļđ, ţéšţ, ṽéţ, àñđ ļîñţ ţàŕĝéţš; îţ îš šéļƒ-đöçüḿéñţîñĝ àñđ çüŕŕéñţ.

Çöñƒîĝüŕàţîöñ

Ļàýéŕéđ àþþļîçàţîöñ çöñƒîĝüŕàţîöñ ļîṽéš îñ host/config, ƃüîļţ öñ Ṽîþéŕ. Þŕéçéđéñçé, ĥîĝĥéšţ ƒîŕšţ:

  1. Çöḿḿàñđ ƒļàĝš: öñé-öƒƒ öṽéŕŕîđéš.
  2. Éñṽîŕöñḿéñţ ṽàŕîàƃļéš (KAPI_ þŕéƒîẋ, đöţš ŕéþļàçéđ ƃý üñđéŕšçöŕéš, šö plugins.directory ŕéàđš ƒŕöḿ KAPI_PLUGINS_DIRECTORY).
  3. Ţĥé ĝļöƃàļ çöñƒîĝ ƒîļé, þîññéđ ţö öñé þàţĥ ŕàţĥéŕ ţĥàñ ŕéšöļṽéđ ţĥŕöüĝĥ à šéàŕçĥ þàţĥ. kapi config path þŕîñţš ţĥé ŕéšöļṽéđ ļöçàţîöñ.
  4. Ļéĝàçý çöñƒîĝ ļöçàţîöñš ($HOME/.config/kapi/kapi.yaml, /etc/kapi/kapi.yaml), ḿéŕĝéđ üñđéŕñéàţĥ šö àñ éẋîšţîñĝ îñšţàļļàţîöñ ķééþš ŵöŕķîñĝ. Þŕéçéđéñçé ƃéţŵééñ ţĥéšé ļàýéŕš îš þéŕ ţöþ-ļéṽéļ ƃļöçķ, ñöţ þéŕ ļéàƒ.
  5. Çöđé đéƒàüļţš: žéŕö-çöñƒîĝ ƃéĥàṽîöŕ.

À þŕöĵéçţ ŕéçîþé îš ñöţ àñ àþþļîçàţîöñ-çöñƒîĝ ļàýéŕ. kapi.yaml îñ à ŵöŕķîñĝ đîŕéçţöŕý îš à ŕéçîþé đéšçŕîƃîñĝ ŵĥàţ ţö çöñṽéŕĝé, ŕéšöļṽéđ ƃý àñ üþŵàŕđ ŵàļķ ƒŕöḿ ţĥé çüŕŕéñţ đîŕéçţöŕý, àñđ îţ îš àƃšéñţ ƒŕöḿ ţĥé çöñƒîĝ šéàŕçĥ þàţĥ: ţĥé ţŵö šĥàŕé à ƒîļéñàḿé àñđ ñöţĥîñĝ éļšé. Šéé Ç-01: Ţĥé þŕöĵéçţ ḿöđéļ.

Ļöçàļé ĥàñđļîñĝ

model.LocaleID îš à string ţýþéđéƒ ĥöļđîñĝ ƂÇÞ-47 ţàĝš îñ çàñöñîçàļ ƒöŕḿ (en, fr, pt-BR). core/locale þŕöṽîđéš ṽàļîđàţîöñ, ñöŕḿàļîžàţîöñ, àñđ đîšþļàý-ñàḿé ŕéšöļüţîöñ:

func Canonical(s string) (model.LocaleID, error)
func CanonicalAll(in []model.LocaleID) ([]model.LocaleID, error)
func Parse(s string) (model.LocaleID, error)
func MustParse(s string) model.LocaleID
func DisplayName(id model.LocaleID) string
func WellKnownLocales() []LocaleInfo

Canonical îš ţĥé öñé ñöŕḿàļîžàţîöñ éṽéŕý ļöçàļé çŕöššéš öñ îţš ŵàý îñ. Îţ àççéþţš ŵĥàţ þéöþļé àñđ ƒîļé ƒöŕḿàţš ŵŕîţé (ÞÖŠÎẊ šéþàŕàţöŕš šüçĥ àš nb_NO, à çöđéšéţ öŕ ḿöđîƒîéŕ šüƒƒîẋ šüçĥ àš en_US.UTF-8, àñý çàšé) àñđ ŕéţüŕñš ţĥé çàñöñîçàļ ƂÇÞ-47 ƒöŕḿ; îţ ŕéĵéçţš à ţàĝ ŵĥöšé þŕîḿàŕý šüƃţàĝ ñàḿéš ñö ļàñĝüàĝé, àñđ ķééþš à ŵéļļ-ƒöŕḿéđ ţàĝ ŵĥöšé öţĥéŕ šüƃţàĝš ÇĻĐŔ đöéš ñöţ ķñöŵ (qps-Ploc) ŵĥöļé ŕàţĥéŕ ţĥàñ ţŕüñçàţîñĝ îţ. Parse îš šţŕîçţéŕ àƃöüţ ÇĻĐŔ ḿéḿƃéŕšĥîþ àñđ šéŕṽéš çöđé ţĥàţ àļŕéàđý ĥöļđš à çàñöñîçàļ ţàĝ. Ƃöţĥ đéļéĝàţé ţö golang.org/x/text/language ƒöŕ šüƃţàĝ þàŕšîñĝ, šçŕîþţ îñƒéŕéñçé, àñđ çàñöñîçàļîžàţîöñ. Ƒöŕḿàţ ŕéàđéŕš, çöñţéñţ-ḿéḿöŕý éñţŕîéš, ţéŕḿš, ŕéçîþé ƒîéļđš àñđ çöḿḿàñđ ƒļàĝš àļļ çàļļ Canonical àţ ţĥéîŕ ƃöüñđàŕîéš, šö àñ îñṽàļîđ çöđé ñéṽéŕ þŕöþàĝàţéš šîļéñţļý àñđ ţĥé ŕéšţ öƒ ţĥé šýšţéḿ çöḿþàŕéš ļöçàļéš àš þļàîñ šţŕîñĝš.

Çöñšéǫüéñçéš

  • Ţĥé kapi ƃîñàŕý ļîñķš ñö ÜÎ ţööļķîţ, ñö ĤŢŢÞ šéŕṽéŕ, àñđ ñö ḾĻ ŕüñţîḿé; îţ šţàýš šḿàļļ àñđ ƒàšţ ţö ƃüîļđ, àñđ ţĥé ĥéàṽý đéþéñđéñçîéš ļîṽé îñ þļüĝîñ ƃîñàŕîéš ţĥàţ àŕé öñļý šþàŵñéđ ŵĥéñ üšéđ.
  • Ţĥé ÇĻÎ ḿöđüļé éṽöļṽéš îñđéþéñđéñţļý öƒ îţš çöñšüḿéŕš: à çöḿḿàñđ-šĥéļļ çĥàñĝé đöéš ñöţ ƒöŕçé üñŕéļàţéđ ŕéƃüîļđš îñ kapi öŕ ţĥé đéšķţöþ àþþ.
  • À go.mod þéŕ ḿöđüļé îš ḿöŕé ƃööķķééþîñĝ ţĥàñ öñé ŵöüļđ ƃé, ƃüţ go.work ŕéšöļṽéš çŕöšš-ḿöđüļé îḿþöŕţš đüŕîñĝ đàîļý đéṽéļöþḿéñţ àñđ ţĥé ŕéļéàšé ŵöŕķƒļöŵ ĥàñđļéš ḿüļţî-ḿöđüļé ƃüîļđš.
  • Ţĥé ļîçéñšé ĝŕàđîéñţ îš éñƒöŕçéđ ƃý îḿþöŕţ ţöþöļöĝý ŕàţĥéŕ ţĥàñ ƃý çöñṽéñţîöñ, šö à ṽîöļàţîöñ îš à ƃüîļđ ƒàîļüŕé.
  • Ţĥé šĥàŕéđ ĥöšţ ŕüñţîḿé ļéţš ţĥé ÇĻÎ àñđ ţĥé đéšķţöþ éẋþöšé ţĥé šàḿé öþéŕàţîöñš ŵîţĥöüţ đüþļîçàţîñĝ çöḿḿàñđ ļöĝîç.
  • Ţĥé šàḿé çöñţéñţ ḿöđéļ àñđ ţööļ çĥàîñ šéŕṽé à šöļö đéṽéļöþéŕ ŕüññîñĝ öñé çöḿḿàñđ öñ ļöçàļ ƒîļéš àñđ à ţéàḿ đŕîṽîñĝ à ƒüļļ þŕöĵéçţ ţĥŕöüĝĥ ţĥé đéšķţöþ àþþ.

Šéé àļšö