krons 0.1.0__py3-none-any.whl → 0.2.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 (162) hide show
  1. krons/__init__.py +49 -0
  2. krons/agent/__init__.py +144 -0
  3. krons/agent/mcps/__init__.py +14 -0
  4. krons/agent/mcps/loader.py +287 -0
  5. krons/agent/mcps/wrapper.py +799 -0
  6. krons/agent/message/__init__.py +20 -0
  7. krons/agent/message/action.py +69 -0
  8. krons/agent/message/assistant.py +52 -0
  9. krons/agent/message/common.py +49 -0
  10. krons/agent/message/instruction.py +130 -0
  11. krons/agent/message/prepare_msg.py +187 -0
  12. krons/agent/message/role.py +53 -0
  13. krons/agent/message/system.py +53 -0
  14. krons/agent/operations/__init__.py +82 -0
  15. krons/agent/operations/act.py +100 -0
  16. krons/agent/operations/generate.py +145 -0
  17. krons/agent/operations/llm_reparse.py +89 -0
  18. krons/agent/operations/operate.py +247 -0
  19. krons/agent/operations/parse.py +243 -0
  20. krons/agent/operations/react.py +286 -0
  21. krons/agent/operations/specs.py +235 -0
  22. krons/agent/operations/structure.py +151 -0
  23. krons/agent/operations/utils.py +79 -0
  24. krons/agent/providers/__init__.py +17 -0
  25. krons/agent/providers/anthropic_messages.py +146 -0
  26. krons/agent/providers/claude_code.py +276 -0
  27. krons/agent/providers/gemini.py +268 -0
  28. krons/agent/providers/match.py +75 -0
  29. krons/agent/providers/oai_chat.py +174 -0
  30. krons/agent/third_party/__init__.py +2 -0
  31. krons/agent/third_party/anthropic_models.py +154 -0
  32. krons/agent/third_party/claude_code.py +682 -0
  33. krons/agent/third_party/gemini_models.py +508 -0
  34. krons/agent/third_party/openai_models.py +295 -0
  35. krons/agent/tool.py +291 -0
  36. krons/core/__init__.py +127 -0
  37. krons/core/base/__init__.py +121 -0
  38. {kronos/core → krons/core/base}/broadcaster.py +7 -3
  39. {kronos/core → krons/core/base}/element.py +15 -7
  40. {kronos/core → krons/core/base}/event.py +41 -8
  41. {kronos/core → krons/core/base}/eventbus.py +4 -2
  42. {kronos/core → krons/core/base}/flow.py +14 -7
  43. {kronos/core → krons/core/base}/graph.py +27 -11
  44. {kronos/core → krons/core/base}/node.py +47 -22
  45. {kronos/core → krons/core/base}/pile.py +26 -12
  46. {kronos/core → krons/core/base}/processor.py +23 -9
  47. {kronos/core → krons/core/base}/progression.py +5 -3
  48. {kronos → krons/core}/specs/__init__.py +0 -5
  49. {kronos → krons/core}/specs/adapters/dataclass_field.py +16 -8
  50. {kronos → krons/core}/specs/adapters/pydantic_adapter.py +11 -5
  51. {kronos → krons/core}/specs/adapters/sql_ddl.py +16 -10
  52. {kronos → krons/core}/specs/catalog/__init__.py +2 -2
  53. {kronos → krons/core}/specs/catalog/_audit.py +3 -3
  54. {kronos → krons/core}/specs/catalog/_common.py +2 -2
  55. {kronos → krons/core}/specs/catalog/_content.py +5 -5
  56. {kronos → krons/core}/specs/catalog/_enforcement.py +4 -4
  57. {kronos → krons/core}/specs/factory.py +7 -7
  58. {kronos → krons/core}/specs/operable.py +9 -3
  59. {kronos → krons/core}/specs/protocol.py +4 -2
  60. {kronos → krons/core}/specs/spec.py +25 -13
  61. {kronos → krons/core}/types/base.py +7 -5
  62. {kronos → krons/core}/types/db_types.py +2 -2
  63. {kronos → krons/core}/types/identity.py +1 -1
  64. {kronos → krons}/errors.py +13 -13
  65. {kronos → krons}/protocols.py +9 -4
  66. krons/resource/__init__.py +89 -0
  67. {kronos/services → krons/resource}/backend.py +50 -24
  68. {kronos/services → krons/resource}/endpoint.py +28 -14
  69. {kronos/services → krons/resource}/hook.py +22 -9
  70. {kronos/services → krons/resource}/imodel.py +50 -32
  71. {kronos/services → krons/resource}/registry.py +27 -25
  72. {kronos/services → krons/resource}/utilities/rate_limited_executor.py +10 -6
  73. {kronos/services → krons/resource}/utilities/rate_limiter.py +4 -2
  74. {kronos/services → krons/resource}/utilities/resilience.py +17 -7
  75. krons/resource/utilities/token_calculator.py +185 -0
  76. {kronos → krons}/session/__init__.py +12 -17
  77. krons/session/constraints.py +70 -0
  78. {kronos → krons}/session/exchange.py +14 -6
  79. {kronos → krons}/session/message.py +4 -2
  80. krons/session/registry.py +35 -0
  81. {kronos → krons}/session/session.py +165 -174
  82. krons/utils/__init__.py +85 -0
  83. krons/utils/_function_arg_parser.py +99 -0
  84. krons/utils/_pythonic_function_call.py +249 -0
  85. {kronos → krons}/utils/_to_list.py +9 -3
  86. {kronos → krons}/utils/_utils.py +9 -5
  87. {kronos → krons}/utils/concurrency/__init__.py +38 -38
  88. {kronos → krons}/utils/concurrency/_async_call.py +6 -4
  89. {kronos → krons}/utils/concurrency/_errors.py +3 -1
  90. {kronos → krons}/utils/concurrency/_patterns.py +3 -1
  91. {kronos → krons}/utils/concurrency/_resource_tracker.py +6 -2
  92. krons/utils/display.py +257 -0
  93. {kronos → krons}/utils/fuzzy/__init__.py +6 -1
  94. {kronos → krons}/utils/fuzzy/_fuzzy_match.py +14 -8
  95. {kronos → krons}/utils/fuzzy/_string_similarity.py +3 -1
  96. {kronos → krons}/utils/fuzzy/_to_dict.py +3 -1
  97. krons/utils/schemas/__init__.py +26 -0
  98. krons/utils/schemas/_breakdown_pydantic_annotation.py +131 -0
  99. krons/utils/schemas/_formatter.py +72 -0
  100. krons/utils/schemas/_minimal_yaml.py +151 -0
  101. krons/utils/schemas/_typescript.py +153 -0
  102. {kronos → krons}/utils/sql/_sql_validation.py +1 -1
  103. krons/utils/validators/__init__.py +3 -0
  104. krons/utils/validators/_validate_image_url.py +56 -0
  105. krons/work/__init__.py +126 -0
  106. krons/work/engine.py +333 -0
  107. krons/work/form.py +305 -0
  108. {kronos → krons/work}/operations/__init__.py +7 -4
  109. {kronos → krons/work}/operations/builder.py +4 -4
  110. {kronos/enforcement → krons/work/operations}/context.py +37 -6
  111. {kronos → krons/work}/operations/flow.py +17 -9
  112. krons/work/operations/node.py +103 -0
  113. krons/work/operations/registry.py +103 -0
  114. {kronos/specs → krons/work}/phrase.py +131 -14
  115. {kronos/enforcement → krons/work}/policy.py +3 -3
  116. krons/work/report.py +268 -0
  117. krons/work/rules/__init__.py +47 -0
  118. {kronos/enforcement → krons/work/rules}/common/boolean.py +3 -1
  119. {kronos/enforcement → krons/work/rules}/common/choice.py +9 -3
  120. {kronos/enforcement → krons/work/rules}/common/number.py +3 -1
  121. {kronos/enforcement → krons/work/rules}/common/string.py +9 -3
  122. {kronos/enforcement → krons/work/rules}/rule.py +2 -2
  123. {kronos/enforcement → krons/work/rules}/validator.py +21 -6
  124. {kronos/enforcement → krons/work}/service.py +16 -7
  125. krons/work/worker.py +266 -0
  126. {krons-0.1.0.dist-info → krons-0.2.0.dist-info}/METADATA +19 -5
  127. krons-0.2.0.dist-info/RECORD +154 -0
  128. kronos/core/__init__.py +0 -145
  129. kronos/enforcement/__init__.py +0 -57
  130. kronos/operations/node.py +0 -101
  131. kronos/operations/registry.py +0 -92
  132. kronos/services/__init__.py +0 -81
  133. kronos/specs/adapters/__init__.py +0 -0
  134. kronos/utils/__init__.py +0 -40
  135. krons-0.1.0.dist-info/RECORD +0 -101
  136. {kronos → krons/core/specs/adapters}/__init__.py +0 -0
  137. {kronos → krons/core}/specs/adapters/_utils.py +0 -0
  138. {kronos → krons/core}/specs/adapters/factory.py +0 -0
  139. {kronos → krons/core}/types/__init__.py +0 -0
  140. {kronos → krons/core}/types/_sentinel.py +0 -0
  141. {kronos → krons}/py.typed +0 -0
  142. {kronos/services → krons/resource}/utilities/__init__.py +0 -0
  143. {kronos/services → krons/resource}/utilities/header_factory.py +0 -0
  144. {kronos → krons}/utils/_hash.py +0 -0
  145. {kronos → krons}/utils/_json_dump.py +0 -0
  146. {kronos → krons}/utils/_lazy_init.py +0 -0
  147. {kronos → krons}/utils/_to_num.py +0 -0
  148. {kronos → krons}/utils/concurrency/_cancel.py +0 -0
  149. {kronos → krons}/utils/concurrency/_primitives.py +0 -0
  150. {kronos → krons}/utils/concurrency/_priority_queue.py +0 -0
  151. {kronos → krons}/utils/concurrency/_run_async.py +0 -0
  152. {kronos → krons}/utils/concurrency/_task.py +0 -0
  153. {kronos → krons}/utils/concurrency/_utils.py +0 -0
  154. {kronos → krons}/utils/fuzzy/_extract_json.py +0 -0
  155. {kronos → krons}/utils/fuzzy/_fuzzy_json.py +0 -0
  156. {kronos → krons}/utils/sql/__init__.py +0 -0
  157. {kronos/enforcement → krons/work/rules}/common/__init__.py +0 -0
  158. {kronos/enforcement → krons/work/rules}/common/mapping.py +0 -0
  159. {kronos/enforcement → krons/work/rules}/common/model.py +0 -0
  160. {kronos/enforcement → krons/work/rules}/registry.py +0 -0
  161. {krons-0.1.0.dist-info → krons-0.2.0.dist-info}/WHEEL +0 -0
  162. {krons-0.1.0.dist-info → krons-0.2.0.dist-info}/licenses/LICENSE +0 -0
kronos/operations/node.py DELETED
@@ -1,101 +0,0 @@
1
- # Copyright (c) 2025 - 2026, HaiyangLi <quantocean.li at gmail dot com>
2
- # SPDX-License-Identifier: Apache-2.0
3
- from __future__ import annotations
4
-
5
- from typing import TYPE_CHECKING, Any
6
-
7
- from pydantic import Field, PrivateAttr
8
-
9
- from kronos.core import Event, Node
10
- from kronos.types import Undefined, UndefinedType, is_sentinel
11
-
12
- if TYPE_CHECKING:
13
- from kronos.session import Branch, Session
14
-
15
- __all__ = ("Operation", "create_operation")
16
-
17
-
18
- class Operation(Node, Event):
19
- operation_type: str
20
- parameters: dict[str, Any] | Any = Field(
21
- default_factory=dict,
22
- description="Operation parameters (dict or Pydantic model)",
23
- )
24
-
25
- _session: Any = PrivateAttr(default=None)
26
- _branch: Any = PrivateAttr(default=None)
27
-
28
- def bind(self, session: Session, branch: Branch) -> Operation:
29
- """Bind session and branch for execution.
30
-
31
- Must be called before invoke() if not using Session.conduct().
32
-
33
- Args:
34
- session: Session with operations registry and services
35
- branch: Branch for message context
36
-
37
- Returns:
38
- Self for chaining
39
- """
40
- self._session = session
41
- self._branch = branch
42
- return self
43
-
44
- def _require_binding(self) -> tuple[Session, Branch]:
45
- """Return bound (session, branch) tuple or raise RuntimeError if unbound."""
46
- if self._session is None or self._branch is None:
47
- raise RuntimeError(
48
- "Operation not bound to session/branch. "
49
- "Use operation.bind(session, branch) or session.conduct(...)"
50
- )
51
- return self._session, self._branch
52
-
53
- async def _invoke(self) -> Any:
54
- """Execute via session's operation registry. Called by Event.invoke().
55
-
56
- Returns:
57
- Factory result (stored in execution.response).
58
-
59
- Raises:
60
- RuntimeError: If not bound.
61
- KeyError: If operation_type not registered.
62
- """
63
- session, branch = self._require_binding()
64
- factory = session.operations.get(self.operation_type)
65
- return await factory(session, branch, self.parameters)
66
-
67
- def __repr__(self) -> str:
68
- bound = "bound" if self._session is not None else "unbound"
69
- return (
70
- f"Operation(type={self.operation_type}, status={self.execution.status.value}, {bound})"
71
- )
72
-
73
-
74
- def create_operation(
75
- operation_type: str | UndefinedType = Undefined,
76
- parameters: dict[str, Any] | UndefinedType = Undefined,
77
- **kwargs,
78
- ) -> Operation:
79
- """Factory for Operation nodes.
80
-
81
- Args:
82
- operation_type: Registry key (required).
83
- parameters: Factory arguments dict (default: {}).
84
- **kwargs: Additional fields (metadata, timeout, etc.).
85
-
86
- Returns:
87
- Unbound Operation ready for bind() and invoke().
88
-
89
- Raises:
90
- ValueError: If operation_type not provided.
91
- """
92
- if is_sentinel(operation_type):
93
- raise ValueError("operation_type is required")
94
-
95
- resolved_params: dict[str, Any] = {} if is_sentinel(parameters) else parameters
96
-
97
- return Operation(
98
- operation_type=operation_type,
99
- parameters=resolved_params,
100
- **kwargs,
101
- )
@@ -1,92 +0,0 @@
1
- # Copyright (c) 2025 - 2026, HaiyangLi <quantocean.li at gmail dot com>
2
- # SPDX-License-Identifier: Apache-2.0
3
-
4
- """Per-session operation factory registry.
5
-
6
- Maps operation names to async factory functions. Instantiated per-Session
7
- for isolation, testability, and per-session customization.
8
- """
9
-
10
- from __future__ import annotations
11
-
12
- from collections.abc import Awaitable, Callable
13
- from typing import Any
14
-
15
- __all__ = ("OperationRegistry",)
16
-
17
- OperationFactory = Callable[..., Awaitable[Any]]
18
- """Factory signature: async (session, branch, parameters) -> result"""
19
-
20
-
21
- class OperationRegistry:
22
- """Map operation names to async factory functions.
23
-
24
- Per-session registry (not global) for isolation and testability.
25
-
26
- Example:
27
- registry = OperationRegistry()
28
- registry.register("chat", chat_factory)
29
- factory = registry.get("chat")
30
- result = await factory(session, branch, params)
31
- """
32
-
33
- def __init__(self):
34
- """Initialize empty registry."""
35
- self._factories: dict[str, OperationFactory] = {}
36
-
37
- def register(
38
- self,
39
- operation_name: str,
40
- factory: OperationFactory,
41
- *,
42
- override: bool = False,
43
- ) -> None:
44
- """Register factory for operation name.
45
-
46
- Args:
47
- operation_name: Lookup key.
48
- factory: Async (session, branch, params) -> result.
49
- override: Allow replacing existing. Default False.
50
-
51
- Raises:
52
- ValueError: If name exists and override=False.
53
- """
54
- if operation_name in self._factories and not override:
55
- raise ValueError(
56
- f"Operation '{operation_name}' already registered. Use override=True to replace."
57
- )
58
- self._factories[operation_name] = factory
59
-
60
- def get(self, operation_name: str) -> OperationFactory:
61
- """Get factory by name. Raises KeyError with available names if not found."""
62
- if operation_name not in self._factories:
63
- raise KeyError(
64
- f"Operation '{operation_name}' not registered. Available: {self.list_names()}"
65
- )
66
- return self._factories[operation_name]
67
-
68
- def has(self, operation_name: str) -> bool:
69
- """Check if name is registered."""
70
- return operation_name in self._factories
71
-
72
- def unregister(self, operation_name: str) -> bool:
73
- """Remove registration. Returns True if existed."""
74
- if operation_name in self._factories:
75
- del self._factories[operation_name]
76
- return True
77
- return False
78
-
79
- def list_names(self) -> list[str]:
80
- """Return all registered operation names."""
81
- return list(self._factories.keys())
82
-
83
- def __contains__(self, operation_name: str) -> bool:
84
- """Support 'name in registry' syntax."""
85
- return operation_name in self._factories
86
-
87
- def __len__(self) -> int:
88
- """Count of registered operations."""
89
- return len(self._factories)
90
-
91
- def __repr__(self) -> str:
92
- return f"OperationRegistry(operations={self.list_names()})"
@@ -1,81 +0,0 @@
1
- # Copyright (c) 2025 - 2026, HaiyangLi <quantocean.li at gmail dot com>
2
- # SPDX-License-Identifier: Apache-2.0
3
-
4
- """Services module: iModel, ServiceBackend, hooks, and registry.
5
-
6
- Core exports:
7
- - iModel: Unified service interface with rate limiting and hooks
8
- - ServiceBackend/Endpoint: Backend abstractions for API calls
9
- - HookRegistry/HookEvent/HookPhase: Lifecycle hook system
10
- - ServiceRegistry: O(1) name-based service lookup
11
-
12
- Uses lazy loading for fast import.
13
- """
14
-
15
- from __future__ import annotations
16
-
17
- from typing import TYPE_CHECKING
18
-
19
- # Lazy import mapping
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"),
33
- }
34
-
35
- _LOADED: dict[str, object] = {}
36
-
37
-
38
- def __getattr__(name: str) -> object:
39
- """Lazy import attributes on first access."""
40
- if name in _LOADED:
41
- return _LOADED[name]
42
-
43
- if name in _LAZY_IMPORTS:
44
- from importlib import import_module
45
-
46
- module_name, attr_name = _LAZY_IMPORTS[name]
47
- module = import_module(module_name)
48
- value = getattr(module, attr_name)
49
- _LOADED[name] = value
50
- return value
51
-
52
- raise AttributeError(f"module 'kronos.services' has no attribute {name!r}")
53
-
54
-
55
- def __dir__() -> list[str]:
56
- """Return all available attributes for autocomplete."""
57
- return list(__all__)
58
-
59
-
60
- # TYPE_CHECKING block for static analysis
61
- if TYPE_CHECKING:
62
- from .backend import Calling, NormalizedResponse, ServiceBackend, ServiceConfig
63
- from .endpoint import APICalling, Endpoint, EndpointConfig
64
- from .hook import HookEvent, HookPhase, HookRegistry
65
- from .imodel import iModel
66
- from .registry import ServiceRegistry
67
-
68
- __all__ = (
69
- "APICalling",
70
- "Calling",
71
- "Endpoint",
72
- "EndpointConfig",
73
- "HookEvent",
74
- "HookPhase",
75
- "HookRegistry",
76
- "NormalizedResponse",
77
- "ServiceBackend",
78
- "ServiceConfig",
79
- "ServiceRegistry",
80
- "iModel",
81
- )
File without changes
kronos/utils/__init__.py DELETED
@@ -1,40 +0,0 @@
1
- from ._hash import (
2
- GENESIS_HASH,
3
- MAX_HASH_INPUT_BYTES,
4
- HashAlgorithm,
5
- compute_chain_hash,
6
- compute_hash,
7
- hash_obj,
8
- )
9
- from ._json_dump import json_dump, json_dumpb, json_lines_iter
10
- from ._to_list import to_list
11
- from ._to_num import to_num
12
- from ._utils import (
13
- async_synchronized,
14
- coerce_created_at,
15
- create_path,
16
- extract_types,
17
- get_bins,
18
- import_module,
19
- is_import_installed,
20
- load_type_from_string,
21
- now_utc,
22
- register_type_prefix,
23
- synchronized,
24
- to_uuid,
25
- )
26
- from .concurrency import alcall, is_coro_func
27
- from .fuzzy import (
28
- SimilarityAlgo,
29
- extract_json,
30
- fuzzy_json,
31
- fuzzy_match_keys,
32
- string_similarity,
33
- to_dict,
34
- )
35
- from .sql._sql_validation import (
36
- MAX_IDENTIFIER_LENGTH,
37
- SAFE_IDENTIFIER_PATTERN,
38
- sanitize_order_by,
39
- validate_identifier,
40
- )
@@ -1,101 +0,0 @@
1
- kronos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- kronos/errors.py,sha256=qzedv7hxB66-1hxNZYooetp-x-Yo71g_NquJH931YsQ,4038
3
- kronos/protocols.py,sha256=J7mMmBIk-sS5CPwYk1tPo-W8UAnau8_v6wruDhDelbs,15239
4
- kronos/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- kronos/core/__init__.py,sha256=mJZUnPoTAwXhGf7FqeNdroL_jlUOpSq-Z1BE2zBeEuo,4218
6
- kronos/core/broadcaster.py,sha256=BGbedu6G6tjwC3RK3z-PynllI2ksLue3Pnldkv9WDnI,3966
7
- kronos/core/element.py,sha256=XvAovkcsFc3qgBNJaPP6vdXt-uU82-WJoxKzQq_AbC8,7536
8
- kronos/core/event.py,sha256=FdPrMOFECkQGAlOL_BPt39OojlybQNrKlrhE6c5jUJI,10605
9
- kronos/core/eventbus.py,sha256=1Qw2RWERQU7T3epFmOpUcy8ZAht1dXHJEl4rx4Roakc,3732
10
- kronos/core/flow.py,sha256=nsmT2q7xzoYElgW-kVUE5fzWYg1aNQiZvwaXp_VSmL8,12275
11
- kronos/core/graph.py,sha256=08Mkmt0mNxNUXqj2sff-cIGDK9K6MFnqvcDjPHcdMjw,15801
12
- kronos/core/node.py,sha256=RVjwvRU6fxKqVRekl8cnltK-Y28YM200erHOAunFVB0,34341
13
- kronos/core/pile.py,sha256=c1Bsjgi174gX3pQl6yrD1fLVGIw9qeBPF6iz0u1d8zI,20898
14
- kronos/core/processor.py,sha256=1GbJZKrk-j2tUqS-Z96syW58vEBY4mOCRI9T81ln468,18486
15
- kronos/core/progression.py,sha256=6Lm8KvzjzUJSKOE4bRMI2ptZcit5YhvSZgdf0de4mdA,9808
16
- kronos/enforcement/__init__.py,sha256=l4rN4LsY6nTomiDR67Y2IZxymcsp4rJticov0ZQWMCo,1654
17
- kronos/enforcement/context.py,sha256=9L9Ta2EBot0eomk1zy-ExsevXCw70aArxs5kjeqaB-k,4242
18
- kronos/enforcement/policy.py,sha256=QxneBiY1Yy53c-RdDt6jOJHfc3HsFdKKfGSlahzw6Tg,2135
19
- kronos/enforcement/registry.py,sha256=JFdwcIVtysntj6wMY3bO7-hqwNU7QIoIbEQuhsy5O4U,4742
20
- kronos/enforcement/rule.py,sha256=6FK7Nlhek07HA55WRJIjcZrAtjPn1TV-QROipZ2-X8U,9468
21
- kronos/enforcement/service.py,sha256=KP5Yzf3IxcsIHba-DNrngtqYkl3hPCbDjn72L9zXXH4,11850
22
- kronos/enforcement/validator.py,sha256=ZnCzHhRI1PNZdmlN0S7erqlD_CztQ9Ew4fnR-cPkrwU,6762
23
- kronos/enforcement/common/__init__.py,sha256=U0rEcHOxLftR4-xJNuuXMSDYFAvbs0KzwV3GhlZcUrY,1026
24
- kronos/enforcement/common/boolean.py,sha256=vUmOpCMr7kW0tkS5zdvmgY6RouJ_8Xl9Yd0MTCbItz8,2614
25
- kronos/enforcement/common/choice.py,sha256=hbziQjfc60Azq-4P5PSEw3KYWm80JPhBg6rgVl3MXaE,3190
26
- kronos/enforcement/common/mapping.py,sha256=Loq54MNEtwpnHN0aypTjFOqwoOKLEysddHh-JESedvs,3824
27
- kronos/enforcement/common/model.py,sha256=xmM6coEThf_fgIiqJiyDgvdfib_FpVeY6LgWPVcWSwU,3026
28
- kronos/enforcement/common/number.py,sha256=_WM_LGSsU1D-HHE6O0nd4tRV20tTw06sOyhaevwoZu4,3132
29
- kronos/enforcement/common/string.py,sha256=PAknCSgCPTld1niSsZjljc5_j-cDZVr8S3OvNYFEXJM,4992
30
- kronos/operations/__init__.py,sha256=ARzm5ywMn3YzW8vIWfKcy8CeN5DSxi_mGxtyxty03gk,917
31
- kronos/operations/builder.py,sha256=l7odbgf5O0vS6W35jjW87J3qQ-hbwhdc_W1aAO3T5ys,7778
32
- kronos/operations/flow.py,sha256=eRUTUJsX1JBN-yaveabRHqJnwpts0BIWYMTt_kds8ng,14701
33
- kronos/operations/node.py,sha256=LcIOEl8yaMtjYZ1aujEAUmdOsvEr-xgTYKF4EygjZEY,3169
34
- kronos/operations/registry.py,sha256=kEE484Q3J4CvcOuP-1AUPQg5i-ff8WcSjQntOXhgqgg,3046
35
- kronos/services/__init__.py,sha256=MEsfbUX5M3RWElxQclnvlc89eY-nZLZMmzLwOdVTtbU,2587
36
- kronos/services/backend.py,sha256=QrkqDBp1jQOLf0ajrXDsdGDLZBfMLZUKw4VeAjj_uYY,10254
37
- kronos/services/endpoint.py,sha256=FCn3fn9bNZ_lohL8wHPRKYVh3cGbsDE9Un75VXaCE0c,22076
38
- kronos/services/hook.py,sha256=w3802QhoFPTieQoGmziCsJ1ZKKtDNKMIGJ6Y3b5BptE,16913
39
- kronos/services/imodel.py,sha256=snHo4Nd6C0Y9wpksEQSP7rYH4H8EsMTshtLAfhu8CPI,18195
40
- kronos/services/registry.py,sha256=rdNgmaoLb1X54S29sOHBjBvwy-fxy4pivW95i72LfIM,3790
41
- kronos/services/utilities/__init__.py,sha256=-ycdoYgtXrliJwbtQGMHBRvZL0qX2xLzooL3RNV99x4,1013
42
- kronos/services/utilities/header_factory.py,sha256=WZCCZMh9EJVi8tnY7dJD07FcTOrrUMvecJmzy8P65Os,2992
43
- kronos/services/utilities/rate_limited_executor.py,sha256=1UoXlfWXZXB5gKJSOaS_4DYrnCK0PKp3QGpoiv1PeqQ,9654
44
- kronos/services/utilities/rate_limiter.py,sha256=P26nzZ0uS8wranOeaPBtwGl_jaWdM_roev4bzRRZZg8,5958
45
- kronos/services/utilities/resilience.py,sha256=u-hOsDs_Dv0YahVGfzh5AhwgPAuEottAyGGDx_kFKOY,14241
46
- kronos/session/__init__.py,sha256=EZDOlXoGcJ5VT9NPpx5fV_vIpRF_DsavQPcmeG7xiFQ,1210
47
- kronos/session/exchange.py,sha256=W8F6LD5A_vkqcBIvqH5fBQBCIN7gO_IYvdhdqQ3yFYo,9028
48
- kronos/session/message.py,sha256=nWL_2Id3KWYG-XA1EP3j3SPUdDIQyEhfroep6P8vjn4,1994
49
- kronos/session/session.py,sha256=ChbWdcXEgyMVqnb5SMsKvtoSthHasf9iYVQ7_yiIs3A,14252
50
- kronos/specs/__init__.py,sha256=F6QOVdo1EK5jK6b17rgQqX8i8PWURUxkFzBSz3g0L0A,631
51
- kronos/specs/factory.py,sha256=fV6runuu6wohzFZfMLukca9DVpzx9SPK93lHtWfLyXE,3344
52
- kronos/specs/operable.py,sha256=K18_1NH-slTiQPKjOnUVqlkoTvgg7g3-xwSCW_-0EnI,11045
53
- kronos/specs/phrase.py,sha256=blivu6UK41zdUa_isG1H-T_ByryZtaJwyH7ToXz9LLc,15129
54
- kronos/specs/protocol.py,sha256=fptZHyVZ6xtHB-nDxDFxh9wPK5vfl4K1qVGKHWPixt0,4366
55
- kronos/specs/spec.py,sha256=tNsIxGhoAZSR04Jyc1bPkcTXMHjtVvwh6maabmWq6AM,18519
56
- kronos/specs/adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
- kronos/specs/adapters/_utils.py,sha256=ChWH-C2LRXaXiWM3n7P0DZ8Oci5dSDq59DIJtHx2h-g,1365
58
- kronos/specs/adapters/dataclass_field.py,sha256=6fVh5ynvhfA-nUdEgdv-CvUACXxf5ohL40FMiEJr1V0,8682
59
- kronos/specs/adapters/factory.py,sha256=_LoSMCtHNkK5kNL5LUDjHvJJ2BtDHAaW1gly5LpNPXQ,1572
60
- kronos/specs/adapters/pydantic_adapter.py,sha256=DbomeHDEi9rfz470IlwJ0afHLgo4NsDWIKrJH9WZPlE,10365
61
- kronos/specs/adapters/sql_ddl.py,sha256=77MrNO0iUmNF5RtyQgdo98qqL-R5Uhr7ElwRnGR-G4c,31338
62
- kronos/specs/catalog/__init__.py,sha256=Ef1aq7FWWyvvFi6SVSNibAZ82xabd9CBs5hiMDcMpSw,1223
63
- kronos/specs/catalog/_audit.py,sha256=nRP4JReAagu9MkV5GY_KP6e5IQuyXyY4qE_ToVFC_Hg,1253
64
- kronos/specs/catalog/_common.py,sha256=S7d1M6UhdiwYaJpeMPWXq-99Ki8OhP1aygBv8WoCUcY,1199
65
- kronos/specs/catalog/_content.py,sha256=suhFDQP7D26dfaILMb5JAZCJUS0018dvC7DAU4dsOIA,1957
66
- kronos/specs/catalog/_enforcement.py,sha256=erPguU5z0QG0oF8gyXs3bgDkZ3pqxRyPUal9juKGMt4,2115
67
- kronos/types/__init__.py,sha256=pJ6kuop7vSLZp5jMBs-CQ7CHRjvUuO8kHhpZ34KM85I,1049
68
- kronos/types/_sentinel.py,sha256=QJGyRAYNkJ2ylw6dhxPHJNgmxqBdorBd-xx7pNrUykw,8855
69
- kronos/types/base.py,sha256=-8CqIGE6fXbtEB8Q9c0GRPyqUemrdtMV5GttnQ8ua7Y,12310
70
- kronos/types/db_types.py,sha256=mn0RvNgjv4BTX2MKuwzhaA_KkibrbVlubGZuuMe4xR8,8128
71
- kronos/types/identity.py,sha256=sfQhjUXCtBGBMRiOCz3t4Zbz9hUVgoSvXyINu6_Y99o,1950
72
- kronos/utils/__init__.py,sha256=BUQLqQoZ6Bz9eA0nEz9urPTVVS-FSOUWXZe3LMbhEj4,847
73
- kronos/utils/_hash.py,sha256=W2Ma9v8-INPaGkur7GTtbF8KwuXSJNSwk8DCNPRvx8Q,6859
74
- kronos/utils/_json_dump.py,sha256=rpBmr0NCmIKRdmpgn1nSWIHI3FTsGYsQjOa3YTxCi3M,12482
75
- kronos/utils/_lazy_init.py,sha256=bCx_W3dfzirB5KnAt6_jmbnwOk2xbU7-kgOhMQqzW70,1806
76
- kronos/utils/_to_list.py,sha256=8cBK4lzE4FdJyGSg-I733VFcpnp-EA6naVGNj7G11A4,6032
77
- kronos/utils/_to_num.py,sha256=NyyIL9Az1EaW6QFh9R7AeJdaUPoSRBNVBX9yj78wpok,3102
78
- kronos/utils/_utils.py,sha256=ujJBqOgwdwca74qyqzv19PjjFy1cd5rYs18vzMNtTAM,11092
79
- kronos/utils/concurrency/__init__.py,sha256=by3L94JRr_NVIvECbHG5FUaHHozZ20ol05IkyrtDuJw,6792
80
- kronos/utils/concurrency/_async_call.py,sha256=0FFXc2up6C7l9QB-Avn2Z5x_CMoV6Tj_4GkWiyiQ8TU,10209
81
- kronos/utils/concurrency/_cancel.py,sha256=b9f6yT8gObS6Y3EWKoGzNfYxqM1ZrN_8ctfyIjT1m1U,3326
82
- kronos/utils/concurrency/_errors.py,sha256=tmszbwq7NPy3VTqJpvXxQ_2IVE024KkCqC27Bsoo4ZU,2597
83
- kronos/utils/concurrency/_patterns.py,sha256=OGCLd5ndMV7fZxKxTT6lPJTIgwu8euEBbhopIt6_Ijs,11534
84
- kronos/utils/concurrency/_primitives.py,sha256=D1Rl1hujXXPdL4Mw6eW5EN8utM3bh8vmmFtXmuvsDw0,9024
85
- kronos/utils/concurrency/_priority_queue.py,sha256=wGi6ESS6AIZ0QNRBQR5UwcSQI5GhKjATBC_aEw6c0aQ,4342
86
- kronos/utils/concurrency/_resource_tracker.py,sha256=hTn0PmxWbQ0uwTGB1YuPUKhtso2VyY7SVWtl4dkzZSU,3151
87
- kronos/utils/concurrency/_run_async.py,sha256=A_vuPi9-wWRr3oXiAMnv3l7MV2B76jkBXoVztX_Vcgo,1940
88
- kronos/utils/concurrency/_task.py,sha256=4ivkiUUbutheoYZ-G8-mTfHX4YgWguGIy1v5hSU871w,2528
89
- kronos/utils/concurrency/_utils.py,sha256=CyH_z4prYFeCFgwk4Pc3q0m5NRzDB2TP-G2oxdM_-C0,2136
90
- kronos/utils/fuzzy/__init__.py,sha256=0dZRhC7sgH0b3oiNFdnUpPq7Jgsb84sFXtCsxCFkdss,354
91
- kronos/utils/fuzzy/_extract_json.py,sha256=6Y-QEfXrTBdaNmlbMfVm6xJPBKI0RBbr_t0VYGE7nMo,2922
92
- kronos/utils/fuzzy/_fuzzy_json.py,sha256=hV6v9YkQpGxwOnhpLM6jkrG5fZKYluMTxgdqsk5sTew,9151
93
- kronos/utils/fuzzy/_fuzzy_match.py,sha256=sEahAE3M2dw7Y0XzHecrAwF6ZDEiHBoUJQYQiUyx7Ho,4857
94
- kronos/utils/fuzzy/_string_similarity.py,sha256=ZwAerTdXDen-6Q3Kg46ckXF_T69xFLYBEVdt8EZq95M,6141
95
- kronos/utils/fuzzy/_to_dict.py,sha256=ORQy-_6snt6TmVJZI-MHDoDO7jFYg-xlaxU_pBbfk7s,12911
96
- kronos/utils/sql/__init__.py,sha256=yNjm9Dr-ZjrZSD3Lext7fPR80qX5svGT2PnXqlb5qXs,264
97
- kronos/utils/sql/_sql_validation.py,sha256=FGPjLo4BlzFRjbbpOchTW9xUGmAbwQ3giB8k6aOXGSo,4230
98
- krons-0.1.0.dist-info/METADATA,sha256=f9vtCtrL8rcCr_6xCf-HNQ4T9twEBCPDiLf4EdvGmoU,2001
99
- krons-0.1.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
100
- krons-0.1.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
101
- krons-0.1.0.dist-info/RECORD,,
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes