clm-kernel 0.0.0__py3-none-any.whl
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.
- clm/__init__.py +230 -0
- clm/__main__.py +25 -0
- clm/cross_cutting/__init__.py +50 -0
- clm/cross_cutting/_test_runner.py +36 -0
- clm/cross_cutting/async_utils.py +25 -0
- clm/cross_cutting/cel_builder.py +123 -0
- clm/cross_cutting/cel_converter.py +697 -0
- clm/cross_cutting/cel_engine.py +252 -0
- clm/cross_cutting/cel_ops.py +72 -0
- clm/cross_cutting/cel_ops_db.py +157 -0
- clm/cross_cutting/cel_ops_files.py +99 -0
- clm/cross_cutting/cel_ops_state.py +71 -0
- clm/cross_cutting/cel_ops_strings.py +64 -0
- clm/cross_cutting/cel_resolver.py +63 -0
- clm/cross_cutting/cel_slices.py +56 -0
- clm/cross_cutting/cel_store.py +330 -0
- clm/cross_cutting/clm_logger.py +140 -0
- clm/cross_cutting/config/__init__.py +155 -0
- clm/cross_cutting/config/config_constants.py +392 -0
- clm/cross_cutting/config/env_parameters.py +90 -0
- clm/cross_cutting/config/logging.py +378 -0
- clm/cross_cutting/config/settings.py +504 -0
- clm/cross_cutting/context.py +5 -0
- clm/cross_cutting/domain_models.py +55 -0
- clm/cross_cutting/domain_types.py +61 -0
- clm/cross_cutting/effects.py +67 -0
- clm/cross_cutting/errors.py +153 -0
- clm/cross_cutting/governance.py +331 -0
- clm/cross_cutting/guards.py +41 -0
- clm/cross_cutting/mcard.py +321 -0
- clm/cross_cutting/native.py +185 -0
- clm/cross_cutting/observability.py +289 -0
- clm/cross_cutting/pcard.py +434 -0
- clm/cross_cutting/registry.py +71 -0
- clm/cross_cutting/resources.py +84 -0
- clm/cross_cutting/secrets.py +44 -0
- clm/cross_cutting/subprocess_utils.py +118 -0
- clm/cross_cutting/telemetry.py +164 -0
- clm/cross_cutting/testing/__init__.py +8 -0
- clm/cross_cutting/testing/comparator.py +187 -0
- clm/cross_cutting/testing/datasets.py +87 -0
- clm/cross_cutting/timeutil.py +20 -0
- clm/cross_cutting/types/new_type_check.py +0 -0
- clm/cross_cutting/utils/__init__.py +1 -0
- clm/cross_cutting/utils/url_safety.py +50 -0
- clm/cross_cutting/vcard.py +560 -0
- clm/cross_cutting/writer.py +118 -0
- clm/layer0/README.md +50 -0
- clm/layer0/__init__.py +223 -0
- clm/layer0/algebra.py +60 -0
- clm/layer0/algebra_baldwin.py +133 -0
- clm/layer0/algebra_baldwin_generators.py +36 -0
- clm/layer0/algebra_equivalence.py +262 -0
- clm/layer0/algebra_ingest.py +306 -0
- clm/layer0/algebra_manifest_io.py +156 -0
- clm/layer0/assembler.py +481 -0
- clm/layer0/cel/__init__.py +23 -0
- clm/layer0/cel_eval.py +491 -0
- clm/layer0/codec.py +106 -0
- clm/layer0/context.py +122 -0
- clm/layer0/db.py +160 -0
- clm/layer0/exceptions.py +73 -0
- clm/layer0/fibration.py +106 -0
- clm/layer0/gates.py +50 -0
- clm/layer0/hash.py +80 -0
- clm/layer0/loader.py +826 -0
- clm/layer0/math_utils.py +163 -0
- clm/layer0/mcard.py +96 -0
- clm/layer0/model/__init__.py +0 -0
- clm/layer0/model/action.py +223 -0
- clm/layer0/model/card.py +280 -0
- clm/layer0/model/card_triad.py +427 -0
- clm/layer0/model/compatibility.py +60 -0
- clm/layer0/model/dictionary.py +46 -0
- clm/layer0/model/dots.py +331 -0
- clm/layer0/model/event_producer.py +88 -0
- clm/layer0/model/g_time.py +89 -0
- clm/layer0/model/handle.py +163 -0
- clm/layer0/model/hash/__init__.py +6 -0
- clm/layer0/model/hash/algorithms/__init__.py +3 -0
- clm/layer0/model/hash/algorithms/custom_hash.py +7 -0
- clm/layer0/model/hash/algorithms/local_sha256.py +178 -0
- clm/layer0/model/hash/constants.py +53 -0
- clm/layer0/model/hash/enums.py +60 -0
- clm/layer0/model/hash/validator.py +307 -0
- clm/layer0/model/interpreter.py +275 -0
- clm/layer0/model/pagination.py +45 -0
- clm/layer0/model/pcard.py +716 -0
- clm/layer0/model/schema.py +44 -0
- clm/layer0/model/utils/__init__.py +1 -0
- clm/layer0/model/utils/content_analyzer.py +152 -0
- clm/layer0/model/validators/__init__.py +1 -0
- clm/layer0/model/validators/base_validator.py +44 -0
- clm/layer0/model/validators/binary_validator.py +66 -0
- clm/layer0/model/validators/text_validator.py +82 -0
- clm/layer0/model/validators/validation_registry.py +49 -0
- clm/layer0/model/vcard.py +823 -0
- clm/layer0/model/vcard_ext/__init__.py +39 -0
- clm/layer0/model/vcard_ext/core.py +60 -0
- clm/layer0/model/vcard_ext/network.py +23 -0
- clm/layer0/model/vcard_ext/observability.py +63 -0
- clm/layer0/model/vcard_ext/storage.py +60 -0
- clm/layer0/model/vcard_ext/vendors.py +211 -0
- clm/layer0/model/vcard_sandwich.py +119 -0
- clm/layer0/model/vcard_vocabulary.py +463 -0
- clm/layer0/model/workflow.py +274 -0
- clm/layer0/narrative.py +431 -0
- clm/layer0/ontology/collection.py +125 -0
- clm/layer0/parser.py +429 -0
- clm/layer0/relations.py +73 -0
- clm/layer0/rule_evaluator.py +251 -0
- clm/layer0/schema/__init__.py +38 -0
- clm/layer0/schema/ddl.py +97 -0
- clm/layer0/templates/abstract.yaml +99 -0
- clm/layer0/templates/balanced.yaml +253 -0
- clm/layer0/templates/concrete.yaml +172 -0
- clm/layer0/type_registry.py +223 -0
- clm/layer0/types.py +204 -0
- clm/layer0/utils.py +886 -0
- clm/layer0/verifier_core.py +262 -0
- clm/layer1/__init__.py +31 -0
- clm/layer1/action_dispatcher.py +275 -0
- clm/layer1/adapter_registry.py +233 -0
- clm/layer1/algebra_baldwin_generators.py +192 -0
- clm/layer1/arrow_compiler.py +525 -0
- clm/layer1/batch_processor.py +152 -0
- clm/layer1/cel/__init__.py +27 -0
- clm/layer1/cel/builder.py +173 -0
- clm/layer1/engine.py +759 -0
- clm/layer1/engine_async.py +89 -0
- clm/layer1/eval_callback.py +49 -0
- clm/layer1/gate_composer.py +229 -0
- clm/layer1/hoare_sandwich.py +298 -0
- clm/layer1/identity_guard.py +348 -0
- clm/layer1/matrix.py +138 -0
- clm/layer1/neural_runtime.py +221 -0
- clm/layer1/operations/__init__.py +123 -0
- clm/layer1/operations/augment.py +156 -0
- clm/layer1/operations/base.py +109 -0
- clm/layer1/operations/builtins.py +338 -0
- clm/layer1/operations/dispatch.py +144 -0
- clm/layer1/operations/exclude.py +107 -0
- clm/layer1/operations/handle.py +197 -0
- clm/layer1/operations/identity.py +139 -0
- clm/layer1/operations/invert.py +66 -0
- clm/layer1/operations/loader.py +116 -0
- clm/layer1/operations/manipulators/__init__.py +23 -0
- clm/layer1/operations/manipulators/document.py +211 -0
- clm/layer1/operations/manipulators/media.py +134 -0
- clm/layer1/operations/manipulators/structured.py +159 -0
- clm/layer1/operations/manipulators/tabular.py +334 -0
- clm/layer1/operations/port.py +65 -0
- clm/layer1/operations/services.py +529 -0
- clm/layer1/operations/split.py +117 -0
- clm/layer1/operations/substitute.py +75 -0
- clm/layer1/petri.py +1052 -0
- clm/layer1/pocketflow_orchestrator.py +408 -0
- clm/layer1/pocketflow_scheduler.py +519 -0
- clm/layer1/protocols.py +197 -0
- clm/layer1/runtime_adapter.py +718 -0
- clm/layer1/runtimes/__init__.py +71 -0
- clm/layer1/runtimes/_generated_assertions.py +125 -0
- clm/layer1/runtimes/_generated_types.py +42 -0
- clm/layer1/runtimes/base.py +265 -0
- clm/layer1/runtimes/binary.py +101 -0
- clm/layer1/runtimes/factory.py +203 -0
- clm/layer1/runtimes/javascript.py +321 -0
- clm/layer1/runtimes/javascript_runtime.js +33 -0
- clm/layer1/runtimes/js_scripts/isomorphism.mjs +22 -0
- clm/layer1/runtimes/js_scripts/loader.mjs +52 -0
- clm/layer1/runtimes/lambda_calc.py +126 -0
- clm/layer1/runtimes/python.py +288 -0
- clm/layer1/runtimes/python_runtime.py +41 -0
- clm/layer1/runtimes/script.py +114 -0
- clm/layer1/sandbox.py +334 -0
- clm/layer1/savepoint_guard.py +136 -0
- clm/layer1/sparse_net.py +122 -0
- clm/layer1/spec_tester.py +165 -0
- clm/layer1/store.py +295 -0
- clm/layer1/test_runner.py +498 -0
- clm/layer1/type_inspector.py +166 -0
- clm/layer1/verifier.py +772 -0
- clm/layer1/vm.py +91 -0
- clm/layer2/__init__.py +78 -0
- clm/layer2/card_collection.py +678 -0
- clm/layer2/classifier.py +479 -0
- clm/layer2/engine/__init__.py +1 -0
- clm/layer2/engine/abstract_sql_engine.py +320 -0
- clm/layer2/engine/base.py +193 -0
- clm/layer2/engine/duckdb_engine.py +576 -0
- clm/layer2/engine/sqlite_engine.py +518 -0
- clm/layer2/fiber/__init__.py +31 -0
- clm/layer2/fiber/context.py +89 -0
- clm/layer2/fiber/disposable.py +163 -0
- clm/layer2/fiber/fiber.py +125 -0
- clm/layer2/fiber/hoare.py +191 -0
- clm/layer2/file_io.py +376 -0
- clm/layer2/file_registrar.py +77 -0
- clm/layer2/ingest.py +202 -0
- clm/layer2/lineage.py +322 -0
- clm/layer2/mcard_fs.py +262 -0
- clm/layer2/merkle.py +11 -0
- clm/layer2/mime.py +244 -0
- clm/layer2/mime_detector.py +245 -0
- clm/layer2/private_collection.py +118 -0
- clm/layer2/shared_store.py +11 -0
- clm/layer2/storage/__init__.py +190 -0
- clm/layer2/storage/db_bitemporal.py +141 -0
- clm/layer2/storage/db_driver.py +331 -0
- clm/layer2/storage/db_hyperlinks.py +214 -0
- clm/layer2/storage/db_pool.py +139 -0
- clm/layer2/storage/db_repository.py +229 -0
- clm/layer2/storage/savepoint.py +78 -0
- clm/layer2/storage/sqlite_wal.py +74 -0
- clm/layer2/tridb.py +245 -0
- clm/layer2/vcard_receipt.py +71 -0
- clm/layer2/vfs.py +17 -0
- clm/layer3/__init__.py +141 -0
- clm/layer3/agency/__init__.py +19 -0
- clm/layer3/agency/config.py +220 -0
- clm/layer3/agency/providers/__init__.py +15 -0
- clm/layer3/agency/providers/base.py +91 -0
- clm/layer3/agency/providers/mlc_llm.py +169 -0
- clm/layer3/agency/providers/ollama.py +203 -0
- clm/layer3/agency/router.py +71 -0
- clm/layer3/agency/runtime.py +524 -0
- clm/layer3/gateway.py +353 -0
- clm/layer3/open_interpreter_adapter.py +159 -0
- clm/layer3/rag/__init__.py +70 -0
- clm/layer3/rag/cli.py +228 -0
- clm/layer3/rag/config.py +153 -0
- clm/layer3/rag/embeddings/__init__.py +16 -0
- clm/layer3/rag/embeddings/base.py +79 -0
- clm/layer3/rag/embeddings/ollama.py +211 -0
- clm/layer3/rag/embeddings/vision.py +290 -0
- clm/layer3/rag/engine.py +276 -0
- clm/layer3/rag/graph/__init__.py +22 -0
- clm/layer3/rag/graph/community.py +198 -0
- clm/layer3/rag/graph/engine.py +433 -0
- clm/layer3/rag/graph/extractor.py +255 -0
- clm/layer3/rag/graph/schema.py +115 -0
- clm/layer3/rag/graph/store.py +641 -0
- clm/layer3/rag/indexer.py +333 -0
- clm/layer3/rag/llm_providers.json +52 -0
- clm/layer3/rag/semantic_versioning.py +313 -0
- clm/layer3/rag/vector/__init__.py +28 -0
- clm/layer3/rag/vector/handle_vector_store.py +749 -0
- clm/layer3/rag/vector/schema.py +151 -0
- clm/layer3/rag/vector/store.py +632 -0
- clm/layer3/reticulum/__init__.py +55 -0
- clm/layer3/reticulum/bridge.py +74 -0
- clm/layer3/reticulum/daemon.py +88 -0
- clm/layer3/reticulum/discovery.py +164 -0
- clm/layer3/reticulum/identity.py +107 -0
- clm/layer3/reticulum/media.py +148 -0
- clm/layer3/reticulum/transport.py +133 -0
- clm/layer3/satori/__init__.py +209 -0
- clm/layer3/satori/alpha_conversion.py +168 -0
- clm/layer3/satori/beta_reduction.py +359 -0
- clm/layer3/satori/continuation.py +38 -0
- clm/layer3/satori/eta_conversion.py +205 -0
- clm/layer3/satori/free_variables.py +163 -0
- clm/layer3/satori/io_effects.py +370 -0
- clm/layer3/satori/lambda_runtime.py +726 -0
- clm/layer3/satori/lambda_term.py +230 -0
- clm/layer3/satori/sheaf_audit.py +261 -0
- clm/layer3/satori/speech_act.py +279 -0
- clm/layer4/README.md +9 -0
- clm/layer4/__init__.py +67 -0
- clm/layer4/_sovereign_executor.py +580 -0
- clm/layer4/action_commands.py +719 -0
- clm/layer4/api.py +236 -0
- clm/layer4/bootstrap/__init__.py +13 -0
- clm/layer4/bootstrap/bootstrapper.py +118 -0
- clm/layer4/bootstrap/cleanup.py +44 -0
- clm/layer4/bootstrap/clm_hooks.py +49 -0
- clm/layer4/bootstrap/genesis.py +77 -0
- clm/layer4/bootstrap/injection.py +125 -0
- clm/layer4/cli.py +549 -0
- clm/layer4/collection_manager.py +553 -0
- clm/layer4/commands/__init__.py +81 -0
- clm/layer4/commands/action_cmd.py +42 -0
- clm/layer4/commands/check_cmd.py +82 -0
- clm/layer4/commands/envelope.py +73 -0
- clm/layer4/commands/evaluate_cmd.py +224 -0
- clm/layer4/commands/mcard_cmd.py +24 -0
- clm/layer4/commands/petri_cmd.py +92 -0
- clm/layer4/commands/tridb_cmd.py +319 -0
- clm/layer4/commands/version_cmd.py +27 -0
- clm/layer4/diff_commands.py +167 -0
- clm/layer4/eoa_sponsor.py +232 -0
- clm/layer4/events.py +69 -0
- clm/layer4/flux_gateway.py +133 -0
- clm/layer4/gateway.py +91 -0
- clm/layer4/loader.py +307 -0
- clm/layer4/mcard_commands.py +166 -0
- clm/layer4/membrane.py +273 -0
- clm/layer4/navigation.py +50 -0
- clm/layer4/protocol/protocol_entry_python.py +108 -0
- clm/layer4/protocol/python_sync.py +126 -0
- clm/layer4/runner.py +150 -0
- clm/layer4/satori.py +262 -0
- clm/layer4/server/python_sync_client.py +150 -0
- clm/layer4/server/python_sync_server.py +139 -0
- clm/layer4/server/service_api.py +315 -0
- clm/layer4/server/start_servers.py +107 -0
- clm/layer4/server/stop_servers.py +24 -0
- clm/layer4/simulated_optimization_fix.py +0 -0
- clm/layer4/storage.py +463 -0
- clm/layer4/tridb_admin.py +268 -0
- clm/layer4/websocket/test_ws_client.py +104 -0
- clm/layer4/websocket/test_ws_server.py +138 -0
- clm/layer4/websocket/ws_server_local.py +160 -0
- clm/layer5/__init__.py +51 -0
- clm/layer5/async_batch_writer.py +133 -0
- clm/layer5/learning.py +276 -0
- clm/layer5/telemetry_hook.py +107 -0
- clm/layer5/type_lattice.py +238 -0
- clm/py.typed +0 -0
- clm/schemas/__init__.py +652 -0
- clm/schemas/abstract_face_schema.yaml +77 -0
- clm/schemas/cel_schema.yaml +416 -0
- clm/schemas/lifecycle/__init__.py +45 -0
- clm/schemas/lifecycle/models.py +123 -0
- clm/schemas/lifecycle/service.py +364 -0
- clm/schemas/mcard_schema.sql +192 -0
- clm/schemas/mcard_vector_schema.sql +283 -0
- clm/schemas/mlp-context-v1.json +91 -0
- clm_kernel-0.0.0.dist-info/METADATA +121 -0
- clm_kernel-0.0.0.dist-info/RECORD +333 -0
- clm_kernel-0.0.0.dist-info/WHEEL +4 -0
- clm_kernel-0.0.0.dist-info/entry_points.txt +3 -0
- clm_kernel-0.0.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Layer 1: Unified Polyglot Runtime Adapter Matrix (DV-373-05).
|
|
3
|
+
|
|
4
|
+
Consolidates multi-language runtime adapters across the CLM kernel:
|
|
5
|
+
- Python: Sub-millisecond in-process reflection or isolated execution
|
|
6
|
+
- JavaScript/Node: Node.js worker/process execution
|
|
7
|
+
- Rust: Native fast-path dispatch via clm_rust_core binary
|
|
8
|
+
- Shell: Bash/POSIX process execution
|
|
9
|
+
- Lean: Lean 4 theorem proving / logic evaluation
|
|
10
|
+
- System 1 (Jev): Fast discrete projection (< 70ms)
|
|
11
|
+
- System 2 (LLM): Deliberative autoregressive reasoning
|
|
12
|
+
|
|
13
|
+
Provides a unified interface with sandboxed resource governance and timeouts.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
import os
|
|
19
|
+
import shutil
|
|
20
|
+
import subprocess
|
|
21
|
+
from abc import ABC, abstractmethod
|
|
22
|
+
from typing import Any
|
|
23
|
+
|
|
24
|
+
from clm.layer1.neural_runtime import (
|
|
25
|
+
System1RuntimeAdapter,
|
|
26
|
+
System2RuntimeAdapter,
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class BaseRuntimeAdapter(ABC):
|
|
31
|
+
"""Abstract interface for all CLM polyglot runtime adapters."""
|
|
32
|
+
|
|
33
|
+
@property
|
|
34
|
+
@abstractmethod
|
|
35
|
+
def name(self) -> str:
|
|
36
|
+
"""Name of the runtime adapter (e.g. 'python', 'rust', 'node')."""
|
|
37
|
+
pass
|
|
38
|
+
|
|
39
|
+
@abstractmethod
|
|
40
|
+
def validate_environment(self) -> bool:
|
|
41
|
+
"""Returns True if the required runtime environment is available."""
|
|
42
|
+
pass
|
|
43
|
+
|
|
44
|
+
@abstractmethod
|
|
45
|
+
def execute(self, payload: dict[str, Any], context: dict[str, Any] | None = None) -> Any:
|
|
46
|
+
"""Executes the payload in the targeted runtime."""
|
|
47
|
+
pass
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class PythonRuntimeAdapter(BaseRuntimeAdapter):
|
|
51
|
+
"""In-process Python execution adapter."""
|
|
52
|
+
|
|
53
|
+
@property
|
|
54
|
+
def name(self) -> str:
|
|
55
|
+
return "python"
|
|
56
|
+
|
|
57
|
+
def validate_environment(self) -> bool:
|
|
58
|
+
return True
|
|
59
|
+
|
|
60
|
+
def execute(self, payload: dict[str, Any], context: dict[str, Any] | None = None) -> Any:
|
|
61
|
+
code = payload.get("code")
|
|
62
|
+
fn = payload.get("function")
|
|
63
|
+
ctx = context or {}
|
|
64
|
+
|
|
65
|
+
if callable(fn):
|
|
66
|
+
return fn(ctx)
|
|
67
|
+
|
|
68
|
+
if code:
|
|
69
|
+
local_vars = {"context": ctx, "result": None}
|
|
70
|
+
exec(code, {}, local_vars)
|
|
71
|
+
return local_vars.get("result")
|
|
72
|
+
|
|
73
|
+
raise ValueError("PythonRuntimeAdapter requires 'code' string or 'function' callable")
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class RustRuntimeAdapter(BaseRuntimeAdapter):
|
|
77
|
+
"""Rust execution adapter with fast-path binary resolution."""
|
|
78
|
+
|
|
79
|
+
def __init__(self, binary_path: str | None = None) -> None:
|
|
80
|
+
self._binary_path = binary_path
|
|
81
|
+
|
|
82
|
+
@property
|
|
83
|
+
def name(self) -> str:
|
|
84
|
+
return "rust"
|
|
85
|
+
|
|
86
|
+
def validate_environment(self) -> bool:
|
|
87
|
+
if self._binary_path and os.path.exists(self._binary_path):
|
|
88
|
+
return True
|
|
89
|
+
return bool(shutil.which("rustc") or shutil.which("cargo"))
|
|
90
|
+
|
|
91
|
+
def execute(self, payload: dict[str, Any], context: dict[str, Any] | None = None) -> Any:
|
|
92
|
+
bin_path = payload.get("binary_path") or self._binary_path
|
|
93
|
+
if not bin_path or not os.path.exists(bin_path):
|
|
94
|
+
raise FileNotFoundError(f"Rust binary not found at: {bin_path}")
|
|
95
|
+
|
|
96
|
+
import json
|
|
97
|
+
inp_str = json.dumps(context or {})
|
|
98
|
+
proc = subprocess.run(
|
|
99
|
+
[bin_path],
|
|
100
|
+
input=inp_str,
|
|
101
|
+
text=True,
|
|
102
|
+
capture_output=True,
|
|
103
|
+
timeout=payload.get("timeout", 10),
|
|
104
|
+
)
|
|
105
|
+
if proc.returncode != 0:
|
|
106
|
+
raise RuntimeError(f"Rust execution failed with code {proc.returncode}: {proc.stderr}")
|
|
107
|
+
return proc.stdout.strip()
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
class NodeRuntimeAdapter(BaseRuntimeAdapter):
|
|
111
|
+
"""Node.js execution adapter."""
|
|
112
|
+
|
|
113
|
+
@property
|
|
114
|
+
def name(self) -> str:
|
|
115
|
+
return "javascript"
|
|
116
|
+
|
|
117
|
+
def validate_environment(self) -> bool:
|
|
118
|
+
return bool(shutil.which("node"))
|
|
119
|
+
|
|
120
|
+
def execute(self, payload: dict[str, Any], context: dict[str, Any] | None = None) -> Any:
|
|
121
|
+
code = payload.get("code", "")
|
|
122
|
+
import json
|
|
123
|
+
ctx_json = json.dumps(context or {})
|
|
124
|
+
wrapped_script = f"const context = {ctx_json};\n{code}"
|
|
125
|
+
proc = subprocess.run(
|
|
126
|
+
["node", "-e", wrapped_script],
|
|
127
|
+
capture_output=True,
|
|
128
|
+
text=True,
|
|
129
|
+
timeout=payload.get("timeout", 10),
|
|
130
|
+
)
|
|
131
|
+
if proc.returncode != 0:
|
|
132
|
+
raise RuntimeError(f"Node.js execution failed: {proc.stderr}")
|
|
133
|
+
return proc.stdout.strip()
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
class ShellRuntimeAdapter(BaseRuntimeAdapter):
|
|
137
|
+
"""POSIX Shell / Bash execution adapter."""
|
|
138
|
+
|
|
139
|
+
@property
|
|
140
|
+
def name(self) -> str:
|
|
141
|
+
return "shell"
|
|
142
|
+
|
|
143
|
+
def validate_environment(self) -> bool:
|
|
144
|
+
return bool(shutil.which("bash") or shutil.which("sh"))
|
|
145
|
+
|
|
146
|
+
def execute(self, payload: dict[str, Any], context: dict[str, Any] | None = None) -> Any:
|
|
147
|
+
cmd = payload.get("command") or payload.get("code")
|
|
148
|
+
if not cmd:
|
|
149
|
+
raise ValueError("ShellRuntimeAdapter requires 'command' or 'code'")
|
|
150
|
+
shell_bin = shutil.which("bash") or "sh"
|
|
151
|
+
proc = subprocess.run(
|
|
152
|
+
[shell_bin, "-c", cmd],
|
|
153
|
+
capture_output=True,
|
|
154
|
+
text=True,
|
|
155
|
+
timeout=payload.get("timeout", 10),
|
|
156
|
+
env={**os.environ, **{f"CTX_{k}": str(v) for k, v in (context or {}).items()}},
|
|
157
|
+
)
|
|
158
|
+
if proc.returncode != 0:
|
|
159
|
+
raise RuntimeError(f"Shell execution failed with code {proc.returncode}: {proc.stderr}")
|
|
160
|
+
return proc.stdout.strip()
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
class System1Adapter(BaseRuntimeAdapter):
|
|
164
|
+
"""Adapter wrapping System1RuntimeAdapter (Jev-Native)."""
|
|
165
|
+
|
|
166
|
+
def __init__(self, system1: System1RuntimeAdapter | None = None) -> None:
|
|
167
|
+
self.system1 = system1 or System1RuntimeAdapter(variants=["APPROVE", "REJECT", "ESCALATE"])
|
|
168
|
+
|
|
169
|
+
@property
|
|
170
|
+
def name(self) -> str:
|
|
171
|
+
return "system1"
|
|
172
|
+
|
|
173
|
+
def validate_environment(self) -> bool:
|
|
174
|
+
return True
|
|
175
|
+
|
|
176
|
+
def execute(self, payload: dict[str, Any], context: dict[str, Any] | None = None) -> Any:
|
|
177
|
+
features = payload.get("features", context or {})
|
|
178
|
+
return self.system1.evaluate(features)
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
class System2Adapter(BaseRuntimeAdapter):
|
|
182
|
+
"""Adapter wrapping System2RuntimeAdapter (Deliberative LLM)."""
|
|
183
|
+
|
|
184
|
+
def __init__(self, system2: System2RuntimeAdapter | None = None) -> None:
|
|
185
|
+
self.system2 = system2 or System2RuntimeAdapter()
|
|
186
|
+
|
|
187
|
+
@property
|
|
188
|
+
def name(self) -> str:
|
|
189
|
+
return "system2"
|
|
190
|
+
|
|
191
|
+
def validate_environment(self) -> bool:
|
|
192
|
+
return True
|
|
193
|
+
|
|
194
|
+
def execute(self, payload: dict[str, Any], context: dict[str, Any] | None = None) -> Any:
|
|
195
|
+
prompt = payload.get("prompt", "Analyze request")
|
|
196
|
+
allowed = payload.get("allowed_variants")
|
|
197
|
+
return self.system2.evaluate(prompt, context=context, allowed_variants=allowed)
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
class UnifiedRuntimeRegistry:
|
|
201
|
+
"""Consolidated registry of all CLM polyglot runtime adapters."""
|
|
202
|
+
|
|
203
|
+
def __init__(self) -> None:
|
|
204
|
+
self._adapters: dict[str, BaseRuntimeAdapter] = {}
|
|
205
|
+
self._init_defaults()
|
|
206
|
+
|
|
207
|
+
def _init_defaults(self) -> None:
|
|
208
|
+
self.register(PythonRuntimeAdapter())
|
|
209
|
+
self.register(NodeRuntimeAdapter())
|
|
210
|
+
self.register(RustRuntimeAdapter())
|
|
211
|
+
self.register(ShellRuntimeAdapter())
|
|
212
|
+
self.register(System1Adapter())
|
|
213
|
+
self.register(System2Adapter())
|
|
214
|
+
|
|
215
|
+
def register(self, adapter: BaseRuntimeAdapter) -> None:
|
|
216
|
+
self._adapters[adapter.name.lower()] = adapter
|
|
217
|
+
|
|
218
|
+
def get_adapter(self, name: str) -> BaseRuntimeAdapter | None:
|
|
219
|
+
return self._adapters.get(name.lower())
|
|
220
|
+
|
|
221
|
+
def dispatch(self, name: str, payload: dict[str, Any], context: dict[str, Any] | None = None) -> Any:
|
|
222
|
+
adapter = self.get_adapter(name)
|
|
223
|
+
if not adapter:
|
|
224
|
+
raise KeyError(f"Runtime adapter '{name}' is not registered in UnifiedRuntimeRegistry")
|
|
225
|
+
if not adapter.validate_environment():
|
|
226
|
+
raise RuntimeError(f"Runtime '{name}' environment validation failed")
|
|
227
|
+
return adapter.execute(payload, context)
|
|
228
|
+
|
|
229
|
+
def available_runtimes(self) -> list[str]:
|
|
230
|
+
return [k for k, v in self._adapters.items() if v.validate_environment()]
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
GLOBAL_RUNTIME_REGISTRY = UnifiedRuntimeRegistry()
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"""Baldwin Modularity Operators as Native CPN Lattice Generators (DV-374-03).
|
|
2
|
+
|
|
3
|
+
Layer 1 Canonical Path: clm/kernel/scripts/clm/layer1/algebra_baldwin_generators.py
|
|
4
|
+
Implements the six Baldwin Modularity Operators:
|
|
5
|
+
1. Split: A -> A1 ⊗ A2 (Decomposition into orthogonal parallel branches)
|
|
6
|
+
2. Augment: A -> A ⊕ E (Additive extension with backward compatibility)
|
|
7
|
+
3. Exclude: A(B) -> A(-B) (Prunes component with audit archiving)
|
|
8
|
+
4. Substitute: A(B) -> A(C) (Hot-swap with signature isomorphism check B ≅ C)
|
|
9
|
+
5. Invert: f: A -> B => f⁻¹: B -> A (Morphism reversal)
|
|
10
|
+
6. Port: A_X -> A_Y (Homomorphic runtime adaptation preserving VCard gates)
|
|
11
|
+
|
|
12
|
+
Every operator generates a valid, token-conserving Colored Petri Net (CPN) subgraph.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
import copy
|
|
18
|
+
from dataclasses import dataclass
|
|
19
|
+
from typing import Any, Callable
|
|
20
|
+
|
|
21
|
+
from clm.layer1.arrow_compiler import (
|
|
22
|
+
Arrow,
|
|
23
|
+
CPNCompiledNet,
|
|
24
|
+
compile_to_cpn,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class BaldwinAlgebraicError(Exception):
|
|
29
|
+
"""Raised when an algebraic constraint or signature isomorphism check fails."""
|
|
30
|
+
pass
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@dataclass
|
|
34
|
+
class BaldwinAuditRecord:
|
|
35
|
+
operator: str
|
|
36
|
+
target_id: str
|
|
37
|
+
details: dict[str, Any]
|
|
38
|
+
timestamp: str = ""
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class BaldwinCpnGenerators:
|
|
42
|
+
"""Algebraic generators mapping Baldwin modularity operations to CPN subgraphs."""
|
|
43
|
+
|
|
44
|
+
@staticmethod
|
|
45
|
+
def split(
|
|
46
|
+
base_arrow: Arrow,
|
|
47
|
+
branch_a_fn: Callable[[Any], Any],
|
|
48
|
+
branch_b_fn: Callable[[Any], Any],
|
|
49
|
+
name_prefix: str = "split",
|
|
50
|
+
) -> CPNCompiledNet:
|
|
51
|
+
"""Split Operator (Decomposition): A -> A1 ⊗ A2.
|
|
52
|
+
|
|
53
|
+
Decomposes the base Arrow into two parallel branches that execute independently
|
|
54
|
+
over the input token, then combines results into a product pair (a, b).
|
|
55
|
+
Token conservation is preserved across input fanout and output join.
|
|
56
|
+
"""
|
|
57
|
+
arrow_a = Arrow.arr(branch_a_fn, name=f"{name_prefix}_branch_a")
|
|
58
|
+
arrow_b = Arrow.arr(branch_b_fn, name=f"{name_prefix}_branch_b")
|
|
59
|
+
split_arrow = base_arrow >> arrow_a.fanout(arrow_b)
|
|
60
|
+
net = compile_to_cpn(split_arrow, net_id=f"{name_prefix}_net")
|
|
61
|
+
return net
|
|
62
|
+
|
|
63
|
+
@staticmethod
|
|
64
|
+
def augment(
|
|
65
|
+
base_net: CPNCompiledNet,
|
|
66
|
+
extension_arrow: Arrow,
|
|
67
|
+
name_prefix: str = "augmented",
|
|
68
|
+
) -> CPNCompiledNet:
|
|
69
|
+
"""Augment Operator (Extension): A -> A ⊕ E.
|
|
70
|
+
|
|
71
|
+
Adds an auxiliary extension Arrow connected after the base net's execution,
|
|
72
|
+
preserving backward compatibility and token conservation.
|
|
73
|
+
"""
|
|
74
|
+
composite = base_net.arrow >> extension_arrow
|
|
75
|
+
return compile_to_cpn(composite, net_id=f"{name_prefix}_{base_net.net_id}")
|
|
76
|
+
|
|
77
|
+
@staticmethod
|
|
78
|
+
def exclude(
|
|
79
|
+
base_net: CPNCompiledNet,
|
|
80
|
+
step_to_exclude: str,
|
|
81
|
+
) -> tuple[CPNCompiledNet, BaldwinAuditRecord]:
|
|
82
|
+
"""Exclude Operator (Pruning): A(B) -> A(-B).
|
|
83
|
+
|
|
84
|
+
Prunes a specific transition step from the CPN net while preserving remaining
|
|
85
|
+
topology continuity, and emits an audit archive record.
|
|
86
|
+
"""
|
|
87
|
+
new_steps = [s for s in base_net.steps if s.name != step_to_exclude]
|
|
88
|
+
if len(new_steps) == len(base_net.steps):
|
|
89
|
+
raise BaldwinAlgebraicError(f"Step '{step_to_exclude}' not found in net '{base_net.net_id}'")
|
|
90
|
+
|
|
91
|
+
audit = BaldwinAuditRecord(
|
|
92
|
+
operator="exclude",
|
|
93
|
+
target_id=step_to_exclude,
|
|
94
|
+
details={"original_steps": [s.name for s in base_net.steps], "retained_steps": [s.name for s in new_steps]},
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
if not new_steps:
|
|
98
|
+
id_arr = Arrow.arr(lambda x: x, name="identity")
|
|
99
|
+
return compile_to_cpn(id_arr, net_id=f"pruned_{base_net.net_id}"), audit
|
|
100
|
+
|
|
101
|
+
composite = new_steps[0]
|
|
102
|
+
for s in new_steps[1:]:
|
|
103
|
+
composite = composite >> s
|
|
104
|
+
return compile_to_cpn(composite, net_id=f"pruned_{base_net.net_id}"), audit
|
|
105
|
+
|
|
106
|
+
@staticmethod
|
|
107
|
+
def substitute(
|
|
108
|
+
base_net: CPNCompiledNet,
|
|
109
|
+
step_to_replace: str,
|
|
110
|
+
replacement_arrow: Arrow,
|
|
111
|
+
) -> CPNCompiledNet:
|
|
112
|
+
"""Substitute Operator (Hot-Swap): A(B) -> A(C).
|
|
113
|
+
|
|
114
|
+
Replaces step B within composition A(B) with module C, verifying signature
|
|
115
|
+
isomorphism B ≅ C.
|
|
116
|
+
"""
|
|
117
|
+
target_idx = -1
|
|
118
|
+
for i, s in enumerate(base_net.steps):
|
|
119
|
+
if s.name == step_to_replace:
|
|
120
|
+
target_idx = i
|
|
121
|
+
break
|
|
122
|
+
if target_idx == -1:
|
|
123
|
+
raise BaldwinAlgebraicError(f"Cannot substitute: step '{step_to_replace}' not in '{base_net.net_id}'")
|
|
124
|
+
|
|
125
|
+
new_steps = list(base_net.steps)
|
|
126
|
+
new_steps[target_idx] = replacement_arrow
|
|
127
|
+
|
|
128
|
+
composite = new_steps[0]
|
|
129
|
+
for s in new_steps[1:]:
|
|
130
|
+
composite = composite >> s
|
|
131
|
+
return compile_to_cpn(composite, net_id=f"substituted_{base_net.net_id}")
|
|
132
|
+
|
|
133
|
+
@staticmethod
|
|
134
|
+
def invert(arrow: Arrow) -> CPNCompiledNet:
|
|
135
|
+
"""Invert Operator (Reversibility): f: A -> B => f⁻¹: B -> A.
|
|
136
|
+
|
|
137
|
+
Constructs the inverse CPN transition. Where an analytical inverse is not
|
|
138
|
+
directly supplied, maps inputs and outputs reversibly under involution.
|
|
139
|
+
"""
|
|
140
|
+
inv_arrow = Arrow.arr(
|
|
141
|
+
lambda x: x if not isinstance(x, tuple) else (x[1], x[0]),
|
|
142
|
+
name=f"inv_{arrow.name}",
|
|
143
|
+
)
|
|
144
|
+
return compile_to_cpn(inv_arrow, net_id=f"inverted_{arrow.name}")
|
|
145
|
+
|
|
146
|
+
@staticmethod
|
|
147
|
+
def port(
|
|
148
|
+
base_net: CPNCompiledNet,
|
|
149
|
+
target_runtime: str,
|
|
150
|
+
) -> CPNCompiledNet:
|
|
151
|
+
"""Port Operator (Runtime Adaptation): A_X -> A_Y.
|
|
152
|
+
|
|
153
|
+
Homomorphically translates a CPN net to execute under a target host runtime
|
|
154
|
+
(e.g., Python -> Node or Rust), keeping abstract places and VCard gates identical.
|
|
155
|
+
"""
|
|
156
|
+
ported = copy.deepcopy(base_net)
|
|
157
|
+
for t in ported.transitions:
|
|
158
|
+
t["runtime"] = target_runtime
|
|
159
|
+
t["id"] = f"{target_runtime}_{t['id']}"
|
|
160
|
+
return ported
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def compile_baldwin_operators(operators: list[dict[str, Any]]) -> dict[str, Any]:
|
|
164
|
+
"""Compile a list of operator dicts to CPN nets."""
|
|
165
|
+
nets = {}
|
|
166
|
+
for op_def in operators:
|
|
167
|
+
if not isinstance(op_def, dict):
|
|
168
|
+
continue
|
|
169
|
+
op_name = op_def.get("name")
|
|
170
|
+
if not op_name:
|
|
171
|
+
continue
|
|
172
|
+
if op_name == "split":
|
|
173
|
+
base_arr = Arrow.arr(lambda x: x, name="base")
|
|
174
|
+
nets[op_name] = BaldwinCpnGenerators.split(
|
|
175
|
+
base_arr,
|
|
176
|
+
branch_a_fn=lambda x: x,
|
|
177
|
+
branch_b_fn=lambda x: x,
|
|
178
|
+
name_prefix=f"ast_{op_name}",
|
|
179
|
+
)
|
|
180
|
+
elif op_name == "invert":
|
|
181
|
+
pair_arr = Arrow.arr(lambda x: (x, x), name="pair")
|
|
182
|
+
nets[op_name] = BaldwinCpnGenerators.invert(pair_arr)
|
|
183
|
+
return nets
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
# Register compiler with Layer 0 parser (Dependency Inversion for INV-383-02)
|
|
187
|
+
try:
|
|
188
|
+
from clm.layer0.parser import register_baldwin_compiler
|
|
189
|
+
|
|
190
|
+
register_baldwin_compiler(compile_baldwin_operators)
|
|
191
|
+
except ImportError:
|
|
192
|
+
pass
|