Ƒ-01: Ţĥé ƒŕàḿéŵöŕķ àñđ îţš ḿöđüļéš
Šüḿḿàŕý
neokapi îš àñ öþéñ çöñţéñţ éñĝîñé àñđ Ĝö ƒŕàḿéŵöŕķ,
đîšţŕîƃüţéđ üñđéŕ Àþàçĥé-2.0. Îţ šĥîþš àš îñđéþéñđéñţ Ĝö ḿöđüļéš: ţĥé ƒŕàḿéŵöŕķ
îţšéļƒ, ţĥé çöƃŕà-ƒŕéé ĥöšţ ŕüñţîḿé, ţĥé ţĥîñ Çöƃŕà šĥéļļ, ţĥé kapi ƃîñàŕý, ţĥé
đéšķţöþ àþþ, àñđ öñé ḿöđüļé þéŕ öüţ-öƒ-þŕöçéšš þļüĝîñ. Ţĥé ƒîŕšţ ƒîṽé àŕé
çööŕđîñàţéđ ƃý à go.work ƒîļé, ţöĝéţĥéŕ ŵîţĥ ţĥé ƃüîļđ-šüþþöŕţ ḿöđüļéš üñđéŕ
scripts/ àñđ ţĥé šéþàŕàţéļý-ļîçéñšéđ ḿöđüļéš ţĥàţ ƃüîļđ öñ ţĥé ƒŕàḿéŵöŕķ; ţĥé
þļüĝîñ ḿöđüļéš šîţ öüţšîđé îţ. Éṽéŕý ḿöđüļé đéçļàŕéš îţš öŵñ đéþéñđéñçý
ƒööţþŕîñţ, àñđ à GOWORK=off ƃüîļđ öƒ éàçĥ ḿöđüļé þŕöṽéš ţĥé đéçļàŕàţîöñ îš
ŕéàļ.
Çöñţéẋţ
Öñé çöđéƃàšé ĥàš ţö šéŕṽé šéṽéŕàļ đéþļöýḿéñţ ţàŕĝéţš: à šţàñđàļöñé ƒîļé-þŕöçéššîñĝ ÇĻÎ ƒöŕ éñĝîñééŕš, à ṽîšüàļ đéšķţöþ àþþ ƒöŕ çöñţéñţ àñđ ļàñĝüàĝé šþéçîàļîšţš, àñđ à ļîƃŕàŕý ţĥàţ ļàŕĝéŕ šýšţéḿš éḿƃéđ. Éàçĥ ţàŕĝéţ ĥàš à đéŕéñţ đéþéñđéñçý þŕöƒîļé (Ŵàîļš ƒöŕ ţĥé đéšķţöþ àþþ, ķéýçĥàîñ àççéšš ƒöŕ çŕéđéñţîàļš, ŠǪĻîţé ƒöŕ ļöçàļ šţöŕéš, ÖÑÑẊ ŕüñţîḿéš ƒöŕ ḾĻ þļüĝîñš), àñđ ƒöŕçîñĝ éṽéŕý ƃîñàŕý ţö ļîñķ éṽéŕý đéþéñđéñçý þŕöđüçéš šļöŵ ƃüîļđš àñđ ƃļöàţéđ àŕţîƒàçţš.
Ţĥé ƒŕàḿéŵöŕķ îš àļšö ţĥé Àþàçĥé-2.0 ƃàšé öƒ à ƃŕöàđéŕ éçöšýšţéḿ. Šéþàŕàţéļý-ļîçéñšéđ ļàýéŕš ƃüîļţ öñ ţöþ öƒ îţ ḿüšţ çöñšüḿé ƒŕàḿéŵöŕķ îñţéŕƒàçéš ŵîţĥöüţ þüšĥîñĝ ţĥéîŕ đéþéñđéñçîéš đöŵñ îñţö ţĥé ƒŕàḿéŵöŕķ. Ţĥàţ ƃöüñđàŕý îš éñƒöŕçéđ ƃý ţĥé ƃüîļđ ŕàţĥéŕ ţĥàñ ƃý çöñṽéñţîöñ.
Đéçîšîöñ
Îđéñţîţý
neokapi þŕöṽîđéš ƒöŕḿàţ-àŵàŕé đöçüḿéñţ þàŕšîñĝ îñţö öñé çöñţéñţ ḿöđéļ, à çĥàññéļ-ƃàšéđ çöñçüŕŕéñţ þŕöçéššîñĝ éñĝîñé, ƒàîţĥƒüļ ŵŕîţé-ƃàçķ, àñđ çöḿþöšàƃļé ţööļš ţĥàţ éđîţ, çĥéçķ, àñđ ţŕàñšļàţé ţĥé çöñţéñţ îñšîđé. Éṽéŕýţĥîñĝ îš à ļîƃŕàŕý àñđ à ţööļķîţ: îţ ŕüñš ñö šéŕṽéŕ àñđ ĥöļđš ñö àççöüñţš. Ţĥé ƒŕàḿéŵöŕķ îš ţĥé ṽéĥîçļé ƒöŕ öþéñ éẋţéñšîöñ îñ ƒöŕḿàţ šüþþöŕţ, þŕöçéššîñĝ ţööļš, àñđ ÀÎ îñţéĝŕàţîöñ.
Ţĥé éñĝîñé îš ţĥé ŕéüšàƃļé þŕöçéššîñĝ ļàýéŕ. kapi îš ţĥé þŕöĵéçţ ţööļ ţĥàţ ƃîñđš éẋîšţîñĝ ƒîļéš ţö àþþļîçàƃļé ţéŕḿš, ŵŕîţîñĝ ĝüîđàñçé àñđ çöñƒîĝüŕéđ çĥéçķš. Çöñţéẋţ ŕéšöļüţîöñ šüþþļîéš ţĥàţ ĝüîđàñçé àñđ îţš þŕöṽéñàñçé; îţ îš öñé þàŕţ öƒ ţĥé çöñţéñţ ŵöŕķƒļöŵ. À ĝŕàþĥ ŕéþŕéšéñţàţîöñ šüþþöŕţš ŕéļàţîöñšĥîþš àñđ šçöþéđ ŕéţŕîéṽàļ ŵîţĥöüţ ŕéǫüîŕîñĝ çöñšüḿéŕš ţö àđöþţ à ĝŕàþĥ đàţàƃàšé àš ţĥéîŕ þŕîḿàŕý îñţéŕƒàçé.
Ƒöŕḿàţ ƒîđéļîţý îš à þŕöþéŕţý öƒ à ŕéàđéŕ/ŵŕîţéŕ àñđ öþéŕàţîöñ, ñöţ à üñîṽéŕšàļ çļàîḿ àƃöüţ ţĥé éñĝîñé. Ñö-öþ ƃýţé þŕéšéŕṽàţîöñ, þŕéšéŕṽàţîöñ öüţšîđé éđîţéđ çöñţéñţ àñđ šéḿàñţîç ŕöüñđ-ţŕîþ éǫüîṽàļéñçé ĥàṽé šéþàŕàţé ţéšţš. Çĥéçķ ŕéšüļţš ļîķéŵîšé đîšţîñĝüîšĥ çöḿþļéţéđ àñàļýšîš ƒŕöḿ üñŕéǫüéšţéđ öŕ üñšüþþöŕţéđ àñàļýšîš. À šüççéššƒüļ çöñƒîĝüŕéđ ĝàţé îš ñöţ à ṽéŕđîçţ öñ éṽéŕý þŕöþéŕţý öƒ à đöçüḿéñţ.
Ƒîṽé đéšîĝñ þŕîñçîþļéš šĥàþé ţĥé ḿöđüļé ļàýöüţ:
- Šţŕéàḿîñĝ çöñçüŕŕéñçý. Đöçüḿéñţš ƒļöŵ ţĥŕöüĝĥ à þîþéļîñé öƒ çĥàññéļš; éàçĥ ţööļ ŕüñš îñ îţš öŵñ ĝöŕöüţîñé. Šéé É-01: Ţĥé þŕöçéššîñĝ éñĝîñé.
- Çöñţéñţ-àđđŕéššàƃļé ƃļöçķš. Üñîţš àŕé îđéñţîƒîéđ ƃý ĥàšĥéš öƒ ţĥéîŕ ñöŕḿàļîžéđ çöñţéñţ àñđ ţĥéîŕ çöñţéẋţ, éñàƃļîñĝ đéđüþļîçàţîöñ àçŕöšš šöüŕçéš àñđ îñçŕéḿéñţàļ þŕöçéššîñĝ. Šéé Ƒ-02: Ţĥé çöñţéñţ ḿöđéļ àñđ Ƒ-03: Îđéñţîţý.
- Þŕöĝŕéššîṽé çöḿþļéẋîţý. À šîñĝļé çöḿḿàñđ öñ đàý öñé, à ÝÀḾĻ ƒļöŵ öñ đàý ţŵö, àñ îñţéĝŕàţéđ þŕöĵéçţ öñ đàý ţéñ. Ţĥé šàḿé çöñţéñţ ḿöđéļ àñđ ţööļ çĥàîñ ŵöŕķ àţ éṽéŕý šçàļé.
- ÀÎ àš öŕđîñàŕý þîþéļîñé ţööļš. Ţŕàñšļàţîöñ, ṽéŕîƒîçàţîöñ, ţéŕḿ éẋţŕàçţîöñ, àñđ ŕéṽîéŵ ƃý ḿöđéļ àŕé ţööļš ţĥàţ þàŕţîçîþàţé îñ ţĥé šàḿé ƒļöŵ éẋéçüţîöñ ḿöđéļ àš ƒöŕḿàţ-àŵàŕé ţööļš.
- Šîñĝļé-ƃîñàŕý đîšţŕîƃüţîöñ. Ĝö çöḿþîļéš ţö šţàţîç ƃîñàŕîéš. Ţĥé šĥàŕéđ
çöđéƃàšé þŕöđüçéš ţĥé
kapiÇĻÎ àñđ ţĥé đéšķţöþ àþþ ŵîţĥ ñö ĴṼḾ, ñö Ñöđé.ĵš ŕüñţîḿé, àñđ ñö çöñţàîñéŕ ŕéǫüîŕéđ ƒöŕ ƃàšîç üšàĝé.
Ţĥé ḿöđüļéš
| Ḿöđüļé | Îḿþöŕţ þàţĥ | Đîŕéçţöŕý | Ŕöļé |
|---|---|---|---|
| Ƒŕàḿéŵöŕķ | github.com/neokapi/neokapi | . | Çöñţéñţ ḿöđéļ, ƒöŕḿàţš, ţööļš, ƒļöŵš, ţĥé þļüĝîñ ḿàñîƒéšţ àñđ þŕöţöçöļ, çöñţéñţ ḿéḿöŕý, ţéŕḿš, ḿöđéļ þŕöṽîđéŕš |
| Ĥöšţ | github.com/neokapi/neokapi/host | host/ | Çöƃŕà-ƒŕéé àþþļîçàţîöñ ŕüñţîḿé àñđ šéŕṽîçéš: àþþ çöñƒîĝ, çŕéđéñţîàļš, ţĥé þļüĝîñ ĥöšţ (đîšçöṽéŕý, îñšţàļļ, đîšþàţçĥ, đàéḿöñ þööļ), ƒļöŵ / çöñṽéŕĝéñçé / çĥéçķ šéŕṽîçéš |
| ÇĻÎ | github.com/neokapi/neokapi/cli | cli/ | Ţĥîñ Çöƃŕà šĥéļļ öṽéŕ ĥöšţ: çöḿḿàñđ ƒàçţöŕîéš, ƒļàĝ ŕéĝîšţŕàţîöñ, đîšþàţçĥ |
| Kapi | github.com/neokapi/neokapi/kapi | kapi/ | Ţĥé kapi ƃîñàŕý |
| Kapi Đéšķţöþ | github.com/neokapi/neokapi/kapi-desktop | apps/kapi-desktop/ | Ŵàîļš ṽ3 đéšķţöþ àþþ |
| Þļüĝîñš | github.com/neokapi/neokapi/plugins/<name> | plugins/<name>/ | Öñé ḿöđüļé þéŕ öüţ-öƒ-þŕöçéšš þļüĝîñ ƃîñàŕý |
Ţĥé đéþéñđéñçý ĝŕàþĥ îš šţŕîçţļý ĥîéŕàŕçĥîçàļ, àñđ ţĥé đéšķţöþ'š þöšîţîöñ îñ îţ îš ţĥé ŕéàšöñ ţĥé ŕüñţîḿé àñđ ţĥé çöḿḿàñđ šĥéļļ àŕé šéþàŕàţé ḿöđüļéš àţ àļļ:
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, ƃüîļţ öñ
Ṽîþéŕ. Þŕéçéđéñçé, ĥîĝĥéšţ ƒîŕšţ:
- Çöḿḿàñđ ƒļàĝš: öñé-öƒƒ öṽéŕŕîđéš.
- Éñṽîŕöñḿéñţ ṽàŕîàƃļéš (
KAPI_þŕéƒîẋ, đöţš ŕéþļàçéđ ƃý üñđéŕšçöŕéš, šöplugins.directoryŕéàđš ƒŕöḿKAPI_PLUGINS_DIRECTORY). - Ţĥé ĝļöƃàļ çöñƒîĝ ƒîļé, þîññéđ ţö öñé þàţĥ ŕàţĥéŕ ţĥàñ ŕéšöļṽéđ ţĥŕöüĝĥ à
šéàŕçĥ þàţĥ.
kapi config pathþŕîñţš ţĥé ŕéšöļṽéđ ļöçàţîöñ. - Ļéĝàçý çöñƒîĝ ļöçàţîöñš (
$HOME/.config/kapi/kapi.yaml,/etc/kapi/kapi.yaml), ḿéŕĝéđ üñđéŕñéàţĥ šö àñ éẋîšţîñĝ îñšţàļļàţîöñ ķééþš ŵöŕķîñĝ. Þŕéçéđéñçé ƃéţŵééñ ţĥéšé ļàýéŕš îš þéŕ ţöþ-ļéṽéļ ƃļöçķ, ñöţ þéŕ ļéàƒ. - Çöđé đéƒàüļţš: žéŕö-çöñƒîĝ ƃéĥàṽîöŕ.
À þŕöĵéçţ ŕéçîþé îš ñöţ àñ àþþļîçàţîöñ-çöñƒîĝ ļàýéŕ. 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ŕéšöļṽéš çŕöšš-ḿöđüļé îḿþöŕţš đüŕîñĝ đàîļý đéṽéļöþḿéñţ àñđ ţĥé ŕéļéàšé ŵöŕķƒļöŵ ĥàñđļéš ḿüļţî-ḿöđüļé ƃüîļđš. - Ţĥé ļîçéñšé ĝŕàđîéñţ îš éñƒöŕçéđ ƃý îḿþöŕţ ţöþöļöĝý ŕàţĥéŕ ţĥàñ ƃý çöñṽéñţîöñ, šö à ṽîöļàţîöñ îš à ƃüîļđ ƒàîļüŕé.
- Ţĥé šĥàŕéđ ĥöšţ ŕüñţîḿé ļéţš ţĥé ÇĻÎ àñđ ţĥé đéšķţöþ éẋþöšé ţĥé šàḿé öþéŕàţîöñš ŵîţĥöüţ đüþļîçàţîñĝ çöḿḿàñđ ļöĝîç.
- Ţĥé šàḿé çöñţéñţ ḿöđéļ àñđ ţööļ çĥàîñ šéŕṽé à šöļö đéṽéļöþéŕ ŕüññîñĝ öñé çöḿḿàñđ öñ ļöçàļ ƒîļéš àñđ à ţéàḿ đŕîṽîñĝ à ƒüļļ þŕöĵéçţ ţĥŕöüĝĥ ţĥé đéšķţöþ àþþ.
Šéé àļšö
- Ƒ-02: Ţĥé çöñţéñţ ḿöđéļ: ţĥé Þàŕţ/Ƃļöçķ/Ŕüñ ţýþéš éṽéŕý ḿöđüļé šĥàŕéš
- Ƒ-03: Îđéñţîţý: ĥàšĥéš, ŕéçöñçîļîàţîöñ, àñđ ţĥé šţöŕé ķéý
- Ƒ-04: Ţĥé çöñţéñţ-ḿöđéļ ŵîŕé šçĥéḿà: ţĥé öñé çàñöñîçàļ šéŕîàļîžàţîöñ
- É-01: Ţĥé þŕöçéššîñĝ éñĝîñé: ţĥé šţŕéàḿîñĝ þîþéļîñé
- É-02: Ţĥé ƒöŕḿàţ šýšţéḿ: ŕéàđéŕš, ŵŕîţéŕš, àñđ đéţéçţîöñ
- É-03: Ţĥé ţööļ šýšţéḿ: ţĥé ţööļ îñţéŕƒàçé àñđ ÎÖ çöñţŕàçţš
- É-05: Ţĥé þļüĝîñ šýšţéḿ: ĥöŵ öüţ-öƒ-þŕöçéšš ḿöđüļéš àţţàçĥ
- Š-01: Ţĥé kapi ÇĻÎ: ţĥé çöḿḿàñđ šüŕƒàçé öṽéŕ ĥöšţ
- Š-02: Kapi Đéšķţöþ: ţĥé Ŵàîļš àþþ öṽéŕ ĥöšţ