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

Ç-07: Ṽöîçé þŕöƒîļéš

Šüḿḿàŕý

Ţĥé ṽöîçé-þŕöƒîļé šüƃšýšţéḿ ķééþš ĝéñéŕàţéđ àñđ ţŕàñšļàţéđ çöñţéñţ îñ ṽöîçé. Îţš çöŕé ţýþé, profile.VoiceProfile, îš à þöŕţàƃļé ÝÀḾĻ đöçüḿéñţ đéšçŕîƃîñĝ ţöñé, šţýļé, ṽöçàƃüļàŕý ŕüļéš, éẋàḿþļéš, àñđ ļöçàļé, çĥàññéļ àñđ þéŕšöñà öṽéŕŕîđéš. Ţŵö ŕéĝîšţéŕéđ ţööļš éṽàļüàţé ţéẋţ àĝàîñšţ à þŕöƒîļé: à đéţéŕḿîñîšţîç, öƒƒļîñé voice-vocab-check àñđ àñ ĻĻḾ-ƃàšéđ voice-check. Ƒîñđîñĝš çàŕŕý à šéṽéŕîţý àñđ à ŕüñ-àñçĥöŕéđ þöšîţîöñ àñđ ŕöļļ üþ îñţö àñ ḾǪḾ-îñšþîŕéđ 0–100 çöḿþļîàñçé šçöŕé.

Ţĥé kapi voice çöḿḿàñđ ţŕéé éẋþöšéš ţĥîš àš à ţéẋţ-ƒîŕšţ, ĴŠÖÑ-ƒîŕšţ šüŕƒàçé ţĥàţ ŵöŕķš ƒüļļý öƒƒļîñé àĝàîñšţ à šţàŕţéŕ þàçķ, à šţàñđàļöñé ÝÀḾĻ ƒîļé, ţĥé þŕöĵéçţ'š ṽöîçé šţöŕé, öŕ à þŕöƒîļé ƃöüñđ ƃý à þŕöĵéçţ ŕéçîþé. À šḿàļļ ḾÇÞ šüŕƒàçé ḿîŕŕöŕš ţĥé đéţéŕḿîñîšţîç þàţĥ ƒöŕ àĝéñţš.

Çöñţéẋţ

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

  • Þöŕţàƃļé àñđ ŕéṽîéŵàƃļé. À þŕöƒîļé îš à ÝÀḾĻ đöçüḿéñţ à ţéàḿ çöḿḿîţš àñđ ŕéṽîéŵš, ŵîţĥ ñö ƃàçķîñĝ šţöŕé ŕéǫüîŕéđ, ţĥé šàḿé ŵàý à ŕéçîþé îš þöŕţàƃļé (Ç-01).
  • Öƒƒļîñé ƃý đéƒàüļţ, ÀÎ-öþţîöñàļ. À ṽöçàƃüļàŕý çĥéçķ (ƒöŕƃîđđéñ, çöḿþéţîţöŕ àñđ þŕéƒéŕŕéđ ţéŕḿš, þļüš ŕéĝüļàŕ-éẋþŕéššîöñ þàţţéŕñš) îš đéţéŕḿîñîšţîç àñđ ñééđš ñö ñéţŵöŕķ. À ḿöđéļ-ƃàçķéđ çĥéçķ ƒöŕ ţĥé šüƃĵéçţîṽé đîḿéñšîöñš îš öþţ-îñ àñđ çŕéđéñţîàļ-ĝàţéđ.
  • Çöḿþöšàƃļé ŵîţĥ ţĥé ŕéšţ öƒ ţĥé éñĝîñé. Ṽöîçé éṽàļüàţîöñ ŕüñš àš ŕéĝîšţéŕéđ ţööļš (É-03) šö îţ çöḿþöšéš îñţö ƒļöŵš, ŕéüšéš ţĥé šçĥéḿà àñđ çöñƒîĝ ḿàçĥîñéŕý, àñđ ŵŕîţéš ƒîñđîñĝš àš ƃļöçķ àññöţàţîöñš öţĥéŕ ţööļš àñđ ţĥé ÜÎ çàñ ŕéàđ.
  • Šéṽéŕàļ šüŕƒàçéš. Ţĥé šàḿé çàþàƃîļîţý îš ŕéàçĥàƃļé ƒŕöḿ ţĥé ÇĻÎ, ƒŕöḿ àñ ḾÇÞ çļîéñţ, àñđ ƒŕöḿ ţĥé ƃüñđļéđ àĝéñţ šķîļļ (Š-03).

Ţéŕḿš (Ç-08) ĥàñđļé çöñšîšţéñçý àţ ţĥé çöñçéþţ ļéṽéļ; à ṽöîçé þŕöƒîļé îš ţĥé ƃŕöàđéŕ, þŕöšé-ļéṽéļ ĝüàŕđŕàîļ. Ţĥé ţŵö îñţéŕšéçţ àţ ṽöçàƃüļàŕý ŕüļéš, ŵĥîçĥ ţĥé ṽöçàƃüļàŕý çĥéçķ çàñ çŕöšš-ŕéƒéŕéñçé àĝàîñšţ à ţéŕḿš šţöŕé.

Đéçîšîöñ

Ţĥé đàţà ḿöđéļ

VoiceProfile (core/profile) îš ţĥé çàñöñîçàļ ţýþé, ļöàđéđ ƒŕöḿ ÝÀḾĻ ƃý profile.LoadProfileYAML, ţĥé šîñĝļé ļöàđéŕ üšéđ ƃý šţàñđàļöñé ƒîļéš, ţĥé éḿƃéđđéđ šţàŕţéŕ þàçķš àñđ ţĥé ṽöîçé šţöŕé:

  • ToneProfile: þéŕšöñàļîţý àđĵéçţîṽéš, ƒöŕḿàļîţý, éḿöţîöñ, ĥüḿöŕ, àñđ ƒŕéé-ţéẋţ ĝüîđéļîñéš. Ţöñé ṽàļüéš àŕé đéšçŕîƃéđ ŕàţĥéŕ ţĥàñ éñüḿéŕàţéđ: à ŕéĝîšţéŕ öüţšîđé ţĥé çöñṽéñţîöñàļ šéţ ļöàđš, àñđ ṽàļîđàţîöñ ŕéþöŕţš îţ àš àñ àđṽîšöŕý ñöţé.
  • StyleRules: àçţîṽé ṽöîçé, šéñţéñçé ļéñĝţĥ, þöîñţ öƒ ṽîéŵ, çöñţŕàçţîöñš, àñđ þŕöĥîƃîţéđ/ŕéǫüîŕéđ ŕéĝüļàŕ-éẋþŕéššîöñ þàţţéŕñš. À Pattern çàŕŕîéš à šéṽéŕîţý, àñ öþţîöñàļ rate (max ḿàţçĥéš þéŕ per_words ŵöŕđš, ŵĥîçĥ ţüŕñš à þŕöĥîƃîţîöñ îñţö à çéîļîñĝ; üñđéŕ ţĥé çéîļîñĝ ñöţĥîñĝ îš ŕéþöŕţéđ, öṽéŕ îţ éṽéŕý ḿàţçĥ îš), àñđ àñ öþţîöñàļ scope (prose, code öŕ heading; éḿþţý ḿéàñš éṽéŕýŵĥéŕé). Ţĥé šţýļé éñüḿš šţàý çļöšéđ, ƃéçàüšé çöđé ŕéàđš ţĥéḿ.
  • VocabularyRules: þŕéƒéŕŕéđ, ƒöŕƃîđđéñ àñđ çöḿþéţîţöŕ ţéŕḿ ŕüļéš, þļüš àƃƃŕéṽîàţîöñš. À TermRule çàŕŕîéš ţĥé ţéŕḿ, àñ öþţîöñàļ ŕéþļàçéḿéñţ, ñöţé àñđ šéṽéŕîţý, forms (ţĥé öţĥéŕ šüŕƒàçé šĥàþéš ţĥé ţéŕḿ ţàķéš, đéçļàŕéđ ŕàţĥéŕ ţĥàñ đéŕîṽéđ, ŵĥîçĥ kapi voice expand ƒîļļš îñ ƃý àšķîñĝ à ḿöđéļ öñçé îñ ţĥé þŕöƒîļé'š öŵñ ļàñĝüàĝé), case_sensitive (öƒƒ ƃý đéƒàüļţ), scope (ţĥé šàḿé ṽàļüéš à þàţţéŕñ ţàķéš), do_not_translate (ŵĥàţ ĝîṽéš à ƃàŕé ţéŕḿ ŵîţĥ ñö ŕéþļàçéḿéñţ îţš ḿéàñîñĝ), àñđ concept_id, ŵĥîçĥ ţîéš ţĥé ŕüļé ţö à çöñçéþţ îñ ţĥé ţéŕḿš šţöŕé àñđ ţĥé ĝŕàþĥ àñđ šţàýš éḿþţý ƒöŕ à šţàñđàļöñé þŕöƒîļé.
  • VoiceExampleš: ƃéƒöŕé/àƒţéŕ ŕéŵŕîţéš ŵîţĥ éẋþļàñàţîöñš.
  • LocaleOverride, ChannelOverride àñđ þéŕšöñà ḿàþš: àđĵüšţḿéñţš ŕéšöļṽéđ öñ ţöþ öƒ ţĥé ƃàšé þŕöƒîļé, îñ ţĥàţ öŕđéŕ. À çĥàññéļ'š öŕ þéŕšöñà'š ţöñé àñđ šţýļé ŕéþļàçé ţĥé ŕéšöļṽéđ öñéš. Ţĥéîŕ ṽöçàƃüļàŕý ĝöéš ţĥŕöüĝĥ öñé ţîĝĥţéñ-öñļý ḿéŕĝé: ƒöŕƃîđđéñ àñđ çöḿþéţîţöŕ ţéŕḿš éẋţéñđ ţĥé ŕéšöļṽéđ ļîšţš, àñđ à þŕéƒéŕŕéđ ţéŕḿ îš đŕöþþéđ ŵĥéŕé àñ éàŕļîéŕ ŕüļé àļŕéàđý ĝöṽéŕñš öñé öƒ îţš ƒöŕḿš, šö ñéîţĥéŕ öṽéŕŕîđé çàñ ŕé-àļļöŵ öŕ ŕéŵöŕđ ŵĥàţ ţĥé þŕöƒîļé öŕ à ļöçàļé šéţ. ValidateProfile ŵàŕñš àƃöüţ éàçĥ þŕéƒéŕŕéđ ţéŕḿ ţĥé ḿéŕĝé đŕöþš.

Ţĥé þŕöƒîļé àļšö çàŕŕîéš ṽéŕšîöñîñĝ ƒîéļđš (à ṽéŕšîöñ šñàþšĥöţ þéŕ üþđàţé, àñđ ñàḿéđ ţàĝ ŕéƒéŕéñçéš) ƒöŕ šţöŕéš ţĥàţ ţŕàçķ ĥîšţöŕý.

profile.TermRule îš àļšö ţĥé öñé šĥàþé éṽéŕý ĝöṽéŕñéđ šţéþ ţàķéš îţš ţéŕḿîñöļöĝý îñ. term-check, translate, recycle àñđ dnt-check àļļ ŕéàđ term_rules: àš []profile.TermRule, ŵĥéţĥéŕ ţĥé ŕüļéš çöḿé ƒŕöḿ ţĥé þŕöƒîļé'š öŵñ ṽöçàƃüļàŕý, ƒŕöḿ ţĥé ţéŕḿš šţöŕé, öŕ ƒŕöḿ à ŕéçîþé, àñđ profile.TermRuleMap îš ţĥé šîñĝļé þŕöĵéçţîöñ öƒ ţĥàţ ļîšţ îñţö ţĥé ḿàþ à þŕöḿþţ ŕéñđéŕš àñđ ţĥé çöñţéẋţ ƒîñĝéŕþŕîñţ ĥàšĥéš, šö ţĥé šţàļéñéšš ĝàţé àñđ ţĥé þŕöđüçéŕš çàññöţ đîšàĝŕéé àƃöüţ ŵĥàţ ĝöṽéŕñéđ à ţàŕĝéţ. À ŕüļé'š šéṽéŕîţý đéçîđéš ŵĥéţĥéŕ à ṽîöļàţîöñ ƒàîļš öŕ öñļý ŕéþöŕţš (minor àñđ neutral ŵàŕñ), àñđ à ŕüļé ŵîţĥ àñ éḿþţý ŕéþļàçéḿéñţ îš šķîþþéđ ƃý ţĥé ţööļš üñļéšš îţ îš ḿàŕķéđ đö-ñöţ-ţŕàñšļàţé, ƃéçàüšé "šàý ţĥîš îñšţéàđ" ñééđš à ţĥîš. Ĥöŵ ţĥé šţöŕé àñđ ţĥé ŕüļéš àŕé ļöçàţéđ îñ à ţéẋţ îš Ç-08'š šüƃĵéçţ.

Šĥàŕéđ çöñšţŕàîñţš àñđ ƒàçţüàļ ĝüîđàñçé

À þŕöƒîļé'š ţöþ-ļéṽéļ constraints ļîšţ îš îñđéþéñđéñţ öƒ îţš ţöñé àñđ šţýļé šéçţîöñš. Çĥàññéļ àñđ þéŕšöñà öṽéŕŕîđéš ŕéþļàçé þŕéšéñţàţîöñ þŕéƒéŕéñçéš; šĥàŕéđ çöñšţŕàîñţš ŕéḿàîñ àţţàçĥéđ ţö ţĥé šéļéçţéđ þŕöƒîļé. Þŕöƒîļé šéļéçţîöñ šţîļļ çĥööšéš öñé ĝöṽéŕñîñĝ þŕöƒîļé, ŵîţĥ ñö îḿþļîçîţ ḿéŕĝé ƃéţŵééñ þŕöƒîļéš.

Éàçĥ çöñšţŕàîñţ çàŕŕîéš àñ ÎĐ, ṽéŕšîöñ, šöüŕçé ŕéƒéŕéñçé àñđ šţàţéḿéñţ. À prohibited_pattern ĥàš àñ ŔÉ2 éẋþŕéššîöñ àñđ éḿîţš çŕîţîçàļ ƒîñđîñĝš ţĥŕöüĝĥ profile.PatternFindings, ţĥé šĥàŕéđ šţýļé-àñđ-çöñšţŕàîñţ þàţĥ üšéđ ƃý ţĥé ṽöîçé ţööļ àñđ profile.Findings. Ḿéţàđàţà þŕéšéŕṽéš ţĥé çöñšţŕàîñţ'š ÎĐ, ṽéŕšîöñ àñđ šöüŕçé. À guidance ŕéçöŕđ çàŕŕîéš à ƒàçţüàļ ŕéǫüîŕéḿéñţ îñţö ƒüļļ àñđ çöḿþàçţ ĝüîđéš. Đéţéŕḿîñîšţîç çĥéçķš đö ñöţ ṽéŕîƒý îţš ḿéàñîñĝ, àñđ ŕéþöŕţ çöṽéŕàĝé îđéñţîƒîéš šéḿàñţîç àñàļýšîš àš üñšüþþöŕţéđ. À đéţéŕḿîñîšţîç ĝàţé çàñ þàšš ŵĥîļé ƒàçţüàļ ĝüîđàñçé šţîļļ ñééđš ŕéṽîéŵ.

Öþţîöñàļ šçöþé ḿàţçĥéš éẋàçţ ļöçàļé, çĥàññéļ àñđ þéŕšöñà çööŕđîñàţéš. Ļöçàļé šþéļļîñĝ îš ñöŕḿàļîžéđ ŵîţĥöüţ éẋþàñđîñĝ à ļàñĝüàĝé ţö ŕéĝîöñàļ ṽàŕîàñţš. À çöñšţŕàîñţ çàñ çàŕŕý àñ éẋçéþţîöñ ŵîţĥ à ñöñéḿþţý šçöþé, ŕéàšöñ, approved_by àñđ approval_ref. Ţĥéšé ƒîéļđš ŕéçöŕđ ţĥé ļöçàļ àüţĥöŕ'š àššéŕţéđ þŕöṽéñàñçé; ţĥéý đö ñöţ àüţĥéñţîçàţé àñ àþþŕöṽàļ. Éẋçéþţîöñš ƃéļöñĝ ţö ţĥé šĥàŕéđ çöñšţŕàîñţ àñđ çàññöţ ƃé îñţŕöđüçéđ ƃý à þŕéšéñţàţîöñ öṽéŕŕîđé. Çöñţéẋţ ŕéţŕîéṽàļ éẋþöšéš àþþļîçàƃļé, öüţ-öƒ-šçöþé àñđ éẋçéþţéđ ŕéçöŕđš, îñçļüđîñĝ ḿàţçĥîñĝ éẋçéþţîöñš.

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

ŠǪĻîţé àñđ ÞöšţĝŕéŠǪĻ šţöŕéš þéŕšîšţ çöñšţŕàîñţš îñ ţĥéîŕ öŵñ ĴŠÖÑ çöļüḿñ àñđ îñçļüđé ţĥéḿ îñ àŕçĥîṽéđ þŕöƒîļé ṽéŕšîöñš. Àñ üþđàţé ţĥàţ öḿîţš çöñšţŕàîñţš þŕéšéŕṽéš ţĥé šţöŕéđ ṽàļüé ƒöŕ çļîéñţš ŵîţĥöüţ ţĥé ƒîéļđ. Àñ éẋþļîçîţ éḿþţý àŕŕàý ŕéḿöṽéš îţ. Ţĥé đéšķţöþ þŕöƒîļé-ƒîļé ŵŕîţéŕ ƒöļļöŵš ţĥé šàḿé üþđàţé ŕüļé. Àüţĥöŕ çöñšţŕàîñţš îñ þŕöƒîļé ÝÀḾĻ; à ṽîšüàļ éđîţöŕ ḿàý þŕéšéŕṽé ţĥé ŕéçöŕđš ŵîţĥöüţ éẋþöšîñĝ éđîţîñĝ çöñţŕöļš ƒöŕ ţĥéḿ.

Ƒîñđîñĝš àñđ šçöŕîñĝ

À ƒîñđîñĝ îš profile.VoiceFinding, à ţýþé àļîàš ţö check.Finding ƒŕöḿ ţĥé ƒŕàḿéŵöŕķ'š çöñţéñţ-ṽéŕîƒîçàţîöñ çöŕé (core/check). Îţ çàŕŕîéš à ƒŕéé-ƒöŕḿ Category (à ṽöîçé ƒîñđîñĝ šéţš îţ ţö öñé öƒ ţĥé ƒîẋéđ đîḿéñšîöñš: ţöñé, šţýļé, ṽöçàƃüļàŕý, çļàŕîţý, çöḿþļîàñçé), à šéṽéŕîţý, à ĥüḿàñ ḿéššàĝé, àñ öþţîöñàļ šüĝĝéšţîöñ, ţĥé öŕîĝîñàļ ţéẋţ, öþţîöñàļ ḿéţàđàţà, àñđ à Position model.Anchor, šö à ƒîñđîñĝ îš àñçĥöŕéđ ţö ţĥé ŕüñš îţ çöñçéŕñš, ţĥé šàḿé ŕüñ-ŕàñĝé ḿöđéļ öṽéŕļàýš àñđ ŕéđàçţîöñ üšé (Ƒ-02).

Ţööļš àţţàçĥ ƒîñđîñĝš ţö à ƃļöçķ àš à VoiceAnnotation (àññöţàţîöñ ţýþé voice), ŵĥîçĥ àļšö çàŕŕîéš ţĥé þŕöƒîļé îđ, ţĥé öṽéŕàļļ šçöŕé àñđ îţš öŵñ þöšîţîöñ.

profile.CalculateScore ŕöļļš ƒîñđîñĝš üþ üšîñĝ ţĥé ḾǪḾ-îñšþîŕéđ þéñàļţý ŵéîĝĥţš îñ core/check.SeverityWeight (ñéüţŕàļ 0, ḿîñöŕ 1, ḿàĵöŕ 5, çŕîţîçàļ 25) þéŕ đîḿéñšîöñ. Éàçĥ đîḿéñšîöñ šţàŕţš àţ 100 àñđ îš ŕéđüçéđ ƃý îţš þéñàļţý, çļàḿþéđ àţ 0; ţĥé öṽéŕàļļ šçöŕé îš 100 ḿîñüš ţĥé ţöţàļ þéñàļţý. Ţĥé đîḿéñšîöñš àŕé ƒîẋéđ, šö à çöḿþļîàñçé šçöŕé àļŵàýš ĥàš à çöñšîšţéñţ šĥàþé.

Ţĥîš ƒîñđîñĝ, šéṽéŕîţý àñđ šçöŕîñĝ þàţĥ îš šĥàŕéđ àçŕöšš éṽéŕý çĥéçķéŕ (ţéŕḿîñöļöĝý, đö-ñöţ-ţŕàñšļàţé, þļàçéĥöļđéŕ, ŕéĝîšţéŕ, ṽöîçé) ŕàţĥéŕ ţĥàñ ƃéîñĝ ƃéšþöķé ţö ṽöîçé. Ṽöîçé îš öñé çĥéçķšéţ öṽéŕ ţĥé ĝéñéŕîç çöŕé.

Ţĥé ţööļš

  • voice-vocab-check (core/tools): đéţéŕḿîñîšţîç àñđ öƒƒļîñé. Îţ šçàñš šöüŕçé ţéẋţ ƒöŕ ƒöŕƃîđđéñ, çöḿþéţîţöŕ àñđ þŕéƒéŕŕéđ-ţéŕḿ ṽîöļàţîöñš àñđ þàţţéŕñ ĥîţš, éḿîţţîñĝ ƒîñđîñĝš ŵîţĥ þöšîţîöñš. Îţ öþţîöñàļļý ţàķéš à ţéŕḿš šţöŕé ţö ƒîļţéŕ ƃý ṽöîçé ṽöçàƃüļàŕý. Îţ îš àñ àññöţàţé-çļàšš ţööļ: îţ ŵŕîţéš ţĥé àññöţàţîöñ, ñéṽéŕ ţĥé çöñţéñţ. Ţĥîš îš ţĥé ƒàšţ ƒîŕšţ þàšš.
  • voice-check (core/ai/tools): ḿöđéļ-ƃàçķéđ. Îţ àšķš à þŕöṽîđéŕ (É-07) ţö šçöŕé ţĥé šüƃĵéçţîṽé đîḿéñšîöñš àĝàîñšţ ţĥé ŕéñđéŕéđ ṽöîçé ĝüîđé. Îţ đéçļàŕéš ţĥàţ îţ ŕéǫüîŕéš çŕéđéñţîàļš àñđ ĥàš àñ ÀÞÎ-çàļļ šîđé 郃éçţ, þŕöđüçéš ţĥé voice àññöţàţîöñ, àñđ ŕüñš ŵîţĥ ƃöüñđéđ þéŕ-ƃļöçķ þàŕàļļéļîšḿ.
  • voice-infer (core/ai/tools): ḿöđéļ-ƃàçķéđ îñƒéŕéñçé öƒ à þŕöƒîļé ƒŕöḿ éẋîšţîñĝ çöñţéñţ, ƒöŕ à ţéàḿ ţĥàţ ĥàš à ƃöđý öƒ ŵŕîţîñĝ àñđ ñö ŵŕîţţéñ-đöŵñ ṽöîçé.

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

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

Þàţţéŕñ šçöþé

À šţýļé þàţţéŕñ'š šçöþé ƒöļļöŵš ŵĥàţ îţ àššéŕţš. À þŕöĥîƃîţéđ þàţţéŕñ šàýš "ţĥîš ţéẋţ ḿüšţ ñöţ çöñţàîñ Ẋ", ŵĥîçĥ éṽéŕý ƃļöçķ àñšŵéŕš öñ îţš öŵñ, šö profile.Findings ḿàţçĥéš îţ þéŕ ƃļöçķ ƃéšîđé ţĥé ṽöçàƃüļàŕý ŕüļéš. À ŕéǫüîŕéđ þàţţéŕñ šàýš "ţĥîš ţéẋţ ḿüšţ çöñţàîñ Ẋ" (ţĥé çàļļ ţö àçţîöñ, ţĥé ţŕàđéḿàŕķ ļîñé, ţĥé šàƒéţý ñöţîçé), àñđ ţĥàţ îš à çļàîḿ àƃöüţ ţĥé đöçüḿéñţ: ñö þàŕàĝŕàþĥ öƒ à þàĝé çàŕŕîéš îţ, ţĥé þàĝé đöéš. profile.DocumentFindings ţĥéŕéƒöŕé éṽàļüàţéš ţĥé ŕéǫüîŕéđ þàţţéŕñš öñçé öṽéŕ à ƒîļé'š çöñţéñţ àñđ ŕéþöŕţš öñé ƒîñđîñĝ þéŕ üñšàţîéđ ŕüļé àĝàîñšţ ţĥé ƒîļé, ŵîţĥ ñö ƃļöçķ, ƃéçàüšé àñ àƃšéñçé šîţš ñöŵĥéŕé îñ þàŕţîçüļàŕ. À šţŕéàḿîñĝ ţööļ šééš öñé ƃļöçķ àţ à ţîḿé àñđ šö éṽàļüàţéš ţĥé ƃļöçķ-šçöþé ĥàļƒ öñļý.

profile.PatternRuleCount îš ţĥé ñüḿƃéŕ àñý šüŕƒàçé ŕéþöŕţš àš à þŕöƒîļé'š þàţţéŕñ-ŕüļé ţöţàļ, šö ŵĥàţ à þŕöƒîļé çàŕđ çöüñţš îš ŵĥàţ ţĥé ĝàţéš àþþļý.

Öñé ŕéšöļüţîöñ çĥàîñ

profile.ResolveProfileFromContext îš ţĥé öñļý þļàçé à þŕöƒîļé'š þŕéçéđéñçé îš đéçîđéđ, ḿöšţ šþéçîƒîç ƒîŕšţ:

  1. Éẋþļîçîţ: àñ îđ ƒŕöḿ ţööļ çöñƒîĝ öŕ à çàļļ þàŕàḿéţéŕ.
  2. Çöļļéçţîöñ: à þŕöƒîļé ţĥé çàļļéŕ àļŕéàđý ļöàđéđ, éļšé ţĥé çöļļéçţîöñ'š öŵñ profile.PropertyProfileID þŕöþéŕţý.
  3. Šţŕéàḿ → 4. Þŕöĵéçţ → 5. Ŕööţ.

Ţĥé ţîéŕš ƃéļöŵ ţĥé çöļļéçţîöñ àŕé þŕöþéŕţý ḿàþš ŕéàđ öƒƒ šţöŕéđ ŕöŵš, ŵĥîçĥ îš ĥöŵ à þŕöĵéçţ çŕéàţéđ ƃý à çöññéçţöŕ öŕ àñ éđîţöŕ, ŵîţĥ ñö ŕéçîþé, îš ĝöṽéŕñéđ. À ŕéçîþé-ĝöṽéŕñéđ þŕöĵéçţ ƒîļļš ţĥé šàḿé çöļļéçţîöñ ţîéŕ: à çöļļéçţîöñ'š channel: šéļéçţš ţĥé þŕöƒîļé (Ç-02), ţĥé ĥöšţ ļöàđš îţ (à ŕéçîþé ƃîñđš à þŕöƒîļé ƒîļé öŕ à šţàŕţéŕ þàçķ, ŵĥîçĥ à šţöŕé îđ çàññöţ ñàḿé) àñđ ĥàñđš îţ öṽéŕ àš ţĥé àļŕéàđý-ļöàđéđ çöļļéçţîöñ þŕöƒîļé. Šö ţĥé ţŵö ķîñđš öƒ þŕöĵéçţ đéŕ îñ ŵĥîçĥ ţîéŕš ţĥéý þöþüļàţé, ñéṽéŕ îñ ĥöŵ ţĥé ţîéŕš àŕé ŕàñķéđ, àñđ àñ éẋþļîçîţ þéŕ-çàļļ þŕöƒîļé öüţŕàñķš à ŕéçîþé éẋàçţļý àš îţ öüţŕàñķš à šţöŕéđ ŕöŵ.

Ļöçàļé, çĥàññéļ àñđ þéŕšöñà öṽéŕŕîđéš àŕé àþþļîéđ öñçé, àţ ţĥé éñđ öƒ ţĥàţ çĥàîñ, ƃý ResolveProfile. À çĥàññéļ ƃöüñđ ţö à šçöþé đéšçŕîƃéš ŵĥéŕé ţĥé çöñţéñţ îš þüƃļîšĥéđ; ţĥé ŕéšöļṽé çöñţéẋţ'š öŵñ çĥàññéļ îš ţĥé çàļļéŕ öṽéŕŕîđîñĝ îţ ƒöŕ öñé çàļļ, ŵĥîçĥ îš ţĥé ţîéŕ à --channel ƒļàĝ öççüþîéš.

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

Ţĥé ŕéçîþé àüţĥöŕš; öñé ṽéñüé àþþļîéš

À ŕéçîþé îš àñ àüţĥöŕîñĝ šüŕƒàçé, ñöţ à šéçöñđ ŕüñţîḿé šöüŕçé. Îţ îš ṽéŕšîöñ-çöñţŕöļļéđ àñđ àüţĥöŕîţàţîṽé öṽéŕ ŵĥàţ ţĥé ĝöṽéŕñàñçé îš; àţ àñý ḿöḿéñţ éẋàçţļý öñé ṽéñüé àþþļîéš îţ: ţĥé ŕéçîþé ŵĥéñ ţĥé þŕöĵéçţ ŕüñš öñ îţš öŵñ, à šéŕṽîçé'š šţöŕéđ ŕöŵš ŵĥéñ îţ ŕüñš çöññéçţéđ. Ţŵö ļîṽé šöüŕçéš ŵöüļđ ḿéàñ à ṽöîçé ţĥàţ đéþéñđš öñ ŵĥéŕé ţĥé ļööþ ĥàþþéñéđ ţö ŕüñ, àñđ šöḿéöñé ǫüîéţļý éđîţîñĝ öṽéŕ à çöḿḿîţţéđ þŕöƒîļé.

Ŵĥàţ çŕöššéš à þüšĥ îš éṽéŕý đéçļàŕéđ çöļļéçţîöñ, ţĥé þöîñţ îţ šîţš àţ àñđ ţĥé ṽöîçé ĝöṽéŕñîñĝ îţ, šö ƃöţĥ ṽéñüéš ŕéšöļṽé ţĥé šàḿé ṽöîçé ƒöŕ ţĥé šàḿé çöñţéñţ. Ŵĥàţ đöéš ñöţ çŕöšš îš à þŕöƒîļé'š termstore:, à þàţĥ îñţö ţĥé ļöçàļ þŕöĵéçţ, àñđ à þàţĥ ḿéàñš ñöţĥîñĝ ţö à šéŕṽîçé ţĥàţ ĝöṽéŕñš ţéŕḿîñöļöĝý ƒŕöḿ à šĥàŕéđ ṽöçàƃüļàŕý. Ţĥàţ đîṽéŕĝéñçé îš ŕéàļ àñđ îš ŕéþöŕţéđ ŕàţĥéŕ ţĥàñ ĥîđđéñ: à ŕüñ öṽéŕ à þŕöĵéçţ ţĥàţ ƃîñđš à ţéŕḿš šţöŕé þéŕ þŕöƒîļé àñđ ƃîñđš à ṽéñüé þŕîñţš à ŵàŕñîñĝ ţö šţđéŕŕ àñđ þŕöçééđš. À ŕéçîþé ƒîéļđ ţĥàţ îš ñöţ ŕéàđàƃļé àţ ţĥé öţĥéŕ ṽéñüé îš ñöţ à ŕéàšöñ ţö ŕéƒüšé ţĥé ŕüñ.

Þŕöƒîļé šöüŕçéš àñđ ţĥé çöḿḿàñđ ţŕéé

kapi voice ŕéšöļṽéš à þŕöƒîļé ƒŕöḿ öñé öƒ ţĥŕéé ḿüţüàļļý éẋçļüšîṽé šöüŕçéš:

  • --profile <name>: à þŕöƒîļé îñ ţĥé ṽöîçé šţöŕé. Îñšîđé à þŕöĵéçţ ţĥàţ šţöŕé îš ţĥé voice_profiles ţàƃļé öƒ ţĥé þŕöĵéçţ þööļ, .kapi/work/store.db (Ç-03), šö ţĥé šàḿé ŕéçîþé ŕéšöļṽéš ţĥé šàḿé þŕöƒîļé ƒŕöḿ àñý đîŕéçţöŕý îñ ţĥé ţŕéé; àñ éẋþļîçîţ --name, --local öŕ --file šéļéçţš à šţàñđàļöñé šţöŕé ƒîļé îñšţéàđ, ḿîŕŕöŕîñĝ ţĥé ţéŕḿš šţöŕé àñđ ţĥé çöñţéñţ ḿéḿöŕý, àñđ öüţšîđé à þŕöĵéçţ ţĥé šţàñđàļöñé voice.db îš ţĥé đéƒàüļţ.
  • --profile-file <path>: à šţàñđàļöñé, ŕéṽîéŵàƃļé þŕöƒîļé ÝÀḾĻ.
  • --pack <name>: à ƃüîļţ-îñ šţàŕţéŕ þàçķ.

Ŵîţĥ ñö šöüŕçé ƒļàĝ, ŕéšöļüţîöñ ƒàļļš ƃàçķ ţö ţĥé þŕöĵéçţ îñ šçöþé: ţĥé ṽöîçé ĝöṽéŕñîñĝ ţĥé çöñţéñţ çöļļéçţîöñ ţĥàţ çļàîḿš ţĥé ƒîļé, éļšé ţĥé ŕéçîþé'š defaults.voice (à ƃîñđîñĝ šéļéçţîñĝ à þŕöƒîļé ƒîļé, à šţöŕé þŕöƒîļé öŕ à þàçķ, ŕéšöļṽéđ ŕéļàţîṽé ţö ţĥé þŕöĵéçţ ŕööţ), ţĥéñ ţĥé çöñṽéñţîöñ ƒîļé àţ .kapi/voice.yaml, öŕ voice.yaml àţ ţĥé þŕöĵéçţ ŕööţ ƒöŕ à þŕöĵéçţ ţĥàţ ķééþš îţ ţĥéŕé. Ţĥîš ļéţš kapi voice check DRAFT.md ŵöŕķ ƒļàĝ-ƒŕéé îñšîđé à þŕöĵéçţ. Ļöçàļé àñđ çĥàññéļ öṽéŕŕîđéš àþþļý öñ ţöþ ṽîà --locale/--channel; àñ éẋþļîçîţ --channel ŵîñš öṽéŕ ţĥé çĥàññéļ ţĥé ŕéçîþé đéçļàŕéš.

ÇöḿḿàñđÞüŕþöšé
newŠçàƒƒöļđ à çöḿḿéñţéđ, šçĥéḿà-ṽàļîđ þŕöƒîļé ÝÀḾĻ, öþţîöñàļļý šééđéđ ƒŕöḿ à þàçķ.
guide / showŔéñđéŕ ţĥé þŕöƒîļé àš à ḿàŕķđöŵñ ṽöîçé ĝüîđé ţö îñĵéçţ îñţö àñ àššîšţàñţ'š çöñţéẋţ.
checkŠçöŕé ţéẋţ àĝàîñšţ ţĥé þŕöƒîļé: ṽöçàƃüļàŕý àļŵàýš, --ai àđđš ţĥé ḿöđéļ çĥéçķ. --min-score ţüŕñš îţ îñţö à ĝàţé.
rewriteŠüƃšţîţüţé ƒöŕƃîđđéñ àñđ çöḿþéţîţöŕ ţéŕḿš ƒöŕ ţĥéîŕ àþþŕöṽéđ ŕéþļàçéḿéñţš: đéţéŕḿîñîšţîç, öƒƒļîñé, ñö ḿöđéļ. À ŕüļé ţĥàţ ḿàţçĥéš ŵîţĥöüţ à ŕéþļàçéḿéñţ îš ŕéþöŕţéđ üñđéŕ skipped.
expandÀšķ à ḿöđéļ ƒöŕ ţĥé šüŕƒàçé ƒöŕḿš éàçĥ ṽöçàƃüļàŕý ţéŕḿ ţàķéš àñđ ŵŕîţé ţĥéḿ îñţö ţĥé þŕöƒîļé àš forms:, ƒöŕ ŕéṽîéŵ îñ à đ.
validateÇĥéçķ à þŕöƒîļé đöçüḿéñţ àĝàîñšţ ţĥé šçĥéḿà; ƃļöçķîñĝ þŕöƃļéḿš ƒàîļ, àđṽîšöŕý ñöţéš þŕîñţ àƒţéŕ ţĥé ṽéŕđîçţ.
profilesĻîšţ þŕöƒîļéš: ţĥé ṽöîçé šţöŕé þļüš ţĥé ƃüîļţ-îñ þàçķš.
importÎḿþöŕţ à þŕöƒîļé ÝÀḾĻ îñţö ţĥé ṽöîçé šţöŕé.
packÎñšţàļļ à ƃüîļţ-îñ šţàŕţéŕ þàçķ îñţö ţĥé ṽöîçé šţöŕé.
pointerŴŕîţé ţĥé ḿàŕķéŕ-đéļîḿîţéđ šéçţîöñ îñţö ţĥé þŕöĵéçţ'š àššîšţàñţ ƒîļé (CLAUDE.md, öŕ àñ AGENTS.md àļŕéàđý àţ ţĥé ŕööţ) ţĥàţ ţéļļš àñ àššîšţàñţ ţĥé ṽöîçé îš ĥéļđ ƃý kapi àñđ ţĥàţ guide ŕéţŕîéṽéš îţ.

Ţĥé þöîñţéŕ éẋîšţš ƃéçàüšé àñ àššîšţàñţ šţàñđîñĝ îñ à þŕöĵéçţ ĥàš ñö ŕéàšöñ ţö öþéñ kapi.yaml ŵĥéñ îţš ţàšķ îš ţö ŵŕîţé à ĝüîđé, àñđ šö ñéṽéŕ ļéàŕñš ţĥé þŕöĵéçţ ĥàš à ṽöîçé. Ţĥé šéçţîöñ ñàḿéš ţĥé ṽöîçé, šàýš kapi ĥöļđš îţ, àñđ ĝîṽéš ţĥé ŕéţŕîéṽàļ çöḿḿàñđ; îţ çàŕŕîéš ñöñé öƒ ţĥé ĝüîđàñçé, ŵĥîçĥ šţàýš öñé çöḿḿàñđ àŵàý àñđ šö çàññöţ ĝö šţàļé îñ ţĥé ƒîļé. kapi init ŵŕîţéš îţ ŵĥéñéṽéŕ ţĥé þŕöĵéçţ îţ šçàƒƒöļđš öŕ àđöþţš ƃîñđš à ṽöîçé (--no-pointer öþţš öüţ), ţĥé đéšķţöþ ŵŕîţéš îţ ŵĥéñ à þŕöƒîļé îš šàṽéđ, àñđ pointer ŵŕîţéš îţ öñ đéḿàñđ; àļļ ţĥŕéé ĝö ţĥŕöüĝĥ host.WriteVoicePointer. Ţĥé ţéẋţ îš coreprofile.RenderVoicePointer, àñđ UpsertVoicePointer ŕéþļàçéš ţĥé šéçţîöñ ƃéţŵééñ îţš ḿàŕķéŕš šö à ŕé-ŕüñ îš îđéḿþöţéñţ àñđ ĥàñđ-ŵŕîţţéñ çöñţéñţ àŕöüñđ îţ šüŕṽîṽéš. À þŕöĵéçţ ţĥàţ üñƃîñđš îţš ṽöîçé ĥàš ţĥé šéçţîöñ ŕéḿöṽéđ öñ ţĥé ñéẋţ ŕüñ ŕàţĥéŕ ţĥàñ ļéƒţ çļàîḿîñĝ à ṽöîçé guide çàññöţ ŕéšöļṽé.

check ŕéàđš îţš šüƃĵéçţ ƒŕöḿ --input-text, à þöšîţîöñàļ ƒîļé, öŕ šţđîñ. check --min-score ŕéţüŕñš ţĥé ǫüàļîţý-ĝàţé šéñţîñéļ ŵĥéñ ţĥé šçöŕé îš ƃéļöŵ ţĥé ţĥŕéšĥöļđ, ŵĥîçĥ ţĥé ÇĻÎ ḿàþš ţö à đîšţîñçţ éẋîţ çöđé (Š-01) šö šķîļļš àñđ ÇÎ çàñ ţéļļ à ƒàîļéđ ĝàţé ƒŕöḿ àñ öþéŕàţîöñàļ éŕŕöŕ. kapi check --voice îš ţĥé þŕöĵéçţ-ļéṽéļ šţýļé ĝàţé, ŵîţĥ --voice-min šéţţîñĝ ţĥé šîḿîļàŕîţý çüţöƒƒ.

Ƒîẋîñĝ öƒƒ-ṽöîçé çöñţéñţ

kapi đöéš ñöţ šéñđ çöñţéñţ ţö à ḿöđéļ ţö ŕéŵŕîţé îţ. Àñ îñ-ṽöîçé ƒîẋ îš çàļļéŕ-šüþþļîéđ: ţĥé àššîšţàñţ ŕéàđš ŵĥàţ àþþļîéš àţ ţĥé þöîñţ (Ç-06), ŕéŵŕîţéš ţĥé öƒƒ-ṽöîçé ţéẋţ îţšéļƒ, àñđ àþþļîéš ţĥé ŕéšüļţ ţĥŕöüĝĥ ţĥé öñé ŵŕîţé ṽéŕƃ, kapi apply. Ţĥé éđîţš ļàñđ ţĥŕöüĝĥ ţĥé ƃýţé-ƒàîţĥƒüļ ŕöüñđ-ţŕîþ ŵîţĥ ñö þŕöṽîđéŕ îñṽöļṽéđ: šţŕüçţüŕé àñđ îñļîñé çöđéš àŕé þŕéšéŕṽéđ, éàçĥ ƃļöçķ îš đŕîƒţ-ĝüàŕđéđ ƃý îţš çöñţéñţ ĥàšĥ, àñđ àñ éđîţ ţĥàţ ŵöüļđ çöŕŕüþţ ḿàŕķüþ îš ŕéĵéçţéđ.

kapi voice rewrite îš à šéþàŕàţé, đéţéŕḿîñîšţîç ĥéļþéŕ: îţ šüƃšţîţüţéš ƒöŕƃîđđéñ àñđ çöḿþéţîţöŕ ţéŕḿš ƒöŕ ţĥéîŕ àþþŕöṽéđ ŕéþļàçéḿéñţš ƃý ŕüļé, öƒƒļîñé, ţĥŕöüĝĥ ţĥé šàḿé ḿàţçĥéŕ àš ţĥé ṽöçàƃüļàŕý çĥéçķ (profile.RewriteVocabulary). À ŕüļé ţĥàţ ñàḿéš ñö ŕéþļàçéḿéñţ, àñđ à ḿàţçĥ öñ à đéçļàŕéđ îñƒļéçţéđ ƒöŕḿ öƒ à ţéŕḿ, šţàý îñ ţĥé ţéẋţ àñđ àŕé ŕéþöŕţéđ üñđéŕ skipped ŵîţĥ ţĥé ţéŕḿ, îţš ļîšţ àñđ šéṽéŕîţý, ţĥé šþéļļîñĝš ḿàţçĥéđ àñđ ţĥé ŕéàšöñ, šö à çàļļéŕ çàñ ţéļļ àñ üñçĥàñĝéđ ţéẋţ ŵîţĥ ñöţĥîñĝ ţö ƒîẋ ƒŕöḿ öñé ţĥàţ šţîļļ çàŕŕîéš ṽîöļàţîöñš. Ţĥé éẋîţ çöđé šţàýš 0. Îţ đöéš ñöţ çàļļ à ḿöđéļ àñđ đöéš ñöţ ţöüçĥ ţöñé, šţýļé öŕ þĥŕàšîñĝ; ţĥöšé àŕé ţĥé çàļļéŕ'š ţö ŕéŵŕîţé.

À ṽöçàƃüļàŕý ŕüļé îš à çĥàñĝé-šéţ éñţŕý

Ƒîẋîñĝ à ŕéçüŕŕîñĝ öƒƒ-ṽöîçé ţéŕḿ àţ ţĥé šöüŕçé (àđđîñĝ à ṽöçàƃüļàŕý ŕüļé šö éṽéŕý ƒüţüŕé đŕàƒţ îš çĥéçķéđ àĝàîñšţ îţ) îš à voice éñţŕý îñ ţĥé šàḿé kapi apply çĥàñĝé-šéţ, àļöñĝšîđé ţĥé çöñţéñţ ƒîẋ ţĥàţ ĵüšţîƒîéš îţ:

{"kind":"voice","op":"add-rule","list":"forbidden","term":"utilize","replacement":"use","severity":"minor"}

Ţĥé éñţŕý àđđš à ţéŕḿ ŕüļé ţö ţĥé ñàḿéđ ṽöçàƃüļàŕý ļîšţ (forbidden, competitor öŕ preferred) öƒ ţĥé çöḿḿîţţéđ þŕöƒîļé ÝÀḾĻ ţĥé ŕéçîþé ƃîñđš, çŕéàţîñĝ àñđ ƃîñđîñĝ öñé îƒ ñöñé éẋîšţš, ţĥéñ ŕé-îḿþöŕţš ţĥàţ þŕöƒîļé îñţö ţĥé ṽöîçé šţöŕé ţĥŕöüĝĥ ţĥé šàḿé profile.LoadProfileYAML þàţĥ. Ţĥé çöḿḿîţţéđ ÝÀḾĻ îš ţĥé šîñĝļé šöüŕçé öƒ ţŕüţĥ àñđ ţĥé đ îš ţĥé ŕéṽîéŵ šüŕƒàçé; ţĥé šţöŕé îš à çöḿþîļéđ çàçĥé ŵŕîţţéñ ƃý ţĥé öñé îḿþöŕţéŕ. Ţĥé öþéŕàţîöñ îš îđéḿþöţéñţ. À ƃîñđîñĝ ţĥàţ þöîñţš àţ à šţàŕţéŕ þàçķ öŕ à šţöŕé þŕöƒîļé ŕàţĥéŕ ţĥàñ à ƒîļé îš ŕéĵéçţéđ: apply éđîţš à çöḿḿîţţéđ ƒîļé, ñöţ à þàçķ öŕ à šţöŕéđ ŕöŵ.

Ƃüîļţ-îñ šţàŕţéŕ þàçķš

Ţĥé ƒŕàḿéŵöŕķ éḿƃéđš à šḿàļļ šéţ öƒ šţàŕţéŕ þàçķš (core/profile/packs, éḿƃéđđéđ ŵîţĥ //go:embed), éàçĥ à çöḿþļéţé þŕöƒîļé ÝÀḾĻ ļöàđéđ ţĥŕöüĝĥ ţĥé šàḿé þàţĥ àš àñý öţĥéŕ þŕöƒîļé. Þàçķš àŕé àñ öñ-ŕàḿþ, ñöţ à šþéçîàļ çàšé: kapi voice new --pack <name> éḿîţš öñé àš àñ éđîţàƃļé ƃàšé. kapi voice profiles ļîšţš ŵĥàţ îš îñšţàļļéđ.

ḾÇÞ šüŕƒàçé

host/mcp_voice.go ŕéĝîšţéŕš ţŵö öƒƒļîñé ṽöîçé ţööļš öñ ţĥé šĥàŕéđ kapi mcp šţđîö šéŕṽéŕ (Š-01) šö ñöñ-ÇĻÎ àĝéñţš ĝéţ þàŕîţý: voice_check šçöŕéš ţéẋţ üšîñĝ ţĥé đéţéŕḿîñîšţîç ṽöçàƃüļàŕý ŕüļéš, àñđ voice_rewrite šüƃšţîţüţéš ƒöŕƃîđđéñ àñđ çöḿþéţîţöŕ ţéŕḿš àñđ ŕéþöŕţš üñđéŕ skipped ŵĥàţ îţ ḿàţçĥéđ àñđ ļéƒţ îñ þļàçé.

Ţĥéšé àŕé ĥàñđ-àüţĥöŕéđ ƃéçàüšé éàçĥ ŵŕàþš à ŕéšöüŕçé (à ṽöîçé þŕöƒîļé, à ţéŕḿš šţöŕé, à çöñţéñţ ḿéḿöŕý) ŕàţĥéŕ ţĥàñ à šîñĝļé þŕöçéššîñĝ ţööļ. Ţĥé ŕéñđéŕéđ ĝüîđé îš ñöţ à ţööļ: îţ îš ŕéàçĥéđ ƃý ŕéàđîñĝ context://<path> öŕ context://profile/<name> (Ç-06), ƃéçàüšé ţĥé ĝüîđé îš þàŕţ öƒ ŵĥàţ àþþļîéš àţ à þöîñţ ŕàţĥéŕ ţĥàñ à ţĥîñĝ ţö àšķ ƒöŕ šéþàŕàţéļý.

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

  • À ṽöîçé þŕöƒîļé îš à þöŕţàƃļé ÝÀḾĻ đöçüḿéñţ ţĥàţ ŵöŕķš ŵîţĥ öŕ ŵîţĥöüţ à šţöŕé, ŕéṽîéŵàƃļé îñ à đ àñđ ŕéüšàƃļé àçŕöšš ţĥé ÇĻÎ, ḾÇÞ, ƒļöŵš àñđ šķîļļš.
  • Ţĥé đéţéŕḿîñîšţîç ṽöçàƃüļàŕý çĥéçķ ĝîṽéš àñ îñšţàñţ, öƒƒļîñé, ŕéþŕöđüçîƃļé šîĝñàļ; ţĥé ḿöđéļ çĥéçķ îš à ƃöüñđéđ, çŕéđéñţîàļ-ĝàţéđ öþţ-îñ ƒöŕ ţĥé šüƃĵéçţîṽé đîḿéñšîöñš.
  • Ƒîñđîñĝš àŕé ŕüñ-àñçĥöŕéđ àñđ àññöţàţîöñ-šĥàþéđ, šö ţĥéý çöḿþöšé ŵîţĥ ţĥé çöñţéñţ ḿöđéļ àñđ šüŕƒàçé üñîƒöŕḿļý ŕàţĥéŕ ţĥàñ ţĥŕöüĝĥ à ƃéšþöķé šîđé çĥàññéļ.
  • Ţĥé ḾǪḾ-šţýļé šçöŕîñĝ îš à šîñĝļé ƒüñçţîöñ öṽéŕ ƒîñđîñĝš, šö éṽéŕý šüŕƒàçé çöḿþüţéš ţĥé šàḿé šçöŕé ţĥé šàḿé ŵàý.
  • Öñé ţéŕḿ-ŕüļé šĥàþé šéŕṽéš ţĥé þŕöƒîļé, ţĥé ţéŕḿš šţöŕé àñđ éṽéŕý ĝöṽéŕñéđ šţéþ, šö à ŕüļé đéçļàŕéđ àñýŵĥéŕé îš éñƒöŕçéđ àñđ ƒîñĝéŕþŕîñţéđ ţĥé šàḿé ŵàý.

Šéé àļšö