saber: manuales cosechados e indice publico pre-construido
- manuales.py cosecha el --help de las herramientas que no traen man page (ffuf, sqlmap, suite impacket, netexec, hydra...) y lo escribe como markdown en conocimiento/09 - Manuales/. Es la referencia de opciones que la man page no da; complementa el cheatsheet de invocaciones comunes. - indexa.py --publico construye saber-publico.jsonl: glosario + pack de conocimiento con los vectores ya calculados, 100% publico y portable. - busca.py usa ese indice publico como fallback cuando no hay indice personal, asi un clon recien hecho consulta al instante sin reindexar nada. - .gitignore deja pasar saber-publico.jsonl; el personal (saber.jsonl) sigue fuera. - docs/rag.md y el README del pack documentan ambas cosas.
This commit is contained in:
parent
1dfb3513e6
commit
9fa0a40edf
12 changed files with 1206 additions and 45 deletions
|
|
@ -22,18 +22,31 @@ import os
|
|||
|
||||
AQUI = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
INDICE = os.path.join(AQUI, "datos", "saber.jsonl")
|
||||
# El indice portable que viene en el repo. Se usa tal cual mientras no exista el
|
||||
# personal, para que un clon recien hecho ya sepa de pentesting sin reindexar.
|
||||
INDICE_PUBLICO = os.path.join(AQUI, "datos", "saber-publico.jsonl")
|
||||
|
||||
_modelo = None
|
||||
_entradas = None
|
||||
_matriz = None
|
||||
|
||||
|
||||
def _fuente():
|
||||
"""El indice personal si existe; si no, el publico que trae el repo."""
|
||||
if os.path.exists(INDICE):
|
||||
return INDICE
|
||||
if os.path.exists(INDICE_PUBLICO):
|
||||
return INDICE_PUBLICO
|
||||
return None
|
||||
|
||||
|
||||
def _carga():
|
||||
global _modelo, _entradas, _matriz
|
||||
if _entradas is not None:
|
||||
return _entradas is not False
|
||||
|
||||
if not os.path.exists(INDICE):
|
||||
fuente = _fuente()
|
||||
if not fuente:
|
||||
_entradas = False
|
||||
return False
|
||||
|
||||
|
|
@ -41,7 +54,7 @@ def _carga():
|
|||
from model2vec import StaticModel
|
||||
|
||||
entradas, vectores = [], []
|
||||
with open(INDICE, encoding="utf-8") as f:
|
||||
with open(fuente, encoding="utf-8") as f:
|
||||
for l in f:
|
||||
try:
|
||||
d = json.loads(l)
|
||||
|
|
@ -190,4 +203,4 @@ def resumen(tope_temas: int = 10) -> str:
|
|||
|
||||
|
||||
def disponible() -> bool:
|
||||
return os.path.exists(INDICE)
|
||||
return _fuente() is not None
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue