AbstractRuntime 0.0.1__py3-none-any.whl → 0.4.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 (37) hide show
  1. abstractruntime/__init__.py +7 -2
  2. abstractruntime/core/__init__.py +9 -2
  3. abstractruntime/core/config.py +114 -0
  4. abstractruntime/core/event_keys.py +62 -0
  5. abstractruntime/core/models.py +55 -1
  6. abstractruntime/core/runtime.py +2609 -24
  7. abstractruntime/core/vars.py +189 -0
  8. abstractruntime/evidence/__init__.py +10 -0
  9. abstractruntime/evidence/recorder.py +325 -0
  10. abstractruntime/integrations/abstractcore/__init__.py +9 -2
  11. abstractruntime/integrations/abstractcore/constants.py +19 -0
  12. abstractruntime/integrations/abstractcore/default_tools.py +134 -0
  13. abstractruntime/integrations/abstractcore/effect_handlers.py +288 -9
  14. abstractruntime/integrations/abstractcore/factory.py +133 -11
  15. abstractruntime/integrations/abstractcore/llm_client.py +547 -42
  16. abstractruntime/integrations/abstractcore/mcp_worker.py +586 -0
  17. abstractruntime/integrations/abstractcore/observability.py +80 -0
  18. abstractruntime/integrations/abstractcore/summarizer.py +154 -0
  19. abstractruntime/integrations/abstractcore/tool_executor.py +544 -8
  20. abstractruntime/memory/__init__.py +21 -0
  21. abstractruntime/memory/active_context.py +746 -0
  22. abstractruntime/memory/active_memory.py +452 -0
  23. abstractruntime/memory/compaction.py +105 -0
  24. abstractruntime/rendering/__init__.py +17 -0
  25. abstractruntime/rendering/agent_trace_report.py +256 -0
  26. abstractruntime/rendering/json_stringify.py +136 -0
  27. abstractruntime/scheduler/scheduler.py +93 -2
  28. abstractruntime/storage/__init__.py +3 -1
  29. abstractruntime/storage/artifacts.py +51 -5
  30. abstractruntime/storage/json_files.py +16 -3
  31. abstractruntime/storage/observable.py +99 -0
  32. {abstractruntime-0.0.1.dist-info → abstractruntime-0.4.0.dist-info}/METADATA +5 -1
  33. abstractruntime-0.4.0.dist-info/RECORD +49 -0
  34. abstractruntime-0.4.0.dist-info/entry_points.txt +2 -0
  35. abstractruntime-0.0.1.dist-info/RECORD +0 -30
  36. {abstractruntime-0.0.1.dist-info → abstractruntime-0.4.0.dist-info}/WHEEL +0 -0
  37. {abstractruntime-0.0.1.dist-info → abstractruntime-0.4.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,99 @@
1
+ """abstractruntime.storage.observable
2
+
3
+ In-process pub/sub for ledger append events.
4
+
5
+ Design intent:
6
+ - Keep AbstractRuntime kernel dependency-light (stdlib only).
7
+ - Treat the ledger as the durable source of truth (replay via `list(run_id)`).
8
+ - Provide a small, optional subscription surface for live UX (WS/CLI) without
9
+ introducing a second global event system.
10
+
11
+ This is intentionally *process-local* (no cross-process guarantees).
12
+ """
13
+
14
+ from __future__ import annotations
15
+
16
+ from dataclasses import asdict
17
+ import threading
18
+ from typing import Any, Callable, Dict, List, Optional, Protocol, runtime_checkable
19
+
20
+ from .base import LedgerStore
21
+ from ..core.models import StepRecord
22
+
23
+
24
+ LedgerRecordDict = Dict[str, Any]
25
+ LedgerSubscriber = Callable[[LedgerRecordDict], None]
26
+
27
+
28
+ @runtime_checkable
29
+ class ObservableLedgerStoreProtocol(Protocol):
30
+ """Optional LedgerStore extension for in-process subscriptions."""
31
+
32
+ def subscribe(
33
+ self,
34
+ callback: LedgerSubscriber,
35
+ *,
36
+ run_id: Optional[str] = None,
37
+ ) -> Callable[[], None]:
38
+ """Subscribe to appended ledger records.
39
+
40
+ Args:
41
+ callback: Called after each append with a JSON-safe record dict.
42
+ run_id: If set, only receive records for that run.
43
+
44
+ Returns:
45
+ An unsubscribe callback.
46
+ """
47
+ ...
48
+
49
+
50
+ class ObservableLedgerStore(LedgerStore):
51
+ """LedgerStore decorator that notifies subscribers on append()."""
52
+
53
+ def __init__(self, inner: LedgerStore):
54
+ self._inner = inner
55
+ self._lock = threading.Lock()
56
+ self._subscribers: list[tuple[Optional[str], LedgerSubscriber]] = []
57
+
58
+ def append(self, record: StepRecord) -> None:
59
+ self._inner.append(record)
60
+
61
+ payload: LedgerRecordDict = asdict(record)
62
+ with self._lock:
63
+ subscribers = list(self._subscribers)
64
+
65
+ for run_id, callback in subscribers:
66
+ if run_id is not None and run_id != record.run_id:
67
+ continue
68
+ try:
69
+ callback(payload)
70
+ except Exception:
71
+ # Observability must never compromise durability/execution.
72
+ continue
73
+
74
+ def list(self, run_id: str) -> List[LedgerRecordDict]:
75
+ return self._inner.list(run_id)
76
+
77
+ def subscribe(
78
+ self,
79
+ callback: LedgerSubscriber,
80
+ *,
81
+ run_id: Optional[str] = None,
82
+ ) -> Callable[[], None]:
83
+ with self._lock:
84
+ self._subscribers.append((run_id, callback))
85
+
86
+ def _unsubscribe() -> None:
87
+ with self._lock:
88
+ try:
89
+ self._subscribers.remove((run_id, callback))
90
+ except ValueError:
91
+ return
92
+
93
+ return _unsubscribe
94
+
95
+ def clear_subscribers(self) -> None:
96
+ """Clear all subscribers (test utility)."""
97
+ with self._lock:
98
+ self._subscribers.clear()
99
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: AbstractRuntime
3
- Version: 0.0.1
3
+ Version: 0.4.0
4
4
  Summary: AbstractRuntime: a durable graph runner designed to pair with AbstractCore.
5
5
  Project-URL: AbstractCore (website), https://www.abstractcore.ai/
6
6
  Project-URL: AbstractCore (GitHub), https://github.com/lpalbou/abstractruntime
@@ -18,6 +18,10 @@ Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Programming Language :: Python :: 3.12
19
19
  Classifier: Programming Language :: Python :: 3.13
20
20
  Requires-Python: >=3.10
21
+ Provides-Extra: abstractcore
22
+ Requires-Dist: abstractcore>=2.6.8; extra == 'abstractcore'
23
+ Provides-Extra: mcp-worker
24
+ Requires-Dist: abstractcore[tools]>=2.6.8; extra == 'mcp-worker'
21
25
  Description-Content-Type: text/markdown
22
26
 
23
27
  ## AbstractRuntime
@@ -0,0 +1,49 @@
1
+ abstractruntime/__init__.py,sha256=hO9d8o5R-9TF7TrxybMdRvtE0jQBO7t2nkMkZQDEnnY,2804
2
+ abstractruntime/core/__init__.py,sha256=msUcfYjAwjkiEgvi-twteo1H11oBclYJFXqYVWlf8JQ,547
3
+ abstractruntime/core/config.py,sha256=U8cZbovq8dNI_7NaPkKiBwuGxABezhqytrN1L_lASJs,4672
4
+ abstractruntime/core/event_keys.py,sha256=5YECNuMkJV_pCGGV5uXzNU5LtGIy2Nu1I9JKiLrZb_c,1782
5
+ abstractruntime/core/models.py,sha256=-vYRcnm2G5PL8LsAhNU7rEyGHAzVpmHjLnn3hGCy0Dc,8490
6
+ abstractruntime/core/policy.py,sha256=C8tmxaY8YCTvs8_5-5Ns6tsFdCVE_G2vHBOiEckeg9Y,5115
7
+ abstractruntime/core/runtime.py,sha256=XeipSjlShb5P6ZT1ak7BFPiKAkiJtdoNfSWYL5QZZuA,130066
8
+ abstractruntime/core/spec.py,sha256=SBxAFaaIe9eJTRDMEgDub-GaF2McHTDkEgIl3L-DXbE,1461
9
+ abstractruntime/core/vars.py,sha256=SdDRpHVf4LL5PyHIn7QFx82Gc9HMgnPKis82QZWLMFk,6178
10
+ abstractruntime/evidence/__init__.py,sha256=pSfu8fdvvjGKclJdQ-5dUVc4KIDKLSq_MpOTDSQFvw0,212
11
+ abstractruntime/evidence/recorder.py,sha256=oqMDDqs6vj_DZDpLZrnHC9zhQo0Yzm28qKu1_HHrL_A,12894
12
+ abstractruntime/identity/__init__.py,sha256=aV_aA6lfqsIQMPE2S0B0AKi0rnb-_vmKYpgv1wWoaq8,119
13
+ abstractruntime/identity/fingerprint.py,sha256=axQFEHSJFsrYGNkikkfEVhNNQxdR8wBmv4TuVbTs0lM,1748
14
+ abstractruntime/integrations/__init__.py,sha256=CnhKNxeT-rCeJRURWOXT8YBZ7HJPOESJROV5cnEwJoQ,408
15
+ abstractruntime/integrations/abstractcore/__init__.py,sha256=7i-vqiXabK5gZnyUUqs_jKzfjGCJLFwC92BpTq06XWQ,1440
16
+ abstractruntime/integrations/abstractcore/constants.py,sha256=INu273hahMySNiNUIqUK7HhbXs-oJe0OjbsYyXiU92U,690
17
+ abstractruntime/integrations/abstractcore/default_tools.py,sha256=AQikJhja0ejy918oRMwh6o7rEPk1zokuEpy9VxxvK5Y,4209
18
+ abstractruntime/integrations/abstractcore/effect_handlers.py,sha256=8AM3LuKYTu5bwS7hL9BOM5IMh-2i-ajj8O1mqjYNXO0,15381
19
+ abstractruntime/integrations/abstractcore/factory.py,sha256=9T0369jNtDghPH2zaTbuUE1zKIqvBYxglDaCpTorwcc,9894
20
+ abstractruntime/integrations/abstractcore/llm_client.py,sha256=6W1uB6tW3p_X7m63e8vegpQceHqZUbscKtw46wBrXG4,29625
21
+ abstractruntime/integrations/abstractcore/logging.py,sha256=iYmibudvLXs83hhF-dpbgEoyUdzTo8tnT4dV-cC6uyE,683
22
+ abstractruntime/integrations/abstractcore/mcp_worker.py,sha256=rB2f0xbxA-WgnV44VBkonHR44inH0hxXZSVMrbwbo5Q,22514
23
+ abstractruntime/integrations/abstractcore/observability.py,sha256=YPTBrr5IPr7vCgBoClNaxTo09M1MdVko4OEN3lMxrpc,2527
24
+ abstractruntime/integrations/abstractcore/summarizer.py,sha256=lobota-K5mKMbDBgxIXczK_SHGmhZ832VwIMgtSvagw,5431
25
+ abstractruntime/integrations/abstractcore/tool_executor.py,sha256=LbA4GilPfbNYUAZv404fUCzjs2h_WTWZBpkBTMKWHrU,23646
26
+ abstractruntime/memory/__init__.py,sha256=0Ew8Z4z0vttW0rLYc6FnysU0UXFEtE6eDUf7kC_0MK0,689
27
+ abstractruntime/memory/active_context.py,sha256=py5_LZpUQ83blC-62SPh_-tDC8-iKAwSiJo9RpQ893A,28565
28
+ abstractruntime/memory/active_memory.py,sha256=hJy5ssx_fi4nTcoVlAFG3qZz4OzOczVC0Benxduw6CE,16565
29
+ abstractruntime/memory/compaction.py,sha256=oZfjfsM9CzLT0xWv4jmWkKIgq3FWh20RAniY-pc7Oxg,3505
30
+ abstractruntime/rendering/__init__.py,sha256=SgOW1wRic90sMVRKseATR4h6-9LZrx9FOlNA8t2XpyM,491
31
+ abstractruntime/rendering/agent_trace_report.py,sha256=SqEl4oj4s1YVfsO_GLK3XdFO-aKnH6yNlb-eqGsm9TE,9458
32
+ abstractruntime/rendering/json_stringify.py,sha256=llYWiNR9Ywu41V1ly0GGjLZO2BqmaG2bwEjfLXtBTDg,4198
33
+ abstractruntime/scheduler/__init__.py,sha256=ZwFJQrBN3aQOv7xuGXsURXEEBJAHV6qVQy13DYvbhqw,337
34
+ abstractruntime/scheduler/convenience.py,sha256=Rremvw_P3JMQ-NOkwn7ATlD5HPkKxRtSGJRfBkimyJY,10278
35
+ abstractruntime/scheduler/registry.py,sha256=0iqcTcCV0bYmhw-T7n8TFoZXVkhBRZt89AebXz_Z5fc,2969
36
+ abstractruntime/scheduler/scheduler.py,sha256=TSIz0sZeH-O7Vb3RSBsXv9qKrD62ttg_pMecYHAwKyE,16570
37
+ abstractruntime/storage/__init__.py,sha256=z1qmXdUm9q_5iCi2J9_KIGoTCWxQG4-_WSi5u3AoJUM,844
38
+ abstractruntime/storage/artifacts.py,sha256=bvVTLMOpauNyz2_fT4MGXiuB8Ill-_y9zkWQ7OxNQe4,16129
39
+ abstractruntime/storage/base.py,sha256=QkNjtHRhqRHHg5FbEP9CVNjL97RTFcy4y8vNRPtVVvc,2758
40
+ abstractruntime/storage/in_memory.py,sha256=baSlhu5ZPEFS82PvYwW89n0PbK7JmS1H07qlrPf40rI,3534
41
+ abstractruntime/storage/json_files.py,sha256=Mhrq7SeWC4RYkPlflcUuVzbEskLUVfc4LdIghOr23Ko,7459
42
+ abstractruntime/storage/ledger_chain.py,sha256=TnAWacQ9e58RAg2vKP8OU6WN8Re1PdqN72g574A2CGA,4717
43
+ abstractruntime/storage/observable.py,sha256=B0MK5GKsU7wdfF8Fkj7si7ivToKJCZXaF3AnPwOM5qM,2897
44
+ abstractruntime/storage/snapshots.py,sha256=-IUlZ40Vxcyl3hKzKk_IxYxm9zumBhkSAzrcL9WpmcU,6481
45
+ abstractruntime-0.4.0.dist-info/METADATA,sha256=e8XN94ocwrmd4kcxTHSRaQOGoNqdLZNgaYSKupWLo6Q,5178
46
+ abstractruntime-0.4.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
47
+ abstractruntime-0.4.0.dist-info/entry_points.txt,sha256=4-KMU85GJkTOEBN3cNI7bvzwwhqAvGMCzup6RM-ZiCI,105
48
+ abstractruntime-0.4.0.dist-info/licenses/LICENSE,sha256=6rL4UIO5IdK59THf7fx0q6Hmxp5grSFi7-kWLcczseA,1083
49
+ abstractruntime-0.4.0.dist-info/RECORD,,
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ abstractruntime-mcp-worker = abstractruntime.integrations.abstractcore.mcp_worker:main
@@ -1,30 +0,0 @@
1
- abstractruntime/__init__.py,sha256=oobR5VlwZgxJKWr7hmjwVEGgYakHQt4oJNrdxcj6Nsc,2547
2
- abstractruntime/core/__init__.py,sha256=X15NaswmuhT9DcGksOkbmJ2cFcWsBCUH4s-Hx_nHnBo,353
3
- abstractruntime/core/models.py,sha256=7Qvosfc91ylHeCFt1SrEQFfHZp8Gnl2aq5cdfprvLj4,6923
4
- abstractruntime/core/policy.py,sha256=C8tmxaY8YCTvs8_5-5Ns6tsFdCVE_G2vHBOiEckeg9Y,5115
5
- abstractruntime/core/runtime.py,sha256=U2GgFJry7fJYXS4Lu4460BGwJal-Ak1zaBakYCJYb0Y,22170
6
- abstractruntime/core/spec.py,sha256=SBxAFaaIe9eJTRDMEgDub-GaF2McHTDkEgIl3L-DXbE,1461
7
- abstractruntime/identity/__init__.py,sha256=aV_aA6lfqsIQMPE2S0B0AKi0rnb-_vmKYpgv1wWoaq8,119
8
- abstractruntime/identity/fingerprint.py,sha256=axQFEHSJFsrYGNkikkfEVhNNQxdR8wBmv4TuVbTs0lM,1748
9
- abstractruntime/integrations/__init__.py,sha256=CnhKNxeT-rCeJRURWOXT8YBZ7HJPOESJROV5cnEwJoQ,408
10
- abstractruntime/integrations/abstractcore/__init__.py,sha256=BRoXxUGJYAVYu8zI3_1m21K01yvDE1ZTS4p-23kEl0w,1142
11
- abstractruntime/integrations/abstractcore/effect_handlers.py,sha256=_5NRvnx7UIrtw4BuWBEY0PBEuLALdCqIGdbl4HSPsd4,3221
12
- abstractruntime/integrations/abstractcore/factory.py,sha256=OQP77JFJmYKhL2rMWqgAp66S_VCnESr0wE0O9cO5WxI,4857
13
- abstractruntime/integrations/abstractcore/llm_client.py,sha256=jTyNfKWnbIqLMA6OOt51biZ0tTzlqG_fv4de9kUdINs,9440
14
- abstractruntime/integrations/abstractcore/logging.py,sha256=iYmibudvLXs83hhF-dpbgEoyUdzTo8tnT4dV-cC6uyE,683
15
- abstractruntime/integrations/abstractcore/tool_executor.py,sha256=fLq-YX6EDiSzMKHC2b3KqFt28D46cOnbpRV5auDM4MU,2720
16
- abstractruntime/scheduler/__init__.py,sha256=ZwFJQrBN3aQOv7xuGXsURXEEBJAHV6qVQy13DYvbhqw,337
17
- abstractruntime/scheduler/convenience.py,sha256=Rremvw_P3JMQ-NOkwn7ATlD5HPkKxRtSGJRfBkimyJY,10278
18
- abstractruntime/scheduler/registry.py,sha256=0iqcTcCV0bYmhw-T7n8TFoZXVkhBRZt89AebXz_Z5fc,2969
19
- abstractruntime/scheduler/scheduler.py,sha256=Z3dIwz0e7bP7c_S_VoclgY1Fjw7NxFez_wsst-dYVT8,13535
20
- abstractruntime/storage/__init__.py,sha256=KSg4V-0Ge_BWFnm_a-XsKezNdtUhUBUuvfsvRKUiDUo,702
21
- abstractruntime/storage/artifacts.py,sha256=IyVWOVqe76xjYSjleQC6kG-H92FKRzbzWf6qWzEhImE,14542
22
- abstractruntime/storage/base.py,sha256=QkNjtHRhqRHHg5FbEP9CVNjL97RTFcy4y8vNRPtVVvc,2758
23
- abstractruntime/storage/in_memory.py,sha256=baSlhu5ZPEFS82PvYwW89n0PbK7JmS1H07qlrPf40rI,3534
24
- abstractruntime/storage/json_files.py,sha256=o-xfPPupDB5ZwgaAWgQbHdpLySLuoNzdOz5Moqm9H_Q,6908
25
- abstractruntime/storage/ledger_chain.py,sha256=TnAWacQ9e58RAg2vKP8OU6WN8Re1PdqN72g574A2CGA,4717
26
- abstractruntime/storage/snapshots.py,sha256=-IUlZ40Vxcyl3hKzKk_IxYxm9zumBhkSAzrcL9WpmcU,6481
27
- abstractruntime-0.0.1.dist-info/METADATA,sha256=cUa0Tmy-8jmuP2VR1EJwoQxC_d8i6RnVTQUr6-KkfOA,4997
28
- abstractruntime-0.0.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
29
- abstractruntime-0.0.1.dist-info/licenses/LICENSE,sha256=6rL4UIO5IdK59THf7fx0q6Hmxp5grSFi7-kWLcczseA,1083
30
- abstractruntime-0.0.1.dist-info/RECORD,,