feat(flow): drop the generic /flow builtin entry

The bare /flow skill was a dead end in both directions: with no flow
definitions it could only report an empty directory (it carried no
authoring guide), and with definitions present it bypassed every
guarantee of the projected /flow:<id> path (activation-carried
definition, automatic start, provenance checks) in favor of a manual
read-and-FlowStart route. Discovery is already served by the slash
menu listing each projected flow with its description. The supervisor
contract stays as the shared body of the projected skills; the
flag-flip reload of builtin visibility stays as a general mechanism.
This commit is contained in:
Kaiyi 2026-08-19 11:41:38 +08:00
parent 5b8dd79137
commit fa130d376e
2 changed files with 2 additions and 43 deletions

View file

@ -1,11 +0,0 @@
---
name: flow
description: Run a multi-stage flow definition with gated stage transitions — you supervise the run, dispatch workers per stage, and pass each gate on evidence. Use when the user runs /flow.
disable-model-invocation: true
---
$CONTRACT
The user's input for this activation is: `$ARGUMENTS`
If the input names no flow id, list the files under `.kimi-code/flows/` and ask which to run. If it names no task, ask for one — a run without a stated task cannot be accepted against.

View file

@ -1,35 +1,5 @@
import { registerBuiltinSkill } from '#/app/skillCatalog/builtin/registry';
import { parseSkillText } from '#/app/skillCatalog/parser';
import type { SkillDefinition } from '#/app/skillCatalog/types';
import { FLOW_FLAG_ID } from '../flow';
import FLOW_CONTRACT from './contract.md?raw';
import FLOW_ENTRY from './flow.md?raw';
const PSEUDO_PATH = 'builtin://flow';
/** The shared supervisor contract the body both the generic /flow entry and
* every per-flow skill (see flowsSkillSource) are assembled from. */
/** The shared supervisor contract the body every projected per-flow skill
* (see flowsSkillSource) is assembled from. */
export const FLOW_SUPERVISOR_CONTRACT: string = FLOW_CONTRACT.trim();
const parsed = parseSkillText({
skillMdPath: '/builtin/skills/flow.md',
skillDirName: 'flow',
source: 'builtin',
text: FLOW_ENTRY.replace('$CONTRACT', FLOW_SUPERVISOR_CONTRACT),
});
export const FLOW_SKILL: SkillDefinition = {
...parsed,
path: PSEUDO_PATH,
dir: PSEUDO_PATH,
experimentalFlag: FLOW_FLAG_ID,
metadata: {
...parsed.metadata,
type: parsed.metadata.type ?? 'inline',
disableModelInvocation: true,
},
};
registerBuiltinSkill(FLOW_SKILL);