aicm
Version:
A TypeScript CLI tool for managing AI IDE rules across different projects and teams
70 lines (69 loc) • 2.7 kB
TypeScript
import { CosmiconfigResult } from "cosmiconfig";
export interface RawConfig {
rulesDir?: string;
targets?: string[];
presets?: string[];
overrides?: Record<string, string | false>;
mcpServers?: MCPServers;
workspaces?: boolean;
skipInstall?: boolean;
}
export interface Config {
rulesDir?: string;
targets: string[];
presets?: string[];
overrides?: Record<string, string | false>;
mcpServers?: MCPServers;
workspaces?: boolean;
skipInstall?: boolean;
}
export type MCPServer = {
command: string;
args?: string[];
env?: Record<string, string>;
url?: never;
} | {
url: string;
env?: Record<string, string>;
command?: never;
args?: never;
} | false;
export interface MCPServers {
[serverName: string]: MCPServer;
}
export interface RuleFile {
name: string;
content: string;
sourcePath: string;
source: "local" | "preset";
presetName?: string;
}
export interface RuleCollection {
[target: string]: RuleFile[];
}
export interface ResolvedConfig {
config: Config;
rules: RuleFile[];
mcpServers: MCPServers;
}
export declare const ALLOWED_CONFIG_KEYS: readonly ["rulesDir", "targets", "presets", "overrides", "mcpServers", "workspaces", "skipInstall"];
export declare const SUPPORTED_TARGETS: readonly ["cursor", "windsurf", "codex"];
export type SupportedTarget = (typeof SUPPORTED_TARGETS)[number];
export declare function detectWorkspacesFromPackageJson(cwd: string): boolean;
export declare function resolveWorkspaces(config: unknown, configFilePath: string, cwd: string): boolean;
export declare function applyDefaults(config: RawConfig, workspaces: boolean): Config;
export declare function validateConfig(config: unknown, configFilePath: string, cwd: string, isWorkspaceMode?: boolean): asserts config is Config;
export declare function loadRulesFromDirectory(rulesDir: string, source: "local" | "preset", presetName?: string): Promise<RuleFile[]>;
export declare function resolvePresetPath(presetPath: string, cwd: string): string | null;
export declare function loadPreset(presetPath: string, cwd: string): Promise<{
config: Config;
rulesDir: string;
}>;
export declare function loadAllRules(config: Config, cwd: string): Promise<{
rules: RuleFile[];
mcpServers: MCPServers;
}>;
export declare function applyOverrides(rules: RuleFile[], overrides: Record<string, string | false>, cwd: string): RuleFile[];
export declare function loadConfigFile(searchFrom?: string): Promise<CosmiconfigResult>;
export declare function loadConfig(cwd?: string): Promise<ResolvedConfig | null>;
export declare function saveConfig(config: Config, cwd?: string): boolean;