export interface MindnetSettings { edgeVocabularyPath: string; // vault-relativ graphSchemaPath: string; // vault-relativ (später) maxHops: number; strictMode: boolean; showCanonicalHints: boolean; chainDirection: "forward" | "backward" | "both"; interviewConfigPath: string; // vault-relativ autoStartInterviewOnCreate: boolean; interceptUnresolvedLinkClicks: boolean; autoStartOnUnresolvedClick: boolean; // Auto-start interview when creating note from unresolved link bypassModifier: "Alt" | "Ctrl" | "Shift" | "None"; // Modifier key to bypass intercept (Reading View) editorFollowModifier: "Alt" | "Ctrl" | "Shift" | "None"; // Modifier key required for editor intercept (Live Preview/Source) waitForFirstModifyAfterCreate: boolean; // Wait for Templater to modify file before starting wizard waitForModifyTimeoutMs: number; // Timeout in ms for waiting for modify event debugLogging: boolean; // Enable debug logging for unresolved link handling adoptNewNotesInEditor: boolean; // Auto-adopt newly created notes in editor adoptMaxChars: number; // Max content length to consider note as adopt-candidate adoptConfirmMode: "always" | "onlyLowConfidence" | "never"; // When to show adoption confirmation highConfidenceWindowMs: number; // Time window in ms for high-confidence adoption // Semantic mapping builder settings mappingWrapperCalloutType: string; // default: "abstract" mappingWrapperTitle: string; // default: "🕸️ Semantic Mapping" mappingWrapperFolded: boolean; // default: true defaultEdgeType: string; // default: "" unassignedHandling: "prompt" | "none" | "defaultType" | "advisor"; // default: "prompt" allowOverwriteExistingMappings: boolean; // default: false defaultNotesFolder: string; // default: "" (vault root) // Inline micro edge suggester settings inlineMicroEnabled: boolean; // default: true inlineMaxAlternatives: number; // default: 6 inlineCancelBehavior: "keep_link"; // default: "keep_link" (future: "revert") } export const DEFAULT_SETTINGS: MindnetSettings = { edgeVocabularyPath: "_system/dictionary/edge_vocabulary.md", graphSchemaPath: "_system/dictionary/graph_schema.md", maxHops: 3, strictMode: false, showCanonicalHints: false, chainDirection: "forward", interviewConfigPath: "_system/dictionary/interview_config.yaml", autoStartInterviewOnCreate: false, interceptUnresolvedLinkClicks: true, autoStartOnUnresolvedClick: true, bypassModifier: "Alt", editorFollowModifier: "Ctrl", waitForFirstModifyAfterCreate: true, waitForModifyTimeoutMs: 1200, debugLogging: false, adoptNewNotesInEditor: true, adoptMaxChars: 200, adoptConfirmMode: "onlyLowConfidence", highConfidenceWindowMs: 3000, mappingWrapperCalloutType: "abstract", mappingWrapperTitle: "🕸️ Semantic Mapping", mappingWrapperFolded: true, defaultEdgeType: "", unassignedHandling: "prompt", allowOverwriteExistingMappings: false, defaultNotesFolder: "", inlineMicroEnabled: true, inlineMaxAlternatives: 6, inlineCancelBehavior: "keep_link", }; /** * Optional helper: normalize to Obsidian vault paths (forward slashes). */ export function normalizeVaultPath(p: string): string { return (p || "").trim().replace(/\\/g, "/"); }