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:
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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 =
|
||||
|
||||
Reference in New Issue
Block a user