import "reflect-metadata";
/**
 * Options for the EdenNamespace decorator
 */
export interface EdenNamespaceOptions {
    /**
     * Optional event interface name for this namespace
     * The interface should define events without the namespace prefix
     *
     * @example
     * ```typescript
     * interface ProcessNamespaceEvents {
     *   "launched": { instance: AppInstance };
     *   "stopped": { appId: string };
     * }
     *
     * @EdenNamespace("process", { events: "ProcessNamespaceEvents" })
     * class ProcessManager {
     *   // ...
     * }
     * ```
     */
    events?: string;
}
/**
 * Class decorator to set the namespace for all command handlers and events in a manager
 * @param namespace - The namespace for this manager (e.g., "process", "view")
 * @param options - Optional configuration including event interface
 *
 * @example
 * ```typescript
 * interface ProcessEvents {
 *   "launched": { appId: string };
 * }
 *
 * @EdenNamespace("process", { events: ProcessEvents })
 * class ProcessManager {
 *   @EdenHandler("launch")
 *   async handleLaunch(args: { appId: string }) {
 *     // This becomes "process/launch"
 *   }
 * }
 * ```
 */
export declare function EdenNamespace(namespace: string, options?: EdenNamespaceOptions): <T extends {
    new (...args: any[]): {};
}>(constructor: T) => T;
/**
 * Method decorator to register a method as a command handler
 * @param command - The command name (will be prefixed with the class namespace)
 *
 * @example
 * ```typescript
 * @EdenNamespace("process")
 * class ProcessManager {
 *   @EdenHandler("launch")
 *   async handleLaunch(args: { appId: string }) {
 *     // Registered as "process/launch"
 *   }
 * }
 * ```
 */
export interface EdenHandlerOptions {
    /**
     * Permission required to execute this handler.
     * Specified without namespace prefix (e.g., "read" not "fs/read").
     * The full permission will be "namespace/permission".
     */
    permission?: string;
}
export declare function EdenHandler(command: string, options?: EdenHandlerOptions): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
//# sourceMappingURL=CommandDecorators.d.ts.map