awnode 0.3.6__tar.gz → 0.3.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {awnode-0.3.6 → awnode-0.3.7}/PKG-INFO +1 -1
- {awnode-0.3.6 → awnode-0.3.7}/awnode/__init__.py +1 -1
- {awnode-0.3.6 → awnode-0.3.7}/awnode/_doctor.py +32 -5
- awnode-0.3.7/awnode/data/family.json +1571 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/hub.py +248 -30
- awnode-0.3.7/awnode/memory_probe.py +148 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/server.py +20 -0
- {awnode-0.3.6 → awnode-0.3.7}/docs/aither-manifest.json +4 -4
- {awnode-0.3.6 → awnode-0.3.7}/pyproject.toml +1 -1
- awnode-0.3.7/tests/test_hub_family.py +72 -0
- awnode-0.3.7/tests/test_memory_probe.py +83 -0
- {awnode-0.3.6 → awnode-0.3.7}/.github/workflows/publish.yml +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/.gitignore +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/CLAUDE.md +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/Dockerfile +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/LICENSE +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/README.md +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/_smoke_check.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/aither-constellation.js +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/aither-manifest.json +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/__main__.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/aithernet_presence.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/cli.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/comfyui_setup.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/components/__init__.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/components/autorig.yaml +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/components/canvas.yaml +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/components/comfyui-3d.yaml +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/components/comfyui.yaml +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/components/design.yaml +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/components/iris.yaml +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/components/muse.yaml +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/components/sd-webui.yaml +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/extensions.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/license.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/mcp_server.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/proxy.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/rea_sidecar_bridge.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/service_install.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/sync.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/tools/__init__.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/tools/_http.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/tools/_scopes.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/tools/commands.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/tools/context.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/tools/documents.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/tools/embeddings.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/tools/extensions.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/tools/filesystem.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/tools/fleet_host.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/tools/fleet_verbs.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/tools/generation.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/tools/git_tools.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/tools/http_client.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/tools/knowledge.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/tools/memory.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/tools/mermaid.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/tools/notebooks.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/tools/orchestrator.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/tools/search.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/awnode/update_check.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/dist_validate/aithernode-0.1.0-py3-none-any.whl +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/docker-entrypoint.sh +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/docs/aither-constellation.js +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/docs/index.html +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/docs/llms.txt +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/packaging/aithernode-stub/README.md +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/packaging/aithernode-stub/pyproject.toml +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/tests/test_aithernet_presence.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/tests/test_awnix_host_install.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/tests/test_chat_endpoint_auth.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/tests/test_component_image_env.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/tests/test_connect_browser_join.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/tests/test_custom_backend.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/tests/test_extension_contract.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/tests/test_fleet_host_tools.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/tests/test_fleet_verbs_tools.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/tests/test_hub_error_cooldown.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/tests/test_mcp_api_compat.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/tests/test_mcp_mode_reprobe.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/tests/test_mcp_server_auth.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/tests/test_mcp_sse_transport.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/tests/test_pair_mode_route.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/tests/test_proxy_plane.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/tests/test_server_route_hygiene.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/tests/test_server_security_hardening.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/tests/test_sync_enrollment_lifecycle.py +0 -0
- {awnode-0.3.6 → awnode-0.3.7}/tests/test_update_check.py +0 -0
|
@@ -19,11 +19,28 @@ import os
|
|
|
19
19
|
import shutil
|
|
20
20
|
import sys
|
|
21
21
|
|
|
22
|
-
#: Frozen from the Aither World registry at generation time. A shipped
|
|
23
|
-
#: package cannot read the registry, and a doctor that guessed at the family
|
|
24
|
-
#: would go stale in silence. Regenerate to update.
|
|
25
22
|
SELF = 'awnode'
|
|
26
|
-
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
#: The family, read at import from this package's vendored family.json
|
|
26
|
+
#: (generated by gen_ecosystem.py --emit; EC018 keeps it fresh): every registry
|
|
27
|
+
#: brick that is an importable python package, minus this one. An unreadable
|
|
28
|
+
#: index sets FAMILY_ERROR and the verdict is UNJUDGED, never an empty stack.
|
|
29
|
+
def _family_from_data():
|
|
30
|
+
import json
|
|
31
|
+
from pathlib import Path
|
|
32
|
+
p = Path(__file__).resolve().parent / "data" / "family.json"
|
|
33
|
+
try:
|
|
34
|
+
doc = json.loads(p.read_text(encoding="utf-8"))
|
|
35
|
+
mods = sorted({b["module"] for b in doc["bricks"] if b.get("module")} - {SELF})
|
|
36
|
+
except (OSError, ValueError, KeyError, TypeError) as exc:
|
|
37
|
+
return [], f"cannot read the family index {p} ({type(exc).__name__}: {exc})"
|
|
38
|
+
if not mods:
|
|
39
|
+
return [], f"the family index {p} names no python bricks"
|
|
40
|
+
return mods, None
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
FAMILY, FAMILY_ERROR = _family_from_data()
|
|
27
44
|
PAIRS_WITH = ['adk']
|
|
28
45
|
|
|
29
46
|
#: This brick's OWN config, read out of its source at generation time.
|
|
@@ -33,7 +50,13 @@ PAIRS_WITH = ['adk']
|
|
|
33
50
|
#: platform-wide vars it also touches would be noise, and a doctor that floods
|
|
34
51
|
#: gets ignored.
|
|
35
52
|
ENV_REQUIRED = []
|
|
36
|
-
ENV_OPTIONAL = [
|
|
53
|
+
ENV_OPTIONAL = [
|
|
54
|
+
'AITHERNODE_ALLOWED_ORIGINS', 'AITHERNODE_BIND_HOST', 'AITHERNODE_CUSTOM_BACKEND_API_KEY',
|
|
55
|
+
'AITHERNODE_CUSTOM_BACKEND_MODEL', 'AITHERNODE_CUSTOM_BACKEND_URL', 'AITHERNODE_FS_ROOT',
|
|
56
|
+
'AITHERNODE_LMSTUDIO_URL', 'AITHERNODE_MODE', 'AITHERNODE_PORT', 'AITHERNODE_PROXY_MAP',
|
|
57
|
+
'AITHERNODE_PROXY_TOKEN', 'AITHERNODE_SERVICE_HOST', 'AITHERNODE_TRUSTED_PROXIES',
|
|
58
|
+
'AWNODE_EXTENSION_IDS', 'AWNODE_IN_CONTAINER', 'AWNODE_LOCAL_MODEL', 'AWNODE_MCP_REPROBE_S',
|
|
59
|
+
]
|
|
37
60
|
|
|
38
61
|
|
|
39
62
|
def _installed(mod: str) -> "str | None":
|
|
@@ -63,6 +86,10 @@ def report(out=None) -> int:
|
|
|
63
86
|
print(f" self {SELF} {mine or 'NOT IMPORTABLE'}", file=out)
|
|
64
87
|
shim = shutil.which(SELF)
|
|
65
88
|
print(f" command {shim or 'not on PATH'}", file=out)
|
|
89
|
+
if FAMILY_ERROR:
|
|
90
|
+
# Never an empty stack: "0/0 installed" reads as a clean machine.
|
|
91
|
+
print(f"\nverdict: UNJUDGED -- {FAMILY_ERROR}", file=out)
|
|
92
|
+
return 2
|
|
66
93
|
|
|
67
94
|
# The stack. Siblings this brick pairs with are called out separately,
|
|
68
95
|
# because a missing pair is a REASON, while a missing unrelated brick is
|