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,39 @@
1
+ """VCard Extension Types - Resource type definitions as pure data.
2
+
3
+ This package provides modular resource type definitions that are loaded
4
+ automatically into the VCard vocabulary. Each file exports resource type
5
+ definitions as dictionaries or ResourceType dataclasses.
6
+
7
+ Adding new resource types:
8
+ 1. Create a new .py file in this directory
9
+ 2. Define RESOURCE_TYPES dict with your type definitions
10
+ 3. The types are auto-registered on import
11
+
12
+ Example:
13
+ # my_custom_types.py
14
+ RESOURCE_TYPES = {
15
+ "mytype": {
16
+ "name": "mytype",
17
+ "category": "custom",
18
+ "uri_template": "mytype://{identifier}",
19
+ "hash_template": "mytype:{identifier}",
20
+ "default_options": {"required": True}
21
+ }
22
+ }
23
+ """
24
+
25
+ from .core import RESOURCE_REGISTRY, ResourceCategory, ResourceType
26
+ from .network import RESOURCE_TYPES as NETWORK_TYPES
27
+ from .observability import RESOURCE_TYPES as OBSERVABILITY_TYPES
28
+ from .storage import RESOURCE_TYPES as STORAGE_TYPES
29
+ from .vendors import RESOURCE_TYPES as VENDOR_TYPES
30
+
31
+ # Auto-register all extension types
32
+ for types_dict in [STORAGE_TYPES, NETWORK_TYPES, OBSERVABILITY_TYPES, VENDOR_TYPES]:
33
+ for name, type_def in types_dict.items():
34
+ if isinstance(type_def, dict):
35
+ RESOURCE_REGISTRY[name] = ResourceType(**type_def)
36
+ else:
37
+ RESOURCE_REGISTRY[name] = type_def
38
+
39
+ __all__ = ["RESOURCE_REGISTRY", "ResourceType", "ResourceCategory"]
@@ -0,0 +1,60 @@
1
+ """Core resource types and base registry."""
2
+
3
+ from dataclasses import dataclass, field
4
+ from enum import Enum
5
+ from typing import Any
6
+
7
+
8
+ class ResourceCategory(Enum):
9
+ """Categories of external resources (side effects)."""
10
+
11
+ ENVIRONMENT = "env"
12
+ FILESYSTEM = "file"
13
+ STORAGE = "storage"
14
+ NETWORK = "network"
15
+ OBSERVABILITY = "observability"
16
+ COMPUTE = "compute"
17
+ RANDOM = "random"
18
+
19
+
20
+ @dataclass
21
+ class ResourceType:
22
+ """Definition of a resource type in the registry."""
23
+
24
+ name: str # Type identifier (e.g., "env", "sqlite", "grafana")
25
+ category: str # Category string or ResourceCategory value
26
+ uri_template: str # URI template with {placeholders}
27
+ hash_template: str # Hash content template
28
+ default_options: dict[str, Any] = field(default_factory=dict)
29
+ arg_names: list = field(default_factory=list) # Positional argument names
30
+
31
+
32
+ # Core resource types that are always available
33
+ RESOURCE_REGISTRY: dict[str, ResourceType] = {
34
+ # Environment
35
+ "env": ResourceType(
36
+ name="env",
37
+ category=ResourceCategory.ENVIRONMENT.value,
38
+ uri_template="env://{name}",
39
+ hash_template="env:{name}:{required}:{secret}",
40
+ default_options={"required": True, "secret": False},
41
+ arg_names=["name"],
42
+ ),
43
+ # Filesystem
44
+ "file": ResourceType(
45
+ name="file",
46
+ category=ResourceCategory.FILESYSTEM.value,
47
+ uri_template="file://{path}",
48
+ hash_template="file:{path}",
49
+ default_options={"mode": "read", "required": True},
50
+ arg_names=["path"],
51
+ ),
52
+ "directory": ResourceType(
53
+ name="directory",
54
+ category=ResourceCategory.FILESYSTEM.value,
55
+ uri_template="file://{path}/",
56
+ hash_template="dir:{path}",
57
+ default_options={"recursive": True},
58
+ arg_names=["path"],
59
+ ),
60
+ }
@@ -0,0 +1,23 @@
1
+ """Network resource types - APIs and webhooks."""
2
+
3
+ from .core import ResourceCategory, ResourceType
4
+
5
+ # Network resource type definitions as pure data
6
+ RESOURCE_TYPES = {
7
+ "api": ResourceType(
8
+ name="api",
9
+ category=ResourceCategory.NETWORK.value,
10
+ uri_template="{endpoint}",
11
+ hash_template="api:{method}:{endpoint}",
12
+ default_options={"type": "api", "method": "GET", "_preserve_uri": True},
13
+ arg_names=["endpoint"],
14
+ ),
15
+ "webhook": ResourceType(
16
+ name="webhook",
17
+ category=ResourceCategory.NETWORK.value,
18
+ uri_template="{endpoint}",
19
+ hash_template="webhook:{endpoint}",
20
+ default_options={"type": "webhook", "_preserve_uri": True},
21
+ arg_names=["endpoint"],
22
+ ),
23
+ }
@@ -0,0 +1,63 @@
1
+ """Observability resource types - Grafana LGTM Stack."""
2
+
3
+ from .core import ResourceType
4
+
5
+ # Observability resource type definitions as pure data
6
+ RESOURCE_TYPES = {
7
+ "grafana": ResourceType(
8
+ name="grafana",
9
+ category="observability",
10
+ uri_template="grafana://{endpoint}",
11
+ hash_template="grafana:{endpoint}:{org_id}:{dashboard_uid}",
12
+ default_options={"type": "grafana", "org_id": None, "dashboard_uid": None},
13
+ arg_names=["endpoint"],
14
+ ),
15
+ "prometheus": ResourceType(
16
+ name="prometheus",
17
+ category="observability",
18
+ uri_template="prometheus://{endpoint}",
19
+ hash_template="prometheus:{endpoint}:{job_name}",
20
+ default_options={"type": "prometheus", "scrape_interval": 15},
21
+ arg_names=["endpoint"],
22
+ ),
23
+ "loki": ResourceType(
24
+ name="loki",
25
+ category="observability",
26
+ uri_template="loki://{endpoint}",
27
+ hash_template="loki:{endpoint}:{tenant_id}",
28
+ default_options={"type": "loki", "labels": {}},
29
+ arg_names=["endpoint"],
30
+ ),
31
+ "tempo": ResourceType(
32
+ name="tempo",
33
+ category="observability",
34
+ uri_template="tempo://{endpoint}",
35
+ hash_template="tempo:{endpoint}:{service_name}",
36
+ default_options={"type": "tempo", "sampling_rate": 1.0},
37
+ arg_names=["endpoint"],
38
+ ),
39
+ "faro": ResourceType(
40
+ name="faro",
41
+ category="observability",
42
+ uri_template="faro://{collector_url}",
43
+ hash_template="faro:{collector_url}:{app_name}:{environment}",
44
+ default_options={
45
+ "type": "faro",
46
+ "environment": "production",
47
+ "features": ["console", "errors", "web_vitals", "sessions"],
48
+ },
49
+ arg_names=["collector_url", "app_name"],
50
+ ),
51
+ "otlp": ResourceType(
52
+ name="otlp",
53
+ category="observability",
54
+ uri_template="otlp://{endpoint}",
55
+ hash_template="otlp:{endpoint}:{protocol}:{service_name}",
56
+ default_options={
57
+ "type": "otlp",
58
+ "protocol": "grpc",
59
+ "signals": ["traces", "metrics", "logs"],
60
+ },
61
+ arg_names=["endpoint"],
62
+ ),
63
+ }
@@ -0,0 +1,60 @@
1
+ """Storage resource types - databases and object storage."""
2
+
3
+ from .core import ResourceCategory, ResourceType
4
+
5
+ # Storage resource type definitions as pure data
6
+ RESOURCE_TYPES = {
7
+ "sqlite": ResourceType(
8
+ name="sqlite",
9
+ category=ResourceCategory.STORAGE.value,
10
+ uri_template="sqlite://{path}",
11
+ hash_template="sqlite:{path}",
12
+ default_options={"engine": "sqlite", "required": True},
13
+ arg_names=["path"],
14
+ ),
15
+ "postgres": ResourceType(
16
+ name="postgres",
17
+ category=ResourceCategory.STORAGE.value,
18
+ uri_template="postgres://{connection}",
19
+ hash_template="postgres:{connection}",
20
+ default_options={"engine": "postgresql", "required": True},
21
+ arg_names=["connection"],
22
+ ),
23
+ "s3": ResourceType(
24
+ name="s3",
25
+ category=ResourceCategory.STORAGE.value,
26
+ uri_template="s3://{bucket}/{key}",
27
+ hash_template="s3:{bucket}/{key}",
28
+ default_options={"engine": "s3", "region": "us-east-1"},
29
+ arg_names=["bucket", "key"],
30
+ ),
31
+ # LiteFS: Distributed SQLite replication (Fly.io)
32
+ "litefs": ResourceType(
33
+ name="litefs",
34
+ category=ResourceCategory.STORAGE.value,
35
+ uri_template="litefs://{path}",
36
+ hash_template="litefs:{path}:{primary}",
37
+ default_options={
38
+ "engine": "litefs",
39
+ "primary": None,
40
+ "lease_key": None,
41
+ "required": True,
42
+ },
43
+ arg_names=["path"],
44
+ ),
45
+ # Turso: Edge SQLite (libSQL)
46
+ "turso": ResourceType(
47
+ name="turso",
48
+ category=ResourceCategory.STORAGE.value,
49
+ uri_template="libsql://{database}.turso.io",
50
+ hash_template="turso:{database}:{group}",
51
+ default_options={
52
+ "engine": "turso",
53
+ "group": "default",
54
+ "auth_token_env_var": "TURSO_AUTH_TOKEN",
55
+ "sync_url": None,
56
+ "required": True,
57
+ },
58
+ arg_names=["database"],
59
+ ),
60
+ }
@@ -0,0 +1,211 @@
1
+ """Vendor-provisioned SaaS resource types.
2
+
3
+ Third-party services organized by category:
4
+ - Identity/Auth: Google, GitHub, Meta/Facebook
5
+ - Messaging: WhatsApp, Line, WeChat, Telegram, Slack
6
+ - Collaboration: Trello, Miro, Figma, LinkedIn
7
+ """
8
+
9
+ from .core import ResourceType
10
+
11
+ # Vendor/SaaS resource type definitions
12
+ RESOURCE_TYPES = {
13
+ # =========================================================================
14
+ # Identity & Authentication Providers
15
+ # =========================================================================
16
+ "google": ResourceType(
17
+ name="google",
18
+ category="vendor",
19
+ uri_template="google://{service}/{resource}",
20
+ hash_template="google:{service}:{resource}:{project_id}",
21
+ default_options={
22
+ "type": "google",
23
+ "service": "oauth", # oauth, drive, sheets, calendar, etc.
24
+ "auth_env_var": "GOOGLE_CLIENT_ID",
25
+ "required": True,
26
+ },
27
+ arg_names=["service", "resource"],
28
+ ),
29
+ "github": ResourceType(
30
+ name="github",
31
+ category="vendor",
32
+ uri_template="github://{owner}/{repo}",
33
+ hash_template="github:{owner}:{repo}:{ref}",
34
+ default_options={
35
+ "type": "github",
36
+ "ref": "main",
37
+ "auth_env_var": "GITHUB_TOKEN",
38
+ "required": True,
39
+ },
40
+ arg_names=["owner", "repo"],
41
+ ),
42
+ "meta": ResourceType(
43
+ name="meta",
44
+ category="vendor",
45
+ uri_template="meta://{app_id}/{service}",
46
+ hash_template="meta:{app_id}:{service}",
47
+ default_options={
48
+ "type": "meta",
49
+ "service": "graph", # graph, login, messenger, instagram
50
+ "auth_env_var": "META_APP_SECRET",
51
+ "required": True,
52
+ },
53
+ arg_names=["app_id", "service"],
54
+ ),
55
+ # =========================================================================
56
+ # Messaging Platforms
57
+ # =========================================================================
58
+ "whatsapp": ResourceType(
59
+ name="whatsapp",
60
+ category="vendor",
61
+ uri_template="whatsapp://{phone_number_id}",
62
+ hash_template="whatsapp:{phone_number_id}:{business_id}",
63
+ default_options={
64
+ "type": "whatsapp",
65
+ "api_version": "v18.0",
66
+ "auth_env_var": "WHATSAPP_TOKEN",
67
+ "required": True,
68
+ },
69
+ arg_names=["phone_number_id"],
70
+ ),
71
+ "telegram": ResourceType(
72
+ name="telegram",
73
+ category="vendor",
74
+ uri_template="telegram://{bot_id}",
75
+ hash_template="telegram:{bot_id}",
76
+ default_options={
77
+ "type": "telegram",
78
+ "auth_env_var": "TELEGRAM_BOT_TOKEN",
79
+ "required": True,
80
+ },
81
+ arg_names=["bot_id"],
82
+ ),
83
+ "line": ResourceType(
84
+ name="line",
85
+ category="vendor",
86
+ uri_template="line://{channel_id}",
87
+ hash_template="line:{channel_id}",
88
+ default_options={
89
+ "type": "line",
90
+ "auth_env_var": "LINE_CHANNEL_ACCESS_TOKEN",
91
+ "required": True,
92
+ },
93
+ arg_names=["channel_id"],
94
+ ),
95
+ "wechat": ResourceType(
96
+ name="wechat",
97
+ category="vendor",
98
+ uri_template="wechat://{app_id}",
99
+ hash_template="wechat:{app_id}",
100
+ default_options={
101
+ "type": "wechat",
102
+ "auth_env_var": "WECHAT_APP_SECRET",
103
+ "required": True,
104
+ },
105
+ arg_names=["app_id"],
106
+ ),
107
+ "slack": ResourceType(
108
+ name="slack",
109
+ category="vendor",
110
+ uri_template="slack://{workspace}/{channel}",
111
+ hash_template="slack:{workspace}:{channel}",
112
+ default_options={
113
+ "type": "slack",
114
+ "auth_env_var": "SLACK_BOT_TOKEN",
115
+ "required": True,
116
+ },
117
+ arg_names=["workspace", "channel"],
118
+ ),
119
+ # =========================================================================
120
+ # Collaboration & Productivity
121
+ # =========================================================================
122
+ "trello": ResourceType(
123
+ name="trello",
124
+ category="vendor",
125
+ uri_template="trello://{board_id}",
126
+ hash_template="trello:{board_id}",
127
+ default_options={
128
+ "type": "trello",
129
+ "auth_env_var": "TRELLO_API_KEY",
130
+ "required": True,
131
+ },
132
+ arg_names=["board_id"],
133
+ ),
134
+ "miro": ResourceType(
135
+ name="miro",
136
+ category="vendor",
137
+ uri_template="miro://{board_id}",
138
+ hash_template="miro:{board_id}:{team_id}",
139
+ default_options={
140
+ "type": "miro",
141
+ "auth_env_var": "MIRO_ACCESS_TOKEN",
142
+ "required": True,
143
+ },
144
+ arg_names=["board_id"],
145
+ ),
146
+ "figma": ResourceType(
147
+ name="figma",
148
+ category="vendor",
149
+ uri_template="figma://{file_key}",
150
+ hash_template="figma:{file_key}:{node_id}",
151
+ default_options={
152
+ "type": "figma",
153
+ "node_id": None,
154
+ "auth_env_var": "FIGMA_ACCESS_TOKEN",
155
+ "required": True,
156
+ },
157
+ arg_names=["file_key"],
158
+ ),
159
+ "linkedin": ResourceType(
160
+ name="linkedin",
161
+ category="vendor",
162
+ uri_template="linkedin://{organization_id}",
163
+ hash_template="linkedin:{organization_id}",
164
+ default_options={
165
+ "type": "linkedin",
166
+ "auth_env_var": "LINKEDIN_ACCESS_TOKEN",
167
+ "required": True,
168
+ },
169
+ arg_names=["organization_id"],
170
+ ),
171
+ # =========================================================================
172
+ # Cloud Providers (Infrastructure)
173
+ # =========================================================================
174
+ "aws": ResourceType(
175
+ name="aws",
176
+ category="vendor",
177
+ uri_template="aws://{service}/{resource}",
178
+ hash_template="aws:{service}:{resource}:{region}",
179
+ default_options={
180
+ "type": "aws",
181
+ "region": "us-east-1",
182
+ "auth_env_var": "AWS_ACCESS_KEY_ID",
183
+ "required": True,
184
+ },
185
+ arg_names=["service", "resource"],
186
+ ),
187
+ "azure": ResourceType(
188
+ name="azure",
189
+ category="vendor",
190
+ uri_template="azure://{subscription}/{resource_group}/{resource}",
191
+ hash_template="azure:{subscription}:{resource_group}:{resource}",
192
+ default_options={
193
+ "type": "azure",
194
+ "auth_env_var": "AZURE_CLIENT_ID",
195
+ "required": True,
196
+ },
197
+ arg_names=["subscription", "resource_group", "resource"],
198
+ ),
199
+ "gcp": ResourceType(
200
+ name="gcp",
201
+ category="vendor",
202
+ uri_template="gcp://{project}/{service}/{resource}",
203
+ hash_template="gcp:{project}:{service}:{resource}",
204
+ default_options={
205
+ "type": "gcp",
206
+ "auth_env_var": "GOOGLE_APPLICATION_CREDENTIALS",
207
+ "required": True,
208
+ },
209
+ arg_names=["project", "service", "resource"],
210
+ ),
211
+ }
@@ -0,0 +1,119 @@
1
+ """VCardSandwich builder for creating Verification VCard proofs."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ from datetime import datetime, timezone
7
+ from typing import Any
8
+
9
+ from clm.layer0.model.card import MCard
10
+ from clm.layer0.model.vcard import VCard
11
+
12
+
13
+ class VCardSandwich:
14
+ """Builder methods for creating Verification VCard proofs (VCard Sandwich)."""
15
+
16
+ @staticmethod
17
+ def witness_precondition(
18
+ input_mcard: MCard,
19
+ hash_function: str = "sha256",
20
+ pcard_hash: str = "",
21
+ verification_evidence: dict[str, Any] | None = None,
22
+ chl_temporal: dict[str, Any] | None = None,
23
+ ) -> VCard:
24
+ verification: dict[str, Any] = {
25
+ "phase": "prep",
26
+ "input_hash": input_mcard.hash,
27
+ "timestamp": datetime.now(timezone.utc).isoformat(),
28
+ "status": "accepted",
29
+ }
30
+ if pcard_hash:
31
+ verification["pcard_hash"] = pcard_hash
32
+ if verification_evidence:
33
+ verification["clm_verification"] = verification_evidence
34
+
35
+ content: dict[str, Any] = {
36
+ "vcard": {
37
+ "version": "1.0",
38
+ "type": "precondition-witness",
39
+ "identity": {"subject_did": "did:ptr:system", "controller_pubkeys": []},
40
+ "verification": verification,
41
+ "gatekeeper": {"capabilities": []},
42
+ "external_refs": [],
43
+ }
44
+ }
45
+ if chl_temporal:
46
+ content["vcard"]["chl_temporal"] = chl_temporal
47
+ return VCard(json.dumps(content, sort_keys=True), hash_function=hash_function)
48
+
49
+ @staticmethod
50
+ def witness_postcondition(
51
+ output: Any,
52
+ pcard_hash: str = "",
53
+ hash_function: str = "sha256",
54
+ alignment_score: float | None = None,
55
+ invariants_preserved: bool = True,
56
+ execution_telemetry: dict[str, Any] | None = None,
57
+ chl_temporal: dict[str, Any] | None = None,
58
+ ) -> VCard:
59
+ if isinstance(output, MCard):
60
+ output_repr = output.hash
61
+ elif isinstance(output, dict):
62
+ output_repr = json.dumps(output, sort_keys=True, default=str)
63
+ else:
64
+ output_repr = str(output)
65
+
66
+ verification: dict[str, Any] = {
67
+ "phase": "post",
68
+ "pcard_hash": pcard_hash,
69
+ "output_repr": output_repr[:512],
70
+ "timestamp": datetime.now(timezone.utc).isoformat(),
71
+ "status": "accepted",
72
+ }
73
+ if alignment_score is not None:
74
+ verification["correctness_measures"] = {
75
+ "alignment_score": alignment_score,
76
+ "invariants_preserved": invariants_preserved,
77
+ "alignment_threshold": 0.85,
78
+ }
79
+
80
+ content: dict[str, Any] = {
81
+ "vcard": {
82
+ "version": "1.0",
83
+ "type": "postcondition-witness",
84
+ "identity": {"subject_did": "did:ptr:system", "controller_pubkeys": []},
85
+ "verification": verification,
86
+ "gatekeeper": {"capabilities": []},
87
+ "external_refs": [],
88
+ }
89
+ }
90
+ if execution_telemetry:
91
+ content["vcard"]["execution_telemetry"] = execution_telemetry
92
+ if chl_temporal:
93
+ content["vcard"]["chl_temporal"] = chl_temporal
94
+ return VCard(json.dumps(content, sort_keys=True), hash_function=hash_function)
95
+
96
+ @staticmethod
97
+ def sandwich(
98
+ v_pre: VCard,
99
+ v_post: VCard,
100
+ pcard_hash: str = "",
101
+ hash_function: str = "sha256",
102
+ ) -> VCard:
103
+ content: dict[str, Any] = {
104
+ "vcard": {
105
+ "version": "1.0",
106
+ "type": "verification-sandwich",
107
+ "identity": {"subject_did": "did:ptr:system", "controller_pubkeys": []},
108
+ "verification": {
109
+ "pcard_hash": pcard_hash,
110
+ "v_pre_hash": v_pre.hash,
111
+ "v_post_hash": v_post.hash,
112
+ "timestamp": datetime.now(timezone.utc).isoformat(),
113
+ "success": True,
114
+ },
115
+ "gatekeeper": {"capabilities": []},
116
+ "external_refs": [],
117
+ }
118
+ }
119
+ return VCard(json.dumps(content, sort_keys=True), hash_function=hash_function)