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,155 @@
1
+ """
2
+ MCard Configuration Package
3
+ ============================
4
+
5
+ This package provides configuration management for MCard including:
6
+ - Unified settings (organized by category in `settings.py`)
7
+ - Logging configuration (unified in `logging.py`)
8
+ - Environment parameters (legacy, in `env_parameters.py`)
9
+ - Configuration constants (legacy, in `config_constants.py`)
10
+
11
+ Recommended Usage (New):
12
+ from clm.cross_cutting.config import settings
13
+
14
+ # Access settings by category
15
+ db_path = settings.database.path
16
+ api_port = settings.api.port
17
+ hash_algo = settings.hashing.algorithm
18
+ ptr_timeout = settings.ptr.default_timeout
19
+
20
+ Legacy Usage (Still Supported):
21
+ from clm.cross_cutting.config import setup_logging, get_logger
22
+ from clm.cross_cutting.config import EnvParameters
23
+ """
24
+
25
+ # ─────────────────────────────────────────────────────────────────────────────
26
+ # Unified Settings (Recommended)
27
+ # ─────────────────────────────────────────────────────────────────────────────
28
+
29
+ from .config_constants import (
30
+ API_KEY_HEADER_NAME,
31
+ CORS_ORIGINS,
32
+ DEFAULT_API_KEY,
33
+ # API
34
+ DEFAULT_API_PORT,
35
+ # Database
36
+ DEFAULT_DB_PATH,
37
+ DEFAULT_LOG_PATH,
38
+ # Pagination
39
+ DEFAULT_PAGE_SIZE,
40
+ # Pool/Timeout
41
+ DEFAULT_POOL_SIZE,
42
+ DEFAULT_TIMEOUT,
43
+ ENV_API_KEY,
44
+ ENV_API_PORT,
45
+ ENV_DB_MAX_CONNECTIONS,
46
+ # Environment Variable Names
47
+ ENV_DB_PATH,
48
+ ENV_DB_TIMEOUT,
49
+ ENV_HASH_ALGORITHM,
50
+ ENV_HASH_CUSTOM_FUNCTION,
51
+ ENV_HASH_CUSTOM_LENGTH,
52
+ ENV_HASH_CUSTOM_MODULE,
53
+ ENV_SERVICE_LOG_LEVEL,
54
+ # Logging
55
+ LOG_DIRECTORY,
56
+ LOG_FILENAME,
57
+ MAX_PAGE_SIZE,
58
+ MIN_PAGE_SIZE,
59
+ SERVER_HOST,
60
+ TEST_DB_PATH,
61
+ )
62
+
63
+ # ─────────────────────────────────────────────────────────────────────────────
64
+ # Legacy Exports (Backward Compatibility)
65
+ # ─────────────────────────────────────────────────────────────────────────────
66
+ # ─────────────────────────────────────────────────────────────────────────────
67
+ # Logging (Unified Module)
68
+ # ─────────────────────────────────────────────────────────────────────────────
69
+ from .logging import (
70
+ PerformanceTimer,
71
+ SecurityAuditLogger,
72
+ get_api_logger,
73
+ get_database_logger,
74
+ get_logger,
75
+ get_logging_config,
76
+ get_performance_logger,
77
+ get_security_logger,
78
+ setup_improved_logging, # Backward compatibility alias
79
+ setup_logging,
80
+ )
81
+ from .settings import (
82
+ APISettings,
83
+ DatabaseSettings,
84
+ FileProcessingSettings,
85
+ HashingSettings,
86
+ HTTPStatus,
87
+ LoggingSettings,
88
+ PaginationSettings,
89
+ PTRSettings,
90
+ Settings,
91
+ settings,
92
+ )
93
+
94
+ __all__ = [
95
+ # ─────────────────────────────────────────────────────────────────────────
96
+ # Unified Settings (Recommended)
97
+ # ─────────────────────────────────────────────────────────────────────────
98
+ "settings",
99
+ "Settings",
100
+ "DatabaseSettings",
101
+ "APISettings",
102
+ "PaginationSettings",
103
+ "HashingSettings",
104
+ "LoggingSettings",
105
+ "FileProcessingSettings",
106
+ "PTRSettings",
107
+ "HTTPStatus",
108
+ # ─────────────────────────────────────────────────────────────────────────
109
+ # Logging
110
+ # ─────────────────────────────────────────────────────────────────────────
111
+ "setup_logging",
112
+ "setup_improved_logging",
113
+ "get_logger",
114
+ "get_performance_logger",
115
+ "get_security_logger",
116
+ "get_database_logger",
117
+ "get_api_logger",
118
+ "get_logging_config",
119
+ "PerformanceTimer",
120
+ "SecurityAuditLogger",
121
+ # ─────────────────────────────────────────────────────────────────────────
122
+ # Legacy (Backward Compatibility)
123
+ # ─────────────────────────────────────────────────────────────────────────
124
+ # Database
125
+ "DEFAULT_DB_PATH",
126
+ "TEST_DB_PATH",
127
+ # API
128
+ "DEFAULT_API_PORT",
129
+ "DEFAULT_API_KEY",
130
+ "SERVER_HOST",
131
+ "CORS_ORIGINS",
132
+ "API_KEY_HEADER_NAME",
133
+ # Pagination
134
+ "DEFAULT_PAGE_SIZE",
135
+ "MAX_PAGE_SIZE",
136
+ "MIN_PAGE_SIZE",
137
+ # Pool/Timeout
138
+ "DEFAULT_POOL_SIZE",
139
+ "DEFAULT_TIMEOUT",
140
+ # Logging
141
+ "LOG_DIRECTORY",
142
+ "LOG_FILENAME",
143
+ "DEFAULT_LOG_PATH",
144
+ # Environment Variable Names
145
+ "ENV_DB_PATH",
146
+ "ENV_DB_MAX_CONNECTIONS",
147
+ "ENV_DB_TIMEOUT",
148
+ "ENV_SERVICE_LOG_LEVEL",
149
+ "ENV_API_PORT",
150
+ "ENV_API_KEY",
151
+ "ENV_HASH_ALGORITHM",
152
+ "ENV_HASH_CUSTOM_MODULE",
153
+ "ENV_HASH_CUSTOM_FUNCTION",
154
+ "ENV_HASH_CUSTOM_LENGTH",
155
+ ]
@@ -0,0 +1,392 @@
1
+ """General configuration constants for the MCard application."""
2
+
3
+ import json
4
+ import os
5
+ from pathlib import Path
6
+
7
+
8
+ def _find_project_root() -> Path:
9
+ for env_var in ("MCARD_ROOT", "CLM_ROOT", "PROJECT_ROOT"):
10
+ if env_var in os.environ:
11
+ p = Path(os.environ[env_var]).resolve()
12
+ if (p / "config" / "app_config.json").exists():
13
+ return p
14
+ curr = Path(__file__).resolve()
15
+ for parent in [curr] + list(curr.parents):
16
+ if (parent / "config" / "app_config.json").exists():
17
+ return parent
18
+ cwd = Path.cwd().resolve()
19
+ for parent in [cwd] + list(cwd.parents):
20
+ if (parent / "config" / "app_config.json").exists():
21
+ return parent
22
+ return curr.parents[6] if len(curr.parents) > 6 else curr.parent
23
+
24
+ _PROJECT_ROOT = _find_project_root()
25
+ _APP_CONFIG_PATH = _PROJECT_ROOT / "config" / "app_config.json"
26
+
27
+
28
+ def _load_app_config() -> dict:
29
+ if not _APP_CONFIG_PATH.exists():
30
+ # Fallback to empty config if not present
31
+ return {}
32
+ with _APP_CONFIG_PATH.open(encoding="utf-8") as handle:
33
+ return json.load(handle)
34
+
35
+
36
+ _APP_CONFIG = _load_app_config()
37
+
38
+
39
+ def _cfg(*path: str, default=None):
40
+ current: object = _APP_CONFIG
41
+ for key in path:
42
+ if not isinstance(current, dict) or key not in current:
43
+ return default
44
+ current = current[key]
45
+ return current
46
+
47
+
48
+ # Environment Variable Names for Hashing
49
+ ENV_HASH_ALGORITHM = "MCARD_HASH_ALGORITHM"
50
+ ENV_HASH_CUSTOM_MODULE = "MCARD_HASH_CUSTOM_MODULE"
51
+ ENV_HASH_CUSTOM_FUNCTION = "MCARD_HASH_CUSTOM_FUNCTION"
52
+ ENV_HASH_CUSTOM_LENGTH = "MCARD_HASH_CUSTOM_LENGTH"
53
+
54
+ # ─────────────────────────────────────────────────────────────────────────────
55
+ # Database Schema
56
+ # ─────────────────────────────────────────────────────────────────────────────
57
+ # DEPRECATED: Use mcard.schema.MCardSchema instead.
58
+ # All schemas are loaded from: schema/mcard_schema.sql (the ONLY source)
59
+ #
60
+ # For schema access, use:
61
+ # from clm.schemas import MCardSchema
62
+ # schema = MCardSchema.get_instance()
63
+ # schema.get_table('card')
64
+ # ─────────────────────────────────────────────────────────────────────────────
65
+
66
+ # Lazy-loaded for backward compatibility
67
+ _MCARD_TABLE_SCHEMA = None
68
+
69
+
70
+ def __getattr__(name):
71
+ """
72
+ Lazy attribute access for backward compatibility.
73
+
74
+ MCARD_TABLE_SCHEMA is loaded exclusively from the singleton.
75
+ There are NO hardcoded SQL fallbacks.
76
+ """
77
+ global _MCARD_TABLE_SCHEMA
78
+ if name == "MCARD_TABLE_SCHEMA":
79
+ import warnings
80
+
81
+ warnings.warn(
82
+ "config_constants.MCARD_TABLE_SCHEMA is deprecated (Phase E.2.a). "
83
+ "Use mcard.schema.MCardSchema.get_instance() for schema access, "
84
+ "or clm.layer2.tridb.TriDatabase for database topology.",
85
+ DeprecationWarning,
86
+ stacklevel=2,
87
+ )
88
+ if _MCARD_TABLE_SCHEMA is None:
89
+ from clm.schemas import MCardSchema
90
+
91
+ schema = MCardSchema.get_instance()
92
+ _MCARD_TABLE_SCHEMA = {
93
+ "documents": schema.get_table("mcard_fts"),
94
+ "card": schema.get_table("card"),
95
+ }
96
+ return _MCARD_TABLE_SCHEMA
97
+ raise AttributeError(
98
+ f"module 'mcard.config.config_constants' has no attribute '{name}'"
99
+ )
100
+
101
+
102
+ def _find_meta_functionality_db() -> Path:
103
+ p = _PROJECT_ROOT / "meta_functionality.db"
104
+ if p.exists():
105
+ return p
106
+ for parent in _PROJECT_ROOT.parents:
107
+ cand = parent / "meta_functionality.db"
108
+ if cand.exists():
109
+ return cand
110
+ return p
111
+
112
+
113
+ META_FUNCTIONALITY_DB_PATH = _find_meta_functionality_db()
114
+ DEFAULT_DB_PATH = _cfg("storage", "default_db_path", default="./data/content_memory.db")
115
+ DEFAULT_EXECUTION_LOG_PATH = _cfg(
116
+ "storage", "default_execution_log_path", default="./data/execution_log.db"
117
+ )
118
+ TEST_DB_PATH = _cfg("storage", "test_db_path", default="./tests/data/test_mcard.db")
119
+
120
+ # Content Knowledge Source Directory Configurations
121
+ _configured_knowledge_dir = _cfg(
122
+ "knowledge",
123
+ "default_content_knowledge_dir",
124
+ default=str(Path.home() / "Documents" / "DataVault" / "StudyNotes"),
125
+ )
126
+ if _configured_knowledge_dir and Path(_configured_knowledge_dir).expanduser().exists():
127
+ DEFAULT_CONTENT_KNOWLEDGE_DIR = str(
128
+ Path(_configured_knowledge_dir).expanduser().resolve()
129
+ )
130
+ else:
131
+ _home_vault = Path.home() / "Documents" / "DataVault" / "StudyNotes"
132
+ DEFAULT_CONTENT_KNOWLEDGE_DIR = (
133
+ str(_home_vault.resolve())
134
+ if _home_vault.exists()
135
+ else str(_configured_knowledge_dir or _home_vault)
136
+ )
137
+
138
+ ENV_CONTENT_KNOWLEDGE_DIR = _cfg(
139
+ "env",
140
+ "content_knowledge_dir",
141
+ default="MCARD_CONTENT_KNOWLEDGE_DIR",
142
+ )
143
+ ENV_KNOWLEDGE_VAULT = _cfg(
144
+ "env",
145
+ "knowledge_vault",
146
+ default="KNOWLEDGE_VAULT",
147
+ )
148
+
149
+ # Identity Space Configurations
150
+ DEFAULT_IDENTITY_PROVIDER = _cfg("identity", "provider", default="sqlite")
151
+ DEFAULT_IDENTITY_SPACE_PATH = _cfg(
152
+ "identity", "space_path", default="./data/agent_identities.db"
153
+ )
154
+ DEFAULT_VAPID_CONTACT = _cfg(
155
+ "identity", "default_vapid_contact", default="mailto:developer@example.com"
156
+ )
157
+
158
+ # Environment Variable Names
159
+ ENV_DB_PATH = "MCARD_DB_PATH"
160
+ ENV_TEST_DB_PATH = "TEST_DB_PATH"
161
+
162
+ # Environment Variable Names for Identity Space
163
+ ENV_IDENTITY_PROVIDER = _cfg(
164
+ "env", "identity_provider", default="MCARD_IDENTITY_PROVIDER"
165
+ )
166
+ ENV_IDENTITY_SPACE_PATH = _cfg(
167
+ "env", "identity_space_path", default="IDENTITY_SPACE_PATH"
168
+ )
169
+ ENV_IDENTITY_API_ENDPOINT = _cfg(
170
+ "env", "identity_api_endpoint", default="MCARD_IDENTITY_API_ENDPOINT"
171
+ )
172
+
173
+ ENV_DEFAULT_POOL_SIZE = "DEFAULT_POOL_SIZE"
174
+ ENV_DB_MAX_CONNECTIONS = "MCARD_STORE_MAX_CONNECTIONS"
175
+ ENV_DB_TIMEOUT = "MCARD_STORE_TIMEOUT"
176
+ ENV_SERVICE_LOG_LEVEL = "MCARD_SERVICE_LOG_LEVEL"
177
+ ENV_API_PORT = "MCARD_API_PORT"
178
+ ENV_FORCE_DEFAULT_CONFIG = "MCARD_FORCE_DEFAULT_CONFIG"
179
+ ENV_API_KEY = "MCARD_API_KEY"
180
+ ENV_WRAP_WIDTH_DEFAULT = "MCARD_WRAP_WIDTH_DEFAULT"
181
+ ENV_WRAP_WIDTH_KNOWN = "MCARD_WRAP_WIDTH_KNOWN"
182
+ ENV_MAX_PROBLEM_TEXT_BYTES = "MCARD_MAX_PROBLEM_TEXT_BYTES"
183
+ ENV_READ_TIMEOUT_SECS = "MCARD_READ_TIMEOUT_SECS"
184
+ ENV_MAX_FILE_SIZE = "MCARD_MAX_SIZE_BYTES"
185
+
186
+ # Default Configuration Values
187
+ DEFAULT_POOL_SIZE = 10
188
+ DEFAULT_TIMEOUT = 30.0
189
+ DEFAULT_API_PORT = _cfg("network", "default_api_port", default=5320)
190
+ DEFAULT_PYTHON_API_PORT = _cfg("network", "default_python_api_port", default=28302)
191
+ DEFAULT_JS_API_PORT = _cfg("network", "default_js_api_port", default=28303)
192
+ DEFAULT_WS_HOST = _cfg("network", "default_ws_host", default="127.0.0.1")
193
+ DEFAULT_WS_PORT = _cfg("network", "default_ws_port", default=5321)
194
+ DEFAULT_API_KEY = "your_api_key_here"
195
+ DEFAULT_HASH_ALGORITHM = "blake3"
196
+ DEFAULT_HASH_CUSTOM_MODULE = "custom_module"
197
+ DEFAULT_HASH_CUSTOM_FUNCTION = "custom_function"
198
+ DEFAULT_HASH_CUSTOM_LENGTH = 64
199
+ DEFAULT_LOG_LEVEL = "DEBUG"
200
+ DEFAULT_WRAP_WIDTH_DEFAULT = 1000
201
+ DEFAULT_WRAP_WIDTH_KNOWN = 1200
202
+ DEFAULT_MAX_PROBLEM_TEXT_BYTES = 2 * 1024 * 1024
203
+ DEFAULT_READ_TIMEOUT_SECS = 30.0
204
+ DEFAULT_MAX_FILE_SIZE = 150 * 1024 * 1024
205
+
206
+ # Server Configuration
207
+ DEFAULT_SERVER_HOST = _cfg(
208
+ "network", "default_server_host", default="0.0.0.0"
209
+ ) # nosec B104
210
+ SERVER_HOST = DEFAULT_SERVER_HOST
211
+ DEFAULT_PAGE_SIZE = 10
212
+ MAX_PAGE_SIZE = 1000
213
+ MIN_PAGE_SIZE = 1
214
+
215
+ # IndexedDB (for parity with JS)
216
+ INDEXEDDB_DEFAULT_DB_NAME = "mcard-db"
217
+ INDEXEDDB_DEFAULT_DB_VERSION = 1
218
+
219
+ # SQLite Configuration
220
+ SQLITE_BUSY_TIMEOUT_MS = 5000 # ms to wait for locks before SQLITE_BUSY
221
+
222
+ # Environment Variable Names for Shared Ports
223
+ ENV_WS_HOST = _cfg("env", "ws_host", default="VITE_WS_HOST")
224
+ ENV_WS_PORT = _cfg("env", "ws_port", default="VITE_WS_PORT")
225
+
226
+ # API/WS Port Environment Variable Compatibility
227
+ ENV_API_PORT_LEGACY = "HTTP_PORT"
228
+ ENV_WS_PORT_LEGACY = "WS_PORT"
229
+
230
+ # Service URL Defaults (overridable via env vars or config)
231
+ DEFAULT_OLLAMA_BASE_URL = _cfg(
232
+ "services", "default_ollama_base_url", default="http://localhost:11434"
233
+ )
234
+ DEFAULT_FALLBACK_MODEL = _cfg(
235
+ "services", "default_fallback_model", default="qwen3:0.6b"
236
+ )
237
+ DEFAULT_OTLP_ENDPOINT = _cfg(
238
+ "services", "default_otlp_endpoint", default="http://localhost:4317"
239
+ )
240
+ DEFAULT_VLLM_BASE_URL = _cfg(
241
+ "services", "default_vllm_base_url", default="http://localhost:8000"
242
+ )
243
+ DEFAULT_LMSTUDIO_BASE_URL = _cfg(
244
+ "services", "default_lmstudio_base_url", default="http://localhost:1234"
245
+ )
246
+
247
+ # ─────────────────────────────────────────────────────────────────────────────
248
+ # PTR Runtime Timeouts (seconds)
249
+ # ─────────────────────────────────────────────────────────────────────────────
250
+
251
+ PTR_DEFAULT_TIMEOUT_SECS = 5
252
+ PTR_LEAN_TIMEOUT_SECS = 60
253
+ PTR_JULIA_TIMEOUT_SECS = 15
254
+ PTR_R_TIMEOUT_SECS = 10
255
+ PTR_JAVASCRIPT_TIMEOUT_SECS = 120
256
+ PTR_COMMAND_CHECK_TIMEOUT_SECS = 10
257
+ PTR_LEAN_VALIDATE_TIMEOUT_SECS = 30
258
+
259
+ # ─────────────────────────────────────────────────────────────────────────────
260
+ # RAG / Embedding Timeouts (seconds)
261
+ # ─────────────────────────────────────────────────────────────────────────────
262
+
263
+ RAG_OLLAMA_TIMEOUT_SECS = 60
264
+ RAG_OLLAMA_VALIDATE_TIMEOUT_SECS = 5
265
+ RAG_VISION_DESCRIBE_TIMEOUT_SECS = 120
266
+ RAG_VISION_VALIDATE_TIMEOUT_SECS = 10
267
+
268
+ # ─────────────────────────────────────────────────────────────────────────────
269
+ # Network Runtime Cleanup
270
+ # ─────────────────────────────────────────────────────────────────────────────
271
+
272
+ NETWORK_PROCESS_TERMINATE_WAIT_SECS = 1
273
+
274
+ # ─────────────────────────────────────────────────────────────────────────────
275
+ # Script / Tooling Timeouts (seconds)
276
+ # ─────────────────────────────────────────────────────────────────────────────
277
+
278
+ SERVICE_RUNTIME_CHECK_TIMEOUT_SECS = 10
279
+ CLM_TS_RUN_TIMEOUT_SECS = 60
280
+
281
+ # ─────────────────────────────────────────────────────────────────────────────
282
+ # LLM Provider Timeouts (seconds)
283
+ # ─────────────────────────────────────────────────────────────────────────────
284
+
285
+ LLM_DEFAULT_TIMEOUT_SECS = 120
286
+ LLM_DEFAULT_RETRY_COUNT = 3
287
+ LLM_DEFAULT_RETRY_DELAY_SECS = 1.0
288
+
289
+ # ─────────────────────────────────────────────────────────────────────────────
290
+ # URL / HTTP Fetch Timeouts (seconds)
291
+ # ─────────────────────────────────────────────────────────────────────────────
292
+
293
+ URL_FETCH_TIMEOUT_SECS = 5
294
+
295
+ # ─────────────────────────────────────────────────────────────────────────────
296
+ # Signaling Server Operational Constants
297
+ # ─────────────────────────────────────────────────────────────────────────────
298
+
299
+ SIGNALING_SSE_KEEPALIVE_SECS = 15
300
+ SIGNALING_LSOF_TIMEOUT_SECS = 2
301
+ SIGNALING_PORT_RELEASE_WAIT_SECS = 0.5
302
+
303
+ # Content Processing
304
+ MAX_VECTOR_CONTENT_CHARS = 10_000 # max chars indexed for FTS in vector store
305
+
306
+ # HTTP Status Codes
307
+ HTTP_STATUS_OK = 200
308
+ HTTP_STATUS_FORBIDDEN = 403
309
+ HTTP_STATUS_NOT_FOUND = 404
310
+ HTTP_STATUS_INTERNAL_SERVER_ERROR = 500
311
+
312
+ # Error Messages
313
+ ERROR_INVALID_API_KEY = "Invalid API key"
314
+ ERROR_CARD_NOT_FOUND = "Card not found"
315
+ ERROR_CARD_CREATION_FAILED = "Failed to create card"
316
+ ERROR_CARD_DELETION_FAILED = "Failed to delete card"
317
+
318
+ # Event Constants
319
+ TYPE = "type"
320
+ HASH = "hash"
321
+ FIRST_G_TIME = "first_g_time"
322
+ CONTENT_SIZE = "content_size"
323
+ COLLISION_TIME = "collision_time"
324
+ UPGRADED_FUNCTION = "upgraded_function"
325
+ UPGRADED_HASH = "upgraded_hash"
326
+ DUPLICATE_TIME = "duplicate_time"
327
+ DUPLICATE_EVENT_TYPE = "duplicate"
328
+ COLLISION_EVENT_TYPE = "collision"
329
+
330
+ # A Pair of colliding MD5 content values
331
+ MD5_COLLISION_PAIR_IN_BYTES_a = bytes.fromhex(
332
+ "4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa200a8284bf36e8e4b55b35f427593d849676da0d1555d8360fb5f07fea2"
333
+ )
334
+ MD5_COLLISION_PAIR_IN_BYTES_b = bytes.fromhex(
335
+ "4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa202a8284bf36e8e4b55b35f427593d849676da0d1d55d8360fb5f07fea2"
336
+ )
337
+
338
+ # Hash Algorithm Hierarchy
339
+ ALGORITHM_HIERARCHY = {
340
+ "md5": {"strength": 0, "next": "sha1"},
341
+ "sha1": {"strength": 1, "next": "sha224"},
342
+ "sha224": {"strength": 2, "next": "sha256"},
343
+ "sha256": {"strength": 3, "next": "sha384"},
344
+ "sha384": {"strength": 4, "next": "sha512"},
345
+ "sha512": {"strength": 5, "next": "blake3"},
346
+ "blake3": {"strength": 6, "next": "custom"},
347
+ "custom": {"strength": 7, "next": None},
348
+ }
349
+
350
+ # Logging Configuration
351
+ LOG_DIRECTORY = "logs"
352
+ LOG_FILENAME = "mcard.log"
353
+ DEFAULT_LOG_PATH = f"{LOG_DIRECTORY}/{LOG_FILENAME}"
354
+
355
+ # CORS origins
356
+ CORS_ORIGINS = _cfg(
357
+ "network",
358
+ "cors_origins",
359
+ default=[
360
+ "http://localhost:3000",
361
+ "http://localhost:8000",
362
+ "https://localhost:3000",
363
+ "https://localhost:8000",
364
+ "http://localhost:8080",
365
+ "https://example.com",
366
+ ],
367
+ )
368
+
369
+ # API Key Header Name
370
+ API_KEY_HEADER_NAME = _cfg("web", "api_key_header_name", default="X-API-Key")
371
+
372
+ # Search Parameters
373
+ SEARCH_CONTENT_DEFAULT = True
374
+ SEARCH_HASH_DEFAULT = True
375
+ SEARCH_TIME_DEFAULT = True
376
+
377
+ # Additional Error Messages
378
+ ERROR_SERVER_SHUTDOWN = "Server shutdown failed"
379
+ ERROR_INVALID_CONTENT = "Content cannot be empty"
380
+ ERROR_INVALID_METADATA = "Metadata must be a dictionary"
381
+ ERROR_LISTING_CARDS = "Error listing cards"
382
+ ERROR_DELETE_ALL_CARDS_FAILED = "Failed to delete all cards"
383
+ SUCCESS_DELETE_ALL_CARDS = "All cards deleted successfully"
384
+ HEALTH_CHECK_SUCCESS = "Server is healthy"
385
+ HEALTH_CHECK_FAILURE = "Server health check failed"
386
+ ERROR_INVALID_CREDENTIALS = "Invalid credentials"
387
+ ERROR_CARD_ALREADY_EXISTS = "Card already exists"
388
+ ERROR_CARD_NOT_AUTHORIZED = "Card not authorized"
389
+ ERROR_INVALID_REQUEST = "Invalid request"
390
+ ERROR_INVALID_CARD_ID = "Invalid card ID"
391
+ ERROR_CARD_UPDATE_FAILED = "Failed to update card"
392
+ ERROR_CARD_NOT_UPDATED = "Card not updated"
@@ -0,0 +1,90 @@
1
+ """
2
+ DEPRECATED: Environment parameter management for MCard.
3
+
4
+ This module is deprecated in favor of `mcard.config.settings`.
5
+ All new code should use:
6
+ from clm.cross_cutting.config.settings import settings
7
+
8
+ This module delegates to the unified Settings singleton for backward compatibility.
9
+ It will be removed in a future release.
10
+ """
11
+
12
+ import warnings
13
+
14
+ # Use the unified configurations
15
+ from .settings import settings
16
+
17
+ warnings.warn(
18
+ "mcard.config.env_parameters.EnvParameters is deprecated. "
19
+ "Use mcard.config.settings.settings instead.",
20
+ DeprecationWarning,
21
+ stacklevel=2,
22
+ )
23
+
24
+
25
+ class EnvParameters:
26
+ """Backward-compatible shim that delegates to the unified Settings singleton."""
27
+
28
+ _instance = None
29
+
30
+ def __new__(cls):
31
+ if cls._instance is None:
32
+ cls._instance = super().__new__(cls)
33
+ return cls._instance
34
+
35
+ def load_env_variables(self):
36
+ """No-op: settings singleton already loads env vars on init."""
37
+
38
+ def get_db_path(self):
39
+ return settings.database.path
40
+
41
+ def get_test_db_path(self):
42
+ return settings.database.test_path
43
+
44
+ def get_log_level(self):
45
+ return settings.logging.level
46
+
47
+ def get_default_page_size(self):
48
+ return settings.pagination.default_page_size
49
+
50
+ def get_default_pool_size(self):
51
+ return settings.database.pool_size
52
+
53
+ def get_default_timeout(self):
54
+ return settings.database.timeout
55
+
56
+ def get_hash_algorithm(self):
57
+ return settings.hashing.algorithm
58
+
59
+ def get_hash_custom_module(self):
60
+ return settings.hashing.custom_module
61
+
62
+ def get_hash_custom_function(self):
63
+ return settings.hashing.custom_function
64
+
65
+ def get_hash_custom_length(self):
66
+ return settings.hashing.custom_length
67
+
68
+ def get_api_port(self):
69
+ return settings.api.port
70
+
71
+ def get_store_max_connections(self):
72
+ return settings.database.max_connections
73
+
74
+ def get_api_key(self):
75
+ return settings.api.api_key
76
+
77
+ def get_wrap_width_default(self) -> int:
78
+ return settings.file_processing.wrap_width_default
79
+
80
+ def get_wrap_width_known(self) -> int:
81
+ return settings.file_processing.wrap_width_known
82
+
83
+ def get_max_problem_text_bytes(self) -> int:
84
+ return settings.file_processing.max_problem_text_bytes
85
+
86
+ def get_read_timeout_secs(self) -> float:
87
+ return settings.file_processing.read_timeout_secs
88
+
89
+ def get_content_knowledge_dir(self) -> str:
90
+ return settings.knowledge.content_knowledge_dir