import type { IngestTarget } from '@mmnto/totem'; export declare function buildNpxCommand(isWin: boolean): { command: string; args: string[]; }; export type ConfigFormat = 'ts' | 'yaml' | 'toml'; export type Ecosystem = 'javascript' | 'python' | 'rust' | 'go'; export interface DetectedProject { hasTypeScript: boolean; hasSrc: boolean; hasDocs: boolean; hasSpecs: boolean; hasContext: boolean; hasSessions: boolean; preferredConfigFormat: ConfigFormat; ecosystems: Ecosystem[]; } export type AiTool = 'Claude Code' | 'Gemini CLI' | 'Cursor' | 'JetBrains Junie' | 'GitHub Copilot'; export interface HookInstallerResult { file: string; action: 'created' | 'exists' | 'skipped' | 'merged'; err?: string; /** Overrides the default action text in the post-init summary. Used by * force-mode skill refreshes (`--force-skill-refresh`, mmnto-ai/totem#2008) * to surface destructive-by-consent semantics in the summary line. */ summaryActionOverride?: string; } export interface AiToolInfo { name: AiTool; mcpPath: string | null; reflexFile: string | null; serverEntry: Record | null; hookInstaller?: (cwd: string, opts?: { forceSkillRefresh?: boolean; }) => Promise; } export type EmbeddingTier = 'openai' | 'ollama' | 'gemini' | 'none'; export interface DetectedOrchestrator { block: string; config: Record; } /** Check whether any of the given env keys are set (in process.env or .env file content). */ export declare function hasKey(envContent: string, ...keyNames: string[]): boolean; /** * Base AI tool definitions (without hook installers). * Hook installers are wired up in init.ts since they depend on scaffolding helpers. */ export declare const AI_TOOLS: AiToolInfo[]; export declare function detectProject(cwd: string): DetectedProject; export declare function detectAiTools(cwd: string): AiToolInfo[]; /** * Auto-detect the best embedding tier from the environment. * Checks for API keys in env and .env, and optionally for a running Ollama instance. */ export declare function detectEmbeddingTier(cwd: string): EmbeddingTier; /** * Every LLM-backed role tag (lowercased `runOrchestrator` tag) a generated * config names explicitly. Emitted configs assign a model per role instead of * committing an ambient `orchestrator.defaultModel` — config names roles, not * one ambient vendor default (Tenet-16 corollary, mmnto-ai/totem-strategy#800 * item 1). A role absent from this list fails loud at invocation ("No model * specified") instead of silently riding a vendor default. */ export declare const INIT_ORCHESTRATOR_ROLES: readonly ["compile", "docs", "spec", "shield", "triage", "extract", "reviewlearn"]; /** * Model IDs stamped into generated consumer configs, one per detection branch * (docs/reference/supported-models.md § Updating Defaults, location 3). * `claudeCli` is the claude CLI's own tier alias, which tracks that CLI's * current Sonnet instead of pinning a dated ID. */ export declare const INIT_ORCHESTRATOR_MODELS: { readonly geminiCli: "gemini-3.5-flash"; readonly claudeCli: "sonnet"; readonly gemini: "gemini-3.5-flash"; readonly anthropic: "claude-sonnet-5"; readonly openai: "gpt-5.6-terra"; readonly ollama: "gemma4"; }; /** Map every emitted role to the same model ID (uniform per-provider default). */ export declare function buildRoleOverrides(model: string): Record; /** * Render the TS-template orchestrator block from the same object that gets * serialized into YAML/TOML configs, so the two surfaces cannot drift. * Handles every JSON-shaped value type; `null`/`undefined` render as an * absent key (optional-key semantics, matching the YAML/TOML serializers). */ export declare function renderOrchestratorBlock(config: Record): string; /** * Auto-detect the best orchestrator from the environment. * Priority: gemini CLI → claude CLI → API keys (GEMINI → ANTHROPIC → OPENAI) → ollama → null. * * Detection resolves the consumer's local environment at genesis; the emitted * block names a model per role rather than committing an ambient * `defaultModel`. Note `totem lesson compile --cloud` deliberately resolves * from `--model` / `defaultModel` only (mmnto-ai/totem#2357), so it stays * fail-loud under this shape. */ export declare function detectOrchestrator(cwd: string): DetectedOrchestrator | null; export declare function buildTargets(detected: DetectedProject): IngestTarget[]; export declare function formatTargets(targets: IngestTarget[]): string; //# sourceMappingURL=init-detect.d.ts.map