# Mindnet Causal Assistant - Event Handler & Commands Referenz > **Version:** 1.0.0 > **Stand:** 2025-01-XX > **Zielgruppe:** Entwickler, Administratoren --- ## Inhaltsverzeichnis 1. [Event Handler](#event-handler) 2. [Commands](#commands) 3. [Settings & Konfiguration](#settings--konfiguration) --- ## Event Handler Das Plugin registriert mehrere Event Handler für automatische Funktionen: ### 1. Vault Modify Event **Zweck:** Live-Reload von Konfigurationsdateien **Registriert:** `this.app.vault.on("modify", ...)` **Funktionsweise:** - Überwacht alle Dateiänderungen im Vault - Prüft, ob geänderte Datei einer Config-Datei entspricht - Debounced Reload (200ms Delay) - Lädt Config automatisch neu **Überwachte Dateien:** - `edge_vocabulary.md` (via `edgeVocabularyPath`) - `interview_config.yaml` (via `interviewConfigPath`) - `graph_schema.md` (via `graphSchemaPath`) - `chain_roles.yaml` (via `chainRolesPath`) - `chain_templates.yaml` (via `chainTemplatesPath`) **Code:** ```typescript this.registerEvent( this.app.vault.on("modify", async (file: TFile) => { // Prüft Datei-Pfad // Debounced Reload // Lädt Config neu }) ); ``` ### 2. Vault Create Event **Zweck:** Note Adoption für neu erstellte Notes **Registriert:** `this.app.vault.on("create", ...)` (nach `onLayoutReady`) **Funktionsweise:** - Wird nur ausgeführt, wenn `adoptNewNotesInEditor` aktiviert ist - Prüft, ob neue Datei ein Adopt-Candidate ist - Evaluates Adoption Confidence - Zeigt Adoption-Modal (abhängig von Confidence) - Startet Profil-Auswahl **Bedingungen:** - Datei muss `.md` Extension haben - Datei darf nicht unter `.obsidian/` sein - Datei muss klein sein (`adoptMaxChars`) - Datei darf keine Frontmatter-ID haben **Code:** ```typescript this.app.workspace.onLayoutReady(() => { this.registerEvent( this.app.vault.on("create", async (file: TFile) => { await this.handleFileCreate(file); }) ); }); ``` ### 3. Markdown Post Processor **Zweck:** Unresolved Link Handling in Reading View **Registriert:** `this.registerMarkdownPostProcessor(...)` **Funktionsweise:** - Wird nur ausgeführt, wenn `interceptUnresolvedLinkClicks` aktiviert ist - Findet alle `a.internal-link` Elemente - Prüft, ob Link unresolved ist - Fügt Click-Handler hinzu - Bypass-Modifier wird respektiert **Bypass-Modifier:** - Standard: `Alt` (konfigurierbar via `bypassModifier`) - Wenn gedrückt: Obsidian behandelt Link normal **Code:** ```typescript this.registerMarkdownPostProcessor((el, ctx) => { const links = Array.from(el.querySelectorAll("a.internal-link")); for (const link of links) { // Prüft unresolved // Fügt Click-Handler hinzu } }); ``` ### 4. DOM Click Event **Zweck:** Unresolved Link Handling in Editor (Live Preview/Source) **Registriert:** `this.registerDomEvent(document, "click", ...)` **Funktionsweise:** - Wird nur ausgeführt, wenn `interceptUnresolvedLinkClicks` aktiviert ist - Prüft, ob Follow-Modifier gedrückt ist - Prüft, ob Cursor in Wikilink ist - Prüft, ob Link unresolved ist - Startet Profil-Auswahl **Follow-Modifier:** - Standard: `Ctrl` (konfigurierbar via `editorFollowModifier`) - Muss gedrückt sein, damit Handler aktiviert wird **Code:** ```typescript this.registerDomEvent(document, "click", async (evt: MouseEvent) => { // Prüft Follow-Modifier // Prüft Cursor-Position // Prüft Wikilink // Startet Profil-Auswahl }); ``` --- ## Commands Das Plugin registriert 11 Commands: ### 1. Mindnet: Reload edge vocabulary **ID:** `mindnet-reload-edge-vocabulary` **Typ:** Callback Command **Funktionsweise:** - Lädt `edge_vocabulary.md` neu - Parst Markdown zu EdgeVocabulary - Erstellt neue Vocabulary-Instanz - Aktualisiert Cache - Zeigt Notice mit Stats **Verwendung:** - Nach Änderungen an `edge_vocabulary.md` - Für Debugging - Manuelles Reload (falls automatisches Reload nicht funktioniert) ### 2. Mindnet: Validate current note **ID:** `mindnet-validate-current-note` **Typ:** Callback Command **Funktionsweise:** - Lädt Vocabulary (falls nicht geladen) - Ruft `LintEngine.lintCurrentNote()` auf - Zählt Findings nach Severity - Zeigt Notice mit Summary - Loggt Findings in Console **Settings:** - `showCanonicalHints`: Zeigt Canonical-Hints als INFO-Findings **Output:** - Notice: `"Lint: X errors, Y warnings, Z info"` - Console: Detaillierte Findings-Liste ### 3. Mindnet: Export graph **ID:** `mindnet-export-graph` **Typ:** Callback Command **Funktionsweise:** - Lädt Vocabulary (falls nicht geladen) - Baut Graph aus Vault - Serialisiert zu JSON - Schreibt Export-Datei - Zeigt Notice **Settings:** - `exportPath`: Pfad für Export-Datei (Standard: `_system/exports/graph_export.json`) **Output:** - JSON-Datei mit Nodes und Edges - Notice: `"Graph exported to "` ### 4. Mindnet: Show chains from current note **ID:** `mindnet-show-chains-from-current-note` **Typ:** Callback Command **Funktionsweise:** - Extrahiert Frontmatter-ID aus aktueller Note - Baut Graph aus Vault - Baut Index für Traversal - Führt Traversal aus (forward/backward/both) - Rendert Chain Report - Schreibt Report-Datei - Öffnet Report-Datei **Settings:** - `chainDirection`: `"forward"` | `"backward"` | `"both"` - `maxHops`: Maximale Anzahl Hops (Standard: 3) **Output:** - Markdown-Report: `_system/exports/chain_report.md` - Notice: `"Chains: X paths, Y nodes, Z warnings"` ### 5. Mindnet: Create note from profile **ID:** `mindnet-create-note-from-profile` **Typ:** Callback Command **Funktionsweise:** - Lädt Interview Config (falls nicht geladen) - Prüft, ob Profile verfügbar sind - Extrahiert initialen Titel aus Selection (falls vorhanden) - Öffnet ProfileSelectionModal - Erstellt Note nach Profil-Auswahl - Startet Wizard (falls aktiviert) **Settings:** - `autoStartInterviewOnCreate`: Ob Wizard automatisch startet - `defaultNotesFolder`: Standard-Ordner für neue Notes **Workflow:** 1. Profile-Selection-Modal öffnet sich 2. Profil wählen 3. Titel eingeben 4. Ordner wählen (optional) 5. Note wird erstellt 6. Wizard startet (falls aktiviert) ### 6. Mindnet: Edge-Type ändern **ID:** `mindnet-change-edge-type` **Typ:** Editor Callback Command **Funktionsweise:** - Erkennt Kontext (Cursor-Position, Selection) - Prüft, ob Kontext erkannt werden kann - Ruft `changeEdgeTypeForLinks()` auf - Zeigt Edge-Type-Selector - Aktualisiert Links **Kontext-Modi:** - `single-link`: Cursor in einem Link - `selection-links`: Auswahl enthält Links - `create-link`: Neuer Link soll erstellt werden - `whole-note`: Ganze Note (falls kein spezifischer Kontext) **Settings:** - `inlineMicroEnabled`: Inline Micro-Suggester aktivieren - `inlineMaxAlternatives`: Maximale Anzahl Alternativen ### 7. Mindnet: Debug Chain Roles (Loaded) **ID:** `mindnet-debug-chain-roles` **Typ:** Callback Command **Funktionsweise:** - Lädt Chain Roles (falls nicht geladen) - Formatiert Debug-Output - Loggt in Console - Zeigt Notice **Output:** - Console: Detaillierte Debug-Info - Resolved Path - Status (loaded/error/using-last-known-good) - Loaded At (Timestamp) - Errors/Warnings - Roles-Übersicht - Notice: `"Chain roles debug info logged to console (F12)"` ### 8. Mindnet: Debug Chain Templates (Loaded) **ID:** `mindnet-debug-chain-templates` **Typ:** Callback Command **Funktionsweise:** - Lädt Chain Templates (falls nicht geladen) - Formatiert Debug-Output - Loggt in Console - Zeigt Notice **Output:** - Console: Detaillierte Debug-Info - Resolved Path - Status (loaded/error/using-last-known-good) - Loaded At (Timestamp) - Errors/Warnings - Templates-Übersicht - Notice: `"Chain templates debug info logged to console (F12)"` ### 9. Mindnet: Fix Findings (Current Section) **ID:** `mindnet-fix-findings` **Typ:** Editor Callback Command **Funktionsweise:** - Lädt Chain Roles (falls nicht geladen) - Lädt Interview Config (falls nicht geladen) - Ruft `executeFixFindings()` auf - Analysiert aktuelle Section - Generiert Findings - Zeigt verfügbare Fix-Actions - Führt ausgewählte Action aus **Fix-Actions:** - **Create Missing Note:** Erstellt fehlende Note - **Retarget Link:** Ersetzt Link zu existierender Note - **Create Missing Heading:** Erstellt Heading in Target-Datei - **Retarget to Existing Heading:** Ersetzt Link zu existierendem Heading - **Promote Candidate Edge:** Befördert Candidate-Edge zu explizitem Edge **Settings:** - `fixActions.createMissingNote.mode`: Modus für fehlende Notes - `fixActions.createMissingNote.defaultTypeStrategy`: Strategie für Note-Type - `fixActions.createMissingHeading.level`: Heading-Level - `fixActions.promoteCandidate.keepOriginal`: Original behalten ### 10. Mindnet: Inspect Chains (Current Section) **ID:** `mindnet-inspect-chains` **Typ:** Editor Callback Command **Funktionsweise:** - Lädt Chain Roles (falls nicht geladen) - Lädt Chain Templates (falls nicht geladen) - Ruft `executeInspectChains()` auf - Extrahiert Section-Context - Baut Graph-Index - Führt Traversal aus - Führt Template Matching aus - Generiert Findings - Loggt Report in Console **Settings:** - `chainInspectorIncludeCandidates`: Ob Candidate-Edges einbezogen werden - `chainInspectorMaxTemplateMatches`: Maximale Anzahl Template Matches - `templateMatchingProfile`: `"discovery"` | `"decisioning"` **Output:** - Console: Detaillierter Chain Inspector Report - Context (file, heading) - Neighbors (incoming/outgoing) - Paths (forward/backward) - Template Matches - Findings - Notice: `"Chain inspection complete. Check console (F12) for report."` ### 11. Mindnet: Build semantic mapping blocks (by section) **ID:** `mindnet-build-semantic-mappings` **Typ:** Editor Callback Command **Funktionsweise:** - Erkennt Kontext (Cursor-Position, Selection) - Falls spezifischer Kontext: Verwendet Edge-Type-Selector - Sonst: Verarbeitet ganze Note - Prüft, ob Overwrite erlaubt ist - Ruft `buildSemanticMappings()` auf - Extrahiert existierende Mappings - Parst Sections - Extrahiert Links - Weist Edge-Types zu - Baut Mapping-Blöcke - Aktualisiert Note **Settings:** - `mappingWrapperCalloutType`: Callout-Typ für Wrapper (Standard: `"abstract"`) - `mappingWrapperTitle`: Titel für Wrapper (Standard: `"🕸️ Semantic Mapping"`) - `mappingWrapperFolded`: Ob Wrapper gefaltet ist (Standard: `true`) - `defaultEdgeType`: Standard-Edge-Type - `unassignedHandling`: `"prompt"` | `"none"` | `"defaultType"` | `"advisor"` - `allowOverwriteExistingMappings`: Ob existierende Mappings überschrieben werden dürfen **Output:** - Notice: `"Sections: X processed, Y with mappings | Links: Z total | Mappings: A kept, B new"` --- ## Settings & Konfiguration ### Alle Settings | Setting | Typ | Standard | Beschreibung | |---------|-----|----------|--------------| | **Pfad-Settings** | | `edgeVocabularyPath` | string | `"_system/dictionary/edge_vocabulary.md"` | Pfad zum Edge-Vokabular | | `graphSchemaPath` | string | `"_system/dictionary/graph_schema.md"` | Pfad zum Graph-Schema | | `interviewConfigPath` | string | `"_system/dictionary/interview_config.yaml"` | Pfad zur Interview-Config | | `chainRolesPath` | string | `"_system/dictionary/chain_roles.yaml"` | Pfad zu Chain Roles | | `chainTemplatesPath` | string | `"_system/dictionary/chain_templates.yaml"` | Pfad zu Chain Templates | | `analysisPoliciesPath` | string | `"_system/dictionary/analysis_policies.yaml"` | Pfad zu Analysis Policies | | **Graph & Chain Settings** | | `maxHops` | number | `3` | Maximale Anzahl Hops für Traversal | | `strictMode` | boolean | `false` | Strict Mode (noch nicht vollständig implementiert) | | `showCanonicalHints` | boolean | `false` | Zeigt Canonical-Hints in Lint-Findings | | `chainDirection` | string | `"forward"` | Traversal-Richtung: `"forward"` \| `"backward"` \| `"both"` | | **Interview Settings** | | `autoStartInterviewOnCreate` | boolean | `false` | Wizard automatisch nach Note-Erstellung starten | | **Unresolved Link Settings** | | `interceptUnresolvedLinkClicks` | boolean | `true` | Unresolved Links abfangen | | `autoStartOnUnresolvedClick` | boolean | `true` | Wizard automatisch nach Link-Klick starten | | `bypassModifier` | string | `"Alt"` | Bypass-Modifier für Reading View: `"Alt"` \| `"Ctrl"` \| `"Shift"` \| `"None"` | | `editorFollowModifier` | string | `"Ctrl"` | Follow-Modifier für Editor: `"Alt"` \| `"Ctrl"` \| `"Shift"` \| `"None"` | | `waitForFirstModifyAfterCreate` | boolean | `true` | Warten auf erste Änderung nach Erstellung (für Templater) | | `waitForModifyTimeoutMs` | number | `1200` | Timeout für Warten auf Änderung (ms) | | `debugLogging` | boolean | `false` | Debug-Logging für Unresolved Link Handling | | **Note Adoption Settings** | | `adoptNewNotesInEditor` | boolean | `true` | Neue Notes automatisch adoptieren | | `adoptMaxChars` | number | `200` | Maximale Content-Länge für Adoption-Candidate | | `adoptConfirmMode` | string | `"onlyLowConfidence"` | Adoption-Confirmation-Modus: `"always"` \| `"onlyLowConfidence"` \| `"never"` | | `highConfidenceWindowMs` | number | `3000` | Zeitfenster für High-Confidence-Adoption (ms) | | **Semantic Mapping Settings** | | `mappingWrapperCalloutType` | string | `"abstract"` | Callout-Typ für Mapping-Wrapper | | `mappingWrapperTitle` | string | `"🕸️ Semantic Mapping"` | Titel für Mapping-Wrapper | | `mappingWrapperFolded` | boolean | `true` | Ob Mapping-Wrapper gefaltet ist | | `defaultEdgeType` | string | `""` | Standard-Edge-Type | | `unassignedHandling` | string | `"prompt"` | Handling für unzugewiesene Links: `"prompt"` \| `"none"` \| `"defaultType"` \| `"advisor"` | | `allowOverwriteExistingMappings` | boolean | `false` | Existierende Mappings überschreiben dürfen | | `defaultNotesFolder` | string | `""` | Standard-Ordner für neue Notes | | **Inline Micro Edge Suggester Settings** | | `inlineMicroEnabled` | boolean | `true` | Inline Micro-Suggester aktivieren | | `inlineMaxAlternatives` | number | `6` | Maximale Anzahl Alternativen | | `inlineCancelBehavior` | string | `"keep_link"` | Verhalten bei Cancel: `"keep_link"` | | **Export Settings** | | `exportPath` | string | `"_system/exports/graph_export.json"` | Pfad für Graph-Export | | **Chain Inspector Settings** | | `chainInspectorIncludeCandidates` | boolean | `false` | Candidate-Edges in Chain Inspector einbeziehen | | `chainInspectorMaxTemplateMatches` | number | `3` | Maximale Anzahl Template Matches | | `templateMatchingProfile` | string | `"discovery"` | Template-Matching-Profil: `"discovery"` \| `"decisioning"` | | **Fix Actions Settings** | | `fixActions.createMissingNote.mode` | string | `"skeleton_only"` | Modus für fehlende Notes: `"skeleton_only"` \| `"create_and_open_profile_picker"` \| `"create_and_start_wizard"` | | `fixActions.createMissingNote.defaultTypeStrategy` | string | `"profile_picker"` | Strategie für Note-Type: `"profile_picker"` \| `"inference_then_picker"` \| `"default_concept_no_prompt"` | | `fixActions.createMissingNote.includeZones` | string | `"none"` | Zonen einbeziehen: `"none"` \| `"note_links_only"` \| `"candidates_only"` \| `"both"` | | `fixActions.createMissingHeading.level` | number | `2` | Heading-Level für neue Headings | | `fixActions.promoteCandidate.keepOriginal` | boolean | `true` | Original bei Candidate-Promotion behalten | ### Settings-Wirkungsweise #### Pfad-Settings **Wirkungsweise:** - Werden beim Plugin-Start geladen - Werden für Live-Reload verwendet - Werden für Config-Loading verwendet - Pfade sind vault-relativ (forward slashes) **Änderung:** - Settings → Community Plugins → Mindnet Causal Assistant - Pfad ändern - Settings speichern - Plugin lädt Config automatisch neu #### Feature-Settings **Wirkungsweise:** - Steuern automatische Funktionen - Werden bei jedem Aufruf geprüft - Können zur Laufzeit geändert werden **Beispiele:** - `interceptUnresolvedLinkClicks`: Aktiviert/deaktiviert Link-Intercept - `adoptNewNotesInEditor`: Aktiviert/deaktiviert Note-Adoption - `autoStartInterviewOnCreate`: Aktiviert/deaktiviert automatischen Wizard-Start #### Fix-Actions-Settings **Wirkungsweise:** - Steuern Fix-Action-Verhalten - Werden bei `executeFixFindings()` verwendet - Bestimmen, welche Actions verfügbar sind **Beispiele:** - `fixActions.createMissingNote.mode`: Bestimmt, wie fehlende Notes erstellt werden - `fixActions.createMissingHeading.level`: Bestimmt Heading-Level für neue Headings --- ## Zusammenfassung ### Event Handler - **Vault Modify:** Live-Reload von Config-Dateien - **Vault Create:** Note Adoption - **Markdown Post Processor:** Unresolved Link Handling (Reading View) - **DOM Click Event:** Unresolved Link Handling (Editor) ### Commands - **11 Commands** registriert - **3 Editor Commands:** Erfordern aktiven Editor - **8 Callback Commands:** Können überall ausgeführt werden ### Settings - **40+ Settings** verfügbar - **6 Pfad-Settings:** Für Config-Dateien - **34 Feature-Settings:** Für Funktionalität - **Alle Settings** sind in Settings Tab konfigurierbar --- **Ende der Event Handler & Commands Referenz**