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

Š-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_text kapi 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 ŵĥéñ ţĥé ŕéṽîšîöñ çĥàñĝéš, ţŕîĝĝéŕîñĝ à ƒŕöñţéñđ ŕéƒéţçĥ. Ŕéöþéñîñĝ àñ üñçĥàñĝéđ ŕéĝîšţŕàţîöñ ļéàṽéš ţĥé ŕéṽîšîöñ üñçĥàñĝéđ. Ţĥîš ŕéǫüîŕéš öñé îñđéẋéđ ǫüéŕý þéŕ šéçöñđ àñđ àṽöîđš îñţéŕþŕéţîñĝ ƒîļéšýšţéḿ éṽéñţš ƒŕöḿ ŠǪĻîţé đàţàƃàšé àñđ ŴÀĻ ƒîļéš.

Ţĥé Ḿàþ​

Éṽéŕý þŕöĵéçţ ţàƃ öþéñš öñ îţš Ḿàþ, àñđ à þéŕšîšţéđ ṽîéŵ öþéñš ŵĥéŕé îţ ŵàš. Ţĥé þŕöĵéçţ ŕàîļ ļîšţš, îñ öŕđéŕ, Ḿàþ, Çöñţéẋţ, Þŕöĵéçţ, Ŕéṽîéŵ (öñļý ŵĥîļé ţĥé þŕöĵéçţ đéçļàŕéš ţàŕĝéţ ļàñĝüàĝéš), Ţööļƃöẋ àñđ Þŕöĵéçţ Šéţţîñĝš; ţĥé çĥéçķš þàñéļ ĥàš ñö éñţŕý öƒ îţš öŵñ. À þŕöĵéçţ ŵàîţîñĝ ţö ƃé šéţ üþ, àñ éḿþţý ƒöļđéŕ öŕ öñé ḿàţçĥîñĝ à þŕéšéţ, öþéñš öñ ţĥé Ḿàþ ţöö, àñđ ţĥé Ḿàþ'š éḿþţý ƒîļéš ļîšţ ļéàđš ţö ţĥé þŕöĵéçţ šéçţîöñ, ŵĥéŕé ţĥé šéţüþ àñđ ţĥé þŕéšéţ àŕé öƒƒéŕéđ. Ţĥé Ḿàþ îš àñ öṽéŕṽîéŵ îñ ţĥé þàĝé þàţţéŕñš ĝüîđé'š šéñšé, àñđ îţ ŕéñđéŕš ƒŕöḿ öñé ƃöüñđ çàļļ, 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 ţööļ ţàķé ţĥé šàḿé ŕöüţé, šö à þŕöĵéçţ ƃöüñđ ţö à ṽéñüé çöñṽéŕĝéš ţĥéŕé ƒŕöḿ éṽéŕý ƒàçé àñđ ţĥé šéŕṽéŕ ķééþš ţĥé šţàţé à ţéàḿ ŕéṽîéŵš ƒŕöḿ.

Ļîṽé þŕöĝŕéšš šüŕṽîṽéš ţĥé đîšþàţçĥ. Ţĥé ṽéñüé ŕöüţé ŕéàđš ţĥé þļüḿƃîñĝ'š ÑĐĴŠÖÑ ļîñé ƃý ļîñé àš îţ àŕŕîṽéš, ƒöļđîñĝ ƒŕàḿîñĝ ŕéçöŕđš îñţö ţĥé ŕéšüļţ àñđ ĥàñđîñĝ ţĥé ŕüñ'š öŵñ éṽéñţš ţö ţĥé ŕüñ ṽîéŵ; à ƃüƒƒéŕéđ đöçüḿéñţ àñđ à šţŕéàḿéđ öñé àŕé ŕéàđ ƃý ţĥé šàḿé ƒöļđ. Ţĥé šĥàŕéđ éñĝîñé đîšçöṽéŕš þļüĝîñš öñçé, àñđ à ŕüñ ƃöŕŕöŵš ţĥàţ éñĝîñé, šö ţĥé ṽéñüé à ŕüñ ŕéšöļṽéš îš ţĥé öñé ţĥé ţàƃ'š öţĥéŕ šüŕƒàçéš šéé.

FrontendReactbackend.AppWails serviceExecutorhost + frameworkRunFlow(tabID, flow, inputs, locales)executeflow spec + project contexttrace recordsstep, block, log, errorflow:eventemitted + buffered for reconnectCancelRun()context cancel

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

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

Ţĥé ţööļƃöẋ îš à ŕéƒéŕéñçé; ƒļöŵš ŕüñ ţĥŕöüĝĥ ţĥé ŕüññéŕ​

Ţĥé Ţööļƃöẋ þàĝé đéšçŕîƃéš éàçĥ ŕéĝîšţŕý ţööļ: ŵĥàţ îţ đöéš, îţš šçĥéḿà, ŵĥàţ îţ çöñšüḿéš àñđ þŕöđüçéš, îţš ŕéƒéŕéñçé þàĝé, àñđ ţĥé çöḿḿàñđ ţĥàţ ŕüñš îţ (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 šĥöŵš.
  • Àñý ñéŵ ţööļ, ƒöŕḿàţ, öŕ þŕöṽîđéŕ ŕéĝîšţéŕéđ îñ ţĥé ƒŕàḿéŵöŕķ àþþéàŕš îñ ţĥé đéšķţöþ ŵîţĥ ñö ƃàçķéñđ çĥàñĝé.
  • Ţĥé àþþ ļîšţš þŕöĵéçţš ŕéĝîšţéŕéđ ƃý àñý ļöçàļ ķàþî šüŕƒàçé àñđ çĥéçķš ƒöŕ üþđàţéš ŵîţĥ öñé îñđéẋéđ ǫüéŕý þéŕ šéçöñđ.
  • Éṽéŕý đéšķţöþ éđîţ þàššéš ţĥé çöḿḿîţ çĥéçķ àñđ ļàñđš îñ ţĥé þŕöĵéçţ'š ƃļöçķ ĥîšţöŕý ŵîţĥ ţĥé đéšķţöþ àš îţš öŕîĝîñ, àñđ à çĥàñĝé ḿàđé éļšéŵĥéŕé šîñçé ţĥé đéšķţöþ ŕéàđ ţĥé çöñţéñţ îš šĥöŵñ ţö ţĥé þéŕšöñ ƃéƒöŕé àñýţĥîñĝ öṽéŕŵŕîţéš îţ.

Ŕéļàţéđ​