Auto-commit via make git (triggered by NFDOS)

This commit is contained in:
neoricalex 2025-11-16 18:59:20 +01:00
parent fe879bfba1
commit fdbe7793e8
18 changed files with 171 additions and 116 deletions

3
MANIFEST.in Normal file
View File

@ -0,0 +1,3 @@
include README.md
recursive-include src/neurotron *.py
recursive-include src/neurotron/data *

6
Setup.py Normal file
View File

@ -0,0 +1,6 @@
from setuptools import setup
setup(
package_dir={"": "src"},
packages=["neurotron"],
)

View File

@ -35,49 +35,49 @@
'configure.ac' 'configure.ac'
], ],
{ {
'_AM_DEPENDENCIES' => 1, '_AM_SET_OPTIONS' => 1,
'AM_PROG_INSTALL_STRIP' => 1, 'AM_MISSING_PROG' => 1,
'include' => 1,
'AM_SET_DEPDIR' => 1,
'_AC_AM_CONFIG_HEADER_HOOK' => 1,
'AU_DEFUN' => 1,
'_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
'AM_RUN_LOG' => 1,
'AM_INIT_AUTOMAKE' => 1,
'AM_SUBST_NOTMAKE' => 1,
'_AM_AUTOCONF_VERSION' => 1,
'AM_CONDITIONAL' => 1,
'AC_CONFIG_MACRO_DIR_TRACE' => 1,
'AC_CONFIG_MACRO_DIR' => 1,
'm4_include' => 1,
'_AM_IF_OPTION' => 1, '_AM_IF_OPTION' => 1,
'AM_PROG_CC_C_O' => 1, 'AM_PROG_INSTALL_SH' => 1,
'm4_pattern_forbid' => 1,
'AM_SILENT_RULES' => 1,
'_AM_PROG_TAR' => 1,
'AM_SET_LEADING_DOT' => 1,
'AM_PROG_INSTALL_STRIP' => 1,
'AM_AUTOMAKE_VERSION' => 1,
'_AM_SET_OPTION' => 1,
'_AM_SUBST_NOTMAKE' => 1, '_AM_SUBST_NOTMAKE' => 1,
'AM_MISSING_HAS_RUN' => 1, 'AM_MISSING_HAS_RUN' => 1,
'AM_SET_LEADING_DOT' => 1, '_AM_AUTOCONF_VERSION' => 1,
'AC_DEFUN' => 1,
'AC_DEFUN_ONCE' => 1,
'AM_PATH_PYTHON' => 1,
'AM_SILENT_RULES' => 1,
'AM_AUX_DIR_EXPAND' => 1,
'AM_DEP_TRACK' => 1,
'_AM_CONFIG_MACRO_DIRS' => 1,
'AM_AUTOMAKE_VERSION' => 1,
'_m4_warn' => 1,
'AM_SANITY_CHECK' => 1, 'AM_SANITY_CHECK' => 1,
'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, 'AU_DEFUN' => 1,
'_AM_CONFIG_MACRO_DIRS' => 1,
'AC_DEFUN_ONCE' => 1,
'AM_AUX_DIR_EXPAND' => 1,
'_m4_warn' => 1,
'_AM_DEPENDENCIES' => 1,
'm4_pattern_allow' => 1, 'm4_pattern_allow' => 1,
'_AM_SET_OPTION' => 1, 'AC_CONFIG_MACRO_DIR' => 1,
'AM_PROG_INSTALL_SH' => 1, 'AM_CONDITIONAL' => 1,
'AM_MISSING_PROG' => 1, 'AC_DEFUN' => 1,
'_AM_PROG_CC_C_O' => 1, '_AM_PROG_CC_C_O' => 1,
'AM_PYTHON_CHECK_VERSION' => 1, 'AM_PROG_CC_C_O' => 1,
'_AM_SET_OPTIONS' => 1, 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
'AC_CONFIG_MACRO_DIR_TRACE' => 1,
'_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
'_AC_AM_CONFIG_HEADER_HOOK' => 1,
'_AM_MANGLE_OPTION' => 1, '_AM_MANGLE_OPTION' => 1,
'AM_SUBST_NOTMAKE' => 1,
'AM_PATH_PYTHON' => 1,
'AM_RUN_LOG' => 1,
'AM_SET_DEPDIR' => 1,
'include' => 1,
'AM_MAKE_INCLUDE' => 1, 'AM_MAKE_INCLUDE' => 1,
'm4_pattern_forbid' => 1, 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
'_AM_PROG_TAR' => 1 'm4_include' => 1,
'AM_DEP_TRACK' => 1,
'AM_INIT_AUTOMAKE' => 1,
'AM_PYTHON_CHECK_VERSION' => 1
} }
], 'Autom4te::Request' ), ], 'Autom4te::Request' ),
bless( [ bless( [
@ -92,65 +92,65 @@
'configure.ac' 'configure.ac'
], ],
{ {
'm4_sinclude' => 1, 'AM_MAKEFILE_INCLUDE' => 1,
'AC_INIT' => 1,
'_AM_SUBST_NOTMAKE' => 1,
'AM_AUTOMAKE_VERSION' => 1,
'AC_LIBSOURCE' => 1,
'_m4_warn' => 1,
'AC_CONFIG_SUBDIRS' => 1,
'AM_PROG_F77_C_O' => 1,
'AC_DEFINE_TRACE_LITERAL' => 1,
'AC_CANONICAL_BUILD' => 1,
'm4_pattern_allow' => 1,
'AM_POT_TOOLS' => 1,
'AC_CONFIG_FILES' => 1,
'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
'AC_CANONICAL_SYSTEM' => 1,
'AC_FC_SRCEXT' => 1,
'AM_XGETTEXT_OPTION' => 1,
'LT_INIT' => 1,
'AM_CONDITIONAL' => 1,
'_AM_COND_ELSE' => 1,
'AC_FC_PP_SRCEXT' => 1,
'_LT_AC_TAGCONFIG' => 1,
'_AM_COND_IF' => 1,
'_AM_MAKEFILE_INCLUDE' => 1,
'AM_PROG_CC_C_O' => 1,
'AC_FC_FREEFORM' => 1,
'LT_CONFIG_LTDL_DIR' => 1,
'AM_INIT_AUTOMAKE' => 1, 'AM_INIT_AUTOMAKE' => 1,
'AC_CANONICAL_HOST' => 1, 'm4_include' => 1,
'AC_CONFIG_AUX_DIR' => 1,
'include' => 1,
'AC_SUBST_TRACE' => 1,
'_AM_COND_ENDIF' => 1,
'AM_SILENT_RULES' => 1,
'm4_pattern_forbid' => 1,
'AC_CANONICAL_TARGET' => 1,
'AC_CONFIG_LIBOBJ_DIR' => 1,
'm4_sinclude' => 1,
'AM_GNU_GETTEXT' => 1,
'AC_CONFIG_HEADERS' => 1,
'AM_PROG_CXX_C_O' => 1,
'AM_MAINTAINER_MODE' => 1,
'AM_PROG_AR' => 1,
'AM_EXTRA_RECURSIVE_TARGETS' => 1,
'AH_OUTPUT' => 1, 'AH_OUTPUT' => 1,
'AM_NLS' => 1, 'AM_NLS' => 1,
'_AM_MAKEFILE_INCLUDE' => 1,
'include' => 1,
'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
'AM_XGETTEXT_OPTION' => 1,
'AM_PROG_MKDIR_P' => 1, 'AM_PROG_MKDIR_P' => 1,
'LT_SUPPORTED_TAG' => 1,
'AC_CONFIG_AUX_DIR' => 1,
'_AM_COND_ENDIF' => 1,
'AM_PATH_GUILE' => 1,
'AM_PROG_CC_C_O' => 1,
'AM_CONDITIONAL' => 1,
'm4_include' => 1,
'LT_INIT' => 1,
'AM_MAINTAINER_MODE' => 1,
'AC_CANONICAL_TARGET' => 1,
'AC_INIT' => 1,
'_AM_COND_ELSE' => 1,
'_m4_warn' => 1,
'AM_ENABLE_MULTILIB' => 1,
'AM_SILENT_RULES' => 1,
'AM_PROG_AR' => 1,
'AM_PROG_F77_C_O' => 1,
'AC_CONFIG_LINKS' => 1,
'_AM_SUBST_NOTMAKE' => 1,
'AC_FC_FREEFORM' => 1,
'm4_pattern_forbid' => 1,
'AC_CONFIG_SUBDIRS' => 1,
'AC_FC_SRCEXT' => 1,
'_AM_COND_IF' => 1,
'AM_PROG_FC_C_O' => 1,
'AC_SUBST_TRACE' => 1,
'sinclude' => 1, 'sinclude' => 1,
'LT_CONFIG_LTDL_DIR' => 1, 'AC_CANONICAL_HOST' => 1,
'_LT_AC_TAGCONFIG' => 1, 'AM_PATH_GUILE' => 1,
'AC_CONFIG_HEADERS' => 1,
'AC_FC_PP_SRCEXT' => 1,
'AC_DEFINE_TRACE_LITERAL' => 1,
'AM_POT_TOOLS' => 1,
'AC_FC_PP_DEFINE' => 1,
'AC_CANONICAL_BUILD' => 1,
'AM_AUTOMAKE_VERSION' => 1,
'AC_CONFIG_FILES' => 1,
'AC_CONFIG_LIBOBJ_DIR' => 1,
'AC_REQUIRE_AUX_FILE' => 1,
'AC_LIBSOURCE' => 1,
'AC_PROG_LIBTOOL' => 1, 'AC_PROG_LIBTOOL' => 1,
'AC_CANONICAL_SYSTEM' => 1,
'AM_PROG_CXX_C_O' => 1,
'AC_SUBST' => 1, 'AC_SUBST' => 1,
'AM_EXTRA_RECURSIVE_TARGETS' => 1, 'AC_CONFIG_LINKS' => 1,
'm4_pattern_allow' => 1, 'AM_ENABLE_MULTILIB' => 1,
'AM_MAKEFILE_INCLUDE' => 1, 'AC_REQUIRE_AUX_FILE' => 1,
'AM_GNU_GETTEXT' => 1, 'AC_FC_PP_DEFINE' => 1,
'AM_PROG_MOC' => 1 'LT_SUPPORTED_TAG' => 1,
'AM_PROG_MOC' => 1,
'AM_PROG_FC_C_O' => 1
} }
], 'Autom4te::Request' ) ], 'Autom4te::Request' )
); );

View File

@ -1,7 +1,14 @@
#!/bin/sh #!/bin/sh
# Neurotron launcher - autogerado pelo autotools
NEUROTRON_HOME="/usr/lib/neurotron" PYTHON="/usr/bin/python3"
PYTHON="/usr/bin/python" NEUROTRON_HOME="/opt/kernel/neurotron"
SRC="$NEUROTRON_HOME/src"
exec "$PYTHON" "$NEUROTRON_HOME/src/__main__.py" "$@" export PYTHONHOME="/usr"
export PYTHONPATH="$SRC:/usr/lib/python3.13:/usr/lib/python3.13/site-packages"
# Inicializar hipocampo físico como módulo do package
"$PYTHON" -m neurotron.disk_init
# Arrancar o cérebro principal como módulo do package
exec "$PYTHON" -m neurotron "$@"

View File

@ -1,7 +1,14 @@
#!/bin/sh #!/bin/sh
# Neurotron launcher - autogerado pelo autotools
NEUROTRON_HOME="@NEUROTRON_DIR@" PYTHON="/usr/bin/python3"
PYTHON="@PYTHON@" NEUROTRON_HOME="/opt/kernel/neurotron"
SRC="$NEUROTRON_HOME/src"
exec "$PYTHON" "$NEUROTRON_HOME/src/__main__.py" "$@" export PYTHONHOME="/usr"
export PYTHONPATH="$SRC:/usr/lib/python3.13:/usr/lib/python3.13/site-packages"
# Inicializar hipocampo físico como módulo do package
"$PYTHON" -m neurotron.disk_init
# Arrancar o cérebro principal como módulo do package
exec "$PYTHON" -m neurotron "$@"

19
pyproject.toml Normal file
View File

@ -0,0 +1,19 @@
[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "neurotron"
version = "0.2.0"
description = "Neurotron — Kernel Cognitivo do NFDOS"
authors = [{ name = "Neo & Trinity" }]
readme = "README.md"
requires-python = ">=3.10"
dependencies = [
"rich>=13.0"
]
[project.scripts]
neurotron = "neurotron.__main__:main"
neurotron-disk-init = "neurotron.disk_init:initialize_persistence"

View File

@ -287,13 +287,26 @@ class NeurotronDashboard:
def _draw_footer(self, width, height): def _draw_footer(self, width, height):
""" """
Rodapé com placeholder para input futuro e legenda de teclas. Rodapé com placeholder para input futuro e legenda de teclas.
Protegido contra terminais muito pequenos.
""" """
footer_text = "[ Futuro: comandos do utilizador aparecerão aqui ]" footer_text = "[ Futuro: comandos do utilizador aparecerão aqui ]"
keys_text = "[q] sair | dashboard Neurotron" keys_text = "[q] sair | dashboard Neurotron"
y_footer = height - 2 lines = [footer_text, keys_text]
self.stdscr.addnstr(y_footer, 0, footer_text.ljust(width), width) footer_lines = len(lines)
self.stdscr.addnstr(y_footer + 1, 0, keys_text.ljust(width), width)
# Se o terminal for demasiado pequeno, encolhe ou só mostra o essencial
start_row = max(0, height - footer_lines)
for i, text in enumerate(lines):
y = start_row + i
if 0 <= y < height:
try:
self.stdscr.addnstr(y, 0, text.ljust(width), width)
except curses.error:
# Em última instância, ignoramos erros de desenho
pass
# ------------------------------------------------------------------ # ------------------------------------------------------------------
# Loop principal da UI # Loop principal da UI
@ -315,9 +328,13 @@ class NeurotronDashboard:
header_height = 2 header_height = 2
footer_height = 2 footer_height = 2
self._draw_header(height, width) try:
self._draw_log_window(header_height, footer_height, width, height) self._draw_header(height, width)
self._draw_footer(width, height) self._draw_log_window(header_height, footer_height, width, height)
self._draw_footer(width, height)
except curses.error:
# Em terminais muito pequenos ou estados estranhos, evitamos crash
pass
self.stdscr.refresh() self.stdscr.refresh()
@ -389,7 +406,7 @@ def cognitive_loop(cortex: Cortex, ui: NeurotronDashboard):
try: try:
cortex.fatal(e) cortex.fatal(e)
finally: finally:
break ui.stop_event.set()
finally: finally:
ui.stop_event.set() ui.stop_event.set()

View File

@ -5,10 +5,10 @@ from pathlib import Path
from time import sleep from time import sleep
from rich.console import Console from rich.console import Console
from neuron import Neuron from .neuron import Neuron
from hippocampus import Hippocampus from .hippocampus import Hippocampus
from perception import Perception from .perception import Perception
from motor import Motor from .motor import Motor
from .neurotron_config import ( from .neurotron_config import (
NEUROTRON_MODE, NEUROTRON_TICK, NEUROTRON_TICK_MIN, NEUROTRON_TICK_MAX, NEUROTRON_TICK_STEP, NEUROTRON_MODE, NEUROTRON_TICK, NEUROTRON_TICK_MIN, NEUROTRON_TICK_MAX, NEUROTRON_TICK_STEP,
@ -78,8 +78,8 @@ class Cortex:
self.console.print("[bold cyan]🧠 Neurotron[/] — boot") self.console.print("[bold cyan]🧠 Neurotron[/] — boot")
self.memory.remember("boot", {"version": "0.1", "tick": self.tick}) self.memory.remember("boot", {"version": "0.1", "tick": self.tick})
self._booted = True self._booted = True
state, _ = self.diagnostic.run_exam() #state, _ = self.diagnostic.run_exam()
self._apply_homeostasis(state) #self._apply_homeostasis(state)
def _apply_homeostasis(self, state): def _apply_homeostasis(self, state):
if state == "CRITICAL": if state == "CRITICAL":
@ -131,8 +131,9 @@ class Cortex:
self._tick_count += 1 self._tick_count += 1
if self._tick_count % NEUROTRON_DIAG_EVERY_TICKS == 0: if self._tick_count % NEUROTRON_DIAG_EVERY_TICKS == 0:
state, _ = self.diagnostic.run_exam() #state, _ = self.diagnostic.run_exam()
self._apply_homeostasis(state) #self._apply_homeostasis(state)
pass
if self._tick_count % TELEMETRY_FLUSH_EVERY_TICKS == 0: if self._tick_count % TELEMETRY_FLUSH_EVERY_TICKS == 0:
self._flush_telemetry() self._flush_telemetry()

View File

@ -12,13 +12,8 @@ import os
import subprocess import subprocess
from pathlib import Path from pathlib import Path
from rich.console import Console from rich.console import Console
if __name__ == "__main__" and __package__ is None:
import sys
from pathlib import Path
sys.path.append(str(Path(__file__).resolve().parents[1]))
__package__ = "neurotron_core"
from .neurotron_config import ( from neurotron.neurotron_config import (
MOUNT_POINT, DISK_CANDIDATES MOUNT_POINT, DISK_CANDIDATES
) )