krons 0.1.0__tar.gz → 0.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. {krons-0.1.0 → krons-0.1.1}/CLAUDE.md +17 -17
  2. {krons-0.1.0 → krons-0.1.1}/PKG-INFO +5 -5
  3. {krons-0.1.0 → krons-0.1.1}/README.md +1 -1
  4. {krons-0.1.0 → krons-0.1.1}/pyproject.toml +6 -6
  5. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/core/__init__.py +31 -31
  6. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/core/broadcaster.py +1 -1
  7. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/core/element.py +3 -3
  8. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/core/event.py +4 -4
  9. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/core/eventbus.py +1 -1
  10. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/core/flow.py +4 -4
  11. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/core/graph.py +4 -4
  12. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/core/node.py +11 -11
  13. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/core/pile.py +5 -5
  14. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/core/processor.py +2 -2
  15. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/core/progression.py +2 -2
  16. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/enforcement/__init__.py +1 -1
  17. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/enforcement/context.py +3 -3
  18. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/enforcement/policy.py +3 -3
  19. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/enforcement/rule.py +2 -2
  20. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/enforcement/service.py +1 -1
  21. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/enforcement/validator.py +3 -3
  22. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/operations/builder.py +4 -4
  23. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/operations/flow.py +5 -5
  24. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/operations/node.py +3 -3
  25. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/services/__init__.py +13 -13
  26. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/services/backend.py +3 -3
  27. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/services/hook.py +3 -3
  28. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/services/imodel.py +5 -5
  29. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/services/registry.py +2 -2
  30. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/services/utilities/rate_limited_executor.py +4 -4
  31. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/services/utilities/rate_limiter.py +1 -1
  32. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/services/utilities/resilience.py +2 -2
  33. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/session/exchange.py +3 -3
  34. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/session/message.py +1 -1
  35. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/session/session.py +7 -7
  36. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/specs/adapters/dataclass_field.py +4 -4
  37. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/specs/adapters/pydantic_adapter.py +5 -5
  38. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/specs/adapters/sql_ddl.py +6 -6
  39. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/specs/catalog/__init__.py +2 -2
  40. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/specs/catalog/_audit.py +3 -3
  41. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/specs/catalog/_common.py +2 -2
  42. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/specs/catalog/_content.py +5 -5
  43. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/specs/catalog/_enforcement.py +4 -4
  44. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/specs/factory.py +7 -7
  45. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/specs/operable.py +2 -2
  46. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/specs/phrase.py +4 -4
  47. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/specs/protocol.py +1 -1
  48. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/specs/spec.py +7 -7
  49. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/types/base.py +3 -3
  50. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/types/db_types.py +2 -2
  51. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/types/identity.py +1 -1
  52. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/_to_list.py +1 -1
  53. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/_utils.py +3 -3
  54. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/concurrency/__init__.py +38 -38
  55. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/concurrency/_async_call.py +3 -3
  56. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/fuzzy/_fuzzy_match.py +2 -2
  57. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/sql/_sql_validation.py +1 -1
  58. {krons-0.1.0 → krons-0.1.1}/tests/conftest.py +3 -3
  59. {krons-0.1.0 → krons-0.1.1}/tests/core/test_broadcaster.py +2 -2
  60. {krons-0.1.0 → krons-0.1.1}/tests/core/test_element.py +1 -1
  61. {krons-0.1.0 → krons-0.1.1}/tests/core/test_error_paths.py +2 -2
  62. {krons-0.1.0 → krons-0.1.1}/tests/core/test_event.py +3 -3
  63. {krons-0.1.0 → krons-0.1.1}/tests/core/test_event_status_race.py +2 -2
  64. {krons-0.1.0 → krons-0.1.1}/tests/core/test_eventbus.py +1 -1
  65. {krons-0.1.0 → krons-0.1.1}/tests/core/test_flow.py +2 -2
  66. {krons-0.1.0 → krons-0.1.1}/tests/core/test_flow_edge_cases.py +2 -2
  67. {krons-0.1.0 → krons-0.1.1}/tests/core/test_graph.py +2 -2
  68. {krons-0.1.0 → krons-0.1.1}/tests/core/test_graph_event_loop.py +1 -1
  69. {krons-0.1.0 → krons-0.1.1}/tests/core/test_node.py +10 -10
  70. {krons-0.1.0 → krons-0.1.1}/tests/core/test_pile.py +2 -2
  71. {krons-0.1.0 → krons-0.1.1}/tests/core/test_pile_edge_cases.py +1 -1
  72. {krons-0.1.0 → krons-0.1.1}/tests/core/test_processor.py +2 -2
  73. {krons-0.1.0 → krons-0.1.1}/tests/core/test_processor_security.py +5 -5
  74. {krons-0.1.0 → krons-0.1.1}/tests/core/test_progression.py +2 -2
  75. {krons-0.1.0 → krons-0.1.1}/tests/core/test_progression_edge_cases.py +1 -1
  76. {krons-0.1.0 → krons-0.1.1}/tests/core/test_serialization_roundtrip.py +2 -2
  77. {krons-0.1.0 → krons-0.1.1}/tests/core/test_thread_safety_stress.py +1 -1
  78. {krons-0.1.0 → krons-0.1.1}/tests/enforcement/test_service.py +25 -25
  79. {krons-0.1.0 → krons-0.1.1}/tests/operations/test_builder.py +2 -2
  80. {krons-0.1.0 → krons-0.1.1}/tests/operations/test_flow.py +4 -4
  81. {krons-0.1.0 → krons-0.1.1}/tests/operations/test_node.py +2 -2
  82. {krons-0.1.0 → krons-0.1.1}/tests/operations/test_op_flow.py +15 -15
  83. {krons-0.1.0 → krons-0.1.1}/tests/operations/test_op_node.py +3 -3
  84. {krons-0.1.0 → krons-0.1.1}/tests/operations/test_registry.py +1 -1
  85. {krons-0.1.0 → krons-0.1.1}/tests/rules/test_base.py +1 -1
  86. {krons-0.1.0 → krons-0.1.1}/tests/rules/test_builtin.py +1 -1
  87. {krons-0.1.0 → krons-0.1.1}/tests/rules/test_registry.py +2 -2
  88. {krons-0.1.0 → krons-0.1.1}/tests/rules/test_rule_params_edge_cases.py +1 -1
  89. {krons-0.1.0 → krons-0.1.1}/tests/rules/test_rules_comprehensive.py +3 -3
  90. {krons-0.1.0 → krons-0.1.1}/tests/rules/test_validator.py +3 -3
  91. {krons-0.1.0 → krons-0.1.1}/tests/services/test_backend.py +3 -3
  92. {krons-0.1.0 → krons-0.1.1}/tests/services/test_endpoint.py +3 -3
  93. {krons-0.1.0 → krons-0.1.1}/tests/services/test_hook.py +8 -8
  94. {krons-0.1.0 → krons-0.1.1}/tests/services/test_imodel.py +5 -5
  95. {krons-0.1.0 → krons-0.1.1}/tests/services/test_registry.py +2 -2
  96. {krons-0.1.0 → krons-0.1.1}/tests/services/utilities/test_header_factory.py +1 -1
  97. {krons-0.1.0 → krons-0.1.1}/tests/services/utilities/test_rate_limiter.py +4 -4
  98. {krons-0.1.0 → krons-0.1.1}/tests/services/utilities/test_resilience.py +2 -2
  99. {krons-0.1.0 → krons-0.1.1}/tests/services/utilities/test_resilience_retry.py +9 -9
  100. {krons-0.1.0 → krons-0.1.1}/tests/session/test_exchange.py +1 -1
  101. {krons-0.1.0 → krons-0.1.1}/tests/session/test_message.py +2 -2
  102. {krons-0.1.0 → krons-0.1.1}/tests/session/test_message_edge_cases.py +2 -2
  103. {krons-0.1.0 → krons-0.1.1}/tests/session/test_session.py +2 -2
  104. {krons-0.1.0 → krons-0.1.1}/tests/session/test_session_edge_cases.py +2 -2
  105. {krons-0.1.0 → krons-0.1.1}/tests/specs/test_catalog.py +2 -2
  106. {krons-0.1.0 → krons-0.1.1}/tests/specs/test_factory.py +8 -8
  107. {krons-0.1.0 → krons-0.1.1}/tests/specs/test_phrase.py +4 -4
  108. {krons-0.1.0 → krons-0.1.1}/tests/test_protocols.py +6 -6
  109. {krons-0.1.0 → krons-0.1.1}/tests/types/conftest.py +2 -2
  110. {krons-0.1.0 → krons-0.1.1}/tests/types/spec_adapters/test_adapters_py311.py +2 -2
  111. {krons-0.1.0 → krons-0.1.1}/tests/types/spec_adapters/test_protocol.py +1 -1
  112. {krons-0.1.0 → krons-0.1.1}/tests/types/spec_adapters/test_pydantic_field.py +2 -2
  113. {krons-0.1.0 → krons-0.1.1}/tests/types/spec_adapters/test_sql_ddl_specs.py +4 -4
  114. {krons-0.1.0 → krons-0.1.1}/tests/types/test_db_types.py +1 -1
  115. {krons-0.1.0 → krons-0.1.1}/tests/types/test_identity.py +1 -1
  116. {krons-0.1.0 → krons-0.1.1}/tests/types/test_model.py +1 -1
  117. {krons-0.1.0 → krons-0.1.1}/tests/types/test_operable.py +3 -3
  118. {krons-0.1.0 → krons-0.1.1}/tests/types/test_sentinel.py +1 -1
  119. {krons-0.1.0 → krons-0.1.1}/tests/types/test_spec.py +12 -12
  120. {krons-0.1.0 → krons-0.1.1}/tests/types/test_types.py +1 -1
  121. {krons-0.1.0 → krons-0.1.1}/tests/types/test_types_py311.py +2 -2
  122. {krons-0.1.0 → krons-0.1.1}/tests/utils/concurrency/test_async_call.py +1 -1
  123. {krons-0.1.0 → krons-0.1.1}/tests/utils/concurrency/test_cancel.py +1 -1
  124. {krons-0.1.0 → krons-0.1.1}/tests/utils/concurrency/test_errors.py +2 -2
  125. {krons-0.1.0 → krons-0.1.1}/tests/utils/concurrency/test_patterns.py +1 -1
  126. {krons-0.1.0 → krons-0.1.1}/tests/utils/concurrency/test_primitives.py +1 -1
  127. {krons-0.1.0 → krons-0.1.1}/tests/utils/concurrency/test_priority_queue.py +1 -1
  128. {krons-0.1.0 → krons-0.1.1}/tests/utils/concurrency/test_run_async.py +1 -1
  129. {krons-0.1.0 → krons-0.1.1}/tests/utils/concurrency/test_task.py +1 -1
  130. {krons-0.1.0 → krons-0.1.1}/tests/utils/concurrency/test_utils.py +1 -1
  131. {krons-0.1.0 → krons-0.1.1}/tests/utils/test_extract_json.py +1 -1
  132. {krons-0.1.0 → krons-0.1.1}/tests/utils/test_fuzzy_json.py +1 -1
  133. {krons-0.1.0 → krons-0.1.1}/tests/utils/test_fuzzy_match.py +2 -2
  134. {krons-0.1.0 → krons-0.1.1}/tests/utils/test_hash.py +2 -2
  135. {krons-0.1.0 → krons-0.1.1}/tests/utils/test_json_dump.py +1 -1
  136. {krons-0.1.0 → krons-0.1.1}/tests/utils/test_lazy_init.py +1 -1
  137. {krons-0.1.0 → krons-0.1.1}/tests/utils/test_sql_validation.py +2 -2
  138. {krons-0.1.0 → krons-0.1.1}/tests/utils/test_string_similarity.py +1 -1
  139. {krons-0.1.0 → krons-0.1.1}/tests/utils/test_to_dict.py +1 -1
  140. {krons-0.1.0 → krons-0.1.1}/tests/utils/test_to_list.py +1 -1
  141. {krons-0.1.0 → krons-0.1.1}/tests/utils/test_to_num.py +1 -1
  142. {krons-0.1.0 → krons-0.1.1}/tests/utils/test_utils.py +1 -1
  143. {krons-0.1.0 → krons-0.1.1}/uv.lock +2 -2
  144. {krons-0.1.0 → krons-0.1.1}/.github/workflows/release.yml +0 -0
  145. {krons-0.1.0 → krons-0.1.1}/.gitignore +0 -0
  146. {krons-0.1.0 → krons-0.1.1}/.python-version +0 -0
  147. {krons-0.1.0 → krons-0.1.1}/LICENSE +0 -0
  148. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/__init__.py +0 -0
  149. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/enforcement/common/__init__.py +0 -0
  150. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/enforcement/common/boolean.py +0 -0
  151. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/enforcement/common/choice.py +0 -0
  152. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/enforcement/common/mapping.py +0 -0
  153. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/enforcement/common/model.py +0 -0
  154. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/enforcement/common/number.py +0 -0
  155. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/enforcement/common/string.py +0 -0
  156. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/enforcement/registry.py +0 -0
  157. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/errors.py +0 -0
  158. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/operations/__init__.py +0 -0
  159. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/operations/registry.py +0 -0
  160. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/protocols.py +0 -0
  161. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/py.typed +0 -0
  162. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/services/endpoint.py +0 -0
  163. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/services/utilities/__init__.py +0 -0
  164. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/services/utilities/header_factory.py +0 -0
  165. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/session/__init__.py +0 -0
  166. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/specs/__init__.py +0 -0
  167. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/specs/adapters/__init__.py +0 -0
  168. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/specs/adapters/_utils.py +0 -0
  169. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/specs/adapters/factory.py +0 -0
  170. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/types/__init__.py +0 -0
  171. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/types/_sentinel.py +0 -0
  172. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/__init__.py +0 -0
  173. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/_hash.py +0 -0
  174. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/_json_dump.py +0 -0
  175. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/_lazy_init.py +0 -0
  176. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/_to_num.py +0 -0
  177. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/concurrency/_cancel.py +0 -0
  178. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/concurrency/_errors.py +0 -0
  179. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/concurrency/_patterns.py +0 -0
  180. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/concurrency/_primitives.py +0 -0
  181. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/concurrency/_priority_queue.py +0 -0
  182. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/concurrency/_resource_tracker.py +0 -0
  183. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/concurrency/_run_async.py +0 -0
  184. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/concurrency/_task.py +0 -0
  185. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/concurrency/_utils.py +0 -0
  186. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/fuzzy/__init__.py +0 -0
  187. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/fuzzy/_extract_json.py +0 -0
  188. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/fuzzy/_fuzzy_json.py +0 -0
  189. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/fuzzy/_string_similarity.py +0 -0
  190. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/fuzzy/_to_dict.py +0 -0
  191. {krons-0.1.0/src/kronos → krons-0.1.1/src/krons}/utils/sql/__init__.py +0 -0
  192. {krons-0.1.0 → krons-0.1.1}/tests/__init__.py +0 -0
  193. {krons-0.1.0 → krons-0.1.1}/tests/core/__init__.py +0 -0
  194. {krons-0.1.0 → krons-0.1.1}/tests/enforcement/__init__.py +0 -0
  195. {krons-0.1.0 → krons-0.1.1}/tests/operations/__init__.py +0 -0
  196. {krons-0.1.0 → krons-0.1.1}/tests/rules/__init__.py +0 -0
  197. {krons-0.1.0 → krons-0.1.1}/tests/services/__init__.py +0 -0
  198. {krons-0.1.0 → krons-0.1.1}/tests/services/utilities/__init__.py +0 -0
  199. {krons-0.1.0 → krons-0.1.1}/tests/session/__init__.py +0 -0
  200. {krons-0.1.0 → krons-0.1.1}/tests/specs/__init__.py +0 -0
  201. {krons-0.1.0 → krons-0.1.1}/tests/types/__init__.py +0 -0
  202. {krons-0.1.0 → krons-0.1.1}/tests/types/spec_adapters/__init__.py +0 -0
  203. {krons-0.1.0 → krons-0.1.1}/tests/utils/__init__.py +0 -0
  204. {krons-0.1.0 → krons-0.1.1}/tests/utils/concurrency/__init__.py +0 -0
@@ -1,8 +1,8 @@
1
- # kronos - Spec-Based Composable Framework
1
+ # krons - Spec-Based Composable Framework
2
2
 
3
3
  ## Overview
4
4
 
5
- **kronos** is a Python framework for building spec-based, composable systems. It provides:
5
+ **krons** is a Python framework for building spec-based, composable systems. It provides:
6
6
 
7
7
  - **Spec/Operable**: Type-safe field definitions with validation, defaults, and DB metadata
8
8
  - **Node**: Polymorphic content containers with DB serialization
@@ -12,7 +12,7 @@
12
12
  ## Architecture
13
13
 
14
14
  ```
15
- kronos/
15
+ krons/
16
16
  ├── core/ # Foundation: Element, Node, Event, Flow, Graph, Pile
17
17
  ├── specs/ # Spec definitions, Operable composition, adapters
18
18
  │ ├── catalog/ # Pre-built specs (Content, Audit, Common, Enforcement)
@@ -32,8 +32,8 @@ kronos/
32
32
  **Spec** defines a single field with type, name, default, validation, and DB metadata:
33
33
 
34
34
  ```python
35
- from kronos.specs import Spec, Operable
36
- from kronos.types.db_types import FK, VectorMeta
35
+ from krons.specs import Spec, Operable
36
+ from krons.types.db_types import FK, VectorMeta
37
37
 
38
38
  # Basic specs
39
39
  name_spec = Spec(str, name="name")
@@ -66,7 +66,7 @@ specs_list = operable.get_specs()
66
66
  Pre-built specs use BaseModel for field definitions:
67
67
 
68
68
  ```python
69
- from kronos.specs.catalog import ContentSpecs, AuditSpecs, CommonSpecs
69
+ from krons.specs.catalog import ContentSpecs, AuditSpecs, CommonSpecs
70
70
 
71
71
  # Get specs with customization
72
72
  content_specs = ContentSpecs.get_specs(dim=1536) # With vector dimension
@@ -95,8 +95,8 @@ class MySpecs(BaseModel):
95
95
  **Node** stores polymorphic content with DB serialization:
96
96
 
97
97
  ```python
98
- from kronos.core import Node
99
- from kronos.core.node import create_node, NodeConfig
98
+ from krons.core import Node
99
+ from krons.core.node import create_node, NodeConfig
100
100
 
101
101
  # Basic usage
102
102
  node = Node(content={"key": "value"})
@@ -129,7 +129,7 @@ restored = JobNode.from_dict(db_data, from_row=True) # Reconstructs content
129
129
  **iModel** - Unified service interface with rate limiting:
130
130
 
131
131
  ```python
132
- from kronos.services import Endpoint, EndpointConfig, iModel
132
+ from krons.services import Endpoint, EndpointConfig, iModel
133
133
 
134
134
  config = EndpointConfig(
135
135
  name="gpt-4",
@@ -147,7 +147,7 @@ response = await model.invoke({"messages": [...]})
147
147
  **KronService** - Action handlers with policy evaluation:
148
148
 
149
149
  ```python
150
- from kronos.enforcement import KronService, KronConfig, action, RequestContext
150
+ from krons.enforcement import KronService, KronConfig, action, RequestContext
151
151
 
152
152
  class MyService(KronService):
153
153
  @property
@@ -167,7 +167,7 @@ result = await service.call("user.create", {"name": "John"}, RequestContext(name
167
167
  Runtime-checkable protocols with signature validation:
168
168
 
169
169
  ```python
170
- from kronos.protocols import implements, Serializable, SignatureMismatchError
170
+ from krons.protocols import implements, Serializable, SignatureMismatchError
171
171
 
172
172
  @implements(Serializable, signature_check="error") # "error", "warn", "skip"
173
173
  class MyClass:
@@ -180,7 +180,7 @@ class MyClass:
180
180
  Foreign keys and vector embeddings for SQL DDL:
181
181
 
182
182
  ```python
183
- from kronos.types.db_types import FK, Vector, FKMeta, VectorMeta, extract_kron_db_meta
183
+ from krons.types.db_types import FK, Vector, FKMeta, VectorMeta, extract_kron_db_meta
184
184
 
185
185
  # In type annotations
186
186
  class Post(BaseModel):
@@ -235,11 +235,11 @@ class MockPolicyEngine:
235
235
  1. **Circular imports in catalog**: Use direct imports from submodules:
236
236
  ```python
237
237
  # Wrong
238
- from kronos.specs import Operable, Spec
238
+ from krons.specs import Operable, Spec
239
239
 
240
240
  # Right (in catalog files)
241
- from kronos.specs.operable import Operable
242
- from kronos.specs.spec import Spec
241
+ from krons.specs.operable import Operable
242
+ from krons.specs.spec import Spec
243
243
  ```
244
244
 
245
245
  2. **PolicyEngine/PolicyResolver are Protocols**: Can't instantiate directly, create mock classes.
@@ -254,13 +254,13 @@ class MockPolicyEngine:
254
254
  ## Running Tests
255
255
 
256
256
  ```bash
257
- cd libs/kronos
257
+ cd libs/krons
258
258
 
259
259
  # All tests
260
260
  uv run pytest tests/ -q
261
261
 
262
262
  # With coverage
263
- uv run pytest tests/ --cov=kronos --cov-report=term-missing
263
+ uv run pytest tests/ --cov=krons --cov-report=term-missing
264
264
 
265
265
  # Specific module
266
266
  uv run pytest tests/specs/test_catalog.py -v
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: krons
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: Spec-based composable framework for building type-safe systems
5
- Project-URL: Homepage, https://github.com/khive-ai/kronos
6
- Project-URL: Repository, https://github.com/khive-ai/kronos
7
- Project-URL: Issues, https://github.com/khive-ai/kronos/issues
5
+ Project-URL: Homepage, https://github.com/khive-ai/krons
6
+ Project-URL: Repository, https://github.com/khive-ai/krons
7
+ Project-URL: Issues, https://github.com/khive-ai/krons/issues
8
8
  Author-email: HaiyangLi <quantocean.li@gmail.com>
9
9
  License-Expression: Apache-2.0
10
10
  License-File: LICENSE
@@ -46,7 +46,7 @@ pip install krons
46
46
  ## Quick Start
47
47
 
48
48
  ```python
49
- from kronos.specs import Spec, Operable
49
+ from krons.specs import Spec, Operable
50
50
 
51
51
  # Define specs
52
52
  name_spec = Spec(str, name="name")
@@ -19,7 +19,7 @@ pip install krons
19
19
  ## Quick Start
20
20
 
21
21
  ```python
22
- from kronos.specs import Spec, Operable
22
+ from krons.specs import Spec, Operable
23
23
 
24
24
  # Define specs
25
25
  name_spec = Spec(str, name="name")
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "krons"
3
- version = "0.1.0"
3
+ version = "0.1.1"
4
4
  description = "Spec-based composable framework for building type-safe systems"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -29,9 +29,9 @@ dependencies = [
29
29
  ]
30
30
 
31
31
  [project.urls]
32
- Homepage = "https://github.com/khive-ai/kronos"
33
- Repository = "https://github.com/khive-ai/kronos"
34
- Issues = "https://github.com/khive-ai/kronos/issues"
32
+ Homepage = "https://github.com/khive-ai/krons"
33
+ Repository = "https://github.com/khive-ai/krons"
34
+ Issues = "https://github.com/khive-ai/krons/issues"
35
35
 
36
36
  [dependency-groups]
37
37
  dev = [
@@ -48,8 +48,8 @@ requires = ["hatchling"]
48
48
  build-backend = "hatchling.build"
49
49
 
50
50
  [tool.hatch.build.targets.wheel]
51
- packages = ["src/kronos"]
52
- artifacts = ["src/kronos/py.typed"]
51
+ packages = ["src/krons"]
52
+ artifacts = ["src/krons/py.typed"]
53
53
 
54
54
  [tool.pytest.ini_options]
55
55
  asyncio_mode = "strict"
@@ -10,46 +10,46 @@ from typing import TYPE_CHECKING
10
10
  # Lazy import mapping
11
11
  _LAZY_IMPORTS: dict[str, tuple[str, str]] = {
12
12
  # broadcaster
13
- "Broadcaster": ("kronos.core.broadcaster", "Broadcaster"),
13
+ "Broadcaster": ("krons.core.broadcaster", "Broadcaster"),
14
14
  # element
15
- "Element": ("kronos.core.element", "Element"),
15
+ "Element": ("krons.core.element", "Element"),
16
16
  # event
17
- "Event": ("kronos.core.event", "Event"),
18
- "EventStatus": ("kronos.core.event", "EventStatus"),
19
- "Execution": ("kronos.core.event", "Execution"),
17
+ "Event": ("krons.core.event", "Event"),
18
+ "EventStatus": ("krons.core.event", "EventStatus"),
19
+ "Execution": ("krons.core.event", "Execution"),
20
20
  # eventbus
21
- "EventBus": ("kronos.core.eventbus", "EventBus"),
22
- "Handler": ("kronos.core.eventbus", "Handler"),
21
+ "EventBus": ("krons.core.eventbus", "EventBus"),
22
+ "Handler": ("krons.core.eventbus", "Handler"),
23
23
  # flow
24
- "Flow": ("kronos.core.flow", "Flow"),
24
+ "Flow": ("krons.core.flow", "Flow"),
25
25
  # graph
26
- "Edge": ("kronos.core.graph", "Edge"),
27
- "EdgeCondition": ("kronos.core.graph", "EdgeCondition"),
28
- "Graph": ("kronos.core.graph", "Graph"),
26
+ "Edge": ("krons.core.graph", "Edge"),
27
+ "EdgeCondition": ("krons.core.graph", "EdgeCondition"),
28
+ "Graph": ("krons.core.graph", "Graph"),
29
29
  # node
30
- "DEFAULT_NODE_CONFIG": ("kronos.core.node", "DEFAULT_NODE_CONFIG"),
31
- "NODE_REGISTRY": ("kronos.core.node", "NODE_REGISTRY"),
32
- "PERSISTABLE_NODE_REGISTRY": ("kronos.core.node", "PERSISTABLE_NODE_REGISTRY"),
33
- "Node": ("kronos.core.node", "Node"),
34
- "NodeConfig": ("kronos.core.node", "NodeConfig"),
35
- "create_node": ("kronos.core.node", "create_node"),
36
- "generate_ddl": ("kronos.core.node", "generate_ddl"),
30
+ "DEFAULT_NODE_CONFIG": ("krons.core.node", "DEFAULT_NODE_CONFIG"),
31
+ "NODE_REGISTRY": ("krons.core.node", "NODE_REGISTRY"),
32
+ "PERSISTABLE_NODE_REGISTRY": ("krons.core.node", "PERSISTABLE_NODE_REGISTRY"),
33
+ "Node": ("krons.core.node", "Node"),
34
+ "NodeConfig": ("krons.core.node", "NodeConfig"),
35
+ "create_node": ("krons.core.node", "create_node"),
36
+ "generate_ddl": ("krons.core.node", "generate_ddl"),
37
37
  # phrase
38
- "PHRASE_REGISTRY": ("kronos.core.phrase", "PHRASE_REGISTRY"),
39
- "Phrase": ("kronos.core.phrase", "Phrase"),
40
- "PhraseConfig": ("kronos.core.phrase", "PhraseConfig"),
41
- "PhraseError": ("kronos.core.phrase", "PhraseError"),
42
- "RequirementNotMet": ("kronos.core.phrase", "RequirementNotMet"),
43
- "create_phrase": ("kronos.core.phrase", "create_phrase"),
44
- "get_phrase": ("kronos.core.phrase", "get_phrase"),
45
- "list_phrases": ("kronos.core.phrase", "list_phrases"),
38
+ "PHRASE_REGISTRY": ("krons.core.phrase", "PHRASE_REGISTRY"),
39
+ "Phrase": ("krons.core.phrase", "Phrase"),
40
+ "PhraseConfig": ("krons.core.phrase", "PhraseConfig"),
41
+ "PhraseError": ("krons.core.phrase", "PhraseError"),
42
+ "RequirementNotMet": ("krons.core.phrase", "RequirementNotMet"),
43
+ "create_phrase": ("krons.core.phrase", "create_phrase"),
44
+ "get_phrase": ("krons.core.phrase", "get_phrase"),
45
+ "list_phrases": ("krons.core.phrase", "list_phrases"),
46
46
  # pile
47
- "Pile": ("kronos.core.pile", "Pile"),
47
+ "Pile": ("krons.core.pile", "Pile"),
48
48
  # processor
49
- "Executor": ("kronos.core.processor", "Executor"),
50
- "Processor": ("kronos.core.processor", "Processor"),
49
+ "Executor": ("krons.core.processor", "Executor"),
50
+ "Processor": ("krons.core.processor", "Processor"),
51
51
  # progression
52
- "Progression": ("kronos.core.progression", "Progression"),
52
+ "Progression": ("krons.core.progression", "Progression"),
53
53
  }
54
54
 
55
55
  _LOADED: dict[str, object] = {}
@@ -69,7 +69,7 @@ def __getattr__(name: str) -> object:
69
69
  _LOADED[name] = value
70
70
  return value
71
71
 
72
- raise AttributeError(f"module 'kronos.core' has no attribute {name!r}")
72
+ raise AttributeError(f"module 'krons.core' has no attribute {name!r}")
73
73
 
74
74
 
75
75
  def __dir__() -> list[str]:
@@ -8,7 +8,7 @@ import weakref
8
8
  from collections.abc import Awaitable, Callable
9
9
  from typing import Any, ClassVar
10
10
 
11
- from kronos.utils import is_coro_func
11
+ from krons.utils import is_coro_func
12
12
 
13
13
  logger = logging.getLogger(__name__)
14
14
 
@@ -11,15 +11,15 @@ from uuid import UUID, uuid4
11
11
  import orjson
12
12
  from pydantic import BaseModel, ConfigDict, Field, field_validator
13
13
 
14
- from kronos.protocols import (
14
+ from krons.protocols import (
15
15
  Deserializable,
16
16
  Hashable,
17
17
  Observable,
18
18
  Serializable,
19
19
  implements,
20
20
  )
21
- from kronos.types import MaybeSentinel, Unset, UnsetType, is_sentinel, is_unset
22
- from kronos.utils import (
21
+ from krons.types import MaybeSentinel, Unset, UnsetType, is_sentinel, is_unset
22
+ from krons.utils import (
23
23
  coerce_created_at,
24
24
  json_dump,
25
25
  load_type_from_string,
@@ -11,10 +11,10 @@ from typing import Any, final
11
11
  import orjson
12
12
  from pydantic import Field, field_serializer, field_validator
13
13
 
14
- from kronos.errors import KronError, KronTimeoutError
15
- from kronos.protocols import Invocable, Serializable, implements
16
- from kronos.types import Enum, MaybeSentinel, MaybeUnset, Unset, is_sentinel, is_unset
17
- from kronos.utils import async_synchronized, concurrency, json_dumpb
14
+ from krons.errors import KronError, KronTimeoutError
15
+ from krons.protocols import Invocable, Serializable, implements
16
+ from krons.types import Enum, MaybeSentinel, MaybeUnset, Unset, is_sentinel, is_unset
17
+ from krons.utils import async_synchronized, concurrency, json_dumpb
18
18
 
19
19
  from .element import LN_ELEMENT_FIELDS, Element
20
20
 
@@ -8,7 +8,7 @@ from collections import defaultdict
8
8
  from collections.abc import Awaitable, Callable
9
9
  from typing import Any
10
10
 
11
- from kronos.utils.concurrency import gather
11
+ from krons.utils.concurrency import gather
12
12
 
13
13
  __all__ = ("EventBus", "Handler")
14
14
 
@@ -9,10 +9,10 @@ from uuid import UUID
9
9
 
10
10
  from pydantic import Field, PrivateAttr, field_validator, model_validator
11
11
 
12
- from kronos.errors import ExistsError, NotFoundError
13
- from kronos.protocols import Serializable, implements
14
- from kronos.types import Unset, UnsetType
15
- from kronos.utils import extract_types, synchronized
12
+ from krons.errors import ExistsError, NotFoundError
13
+ from krons.protocols import Serializable, implements
14
+ from krons.types import Unset, UnsetType
15
+ from krons.utils import extract_types, synchronized
16
16
 
17
17
  from .element import Element
18
18
  from .pile import Pile
@@ -11,10 +11,10 @@ from uuid import UUID
11
11
  from pydantic import Field, PrivateAttr, field_validator, model_validator
12
12
  from typing_extensions import override
13
13
 
14
- from kronos.errors import NotFoundError
15
- from kronos.protocols import Containable, Deserializable, Serializable, implements
16
- from kronos.types import Unset, UnsetType, is_unset
17
- from kronos.utils import synchronized
14
+ from krons.errors import NotFoundError
15
+ from krons.protocols import Containable, Deserializable, Serializable, implements
16
+ from krons.types import Unset, UnsetType, is_unset
17
+ from krons.utils import synchronized
18
18
 
19
19
  from .element import Element
20
20
  from .node import Node
@@ -15,8 +15,8 @@ from uuid import UUID
15
15
 
16
16
  from pydantic import BaseModel, field_serializer, field_validator
17
17
 
18
- from kronos.protocols import Deserializable, Serializable, implements
19
- from kronos.types import (
18
+ from krons.protocols import Deserializable, Serializable, implements
19
+ from krons.types import (
20
20
  ModelConfig,
21
21
  Params,
22
22
  Unset,
@@ -25,8 +25,8 @@ from kronos.types import (
25
25
  is_unset,
26
26
  not_sentinel,
27
27
  )
28
- from kronos.types.db_types import VectorMeta, extract_kron_db_meta
29
- from kronos.utils import compute_hash, json_dump, now_utc
28
+ from krons.types.db_types import VectorMeta, extract_kron_db_meta
29
+ from krons.utils import compute_hash, json_dump, now_utc
30
30
 
31
31
  from .element import Element
32
32
 
@@ -258,7 +258,7 @@ class Node(Element):
258
258
  f"or Element.metadata for simple key-value pairs."
259
259
  )
260
260
 
261
- # Polymorphic: restore type from kronos_class in metadata
261
+ # Polymorphic: restore type from krons_class in metadata
262
262
  if isinstance(value, dict) and "metadata" in value:
263
263
  metadata = value.get("metadata", {})
264
264
  kron_class = metadata.get("kron_class")
@@ -503,7 +503,7 @@ class Node(Element):
503
503
  Computed integrity_hash, or None if integrity_hashing disabled
504
504
 
505
505
  """
506
- from kronos.utils import compute_chain_hash
506
+ from krons.utils import compute_chain_hash
507
507
 
508
508
  config = self.get_config()
509
509
  if not config.integrity_hashing:
@@ -704,8 +704,8 @@ def create_node(
704
704
  >>> Job = create_node("Job", embedding_enabled=True, embedding_dim=1536)
705
705
 
706
706
  """
707
- from kronos.specs.catalog import AuditSpecs, ContentSpecs
708
- from kronos.specs.operable import Operable
707
+ from krons.specs.catalog import AuditSpecs, ContentSpecs
708
+ from krons.specs.operable import Operable
709
709
 
710
710
  # Resolve embedding dimension
711
711
  resolved_embedding_dim: int | UnsetType = Unset
@@ -835,8 +835,8 @@ def generate_ddl(
835
835
  ValueError: If node_cls has no table_name configured
836
836
 
837
837
  """
838
- from kronos.specs.catalog import AuditSpecs, ContentSpecs
839
- from kronos.specs.operable import Operable
838
+ from krons.specs.catalog import AuditSpecs, ContentSpecs
839
+ from krons.specs.operable import Operable
840
840
 
841
841
  config = node_cls.get_config()
842
842
  if not config.is_persisted:
@@ -855,7 +855,7 @@ def generate_ddl(
855
855
 
856
856
  # Flatten content: extract fields from BaseModel instead of generic JSONB
857
857
  if config.flatten_content and content_type is not None:
858
- from kronos.specs.adapters.pydantic_adapter import PydanticSpecAdapter
858
+ from krons.specs.adapters.pydantic_adapter import PydanticSpecAdapter
859
859
 
860
860
  if isinstance(content_type, type) and issubclass(content_type, BaseModel):
861
861
  all_specs.extend(PydanticSpecAdapter.extract_specs(content_type))
@@ -12,11 +12,11 @@ from uuid import UUID
12
12
  from pydantic import Field, PrivateAttr, field_serializer, field_validator
13
13
  from typing_extensions import override
14
14
 
15
- from kronos.errors import ExistsError, NotFoundError
16
- from kronos.protocols import Containable, Deserializable, Serializable, implements
17
- from kronos.types import Unset, UnsetType, is_unset
18
- from kronos.utils import extract_types, load_type_from_string, synchronized
19
- from kronos.utils.concurrency import Lock as AsyncLock
15
+ from krons.errors import ExistsError, NotFoundError
16
+ from krons.protocols import Containable, Deserializable, Serializable, implements
17
+ from krons.types import Unset, UnsetType, is_unset
18
+ from krons.utils import extract_types, load_type_from_string, synchronized
19
+ from krons.utils.concurrency import Lock as AsyncLock
20
20
 
21
21
  from .element import Element
22
22
  from .progression import Progression
@@ -6,8 +6,8 @@ from __future__ import annotations
6
6
  import math
7
7
  from typing import TYPE_CHECKING, Any, ClassVar, Self
8
8
 
9
- from kronos.errors import ConfigurationError, NotFoundError, QueueFullError
10
- from kronos.utils import concurrency
9
+ from krons.errors import ConfigurationError, NotFoundError, QueueFullError
10
+ from krons.utils import concurrency
11
11
 
12
12
  from .event import Event, EventStatus
13
13
  from .flow import Flow
@@ -9,8 +9,8 @@ from uuid import UUID
9
9
 
10
10
  from pydantic import Field, PrivateAttr, field_validator
11
11
 
12
- from kronos.errors import NotFoundError
13
- from kronos.protocols import Containable, implements
12
+ from krons.errors import NotFoundError
13
+ from krons.protocols import Containable, implements
14
14
 
15
15
  from .element import Element
16
16
 
@@ -14,7 +14,7 @@ Mental model:
14
14
  Policy = external evaluation protocol (implementations in domain libs)
15
15
 
16
16
  Usage:
17
- from kronos.enforcement import Rule, Validator, RuleRegistry
17
+ from krons.enforcement import Rule, Validator, RuleRegistry
18
18
 
19
19
  # Register rules
20
20
  registry = RuleRegistry()
@@ -11,11 +11,11 @@ from datetime import datetime
11
11
  from typing import TYPE_CHECKING, Any, Protocol
12
12
  from uuid import UUID, uuid4
13
13
 
14
- from kronos.types.base import DataClass
15
- from kronos.types.identity import ID
14
+ from krons.types.base import DataClass
15
+ from krons.types.identity import ID
16
16
 
17
17
  if TYPE_CHECKING:
18
- from kronos.session import Branch, Session
18
+ from krons.session import Branch, Session
19
19
 
20
20
  __all__ = ("QueryFn", "RequestContext")
21
21
 
@@ -13,9 +13,9 @@ from collections.abc import Sequence
13
13
  from dataclasses import dataclass, field
14
14
  from typing import Any, Protocol, runtime_checkable
15
15
 
16
- from kronos.enforcement.context import RequestContext
17
- from kronos.specs.catalog._enforcement import EnforcementLevel
18
- from kronos.types.base import DataClass
16
+ from krons.enforcement.context import RequestContext
17
+ from krons.specs.catalog._enforcement import EnforcementLevel
18
+ from krons.types.base import DataClass
19
19
 
20
20
  __all__ = (
21
21
  "EnforcementLevel",
@@ -8,8 +8,8 @@ from dataclasses import dataclass, field
8
8
  from enum import IntEnum, auto
9
9
  from typing import Any
10
10
 
11
- from kronos.errors import ValidationError
12
- from kronos.types import Params
11
+ from krons.errors import ValidationError
12
+ from krons.types import Params
13
13
 
14
14
  __all__ = ("Rule", "RuleParams", "RuleQualifier", "ValidationError")
15
15
 
@@ -12,7 +12,7 @@ from typing import Any
12
12
 
13
13
  from pydantic import Field, PrivateAttr
14
14
 
15
- from kronos.services import ServiceBackend, ServiceConfig
15
+ from krons.services import ServiceBackend, ServiceConfig
16
16
 
17
17
  from .context import RequestContext
18
18
  from .policy import EnforcementLevel, PolicyEngine, PolicyResolver
@@ -7,14 +7,14 @@ from collections import deque
7
7
  from datetime import datetime
8
8
  from typing import TYPE_CHECKING, Any, ClassVar
9
9
 
10
- from kronos.types import is_sentinel
11
- from kronos.utils.concurrency import is_coro_func
10
+ from krons.types import is_sentinel
11
+ from krons.utils.concurrency import is_coro_func
12
12
 
13
13
  from .registry import RuleRegistry, get_default_registry
14
14
  from .rule import Rule, ValidationError
15
15
 
16
16
  if TYPE_CHECKING:
17
- from kronos.specs import Operable, Spec
17
+ from krons.specs import Operable, Spec
18
18
 
19
19
  __all__ = ("Validator",)
20
20
 
@@ -12,14 +12,14 @@ from __future__ import annotations
12
12
  from typing import TYPE_CHECKING, Any
13
13
  from uuid import UUID
14
14
 
15
- from kronos.core import Edge, Graph
16
- from kronos.types import Undefined, UndefinedType, is_sentinel, not_sentinel
17
- from kronos.utils._utils import to_uuid
15
+ from krons.core import Edge, Graph
16
+ from krons.types import Undefined, UndefinedType, is_sentinel, not_sentinel
17
+ from krons.utils._utils import to_uuid
18
18
 
19
19
  from .node import Operation
20
20
 
21
21
  if TYPE_CHECKING:
22
- from kronos.session import Branch
22
+ from krons.session import Branch
23
23
 
24
24
  __all__ = ("Builder", "OperationGraphBuilder")
25
25
 
@@ -15,15 +15,15 @@ from dataclasses import dataclass
15
15
  from typing import TYPE_CHECKING, Any
16
16
  from uuid import UUID
17
17
 
18
- from kronos.core import EventStatus, Graph
19
- from kronos.types import Undefined, UndefinedType, is_sentinel
20
- from kronos.utils import concurrency
21
- from kronos.utils.concurrency import CapacityLimiter, CompletionStream
18
+ from krons.core import EventStatus, Graph
19
+ from krons.types import Undefined, UndefinedType, is_sentinel
20
+ from krons.utils import concurrency
21
+ from krons.utils.concurrency import CapacityLimiter, CompletionStream
22
22
 
23
23
  from .node import Operation
24
24
 
25
25
  if TYPE_CHECKING:
26
- from kronos.session import Branch, Session
26
+ from krons.session import Branch, Session
27
27
 
28
28
  logger = logging.getLogger(__name__)
29
29
 
@@ -6,11 +6,11 @@ from typing import TYPE_CHECKING, Any
6
6
 
7
7
  from pydantic import Field, PrivateAttr
8
8
 
9
- from kronos.core import Event, Node
10
- from kronos.types import Undefined, UndefinedType, is_sentinel
9
+ from krons.core import Event, Node
10
+ from krons.types import Undefined, UndefinedType, is_sentinel
11
11
 
12
12
  if TYPE_CHECKING:
13
- from kronos.session import Branch, Session
13
+ from krons.session import Branch, Session
14
14
 
15
15
  __all__ = ("Operation", "create_operation")
16
16
 
@@ -18,18 +18,18 @@ from typing import TYPE_CHECKING
18
18
 
19
19
  # Lazy import mapping
20
20
  _LAZY_IMPORTS: dict[str, tuple[str, str]] = {
21
- "Calling": ("kronos.services.backend", "Calling"),
22
- "NormalizedResponse": ("kronos.services.backend", "NormalizedResponse"),
23
- "ServiceBackend": ("kronos.services.backend", "ServiceBackend"),
24
- "ServiceConfig": ("kronos.services.backend", "ServiceConfig"),
25
- "ServiceRegistry": ("kronos.services.registry", "ServiceRegistry"),
26
- "iModel": ("kronos.services.imodel", "iModel"),
27
- "Endpoint": ("kronos.services.endpoint", "Endpoint"),
28
- "EndpointConfig": ("kronos.services.endpoint", "EndpointConfig"),
29
- "APICalling": ("kronos.services.endpoint", "APICalling"),
30
- "HookRegistry": ("kronos.services.hook", "HookRegistry"),
31
- "HookEvent": ("kronos.services.hook", "HookEvent"),
32
- "HookPhase": ("kronos.services.hook", "HookPhase"),
21
+ "Calling": ("krons.services.backend", "Calling"),
22
+ "NormalizedResponse": ("krons.services.backend", "NormalizedResponse"),
23
+ "ServiceBackend": ("krons.services.backend", "ServiceBackend"),
24
+ "ServiceConfig": ("krons.services.backend", "ServiceConfig"),
25
+ "ServiceRegistry": ("krons.services.registry", "ServiceRegistry"),
26
+ "iModel": ("krons.services.imodel", "iModel"),
27
+ "Endpoint": ("krons.services.endpoint", "Endpoint"),
28
+ "EndpointConfig": ("krons.services.endpoint", "EndpointConfig"),
29
+ "APICalling": ("krons.services.endpoint", "APICalling"),
30
+ "HookRegistry": ("krons.services.hook", "HookRegistry"),
31
+ "HookEvent": ("krons.services.hook", "HookEvent"),
32
+ "HookPhase": ("krons.services.hook", "HookPhase"),
33
33
  }
34
34
 
35
35
  _LOADED: dict[str, object] = {}
@@ -49,7 +49,7 @@ def __getattr__(name: str) -> object:
49
49
  _LOADED[name] = value
50
50
  return value
51
51
 
52
- raise AttributeError(f"module 'kronos.services' has no attribute {name!r}")
52
+ raise AttributeError(f"module 'krons.services' has no attribute {name!r}")
53
53
 
54
54
 
55
55
  def __dir__() -> list[str]: