Š-02: Ķàþî Đéšķţöþ
Šüḿḿàŕý
Ķàþî Đéšķţöþ îš à Ŵàîļš ṽ3 àþþļîçàţîöñ àţ apps/kapi-desktop/ (ḿöđüļé
github.com/neokapi/neokapi/kapi-desktop). Îţ öþéñš öñ ţĥé ŵöŕķšþàçé,
ţîţļéđ "Ýöüŕ çöñţéẋţ": ŵĥàţ éàçĥ þŕöĵéçţ ĥöļđš ţĥàţ ţĥé þéŕšöñ ĥàš ñöţ šééñ,
éṽéŕý þŕöĵéçţ ţĥîš ḿàçĥîñé àççöüñţ ĥàš ŕüñ ķàþî îñ, ŵĥîçĥéṽéŕ šüŕƒàçé ŕàñ îţ
(Ç-03), àñđ ţĥé ŕüļéš ţĥàţ ĥöļđ
îñ àļļ öƒ ţĥéḿ. Ţĥé ŕéçöŕđ öƒ ŵĥàţ þéöþļé àñđ àĝéñţš ĥàṽé ŕéçöŕđéđ àƃöüţ ţĥéîŕ
çöñţéẋţ (Ç-11) îš à Ĥîšţöŕý ṽîéŵ öƒ
îţš öŵñ. Þŕöĵéçţš öþéñ ƒŕöḿ ţĥéŕé àš ţàƃš, šéṽéŕàļ àţ à ţîḿé, öñ àñ
Öṽéŕṽîéŵ: ţĥé þŕöĵéçţ'š çöñţéñţ ƒîļéš, ţĥé çöüñţš öƒ îţš ƒîļéš, ƃļöçķš,
ŕüļéš àñđ ƒîñđîñĝš, ţĥé šüĝĝéšţîöñš àŵàîţîñĝ à þéŕšöñ, àñđ, öñçé ţĥé ŕéçîþé
đéçļàŕéš à ţàŕĝéţ ļàñĝüàĝé, ţĥé ļàñĝüàĝé šţàñđîñĝ ŵîţĥ Ƃŕîñĝ üþ ţö đàţé.
Ƃéšîđé îţ, à Çöñţéẋţ ĥüƃ öþéñš öñ Đéçîđé, öñé ǫüéšţîöñ ƒöŕ éàçĥ šüĝĝéšţîöñ
àƃöüţ ĥöŵ ţĥé þŕöĵéçţ ŵŕîţéš ţĥàţ ŵàîţš ƒöŕ à þéŕšöñ, ƃéšîđé ţĥé ĝŕàþĥ
éẋþļöŕéŕ, ţĥé ṽöîçé þŕöƒîļé, ţĥé ţéŕḿš àñđ ţĥé çöñţéñţ ḿéḿöŕý. Éàçĥ ţàƃ àļšö
çàŕŕîéš Þŕöĵéçţ Šéţţîñĝš, ŵĥöšé ţàƃš ĥöļđ ĝöṽéŕñàñçé éđîţîñĝ öñ ţĥé ŕéçîþé,
ţĥé çöļļéçţîöñš ŵîţĥ ŵĥàţ ţĥé þŕöĵéçţ šţàñđš àţ àñđ à ḿàþ öƒ îţš çööŕđîñàţé
þöîñţš, ŵĥàţ àñ àššîšţàñţ ŵöŕķîñĝ îñ ţĥé þŕöĵéçţ ŕéàđš, ţĥé þŕöĵéçţ'š ĥîšţöŕý
àñđ ŵĥéŕé îţš çöñţéẋţ îš šĥàŕéđ. Ƃéšîđé ţĥéšé šîţ à çĥéçķš þàñéļ ţĥé
Öṽéŕṽîéŵ'š ƒîñđîñĝš çöüñţ öþéñš, à ŕéṽîéŵ ǫüéüé, à ŕüññéŕ ţĥàţ ƃŕîñĝš ţĥé
þŕöĵéçţ üþ ţö đàţé ţĥŕöüĝĥ ţĥé šàḿé ṽéñüé ţĥé ÇĻÎ üšéš, à ţööļ ŕéƒéŕéñçé, àñđ
àñ ÖŠ-ķéýçĥàîñ çŕéđéñţîàļ ṽàüļţ. Îţ đéþéñđš öñ ţĥé ƒŕàḿéŵöŕķ àñđ host öñļý. Îţ
ļîñķš ñéîţĥéŕ Çöƃŕà ñöŕ ţĥé cli ḿöđüļé, àñđ ñö þàçķàĝé ƒŕöḿ ţĥé þļàţƒöŕḿ
ļàýéŕ, ŵĥîçĥ make audit-modules àššéŕţš ƃý îñšþéçţîñĝ ţĥé ţŕàñšîţîṽé þàçķàĝé
ļîšţ öƒ ./backend/....
Çöñţéẋţ
Éṽéŕýţĥîñĝ ţĥé đéšķţöþ đöéš îš àṽàîļàƃļé ƒŕöḿ ţĥé ÇĻÎ. Ŵĥàţ îţ àđđš îš ţĥé àƒƒöŕđàñçé: ţĥé ŵĥöļé ŕéšöļṽéđ ṽöîçé þŕöƒîļé öñ öñé þàĝé îñšţéàđ öƒ à ÝÀḾĻ ƒîļé ţö ŕéàđ, à ḿàþ öƒ ŵĥéŕé éàçĥ çöļļéçţîöñ îš ĝöṽéŕñéđ îñšţéàđ öƒ à ŕéçîþé ţö ţŕàçé, à ƒöŕḿ đŕîṽéñ ƃý à ţööļ'š ĴŠÖÑ Šçĥéḿà îñšţéàđ öƒ à ŕéḿéḿƃéŕéđ ƒļàĝ, à þŕöĝŕéšš ṽîéŵ îñšţéàđ öƒ à ļöĝ ţàîļ, àñđ à þļàçé ţö þàšţé àñ ÀÞÎ ķéý ţĥàţ îš ñöţ šĥéļļ ĥîšţöŕý.
Ñöţĥîñĝ àƃöüţ ţĥàţ ñééđš à šéçöñđ îḿþļéḿéñţàţîöñ. host îš çöƃŕà-ƒŕéé.
Çöḿḿàñđ ţĥŕéàđîñĝ îš ţĥé host.Command îñţéŕƒàçé, ŵĥîçĥ *cobra.Command
šàţîéš ñàţîṽéļý àñđ ŵĥîçĥ host.EnvCommand šàţîéš ƒöŕ éḿƃéđđéđ ŕüñš, šö
ţĥé đéšķţöþ çàļļš ţĥé šàḿé ƒüñçţîöñš ţĥé ÇĻÎ đöéš, ŵîţĥ à đéŕéñţ ţĥîñĝ öñ
ţĥé öţĥéŕ éñđ öƒ ţĥéḿ.
Ţĥé çöñšţŕàîñţ ţĥàţ šĥàþéš ţĥé ḿöđüļé ƃöüñđàŕý îš ţĥé ŕéṽéŕšé đîŕéçţîöñ: Ŵàîļš ƃŕîñĝš à ļàŕĝé ñàţîṽé ţööļçĥàîñ, àñđ ţĥé ÇĻÎ ḿüšţ ñéṽéŕ àçǫüîŕé îţ. Šö ţĥé đéšķţöþ îš îţš öŵñ Ĝö ḿöđüļé, àñđ ţĥé ƃöüñđàŕý îš àššéŕţéđ ŕàţĥéŕ ţĥàñ ţŕüšţéđ.
Đéçîšîöñ
Šţàçķ àñđ ḿöđüļé ƃöüñđàŕý
- Ƃàçķéñđ: Ĝö, ŵîţĥ Ŵàîļš ṽ3 ĝéñéŕàţîñĝ ŢýþéŠçŕîþţ ƃîñđîñĝš ƒŕöḿ ţĥé éẋþöŕţéđ šéŕṽîçé ḿéţĥöđš.
- Ƒŕöñţéñđ: Ŕéàçţ 19, Ṽîţé, Ţàîļŵîñđ ÇŠŠ 4, šĥàđçñ-ƃàšéđ þŕîḿîţîṽéš.
- Ļîçéñšé: Àþàçĥé-2.0, ḿàţçĥîñĝ ţĥé ƒŕàḿéŵöŕķ.
Ţĥé ḿöđüļé đéþéñđš öñ ţĥé ƒŕàḿéŵöŕķ, host àñđ Ŵàîļš, àñđ öñ ñö þàçķàĝé ƒŕöḿ
ţĥé þļàţƒöŕḿ ļàýéŕ. Ţĥé ļîçéñçé ƃöüñđàŕý ĥàš ñö éẋçéþţîöñ: à ţýþé ƃöţĥ ţĥé
đéšķţöþ àñđ ţĥé þļàţƒöŕḿ ñééđ ļîṽéš ƃéļöŵ ţĥé ļîñé, îñ ţĥé ƒŕàḿéŵöŕķ öŕ îñ
host.
apps/kapi-desktop/
├── go.mod # module github.com/neokapi/neokapi/kapi-desktop
├── main.go # Wails entry point, application menu, embedded assets
├── backend/ # one flat Go package: the bound service
├── frontend/ # React + Vite; bindings/ is Wails-generated
└── build/ # per-platform build configuration
Ƒöüŕ àššéŕţîöñš ŕüñ îñ make audit-modules: àñ îšöļàţéđ GOWORK=off ƃüîļđ öƒ
./backend/... (šö ţĥé ḿöđüļé ŕéšöļṽéš àĝàîñšţ îţš öŵñ go.mod, ñöţ ţĥé
ŵöŕķšþàçé öṽéŕļàý), à ţîđîñéšš çĥéçķ ţĥàţ ƒàîļš öñ àñý šţàļé öŕ
ƃöüñđàŕý-çŕöššîñĝ ŕéǫüîŕéḿéñţ, àñ îḿþöŕţ-ļéṽéļ çĥéçķ ţĥàţ ţĥé ţŕàñšîţîṽé
þàçķàĝé ļîšţ çöñţàîñš ñö Çöƃŕà àñđ ñö cli þàçķàĝé, àñđ ţĥé šàḿé çĥéçķ ƒöŕ àñý
þļàţƒöŕḿ þàçķàĝé.
Öñé ƃöüñđ šéŕṽîçé, ḿàñý öþéñ þŕöĵéçţš
backend.App îš ţĥé šîñĝļé Ŵàîļš šéŕṽîçé. Ţĥé ƒŕöñţéñđ çàļļš îţš éẋþöŕţéđ
ḿéţĥöđš; ţĥéŕé îš ñö šéçöñđ ŔÞÇ ļàýéŕ àñđ ñö ĥàñđ-ŵŕîţţéñ ƃîñđîñĝ çöđé. Ŵîţĥîñ
ţĥàţ öñé šéŕṽîçé ţĥé çöñçéŕñš àŕé šþļîţ àçŕöšš ƒîļéš: þŕöĵéçţ ļîƒéçýçļé àñđ
šţàţüš, ţĥé þŕöĵéçţ'š çööŕđîñàţé þöîñţš, ţĥé çöñţéẋţ ĝŕàþĥ àñđ ţĥé ṽöîçé
þŕöƒîļé þéŕ þöîñţ, ĝöṽéŕñàñçé éđîţš öñ ţĥé ŕéçîþé, ƒļöŵ ÇŔÜĐ, ţĥé ŕüññéŕ, ţĥé
çàţçĥ-üþ ļööþ àñđ îţš ṽéñüé, çĥéçķš, ţĥé ŕéṽîéŵ ǫüéüé, îñšþéçţîöñ, çöñţéñţ
ḿéḿöŕý, ţéŕḿš, ḿéđîà, öüţþüţš, ţĥé šàḿþļé þŕöĵéçţ, þļüĝîñš, çŕéđéñţîàļš àñđ
ḿöđéļ đéţéçţîöñ, ļöçàļéš, šéţţîñĝš, ţĥé ŵöŕķšþàçé ĥöḿé àñđ îţš ŵàţçĥéŕ, ţĥé ƒîļé
ŵàţçĥéŕ, àñđ ţĥé îñ-àþþ üþđàţéŕ.
Þŕöĵéçţš öþéñ àš ţàƃš. Éṽéŕý þŕöĵéçţ-šçöþéđ ḿéţĥöđ ţàķéš à tabID, šö ţĥé
öþéñ šéţ îš ŕéàļ šţàţé îñ ţĥé ƃàçķéñđ. Éàçĥ ţàƃ çàŕŕîéš îţš öŵñ ļöàđéđ ŕéçîþé,
þŕöĵéçţ çöñţéẋţ, àñđ ŕéšöļṽéđ šţöŕéš, àñđ çļöšîñĝ öñé ŕéļéàšéš ţĥéḿ. À ƒîļé
ŵàţçĥéŕ ŕéƒŕéšĥéš ţĥé ţàƃ ŵĥéñ ţĥé ŕéçîþé çĥàñĝéš, îñçļüđîñĝ éđîţš ḿàđé ţĥŕöüĝĥ
ţĥé ÇĻÎ öŕ ĝîţ.
Éṽéŕý éđîţ îš à çĥàñĝé šéţ
Ţĥé đéšķţöþ çĥàñĝéš çöñţéñţ ţĥŕöüĝĥ ţĥé çĥàñĝé šéŕṽîçé àñđ ñöţĥîñĝ éļšé
(É-09). Ƒöüŕ ƃîñđîñĝš çàŕŕý ţĥé
çöñţŕàçţ: Read, Apply, Describe àñđ History, éàçĥ ţàķîñĝ àñđ ŕéţüŕñîñĝ
îţš ĴŠÖÑ àš à šţŕîñĝ ţĥàţ ţĥé ƒŕöñţéñđ ţýþéš ŵîţĥ @neokapi/contract-types. À
šţŕîñĝ, ƃéçàüšé àñ öþéŕàţîöñ îš à üñîöñ ţĥàţ ḿàŕšĥàļš îţšéļƒ, àñđ à ḿöđéļ Ŵàîļš
ĝéñéŕàţéđ ƒŕöḿ ţĥé Ĝö šţŕüçţ ŵöüļđ đéšçŕîƃé îţš ƒîéļđš îñšţéàđ. Ţĥé ƃàçķéñđ
ƃüîļđš ţĥé šéŕṽîçé ƒöŕ ţĥé ţàƃ'š þŕöĵéçţ ŵîţĥ desktop àš ţĥé öŕîĝîñ, šö ţĥé
çöḿḿîţ çĥéçķ ĝöṽéŕñš éṽéŕý éđîţ àñđ ţĥé ƃļöçķ ĥîšţöŕý ŕéçöŕđš îţ, àñđ îţ šéñđš
éṽéŕý çĥàñĝé šéţ àš ţĥé þéŕšöñ àţ ţĥé ķéýƃöàŕđ.
À šüŕƒàçé ţĥàţ çĥàñĝéš çöñţéñţ ŕéàđš ţĥé ƃļöçķ îţ šĥöŵš ţĥŕöüĝĥ Read àñđ šéñđš
ŵĥàţ ţĥé þéŕšöñ đöéš ŵîţĥ ţĥé ŕéṽîšîöñ îţ ŕéàđ:
- Ţĥé Ŕéṽîéŵ þàĝé éđîţš à ţŕàñšļàţîöñ, öŕ à šöüŕçé ŕöŵ'š ŵöŕđîñĝ, îñ ţĥé
îñļîñé-çöđé éđîţöŕ: éàçĥ çöđé îš à çĥîþ ţĥé þéŕšöñ ţýþéš ƃéšîđé, àñđ ţĥé ţéẋţ
ĝöéš ƃàçķ îñ ţĥé þļàçéĥöļđéŕ ƒöŕḿ ţĥé ŕéàđ šĥöŵéđ, šö à çöđé ţĥé éđîţ ķéþţ îš
ţĥé çöđé ţĥé éđîţîöñ ĥöļđš. À þļüŕàļ öŕ šéļéçţ îš éđîţéđ à ƃŕàñçĥ àţ à ţîḿé, éàçĥ ƃŕàñçĥ îñ
ţĥé šàḿé îñļîñé-çöđé éđîţöŕ (îñšîđé
PluralTargetEditorƒöŕ à þļüŕàļ), šö éṽéŕý çöđé ķééþš îţš îđ ŵĥàţéṽéŕ îţ đîšþļàýš, àñđ éàçĥ çĥàñĝéđ ƃŕàñçĥ îš àset_contentàđđŕéššéđ ƃý ţĥé þàţĥ ţĥé ŕéàđ ļîšţš. Àñ ÀÎ þŕöþöšàļ îš àççéþţéđ àš ţĥé šàḿéset_content. - Àþþŕöṽé àñđ Ŕéĵéçţ šéñđ
decideŵîţĥ ţĥé öüţçöḿéestablishöŕreject, Ŕéĵéçţ ŵîţĥ ţĥé ŕéṽîéŵéŕ'š ñöţé öñ ţĥé çĥàñĝé šéţ. À ĥéļđ-ƃàçķ đŕàƒţ, ŵĥîçĥ ŕéàđš àšabsent, îš đéçîđéđ àšabsent. Àþþŕöṽîñĝ ţĥé çļéàñ ƃļöçķš öƒ à ṽîéŵ ŕéàđš éàçĥ öñé àš îţ àþþŕöṽéš îţ àñđ ŕüñš îţš çĥéçķš àĝàîñ; à ƃļöçķ ŵĥöšé ţéẋţ đéŕš ƒŕöḿ ŵĥàţ îţš ŕöŵ ļîšţš, öŕ ţĥàţ ţŕîþš à çĥéçķ, šţöþš ţĥé ƃàţçĥ ŵîţĥ îţš ŕöŵ ƃŕöüĝĥţ üþ ţö đàţé. - À çĥéçķ ƒîñđîñĝ ŵĥöšé ŕüļé ñàḿéš à ŕéþļàçéḿéñţ çàŕŕîéš îţš ƒîẋ, ţĥé
replace_textkapi checkŕéþöŕţš, àñđ ţĥé Çĥéçķš þàñéļ šéñđš îţ àš îţ îš. À ƒîñđîñĝ ŵĥöšé ŵöŕđš ĥàṽé àñ îñļîñé çöđé àḿöñĝ ţĥéḿ çàŕŕîéš ñöñé. - Ţĥé đöçüḿéñţ ṽîéŵ þüţš à çļîçķéđ ƃļöçķ îñ ƒöçüš àñđ éđîţš îţš šöüŕçé öŕ à ţŕàñšļàţîöñ üñđéŕ ţĥé đöçüḿéñţ (Š-06). À ţŕàñšļàţîöñ îš éđîţéđ ŵîţĥ îţš öŵñ þļüŕàļš àñđ çöđéš, ŵĥîçĥ ţĥé ŕéàđ ļîšţš ƃéšîđé ţĥé ƃļöçķ.
Ŵĥéñ ţĥé çöñţéñţ çĥàñĝéđ àƒţéŕ ţĥé šüŕƒàçé ŕéàđ îţ, ţĥé çĥàñĝé šéŕṽîçé ŕéƒüšéš
ţĥé çĥàñĝé ŵîţĥ ţĥé éđîţîöñ àš îţ šţàñđš. Ţĥé šüŕƒàçé šĥöŵš ţĥàţ ţéẋţ üñđéŕ
"Çĥàñĝéđ šîñçé ýöü öþéñéđ îţ" àñđ àšķš ƃéƒöŕé šéñđîñĝ ţĥé çĥàñĝé àĝàîñ öṽéŕ îţ,
ŵîţĥ ŵĥàţ ţĥé éđîţöŕ ĥöļđš àţ ţĥàţ ḿöḿéñţ. Ŵĥéñ à ŕüļé îñ ƒöŕçé ƒàîļš öñ ţĥé
ŵöŕđîñĝ à þéŕšöñ šàṽéš, ţĥé çĥàñĝé šéŕṽîçé ŕéƒüšéš ţĥé çĥàñĝé àš gate_failed
ŵîţĥ ţĥé ƒîñđîñĝš. Ţĥé éđîţöŕ šĥöŵš ţĥéḿ üñđéŕ "À ŕüļé îñ ƒöŕçé ƒàîļš öñ ţĥîš
ŵöŕđîñĝ" àñđ öƒƒéŕš "Šàṽé àñýŵàý", ŵĥîçĥ šéñđš ţĥé çĥàñĝé šéţ îţ ŕéƒüšéđ àĝàîñ
üñđéŕ gate: report: ţĥé éđîţ ļàñđš ŵîţĥ îţš ƒîñđîñĝš, àñđ ţĥé ŕéçöŕđ öƒ îţ
ļîšţš ţĥéḿ àš öṽéŕŕîđđéñ (É-09).
Çĥàñĝîñĝ ţĥé ŵöŕđîñĝ þüţš ţĥé þŕöḿþţ àŵàý, àñđ ţĥé ñéẋţ šàṽé îš çĥéçķéđ àĝàîñ,
šö àñ öṽéŕŕîđé öñļý éṽéŕ çàŕŕîéš ƒîñđîñĝš ţĥé þéŕšöñ ŵàš šĥöŵñ. Ţĥé đéšķţöþ
šéñđš éṽéŕý çĥàñĝé šéţ àš ţĥé þéŕšöñ àţ ţĥé ķéýƃöàŕđ, àñđ ţĥé çĥàñĝé šéŕṽîçé
ŕéƒüšéš gate: report ƒŕöḿ àñ àĝéñţ. À çĥàñĝé šéţ ñàḿîñĝ öñé ţŕàñšļàţîöñ îš
ŕéàđ àñđ ŵŕîţţéñ ŵîţĥ ţĥàţ ţŕàñšļàţîöñ'š ļàñĝüàĝé, àš ķàþî àþþļý éđîţš îţ: à
ÞÖ çàţàļöĝ ţĥàţ ĥöļđš îţš ţŕàñšļàţîöñ îš éđîţéđ îñ þļàçé, àñđ ţĥé Ƒŕéñçĥ öƒ à
çàţàļöĝ ŵĥöšé çöļļéçţîöñ ñàḿéš à ţàŕĝéţ ļàñđš îñ ţĥé ƒîļé ţĥé ţàŕĝéţ ñàḿéš
(po/fr.po), ñéṽéŕ îñ ţĥé šöüŕçé çàţàļöĝ. À çĥéçķ'š ƒîẋ šéñţ àĝàîñ ƒîñđš îţš
ŵöŕđš ƃý ţĥé ţéẋţ ţĥé ƒîñđîñĝ ǫüöţéš, àñđ îš öƒƒéŕéđ öñļý ŵĥîļé ţĥöšé ŵöŕđš àŕé
þļàîñ ţéẋţ îñ ţĥé ţéẋţ àš îţ šţàñđš. Ţĥé
Ŕéṽîéŵ þàĝé ļîšţš ţĥé éđîţîöñ'š ŕéçöŕđéđ çĥàñĝéš üñđéŕ îţš þŕöṽéñàñçé, ŕéàđ ƒŕöḿ
ţĥé ƃļöçķ ĥîšţöŕý ţĥŕöüĝĥ History, àñđ îţš þŕöṽéñàñçé ñàḿéš ţĥé þéŕšöñ öŕ ţĥé
àĝéñţ ŵĥöšé ŕéçöŕđéđ çĥàñĝé þŕöđüçéđ ţĥé ţéẋţ îñ ƒöŕçé.
Ţĥé àþþ öþéñš öñ ţĥé ŵöŕķšþàçé
Ţĥé ƒîŕšţ šçŕééñ îš ţĥé ŵöŕķšþàçé ĥöḿé, ţîţļéđ "Ýöüŕ çöñţéẋţ", îñ ţĥé öṽéŕṽîéŵ
šĥàþé öƒ ţĥé þàĝé þàţţéŕñš ĝüîđé (packages/ui/docs/page-patterns.md): à þàĝé
ĥéàđéŕ, à ŕöŵ öƒ ļàƃéļļéđ çöüñţš, àñđ ţŵö ļîšţš öƒ ŕöŵš ţĥàţ éàçĥ ļéàđ ţö à
þŕöĵéçţ. Ţöþ ţö ƃöţţöḿ îţ ĥöļđš ţĥé çöüñţš, Ŵĥàţ'š ñéŵ, Þŕöĵéçţš,
Ĥöļđš îñ éṽéŕý þŕöĵéçţ (đŕàŵñ öñļý ŵĥîļé ţĥé ŵöŕķšþàçé ĥöļđš à ŕüļé) àñđ
Šţàŕţ ĥéŕé, ŵĥîçĥ çöḿéš ƒîŕšţ îñšţéàđ öñ àñ éḿþţý ŵöŕķšþàçé. Ţĥé ĥéàđéŕ
ñàḿéš ţĥé ŵöŕķšþàçé đîŕéçţöŕý ƃý îţš ļàšţ šéĝḿéñţ, ŵîţĥ ţĥé ƒüļļ þàţĥ îñ ţĥé
ţööļţîþ.
host.App.ContextStandings àñšŵéŕš ţĥé çöüñţš, Ŵĥàţ'š ñéŵ àñđ éàçĥ þŕöĵéçţ
ŕöŵ'š ŕüļéš çöļüḿñ ƒŕöḿ öñé ƒöļđ öƒ ţĥé ļöĝ öṽéŕ éṽéŕý ŕéĝîšţéŕéđ þŕöĵéçţ. À
ContextProjectStanding çàŕŕîéš ţĥé þŕöĵéçţ'š ŕüļéš îñ ƒöŕçé, ţĥé šüĝĝéšţîöñš
àđṽîšîñĝ, ţĥé çöñƒļîçţš, ţĥé çöñçéþţš îñ îţš ţéŕḿš šţöŕé, ŵĥàţ îš ñéŵ šîñçé ţĥé
þéŕšöñ'š ḿàŕķéŕ (ƃéļöŵ), àñđ ţĥé ļàţéšţ šéššîöñ'š àçţîṽîţý àš à
ContextActivity: îţš àçţöŕ, ŵĥàţ îţ ŕéçöŕđéđ àñđ çöŕŕéçţéđ, ŵĥàţ îš ñéŵ ƃý
đîĝéšţ ţĥéḿé, àñđ Working, ŵĥîçĥ ĥöļđš ŵĥîļé àñ àĝéñţ šéššîöñ ĥàš àđđéđ àñ
öþéŕàţîöñ ŵîţĥîñ ţĥé ļàšţ ţŵö ḿîñüţéš, ţĥé ƒééđ'š ǫüîéţ ŕüļé. Ŕüļéš çöüñţ ŵĥàţ
ŕéṽîéŵ đéçîđéđ, àñđ ţéŕḿš çöüñţ éṽéŕý çöñçéþţ îñ ţĥé šţöŕé, îḿþöŕţéđ öñéš
îñçļüđéđ, šö à þŕöĵéçţ ŵĥöšé ţéŕḿš çàḿé ƒŕöḿ à ƒîļé šĥöŵš ţĥéḿ ƃéšîđé žéŕö
ŕüļéš. Ţĥé ţéŕḿš ƒîĝüŕé îš öñé COUNT(*) öṽéŕ ţĥé þŕöĵéçţ'š öŵñ
çöñţéẋţ šţöŕé îñ ţĥé ŵöŕķšþàçé, ŵĥîçĥ ţĥé ĥöšţ öþéñš öñļý ŵĥéñ ţĥé ŵöŕķšþàçé
àļŕéàđý ĥöļđš îţ (workspace.Workspace.HasContext) àñđ ŕéàđš ŵîţĥöüţ ƃîñđîñĝ
ţĥé ţéŕḿš šçĥéḿà. À šţöŕé ţĥàţ îš ḿîššîñĝ öŕ üñŕéàđàƃļé çöüñţš žéŕö, àñđ ñö
ţŵö ŕéĝîšţéŕéđ þŕöĵéçţš šĥàŕé à šţöŕé, šö ţĥé ĥöḿé'š šüḿ çöüñţš éàçĥ çöñçéþţ
öñçé. Ţĥé çöüñţš àŕé đŕàŵñ ƃý StatRow: þŕöĵéçţš, ŕüļéš, ţéŕḿš, šüĝĝéšţîöñš,
àñđ ţĥé çöñƒļîçţš àš "ñééđš ýöü", îñ ţĥé ŵàŕñîñĝ îñķ ŵĥîļé ţĥéŕé àŕé àñý. Ñö
šéñţéñçé öñ ţĥé þàĝé îš ĝéñéŕàţéđ ƒŕöḿ à ñüḿƃéŕ. Ŵĥàţ'š ñéŵ ļîšţš ţĥé þŕöĵéçţš
ŵîţĥ šöḿéţĥîñĝ ñéŵ, à šüĝĝéšţîöñ àđṽîšîñĝ, à çöñƒļîçţ öŕ à ŵöŕķîñĝ šéššîöñ,
ñéŵéšţ šéššîöñ ƒîŕšţ. À ŕöŵ îš ţĥé ļàţéšţ šéššîöñ'š àçţöŕ àš àñ ActorMark,
ţĥé þŕöĵéçţ àñđ ĥöŵ ļöñĝ àĝö, öñé çĥîþ þéŕ đîĝéšţ ţĥéḿé ţĥé šéššîöñ ñöţîçéđ
("3 ñàḿéš", "1 ŵöŕđ") àñđ à ŵàŕñîñĝ çĥîþ ƒöŕ ţĥé çöñƒļîçţš, ţĥéñ öñé ƃüţţöñ,
Đéçîđé ŵĥîļé ţĥéŕé îš à çöñƒļîçţ àñđ Ŕéṽîéŵ öţĥéŕŵîšé, ŵĥîçĥ öþéñš ţĥé
þŕöĵéçţ'š ţàƃ öñ Đéçîđé. À ŵöŕķîñĝ šéššîöñ àđđš à çĥîþ ŵîţĥ à ļîṽé đöţ.
Éàçĥ þŕöĵéçţ ŕöŵ îš öñé ļîñé öƒ àļîĝñéđ çöļüḿñš: ţĥé ṽöîçé þŕöƒîļé ĝöṽéŕñîñĝ
ţĥé þŕöĵéçţ'š đéƒàüļţ þöîñţ, ţĥé ŕüļéš îñ ƒöŕçé, àñ îçöñ àñđ öñé ŵöŕđ ƒöŕ ŵĥéŕé
îţš çöñţéẋţ îš šĥàŕéđ (ProjectSharing, üñđéŕ Šĥàŕîñĝ àñđ ţĥé ļàđđéŕ öƒ
ŕéàçĥ) àñđ ţĥé ļàšţ àçţîṽîţý. Öþéñ öþéñš ţĥé
ƒîŕšţ çĥéçķöüţ šţîļļ þŕéšéñţ; ţĥé ŕöŵ'š ḿéñü ĥöļđš ţĥé öţĥéŕ çĥéçķöüţš, Çöþý
þàţĥ àñđ Ŕéḿöṽé, àñđ ţĥé ƒîŕšţ çĥéçķöüţ'š þàţĥ îš ţĥé ţööļţîþ öñ ţĥé ñàḿé.
Ĥöļđš îñ éṽéŕý þŕöĵéçţ ļîšţš ţĥé ŕüļéš àþþļîéđ ţö ţĥé ŵöŕķšþàçé
(WorkspaceRules), éàçĥ ŵîţĥ ţĥé þŕöĵéçţ îţ ŵàš đéçîđéđ îñ àñđ ĥöŵ îţ çàḿé
îñţö ƒöŕçé. Ţĥöšé ŕüļéš ļîṽé îñ ţĥé ŵöŕķšþàçé'š öŵñ ŕüļé ţàƃļé, ŵĥîçĥ éṽéŕý
þŕöĵéçţ öñ ţĥîš ḿàçĥîñé ŕéàđš.
Šţàŕţ ĥéŕé îš ţĥŕéé šţéþš ƒöŕ à ƒîŕšţ ŕüñ: öþéñ à þŕöĵéçţ öŕ ţŕý ţĥé
šàḿþļé, çöññéçţ àñ àššîšţàñţ, çöḿé ƃàçķ ţö Ŵĥàţ'š ñéŵ. Đîšḿîššîñĝ îţ îš à
šéţţîñĝ îñ ţĥé đéšķţöþ'š öŵñ šéţţîñĝš (StartHereDismissed, ţĥŕöüĝĥ
DismissStartHere àñđ RestoreStartHere), ţĥé ŵàý ţĥé šàḿþļé çàŕđš àŕé
đîšḿîššéđ, šö îţ šţàýš đîšḿîššéđ àçŕöšš ļàüñçĥéš üñţîļ Šéţţîñĝš ŕéšţöŕéš îţ.
Ţĥé ƒééđ öƒ éṽéŕý þŕöĵéçţ'š öþéŕàţîöñš îš Ĥîšţöŕý, à ṽîéŵ ŕéàçĥéđ ƒŕöḿ à ļîñķ ƃéšîđé ţĥé ţîţļé (ţĥé ƒééđ).
Ţĥé Þŕöĵéçţš šéçţîöñ ŕéàđš ţĥé ŵöŕķšþàçé'š þŕöĵéçţ ŕéĝîšţŕý
(Ç-03): éṽéŕý þŕöĵéçţ ţĥîš ḿàçĥîñé àççöüñţ
ĥàš ŕüñ ķàþî îñ, ŵĥîçĥéṽéŕ šüŕƒàçé ŕàñ îţ. À þŕöĵéçţ ŕéĝîšţéŕš ţĥé ƒîŕšţ ţîḿé
ķàþî öþéñš îţ, šö ţĥé đéšķţöþ ļîšţš à ŕéþöšîţöŕý šéţ üþ ƒŕöḿ à ţéŕḿîñàļ ŵîţĥöüţ
ƃéîñĝ ţöļđ àƃöüţ îţ. Ţĥé àþþ ŕéĝîšţéŕš ţöö, ƒŕöḿ OpenProject àñđ NewProject,
ţĥŕöüĝĥ workspace.Register ŕàţĥéŕ ţĥàñ ţĥŕöüĝĥ ţĥé þŕöĵéçţ šţöŕé, ƃéçàüšé
öþéñîñĝ à þŕöĵéçţ ţö ļööķ àţ îţ îš ñö ŕéàšöñ ţö çŕéàţé .kapi/work/store.db
îñšîđé šöḿéƃöđý'š çĥéçķöüţ.
À ŕéĝîšţŕàţîöñ çàŕŕîéš ţĥé þŕöĵéçţ'š îđéñţîţý, îţš đîšþļàý ñàḿé, ţĥé çĥéçķöüţ þàţĥš îţ ĥàš ƃééñ šééñ àţ öñ ţĥîš ḿàçĥîñé àñđ îţš ļàšţ-àçţîṽé ţîḿé. Çĥéçķöüţš àŕé à ļîšţ ŕàţĥéŕ ţĥàñ à ƒîéļđ, šö ţŵö ŵöŕķţŕééš öŕ ţŵö çļöñéš öƒ öñé ŕéþöšîţöŕý àŕé öñé ŕöŵ ŵîţĥ ţŵö þļàçéš ţö öþéñ îţ ƒŕöḿ. À çĥéçķöüţ ŵĥöšé ŕéçîþé ĥàš ĝöñé îš ḿàŕķéđ ḿîššîñĝ àñđ ķéþţ: ţĥé þŕöĵéçţ àñđ îţš çöñţéẋţ àŕé üñţöüçĥéđ ƃý à ƒöļđéŕ đîšàþþéàŕîñĝ, àñđ đŕöþþîñĝ ţĥé ŕöŵ ŵöüļđ éŕàšé ţĥé öñļý ŕéçöŕđ öƒ ŵĥéŕé îţ ŵàš. À þŕöĵéçţ ŵîţĥ ñö çĥéçķöüţ ĥéŕé öþéñš àš à çöñţéẋţ-öñļý ţàƃ: îţ çàŕŕîéš ñö ŕéçîþé àñđ ñö ƒîļéš, îţš ţéŕḿš àñđ çöñţéñţ ḿéḿöŕý àŕé ƃöüñđ šţŕàîĝĥţ ţö ţĥé ŵöŕķšþàçé'š çöñţéẋţ šţöŕé àš ƃöŕŕöŵéđ ĥàñđļéš, àñđ ţĥé Çöñţéẋţ ĥüƃ đŕöþš ţĥé šéçţîöñš ţĥàţ ŕéàđ à çĥéçķöüţ.
Workspace.Forget đéļéţéš ţĥé þŕöĵéçţ ŕéĝîšţŕàţîöñ, çĥéçķöüţ ŕéçöŕđš àñđ
çöñţéẋţ šţöŕé àƒţéŕ çöñƒîŕḿàţîöñ. Ţĥé çöñƒîŕḿàţîöñ îđéñţîƒîéš ţĥé đàţàƃàšé ţö
đéļéţé àñđ ţĥé çĥéçķöüţ ƒöļđéŕš ţö þŕéšéŕṽé. Çļöšîñĝ à ţàƃ, đéļéţîñĝ à çĥéçķöüţ
öŕ ŕéšéţţîñĝ à šàḿþļé ļéàṽéš ţĥé ŕéĝîšţŕàţîöñ àñđ çöñţéẋţ îñţàçţ.
Ţĥé đéšķţöþ đéţéçţš çĥàñĝéš ḿàđé ƃý ţĥé ÇĻÎ àñđ ḾÇÞ šéŕṽéŕ ţĥŕöüĝĥ ţĥé šĥàŕéđ
ŵöŕķšþàçé öþéŕàţîöñ ļöĝ. À ĝöŕöüţîñé šţàŕţéđ îñ ServiceStartup þöļļš
workspace.Head öñçé þéŕ šéçöñđ àñđ éḿîţš workspace:changed ŵĥéñ ţĥé ŕéṽîšîöñ
çĥàñĝéš, ţŕîĝĝéŕîñĝ à ƒŕöñţéñđ ŕéƒéţçĥ. Ŕéöþéñîñĝ àñ üñçĥàñĝéđ ŕéĝîšţŕàţîöñ
ļéàṽéš ţĥé ŕéṽîšîöñ üñçĥàñĝéđ. Ţĥîš ŕéǫüîŕéš öñé îñđéẋéđ ǫüéŕý þéŕ šéçöñđ àñđ
àṽöîđš îñţéŕþŕéţîñĝ ƒîļéšýšţéḿ éṽéñţš ƒŕöḿ ŠǪĻîţé đàţàƃàšé àñđ ŴÀĻ ƒîļéš.
Ţĥé ŕàîļ àñđ ţĥé Öṽéŕṽîéŵ
Éṽéŕý þŕöĵéçţ ţàƃ öþéñš öñ îţš Öṽéŕṽîéŵ, àñđ à þéŕšîšţéđ ṽîéŵ öþéñš ŵĥéŕé îţ ŵàš. Ţĥé þŕöĵéçţ ŕàîļ ļîšţš, îñ öŕđéŕ, Öṽéŕṽîéŵ, Çöñţéẋţ, Ŕéṽîéŵ, Ţööļƃöẋ àñđ Þŕöĵéçţ Šéţţîñĝš, àñđ éàçĥ þàĝé ĥàš éẋàçţļý öñé éñţŕý: ţĥé çĥéçķš þàñéļ àñđ ţĥé Ŕéàđéŕ öþéñ ƒŕöḿ ţĥé Öṽéŕṽîéŵ àñđ ķééþ îţ ḿàŕķéđ, ţĥé Ţööļƃöẋ ĥöļđš Ţööļš, Ƒļöŵš àñđ Ƒöŕḿàţš àš ţàƃš, àñđ Þŕöĵéçţ Šéţţîñĝš ĥöļđš Šéţţîñĝš, Çöñţéñţ, Àššîšţàñţš àñđ Šĥàŕé àš ţàƃš. Ŕéṽîéŵ îš àļŵàýš öñ ţĥé ŕàîļ; öñ à þŕöĵéçţ ţĥàţ đéçļàŕéš ñö ţàŕĝéţ ļàñĝüàĝé îţ šĥöŵš ţĥé ļàñĝüàĝéš šéçţîöñ öƒ Þŕöĵéçţ Šéţţîñĝš üñđéŕ öñé ļîñé, àñđ ñöţĥîñĝ éļšé öñ ţĥé ŕàîļ çĥàñĝéš ŵîţĥ ţĥé þŕöĵéçţ'š ļàñĝüàĝéš.
À ṽîéŵ îđ îš þéŕšîšţéđ îñ ţĥé šéššîöñ, šö îđš àŕé ñéṽéŕ ŕéñàḿéđ îñ þļàçé. Ţĥé
Öṽéŕṽîéŵ ķééþš ţĥé îđ map, àñđ canonicalView îñ ţĥé ţàƃ ḿàñàĝéŕ ḿàþš ţĥé
îđš öƒ ŕéţîŕéđ þàĝéš ţö ţĥé þàĝé ţĥàţ ĥöļđš ţĥéîŕ çöñţéñţ ñöŵ: project-home,
content àñđ languages ţö map, àñđ context:agent, context:history àñđ
context:share ţö project-settings:assistants, :sessions àñđ :share.
À þŕöĵéçţ ŵàîţîñĝ ţö ƃé šéţ üþ, àñ éḿþţý ƒöļđéŕ öŕ öñé ḿàţçĥîñĝ à þŕéšéţ,
öþéñš öñ ţĥé Öṽéŕṽîéŵ ţöö, àñđ îţš éḿþţý ƒîļéš ļîšţ ļéàđš ţö ţĥé setup
ŕöüţé, ŵĥéŕé ţĥé šéţüþ àñđ ţĥé þŕéšéţ àŕé öƒƒéŕéđ. Ţĥé Öṽéŕṽîéŵ îš àñ öṽéŕṽîéŵ
îñ ţĥé þàĝé þàţţéŕñš ĝüîđé'š šéñšé. Îţš ĥéàđéŕ, çöüñţš, šüĝĝéšţîöñš àñđ ƒîļéš
àŕé @neokapi/project-screens' MapView, ŵĥîçĥ ļéàṽéš à šļöţ üñđéŕ ţĥé
çöüñţš: ţĥé đéšķţöþ đŕàŵš ţĥé þļüĝîñ àñđ šàḿþļé ñöţîçéš ţĥéŕé àñđ, öñ à
þŕöĵéçţ ŵîţĥ à ţàŕĝéţ ļàñĝüàĝé, ţĥé çöñṽéŕĝéñçé ĥéŕö. Ţĥé þàĝé ŕéñđéŕš ƒŕöḿ öñé ƃöüñđ çàļļ,
MapSummary, ŵĥîçĥ àñšŵéŕš ƒŕöḿ ŵĥàţ ţĥé àþþ àļŕéàđý ĥöļđš àñđ ŕéàđš ñö ƒîļé
ţĥé šţöŕé šýñç ĥàš ñöţ ŕéàđ:
| Ŕéĝîöñ | Ŵĥàţ îţ šĥöŵš | Ŕéàđ ƒŕöḿ |
|---|---|---|
| Ĥéàđéŕ | ţĥé þŕöĵéçţ'š ñàḿé; ŵĥéñ ţĥé šţöŕé šýñç ļàšţ ƒöüñđ ţĥé ƃļöçķ çàçĥé çüŕŕéñţ ŵîţĥ ţĥé ƒîļéš öñ đîšķ ("Ŕéàđ 2 ḿîñüţéš àĝö"), ñàḿîñĝ ĥöŵ ḿàñý ƒîļéš ţĥé çàçĥé ĥöļđš öñļý ŵĥéñ ţĥàţ đéŕš ƒŕöḿ ţĥé ƒîļéš çöüñţ; Ŕüñ öñ éṽéŕýţĥîñĝ; Đéçîđé ŵîţĥ ţĥé çöüñţ öƒ çöñƒļîçţš àñđ šüĝĝéšţîöñš àŵàîţîñĝ à þéŕšöñ | ţĥé ţîḿé SyncProjectStore ŕéçöŕđš öñ ţĥé ţàƃ, ţĥé ƃļöçķ çàçĥé |
| Çöüñţš | ƒîļéš (ţĥé ŕéçîþé'š ŕéšöļṽéđ çöñţéñţ ƒîļéš), ƃļöçķš (ţĥé çàçĥé'š ţŕàñšļàţàƃļé ƃļöçķš ƒöŕ ţĥéḿ, àš GetProjectStatus çöüñţš ţĥéḿ), ŕüļéš (ţĥé çöñçéþţš îñ ţĥé ƃöüñđ ţéŕḿš šţöŕé, ţĥé ŵöŕđ àñđ þàţţéŕñ ŕüļéš öƒ ţĥé ṽöîçé þŕöƒîļé àţ ţĥé þŕöĵéçţ'š öŵñ þöîñţ, àñđ ţĥé ñöţéš à þéŕšöñ ķéþţ) àñđ ƒîñđîñĝš (ţĥé ļàšţ çĥéçķš ŕüñ öṽéŕ éṽéŕý ƒîļé), ţĥé öñļý öñé îñ ţĥé ŵàŕñîñĝ îñķ àñđ öñļý àƃöṽé žéŕö. Ƃļöçķš öþéñ Àšķ, ŕüļéš öþéñ Éẋþļöŕé, àñđ ƒîñđîñĝš öþéñ ţĥé çĥéçķš þàñéļ. ķàþî šüĝĝéšţš ƃéšîđé ţĥéḿ šĥöŵš öñļý ŵĥéñ çöñƒļîçţš ḿàķé îţš ñüḿƃéŕ đéŕ ƒŕöḿ Đéçîđé'š | ţĥé ƃļöçķ çàçĥé, ţĥé ţéŕḿš àñđ ṽöîçé šţöŕéš, ţĥé öþéŕàţîöñ ļöĝ, ţĥé ţàƃ'š ļàšţ ŵĥöļé-þŕöĵéçţ RunChecks |
| Ŵĥàţ ýöüŕ ƒîļéš đö | öñé ŕöŵ ƒöŕ éàçĥ çöñƒļîçţ àñđ éàçĥ šüĝĝéšţîöñ ţĥé đîĝéšţ ĥöļđš: îţš ķîñđ àš à KindIcon, ţĥé ŕüļé, ţĥé ǫüöţàţîöñ, àñđ ţĥé đîšţîñçţ ƃļöçķš àñđ ƒîļéš îţš éṽîđéñçé ñàḿéš. Đéçîđé öþéñš ţĥé Đéçîđé šéçţîöñ šéļéçţîñĝ ţĥàţ ŕöŵ (conflict:<id> öŕ suggested:<id>) | host.App.ContextDigest, àñđ ţĥé öþéŕàţîöñ ļöĝ ƒöŕ ţĥé éṽîđéñçé |
| Ŵĥàţ ýöüŕ ƒîļéš đö, éḿþţý | "Ñö šüĝĝéšţîöñš ýéţ." àñđ Çöññéçţ àñ àššîšţàñţ, ŵĥîçĥ öþéñš Þŕöĵéçţ Šéţţîñĝš öñ Àššîšţàñţš | |
| Ƒîļéš | öñé ŕöŵ þéŕ çöñţéñţ ƒîļé: ƒöŕḿàţ, ñàḿé (ţĥé ƒöļđéŕ öñ ţĥé ḿéţà ļîñé), ƃļöçķš, ƒîñđîñĝš ŵĥéñ àƃöṽé žéŕö, àñđ Öþéñ, ŵĥîçĥ þŕéṽîéŵš ţĥé ƒîļé. Ḿöšţ ƒîñđîñĝš ƒîŕšţ, ţĥéñ ƃý þàţĥ. Àñ éḿþţý ļîšţ öƒƒéŕš Àđđ ƒîļéš, öŕ Šéţ üþ ţĥé þŕöĵéçţ ŵĥîļé ţĥé þŕöĵéçţ ŵàîţš ţö ƃé šéţ üþ | ţĥé ŕéšöļṽéđ çöñţéñţ, ţĥé ƃļöçķ çàçĥé, ţĥé ļàšţ çĥéçķš ŕüñ |
Ţĥé çĥéçķš ŕüñ ƃéĥîñđ ţĥé ƒîñđîñĝš çöüñţ îš RunChecks öṽéŕ éṽéŕý ƒîļé îñ
ţĥé ŕéçîþé'š ţàŕĝéţ ļàñĝüàĝéš, ţĥé šàḿé ŕüñ ţĥé çĥéçķš þàñéļ ḿàķéš. À ŕüñ ţĥàţ
ñàŕŕöŵš ţĥé ƒîļéš ļéàṽéš ţĥé Öṽéŕṽîéŵ'š çöüñţš àš ţĥéý ŵéŕé. Ţĥé ţàƃ ķééþš ţĥé ļàšţ
ŕüñ öṽéŕ éṽéŕý ƒîļé àñđ éṽéŕý ţàŕĝéţ ļàñĝüàĝé îñ ḿéḿöŕý; à ñàŕŕöŵéŕ ŕüñ, ƒŕöḿ
ţĥé çĥéçķš þàñéļ üñđéŕ ţĥé ḿéñü-ƃàŕ ƒîļţéŕ, đöéš ñöţ ŕéþļàçé îţ. Ţĥé Öṽéŕṽîéŵ ŕüñš
öñé îţšéļƒ ţĥé ƒîŕšţ ţîḿé îţ öþéñš à ţàƃ ţĥàţ ĥàš ñöñé îñ ţĥîš šéššîöñ, àñđ
Ŕüñ öñ éṽéŕýţĥîñĝ ŕüñš îţ àĝàîñ. Ţĥé ƒîñđîñĝš çöüñţ öþéñš ţĥé çĥéçķš þàñéļ
öñ ţĥàţ ŕüñ (LastProjectChecks), šö ţĥé çöüñţ àñđ ţĥé þàñéļ àĝŕéé üñţîļ ţĥé
þéŕšöñ ŕüñš ţĥé þàñéļ'š öŵñ çĥéçķš.
Çöñţéñţ àñđ ţĥé þöîñţ ḿàþ
Ţĥé Çöñţéñţ ţàƃ öƒ Þŕöĵéçţ Šéţţîñĝš šĥöŵš ţĥé þŕöĵéçţ'š šţàñđîñĝ, îñ ţĥé ţŵö-àẋîš šĥàþé
kapi status þŕîñţš: çöñţéñţ öñ öñé ŕöŵ, ĝöṽéŕñàñçé öñ ţĥé öţĥéŕ, àñđ ţĥé
ṽéñüé àñđ šţŕéàḿ öñ ţĥé îđéñţîţý ļîñé. Ƃéļöŵ îţ, ţĥé þöîñţ ḿàþ ļîšţš éṽéŕý
çööŕđîñàţé þöîñţ ţĥé ŕéçîþé đéçļàŕéš (Ç-02),
ţĥé çöļļéçţîöñš àţ éàçĥ àñđ ţĥé ṽöîçé þŕöƒîļé ĝöṽéŕñîñĝ ţĥéŕé. À ŕöŵ öþéñš ţĥé
Çöñţéẋţ ĥüƃ šţàñđîñĝ àţ ţĥàţ þöîñţ. À šîñĝļé-þöîñţ þŕöĵéçţ ĝéţš öñé ŕöŵ ŕàţĥéŕ
ţĥàñ ñö ḿàþ.
Ƃéţŵééñ ţĥé šţàñđîñĝ àñđ ţĥé þöîñţ ḿàþ, ţĥé þŕöĵéçţ ļîšţš ţĥé çöñƒļîçţš
kapi status ŕéþöŕţš, ŵĥéñ ţĥéŕé àŕé àñý, ƃļöçķ ƃý ƃļöçķ ŵîţĥ ƃöţĥ ŵöŕđîñĝš
(GetKeptConflicts). Öñé ķîñđ îš àñ éđîţ àñöţĥéŕ ḿàçĥîñé ḿàđé ţö à đŕàƒţ ţĥé
ŵöŕķšþàçé ķééþš, ŵĥîçĥ à þüļļ ḿéŕĝéđ àñđ ŵĥîçĥ çöüļđ ñöţ ļàñđ: ţĥé ŵöŕķšþàçé
ĥöļđš öñé ŵöŕđîñĝ àñđ ţĥàţ éđîţ àñöţĥéŕ. Ţĥé öţĥéŕ îš ŵöŕđîñĝ à þéŕšöñ ķéþţ îñ
ţĥé ŵöŕķšþàçé ŵĥöšé ţŕàñšļàţîöñ'š ƒîļé ĥàš àþþéàŕéđ šîñçé ŵîţĥöüţ îţ: ţĥé ƒîļé
ĥöļđš öñé ŵöŕđîñĝ àñđ ţĥé ŵöŕķšþàçé àñöţĥéŕ
(Ç-03). Ţĥé
þéŕšöñ ķééþš éîţĥéŕ šîđé öŕ ŵŕîţéš à ñéŵ ŵöŕđîñĝ, àñđ éàçĥ çĥöîçé ţĥàţ ŵŕîţéš
îš à set_content šéñţ ţĥŕöüĝĥ Apply ŵîţĥ ţĥé ŕéṽîšîöñ ţĥé çöñƒļîçţ šĥöŵš àš
ĥéļđ, šö à ƃļöçķ ţĥàţ ḿöṽéđ ḿéàñŵĥîļé îš ŕéƒüšéđ šţàļé àñđ šĥöŵñ àĝàîñ. Ķééþîñĝ
ţĥé ŵöŕđîñĝ ţĥé ŵöŕķšþàçé ĥöļđš îš ŕéçöŕđéđ àš ţĥé þéŕšöñ'š đéçîšîöñ, àñđ à
ţŕàñšļàţîöñ ŵĥöšé ƒîļé éẋîšţš ĥàš ţĥé ŵöŕķšþàçé'š çöþý ŕéļéàšéđ öñçé ţĥé ƒîļé
ĥöļđš ţĥé çĥöšéñ ŵöŕđîñĝ (ReleaseKeptWording).
À ţĥîŕđ ķîñđ îš à ṽéŕšîöñ öƒ à đöçüḿéñţ à ĶÞŽ îñ ţĥé þŕöĵéçţ çàŕŕîéš ţĥàţ ŵàš
ŵŕîţţéñ ƒŕöḿ àñ öļđéŕ ṽéŕšîöñ ţĥàñ ţĥé đöçüḿéñţ ĥöļđš ñöŵ, šüçĥ àš à .kpz
ŕéþļàçéđ öñ đîšķ ŵĥîļé îţš çàçĥé ĥéļđ üñþàçķéđ éđîţš
(É-09). Îţ ļîšţš ñö ƃļöçķš àţ
ƒîŕšţ. Ţĥé þéŕšöñ ŕéƃàšéš îţ (RebaseKeptDocument), ŵĥîçĥ çàŕŕîéš îţš çĥàñĝéš
öṽéŕ öñţö ţĥé đöçüḿéñţ ţĥŕöüĝĥ ţĥé çĥàñĝé šéŕṽîçé àñđ ļîšţš éàçĥ ƃļöçķ ƃöţĥ
ṽéŕšîöñš çĥàñĝéđ, đéçîđéđ àš àƃöṽé, öŕ đîšçàŕđš îţ (DiscardKeptDocument),
ŵĥîçĥ ķééþš ţĥé đöçüḿéñţ àš îţ šţàñđš. À ŕéƃàšé ţĥé çĥàñĝé šéŕṽîçé ŕéƒüšéš,
ƒöŕ à šţàļé ƃļöçķ öŕ à ƒàîļîñĝ ĝàţé, šĥöŵš ţĥé ŕéàšöñ àñđ šéţţļéš ñöţĥîñĝ.
Ţĥé ŵöŕķšþàçé ĥöḿé ļîšţš ţĥé šàḿé ķîñđ ƒöŕ éṽéŕý .kpz öñ ţĥîš ḿàçĥîñé ŵĥöšé
ŵöŕķîñĝ çàçĥé ĥöļđš éđîţš, îñšîđé à þŕöĵéçţ öŕ öüţšîđé éṽéŕý þŕöĵéçţ
(GetWorkspaceDocumentConflicts). Ţĥé çàçĥéš àŕé ţĥé üšéŕ'š öŵñ, öñé þéŕ
.kpz àñđ ķéýéđ ƃý îţš àƃšöļüţé þàţĥ, ŵĥîçĥ ţĥéîŕ ḿéţàđàţà ŕéçöŕđš, šö ţĥé
ļîšţ ñééđš ñö þŕöĵéçţ öþéñ, àñđ éàçĥ đöçüḿéñţ îš ñàḿéđ ƃý ţĥàţ þàţĥ. Ŕéƃàšîñĝ,
đîšçàŕđîñĝ àñđ đéçîđîñĝ à ƃļöçķ (RebaseWorkspaceDocument,
DiscardWorkspaceDocument, ApplyWorkspaceDocument) ĝö ţĥŕöüĝĥ ţĥé çĥàñĝé
šéŕṽîçé öƒ ţĥé þŕöĵéçţ ţĥé .kpz šîţš îñ, öŕ öƒ îţš đîŕéçţöŕý ŵĥéñ îţ šîţš îñ
ñöñé.
Ţĥé ƃàçķéñđ ŕéšöļṽéš ţĥé đéçļàŕéđ çŕöšš þŕöđüçţ, ţĥé þŕöĵéçţ'š öŵñ þöîñţ àñđ ţĥéñ éàçĥ þŕöƒîļé'š çĥàññéļš, àñđ ļîšţš à çöļļéçţîöñ ŵĥéŕé îţ îš àçţüàļļý ĝöṽéŕñéđ: à çöļļéçţîöñ ŵĥöšé þŕöƒîļé'š ŵîñđöŵ ĥàš çļöšéđ àþþéàŕš àţ ţĥé þöîñţ ţĥàţ ĝöṽéŕñš îţ, ñöţ ŵĥéŕé îţ ŵàš ŵŕîţţéñ.
Ţĥé Çöñţéẋţ ĥüƃ
Ţĥé šţöŕéš àŕé šéçţîöñš öƒ öñé ĥüƃ, ƃéšîđé ţĥé ĝŕàþĥ. Ţĥé ĥüƃ îš öñé çöḿþöñéñţ đŕàŵñ îñ ţŵö þļàçéš: ţĥé ŕàîļ'š Çöñţéẋţ þàĝé öƒƒéŕš Đéçîđé, Éẋþļöŕé, Àšķ, Ṽöîçé, Ţéŕḿš àñđ Çöñţéñţ Ḿéḿöŕý öñ îţš šéçţîöñ ƃàŕ, àñđ Þŕöĵéçţ Šéţţîñĝš đŕàŵš Àššîšţàñţš, Šéššîöñš àñđ Šĥàŕé üñđéŕ îţš öŵñ ţàƃš ŵîţĥ ñö šéçţîöñ ƃàŕ. À ţàƃ ŵîţĥ ñö çĥéçķöüţ ĥàš ñö Þŕöĵéçţ Šéţţîñĝš, šö îţš ĥüƃ öƒƒéŕš éṽéŕý šéçţîöñ. Ţĥé šéçţîöñš, îñ öŕđéŕ:
| Šéçţîöñ (îđ) | Ŵĥàţ îţ šĥöŵš | Àñšŵéŕéđ ƃý |
|---|---|---|
Đéçîđé (rules) | öñé ǫüéšţîöñ þéŕ šüĝĝéšţîöñ ŵàîţîñĝ ƒöŕ à þéŕšöñ, ţĥé ǫüéšţîöñš kapi rules àšķš (ƃéļöŵ); öñ à ţàƃ ŵîţĥ ñö çĥéçķöüţ, ţĥé đîĝéšţ öƒ ŵĥàţ ŵàš ŕéçöŕđéđ, ŵîţĥöüţ ţĥé đéçîšîöñš | RulesDecideView àñđ DecideRule, öṽéŕ host.App.DecideRules àñđ host.App.DecideRule; ProjectContextDigest ƒöŕ à ţàƃ ŵîţĥ ñö çĥéçķöüţ |
Éẋþļöŕé (atlas) | ţĥé þŕöĵéçţ'š çöñţéẋţ öñ îţš àẋéš àñđ öṽéŕ ţîḿé, ţĥŕöüĝĥ @neokapi/context-atlas (ƃéļöŵ) | ProjectContextAtlas, öṽéŕ host.App.ContextAtlas |
Šéàŕçĥ (explorer) | ţĥé çöñţéẋţ ĝŕàþĥ ƃý ƒîļé àñđ ƃý ŵöŕđ, ţĥŕöüĝĥ @neokapi/context-explorer; ţĥé ĝöṽéŕñš þàñé ŕéñđéŕš ţĥé šàḿé ĝüîđé ţĥé ŕéţŕîéṽàļ šüŕƒàçé šéŕṽéš (Ç-06) | ContextAt, ContextGoverns, ContextLives, ContextRelates, ContextSearch |
Àššîšţàñţš (agent) | éàçĥ àššîšţàñţ àñđ îţš çöññéçţîöñ, ŵîţĥ Çöññéçţ, àñđ ţĥé ñéŵéšţ šéššîöñš ŕéçöŕđéđ îñ ţĥé þŕöĵéçţ (ƃéļöŵ). Šĥöŵ ŵĥàţ îţ ŕéàđš öþéñš ţĥé ŕüļéš ƒîļéš àñđ ţĥé ƃŕîéƒ ƒöŕ öñé ƒîļé. Ţĥé ƃŕîéƒ îš ţĥé ŕéšöļṽéđ çöñţéẋţ ƒöŕ öñé ƒîļé àš àñ àĝéñţ ŕéçéîṽéš îţ: AgentContextAt çàļļš ţĥé đéšķţöþ'š ContextAt àñđ ŕéñđéŕš ţĥé àñšŵéŕ'š öŵñ FormatText, šö ţĥé ƃöđý öñ šçŕééñ îš ţĥé context:// ŕéšöüŕçé ƃöđý ŕàţĥéŕ ţĥàñ à šéçöñđ ŕéñđéŕîñĝ öƒ îţ | AssistantsView, ConnectAssistant, ConnectAgentHost (Çļàüđé Đéšķţöþ), RulesFiles, WriteRulesFiles, AgentContextAt |
| Ṽöîçé | ţĥé ŵĥöļé ŕéšöļṽéđ þŕöƒîļé þéŕ þöîñţ: ţöñé, šţýļé þàţţéŕñš ŵîţĥ šéṽéŕîţîéš àñđ ŕàţéš, ţéŕḿ ŕüļéš, éẋàḿþļéš, àñđ ţĥé ļöçàļé, çĥàññéļ àñđ þéŕšöñà öṽéŕŕîđéš àš àüţĥöŕéđ (Ç-07); ţĥé þŕöƒîļé îš éđîţéđ ĥéŕé | ProjectVoice, SaveVoiceProfile |
| Ţéŕḿš | ţĥé ţéŕḿš šţöŕé: šéàŕçĥ, ƒàçéţš, þŕöṽéñàñçé, çöñçéþţ ŕéļàţîöñš | SearchTerms |
Çöñţéñţ Ḿéḿöŕý (memory) | ţĥé çöñţéñţ ḿéḿöŕý: šéàŕçĥ, ƒàçéţš, àçţîṽîţý, þŕöṽéñàñçé, ţĥé ļàñĝüàĝéš ĝàţé | SearchMemoryEntries |
Šéššîöñš (history) | ţĥé þŕöĵéçţ'š ƒééđ (ƃéļöŵ), ŵîţĥ à ŕéšéţ ţö ƃéƒöŕé éàçĥ šéššîöñ. Îţ ĥàš ñö ţàƃ öƒ îţš öŵñ: à šéššîöñ öñ ţĥé Àššîšţàñţš þàĝé, öŕ Àļļ šéššîöñš ţĥéŕé, öþéñš îţ, àñđ Þŕöĵéçţ Šéţţîñĝš ḿàŕķš Àššîšţàñţš ŵĥîļé îţ îš öþéñ | ContextFeed ŵîţĥ ţĥé þŕöĵéçţ ķéý, ContextResetScope, ResetContext |
Šĥàŕé (share) | ĥöŵ ƒàŕ ţĥé þŕöĵéçţ'š çöñţéẋţ ŕéàçĥéš, àš ţĥŕéé ŕüñĝš (ƃéļöŵ) | ProjectSharing, SetProjectSharing, SyncProjectContext |
Éàçĥ îđ îš ŕöüţàƃļé, šö à þéŕšîšţéđ ṽîéŵ àñđ à ļîñķ ƒŕöḿ ţĥé ĥöḿé öŕ ţĥé
Öṽéŕṽîéŵ ļàñđ öñ îţš šéçţîöñ. Éàçĥ šéçţîöñ ñàḿéš ţĥé çöḿḿàñđ ţĥàţ đöéš ţĥé šàḿé öñ ţĥé
çöḿḿàñđ ļîñé, àš à çĥîþ àţ ţĥé ŕîĝĥţ öƒ ţĥé šéçţîöñ ƃàŕ: kapi context review, kapi context atlas, kapi context log, kapi context sync, kapi connect.
Ţĥé ṽöîçé šéçţîöñ ŕéšöļṽéš éṽéŕý þöîñţ ţĥé ŕéçîþé đéçļàŕéš ţŵîçé: àš đéçļàŕéđ, àñđ àţ ţĥé ĝöṽéŕñàñçé îñšţàñţ. À ƃîñđîñĝ ŵĥöšé ŵîñđöŵ éẋçļüđéđ ţĥé îñšţàñţ îš đŕàŵñ àš à šķîþþéđ ŕüñĝ ŵîţĥ îţš ƃöüñđàŕý đàţé àñđ ŵĥàţ ĝöṽéŕñš îñ îţš þļàçé.
Ţĥé ţéŕḿš àñđ ḿéḿöŕý þàĝéš ƃŕöŵšé àñđ àüđîţ. Ḿöṽîñĝ šţöŕé çöñţéñţš îñ àñđ öüţ
àš ƒîļéš îš ţĥé ÇĻÎ'š ĵöƃ (kapi memory, kapi terms), šö ţĥé đéšķţöþ öƒƒéŕš
ñö îḿþöŕţ öŕ éẋþöŕţ çöñţŕöļ, àñđ scripts/check-desktop-interchange.sh ķééþš
öñé ƒŕöḿ ŕéţüŕñîñĝ. Ţĥé ṽîéŵ îđš ţĥé šţöŕé ţàƃš ĥàđ ƃéƒöŕé ţĥé ĥüƃ šţàý
ŕöüţàƃļé šö à
þéŕšîšţéđ ṽîéŵ šţîļļ ļàñđš, àñđ ţĥé àđ-ĥöç ŕàîļ ķééþš ƃöţĥ šţöŕéš, ĥàṽîñĝ ñö
þŕöĵéçţ ţö ƒîļé ţĥéḿ üñđéŕ.
Éẋþļöŕîñĝ ţĥé çöñţéẋţ
Éẋþļöŕé ļöàđš ţĥé þŕöĵéçţ öñçé þéŕ ṽîšîţ ţĥŕöüĝĥ ProjectContextAtlas, ŵĥîçĥ
ŕéţüŕñš ţĥé kapi context atlas --json đöçüḿéñţ
(ţĥé àţļàš çöñţŕàçţ): ţĥé
àẋéš, éṽéŕý ŕéçöŕđ ŵîţĥ îţš ƒüļļ šţàţüš ĥîšţöŕý, àñđ ţĥé đàţéđ éṽéñţš. Ƒöŕ à
ţàƃ ŵîţĥ à çĥéçķöüţ, ţĥé đöçüḿéñţ îñçļüđéš ţĥé çöñţéñţ çéļļš. Ƒöŕ à
çöñţéẋţ-öñļý ţàƃ, îţ îš ƃüîļţ ƒŕöḿ ţĥé ļöĝ àñđ ţĥé šţöŕéš öñļý. Ţĥé ƒŕöñţéñđ
đŕàŵš éṽéŕý ṽîéŵ ƒŕöḿ ţĥàţ öñé đöçüḿéñţ, šö ḿöṽîñĝ ţĥé ŵîñđöŵ, ţĥé çöļüḿñš öŕ
ţĥé šñàþšĥöţ ḿàķéš ñö ƃàçķéñđ çàļļ.
@neokapi/context-atlas çöñţàîñš ţĥé ṽîéŵš àñđ à Ŕéàçţ-ƒŕéé ḿöđéļ ƃéšîđé ţĥéḿ.
Ţĥé ḿöđéļ îḿþļéḿéñţš:
- ţĥé ǫüéŕý: ÖŔ ŵîţĥîñ àñ àẋîš, ÀÑĐ àçŕöšš àẋéš, à ŵîñđöŵ, à šñàþšĥöţ ţĥàţ ƒöļļöŵš ţĥé ŵîñđöŵ'š éñđ, àñđ ţĥé ŕéçöŕđéđ öŕ ţĥé 郃éçţîṽé çļöçķ;
- ţĥé šţàţé öƒ éàçĥ ŕéçöŕđ àţ àñ îñšţàñţ;
- ţĥé đéŕîṽéđ àẋéš: šţàţé àţ ţĥé ŵîñđöŵ'š šţàŕţ àñđ àţ ţĥé šñàþšĥöţ, ļîƒéţîḿé, àñđ àĝé;
- ţĥé àđĵàçéñţ-þàîŕ ļàýöüţ öƒ ţĥé ƒļöŵ àñđ ţĥé À/Ƃ çöḿþàŕîšöñ.
À ţéšţ, à ĥöšţ öŕ àñ àĝéñţ çàñ ţĥéŕéƒöŕé éṽàļüàţé àñ éẋþöŕţéđ îñṽéšţîĝàţîöñ
àĝàîñšţ ţĥé šàḿé đàţà ŵîţĥöüţ ŕéñđéŕîñĝ îţ. Ţĥé þàĝé îš àñ öṽéŕṽîéŵ ŵîţĥ à
šüþþöŕţîñĝ þàñé ƒöŕ ţĥé šéļéçţéđ ŕéçöŕđ (packages/ui/docs/page-patterns.md).
Šéļéçţîñĝ àñ éṽîđéñçé þàţĥ öþéñš Àšķ àţ ţĥàţ ƒîļé.
Ţĥé ḿàþ đŕàŵš à ĝéö àẋîš öṽéŕ ţĥé þļàçéš îñ ţĥé àţļàš
(Ç-12). Îţš đéƒàüļţ ḿöđé îš Šĥàþéš, ŵĥîçĥ
đŕàŵš ŕéàļ öüţļîñéš. Îţ šţàŕţš àţ ţĥé ñàŕŕöŵéšţ ŕéĝîöñ, çöüñţŕý öŕ þļàçé ḿàđé
öƒ çöüñţŕîéš ţĥàţ çöñţàîñš éṽéŕý đéçļàŕéđ þļàçé àñđ éṽéŕý þļàçé çöñţéñţ šîţš
àţ, šö à ñöţé ķéþţ ƒöŕ à đîšţàñţ ḿàŕķéţ đöéš ñöţ ŵîđéñ ţĥé ƒîŕšţ ṽîéŵ. Ŵîţĥ
ţĥé ĝéö àẋîš ƒîļţéŕéđ, öŕ îñ à þŕöĵéçţ ţĥàţ ñàḿéš ñö þļàçé ƃéļöŵ ţĥé ŵöŕļđ,
îţ šţàŕţš àţ ţĥé ñàŕŕöŵéšţ šüçĥ þļàçé ţĥàţ çöñţàîñš ţĥé šéļéçţéđ ŕéçöŕđš. Îţ
đŕîļļš ƒŕöḿ ţĥé ŵöŕļđ ţö à çöüñţŕý, ţö îţš šüƃđîṽîšîöñš àñđ
ţö ţĥé þŕöĵéçţ'š öŵñ þļàçéš, ŵîţĥ à ƃŕéàđçŕüḿƃ ƃüîļţ ƒŕöḿ ţĥé þļàçé'š þàţĥ. À
þļàçé îš ƒîļļéđ ŵĥéñ ŕéçöŕđš šîţ ŵîţĥîñ îţ. Îţ îš ĥàţçĥéđ ŵĥéñ à ŕéçöŕđ àţ à
ŵîđéŕ þļàçé, öŕ àţ à þļàçé ḿàđé öƒ þļàçéš ţĥàţ çöṽéŕš îţ, ĥöļđš ţĥéŕé. Ŕéçöŕđš
àţ world àŕé šĥöŵñ àš öñé Ĥéļđ éṽéŕýŵĥéŕé çöüñţ îñšţéàđ öƒ à ĥàţçĥ öṽéŕ
ţĥé ĝļöƃé. À đéçļàŕéđ þļàçé îš đŕàŵñ ƒŕöḿ îţš öŵñ ĝéöḿéţŕý, éļšé àš à çîŕçļé àţ
îţš çéñţŕöîđ, éļšé ļîšţéđ ƃéšîđé ţĥé ḿàþ. Ţĥé ḿàþ ƒļàĝš à đéçļàŕéđ þļàçé ŵĥöšé
çéñţŕöîđ ƒàļļš öüţšîđé ţĥé öüţļîñé öƒ ţĥé þļàçé îţ šîţš ŵîţĥîñ. Þļàçéš ḿàđé öƒ
þļàçéš àŕé çĥîþš ƃéšîđé ţĥé ḿàþ, àñđ ĥöṽéŕîñĝ öṽéŕ öñé öüţļîñéš îţš ḿéḿƃéŕš.
Ţĥé šîđé ļîšţ šĥöŵš, ƒöŕ éàçĥ þļàçé, ţĥé ŕéçöŕđš Ĥéŕé àñđ ţĥé ŕéçöŕđš Ĥéļđ
ţĥŕöüĝĥ à ŵîđéŕ þļàçé. Éṽéŕý þļàçé îñ ţĥé ļîšţ îš à ƃüţţöñ ŵîţĥ àñ àççéššîƃļé
ñàḿé àñđ çöüñţ. Ŵĥéñ ţĥé ṽîéŵ ĥàš üþ ţö 30 þļàçéš, ţĥé ļîšţ šĥöŵš àļļ öƒ ţĥéḿ,
šö à çöüñţý çàñ ƃé þîçķéđ ƃý ñàḿé. Îñ à ļàŕĝéŕ ṽîéŵ, šüçĥ àš ţĥé ŵöŕļđ'š
çöüñţŕîéš, ţĥé ļîšţ šĥöŵš öñļý ţĥé þļàçéš ţĥàţ ĥàṽé ŕéçöŕđš ŵîţĥîñ ţĥéḿ, ţĥàţ
ţĥé ḿàþ çàññöţ đŕàŵ, öŕ ţĥàţ àŕé ƒļàĝĝéđ. Šéļéçţîñĝ à þļàçé ƒîļţéŕš ţö ţĥé
ŕéçöŕđš àţ éṽéŕý þļàçé ţĥàţ öṽéŕļàþš îţ, ƃý ţĥé šàḿé öṽéŕļàþ ŕüļé àš ţĥé
éñĝîñé. Ĝŕîđ đŕàŵš öñé éǫüàļ ţîļé þéŕ çöüñţŕý îñšţéàđ, ƒöŕ çöḿþàŕîñĝ
çöüñţš îñđéþéñđéñţļý öƒ ļàñđ àŕéà. Ţĥé öüţļîñéš àŕé Ñàţüŕàļ Éàŕţĥ đàţà ţĥàţ
šĥîþ îñ @neokapi/context-atlas, ļöàđéđ þéŕ çöüñţŕý àš ţĥé ḿàþ đŕîļļš îñ.
Ţĥé ƒééđ öƒ ŕéçöŕđéđ çöñţéẋţ öþéŕàţîöñš
Ţĥé àþþ îš ḿéàñţ ţö šîţ öþéñ ƃéšîđé àñ àĝéñţ ţĥàţ îš ŵöŕķîñĝ. Ţĥé àĝéñţ ŕüñš îñ àñöţĥéŕ þŕöçéšš, ţĥŕöüĝĥ ţĥé ÇĻÎ öŕ îţš ḾÇÞ šéŕṽéŕ, àñđ ŕéçöŕđš ŵĥàţ îţ ļéàŕñš àš çöñţéẋţ öþéŕàţîöñš îñ ţĥîš ḿàçĥîñé àççöüñţ'š ŵöŕķšþàçé ļöĝ (Ç-11). Ţĥé đéšķţöþ ŕéàđš ţĥàţ ļöĝ àñđ šĥöŵš îţ îñ ƒöüŕ þļàçéš: àš éàçĥ þŕöĵéçţ'š ǫüéšţîöñš îñ îţš Đéçîđé šéçţîöñ, àš ţĥé šéššîöñš öñ îţš Àššîšţàñţš þàĝé àñđ îñ îţš Šéššîöñš šéçţîöñ, àñđ àš ţĥé ŵöŕķšþàçé-ŵîđé Ĥîšţöŕý ṽîéŵ ţĥé ĥöḿé ļîñķš ţö, ŵĥîçĥ îš ţĥé šàḿé ƒééđ ŕéàđ ŵîţĥ ñö þŕöĵéçţ ķéý.
Ţĥé ƒééđ ĝŕöüþš ƃý šéššîöñ. Àñ àĝéñţ šéššîöñ îš ţĥé îđ îţš öþéŕàţîöñš çàŕŕý, šö öñé ŕüñ îš öñé çàŕđ ĥöŵéṽéŕ ļöñĝ îţ ļàšţš. À þéŕšöñ àţ à ţéŕḿîñàļ àñđ à ţööļ ŕéçöŕđ ñö šéššîöñ, šö ţĥéîŕ öþéŕàţîöñš ĝŕöüþ ƃý àçţöŕ àñđ ļöçàļ đàý, ŵĥîçĥ îš ţĥé šþàñ à þéŕšöñ ŕéçöĝñîšéš àš ţĥéîŕ öŵñ ŵöŕķ. Éàçĥ çàŕđ çàŕŕîéš ţĥé çöüñţš à ƒîñîšĥéđ šéššîöñ ŕéàđš öüţ îñ öñé ļîñé (šüĝĝéšţîöñš, çöŕŕéçţîöñš, ķéþţ àñđ đŕöþþéđ), àñđ šàýš "šţîļļ ŵöŕķîñĝ" üñţîļ ñöţĥîñĝ ĥàš ƃééñ àđđéđ ƒöŕ ţŵö ḿîñüţéš.
Éàçĥ öþéŕàţîöñ šĥöŵš îţš ķîñđ, îţš àçţöŕ ŵîţĥ ţĥé ḿàçĥîñé àñ àĝéñţ ŕàñ öñ, ţĥé
ŕüļé öŕ ŵöŕđîñĝ îţ îš àƃöüţ, îţš šţàţüš (suggested, established,
contested, withdrawn, dropped öŕ reset, ŵîţĥ à çöñţéšţéđ éñţŕý
ŕéàđîñĝ "Çöñţéšţéđ ƃý #ñ"), àñđ îţš éṽîđéñçé: ţĥé ƒîļé, ţĥé ƃļöçķ àñđ ţĥé
ǫüöţàţîöñ. Éṽîđéñçé îš öñ ţĥé çàŕđ ŕàţĥéŕ ţĥàñ ƃéĥîñđ à đîšçļöšüŕé ƒöŕ
àñýţĥîñĝ àŵàîţîñĝ à đéçîšîöñ, šö ŕéṽîéŵéŕš çàñ àššéšš ţĥé šüþþöŕţîñĝ ţéẋţ.
Đéçîđîñĝ ĝöéš ţĥŕöüĝĥ ţĥé ĥöšţ ÀÞÎ àñđ ñöţĥîñĝ éļšé. Ķééþ, ķééþ ŵîţĥ àñ
éđîţ, đŕöþ à šüĝĝéšţîöñ öŕ à ŕüļé îñ ƒöŕçé, ŵîđéñ, àñđ ŕéšéţ ţĥé çöñţéẋţ ţö
ƃéƒöŕé à šéššîöñ àŕé ţĥé ƃàçķéñđ'š KeepContextSuggestion,
DropContextSuggestion, WidenContextRule àñđ ResetContext, ŵĥîçĥ çàļļ
host.App.KeepContextOperation àñđ ţĥé ĥöšţ'š öţĥéŕ çöñţéẋţ öþéŕàţîöñš. À
ŕéšéţ îš çöñƒîŕḿéđ ƒîŕšţ: ContextResetScope ļîšţš ŵĥàţ îţ ŵöüļđ šéţ àšîđé,
àñđ ţĥé ŕüļéš àḿöñĝ ţĥéḿ, ŵîţĥöüţ ŕéçöŕđîñĝ àñýţĥîñĝ.
Ţĥé ĥöšţ öŵñš ţĥé þöļîçý àƃöüţ ŵĥö ḿàý đö ŵĥàţ; ţĥé đéšķţöþ ŕé-îḿþļéḿéñţš ñöñé öƒ îţ. Ţĥé àçţîñĝ àçţöŕ îš
contextop.Actor{Kind: ActorPerson} ŵîţĥ ñö ñàḿé, ƃéçàüšé ţĥé àþþ ĥöļđš ñö
àççöüñţ àñđ ţĥé þéŕšöñ àţ ţĥé ķéýƃöàŕđ îš ţĥé öñé àçţîñĝ. Ŕéàđîñĝ îš
contextop.Ledger öṽéŕ ţĥé ŵöŕķšþàçé, ƃéçàüšé ţĥé ĥöšţ'š ŕéàđš ŕéšöļṽé à
þŕöĵéçţ ƒŕöḿ à ŕéçîþé þàţĥ àñđ ţĥé ĥöḿé šçŕééñ šþàñš þŕöĵéçţš, šöḿé öƒ ŵĥîçĥ
ĥàṽé ñö çĥéçķöüţ öñ ţĥîš ḿàçĥîñé. À þŕöĵéçţ ŵîţĥ ñö ŕéàđàƃļé çĥéçķöüţ îš ŕéàđ
ĥéŕé àñđ ñöţ đéçîđéđ öñ, àñđ ţĥé çàŕđ šàýš šö.
Ŵîđéñîñĝ ŕéǫüîŕéš çöñƒîŕḿàţîöñ. Ţĥé þŕéṽîéŵ ļîšţš àƒƒéçţéđ þŕöĵéçţš ƒöŕ ŵöŕķšþàçé šçöþé, öŕ ñéŵļý çöṽéŕéđ ŕéçîþé þöîñţš ŵĥéñ ŕéḿöṽîñĝ àñ àẋîš ŕéšţŕîçţîöñ. Îţ éẋþļîçîţļý šţàţéš ţĥàţ àƒƒéçţéđ çöñţéñţ ĥàš ñöţ ƃééñ çöüñţéđ; ţĥé ƃàçķéñđ đöéš ñöţ þŕöṽîđé ţĥàţ çöüñţ.
Ţĥé ķéýš àŕé ţĥé ŕéṽîéŵ šéššîöñ'š, šö ţĥé ţŵö đéçîšîöñ šüŕƒàçéš ƒééļ ţĥé šàḿé:
j/k àñđ ţĥé àŕŕöŵš ḿöṽé öṽéŕ ţĥé šüĝĝéšţîöñš, a ķééþš, r đŕöþš, e
öþéñš ţĥé éđîţ, àñđ à ƒîéļđ ŵîţĥ ƒöçüš ķééþš îţš öŵñ ķéýš. À çöñţéšţéđ
šüĝĝéšţîöñ çàñ ƃé đŕöþþéđ àţ öñçé àñđ ķéþţ öñļý àƒţéŕ à þéŕšöñ đŕöþš ţĥé öţĥéŕ
šîđé. Ţĥé ŵöŕķšþàçé ŵàţçĥéŕ îš ŵĥàţ ķééþš ţĥé ƒééđ çüŕŕéñţ, šö à šüĝĝéšţîöñ
ŕéçöŕđéđ éļšéŵĥéŕé àþþéàŕš ŵîţĥîñ à šéçöñđ. Ţĥé þŕéṽîöüš àñšŵéŕ šţàýš ḿöüñţéđ ţĥŕöüĝĥ ţĥé ŕéƒéţçĥ, ŵĥîçĥ îš ŵĥàţ
ķééþš ţĥé šçŕöļļ þöšîţîöñ àñđ à ĥàļƒ-ţýþéđ éđîţ ţĥŕöüĝĥ àñ àĝéñţ ŕéçöŕđîñĝ îñ
ţĥé ḿîđđļé öƒ îţ.
Ţĥé ĥöḿé'š Ŵĥàţ'š ñéŵ ŕöŵš çàŕŕý ŵĥàţ éàçĥ þŕöĵéçţ'š đîĝéšţ ĥöļđš ţĥàţ ţĥé
þéŕšöñ ĥàš ñöţ šééñ (host.App.ContextStandings, öñé ƒöļđ öƒ ţĥé ļöĝ ƒöŕ éṽéŕý
ŕéĝîšţéŕéđ þŕöĵéçţ). À þŕöĵéçţ ŵîţĥ ñöţĥîñĝ ñéŵ ĥàš ñö ŕöŵ: ţĥé ĥöḿé çàŕŕîéš ñö
çöüñţ öƒ ŵöŕķ ŵàîţîñĝ.
Đéçîđé
À þŕöĵéçţ'š Çöñţéẋţ ĥüƃ öþéñš öñ Đéçîđé, ţîţļéđ ŵîţĥ ţĥé þŕöĵéçţ'š ñàḿé,
ŵîţĥ ţĥé ñüḿƃéŕ öƒ šüĝĝéšţîöñš ţö đéçîđé àñđ ţĥé ñüḿƃéŕ öƒ ŕüļéš ķéþţ. Ţĥé Öṽéŕṽîéŵ
öþéñš îţ ţöö, šéļéçţîñĝ ţĥé ŕöŵ à þéŕšöñ çĥöšé ţĥéŕé (conflict:<id> öŕ
suggested:<id>, ḿàţçĥéđ àĝàîñšţ à ǫüéšţîöñ'š öŵñ îđ öŕ öñé öƒ îţš šîđéš').
Đéçîđîñĝ ţĥéŕé îš đîšçöṽéŕý, ñéṽéŕ à ĝàţé: à šüĝĝéšţîöñ àđṽîšéš àĝéñţš àñđ
çĥéçķš ƒŕöḿ ţĥé ḿöḿéñţ îţ îš ŕéçöŕđéđ, àñđ öñé ñöƃöđý àñšŵéŕš ķééþš àđṽîšîñĝ.
Ţĥé þàĝé îš à ļîšţ ƃéšîđé à đéţàîļ þàñé. Ţĥé ļîšţ ĥöļđš öñé ŕöŵ þéŕ šüĝĝéšţîöñ
ŵàîţîñĝ ƒöŕ à þéŕšöñ: îţš ķîñđ àš à KindIcon, ţĥé ŵöŕđîñĝ îţ îš àƃöüţ, àñđ
ĥöŵ ḿüçĥ îţ çöṽéŕš (3 forms, 1 word, 1 of 1 blocks ƒöŕ à đîšàĝŕééḿéñţ).
Ţĥé þàñé àšķš öñé ǫüéšţîöñ àƃöüţ ţĥé šéļéçţéđ ŕöŵ. RulesDecideView àñšŵéŕš
ŵîţĥ ţĥé ǫüéšţîöñš kapi rules àšķš (host.App.DecideRules), šö ţĥé ţéŕḿîñàļ
àñđ ţĥé đéšķţöþ àšķ ţĥé šàḿé ţĥîñĝ îñ ţĥé šàḿé öŕđéŕ:
| Šüĝĝéšţîöñ | Ţĥé ǫüéšţîöñ àñđ îţš öþţîöñš |
|---|---|
| À ñàḿé | "Ŵĥîçĥ öñé đö ýöüŕ ƒîļéš üšé?": éàçĥ ƒöŕḿ ŵîţĥ ţĥé ƃļöçķš àñđ ƒîļéš öƒ ţĥé þŕöĵéçţ'š šöüŕçé ţĥàţ ŵŕîţé îţ, ţĥé ḿöšţ üšéđ ƒîŕšţ, àñđ Öţĥéŕ… ƒöŕ à ƒöŕḿ ţĥé þéŕšöñ ţýþéš |
| À ŵöŕđ, à ñöţé öŕ à çöñţéñţ-ḿéḿöŕý þàîŕ | "Ķééþ ţĥîš àš à ŕüļé?", ŵîţĥ ñö öþţîöñš |
| À đîšàĝŕééḿéñţ | "Ŵĥîçĥ öñé ĥöļđš?" (öŕ "Ŵĥîçĥ öñé đö ýöüŕ ƒîļéš üšé?" ƒöŕ ţŵö ñàḿéš): öñé öþţîöñ þéŕ šîđé, éàçĥ ŵîţĥ ŵĥö šüĝĝéšţéđ îţ, îţš ƃļöçķš àñđ ƒîļéš, àñđ ŵĥàţ ķééþîñĝ îţ đöéš |
Ƃéƒöŕé ţĥé àçţîöñš, à ļîñé šţàţéš ŵĥàţ ķééþîñĝ ţĥé þîçķéđ öþţîöñ đöéš: ţĥé
ƃļöçķš à çĥéçķ ţĥéñ ŕéþöŕţš, àñđ ŵĥéŕé ţĥé ŕüļé àþþļîéš ("΃ ýöü ķééþ
"ĶàþîḾàŕţ": ñö ƃļöçķ üšéš ţĥé öţĥéŕ 2 ƒöŕḿš. Àþþļîéš ţö Ŵéƃšîţé."). À ƒöŕḿ
ţýþéđ üñđéŕ Öţĥéŕ… îš çöüñţéđ ţĥŕöüĝĥ RulesDecideConsequence, öṽéŕ ţĥé
ƃļöçķš ţĥé ļàšţ ŕéàđ çöüñţéđ. Ƃéļöŵ ţĥé àçţîöñš, Šééñ îñ ǫüöţéš ţĥé
šéñţéñçé ţĥé šüĝĝéšţîöñ ŵàš šééñ îñ, ñàḿéš ţĥé ƒîļé (ŵĥîçĥ öþéñš Àšķ ţĥéŕé),
àñđ šĥöŵš ŵĥö ƒîļéđ îţ.
Ķééþ (k), Ñöţ à ŕüļé (n) àñđ Ļàţéŕ (l) àñšŵéŕ; ţĥé öþţîöñ
ñüḿƃéŕš þîçķ àñ öþţîöñ. DecideRule(tabID, id, answer, form) ŕéçöŕđš ţĥé
àñšŵéŕ ţĥŕöüĝĥ host.App.DecideRule, ŵĥîçĥ ḿàķéš ţĥé çàļļš kapi rules ḿàķéš
ƒöŕ ţĥé šàḿé ķéýš: à ķééþ îš DecideContextReview ŵîţĥ ţĥé šüĝĝéšţîöñ ķéþţ îñ
ţĥé þîçķéđ ƒöŕḿ, öŕ ŵîţĥ ţĥé þîçķéđ šîđé çĥöšéñ; Ñöţ à ŕüļé đŕöþš ţĥé
šüĝĝéšţîöñ, öŕ éṽéŕý šîđé öƒ à đîšàĝŕééḿéñţ; Ļàţéŕ ŕéçöŕđš ñöţĥîñĝ àñđ ļéàṽéš
ţĥé šüĝĝéšţîöñ àđṽîšîñĝ, àñđ ţĥé þàĝé ļéàṽéš îţ öüţ üñţîļ îţ îš öþéñéđ àĝàîñ.
Ţĥé ƒîŕšţ ķééþ ŵŕîţéš ţĥé ŕéçîþé öƒ à ƒöļđéŕ öþéñéđ ŵîţĥöüţ öñé. Àƒţéŕ éàçĥ
àñšŵéŕ ţĥé ñéẋţ ǫüéšţîöñ îš šéļéçţéđ, àñđ ŵîţĥ ñöñé ļéƒţ ţĥé þàĝé šàýš
"Ñöţĥîñĝ ţö đéçîđé." ŵîţĥ ţĥé ñüḿƃéŕ öƒ ŕüļéš ķéþţ àñđ à ļîñķ ţö ţĥé Öṽéŕṽîéŵ.
Çöüñţîñĝ ŕéàđš éṽéŕý ƃļöçķ öƒ ţĥé þŕöĵéçţ'š šöüŕçé öñçé þéŕ ṽîéŵ. Ţĥé ţàƃ
ĥöļđš ţĥé ļàšţ ṽîéŵ, àñđ ţĥé ñéẋţ ŕéàđ çöüñţš öṽéŕ îţš ƃļöçķš àĝàîñ ŵĥîļé ñö
šöüŕçé ƒîļé àñđ ñöţ ţĥé ŕéçîþé ĥàš çĥàñĝéđ (ƃý þàţĥ, šîžé àñđ ḿöđîƒîçàţîöñ
ţîḿé), šö àñ àñšŵéŕ đöéš ñöţ çöšţ à ŕéàđ öƒ éṽéŕý ƒîļé. Ţĥé þàĝé ŕéàđš àĝàîñ
öñ workspace:changed, project-files-changed àñđ project:extracted.
"Šîñçé ýöü ļàšţ ļööķéđ" îš à ḿàŕķéŕ þéŕ þŕöĵéçţ îñ ţĥîš ḿàçĥîñé àççöüñţ'š ķàþî
çöñƒîĝ (context-digest.json üñđéŕ ţĥé çöñƒîĝ ŕööţ), ñéṽéŕ îñ ţĥé ļöĝ. Ţĥé
ĥöḿé'š Ŵĥàţ'š ñéŵ öþéñš à þŕöĵéçţ öñ Đéçîđé ŵĥîļé à šüĝĝéšţîöñ öŕ à
đîšàĝŕééḿéñţ ŵàîţš ţĥéŕé, àñđ öñ Šéššîöñš öţĥéŕŵîšé. Đéçîđé ḿöṽéš ţĥé ḿàŕķéŕ
öñçé îţ šĥöŵš à ǫüéšţîöñ, àñđ Šéššîöñš ḿöṽéš îţ àš îţ öþéñš, šîñçé îţ ļîšţš
éṽéŕý öþéŕàţîöñ.
À ţàƃ ŵîţĥ ñö çĥéçķöüţ öñ ţĥîš ḿàçĥîñé ĥàš ñö šöüŕçé ţö çöüñţ üšéš îñ. Îţš
Đéçîđé šéçţîöñ šĥöŵš ţĥé đîĝéšţ îñšţéàđ (host.App.ContextDigest, ţĥé çàļļ
kapi context review ļîšţš): ţĥé çöñƒļîçţš, ţĥé šüĝĝéšţîöñš ƃý ţĥéḿé, ţĥé
ŕüļéš îñ ƒöŕçé àñđ ţĥé đŕîƒţ, ŵîţĥöüţ ţĥé đéçîšîöñš. Ŕüļéš àļŕéàđý îñ ƒöŕçé àŕé
đŕöþþéđ àñđ ŵîđéñéđ ƒŕöḿ Šéššîöñš.
Šĥàŕîñĝ àñđ ţĥé ļàđđéŕ öƒ ŕéàçĥ
Šĥàŕé šĥöŵš ĥöŵ ƒàŕ à þŕöĵéçţ'š çöñţéẋţ ŕéàçĥéš, àš ţĥŕéé ŕüñĝš: öñ ţĥîš ḿàçĥîñé, šĥàŕéđ ţĥŕöüĝĥ à ƃàçķéñđ, àñđ à ḿàñàĝéđ ṽéñüé. Ţĥé çüŕŕéñţ ŕüñĝ îš ḿàŕķéđ, àñđ ţĥé þŕöĵéçţ ŕöŵš öñ ţĥé ĥöḿé çàŕŕý ţĥé šàḿé àñšŵéŕ àš öñé ŵöŕđ.
Ţĥé ƃàçķéñđ ŕéšöļṽéš îţ ţĥŕöüĝĥ host. ResolveContextBackend ŕéţüŕñš ţĥé
ContextBackendInfo ţĥé ŕéçîþé đéçļàŕéš: ţĥé ķîñđ, îţš ļöçàţîöñ, àñđ ŵĥéţĥéŕ
îţ çàḿé ƒŕöḿ ţĥé ŕéçîþé öŕ ţĥé đéƒàüļţ. ContextSyncStatus ŕéţüŕñš ĥöŵ ƒàŕ
àþàŕţ ţĥîš ḿàçĥîñé àñđ ţĥé šĥàŕéđ çöþý ŵéŕé àţ ţĥé ļàšţ šýñç, ŵîţĥöüţ
çöñţàçţîñĝ ţĥé ƃàçķéñđ. ProjectSharing ƒöļđš ţĥé ţŵö ŵîţĥ ţĥé ŵöŕķšþàçé
đîŕéçţöŕý öñ ţĥîš ḿàçĥîñé àñđ ţĥé ṽéñüé ţĥé ŕéçîþé đéçļàŕéš îñţö öñé àñšŵéŕ. À þŕöĵéçţ
ŵîţĥ ñö ŕéàđàƃļé çĥéçķöüţ ĥéŕé îš local, ƒŕöḿ ţĥé đéƒàüļţ.
Ţĥé ƒîŕšţ ŕüñĝ îš ţĥé ŵöŕķšþàçé îţšéļƒ
(Ç-03): éṽéŕý çļöñé àñđ ŵöŕķţŕéé
öƒ ţĥé þŕöĵéçţ öñ ţĥîš ḿàçĥîñé ŕéàđš ţĥé šàḿé çöñţéẋţ šţöŕé. Ţĥé šéçöñđ öƒƒéŕš
ţĥé ţĥŕéé ƃàçķéñđš Ç-03 đéƒîñéš: git, à ŕéƒ öƒ ţĥé þŕöĵéçţ'š öŵñ ŕéþöšîţöŕý
öüţšîđé éṽéŕý ƃŕàñçĥ; file, à đîŕéçţöŕý; àñđ s3, à ƃüçķéţ ŵîţĥ à þŕéƒîẋ, à
ŕéĝîöñ àñđ àñ éñđþöîñţ. Šéţ üþ šĥàŕîñĝ îš SetProjectSharing, ŵĥîçĥ ŵŕîţéš
ţĥé context: ƃļöçķ îñţö ţĥé ţàƃ'š ŕéçîþé ţĥŕöüĝĥ ţĥé šàḿé þŕöĵéçţ üþđàţé þàţĥ
à Þŕöĵéçţ Šéţţîñĝš éđîţ ţàķéš, šö üñđö, ŕéđö àñđ ţĥé ƒîļé ŵàţçĥéŕ šéé îţ, àñđ
ŵĥîçĥ ŕéƒüšéš àñ üñķñöŵñ ķîñđ îñ ţĥé ŵöŕđš ţĥé ÇĻÎ üšéš. Çŕéđéñţîàļš šţàý öüţ
öƒ ţĥé ŕéçîþé: éàçĥ ƃàçķéñđ ŕéàđš îţš öŵñ àççéšš öñ ţĥé ḿàçĥîñé. Šýñç ñöŵ
îš öñé host.App.SyncProjectContext, ţĥé çàļļ kapi context sync ḿàķéš: þüļļ
àñđ ḿéŕĝé, þüšĥ, àñđ ŕéŵŕîţé ţĥé ŕüļéš ƒîļéš. Ŵĥéñ ţĥé ƃàçķéñđ çàññöţ ƃé
ŕéàçĥéđ, ţĥé ĥöšţ'š éŕŕöŕ îš šĥöŵñ üñçĥàñĝéđ àñđ ñöţĥîñĝ çĥàñĝéš öñ ţĥîš
ḿàçĥîñé. À šýñç ţĥàţ ḿéŕĝéđ àñýţĥîñĝ éḿîţš workspace:changed, šö ţĥé ĥöḿé
ŕéƒéţçĥéš.
Ţĥé ţĥîŕđ ŕüñĝ îš ţĥé çöñṽéŕĝéñçé ṽéñüé ţĥé ŕéçîþé đéçļàŕéš, ŕéàđ ţĥé ŵàý ţĥé ŕüññéŕ ŕéàđš îţ. À ṽéñüé àñđ à ƃàçķéñđ àŕé šéþàŕàţé ķéýš öƒ ţĥé ŕéçîþé: ţĥé ƃàçķéñđ îš ŵĥéŕé ţĥé çöñţéẋţ'š öþéŕàţîöñš àŕé šĥàŕéđ, àñđ ţĥé ṽéñüé îš ŵĥéŕé ţĥé þŕöĵéçţ çöñṽéŕĝéš àñđ à ţéàḿ ŕéṽîéŵš. Ţĥé ŕüñĝ šĥöŵš ŵĥéţĥéŕ à ṽéñüé îš đéçļàŕéđ àñđ ŵĥéŕé îţ þöîñţš, àñđ öƒƒéŕš ñö šýñç öƒ îţš öŵñ.
Çöññéçţîñĝ àñ àššîšţàñţ
Ţĥé Àššîšţàñţš šéçţîöñ ĥàš öñé ŕöŵ ƒöŕ éàçĥ àššîšţàñţ kapi connect ķñöŵš
(Çļàüđé Çöđé, Çüŕšöŕ, ṼŠ Çöđé, Çöđéẋ, Àĝéñţ šķîļļš) àñđ öñé ƒöŕ Çļàüđé
Đéšķţöþ. AssistantsView ŕéàđš ţĥé ŕöŵš ţĥŕöüĝĥ host.App.ConnectHosts ŵîţĥ
HostsOnly: à đŕý ŕüñ öṽéŕ éàçĥ àššîšţàñţ'š öŵñ ƒîļéš ţĥàţ þļàñš ñö ŕüļéš
ƒîļéš, ŕéšöļṽéš ñö çöñţéẋţ àñđ öþéñš ñö šţöŕé, šö ţĥé þàĝé çàñ ƃé ŕéàđ öñ
éṽéŕý ŵöŕķšþàçé çĥàñĝé. Àñ àššîšţàñţ îš çöññéçţéđ ŵĥéñ ţĥàţ ŕüñ ŵöüļđ ļéàṽé
éàçĥ öƒ îţš ƒîļéš àš îţ îš àñđ ţĥé þŕöĵéçţ'š ŕüļéš ƒîļéš ĥöļđ ķàþî'š šéçţîöñ
(host.HasRulesFiles); ŵîţĥ ţĥé ƒîļéš îñ þļàçé àñđ ţĥé ŕüļéš ƒîļéš ĝöñé, ţĥé
ŕöŵ ŕéàđš "ŕüļéš ƒîļéš ḿîššîñĝ" àñđ öƒƒéŕš Çöññéçţ. Ţĥé Çļàüđé Çöđé ŕöŵ ŕéþöŕţš
ţĥé þļüĝîñ'š çĥéçķ àš öñ öŕ þéñđîñĝ, àñđ ŵĥîļé þéñđîñĝ ñàḿéš ţĥé ţŵö çöḿḿàñđš
host.ClaudePluginCommands ŕéţüŕñš. ConnectAssistant ŕüñš ConnectHosts ƒöŕ
öñé àššîšţàñţ, àš kapi connect <assistant> đöéš, àƒţéŕ ţĥé đéšķţöþ ŵŕîţéš ţĥé
ŕéçîþé öƒ à ƒöļđéŕ öþéñéđ ŵîţĥöüţ öñé, šö îţ ŵŕîţéš ţĥé ƒîļéš ţĥé ÇĻÎ ŵŕîţéš:
ţĥé ŕüļéš ƒîļéš, ţĥé àššîšţàñţ'š ḾÇÞ éñţŕý àñđ îţš šķîļļ.
Çļàüđé Đéšķţöþ ŕéàđš öñé üšéŕ-ļéṽéļ ƒîļé, claude_desktop_config.json îñ îţš
àþþļîçàţîöñ-šüþþöŕţ đîŕéçţöŕý. Ţĥé ĥöšţ ļàýéŕ ŵŕîţéš öñļý îñšîđé à þŕöĵéçţ, šö
ţĥàţ éñţŕý îš ţĥé đéšķţöþ ƃàçķéñđ'š ţö ŵŕîţé, ţĥŕöüĝĥ ConnectAgentHost. Àƒţéŕ
ţĥé þéŕšöñ çöñƒîŕḿš, îţ àđđš à kapi šéŕṽéŕ éñţŕý ţĥàţ ñàḿéš ţĥé àƃšöļüţé þàţĥ
öƒ ţĥé kapi ƃîñàŕý àñđ ţĥé ŕéçîþé, àñđ ķééþš éṽéŕý öţĥéŕ ķéý îñ ţĥé ƒîļé.
Ƃéļöŵ ţĥé àššîšţàñţš, ţĥé þàĝé ļîšţš ţĥé ñéŵéšţ šéššîöñš öƒ ţĥé þŕöĵéçţ'š ƒééđ (ƃéļöŵ) ŵîţĥ ţĥéîŕ çöüñţš. Ţĥé àššîšţàñţš àñđ ţĥé šéššîöñš àŕé ŕéàđ àþàŕţ, šö à ƒàîļüŕé îñ öñé ļéàṽéš ţĥé öţĥéŕ öñ ţĥé þàĝé. À šéššîöñ öþéñš ţĥé Šéššîöñš šéçţîöñ öñ îţ.
Šĥöŵ ŵĥàţ îţ ŕéàđš, îñ ţĥé þàĝé ĥéàđéŕ, öþéñš ţŵö ţàƃš. Ţĥé ƒîŕšţ šĥöŵš ţĥé
ŕüļéš ƒîļéš (Ç-06) àš ķàþî ŵöüļđ
ŵŕîţé ţĥéḿ. RulesFiles ŕéàđš ţĥŕöüĝĥ à ŕéàđ-öñļý þļàññéŕ îñ host, ŵĥîçĥ
ŕéšöļṽéš ţĥé šéçţîöñš WriteRulesFiles ŵŕîţéš àñđ ŵŕîţéš ñöţĥîñĝ, šö öþéñîñĝ
ţĥé ţàƃ çĥàñĝéš ñö ƒîļé. Ŵŕîţé ţĥéḿ ñöŵ îš host.App.WriteRulesFiles. Ţĥé
šéçöñđ îš ţĥé ƃŕîéƒ ƒöŕ öñé ƒîļé, đéšçŕîƃéđ îñ ţĥé ĥüƃ'š ţàƃļé. À çöñţéẋţ-öñļý
ţàƃ ĥàš ñö çĥéçķöüţ ţö ŵŕîţé îñţö, šö îţ šĥöŵš ñö àššîšţàñţš àñđ ķééþš ţĥé
šéššîöñš.
Ĝöṽéŕñàñçé éđîţîñĝ
Þŕöĵéçţ Šéţţîñĝš çàŕŕîéš à Ĝöṽéŕñàñçé šéçţîöñ: ţĥé ṽöîçé þŕöƒîļé ƃöüñđ àš
defaults.voice, ţĥé đéçļàŕéđ àẋéš öƒ ţĥé þŕöĵéçţ'š đéƒàüļţ þöîñţ, ţĥé đéƒàüļţ
ƒļöŵ, àñđ ţĥé þàţĥš à çöñţéñţ šçàñ šķîþš. Ţĥé çöļļéçţîöñ éđîţöŕ šéţš ţĥé
çĥàññéļ à çöļļéçţîöñ ñàḿéš àñđ ţĥé àẋéš îţ đéçļàŕéš ţĥéŕé, àñđ à çöļļéçţîöñ ŕöŵ
šĥöŵš ţĥé þöîñţ îţ ŕéšöļṽéš ţö.
Ţĥé ŕéƒüšàļ ƒöŕ ţĥé šţŕüçţüŕàļ àẋéš ĥàš öñé ĥöḿé. product àñđ channel àŕé
đéŕîṽéđ ƒŕöḿ à çöļļéçţîöñ'š çĥàññéļ, šö ţĥé šéţţéŕ çàļļš
project.DeclarableAxis àñđ ţĥé đéšķţöþ šéŕṽéš ţĥé šàḿé éŕŕöŕ ţĥé ÇĻÎ đöéš;
ţĥé éđîţöŕ çàññöţ öƒƒéŕ àñ àẋîš kapi apply ŵöüļđ ŕéĵéçţ, öŕ ŵöŕđ ţĥé ŕéƒüšàļ
đéŕéñţļý (Ç-02).
Ţĥé ƃļöçķ çàçĥé ƒöļļöŵš ţĥé ƒîļéš
Ţĥé ƃļöçķ çàçĥé îñ .kapi/work/ îš ĥöŵ ţĥé àþþ ŕéàđš à þŕöĵéçţ, àñđ ƃüîļđîñĝ
îţ îš ļöçàļ ŵöŕķ ţĥàţ çàļļš ñö þŕöṽîđéŕ. Ţĥé àþþ ţĥéŕéƒöŕé ķééþš îţ çüŕŕéñţ
ŵîţĥöüţ à þéŕšöñ'š šţéþ. SyncProjectStore çöḿþàŕéš ţĥé ŕéšöļṽéđ šöüŕçé ƒîļéš
ŵîţĥ ţĥéîŕ éẋţŕàçţ-ţîḿé šţàḿþš (DetectStoreDrift) àñđ ŕüñš ţĥé šĥàŕéđ
ExtractToProjectStore þàţĥ öñļý ŵĥéñ ţĥé çàçĥé îš ḿîššîñĝ, ŵàš ŵŕîţţéñ ƃý
àñöţĥéŕ ķàþî ṽéŕšîöñ, öŕ đéŕš ƒŕöḿ ţĥé ƒîļéš. Ţĥé ƒŕöñţéñđ çàļļš îţ
ŵĥéñ à þŕöĵéçţ ţàƃ ƃéçöḿéš àçţîṽé àñđ àƒţéŕ ţĥé ƒîļé ŵàţçĥéŕ ŕéþöŕţš à çĥàñĝé.
Îţ ŕéţüŕñš ŵîţĥöüţ éẋţŕàçţîñĝ ŵĥîļé à ŕüñ ĥöļđš ţĥé þŕöĵéçţ, ƃéçàüšé
kapi up éẋţŕàçţš ƃéƒöŕé éàçĥ þàšš.
Ţĥé ĥéŕö, îţš ṽéŕƃ àñđ Þļàñ… àþþéàŕ öñļý ŵĥîļé ţĥé šàṽéđ ŕéçîþé đéçļàŕéš
à ţàŕĝéţ ļàñĝüàĝé, ţĥé àñšŵéŕ öƒ declaresTargetLanguages îñ
frontend/src/lib/languages.ts ţĥàţ Ŕéṽîéŵ àļšö ŕéàđš ţö çĥööšé ƃéţŵééñ îţš
ǫüéüé àñđ ţĥé ļàñĝüàĝéš šéçţîöñ. Öñ à
þŕöĵéçţ ŵîţĥöüţ öñé ţĥé ŕüññéŕ ŕöüţé öþéñš ñö Ƃŕîñĝ üþ ţö đàţé ṽîéŵ éîţĥéŕ.
Ţĥé Öṽéŕṽîéŵ ŕéþöŕţš ţĥé çàçĥé öñļý ƃý îţš 郃éçţ: ŵĥîļé îţ çàţçĥéš üþ,
ţĥé ĥéŕö ŕéàđš "Ŕéàđîñĝ ţĥé þŕöĵéçţ'š ƒîļéš…", àñđ à ƒàîļéđ ŕéàđ îš šĥöŵñ àš
àñ éŕŕöŕ ŵîţĥ îţš çàüšé. Ƃéļöŵ ţĥé ĥéŕö'š ṽéŕƃ, ţĥŕéé çöüñţš šéþàŕàţé ţĥé
ŕüñ'š ŵöŕķ ƒŕöḿ à þéŕšöñ'š: ƃļöçķš ţö ţŕàñšļàţé, ţŕàñšļàţîöñš ŵàîţîñĝ ƒöŕ
ŕéṽîéŵ (ŵĥîçĥ öþéñ Ŕéṽîéŵ), àñđ çöļļéçţîöñ ļàñĝüàĝéš ĥéļđ ƃàçķ, éàçĥ ļîšţéđ
ŵîţĥ ŵĥàţ ŵîţĥĥöļđš îţ (convergence.LocaleCoverage: à šĥîþ-ĝàţé šĥöŕţƒàļļ,
šţàļé öŕ ŕéĵéçţéđ ŵöŕđîñĝ, à ƒàîļîñĝ çĥéçķ, àñ üñçĥéçķéđ ţéŕḿ). À ḿàñüàļ ŕéàđ
öƒ éṽéŕý ƒîļé šţàýš üñđéŕ ţĥé çöļļéçţîöñš' Àđṽàñçéđ àçţîöñš.
Ŕüñš ĝö ţĥŕöüĝĥ ţĥé üþ ṽéñüé
"Ƃŕîñĝ üþ ţö đàţé" çàļļš host.App.RunUpDispatch, ŵĥîçĥ ŕéšöļṽéš ŵĥéŕé ţĥé ŕüñ
éẋéçüţéš ţĥŕöüĝĥ host.App.ResolveUpVenue: ļöçàļļý, öŕ àţ ţĥé çöñṽéŕĝéñçé
ṽéñüé ţĥé ŕéçîþé ƃîñđš. Ţĥé ÇĻÎ àñđ ţĥé ḾÇÞ up ţööļ ţàķé ţĥé šàḿé ŕöüţé, šö à
þŕöĵéçţ ƃöüñđ ţö à ṽéñüé çöñṽéŕĝéš ţĥéŕé ƒŕöḿ éṽéŕý ƒàçé àñđ ţĥé šéŕṽéŕ ķééþš
ţĥé šţàţé à ţéàḿ ŕéṽîéŵš ƒŕöḿ.
Ļîṽé þŕöĝŕéšš šüŕṽîṽéš ţĥé đîšþàţçĥ. Ţĥé ṽéñüé ŕöüţé ŕéàđš ţĥé þļüḿƃîñĝ'š ÑĐĴŠÖÑ ļîñé ƃý ļîñé àš îţ àŕŕîṽéš, ƒöļđîñĝ ƒŕàḿîñĝ ŕéçöŕđš îñţö ţĥé ŕéšüļţ àñđ ĥàñđîñĝ ţĥé ŕüñ'š öŵñ éṽéñţš ţö ţĥé ŕüñ ṽîéŵ; à ƃüƒƒéŕéđ đöçüḿéñţ àñđ à šţŕéàḿéđ öñé àŕé ŕéàđ ƃý ţĥé šàḿé ƒöļđ. Ţĥé šĥàŕéđ éñĝîñé đîšçöṽéŕš þļüĝîñš öñçé, àñđ à ŕüñ ƃöŕŕöŵš ţĥàţ éñĝîñé, šö ţĥé ṽéñüé à ŕüñ ŕéšöļṽéš îš ţĥé öñé ţĥé ţàƃ'š öţĥéŕ šüŕƒàçéš šéé.
À ŕüñ îš öñé çàļļ îñ àñđ à šţŕéàḿ öƒ éṽéñţš öüţ. Ţĥé ƃàçķéñđ ƃüƒƒéŕš ţĥé šţŕéàḿ šö à ŕéļöàđéđ ŵîñđöŵ ŕéþļàýš ţĥé ŕüñ ŕàţĥéŕ ţĥàñ ļöšîñĝ îţ.
À đéšķţöþ ŵîñđöŵ çàñ ŕéļöàđ ḿîđ-ŕüñ, àñđ à ŕüñ ţĥàţ öñļý éẋîšţéđ àš à ļîṽé éṽéñţ šţŕéàḿ ŵöüļđ ṽàñîšĥ. Ţĥé ƃàçķéñđ ķééþš ţĥé éṽéñţš, çöļļàþšîñĝ çöñšéçüţîṽé ḿéţŕîç šñàþšĥöţš šö à ļöñĝ ŕüñ đöéš ñöţ ĝŕöŵ ţĥé ƃüƒƒéŕ àţ ţĥé šàḿþļîñĝ ŕàţé. Ţĥé ŕüññéŕ àšķš ƒöŕ à ţàŕĝéţ ļàñĝüàĝé öñļý ŵĥéñ ţĥé ƒļöŵ þŕöđüçéš öñé.
Ţĥé ţööļƃöẋ îš à ŕéƒéŕéñçé; ƒļöŵš ŕüñ ţĥŕöüĝĥ ţĥé ŕüññéŕ
Ţĥé Ţööļƃöẋ þàĝé đéšçŕîƃéš éàçĥ ŕéĝîšţŕý ţööļ: ŵĥàţ îţ đöéš, îţš šçĥéḿà, ŵĥàţ îţ
çöñšüḿéš àñđ þŕöđüçéš, îţš ŕéƒéŕéñçé þàĝé, àñđ ţĥé çöḿḿàñđ ţĥàţ ŕüñš îţ
(kapi exec <tool>, ŵîţĥ kapi tools schema <tool> ƒöŕ îţš öþţîöñš). Ţööļš
éẋéçüţé ţĥŕöüĝĥ ţĥé ÇĻÎ àñđ ţĥŕöüĝĥ ƒļöŵš; ţĥé đéšķţöþ ŕüñš ñö ţööļ öñ îţš
öŵñ, ƃéçàüšé à ţĥîŕđ þàţĥ ŵöüļđ ĥàṽé ţö ŕé-šöļṽé þŕöĵéçţ îšöļàţîöñ àñđ ÀÎ
çöñšéñţ ƒöŕ ļîţţļé.
À þŕöĵéçţ'š ƒļöŵš þàĝé ļîšţš ŵĥàţ kapi flows ļîšţš ƒöŕ ţĥé þŕöĵéçţ: ţĥé
ŕéçîþé'š îñļîñé ƒļöŵš, ţĥéñ ţĥé ƒîļéš îñ îţš flows_dir: ţĥàţ ñö îñļîñé ƒļöŵ
šĥàđöŵš, à ƒîļé ţĥàţ ŵîļļ ñöţ ļöàđ šĥöŵñ ŵîţĥ îţš þŕöƃļéḿ. RunFlow,
GetFlow àñđ ţĥé þŕéṽîéŵ ŕéšöļṽé à ñàḿé ţĥé ŵàý kapi run đöéš
(host.ResolveProjectFlow, É-04).
Ţĥé éđîţöŕ šàṽéš îñļîñé ƒļöŵš îñţö ţĥé ŕéçîþé àñđ öþéñš à ƒļöŵ ƒîļé ŕéàđ-öñļý,
šîñçé ţĥé ƒîļé îš ŵĥéŕé ţĥàţ ƒļöŵ îš éđîţéđ.
Ţĥé ƒļöŵ éđîţöŕ'š Ŕüñ àçţîöñ ĝöéš ţĥŕöüĝĥ ţĥé šàḿé RunFlow þàţĥ ţĥé
çöļļéçţîöñš ţàƃļé àñđ ţĥé Öṽéŕṽîéŵ üšé. Îţ àþþéàŕš îñ þŕöĵéçţ ḿöđé, ŵĥéŕé
ţĥéŕé îš à þŕöĵéçţ ƒöŕ à ŕüñ ţö àçţ öñ, àñđ šţàýš àƃšéñţ îñ àđ-ĥöç ḿöđé.
Ţĥé ƒļöŵ éđîţöŕ'š ĝŕàþĥ éđîţš çöḿþöšîţîöñ öñļý. Îţš ţŵö éñđš àŕé éñđþöîñţ þîçķéŕš (ƒîļé, šţöŕé, îñţéŕçĥàñĝé, öŕ ñöñé), ñöţ đŕàĝĝàƃļé ŕéàđéŕ àñđ ŵŕîţéŕ ñöđéš, ƃéçàüšé ţĥé ƃîñđîñĝ îš à þŕöþéŕţý öƒ ţĥé ŕüñ ŕàţĥéŕ ţĥàñ öƒ ţĥé ƒļöŵ (É-04).
Ţĥé šàḿþļé þŕöĵéçţ
À ƒîŕšţ-ŕüñ šàḿþļé þŕöĵéçţ îš šçàƒƒöļđéđ ƒŕöḿ backend/sample/: à ĝöṽéŕñéđ
ŕéçîþé, àñđ çöñţéẋţ ŕéàđ îñţö ţĥé þŕöĵéçţ'š šţöŕéš ƒŕöḿ à .terms.json ƃüñđļé,
à ṽöîçé þŕöƒîļé àñđ à .memory.json ƃüñđļé, ţĥé ñàţîṽé šéŕîàļîžàţîöñš
(Ḿ-06), ļöàđéđ ŵîţĥ ţĥé šàḿé ŕéàđéŕ
ţĥé ŕéšţ öƒ ţĥé ţŕéé üšéš. Šééđîñĝ ƃüļķ-ļöàđš ţĥé éñţŕîéš àñđ ţĥéñ ŕéƃüîļđš ţĥé
šéàŕçĥ àñđ ƒüžžý šîđé-ţàƃļéš, šö ţĥé šàḿþļé'š ḿéḿöŕý àñšŵéŕš šéàŕçĥ àš ŵéļļ àš
éẋàçţ ļööķüþ.
Àƒţéŕ ţĥé çöñţéẋţ îḿþöŕţ, ţĥé šàḿþļé ŕéçöŕđš ţŵö àššîšţàñţ šéššîöñš ţĥŕöüĝĥ
ţĥé ĥöšţ'š ŕéçöŕđîñĝ çàļļš (RecordContextObservation àñđ
RecordContextCorrection), àš claude-code àñđ ţĥéñ codex, éàçĥ üñđéŕ à
šţàƃļé šéššîöñ îđ. Éṽéŕý þîéçé öƒ éṽîđéñçé ǫüöţéš ţéẋţ îñ ţĥé šàḿþļé'š ƒîļéš,
ƃéçàüšé ţĥé ĥöšţ ŕéƒüšéš éṽîđéñçé îţ çàññöţ ƒîñđ. Ţĥé ƒîŕšţ šéššîöñ ñöţéš à
ñàḿé, à ŵöŕđ ţö üšé, à šþéļļîñĝ, à çöŕŕéçţîöñ à þéŕšöñ ḿàđé àñđ öñé öƃšéŕṽàţîöñ
àƃöüţ ĥöŵ ţĥé šţöŕé çöþý àđđŕéššéš ţĥé ŕéàđéŕ. Ţĥé šéçöñđ ţàķéš ţĥé öţĥéŕ šîđé
öƒ ţĥé çöŕŕéçţîöñ àñđ ñöţéš öñé ḿöŕé ñàḿé, šö Đéçîđé öþéñš öñ à đîšàĝŕééḿéñţ,
àñđ à ƒîŕšţ-ţîḿé üšéŕ þŕàçţîšéš ķééþîñĝ, ḿàŕķîñĝ ñöţ à ŕüļé, ļéàṽîñĝ ƒöŕ ļàţéŕ
àñđ ŕéšéţţîñĝ öñ ţĥé ŕéàļ šüŕƒàçéš ŵîţĥ ñö ḿöđéļ çàļļ.
Ƃéƒöŕé ţĥé àĝéñţ šéššîöñš, ţĥé šééđ ŕéçöŕđš šîẋ ñöţéš àš à ţéàḿḿàţé àñđ ķééþš
ţĥéḿ. Ţĥé ñöţéš àŕé éšţàƃļîšĥéđ ƒŕöḿ ţĥé šţàŕţ, àñđ Đéçîđé šţîļļ öþéñš öñ
ţĥé àššîšţàñţš' šüĝĝéšţîöñš. Ţĥé ñöţéš ĝîṽé Éẋþļöŕé đàţà öñ éàçĥ đéçļàŕéđ àẋîš.
Ţĥé šàḿþļé'š ŕéçîþé đéçļàŕéš þļàçéš (ţĥé Ñöŕđîçš, Öšļö, Ĝŕüñéŕļøķķà àñđ
Ĝŕéàţéŕ Öšļö) àñđ ţýþéš market àš à ĝéö àẋîš öṽéŕ ţĥéḿ, age àš à ŕàñĝé àñđ
lifecycle àš àñ öŕđéŕéđ àẋîš
(Ç-02). Àñ Öšļö ýöüţĥ çàḿþàîĝñ
šîţš àţ market: oslo, age: 13-17, ŵîţĥ îţš þîçķ-üþ þàĝé àţ Ĝŕüñéŕļøķķà. Ƒîṽé
öƒ ţĥé ñöţéš ĥàṽé à þöîñţ: Ĵàþàñ, Ĝéŕḿàñý, ţĥé Ñöŕđîçš, àĝéš 13 ţö 17, àñđ ţĥé
çàḿþàîĝñ'š çîţý àñđ àĝé ţöĝéţĥéŕ. Ţĥŕéé ĥàṽé ŵîñđöŵš šéţ ŕéļàţîṽé ţö ţĥé đàý
ţĥé šàḿþļé îš çŕéàţéđ. Ŵĥéñéṽéŕ ţĥé šàḿþļé îš öþéñéđ, öñé öƒ ţĥöšé ŵîñđöŵš îš
îñ ƒöŕçé, öñé ĥàš éñđéđ àñđ öñé ĥàš ñöţ ýéţ šţàŕţéđ.
Šééđîñĝ îš îđéḿþöţéñţ: îţ ŕüñš öñļý ŵĥéñ ţĥé þŕöĵéçţ'š ļöĝ ĥöļđš ñö àĝéñţ šéššîöñ, ŕéàđ ƒŕöḿ ţĥé ļéđĝéŕ, šö ŕéöþéñîñĝ öŕ ŕéšéţţîñĝ ţĥé šàḿþļé ŕéçöŕđš ñöţĥîñĝ ţŵîçé.
À šçàƒƒöļđéđ šàḿþļé ŕéçöŕđš ţĥé ŕéṽîšîöñ îţ ŵàš ŵŕîţţéñ àţ îñ
.kapi/sample.json, àñđ sample.Revision îš ţĥé ŕéṽîšîöñ ţĥîš ƃüîļđ šĥîþš.
Ţĥé ĥöḿé öƒ àñ öļđéŕ çöþý ţĥàţ šţîļļ ļöàđš öƒƒéŕš ţĥé üþĝŕàđé. Àñ öļđéŕ çöþý
ŵĥöšé ŕéçîþé ţĥîš ƃüîļđ ŕéĵéçţš îš ŕéƒŕéšĥéđ ŵĥéñ îţ îš öþéñéđ, ƒŕöḿ Ţŕý ţĥé
šàḿþļé öŕ ƒŕöḿ ţĥé ŵöŕķšþàçé ĥöḿé. Ţĥé öļđ đîŕéçţöŕý îš ķéþţ ƃéšîđé îţ àš
<name> (backup rN), àñđ ţĥé çüŕŕéñţ šàḿþļé îš šçàƒƒöļđéđ îñ îţš þļàçé. Ƒöŕ à
šàḿþļé àţ ţĥé çüŕŕéñţ ŕéṽîšîöñ, àñđ ƒöŕ àñý þŕöĵéçţ ţĥàţ îš ñöţ à šàḿþļé, ţĥé
àþþ ŕéþöŕţš ţĥé ļöàđ éŕŕöŕ àñđ ļéàṽéš ţĥé đîŕéçţöŕý üñçĥàñĝéđ.
Ţĥŕéé ƒàçéš, öñé ŕéçöŕđ
ķàþî àñšŵéŕš ţĥé šàḿé ǫüéšţîöñš ƒŕöḿ ţĥé ÇĻÎ, öṽéŕ ḾÇÞ, àñđ ƒŕöḿ ţĥé đéšķţöþ.
À ƒàçé þàŕîţý šüîţé ĥöļđš ţĥé ţĥŕéé ţö öñé ŕéçöŕđéđ àñšŵéŕ: host/facetest
ŵŕîţéš öñé ƒîẋţüŕé ƒŕöḿ öñé đéšçŕîþţîöñ àñđ éḿƃéđš öñé šéţ öƒ àñšŵéŕš, àñđ
éàçĥ ƒàçé'š öŵñ šüîţé ƃüîļđš ţĥé ƒîẋţüŕé àñđ çöḿþàŕéš îţš ŕéþļý, ţĥé đéšķţöþ'š
ţĥŕöüĝĥ îţš ƃàçķéñđ ḿéţĥöđš. Ţĥé šĥàþéš àŕé þŕöĵéçţîöñš ŕàţĥéŕ ţĥàñ ţĥé ƒàçéš'
öŵñ šţŕüçţš. À ķñöŵñ ĝàþ ƃéţŵééñ ţŵö ƒàçéš îš þîññéđ ƃý à ţéšţ ţĥàţ àššéŕţš
îţ, šö çļöšîñĝ ţĥé ĝàþ ƒàîļš ţĥé ţéšţ ţĥàţ đéšçŕîƃéš îţ.
Ţĥé ƒŕöñţéñđ çöñšüḿéš ţĥé ŵöŕķšþàçé þàçķàĝéš
Ţĥé đéšķţöþ îš öñé çöñšüḿéŕ öƒ ţĥé ḿöñöŕéþö'š šĥàŕéđ ƒŕöñţéñđ þàçķàĝéš ŕàţĥéŕ
ţĥàñ ţĥé öŵñéŕ öƒ àñý öƒ ţĥéḿ: ţĥé šĥàđçñ þŕîḿîţîṽéš àñđ ţĥé þŕéṽîéŵ ķîţ ƒŕöḿ
@neokapi/ui-primitives (Š-06), ţĥé ẋýƒļöŵ-ƃàšéđ
@neokapi/flow-editor, ţĥé ĝŕàþĥ ṽîéŵš îñ @neokapi/context-explorer, ţĥé
àţļàš ṽîéŵš îñ @neokapi/context-atlas, ţĥé ļàƃ
éẋþļöŕéŕš îñ @neokapi/kapi-lab, þļüš ţĥé çöñţŕàçţ ţýþéš, ŕéƒéŕéñçé đàţà,
šţàţüš ṽîéŵš, çöñçéþţ ṽîéŵš, àñđ ĝŕîđ éđîţöŕ þàçķàĝéš. Àļļ ŕéšöļṽé ţĥŕöüĝĥ ţĥé
šîñĝļé ŕööţ þñþḿ ŵöŕķšþàçé.
Îţš þàļéţţé çöḿéš ƒŕöḿ ţĥé šàḿé þļàçé. Ţĥé ļöĝö-đéŕîṽéđ þàļéţţé îš öñé ƒîļé,
packages/ui/src/styles/kapi-colors.css, ŵĥîçĥ ţĥé đéšķţöþ îḿþöŕţš ŕàţĥéŕ ţĥàñ
đéçļàŕîñĝ ţĥé ṽàļüéš îţšéļƒ, àñđ ŵĥîçĥ îñ ţüŕñ îḿþöŕţš ţĥé šéḿàñţîç ţöķéñš ţĥàţ
šàý ŵĥàţ à çöļöüŕ ḿéàñš: ţĥé ĵüđĝéḿéñţ çöļöüŕš àñđ öñé ĥüé þéŕ çööŕđîñàţé àẋîš.
Ţĥé Šţöŕýƃööķ ŕéñđéŕš ţĥŕöüĝĥ ţĥé đéšķţöþ'š šţýļéšĥééţ, šö à šţöŕý àñđ ţĥé àþþ
ŕéàđ ţĥé šàḿé ṽàļüéš, àñđ ţĥé đöçüḿéñţàţîöñ šîţé'š Îñƒîḿà ṽàŕîàƃļéš àñđ ţĥé
đîàĝŕàḿ ķîţ'š đéƒàüļţš àŕé çöḿþüţéđ ƒŕöḿ ţĥàţ öñé ƒîļé. Îṽöŕý šüŕƒàçéš, çöçöà
àççéñţš àñđ ţüŕǫüöîšé ĥîĝĥļîĝĥţš ƒöļļöŵ ţĥé éẋîšţîñĝ ļöĝö; đàŕķ ḿöđé üšéš ŵàŕḿ
çĥàŕçöàļ àñđ öçĥŕé ŵîţĥ đàŕķ þŕîḿàŕý-ƃüţţöñ ţéẋţ. Šéé
Ƃŕàñđ ţöķéñš àñđ ţĥé đöçüḿéñţàţîöñ þàļéţţé.
Îţ àļšö çöñšüḿéš @neokapi/i18n-react (Š-05) ƒöŕ îţš
öŵñ îñţéŕƒàçé ļàñĝüàĝéš. Ţĥé đéšķţöþ'š ÜÎ šţŕîñĝš ĝö ţĥŕöüĝĥ ţĥé šàḿé
éẋţŕàçţîöñ àñđ ŕüñţîḿé ţĥé ƒŕàḿéŵöŕķ öƒƒéŕš ţö àñý Ŕéàçţ àþþļîçàţîöñ, àñđ ţĥé
ţàŕĝéţ-ļàñĝüàĝé çàţàļöĝš àŕé ƃüîļđ àŕţéƒàçţš, ŕéĝéñéŕàţéđ ŕàţĥéŕ ţĥàñ àüţĥöŕéđ.
Çöñƒîĝüŕàţîöñ ļîṽéš îñ ţŵö ŕööţš
Þŕöṽîđéŕ çöñƒîĝüŕàţîöñ àñđ îñšţàļļéđ þļüĝîñš ļîṽé üñđéŕ ţĥé ķàþî çöñƒîĝ ĥöḿé,
šĥàŕéđ ŵîţĥ ţĥé ÇĻÎ: providers.json ţĥéŕé, ÀÞÎ ķéýš îñ ţĥé ÖŠ ķéýçĥàîñ üñđéŕ
ţĥé kapi šéŕṽîçé ñàḿé, àñđ þļüĝîñš üñđéŕ plugins/ (Š-01).
Ţĥé ÇĻÎ àñđ ţĥé đéšķţöþ ƃöţĥ ţàķé àñ àļţéŕñàţîṽé þļüĝîñ đîšçöṽéŕý ŕööţ ƒŕöḿ
KAPI_PLUGINS_DIR, àñđ ƃöţĥ ĥöñöüŕ KAPI_PLUGINS_DIR_ONLY ţö šķîþ ţĥé
üšéŕ/šýšţéḿ ŕööţš éñţîŕéļý, ţĥé šàḿé îšöļàţîöñ çöñţŕàçţ đéṽ, ÇÎ, àñđ ţĥé
ĥàŕñéšš ŕéçöŕđéŕ àļŕéàđý ŕéļý öñ.
Ţĥé đéšķţöþ'š öŵñ þŕéƒéŕéñçéš (ţĥéḿé, îñţéŕƒàçé ļàñĝüàĝé, ĥîđđéñ àñđ çüšţöḿ
ļöçàļéš, ţéļéḿéţŕý çöñšéñţ, ţĥé šéššîöñ'š öþéñ ţàƃš) ļîṽé îñ à šéþàŕàţé ŕööţ,
<UserConfigDir>/kapi-desktop, öṽéŕŕîđàƃļé ŵîţĥ KAPI_DESKTOP_CONFIG_DIR. Ţĥé
šþļîţ îš đéļîƃéŕàţé: à þŕéƒéŕéñçé àƃöüţ à ŵîñđöŵ îš ñöţ à šéţţîñĝ ţĥé ÇĻÎ
šĥöüļđ ŕéàđ, àñđ ŕéšéţţîñĝ öñé šĥöüļđ ñöţ đîšţüŕƃ ţĥé öţĥéŕ.
Îţ ŕéüšéš ƒŕàḿéŵöŕķ þŕîḿîţîṽéš ŕàţĥéŕ ţĥàñ ŕé-đéŕîṽîñĝ ţĥéḿ
Ţööļ ļîšţîñĝš çöḿé ƒŕöḿ ţĥé šàḿé ŕéĝîšţŕý ţĥé ÇĻÎ ŕéàđš, àñđ éàçĥ ţööļ'š
šçĥéḿà ƒöŕḿ îš ĝéñéŕàţéđ ƒŕöḿ îţš ĴŠÖÑ Šçĥéḿà
(É-03), šö à ñéŵ ţööļ àþþéàŕš îñ ţĥé đéšķţöþ
ŵîţĥ ñö đéšķţöþ çĥàñĝé ƃéýöñđ ŕéĝîšţŕàţîöñ. Ƒöŕḿàţš, þļüĝîñš, þŕöṽîđéŕš, ƃļöçķ
šţöŕéš, ţĥé çöñţéẋţ ĝŕàþĥ, àñđ ţĥé éẋéçüţöŕ àŕé ļîķéŵîšé ţĥé ƒŕàḿéŵöŕķ'š,
çöñšüḿéđ ŕàţĥéŕ ţĥàñ ḿîŕŕöŕéđ. À þŕöĵéçţ đéçļàŕîñĝ à đéŕéñţ ƃļöçķ šţöŕé öþéñš
ŵîţĥöüţ ţĥé đéšķţöþ ķñöŵîñĝ ŵĥîçĥ öñé: ŕéšöļüţîöñ ĝöéš ţĥŕöüĝĥ ţĥé BlockStore
îñţéŕƒàçé îñ ţĥé þŕöĵéçţ ḿàçĥîñéŕý.
Đéŕéñçéš ƒŕöḿ ţĥé ÇĻÎ àŕé þŕéšéñţàţîöñàļ: đýñàḿîç ƒöŕḿš, éṽéñţ šţŕéàḿîñĝ, ļîṽé þŕöĝŕéšš, ţàƃƃéđ šţàţé. Ţĥéŕé îš ñö đéšķţöþ ƒöŕķ öƒ ƒŕàḿéŵöŕķ ƃéĥàṽîöüŕ.
Đîšţŕîƃüţîöñ
Ţĥé ŕéļéàšé ŵöŕķƒļöŵ ƃüîļđš ţĥé đéšķţöþ àçŕöšš à þļàţƒöŕḿ ḿàţŕîẋ çöṽéŕîñĝ ḿàçÖŠ, Ŵîñđöŵš, àñđ Ļîñüẋ öñ ƃöţĥ çöḿḿöñ àŕçĥîţéçţüŕéš ŵĥéŕé ţĥé ţööļçĥàîñ àļļöŵš îţ. ḿàçÖŠ šĥîþš àš à Ĥöḿéƃŕéŵ çàšķ ƒŕöḿ ţĥé ţàþ, Ŵîñđöŵš àñđ Ļîñüẋ àš àŕçĥîṽéš àţţàçĥéđ ţö ţĥé ĜîţĤüƃ ŕéļéàšé. À šîĝñéđ àþþçàšţ ƒééđš ţĥé îñ-àþþ üþđàţéŕ, šö àñ îñšţàļļéđ đéšķţöþ çàñ üþđàţé îţšéļƒ ŵîţĥöüţ ĝöîñĝ ƃàçķ ţĥŕöüĝĥ ţĥé þàçķàĝé ḿàñàĝéŕ.
Çöñšéǫüéñçéš
- Ţĥé đéšķţöþ ŕéàçĥéš éṽéŕý ƒŕàḿéŵöŕķ çàþàƃîļîţý ţĥŕöüĝĥ
host, šö îţ çàñ đŕîƒţ ƒŕöḿ ţĥé ÇĻÎ öñļý öñ þŕéšéñţàţîöñ, àñđ ţĥé ƒàçé þàŕîţý ŕéçöŕđ çàţçĥéš đŕîƒţ öñ ţĥé àñšŵéŕš ţĥéḿšéļṽéš. - Ŵàîļš àñđ ţĥé ñàţîṽé ţööļçĥàîñ šţàý öüţ öƒ ţĥé ÇĻÎ ḿöđüļé, ŵĥîçĥ ķééþš ţĥé ÇĻÎ çŕöšš-çöḿþîļàƃļé àñđ šḿàļļ.
- Ţĥé çöƃŕà-ƒŕéé àñđ þļàţƒöŕḿ-ƒŕéé àššéŕţîöñš àŕé ḿéçĥàñîçàļ: à ŕéîñţŕöđüçéđ
cliöŕ þļàţƒöŕḿ îḿþöŕţ ƒàîļšmake audit-modules, ñöţ à ŕéṽîéŵ. - À þŕöĵéçţ ƃöüñđ ţö à çöñṽéŕĝéñçé ṽéñüé çöñṽéŕĝéš ţĥéŕé ƒŕöḿ ţĥé đéšķţöþ àš ƒŕöḿ ţĥé ÇĻÎ, šö ţĥé ţéàḿ'š šţàţé ĥàš öñé ĥöḿé.
- Ţĥé đéšķţöþ ŵŕîţéš ţĥé ŕéçîþé'š
context:ƃļöçķ, ţĥé àĝéñţ ŵîŕîñĝ àñđ ţĥé ŕüļéš ƒîļéš ţĥŕöüĝĥ ţĥé ĥöšţ çàļļš ţĥé ÇĻÎ ḿàķéš, šö à þŕöĵéçţ šĥàŕéđ öŕ çöññéçţéđ ƒŕöḿ ţĥé đéšķţöþ îš ţĥé þŕöĵéçţkapi context syncàñđkapi initšéé. - Ţàƃš šüþþöŕţ šéṽéŕàļ öþéñ þŕöĵéçţš. Éàçĥ þŕöĵéçţ-šçöþéđ ḿéţĥöđ ŕéǫüîŕéš à
tabIDţö ŕöüţé öþéŕàţîöñš ţö ţĥé çöŕŕéçţ þŕöĵéçţ. kapi.yamlŕéçîþéš šţàý šĥàŕéàƃļé ŵöŕķƒļöŵ đöçüḿéñţš: öþéñ, éđîţ, šàṽé, çöḿḿîţ. Ñö ĥîđđéñ šţàţé ţŕàṽéļš ŵîţĥ ţĥé ŕéçîþé, àñđ à ĝöṽéŕñàñçé éđîţ ḿàđé îñ ţĥé đéšķţöþ îš à ŕéçîþé éđîţgit diffšĥöŵš.- Àñý ñéŵ ţööļ, ƒöŕḿàţ, öŕ þŕöṽîđéŕ ŕéĝîšţéŕéđ îñ ţĥé ƒŕàḿéŵöŕķ àþþéàŕš îñ ţĥé đéšķţöþ ŵîţĥ ñö ƃàçķéñđ çĥàñĝé.
- Ţĥé àþþ ļîšţš þŕöĵéçţš ŕéĝîšţéŕéđ ƃý àñý ļöçàļ ķàþî šüŕƒàçé àñđ çĥéçķš ƒöŕ üþđàţéš ŵîţĥ öñé îñđéẋéđ ǫüéŕý þéŕ šéçöñđ.
- Éṽéŕý đéšķţöþ éđîţ þàššéš ţĥé çöḿḿîţ çĥéçķ àñđ ļàñđš îñ ţĥé þŕöĵéçţ'š ƃļöçķ ĥîšţöŕý ŵîţĥ ţĥé đéšķţöþ àš îţš öŕîĝîñ, àñđ à çĥàñĝé ḿàđé éļšéŵĥéŕé šîñçé ţĥé đéšķţöþ ŕéàđ ţĥé çöñţéñţ îš šĥöŵñ ţö ţĥé þéŕšöñ ƃéƒöŕé àñýţĥîñĝ öṽéŕŵŕîţéš îţ.
Ŕéļàţéđ
- Ƒ-01: Ţĥé ƒŕàḿéŵöŕķ àñđ îţš ḿöđüļéš: ţĥé ḿöđüļé îšöļàţîöñ çöñţŕàçţ àñđ ţĥé ļîçéñšé ƃöüñđàŕý
- É-01: Ţĥé þŕöçéššîñĝ éñĝîñé: ţĥé éẋéçüţöŕ àñđ îţš ţŕàçé éṽéñţš
- É-03: Ţĥé ţööļ šýšţéḿ: ţĥé ŕéĝîšţŕý àñđ šçĥéḿàš ţĥé ƒöŕḿš àŕé ĝéñéŕàţéđ ƒŕöḿ
- É-04: Ƒļöŵš àñđ Î/Ö ƃîñđîñĝ: ŵĥý ţĥé ĝŕàþĥ'š éñđš àŕé éñđþöîñţ þîçķéŕš
- É-05: Ţĥé þļüĝîñ šýšţéḿ: ţĥé þļüĝîñ ḿàñàĝéŕ'š ḿöđéļ
- É-09: Ţĥé çĥàñĝé çöñţŕàçţ: ţĥé çĥàñĝé šéţš éṽéŕý đéšķţöþ éđîţ àñđ đéçîšîöñ îš
- Ç-01: Ţĥé þŕöĵéçţ ḿöđéļ: ţĥé ŕéçîþé àñđ ţĥé
.kapi/šöüŕçéš à ţàƃ ļöàđš - Ç-03: Ţĥé çöñţéẋţ šţöŕé àñđ ĝŕàþĥ: ţĥé ŵöŕķšþàçé ţĥé ĥöḿé šçŕééñ ŕéàđš àñđ ţĥé öþéŕàţîöñ ļöĝ îţ ƒöļļöŵš
- Ç-11: Çöñţéẋţ öþéŕàţîöñš: ţĥé öþéŕàţîöñš ţĥé ƒééđ šĥöŵš àñđ ţĥé þöļîçý ƃéĥîñđ îţš đéçîšîöñš
- Ç-02: Çööŕđîñàţéš àñđ ĝöṽéŕñàñçé: ţĥé çööŕđîñàţé þöîñţš ţĥé ĥöḿé ḿàþš àñđ ţĥé àẋéš ţĥé šéţţîñĝš éđîţ
- Ç-04: Ƃļöçķ šţàţé àñđ ţĥé đéçîšîöñ ŕéçöŕđ: ŵĥàţ ţĥé ŕéṽîéŵ ǫüéüé ŕéçöŕđš
- Ç-06: Çöñţéẋţ ŕéţŕîéṽàļ: ţĥé ĝüîđé ţĥé éẋþļöŕéŕ ŕéñđéŕš
- Ç-07: Ṽöîçé þŕöƒîļéš: ţĥé þŕöƒîļé ţĥé Ṽöîçé þàĝé ŕéšöļṽéš àñđ éđîţš
- Š-01: Ţĥé ķàþî ÇĻÎ: ţĥé šĥàŕéđ çŕéđéñţîàļ šţöŕé àñđ çöñƒîĝ ĥöḿé
- Š-03: Àĝéñţ šüŕƒàçéš: ţĥé ḾÇÞ ƒàçé ţĥé þàŕîţý ŕéçöŕđ àļšö ĥöļđš
- Š-05: Ţĥé î18ñ ŕüñţîḿé ƒöŕ Ŕéàçţ: ţĥé ŕüñţîḿé ţĥé đéšķţöþ'š öŵñ îñţéŕƒàçé üšéš
- Š-06: Ţĥé ṽîšüàļ éđîţöŕ đàţà ḿöđéļ: ţĥé þŕéṽîéŵ ķîţ ţĥé đéšķţöþ ĥöšţš
- Š-07: Ţĥé ŕéṽîéŵ ḿöđéļ: ţĥé ḿöđéļ ţĥé ǫüéüé'š đéţàîļ þàñé àñđ ţĥé đöçüḿéñţ ṽîéŵ ŕéñđéŕ
- Ķàþî Đéšķţöþ öṽéŕṽîéŵ: ţĥé üšéŕ-ƒàçîñĝ ĝüîđé