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.
Files changed (333) hide show
  1. clm/__init__.py +230 -0
  2. clm/__main__.py +25 -0
  3. clm/cross_cutting/__init__.py +50 -0
  4. clm/cross_cutting/_test_runner.py +36 -0
  5. clm/cross_cutting/async_utils.py +25 -0
  6. clm/cross_cutting/cel_builder.py +123 -0
  7. clm/cross_cutting/cel_converter.py +697 -0
  8. clm/cross_cutting/cel_engine.py +252 -0
  9. clm/cross_cutting/cel_ops.py +72 -0
  10. clm/cross_cutting/cel_ops_db.py +157 -0
  11. clm/cross_cutting/cel_ops_files.py +99 -0
  12. clm/cross_cutting/cel_ops_state.py +71 -0
  13. clm/cross_cutting/cel_ops_strings.py +64 -0
  14. clm/cross_cutting/cel_resolver.py +63 -0
  15. clm/cross_cutting/cel_slices.py +56 -0
  16. clm/cross_cutting/cel_store.py +330 -0
  17. clm/cross_cutting/clm_logger.py +140 -0
  18. clm/cross_cutting/config/__init__.py +155 -0
  19. clm/cross_cutting/config/config_constants.py +392 -0
  20. clm/cross_cutting/config/env_parameters.py +90 -0
  21. clm/cross_cutting/config/logging.py +378 -0
  22. clm/cross_cutting/config/settings.py +504 -0
  23. clm/cross_cutting/context.py +5 -0
  24. clm/cross_cutting/domain_models.py +55 -0
  25. clm/cross_cutting/domain_types.py +61 -0
  26. clm/cross_cutting/effects.py +67 -0
  27. clm/cross_cutting/errors.py +153 -0
  28. clm/cross_cutting/governance.py +331 -0
  29. clm/cross_cutting/guards.py +41 -0
  30. clm/cross_cutting/mcard.py +321 -0
  31. clm/cross_cutting/native.py +185 -0
  32. clm/cross_cutting/observability.py +289 -0
  33. clm/cross_cutting/pcard.py +434 -0
  34. clm/cross_cutting/registry.py +71 -0
  35. clm/cross_cutting/resources.py +84 -0
  36. clm/cross_cutting/secrets.py +44 -0
  37. clm/cross_cutting/subprocess_utils.py +118 -0
  38. clm/cross_cutting/telemetry.py +164 -0
  39. clm/cross_cutting/testing/__init__.py +8 -0
  40. clm/cross_cutting/testing/comparator.py +187 -0
  41. clm/cross_cutting/testing/datasets.py +87 -0
  42. clm/cross_cutting/timeutil.py +20 -0
  43. clm/cross_cutting/types/new_type_check.py +0 -0
  44. clm/cross_cutting/utils/__init__.py +1 -0
  45. clm/cross_cutting/utils/url_safety.py +50 -0
  46. clm/cross_cutting/vcard.py +560 -0
  47. clm/cross_cutting/writer.py +118 -0
  48. clm/layer0/README.md +50 -0
  49. clm/layer0/__init__.py +223 -0
  50. clm/layer0/algebra.py +60 -0
  51. clm/layer0/algebra_baldwin.py +133 -0
  52. clm/layer0/algebra_baldwin_generators.py +36 -0
  53. clm/layer0/algebra_equivalence.py +262 -0
  54. clm/layer0/algebra_ingest.py +306 -0
  55. clm/layer0/algebra_manifest_io.py +156 -0
  56. clm/layer0/assembler.py +481 -0
  57. clm/layer0/cel/__init__.py +23 -0
  58. clm/layer0/cel_eval.py +491 -0
  59. clm/layer0/codec.py +106 -0
  60. clm/layer0/context.py +122 -0
  61. clm/layer0/db.py +160 -0
  62. clm/layer0/exceptions.py +73 -0
  63. clm/layer0/fibration.py +106 -0
  64. clm/layer0/gates.py +50 -0
  65. clm/layer0/hash.py +80 -0
  66. clm/layer0/loader.py +826 -0
  67. clm/layer0/math_utils.py +163 -0
  68. clm/layer0/mcard.py +96 -0
  69. clm/layer0/model/__init__.py +0 -0
  70. clm/layer0/model/action.py +223 -0
  71. clm/layer0/model/card.py +280 -0
  72. clm/layer0/model/card_triad.py +427 -0
  73. clm/layer0/model/compatibility.py +60 -0
  74. clm/layer0/model/dictionary.py +46 -0
  75. clm/layer0/model/dots.py +331 -0
  76. clm/layer0/model/event_producer.py +88 -0
  77. clm/layer0/model/g_time.py +89 -0
  78. clm/layer0/model/handle.py +163 -0
  79. clm/layer0/model/hash/__init__.py +6 -0
  80. clm/layer0/model/hash/algorithms/__init__.py +3 -0
  81. clm/layer0/model/hash/algorithms/custom_hash.py +7 -0
  82. clm/layer0/model/hash/algorithms/local_sha256.py +178 -0
  83. clm/layer0/model/hash/constants.py +53 -0
  84. clm/layer0/model/hash/enums.py +60 -0
  85. clm/layer0/model/hash/validator.py +307 -0
  86. clm/layer0/model/interpreter.py +275 -0
  87. clm/layer0/model/pagination.py +45 -0
  88. clm/layer0/model/pcard.py +716 -0
  89. clm/layer0/model/schema.py +44 -0
  90. clm/layer0/model/utils/__init__.py +1 -0
  91. clm/layer0/model/utils/content_analyzer.py +152 -0
  92. clm/layer0/model/validators/__init__.py +1 -0
  93. clm/layer0/model/validators/base_validator.py +44 -0
  94. clm/layer0/model/validators/binary_validator.py +66 -0
  95. clm/layer0/model/validators/text_validator.py +82 -0
  96. clm/layer0/model/validators/validation_registry.py +49 -0
  97. clm/layer0/model/vcard.py +823 -0
  98. clm/layer0/model/vcard_ext/__init__.py +39 -0
  99. clm/layer0/model/vcard_ext/core.py +60 -0
  100. clm/layer0/model/vcard_ext/network.py +23 -0
  101. clm/layer0/model/vcard_ext/observability.py +63 -0
  102. clm/layer0/model/vcard_ext/storage.py +60 -0
  103. clm/layer0/model/vcard_ext/vendors.py +211 -0
  104. clm/layer0/model/vcard_sandwich.py +119 -0
  105. clm/layer0/model/vcard_vocabulary.py +463 -0
  106. clm/layer0/model/workflow.py +274 -0
  107. clm/layer0/narrative.py +431 -0
  108. clm/layer0/ontology/collection.py +125 -0
  109. clm/layer0/parser.py +429 -0
  110. clm/layer0/relations.py +73 -0
  111. clm/layer0/rule_evaluator.py +251 -0
  112. clm/layer0/schema/__init__.py +38 -0
  113. clm/layer0/schema/ddl.py +97 -0
  114. clm/layer0/templates/abstract.yaml +99 -0
  115. clm/layer0/templates/balanced.yaml +253 -0
  116. clm/layer0/templates/concrete.yaml +172 -0
  117. clm/layer0/type_registry.py +223 -0
  118. clm/layer0/types.py +204 -0
  119. clm/layer0/utils.py +886 -0
  120. clm/layer0/verifier_core.py +262 -0
  121. clm/layer1/__init__.py +31 -0
  122. clm/layer1/action_dispatcher.py +275 -0
  123. clm/layer1/adapter_registry.py +233 -0
  124. clm/layer1/algebra_baldwin_generators.py +192 -0
  125. clm/layer1/arrow_compiler.py +525 -0
  126. clm/layer1/batch_processor.py +152 -0
  127. clm/layer1/cel/__init__.py +27 -0
  128. clm/layer1/cel/builder.py +173 -0
  129. clm/layer1/engine.py +759 -0
  130. clm/layer1/engine_async.py +89 -0
  131. clm/layer1/eval_callback.py +49 -0
  132. clm/layer1/gate_composer.py +229 -0
  133. clm/layer1/hoare_sandwich.py +298 -0
  134. clm/layer1/identity_guard.py +348 -0
  135. clm/layer1/matrix.py +138 -0
  136. clm/layer1/neural_runtime.py +221 -0
  137. clm/layer1/operations/__init__.py +123 -0
  138. clm/layer1/operations/augment.py +156 -0
  139. clm/layer1/operations/base.py +109 -0
  140. clm/layer1/operations/builtins.py +338 -0
  141. clm/layer1/operations/dispatch.py +144 -0
  142. clm/layer1/operations/exclude.py +107 -0
  143. clm/layer1/operations/handle.py +197 -0
  144. clm/layer1/operations/identity.py +139 -0
  145. clm/layer1/operations/invert.py +66 -0
  146. clm/layer1/operations/loader.py +116 -0
  147. clm/layer1/operations/manipulators/__init__.py +23 -0
  148. clm/layer1/operations/manipulators/document.py +211 -0
  149. clm/layer1/operations/manipulators/media.py +134 -0
  150. clm/layer1/operations/manipulators/structured.py +159 -0
  151. clm/layer1/operations/manipulators/tabular.py +334 -0
  152. clm/layer1/operations/port.py +65 -0
  153. clm/layer1/operations/services.py +529 -0
  154. clm/layer1/operations/split.py +117 -0
  155. clm/layer1/operations/substitute.py +75 -0
  156. clm/layer1/petri.py +1052 -0
  157. clm/layer1/pocketflow_orchestrator.py +408 -0
  158. clm/layer1/pocketflow_scheduler.py +519 -0
  159. clm/layer1/protocols.py +197 -0
  160. clm/layer1/runtime_adapter.py +718 -0
  161. clm/layer1/runtimes/__init__.py +71 -0
  162. clm/layer1/runtimes/_generated_assertions.py +125 -0
  163. clm/layer1/runtimes/_generated_types.py +42 -0
  164. clm/layer1/runtimes/base.py +265 -0
  165. clm/layer1/runtimes/binary.py +101 -0
  166. clm/layer1/runtimes/factory.py +203 -0
  167. clm/layer1/runtimes/javascript.py +321 -0
  168. clm/layer1/runtimes/javascript_runtime.js +33 -0
  169. clm/layer1/runtimes/js_scripts/isomorphism.mjs +22 -0
  170. clm/layer1/runtimes/js_scripts/loader.mjs +52 -0
  171. clm/layer1/runtimes/lambda_calc.py +126 -0
  172. clm/layer1/runtimes/python.py +288 -0
  173. clm/layer1/runtimes/python_runtime.py +41 -0
  174. clm/layer1/runtimes/script.py +114 -0
  175. clm/layer1/sandbox.py +334 -0
  176. clm/layer1/savepoint_guard.py +136 -0
  177. clm/layer1/sparse_net.py +122 -0
  178. clm/layer1/spec_tester.py +165 -0
  179. clm/layer1/store.py +295 -0
  180. clm/layer1/test_runner.py +498 -0
  181. clm/layer1/type_inspector.py +166 -0
  182. clm/layer1/verifier.py +772 -0
  183. clm/layer1/vm.py +91 -0
  184. clm/layer2/__init__.py +78 -0
  185. clm/layer2/card_collection.py +678 -0
  186. clm/layer2/classifier.py +479 -0
  187. clm/layer2/engine/__init__.py +1 -0
  188. clm/layer2/engine/abstract_sql_engine.py +320 -0
  189. clm/layer2/engine/base.py +193 -0
  190. clm/layer2/engine/duckdb_engine.py +576 -0
  191. clm/layer2/engine/sqlite_engine.py +518 -0
  192. clm/layer2/fiber/__init__.py +31 -0
  193. clm/layer2/fiber/context.py +89 -0
  194. clm/layer2/fiber/disposable.py +163 -0
  195. clm/layer2/fiber/fiber.py +125 -0
  196. clm/layer2/fiber/hoare.py +191 -0
  197. clm/layer2/file_io.py +376 -0
  198. clm/layer2/file_registrar.py +77 -0
  199. clm/layer2/ingest.py +202 -0
  200. clm/layer2/lineage.py +322 -0
  201. clm/layer2/mcard_fs.py +262 -0
  202. clm/layer2/merkle.py +11 -0
  203. clm/layer2/mime.py +244 -0
  204. clm/layer2/mime_detector.py +245 -0
  205. clm/layer2/private_collection.py +118 -0
  206. clm/layer2/shared_store.py +11 -0
  207. clm/layer2/storage/__init__.py +190 -0
  208. clm/layer2/storage/db_bitemporal.py +141 -0
  209. clm/layer2/storage/db_driver.py +331 -0
  210. clm/layer2/storage/db_hyperlinks.py +214 -0
  211. clm/layer2/storage/db_pool.py +139 -0
  212. clm/layer2/storage/db_repository.py +229 -0
  213. clm/layer2/storage/savepoint.py +78 -0
  214. clm/layer2/storage/sqlite_wal.py +74 -0
  215. clm/layer2/tridb.py +245 -0
  216. clm/layer2/vcard_receipt.py +71 -0
  217. clm/layer2/vfs.py +17 -0
  218. clm/layer3/__init__.py +141 -0
  219. clm/layer3/agency/__init__.py +19 -0
  220. clm/layer3/agency/config.py +220 -0
  221. clm/layer3/agency/providers/__init__.py +15 -0
  222. clm/layer3/agency/providers/base.py +91 -0
  223. clm/layer3/agency/providers/mlc_llm.py +169 -0
  224. clm/layer3/agency/providers/ollama.py +203 -0
  225. clm/layer3/agency/router.py +71 -0
  226. clm/layer3/agency/runtime.py +524 -0
  227. clm/layer3/gateway.py +353 -0
  228. clm/layer3/open_interpreter_adapter.py +159 -0
  229. clm/layer3/rag/__init__.py +70 -0
  230. clm/layer3/rag/cli.py +228 -0
  231. clm/layer3/rag/config.py +153 -0
  232. clm/layer3/rag/embeddings/__init__.py +16 -0
  233. clm/layer3/rag/embeddings/base.py +79 -0
  234. clm/layer3/rag/embeddings/ollama.py +211 -0
  235. clm/layer3/rag/embeddings/vision.py +290 -0
  236. clm/layer3/rag/engine.py +276 -0
  237. clm/layer3/rag/graph/__init__.py +22 -0
  238. clm/layer3/rag/graph/community.py +198 -0
  239. clm/layer3/rag/graph/engine.py +433 -0
  240. clm/layer3/rag/graph/extractor.py +255 -0
  241. clm/layer3/rag/graph/schema.py +115 -0
  242. clm/layer3/rag/graph/store.py +641 -0
  243. clm/layer3/rag/indexer.py +333 -0
  244. clm/layer3/rag/llm_providers.json +52 -0
  245. clm/layer3/rag/semantic_versioning.py +313 -0
  246. clm/layer3/rag/vector/__init__.py +28 -0
  247. clm/layer3/rag/vector/handle_vector_store.py +749 -0
  248. clm/layer3/rag/vector/schema.py +151 -0
  249. clm/layer3/rag/vector/store.py +632 -0
  250. clm/layer3/reticulum/__init__.py +55 -0
  251. clm/layer3/reticulum/bridge.py +74 -0
  252. clm/layer3/reticulum/daemon.py +88 -0
  253. clm/layer3/reticulum/discovery.py +164 -0
  254. clm/layer3/reticulum/identity.py +107 -0
  255. clm/layer3/reticulum/media.py +148 -0
  256. clm/layer3/reticulum/transport.py +133 -0
  257. clm/layer3/satori/__init__.py +209 -0
  258. clm/layer3/satori/alpha_conversion.py +168 -0
  259. clm/layer3/satori/beta_reduction.py +359 -0
  260. clm/layer3/satori/continuation.py +38 -0
  261. clm/layer3/satori/eta_conversion.py +205 -0
  262. clm/layer3/satori/free_variables.py +163 -0
  263. clm/layer3/satori/io_effects.py +370 -0
  264. clm/layer3/satori/lambda_runtime.py +726 -0
  265. clm/layer3/satori/lambda_term.py +230 -0
  266. clm/layer3/satori/sheaf_audit.py +261 -0
  267. clm/layer3/satori/speech_act.py +279 -0
  268. clm/layer4/README.md +9 -0
  269. clm/layer4/__init__.py +67 -0
  270. clm/layer4/_sovereign_executor.py +580 -0
  271. clm/layer4/action_commands.py +719 -0
  272. clm/layer4/api.py +236 -0
  273. clm/layer4/bootstrap/__init__.py +13 -0
  274. clm/layer4/bootstrap/bootstrapper.py +118 -0
  275. clm/layer4/bootstrap/cleanup.py +44 -0
  276. clm/layer4/bootstrap/clm_hooks.py +49 -0
  277. clm/layer4/bootstrap/genesis.py +77 -0
  278. clm/layer4/bootstrap/injection.py +125 -0
  279. clm/layer4/cli.py +549 -0
  280. clm/layer4/collection_manager.py +553 -0
  281. clm/layer4/commands/__init__.py +81 -0
  282. clm/layer4/commands/action_cmd.py +42 -0
  283. clm/layer4/commands/check_cmd.py +82 -0
  284. clm/layer4/commands/envelope.py +73 -0
  285. clm/layer4/commands/evaluate_cmd.py +224 -0
  286. clm/layer4/commands/mcard_cmd.py +24 -0
  287. clm/layer4/commands/petri_cmd.py +92 -0
  288. clm/layer4/commands/tridb_cmd.py +319 -0
  289. clm/layer4/commands/version_cmd.py +27 -0
  290. clm/layer4/diff_commands.py +167 -0
  291. clm/layer4/eoa_sponsor.py +232 -0
  292. clm/layer4/events.py +69 -0
  293. clm/layer4/flux_gateway.py +133 -0
  294. clm/layer4/gateway.py +91 -0
  295. clm/layer4/loader.py +307 -0
  296. clm/layer4/mcard_commands.py +166 -0
  297. clm/layer4/membrane.py +273 -0
  298. clm/layer4/navigation.py +50 -0
  299. clm/layer4/protocol/protocol_entry_python.py +108 -0
  300. clm/layer4/protocol/python_sync.py +126 -0
  301. clm/layer4/runner.py +150 -0
  302. clm/layer4/satori.py +262 -0
  303. clm/layer4/server/python_sync_client.py +150 -0
  304. clm/layer4/server/python_sync_server.py +139 -0
  305. clm/layer4/server/service_api.py +315 -0
  306. clm/layer4/server/start_servers.py +107 -0
  307. clm/layer4/server/stop_servers.py +24 -0
  308. clm/layer4/simulated_optimization_fix.py +0 -0
  309. clm/layer4/storage.py +463 -0
  310. clm/layer4/tridb_admin.py +268 -0
  311. clm/layer4/websocket/test_ws_client.py +104 -0
  312. clm/layer4/websocket/test_ws_server.py +138 -0
  313. clm/layer4/websocket/ws_server_local.py +160 -0
  314. clm/layer5/__init__.py +51 -0
  315. clm/layer5/async_batch_writer.py +133 -0
  316. clm/layer5/learning.py +276 -0
  317. clm/layer5/telemetry_hook.py +107 -0
  318. clm/layer5/type_lattice.py +238 -0
  319. clm/py.typed +0 -0
  320. clm/schemas/__init__.py +652 -0
  321. clm/schemas/abstract_face_schema.yaml +77 -0
  322. clm/schemas/cel_schema.yaml +416 -0
  323. clm/schemas/lifecycle/__init__.py +45 -0
  324. clm/schemas/lifecycle/models.py +123 -0
  325. clm/schemas/lifecycle/service.py +364 -0
  326. clm/schemas/mcard_schema.sql +192 -0
  327. clm/schemas/mcard_vector_schema.sql +283 -0
  328. clm/schemas/mlp-context-v1.json +91 -0
  329. clm_kernel-0.0.0.dist-info/METADATA +121 -0
  330. clm_kernel-0.0.0.dist-info/RECORD +333 -0
  331. clm_kernel-0.0.0.dist-info/WHEEL +4 -0
  332. clm_kernel-0.0.0.dist-info/entry_points.txt +3 -0
  333. 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