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

ÇĻÎ çöñṽéñţîöñš

Éṽéŕý kapi çöḿḿàñđ àñšŵéŕš ţĥé šàḿé ƒöüŕ ǫüéšţîöñš ţĥé šàḿé ŵàý: ĥöŵ îţ ţàķéš îñþüţ, ĥöŵ îţ éḿîţš öüţþüţ, ŵĥàţ îţš éẋîţ çöđé ḿéàñš, àñđ ŵĥàţ îţ đöéš îñšîđé à þŕöĵéçţ. Ţĥéšé àŕé çöñţŕàçţš éñƒöŕçéđ ƃý ţéšţš (cli/conventions_test.go, host/inputs_test.go), ñöţ þéŕ-çöḿḿàñđ çĥöîçéš: à ñéŵ çöḿḿàñđ ţĥàţ ƃŕéàķš öñé ƒàîļš ţĥé ƃüîļđ.

1. Îñþüţ

Öñé ŕéšöļṽéŕ, host.App.ResolveInputs (host/inputs.go), ƃàçķš éṽéŕý çöḿḿàñđ ţĥàţ ţàķéš ƒîļé îñþüţš. Ţĥŕéé ŕüļéš:

Ĝļöƃš éẋþàñđ îñ-þŕöçéšš. kapi stats 'src/**' ƃéĥàṽéš îđéñţîçàļļý öñ žšĥ, ƃàšĥ àñđ ÞöŵéŕŠĥéļļ, àñđ ŵĥéţĥéŕ öŕ ñöţ ţĥé šĥéļļ éẋþàñđéđ ţĥé þàţţéŕñ ƒîŕšţ; à šĥéļļ-éẋþàñđéđ ļîšţ öƒ çöñçŕéţé þàţĥš îš ĵüšţ ţĥé ŕéšöļṽéđ ƒöŕḿ öƒ ţĥé šàḿé îñþüţ. Éẋþàñšîöñ üšéš đöüƃļéšţàŕ, šö ** îš ŕéçüŕšîṽé (ŵĥîçĥ filepath.Glob çàññöţ éẋþŕéšš) àñđ {a,b} àļţéŕñàţéš. À ŵîļđçàŕđ ñéṽéŕ đéšçéñđš îñţö à đöţ-đîŕéçţöŕý; ñàḿîñĝ öñé (.github/**/*.yml) öþţš ƃàçķ îñ.

Đîŕéçţöŕîéš àŕé çöñţéñţ, ñöţ éŕŕöŕš. À đîŕéçţöŕý àŕĝüḿéñţ éẋþàñđš ţö ţĥé ŕéĝüļàŕ ƒîļéš ƃéñéàţĥ îţ, šķîþþîñĝ ĥîđđéñ đîŕéçţöŕîéš àñđ éđîţöŕ ĵüñķ (~$… Öƒƒîçé ļöçķ ƒîļéš, ._… ÀþþļéĐöüƃļé šţüƃš). Ţĥé ţööļƃöẋ üţîļîţîéš ţĥàţ éḿüļàţé à Üñîẋ ƒîļţéŕ (kgrep, kcat, ksed) ķééþ ţĥé ÞÖŠÎẊ -r ŕéǫüîŕéḿéñţ, ƃéçàüšé ţĥéý àŕé đéļîƃéŕàţé éḿüļàţîöñš öƒ ţööļš ŵĥöšé ḿüšçļé ḿéḿöŕý îñçļüđéš îţ.

Ñö îñþüţ ñéṽéŕ ḿéàñš "ƃļöçķ öñ ţĥé ţéŕḿîñàļ". Ĝîṽéñ ñöţĥîñĝ, à çöñţéñţ ṽéŕƃ üšéš ţĥé þŕöĵéçţ'š ţŕàçķéđ çöñţéñţ šéţ ŵĥéñ à ŕéçîþé îš îñ šçöþé; öţĥéŕŵîšé îţ ŕéàđš šţàñđàŕđ îñþüţ öñļý ŵĥéñ šţđîñ îš àçţüàļļý ŕéđîŕéçţéđ. Öñ àñ îñţéŕàçţîṽé ţéŕḿîñàļ îţ ŕéþöŕţš ĥöŵ ţö ĝîṽé îţ îñþüţ àñđ éẋîţš 2. Šţàñđàŕđ îñþüţ îš àļŵàýš àṽàîļàƃļé éẋþļîçîţļý àš -.

2. Öüţþüţ

Öñé àẋîš, --output-format, ŵîţĥ ţĥé ṽàļüéš text (àļîàš table), json àñđ yaml; --json àñđ --text àŕé šĥöŕţĥàñđš, àñđ --jq <expr> îḿþļîéš ĴŠÖÑ. Ŕéšöļüţîöñ ļîṽéš îñ host/output.ResolveFormat, àñđ éṽéŕý šţŕüçţüŕéđ ŕéšüļţ ţýþé îḿþļéḿéñţš FormatText ƒöŕ ţĥé ĥüḿàñ ŕéñđéŕîñĝ. text îš à ţàƃļé ƒöŕ ļîšţîñĝš àñđ à ļàƃéļéđ šüḿḿàŕý ƒöŕ šîñĝļé ŕéçöŕđš.

-o îš ñöţ ţĥé ƒöŕḿàţ ƒļàĝ. Àçŕöšš ţĥé ţŕéé -o ḿéàñš àñ öüţþüţ þàţĥ öŕ þàţĥ ţéḿþļàţé (kapi extract -o work.kpz, kapi memory export -o memory.tmx, ţĥé {dir}{name}{ext}{lang} ţéḿþļàţé öñ kapi exec <tool>), àñđ ţĥàţ ḿéàñîñĝ îš çöñšîšţéñţ, šö ţĥé ƒöŕḿàţ àẋîš ķééþš ţĥé üñàḿƃîĝüöüš ļöñĝ šþéļļîñĝ.

Þŕöĝŕéšš ƒöŕ àñýţĥîñĝ ţĥàţ çàñ éẋçééđ à šéçöñđ ĝöéš ţö šţđéŕŕ (host/progressstep.go), šö šţđöüţ šţàýš éẋàçţļý ţĥé ḿàçĥîñé-ŕéàđàƃļé ŕéšüļţ: kapi stats --output-format json 'src/**' > out.json ŵŕîţéš öñļý ĴŠÖÑ. Îţ šţàýš šîļéñţ ƃéļöŵ ProgressDelay, îš šüþþŕéššéđ ƃý --quiet, àñđ đéĝŕàđéš ţö þļàîñ àþþéñđ-öñļý ļîñéš öñ à þîþé.

3. Éẋîţ çöđéš

host/exitcode.go đéƒîñéš ţĥé ŵĥöļé ṽöçàƃüļàŕý; ñö çöḿḿàñđ îñṽéñţš àñöţĥéŕ.

ÇöđéḾéàñîñĝ
0šüççéšš
1öþéŕàţîöñàļ éŕŕöŕ
2üšàĝé éŕŕöŕ: ƃàđ ƒļàĝš, üñŕéàđàƃļé îñþüţ, ñö îñþüţ
3ǫüàļîţý ĝàţé üñḿéţ (ErrQualityGate)
4à çĥéçķ đîđ ñöţ ŕüñ (ErrCheckNotRun): ñö çöñţéñţ çĥéçķéđ, öŕ àñ àñàļýžéŕ ḿîššéđ îţš çàñàŕý
130îñţéŕŕüþţéđ (ŠÎĜÎÑŢ)

Ţĥé ĝŕéþ-ƒàḿîļý üţîļîţîéš àđđîţîöñàļļý üšé 1 ƒöŕ "ñö ḿàţçĥ", ŵĥîçĥ îš ţĥéîŕ ñàḿéšàķéš' çöñţŕàçţ.

4. Þŕöĵéçţ ṽš àđ-ĥöç

ResolveProjectPath îš ţĥé šîñĝļé đîšçöṽéŕý þàţĥ: -p/--project ƒļàĝ → KAPI_NO_PROJECT öþţ-öüţ → KAPI_PROJECT éñṽ → ĝîţ-šţýļé üþŵàŕđ ŵàļķ ƒöŕ kapi.yaml. À çöḿḿàñđ îš öñé öƒ:

  • þŕöĵéçţ-ŕéǫüîŕéđ (up, status, ls, add, rm, check --ship): éŕŕöŕš ŵîţĥöüţ à ŕéçîþé;
  • þŕöĵéçţ-öŕ-ŵöŕķšþàçé (extract, merge): à þŕöĵéçţ šüþþļîéš ţĥé çöñţéñţ, öŕ à .kpz ŵöŕķšþàçé šţàñđš îñ ƒöŕ öñé (extract <sources> -o work.kpz, merge work.kpz -o out/);
  • þŕöĵéçţ-þŕéƒéŕŕéđ (check, stats, inspect, translate, pseudo-translate, run): üšéš ţĥé þŕöĵéçţ'š çöñţéñţ ŵĥéñ ĝîṽéñ ñöţĥîñĝ, ŵöŕķš àđ-ĥöç öñ ñàḿéđ ƒîļéš;
  • àđ-ĥöç (formats, tools, flows, plugin, models, config šüƃçöḿḿàñđš, ţĥé ţööļƃöẋ): ñö þŕöĵéçţ îñṽöļṽéđ.

Çöḿḿàñđ šüŕƒàçé

Çöñţéñţ çĥéçķš àñđ ŕéļéàšé ĝàţéš ĥàṽé šéþàŕàţé ŕéšþöñšé šĥàþéš. Öŕđîñàŕý check éḿîţš kapi.check/v1; check --ship ĝŕöüþš ƒîñđîñĝš üñđéŕ þŕöĵéçţ ĝàţéš. Ţĥé ŕéļéàšé çĥéçķéŕ ŕéšöļṽéš šöüŕçé-öñļý çöñţéñţ šéþàŕàţéļý ƒŕöḿ šöüŕçé/ţàŕĝéţ þàîŕš, îñçļüđîñĝ îñ ḿîẋéđ þŕöĵéçţš. Éẋþļîçîţ ƒîļéš ţĥàţ ḿàţçĥ à đéçļàŕéđ ţàŕĝéţ ŕéţàîñ ţĥàţ þàîŕîñĝ; öţĥéŕ ñàḿéđ ƒîļéš ŕéçéîṽé šöüŕçé çĥéçķš ŵîţĥ ţĥéîŕ đéçļàŕéđ ŕéàđéŕ çöñƒîĝüŕàţîöñ.

Ţĥé ţéŕḿîñöļöĝý àñđ ŕüļé-ƃàšéđ ŕéļéàšé ĝàţéš îñçļüđé coverage.files àñđ coverage.blocks, çöüñţîñĝ îñšþéçţéđ çöñţéñţ. Éàçĥ ĝàţé çàŕŕîéš à verdict (passed, failed öŕ did_not_run) đéçîđéđ ƃý check.Report.Decide: à ĝàţé ŵîţĥ žéŕö ƃļöçķš, öŕ ŵĥöšé àñàļýžéŕš àļļ ḿîššéđ öŕ ĥàđ ñö çàñàŕý, đîđ ñöţ ŕüñ, àñđ ţĥé ŕüñ éẋîţš 4 ŵĥàţéṽéŕ --no-fail šàýš. pass îš ţŕüé öñļý ƒöŕ passed. Šöüŕçé ŕüļé çĥéçķš ŕéţàîñ execution.analyzers, îñçļüđîñĝ üñšüþþöŕţéđ šéḿàñţîç ĝüîđàñçé, ţĥŕöüĝĥ ţĥé šàḿé šöüŕçé-çĥéçķ îḿþļéḿéñţàţîöñ àš öŕđîñàŕý check. Ţàŕĝéţ çöṽéŕàĝé àñđ šţàļéñéšš çöñţîñüé ţö üšé àçţüàļ šöüŕçé/ţàŕĝéţ þàîŕš.

ÇöḿḿàñđÎñþüţĜļöƃ / đîŕƑöŕḿàţ àẋîšÞŕöĵéçţÑöñ-žéŕö éẋîţš
upñöñéñöñéţéẋţ·ĵšöñ·ýàḿļŕéǫüîŕéđ1
statusñöñéñöñéţéẋţ·ĵšöñ·ýàḿļŕéǫüîŕéđñöñé (àļŵàýš 0)
check [files…]þöšîţîöñàļýéšţéẋţ·ĵšöñ·ýàḿļþŕéƒéŕŕéđ3 ĝàţé, 4 đîđ ñöţ ŕüñ, 1 öþ
check --shipþöšîţîöñàļýéšţéẋţ·ĵšöñ·ýàḿļŕéǫüîŕéđ3 ĝàţé, 4 đîđ ñöţ ŕüñ
stats [files…]þöšîţîöñàļ, šţđîñýéšţéẋţ·ĵšöñ·ýàḿļþŕéƒéŕŕéđ2 þéŕ-ƒîļé
inspect [files…]þöšîţîöñàļ, šţđîñýéšţéẋţ·ĵšöñ·ýàḿļ (+--jsonl šţŕéàḿ)þŕéƒéŕŕéđ2 þéŕ-ƒîļé
translate [files…]þöšîţîöñàļ, -iýéšţéẋţ·ĵšöñ·ýàḿļþŕéƒéŕŕéđ1
pseudo-translate [files…]þöšîţîöñàļ, -iýéšţéẋţ·ĵšöñ·ýàḿļþŕéƒéŕŕéđ1
run [flow]-iýéšţéẋţ·ĵšöñ·ýàḿļþŕéƒéŕŕéđ1
extractþŕöĵéçţ çöñţéñţ, öŕ þöšîţîöñàļ + -o <kpz>ýéšţéẋţ·ĵšöñ·ýàḿļŕéǫüîŕéđ, öŕ à .kpz ŵöŕķšþàçé1
merge-i (ƒîļé, ĝļöƃ, đîŕ), öŕ à .kpz ŵöŕķšþàçéýéšţéẋţ·ĵšöñ·ýàḿļŕéǫüîŕéđ, öŕ à .kpz ŵöŕķšþàçé1
apply [changeset]þöšîţîöñàļ öŕ šţđîññöñéţéẋţ·ĵšöñ·ýàḿļþŕéƒéŕŕéđ3 đŕîƒţ
pack / unpack / infoþöšîţîöñàļ àŕçĥîṽéñöñéţéẋţ·ĵšöñ·ýàḿļþŕéƒéŕŕéđ / ñöñé1
add / ls / rmþöšîţîöñàļ þàţţéŕñšýéšţéẋţ·ĵšöñ·ýàḿļŕéǫüîŕéđ1
exec <tool> <files…>þöšîţîöñàļýéšţéẋţ·ĵšöñ·ýàḿļḿéḿöŕý + ţéŕḿš ƃöüñđ ƒŕöḿ þŕöĵéçţ1
kcat / kgrep / ksed / kconvþöšîţîöñàļ, šţđîñĝļöƃš ýéš, đîŕš ñééđ -r (ksed: -R)ţéẋţ·ĵšöñ·ýàḿļñöñé2; ķĝŕéþ 1 = ñö ḿàţçĥ
kdiff a [b]1–2 þöšîţîöñàļñöñéţéẋţ·ĵšöñ·ýàḿļñöñé1 đéŕ
flows / tools / formatsñöñéñöñéţéẋţ·ĵšöñ·ýàḿļñöñé1
plugin …þöšîţîöñàļ ñàḿéñöñéţéẋţ·ĵšöñ·ýàḿļñöñé1; đöçţöŕ 1 üñĥéàļţĥý
models …þöšîţîöñàļ ḿöđéļñöñéţéẋţ·ĵšöñ·ýàḿļñöñé1
memory … / terms …þöšîţîöñàļ / --name,--local,--fileimport-dir ŵàļķšţéẋţ·ĵšöñ·ýàḿļŕéšöüŕçé ƒļàĝš1
voice …þöšîţîöñàļ / --input-text / šţđîññöñéţéẋţ·ĵšöñ·ýàḿļþŕöƒîļé ƒļàĝš3 ḿîñ-šçöŕé
credentials …þöšîţîöñàļ ñàḿéñöñéţéẋţ·ĵšöñ·ýàḿļñöñé1
config …þöšîţîöñàļ ķéý/ṽàļüéñöñéţéẋţ·ĵšöñ·ýàḿļþöšîţîöñàļ ƒöŕḿ: ŕéǫüîŕéđ1
version / update / telemetry / completionñöñéñöñéţéẋţ·ĵšöñ·ýàḿļñöñé1
mcp / engine serveþŕöţöçöļ šţŕéàḿšñöñéþŕöţöçöļþŕéƒéŕŕéđ1

Đéļîƃéŕàţé éẋçéþţîöñš

Ţĥŕéé đéþàŕţüŕéš àŕé îñţéñţîöñàļ àñđ đöçüḿéñţéđ ŕàţĥéŕ ţĥàñ ƒîẋéđ:

  • kgrep/kcat/ksed ŕéǫüîŕé -r ƒöŕ đîŕéçţöŕîéš. Ţĥéý àŕé éẋþļîçîţ éḿüļàţîöñš öƒ ÞÖŠÎẊ ţööļš, àñđ ḿàţçĥîñĝ ţĥéîŕ çöñţŕàçţ îš ŵĥàţ ḿàķéš ţĥéḿ üšéƒüļ.
  • kgrep éẋîţš 1 öñ ñö-ḿàţçĥ. Šàḿé ŕéàšöñ.
  • kapi status àļŵàýš éẋîţš 0. Ţàŕĝéţ-ļàñĝüàĝé đŕîƒţ îš þéñđîñĝ ŵöŕķ, ñöţ ƒàîļüŕé, šö ţĥé ŕéþöŕţîñĝ çöḿḿàñđ ñéṽéŕ ƒàîļš öñ îţ. kapi check --ship îš ţĥé éẋþļîçîţ éñƒöŕçéḿéñţ þöîñţ; šéé ţĥé çöñṽéŕĝéñçé ḿöđéļ.

Öñé çöñƒîĝ ṽéŕƃ

kapi config îš ţĥé öñļý çöñƒîĝüŕàţîöñ çöḿḿàñđ. À þļüĝîñ đöéš ñöţ šĥîþ îţš öŵñ: îţ đéçļàŕéš à ķéý ñàḿéšþàçé îñ îţš ḿàñîƒéšţ (capabilities.config_namespaces), àñđ kapi ŕöüţéš kapi config set <namespace>.<key> … ţö ţĥàţ þļüĝîñ'š öŵñ ĝļöƃàļ çöñƒîĝ ƒîļé ŵîţĥ ţĥé þŕéƒîẋ šţŕîþþéđ, ţĥé šàḿé ƒîļé àñđ ķéý ţĥé þļüĝîñ àļŕéàđý ŕéàđš. kapi config list šþàñš kapi'š öŵñ ķéýš àñđ éṽéŕý îñšţàļļéđ þļüĝîñ'š ñàḿéšþàçé.

KAPI_CONFIG_DIR çöñţàîñš þļüĝîñ çöñƒîĝ ƒîļéš ţöö ($KAPI_CONFIG_DIR/<plugin>/<plugin>.yaml), šö ţĥé îñ-ŕéþö îšöļàţîöñ çöñţŕàçţ çöṽéŕš ñàḿéšþàçéđ ŵŕîţéš.