/** * Caller-directed skills allowlist rendering (issue #38), descriptor-driven * (RFC-02 change 2). The delegating agent picks the subset from its own * registry; the CLI supplies the resolved picks and the registry's known * names; this module turns them into per-harness argv parts by reading * the descriptor's `skills` field: * * - a load flag (pi): the discovery.skills facet off, then one load per * pick - the allowlist is exact, only the caller's picks load. * - overrides via settings (claude): no per-skill load flag; the registry * is already present, so the allowlist renders as the complement OFF - * `--settings '{"skillOverrides":{"":"off",...}}'` for every known * skill except the picks. * - overrides via a config array (codex): the complement OFF plus the * picks restated ON through `-c skills.config=[...]`. Each skill gets * TWO entries, one per selector shape codex resolves, because each * covers a hazard the other misses (issue #209, verified against codex * 0.155.1 and 0.157.1 with `codex debug prompt-input`): * path - `path="//SKILL.md"`, the root taken from the picks * (all share one); works even when a skill's frontmatter `name` * differs from its registry basename, but matches only that exact * file, so a second copy of the skill at another path stays enabled * (observed with the synced `/` layout of the shared * registry). * name - `name=""`; matches every discovered copy of the name, but * no-ops when the frontmatter name differs from hcn's basename. * The picks are rendered `enabled=true` alongside the disabled * complement: `skills.config` is a disable-set (unlisted skills stay * enabled), but user-level `config.toml` `[[skills.config]]` disables * sit in a lower-precedence layer than the per-call overrides, and * layers replace entries per selector - restating the pick under both * selectors shields it from a user disable of either shape and keeps * at least one enabled entry for every non-empty selection. * - null (muse): refuse, with the support list derived like every other * refusal's. */ import type { HarnessDescriptor } from "../knowledge/descriptor.js"; import type { ArgvParts } from "./inline-settings.js"; /** The skills turn option: the caller's resolved picks (absolute paths) * and every skill name in the registry they came from. */ export interface SkillsSelection { readonly picks: readonly string[]; readonly known: readonly string[]; } export declare const basenameOf: (p: string) => string; export declare const renderSkillsSelection: (h: HarnessDescriptor, skills: SkillsSelection) => ArgvParts; //# sourceMappingURL=skills-selection.d.ts.map