rephrasing, prepare for methods implementation
This commit is contained in:
		
							parent
							
								
									ba3a5461b4
								
							
						
					
					
						commit
						1d048e816c
					
				@ -14,7 +14,7 @@ CC24-Hub ist eine statische Website, die eine strukturierte Übersicht über bew
 | 
			
		||||
- **Tool-Katalog**: Umfassende Sammlung von Open-Source und kommerziellen Forensik-Tools
 | 
			
		||||
- **Matrix-Ansicht**: Visualisierung der Tools nach Domänen und Prozess-Phasen
 | 
			
		||||
- **Erweiterte Filterung**: Suche nach Name, Beschreibung, Tags, Domäne und Phase
 | 
			
		||||
- **Self-Hosted Integration**: Direkte Links zu gehosteten Tool-Instanzen
 | 
			
		||||
- **CC24-Server Integration**: Direkte Links zu gehosteten Tool-Instanzen
 | 
			
		||||
- **Status-Monitoring**: Live-Überwachung der verfügbaren Services
 | 
			
		||||
- **Responsive Design**: Optimiert für Desktop und Mobile
 | 
			
		||||
- **Dark/Light Mode**: Automatische Theme-Erkennung mit manueller Überschreibung
 | 
			
		||||
 | 
			
		||||
@ -472,7 +472,7 @@
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div class="stat-card">
 | 
			
		||||
                        <div class="stat-number" id="selfHostedCount">0</div>
 | 
			
		||||
                        <div class="stat-label">Self-Hosted</div>
 | 
			
		||||
                        <div class="stat-label">CC24-Server</div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div class="stat-card">
 | 
			
		||||
                        <div class="stat-number" id="knowledgebaseCount">0</div>
 | 
			
		||||
@ -550,7 +550,7 @@
 | 
			
		||||
                            <select id="accessType">
 | 
			
		||||
                                <option value="">Select Type</option>
 | 
			
		||||
                                <option value="download">Download</option>
 | 
			
		||||
                                <option value="self-hosted">Self-Hosted</option>
 | 
			
		||||
                                <option value="server-based">CC24-Server</option>
 | 
			
		||||
                                <option value="commercial">Commercial</option>
 | 
			
		||||
                                <option value="OS">Operating System</option>
 | 
			
		||||
                            </select>
 | 
			
		||||
@ -812,7 +812,7 @@
 | 
			
		||||
            document.getElementById('totalPhases').textContent = yamlData.phases ? yamlData.phases.length : 0;
 | 
			
		||||
            document.getElementById('totalDomainAgnostic').textContent = yamlData['domain-agnostic-software'] ? yamlData['domain-agnostic-software'].length : 0;
 | 
			
		||||
            
 | 
			
		||||
            const selfHosted = tools.filter(tool => tool.accessType === 'self-hosted').length;
 | 
			
		||||
            const selfHosted = tools.filter(tool => tool.accessType === 'server-based').length;
 | 
			
		||||
            document.getElementById('selfHostedCount').textContent = selfHosted;
 | 
			
		||||
 | 
			
		||||
            const knowledgebaseTools = tools.filter(tool => tool.knowledgebase === true).length;
 | 
			
		||||
 | 
			
		||||
@ -18,10 +18,10 @@ const domainAgnosticSoftware = data['domain-agnostic-software'] || [];
 | 
			
		||||
          <path d="M9 11H5a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7a2 2 0 0 0-2-2h-4"/>
 | 
			
		||||
          <path d="M9 11V7a3 3 0 0 1 6 0v4"/>
 | 
			
		||||
        </svg>
 | 
			
		||||
        KI-gestützte Tool-Empfehlungen
 | 
			
		||||
        KI-gestützte Workflow-Empfehlungen
 | 
			
		||||
      </h2>
 | 
			
		||||
      <p id="ai-description" class="text-muted" style="max-width: 700px; margin: 0 auto; line-height: 1.6;">
 | 
			
		||||
        Beschreiben Sie Ihr forensisches Szenario und erhalten Sie maßgeschneiderte Tool-Empfehlungen 
 | 
			
		||||
        Beschreiben Sie Ihr forensisches Szenario und erhalten Sie maßgeschneiderte Workflow-Empfehlungen 
 | 
			
		||||
        basierend auf bewährten DFIR-Workflows und der verfügbaren Software-Datenbank.
 | 
			
		||||
      </p>
 | 
			
		||||
    </div>
 | 
			
		||||
@ -45,7 +45,7 @@ const domainAgnosticSoftware = data['domain-agnostic-software'] || [];
 | 
			
		||||
          <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="margin-right: 0.5rem; vertical-align: middle;">
 | 
			
		||||
            <path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/>
 | 
			
		||||
          </svg>
 | 
			
		||||
          Spezifisches Tool
 | 
			
		||||
          Spezifische Software oder Methode
 | 
			
		||||
        </span>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@ -145,15 +145,15 @@ document.addEventListener('DOMContentLoaded', () => {
 | 
			
		||||
  const modeConfig = {
 | 
			
		||||
    workflow: {
 | 
			
		||||
      placeholder: "Beschreiben Sie Ihr forensisches Szenario... z.B. 'Verdacht auf Ransomware-Angriff auf Windows-Domänencontroller mit verschlüsselten Dateien und verdächtigen Netzwerkverbindungen'",
 | 
			
		||||
      description: "Beschreiben Sie Ihr forensisches Szenario und erhalten Sie maßgeschneiderte Tool-Empfehlungen basierend auf bewährten DFIR-Workflows und der verfügbaren Software-Datenbank.",
 | 
			
		||||
      description: "Beschreiben Sie Ihr forensisches Szenario und erhalten Sie maßgeschneiderte Empfehlungen basierend auf bewährten DFIR-Workflows und der verfügbaren Software-Datenbank.",
 | 
			
		||||
      submitText: "Empfehlungen generieren",
 | 
			
		||||
      loadingText: "Analysiere Szenario und generiere Empfehlungen..."
 | 
			
		||||
    },
 | 
			
		||||
    tool: {
 | 
			
		||||
      placeholder: "Beschreiben Sie Ihr spezifisches Problem oder Ihre Anforderung... z.B. 'Ich benötige ein Tool zur Analyse von Android-Backups mit WhatsApp-Nachrichten und GPS-Daten'",
 | 
			
		||||
      description: "Beschreiben Sie Ihr spezifisches Problem oder Ihre Anforderung und erhalten Sie 1-3 gezielt passende Tool-Empfehlungen mit detaillierten Erklärungen zur optimalen Anwendung.",
 | 
			
		||||
      submitText: "Tool-Empfehlungen finden",
 | 
			
		||||
      loadingText: "Analysiere Anforderungen und suche passende Tools..."
 | 
			
		||||
      placeholder: "Beschreiben Sie Ihr spezifisches Problem oder Ihre Anforderung... z.B. 'Ich benötige eine Anwendung zur Analyse von Android-Backups mit WhatsApp-Nachrichten und GPS-Daten'",
 | 
			
		||||
      description: "Beschreiben Sie Ihr spezifisches Problem oder Ihre Anforderung und erhalten Sie 1-3 gezielt passende Empfehlungen mit detaillierten Erklärungen zur optimalen Anwendung.",
 | 
			
		||||
      submitText: "Empfehlungen finden",
 | 
			
		||||
      loadingText: "Analysiere Anforderungen und suche passende Methode..."
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
@ -261,7 +261,7 @@ document.addEventListener('DOMContentLoaded', () => {
 | 
			
		||||
    
 | 
			
		||||
    // Disable submit button
 | 
			
		||||
    aiSubmitBtn.disabled = true;
 | 
			
		||||
    submitBtnText.textContent = currentMode === 'workflow' ? 'Generiere Empfehlungen...' : 'Suche passende Tools...';
 | 
			
		||||
    submitBtnText.textContent = currentMode === 'workflow' ? 'Generiere Empfehlungen...' : 'Suche passende Methode...';
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
      const response = await fetch('/api/ai/query', {
 | 
			
		||||
@ -474,7 +474,7 @@ document.addEventListener('DOMContentLoaded', () => {
 | 
			
		||||
                          
 | 
			
		||||
                          <div class="tool-rec-metadata">
 | 
			
		||||
                            <div style="display: flex; flex-wrap: wrap; gap: 0.25rem; margin-bottom: 0.5rem;">
 | 
			
		||||
                              ${hasValidProjectUrl ? '<span class="badge badge-primary">Self-Hosted</span>' : ''}
 | 
			
		||||
                              ${hasValidProjectUrl ? '<span class="badge badge-primary">CC24-Server</span>' : ''}
 | 
			
		||||
                              ${tool.license !== 'Proprietary' ? '<span class="badge badge-success">Open Source</span>' : ''}
 | 
			
		||||
                              <span class="badge" style="background-color: var(--color-bg-tertiary); color: var(--color-text);">${tool.skillLevel}</span>
 | 
			
		||||
                            </div>
 | 
			
		||||
@ -631,7 +631,7 @@ document.addEventListener('DOMContentLoaded', () => {
 | 
			
		||||
                    <span class="badge" style="background-color: ${suitabilityColors[toolRec.suitability_score]}; color: white; font-size: 0.8125rem;">
 | 
			
		||||
                      ${getSuitabilityText(toolRec.suitability_score)}
 | 
			
		||||
                    </span>
 | 
			
		||||
                    ${hasValidProjectUrl ? '<span class="badge badge-primary">Self-Hosted</span>' : ''}
 | 
			
		||||
                    ${hasValidProjectUrl ? '<span class="badge badge-primary">CC24-Server</span>' : ''}
 | 
			
		||||
                    ${fullTool.license !== 'Proprietary' ? '<span class="badge badge-success">Open Source</span>' : ''}
 | 
			
		||||
                    ${fullTool.knowledgebase === true ? '<span class="badge badge-error">📖</span>' : ''}
 | 
			
		||||
                  </div>
 | 
			
		||||
@ -658,7 +658,7 @@ document.addEventListener('DOMContentLoaded', () => {
 | 
			
		||||
                      <path d="M9 11H5a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7a2 2 0 0 0-2-2h-4"/>
 | 
			
		||||
                      <path d="M9 11V7a3 3 0 0 1 6 0v4"/>
 | 
			
		||||
                    </svg>
 | 
			
		||||
                    Warum dieses Tool?
 | 
			
		||||
                    Warum diese Methode?
 | 
			
		||||
                  </h4>
 | 
			
		||||
                  ${formatWorkflowSuggestion(toolRec.detailed_explanation)}                  
 | 
			
		||||
                  ${toolRec.implementation_approach ? `
 | 
			
		||||
 | 
			
		||||
@ -37,7 +37,7 @@ const cardClass = hasValidProjectUrl ? 'card card-hosted tool-card' : (tool.lice
 | 
			
		||||
  <div class="tool-card-header">
 | 
			
		||||
    <h3>{tool.name}</h3>
 | 
			
		||||
    <div class="tool-card-badges">
 | 
			
		||||
      {hasValidProjectUrl && <span class="badge badge-primary">Self-Hosted</span>}
 | 
			
		||||
      {hasValidProjectUrl && <span class="badge badge-primary">CC24-Server</span>}
 | 
			
		||||
      {tool.license !== 'Proprietary' && <span class="badge badge-success">OSS</span>}
 | 
			
		||||
      {hasKnowledgebase && <span class="badge badge-error">📖</span>}
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
@ -337,7 +337,7 @@ const sortedTags = Object.entries(tagFrequency)
 | 
			
		||||
        return true;
 | 
			
		||||
      });
 | 
			
		||||
      
 | 
			
		||||
      // Sort filtered results: self-hosted first, proprietary last
 | 
			
		||||
      // Sort filtered results: server-based first, proprietary last
 | 
			
		||||
      filtered.sort((a, b) => {
 | 
			
		||||
        const aHosted = isToolHosted(a);
 | 
			
		||||
        const bHosted = isToolHosted(b);
 | 
			
		||||
 | 
			
		||||
@ -67,7 +67,7 @@ domains.forEach((domain: any) => {
 | 
			
		||||
                <div class="tool-compact-header">
 | 
			
		||||
                  <h4 style="margin: 0; font-size: 0.875rem; font-weight: 600;">{tool.name}</h4>
 | 
			
		||||
                  <div style="display: flex; gap: 0.25rem;">
 | 
			
		||||
                    {hasValidProjectUrl && <span class="badge badge--mini badge-primary">Self-Hosted</span>}
 | 
			
		||||
                    {hasValidProjectUrl && <span class="badge badge--mini badge-primary">CC24-Server</span>}
 | 
			
		||||
                    {tool.license !== 'Proprietary' && <span class="badge badge--mini badge-success">OSS</span>}
 | 
			
		||||
                    {tool.knowledgebase === true && <span class="badge badge--mini badge-error">Infos 📖</span>}
 | 
			
		||||
                  </div>
 | 
			
		||||
@ -90,7 +90,7 @@ domains.forEach((domain: any) => {
 | 
			
		||||
 | 
			
		||||
  <!-- DFIR Tools Matrix -->
 | 
			
		||||
  <div id="dfir-matrix-section">
 | 
			
		||||
    <h2 style="margin-bottom: 1rem; color: var(--color-text);">DFIR Tools Matrix</h2>
 | 
			
		||||
    <h2 style="margin-bottom: 1rem; color: var(--color-text);">MATRIX</h2>
 | 
			
		||||
    <table class="matrix-table">
 | 
			
		||||
      <thead>
 | 
			
		||||
        <tr>
 | 
			
		||||
@ -255,7 +255,7 @@ domains.forEach((domain: any) => {
 | 
			
		||||
    
 | 
			
		||||
    badgesContainer.innerHTML = '';
 | 
			
		||||
    if (hasValidProjectUrl) {
 | 
			
		||||
      badgesContainer.innerHTML += '<span class="badge badge-primary">Self-Hosted</span>';
 | 
			
		||||
      badgesContainer.innerHTML += '<span class="badge badge-primary">CC24-Server</span>';
 | 
			
		||||
    }
 | 
			
		||||
    if (tool.license !== 'Proprietary') {
 | 
			
		||||
      badgesContainer.innerHTML += '<span class="badge badge-success">Open Source</span>';
 | 
			
		||||
 | 
			
		||||
@ -89,7 +89,7 @@ tools:
 | 
			
		||||
    domain-agnostic-software:
 | 
			
		||||
      - collaboration-general
 | 
			
		||||
    skillLevel: intermediate
 | 
			
		||||
    accessType: self-hosted
 | 
			
		||||
    accessType: server-based
 | 
			
		||||
    url: https://github.com/TheHive-Project/TheHive
 | 
			
		||||
    projectUrl: ''
 | 
			
		||||
    license: Community Edition (Free) / Commercial
 | 
			
		||||
@ -122,7 +122,7 @@ tools:
 | 
			
		||||
    platforms:
 | 
			
		||||
      - Web
 | 
			
		||||
    skillLevel: intermediate
 | 
			
		||||
    accessType: self-hosted
 | 
			
		||||
    accessType: server-based
 | 
			
		||||
    url: https://misp-project.org/
 | 
			
		||||
    projectUrl: https://misp.cc24.dev
 | 
			
		||||
    license: AGPL-3.0
 | 
			
		||||
@ -154,7 +154,7 @@ tools:
 | 
			
		||||
      - Web
 | 
			
		||||
    domain-agnostic-software: null
 | 
			
		||||
    skillLevel: intermediate
 | 
			
		||||
    accessType: self-hosted
 | 
			
		||||
    accessType: server-based
 | 
			
		||||
    url: https://timesketch.org/
 | 
			
		||||
    projectUrl: ''
 | 
			
		||||
    license: Apache 2.0
 | 
			
		||||
@ -286,7 +286,7 @@ tools:
 | 
			
		||||
      - Web
 | 
			
		||||
    domain-agnostic-software: null
 | 
			
		||||
    skillLevel: advanced
 | 
			
		||||
    accessType: self-hosted
 | 
			
		||||
    accessType: server-based
 | 
			
		||||
    url: https://github.com/cert-ee/cuckoo3
 | 
			
		||||
    projectUrl: ''
 | 
			
		||||
    license: GPL-3.0
 | 
			
		||||
@ -382,7 +382,7 @@ tools:
 | 
			
		||||
      - Web
 | 
			
		||||
    domain-agnostic-software: null
 | 
			
		||||
    skillLevel: beginner
 | 
			
		||||
    accessType: self-hosted
 | 
			
		||||
    accessType: server-based
 | 
			
		||||
    url: https://gchq.github.io/CyberChef/
 | 
			
		||||
    projectUrl: ''
 | 
			
		||||
    license: Apache 2.0
 | 
			
		||||
@ -420,7 +420,7 @@ tools:
 | 
			
		||||
      - Web
 | 
			
		||||
    domain-agnostic-software: null
 | 
			
		||||
    skillLevel: advanced
 | 
			
		||||
    accessType: self-hosted
 | 
			
		||||
    accessType: server-based
 | 
			
		||||
    url: https://www.velociraptor.app/
 | 
			
		||||
    projectUrl: https://raptor.cc24.dev
 | 
			
		||||
    license: Apache 2.0
 | 
			
		||||
@ -456,7 +456,7 @@ tools:
 | 
			
		||||
      - Web
 | 
			
		||||
    domain-agnostic-software: null
 | 
			
		||||
    skillLevel: advanced
 | 
			
		||||
    accessType: self-hosted
 | 
			
		||||
    accessType: server-based
 | 
			
		||||
    url: https://github.com/google/grr
 | 
			
		||||
    projectUrl: ''
 | 
			
		||||
    license: Apache 2.0
 | 
			
		||||
@ -489,7 +489,7 @@ tools:
 | 
			
		||||
      - Linux
 | 
			
		||||
    domain-agnostic-software: null
 | 
			
		||||
    skillLevel: expert
 | 
			
		||||
    accessType: self-hosted
 | 
			
		||||
    accessType: server-based
 | 
			
		||||
    url: https://arkime.com/
 | 
			
		||||
    projectUrl: ''
 | 
			
		||||
    license: Apache 2.0
 | 
			
		||||
@ -621,7 +621,7 @@ tools:
 | 
			
		||||
      - Web
 | 
			
		||||
    domain-agnostic-software: null
 | 
			
		||||
    skillLevel: intermediate
 | 
			
		||||
    accessType: self-hosted
 | 
			
		||||
    accessType: server-based
 | 
			
		||||
    url: https://neo4j.com/
 | 
			
		||||
    projectUrl: https://graph.cc24.dev
 | 
			
		||||
    license: GPL-3.0 / Commercial
 | 
			
		||||
@ -689,7 +689,7 @@ tools:
 | 
			
		||||
    domain-agnostic-software:
 | 
			
		||||
      - collaboration-general
 | 
			
		||||
    skillLevel: novice
 | 
			
		||||
    accessType: self-hosted
 | 
			
		||||
    accessType: server-based
 | 
			
		||||
    url: https://nextcloud.com/
 | 
			
		||||
    projectUrl: https://cloud.cc24.dev
 | 
			
		||||
    license: AGPL-3.0
 | 
			
		||||
@ -719,7 +719,7 @@ tools:
 | 
			
		||||
    domain-agnostic-software:
 | 
			
		||||
      - collaboration-general
 | 
			
		||||
    skillLevel: beginner
 | 
			
		||||
    accessType: self-hosted
 | 
			
		||||
    accessType: server-based
 | 
			
		||||
    url: https://gitea.io/
 | 
			
		||||
    projectUrl: https://git.cc24.dev
 | 
			
		||||
    license: MIT
 | 
			
		||||
@ -859,7 +859,7 @@ tools:
 | 
			
		||||
      - Web
 | 
			
		||||
    domain-agnostic-software: null
 | 
			
		||||
    skillLevel: intermediate
 | 
			
		||||
    accessType: self-hosted
 | 
			
		||||
    accessType: server-based
 | 
			
		||||
    url: https://graphsense.org/
 | 
			
		||||
    projectUrl: ''
 | 
			
		||||
    license: MIT
 | 
			
		||||
 | 
			
		||||
@ -177,9 +177,9 @@ import BaseLayout from '../layouts/BaseLayout.astro';
 | 
			
		||||
      
 | 
			
		||||
      <div style="display: grid; gap: 1.25rem;">
 | 
			
		||||
        <div style="background-color: var(--color-bg-secondary); padding: 1.25rem; border-radius: 0.5rem;">
 | 
			
		||||
          <h4 style="margin: 0 0 0.5rem 0; color: var(--color-accent);">🔍 Tool-Vorschläge</h4>
 | 
			
		||||
          <h4 style="margin: 0 0 0.5rem 0; color: var(--color-accent);">🔍 Vorschläge</h4>
 | 
			
		||||
          <p style="margin: 0;">
 | 
			
		||||
            Ich suche stets nach Ergänzungen für die Liste. Falls euch interessante Tools einfallen – 
 | 
			
		||||
            Ich suche stets nach Ergänzungen für die Liste. Falls euch interessante Tools oder Methoden einfallen – 
 | 
			
		||||
            schreibt mir gerne auf Signal!
 | 
			
		||||
          </p>
 | 
			
		||||
        </div>
 | 
			
		||||
@ -219,8 +219,8 @@ import BaseLayout from '../layouts/BaseLayout.astro';
 | 
			
		||||
    <!-- Footer Note -->
 | 
			
		||||
    <div style="text-align: center; padding: 2rem; background-color: var(--color-bg-secondary); border-radius: 0.75rem; border: 1px solid var(--color-border);">
 | 
			
		||||
      <p style="margin: 0; color: var(--color-text-secondary); font-size: 0.875rem;">
 | 
			
		||||
        <strong>Akademisches Projekt</strong> | Seminargruppe CC24-w1 | 
 | 
			
		||||
        Alle Tools und Dienste dienen ausschließlich Bildungs- und Forschungszwecken
 | 
			
		||||
        <strong>Inoffizielles Studienprojekt</strong> | Seminargruppe CC24-w1 | 
 | 
			
		||||
        Alle dargestellte Software, Dienste und Methoden dienen Bildungs- und Forschungszwecken sowie der Weiterentwicklung der IT-forensischen Methodik.
 | 
			
		||||
      </p>
 | 
			
		||||
    </div>
 | 
			
		||||
  </section>
 | 
			
		||||
 | 
			
		||||
@ -119,12 +119,12 @@ function createWorkflowSystemPrompt(toolsData: any): string {
 | 
			
		||||
 | 
			
		||||
  // Build dynamic phase descriptions for tool selection
 | 
			
		||||
  const phaseDescriptions = regularPhases.map((phase: any) => 
 | 
			
		||||
    `- ${phase.name}: ${phase.description || 'Tools for this phase'}`
 | 
			
		||||
    `- ${phase.name}: ${phase.description || 'Tools/Methods for this phase'}`
 | 
			
		||||
  ).join('\n');
 | 
			
		||||
 | 
			
		||||
  // Add domain-agnostic software descriptions
 | 
			
		||||
  const domainAgnosticDescriptions = domainAgnosticSoftware.map((section: any) => 
 | 
			
		||||
    `- ${section.name}: ${section.description || 'Cross-cutting tools and platforms'}`
 | 
			
		||||
    `- ${section.name}: ${section.description || 'Cross-cutting software and platforms'}`
 | 
			
		||||
  ).join('\n');
 | 
			
		||||
 | 
			
		||||
  // Create valid phase values for JSON schema
 | 
			
		||||
@ -133,9 +133,9 @@ function createWorkflowSystemPrompt(toolsData: any): string {
 | 
			
		||||
    ...domainAgnosticSoftware.map((s: any) => s.id)
 | 
			
		||||
  ].join('|');
 | 
			
		||||
 | 
			
		||||
  return `Du bist ein DFIR (Digital Forensics and Incident Response) Experte, der Ermittlern bei der Toolauswahl hilft.
 | 
			
		||||
  return `Du bist ein DFIR (Digital Forensics and Incident Response) Experte, der Ermittlern bei der Auswahl von Software und Methoden hilft.
 | 
			
		||||
 | 
			
		||||
VERFÜGBARE TOOLS DATABASE:
 | 
			
		||||
VERFÜGBARE DATENBASIS:
 | 
			
		||||
${JSON.stringify(toolsList, null, 2)}
 | 
			
		||||
 | 
			
		||||
UNTERSUCHUNGSPHASEN (NIST Framework):
 | 
			
		||||
@ -145,18 +145,18 @@ FORENSISCHE DOMÄNEN:
 | 
			
		||||
${domainsDescription}
 | 
			
		||||
 | 
			
		||||
WICHTIGE REGELN:
 | 
			
		||||
1. Pro Phase 1-3 Tools empfehlen (immer mindestens 1 wenn verfügbar)
 | 
			
		||||
2. Tools können in MEHREREN Phasen empfohlen werden wenn sinnvoll - versuche ein Tool für jede Phase zu empfehlen, selbst wenn die Priorität "low" ist.
 | 
			
		||||
3. Für Reporting-Phase: Visualisierungs- und Dokumentationstools einschließen
 | 
			
		||||
1. Pro Phase 1-3 Tools/Methoden empfehlen (immer mindestens 1 wenn verfügbar)
 | 
			
		||||
2. Tools/Methoden können in MEHREREN Phasen empfohlen werden wenn sinnvoll - versuche ein Tool/Methode für jede Phase zu empfehlen, selbst wenn die Priorität "low" ist.
 | 
			
		||||
3. Für Reporting-Phase: Visualisierungs- und Dokumentationssoftware einschließen
 | 
			
		||||
4. Gib stets dem spezieller für den Fall geeigneten Werkzeug den Vorzug.
 | 
			
		||||
5. Deutsche Antworten für deutsche Anfragen, English for English queries
 | 
			
		||||
6. Bewerbe NIEMALS Proprietäre Software fälschlicherweise als Open-Source-Tools, erkenne aber an, falls diese besser geeignet sein könnte.
 | 
			
		||||
7. Bevorzuge alles, was nicht proprietär ist (license != "Proprietary"), aber erkenne an wenn ein proprietäres Tool besser geeignet ist.
 | 
			
		||||
6. Bewerbe NIEMALS Proprietäre Software fälschlicherweise als Open-Source-Software, erkenne aber an, falls diese besser geeignet sein könnte.
 | 
			
		||||
7. Bevorzuge alles, was nicht proprietär ist (license != "Proprietary"), aber erkenne an, wenn proprietäre Software besser geeignet ist.
 | 
			
		||||
 | 
			
		||||
TOOL-AUSWAHL NACH PHASE:
 | 
			
		||||
SOFTWARE/METHODEN-AUSWAHL NACH PHASE:
 | 
			
		||||
${phaseDescriptions}
 | 
			
		||||
 | 
			
		||||
DOMAIN-AGNOSTIC SOFTWARE:
 | 
			
		||||
DOMÄNENAGNOSTISCHE SOFTWARE/METHODEN:
 | 
			
		||||
${domainAgnosticDescriptions}
 | 
			
		||||
 | 
			
		||||
ANTWORT-FORMAT (strict JSON):
 | 
			
		||||
@ -167,7 +167,7 @@ ANTWORT-FORMAT (strict JSON):
 | 
			
		||||
      "name": "EXAKTER Name aus der Database",
 | 
			
		||||
      "priority": "high|medium|low", 
 | 
			
		||||
      "phase": "${validPhases}",
 | 
			
		||||
      "justification": "Warum dieses Tool für diese Phase und Szenario geeignet ist"
 | 
			
		||||
      "justification": "Warum diese Methode für diese Phase und Szenario geeignet ist"
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "workflow_suggestion": "Vorgeschlagener Untersuchungsablauf",
 | 
			
		||||
@ -192,9 +192,9 @@ function createToolSystemPrompt(toolsData: any): string {
 | 
			
		||||
    projectUrl: tool.projectUrl
 | 
			
		||||
  }));
 | 
			
		||||
 | 
			
		||||
  return `Du bist ein DFIR (Digital Forensics and Incident Response) Experte, der bei der Auswahl spezifischer Tools für konkrete Probleme hilft.
 | 
			
		||||
  return `Du bist ein DFIR (Digital Forensics and Incident Response) Experte, der bei der Auswahl spezifischer Software/Methoden für konkrete Probleme hilft.
 | 
			
		||||
 | 
			
		||||
VERFÜGBARE TOOLS DATABASE:
 | 
			
		||||
VERFÜGBARE DATENBASIS:
 | 
			
		||||
${JSON.stringify(toolsList, null, 2)}
 | 
			
		||||
 | 
			
		||||
WICHTIGE REGELN:
 | 
			
		||||
@ -216,11 +216,11 @@ ANTWORT-FORMAT (strict JSON):
 | 
			
		||||
      "name": "EXAKTER Name aus der Database",
 | 
			
		||||
      "rank": 1,
 | 
			
		||||
      "suitability_score": "high|medium|low",
 | 
			
		||||
      "detailed_explanation": "Detaillierte Erklärung, warum dieses Tool das Problem löst",
 | 
			
		||||
      "detailed_explanation": "Detaillierte Erklärung, warum dieses Tool/diese Methode das Problem löst",
 | 
			
		||||
      "implementation_approach": "Konkrete Schritte/Ansatz zur Anwendung für dieses spezifische Problem",
 | 
			
		||||
      "pros": ["Spezifische Vorteile für diesen Anwendungsfall", "Weitere Vorteile"],
 | 
			
		||||
      "cons": ["Potentielle Nachteile oder Limitationen", "Weitere Einschränkungen"],
 | 
			
		||||
      "alternatives": "Alternative Ansätze oder ergänzende Tools, falls relevant"
 | 
			
		||||
      "alternatives": "Alternative Ansätze oder ergänzende Tools/Methoden, falls relevant"
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "additional_considerations": "Wichtige Überlegungen, Voraussetzungen oder Warnungen"
 | 
			
		||||
 | 
			
		||||
@ -23,7 +23,7 @@ const tools = data.tools;
 | 
			
		||||
    </p>
 | 
			
		||||
    
 | 
			
		||||
    <p class="text-muted" style="font-size: 1.125rem; margin-bottom: 1.5rem; line-height: 1.7;">
 | 
			
		||||
      Unser kuratiertes Verzeichnis bietet euch eine strukturierte Übersicht über bewährte DFIR-Tools, 
 | 
			
		||||
      Unser kuratiertes Verzeichnis bietet euch eine strukturierte Übersicht über bewährte Methoden und Tools, 
 | 
			
		||||
      kategorisiert nach forensischen Domänen und Untersuchungsphasen nach Kent, Chevalier, Grance & Dang.
 | 
			
		||||
    </p>
 | 
			
		||||
    
 | 
			
		||||
@ -41,7 +41,7 @@ const tools = data.tools;
 | 
			
		||||
          <path d="M12 16v-4"></path>
 | 
			
		||||
          <path d="M12 8h.01"></path>
 | 
			
		||||
        </svg>
 | 
			
		||||
        SSO & Zugang erfahren
 | 
			
		||||
        Infos zu SSO & Zugang
 | 
			
		||||
      </a>
 | 
			
		||||
      
 | 
			
		||||
      <!-- AI Query Button -->
 | 
			
		||||
@ -59,7 +59,7 @@ const tools = data.tools;
 | 
			
		||||
          <polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline>
 | 
			
		||||
          <line x1="12" y1="22.08" x2="12" y2="12"></line>
 | 
			
		||||
        </svg>
 | 
			
		||||
        Tools entdecken
 | 
			
		||||
         Entdecken
 | 
			
		||||
      </a>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
@ -354,7 +354,7 @@ function createToolCard(tool) {
 | 
			
		||||
    <div class="tool-card-header">
 | 
			
		||||
      <h3>${tool.name}</h3>
 | 
			
		||||
      <div class="tool-card-badges">
 | 
			
		||||
        ${hasValidProjectUrl ? '<span class="badge badge-primary">Self-Hosted</span>' : ''}
 | 
			
		||||
        ${hasValidProjectUrl ? '<span class="badge badge-primary">CC24-Server</span>' : ''}
 | 
			
		||||
        ${tool.license !== 'Proprietary' ? '<span class="badge badge-success">OSS</span>' : ''}
 | 
			
		||||
        ${hasKnowledgebase ? '<span class="badge badge-error">📖</span>' : ''}
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@ -56,7 +56,7 @@ knowledgebaseTools.sort((a: any, b: any) => a.name.localeCompare(b.name));
 | 
			
		||||
          </svg>
 | 
			
		||||
          <h3 style="color: var(--color-text-secondary); margin-bottom: 0.5rem;">Noch keine Knowledgebase-Einträge</h3>
 | 
			
		||||
          <p class="text-muted">
 | 
			
		||||
            Knowledgebase-Einträge werden automatisch angezeigt, sobald Tools das Attribut "knowledgebase: true" haben.
 | 
			
		||||
            Knowledgebase-Einträge werden automatisch angezeigt, sobald Datenbankeinträge das Attribut "knowledgebase: true" haben. Wenn hier noch nichts drinsteht, habe ich noch nichts dazu geschrieben.
 | 
			
		||||
          </p>
 | 
			
		||||
        </div>
 | 
			
		||||
      ) : (
 | 
			
		||||
@ -76,7 +76,7 @@ knowledgebaseTools.sort((a: any, b: any) => a.name.localeCompare(b.name));
 | 
			
		||||
                                                  tool.projectUrl.trim() !== "";
 | 
			
		||||
                        return (
 | 
			
		||||
                          <>
 | 
			
		||||
                            {hasValidProjectUrl && <span class="badge badge-primary">Self-Hosted</span>}
 | 
			
		||||
                            {hasValidProjectUrl && <span class="badge badge-primary">CC24-Server</span>}
 | 
			
		||||
                            {tool.license !== 'Proprietary' && <span class="badge badge-success">Open Source</span>}
 | 
			
		||||
                            <span class="badge badge-error">Infos 📖</span>
 | 
			
		||||
                          </>
 | 
			
		||||
 | 
			
		||||
@ -3,7 +3,7 @@ import BaseLayout from '../layouts/BaseLayout.astro';
 | 
			
		||||
import { getToolsData } from '../utils/dataService.js';
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Load tools data to get self-hosted services
 | 
			
		||||
// Load tools data to get server-based services
 | 
			
		||||
const data = await getToolsData();
 | 
			
		||||
 | 
			
		||||
// Filter for hosted services based on projectUrl presence
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user