/**
 * Unified manifest types and operations for Nori skillsets and skills
 *
 * The nori.json format is used by both skillsets and skills.
 * This module provides type definitions and read/write utilities.
 */
/**
 * Skillset content type definitions
 * These types represent the inlined content discovered from a skillset directory.
 */
export type SkillsetSkill = {
    id: string;
    name: string;
    description: string;
    scripts?: Array<string> | null;
};
export type SkillsetSlashCommand = {
    command: string;
    description: string;
};
export type SkillsetSubagent = {
    id: string;
    name: string;
    description: string;
    scripts?: Array<string> | null;
};
/**
 * The type of package this nori.json represents
 */
export type NoriJsonType = "skillset" | "skill" | "inlined-skill" | "subagent" | "inlined-subagent";
/**
 * Dependencies section of nori.json
 */
export type NoriJsonDependencies = {
    skills?: Record<string, string> | null;
    subagents?: Record<string, string> | null;
    slashCommands?: Record<string, string> | null;
};
/**
 * The unified nori.json manifest format
 *
 * This type serves as the single manifest type for both skillsets and skills.
 * - name and version are required
 * - Skillset content (skills, subagents, slashcommands) are optional top-level fields
 * - Skill-specific content (scripts) is an optional top-level field
 */
export type NoriJson = {
    name: string;
    version: string;
    author?: string | null;
    description?: string | null;
    license?: string | null;
    keywords?: Array<string> | null;
    repository?: string | null;
    dependencies?: NoriJsonDependencies | null;
    skills?: Array<SkillsetSkill> | null;
    subagents?: Array<SkillsetSubagent> | null;
    slashcommands?: Array<SkillsetSlashCommand> | null;
    scripts?: Array<string> | null;
    type?: NoriJsonType | null;
    registryURL?: string | null;
    [key: string]: unknown;
};
/**
 * Read and parse skillset metadata from a skillset directory
 *
 * Reads from nori.json.
 *
 * @param args - Function arguments
 * @param args.skillsetDir - Path to skillset directory
 *
 * @returns Parsed skillset metadata
 */
export declare const readSkillsetMetadata: (args: {
    skillsetDir: string;
}) => Promise<NoriJson>;
/**
 * Write skillset metadata to nori.json in a skillset directory
 *
 * @param args - Function arguments
 * @param args.skillsetDir - Path to skillset directory
 * @param args.metadata - Skillset metadata to write
 */
export declare const writeSkillsetMetadata: (args: {
    skillsetDir: string;
    metadata: NoriJson;
}) => Promise<void>;
/**
 * Add or update a skill dependency in a skillset's nori.json
 *
 * If nori.json does not exist, creates a basic one using the skillset directory
 * name as the skillset name.
 *
 * @param args - Function arguments
 * @param args.skillsetDir - Path to skillset directory
 * @param args.skillName - Name of the skill to add
 * @param args.version - Version string (e.g., "*", "^1.0.0", "1.2.3")
 */
export declare const addSkillToNoriJson: (args: {
    skillsetDir: string;
    skillName: string;
    version: string;
}) => Promise<void>;
/**
 * Add or update a subagent dependency in a skillset's nori.json
 *
 * If nori.json does not exist, creates a basic one using the skillset directory
 * name as the skillset name.
 *
 * @param args - Function arguments
 * @param args.skillsetDir - Path to skillset directory
 * @param args.subagentName - Name of the subagent to add
 * @param args.version - Version string (e.g., "*", "^1.0.0", "1.2.3")
 */
export declare const addSubagentToNoriJson: (args: {
    skillsetDir: string;
    subagentName: string;
    version: string;
}) => Promise<void>;
/**
 * Ensure a nori.json manifest exists for a skillset directory.
 *
 * If the directory exists and looks like a skillset (has a known config file,
 * or both skills/ and subagents/ subdirectories) but has no nori.json, creates
 * one with the folder name as `name` and version "0.0.1".
 *
 * This is a backwards-compatibility shim for user-created skillsets that
 * were never given a nori.json manifest.
 *
 * @param args - Function arguments
 * @param args.skillsetDir - Path to skillset directory
 * @param args.configFileNames - Config file names to look for (defaults to ["AGENTS.md", "CLAUDE.md"])
 */
export declare const ensureNoriJson: (args: {
    skillsetDir: string;
    configFileNames?: Array<string> | null;
}) => Promise<void>;
//# sourceMappingURL=nori.d.ts.map