import type { AnyTool } from '../types/effectTool.js'; import type { FileSystem } from '../types/filesystem.js'; import type { SkillEntry, SkillLike, SkillMeta, SkillResolverContext, SkillSource, SkillStoreLike } from '../types/skills.js'; export interface SkillWireAgent { /** Threaded to `SkillResolverContext.agentId` when `skills` contains a resolver. */ id?: string; skills?: SkillSource; tools?: Record; globalTools?: Record; flows?: Array<{ name: string; }>; workspace?: unknown; } /** Session context a `SkillResolver` entry needs, plus this session's previously resolved * output (by resolver position) so a repeat call reuses it instead of re-invoking. */ export interface SkillResolverInput { ctx: SkillResolverContext; cached?: Readonly>; } export declare function isSkillStore(value: SkillEntry | SkillSource): value is SkillStoreLike; export declare function collectRegisteredNames(agent: SkillWireAgent): Set; export declare function validateSkillAllowedTools(skills: SkillLike[], registered: Set): void; /** * Turns whatever the author wrote in `AgentConfig.skills` into one store. * * `fs` is the agent's workspace filesystem, needed only to resolve `string` entries. A path * without a workspace is an authoring mistake, so it throws rather than silently yielding no * skills — a missing skill is invisible at runtime and looks like the model ignoring it. */ export declare function prepareSkillStore(source: SkillSource, fs?: FileSystem, resolver?: SkillResolverInput): Promise<{ store: SkillStoreLike; metas: SkillMeta[]; skills: SkillLike[]; contentHash: string; /** This session's resolver output, by resolver position — present only when `source` * contained a `SkillResolver`. The caller persists it so a later turn reuses it. */ resolvedSkillsByIndex?: Record; }>;