|
|
|
|
@@ -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 ? `
|
|
|
|
|
|