import type { ActionEffect } from "./types.js"; /** * The same three values as `ActionEffect`, kept as a separate name because * this module answers about a NAME and that one is a declaration. An alias * rather than a parallel definition, so the two can never come to mean * different things. */ export type ActionClass = ActionEffect; /** Where a classification came from. `unresolved` is what the drift guard fails on. */ export type ActionClassSource = "override" | "lexicon" | "epic-default" | "unresolved"; export interface ActionClassification { class: ActionClass; source: ActionClassSource; } /** Split `category.action`, tolerating an action name that contains a dot. */ export declare function splitTaskName(taskName: string): { tool: string; action: string; }; /** * Classify one action. * * Order: explicit override, then the verb lexicon over every underscore * segment (a mutate verb anywhere wins, because `metasound_add_node` adds a * node and `cue_get_graph` does not), then the Epic default, then unresolved. */ export declare function classifyActionClass(tool: string, action: string): ActionClassification; /** Convenience over a `category.action` task name. */ export declare function classifyTaskClass(taskName: string): ActionClassification; /** * The lexicon's answer for an action nobody declared, as an `ActionEffect`. * * This is the ONLY entry point runtime injection uses, and the only reason the * verb lists above still exist. Everything ue-mcp itself declares carries its * effect on the ActionSpec; what remains are actions this package cannot see * at build time: Epic's wrapped engine tools, read out of a live registry that * can carry toolsets no release has shipped against, and a plugin action whose * manifest did not say what it does. * * Callers record the result as `effectSource: "inferred"`, so a guess is never * read back later as a declaration. */ export declare function inferActionEffect(tool: string, action: string): ActionEffect; /** * Does this class need the caller to name an editor? * * `unknown` is gated exactly like `mutate`. The whole point of keeping it as a * distinct label is that it is not a guess; the gate treats a thing that might * be a mutation as a mutation. */ export declare function requiresExplicitEditor(cls: ActionClass): boolean;