feat(system): S89: full external access (AIPASS_HOME dual registry) + feedback channel (cross-project bridge) + init update idempotency

Co-Authored-By: @devpulse <devpulse@aipass>
This commit is contained in:
AIOSAI
2026-04-11 14:49:16 -07:00
co-authored by @devpulse
parent 5b2d14a846
commit e8a9af4bc0
14 changed files with 584 additions and 101 deletions
@@ -64,9 +64,13 @@ drone systems # All branches
drone, seedgo, prax, cli, ai_mail, api, flow, spawn, trigger, memory, devpulse (you — no apps/, coordinates via dispatch + agents)
## Your Project
## Your Projects
You have a personal project: **Compass** at `~/Projects/compass/`. It's a vector-based thinking engine for growing autonomous decision-making. The judgment library at `~/Projects/decisions.md` (27 entries) is the prototype data. Compass vectorizes these decisions into ChromaDB fragments so you can query past judgment patterns, feedback, and outcomes when facing new decisions. Own venv, own registry, own orchestration AI (eventually). Work on this when you have autonomy time. Compass is part of the larger Nexus vision. See decisions.md and key_learning nexus_is_the_answer.
Two personal projects, both part of the Nexus vision. Work on these during autonomy time.
**Compass** at `~/Projects/compass/` — Vector-based thinking engine for autonomous decision-making. 130 fragments (decisions + observations + learnings). Query before big choices. Stop building features, start using it (#033). Copy @memory's fragment code as research for multi-collection architecture (DPLAN-023).
**AIPL** at `~/Projects/AIPL/` — Token compression for AI agent storage/communication. ~45% savings proven. Phase 1 COMPLETE (style guide + 6 examples in docs/). DPLAN-0115. Polyglot agent builds Phase 2 (compression engine). Hand to Polyglot when ready.
## Working Habits
+22 -7
View File
@@ -42,14 +42,29 @@ def discover_modules() -> list[Any]:
if file_path.name.startswith("_"):
continue
module_name = f"apps.modules.{file_path.stem}"
# Try package import first, fall back to relative import
module_names = [
f"aipass.devpulse.apps.modules.{file_path.stem}",
f"apps.modules.{file_path.stem}",
]
try:
module = importlib.import_module(module_name)
if hasattr(module, "handle_command"):
modules.append(module)
except Exception as e:
logger.error(f"[DEVPULSE] Failed to load module {module_name}: {e}")
loaded = False
for module_name in module_names:
try:
module = importlib.import_module(module_name)
if hasattr(module, "handle_command"):
modules.append(module)
loaded = True
break
except (ImportError, ModuleNotFoundError):
continue
except Exception as e:
logger.error(f"[DEVPULSE] Failed to load module {module_name}: {e}")
loaded = True
break
if not loaded:
logger.error(f"[DEVPULSE] Could not import module {file_path.stem}")
return modules
+1 -5
View File
@@ -8,11 +8,7 @@ python_functions = test_*
python_classes = Test*
# Command-line options (always applied)
addopts =
-v # Verbose output
--tb=short # Short traceback format
--strict-markers # Raise error on unknown markers
-ra # Show summary of all test outcomes
addopts = -v --tb=short --strict-markers -ra
# Test markers (for categorizing tests)
markers =