fix: use underscore sub_skill experimental flag id (#483)

* fix: use underscore sub_skill experimental flag id

* chore: keep changeset wording unchanged
This commit is contained in:
liruifengv 2026-06-05 18:01:34 +08:00 committed by GitHub
parent f555c89de7
commit f61165aa9a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 14 additions and 14 deletions

View file

@ -37,7 +37,7 @@ export const FLAG_DEFINITIONS = [
surface: 'core',
},
{
id: 'sub-skill',
id: 'sub_skill',
title: 'Sub-skill',
description: 'Enable discovery of nested skills inside skill bundles that declare has-sub-skill.',
env: 'KIMI_CODE_EXPERIMENTAL_SUB_SKILL',

View file

@ -9,7 +9,7 @@ import {
import { UPDATE_CONFIG_SKILL } from './update-config';
type SubSkillFlagResolver = {
enabled(id: 'sub-skill'): boolean;
enabled(id: 'sub_skill'): boolean;
};
export function registerBuiltinSkills(
@ -19,7 +19,7 @@ export function registerBuiltinSkills(
const experimentalFlags = options.experimentalFlags ?? flags;
registry.registerBuiltinSkill(MCP_CONFIG_SKILL);
registry.registerBuiltinSkill(UPDATE_CONFIG_SKILL);
if (experimentalFlags.enabled('sub-skill')) {
if (experimentalFlags.enabled('sub_skill')) {
registry.registerBuiltinSkill(SUB_SKILL_PARENT);
registry.registerBuiltinSkill(SUB_SKILL_REVIEW);
registry.registerBuiltinSkill(SUB_SKILL_CONSOLIDATE);

View file

@ -8,7 +8,7 @@ import { escapeXmlAttr } from '../utils/xml-escape';
const LISTING_DESC_MAX = 250;
type SubSkillFlagResolver = {
enabled(id: 'sub-skill'): boolean;
enabled(id: 'sub_skill'): boolean;
};
export class SkillNotFoundError extends Error {

View file

@ -12,7 +12,7 @@ const PROJECT_BRAND_DIRS = ['.kimi-code/skills'] as const;
const PROJECT_GENERIC_DIRS = ['.agents/skills'] as const;
type SubSkillFlagResolver = {
enabled(id: 'sub-skill'): boolean;
enabled(id: 'sub_skill'): boolean;
};
// Bounds recursion so a directory symlink cycle inside a skill root cannot
@ -394,7 +394,7 @@ function hasSubSkillEnabled(
skill: SkillDefinition,
experimentalFlags: SubSkillFlagResolver,
): boolean {
if (!experimentalFlags.enabled('sub-skill')) return false;
if (!experimentalFlags.enabled('sub_skill')) return false;
const nested = skill.metadata['metadata'];
const nestedFlag =
typeof nested === 'object' && nested !== null

View file

@ -486,7 +486,7 @@ describe('AgentAPI.startBtw', () => {
homedir: sessionDir,
rpc: createSessionRpc([]),
skills: { explicitDirs: [skillsRoot] },
experimentalFlags: new FlagResolver({}, FLAG_DEFINITIONS, { 'sub-skill': false }),
experimentalFlags: new FlagResolver({}, FLAG_DEFINITIONS, { 'sub_skill': false }),
});
try {
@ -504,7 +504,7 @@ describe('AgentAPI.startBtw', () => {
homedir: sessionDir,
rpc: createSessionRpc([]),
skills: { explicitDirs: [skillsRoot] },
experimentalFlags: new FlagResolver({}, FLAG_DEFINITIONS, { 'sub-skill': true }),
experimentalFlags: new FlagResolver({}, FLAG_DEFINITIONS, { 'sub_skill': true }),
});
try {

View file

@ -25,7 +25,7 @@ describe('builtin skill: sub-skill', () => {
it('registers through registerBuiltinSkills but stays out of the model skill listing', () => {
const registry = new SkillRegistry();
registerBuiltinSkills(registry, {
experimentalFlags: new FlagResolver({}, FLAG_DEFINITIONS, { 'sub-skill': true }),
experimentalFlags: new FlagResolver({}, FLAG_DEFINITIONS, { 'sub_skill': true }),
});
expect(registry.getSkill('sub-skill')).toBeDefined();
@ -37,7 +37,7 @@ describe('builtin skill: sub-skill', () => {
it('remains visible in the full skill list for CLI display when enabled', () => {
const registry = new SkillRegistry();
registerBuiltinSkills(registry, {
experimentalFlags: new FlagResolver({}, FLAG_DEFINITIONS, { 'sub-skill': true }),
experimentalFlags: new FlagResolver({}, FLAG_DEFINITIONS, { 'sub_skill': true }),
});
expect(registry.listSkills().some((skill) => skill.name === 'sub-skill')).toBe(true);
@ -46,7 +46,7 @@ describe('builtin skill: sub-skill', () => {
it('does not register sub-skill builtins when the scoped flag is disabled', () => {
const registry = new SkillRegistry();
registerBuiltinSkills(registry, {
experimentalFlags: new FlagResolver({}, FLAG_DEFINITIONS, { 'sub-skill': false }),
experimentalFlags: new FlagResolver({}, FLAG_DEFINITIONS, { 'sub_skill': false }),
});
expect(registry.getSkill('sub-skill')).toBeUndefined();
@ -70,7 +70,7 @@ describe('builtin skill: sub-skill.review', () => {
it('registers through registerBuiltinSkills', () => {
const registry = new SkillRegistry();
registerBuiltinSkills(registry, {
experimentalFlags: new FlagResolver({}, FLAG_DEFINITIONS, { 'sub-skill': true }),
experimentalFlags: new FlagResolver({}, FLAG_DEFINITIONS, { 'sub_skill': true }),
});
expect(registry.getSkill('sub-skill.review')).toBeDefined();
@ -100,7 +100,7 @@ describe('builtin skill: sub-skill.consolidate', () => {
it('registers through registerBuiltinSkills', () => {
const registry = new SkillRegistry();
registerBuiltinSkills(registry, {
experimentalFlags: new FlagResolver({}, FLAG_DEFINITIONS, { 'sub-skill': true }),
experimentalFlags: new FlagResolver({}, FLAG_DEFINITIONS, { 'sub_skill': true }),
});
expect(registry.getSkill('sub-skill.consolidate')).toBeDefined();

View file

@ -391,7 +391,7 @@ describe('discoverSkills shape and ordering', () => {
const skills = await discoverSkills({
roots: [{ path: root, source: 'user' }],
experimentalFlags: new FlagResolver({}, FLAG_DEFINITIONS, { 'sub-skill': true }),
experimentalFlags: new FlagResolver({}, FLAG_DEFINITIONS, { 'sub_skill': true }),
});
expect(skills.map((s) => s.name)).toEqual(['inner', 'outer']);