Add Android forensics, IOC threat-intel DB, Compose companion; scrub secrets from configs

This commit is contained in:
SsSnake
2026-07-13 15:45:47 -07:00
parent 925216290f
commit e48d577bd5
387 changed files with 211976 additions and 921 deletions

View File

@@ -2161,6 +2161,8 @@ function halToggle() {
if (!p) return;
var visible = p.style.display !== 'none';
p.style.display = visible ? 'none' : 'flex';
// Remember open/closed state across page navigation
sessionStorage.setItem('hal_panel_open', visible ? 'false' : 'true');
if (!visible) {
var inp = document.getElementById('hal-input');
if (inp) inp.focus();
@@ -2279,6 +2281,7 @@ function halAppendStyled(type, text) {
}
msgs.appendChild(div);
halScroll();
_halSaveMessages();
}
function halAppend(role, text) {
@@ -2289,6 +2292,8 @@ function halAppend(role, text) {
div.textContent = text;
msgs.appendChild(div);
halScroll();
// Persist to sessionStorage so messages survive page navigation
_halSaveMessages();
return div;
}
@@ -2300,9 +2305,60 @@ function halScroll() {
function halClear() {
var m = document.getElementById('hal-messages');
if (m) m.innerHTML = '';
sessionStorage.removeItem('hal_messages');
sessionStorage.removeItem('hal_panel_open');
fetch('/api/chat/reset', {method: 'POST'}).catch(function() {});
}
// Persist chat messages across page navigation
function _halSaveMessages() {
var msgs = document.getElementById('hal-messages');
if (!msgs) return;
var items = [];
msgs.querySelectorAll('.hal-msg').forEach(function(el) {
var role = 'hal';
if (el.classList.contains('hal-msg-user')) role = 'user';
else if (el.classList.contains('hal-msg-status')) role = 'status';
else if (el.classList.contains('hal-msg-action')) role = 'action';
else if (el.classList.contains('hal-msg-error')) role = 'error';
items.push({role: role, text: el.textContent});
});
// Keep last 100 messages to avoid storage bloat
if (items.length > 100) items = items.slice(-100);
try { sessionStorage.setItem('hal_messages', JSON.stringify(items)); } catch(e) {}
}
function _halRestoreMessages() {
var msgs = document.getElementById('hal-messages');
if (!msgs) return;
try {
var saved = sessionStorage.getItem('hal_messages');
if (!saved) return;
var items = JSON.parse(saved);
items.forEach(function(item) {
var div = document.createElement('div');
if (item.role === 'user' || item.role === 'hal') {
div.className = 'hal-msg hal-msg-' + item.role;
div.textContent = item.text;
} else {
div.className = 'hal-msg hal-msg-' + item.role;
div.textContent = item.text;
}
msgs.appendChild(div);
});
halScroll();
} catch(e) {}
// Restore panel visibility
if (sessionStorage.getItem('hal_panel_open') === 'true') {
var p = document.getElementById('hal-panel');
if (p) p.style.display = 'flex';
}
}
// Restore on page load
document.addEventListener('DOMContentLoaded', _halRestoreMessages);
// ── HAL Auto-Analyst ──────────────────────────────────────────────────────────
// Call halAnalyze() after any tool displays results. HAL will analyze the output
// via the loaded LLM and open the chat panel with findings.