atmem 2.2.0__tar.gz → 2.2.3__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.
- {atmem-2.2.0/atmem.egg-info → atmem-2.2.3}/PKG-INFO +127 -14
- {atmem-2.2.0 → atmem-2.2.3}/README.md +125 -12
- {atmem-2.2.0 → atmem-2.2.3}/atmem/adapters/pydantic_ai.py +2 -2
- {atmem-2.2.0 → atmem-2.2.3}/atmem/control/atbot_service.py +1 -1
- {atmem-2.2.0 → atmem-2.2.3}/atmem/mcp/server.py +1 -1
- {atmem-2.2.0 → atmem-2.2.3}/atmem/openclaw_install.py +1 -1
- {atmem-2.2.0 → atmem-2.2.3/atmem.egg-info}/PKG-INFO +127 -14
- {atmem-2.2.0 → atmem-2.2.3}/atmem.egg-info/SOURCES.txt +3 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem.egg-info/requires.txt +1 -1
- {atmem-2.2.0 → atmem-2.2.3}/docs/agent-blackbox.md +5 -0
- {atmem-2.2.0 → atmem-2.2.3}/docs/atbot-release.md +1 -1
- {atmem-2.2.0 → atmem-2.2.3}/docs/capabilities.json +2 -2
- {atmem-2.2.0 → atmem-2.2.3}/docs/current-status.md +4 -4
- {atmem-2.2.0 → atmem-2.2.3}/docs/openclaw-setup.md +2 -2
- atmem-2.2.3/docs/releases/v2.2.1.md +49 -0
- atmem-2.2.3/docs/releases/v2.2.2.md +28 -0
- atmem-2.2.3/docs/releases/v2.2.3.md +32 -0
- {atmem-2.2.0 → atmem-2.2.3}/integrations/openclaw/README.md +2 -2
- {atmem-2.2.0 → atmem-2.2.3}/integrations/openclaw/index.ts +64 -15
- {atmem-2.2.0 → atmem-2.2.3}/integrations/openclaw/openclaw.plugin.json +1 -1
- {atmem-2.2.0 → atmem-2.2.3}/integrations/openclaw/package-lock.json +2 -2
- {atmem-2.2.0 → atmem-2.2.3}/integrations/openclaw/package.json +1 -1
- {atmem-2.2.0 → atmem-2.2.3}/integrations/openclaw/src/rpc-client.ts +1 -1
- {atmem-2.2.0 → atmem-2.2.3}/integrations/openclaw/test/hooks.mjs +64 -0
- {atmem-2.2.0 → atmem-2.2.3}/pyproject.toml +2 -2
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_cli_guidance.py +2 -2
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_control_plane.py +3 -3
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_documentation.py +20 -0
- {atmem-2.2.0 → atmem-2.2.3}/tools/smoke_installed_package.py +2 -2
- {atmem-2.2.0 → atmem-2.2.3}/tools/smoke_upgrade_from_2_1.py +3 -3
- {atmem-2.2.0 → atmem-2.2.3}/LICENSE +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/MANIFEST.in +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/__init__.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/adapters/__init__.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/adapters/base.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/adapters/langgraph.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/cli.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/contracts/__init__.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/contracts/models.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/contracts/versions.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/control/__init__.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/control/assets/app.css +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/control/assets/app.html +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/control/assets/app.js +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/control/assets/atmem.jpg +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/control/atbot_companion.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/control/blackbox.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/control/compat.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/control/evidence.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/control/hosts.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/control/manager.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/control/models.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/control/openclaw_native.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/control/openclaw_topology.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/control/server.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/control/state.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/control/store.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/control/topology.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/control/ui.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/control/verify.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/control/web.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/core/__init__.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/core/canonical.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/core/fact_keys.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/core/keys.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/core/policy.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/core/storage.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/dashboard_daemon.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/extract/__init__.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/extract/rules.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/graph.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/investigate.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/maintenance.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/mcp/__init__.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/media.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/memory.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/retrieve/__init__.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/retrieve/rank.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/schemas/__init__.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/schemas/v1/capabilities.json +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/schemas/v1/context-package.json +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/schemas/v1/memory-proposal.json +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/schemas/v1/recall-request.json +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/schemas/v1/scope.json +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/schemas/v1/source-capture.json +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/semantic/__init__.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/semantic/index.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/semantic/providers.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/store/__init__.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem/store/sqlite.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem.egg-info/dependency_links.txt +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem.egg-info/entry_points.txt +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/atmem.egg-info/top_level.txt +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/docs/audit-log-spec.md +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/docs/audit-search.md +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/docs/auditing-guide.md +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/docs/control-plane.md +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/docs/dashboard-design-language.md +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/docs/data-storage-and-backup.md +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/docs/framework-adapters.md +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/docs/generic-adapter.md +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/docs/integration-guide.md +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/docs/multimodal-observations.md +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/docs/releases/v1.0.0.md +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/docs/releases/v2.0.0.md +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/docs/releases/v2.0.1.md +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/docs/releases/v2.1.0.md +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/docs/releases/v2.2.0.md +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/docs/saas-integration.md +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/docs/semantic-search.md +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/integrations/openclaw/src/setup.ts +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/integrations/openclaw/src/types.ts +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/integrations/openclaw/test/setup.mjs +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/integrations/openclaw/test/smoke.mjs +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/integrations/openclaw/tsconfig.json +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/setup.cfg +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_atbot_companion.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_atbot_service.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_auditability.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_blackbox.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_cli.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_contracts_v1.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_control_evidence.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_control_verify.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_dashboard_daemon.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_encryption.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_extract.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_framework_adapters.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_generic_control.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_graph.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_host_adapter.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_layers.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_maintenance.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_mcp.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_media_observations.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_memory.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_openclaw_control.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_openclaw_install.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_openclaw_topology.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_policy.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_recall_evidence.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_restore_receipt.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_retrieve.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_semantic_search.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tests/test_store_transactions.py +0 -0
- {atmem-2.2.0 → atmem-2.2.3}/tools/verify_audit.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atmem
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.3
|
|
4
4
|
Summary: Host-neutral Agent Black Box and reversible memory control plane.
|
|
5
5
|
Author-email: aetna000 <aetna000@gmail.com>
|
|
6
6
|
Maintainer-email: aetna000 <aetna000@gmail.com>
|
|
@@ -24,7 +24,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
24
24
|
Requires-Python: >=3.10
|
|
25
25
|
Description-Content-Type: text/markdown
|
|
26
26
|
License-File: LICENSE
|
|
27
|
-
Requires-Dist: atmem-atbot==0.1.
|
|
27
|
+
Requires-Dist: atmem-atbot==0.1.0a2
|
|
28
28
|
Provides-Extra: dev
|
|
29
29
|
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
30
30
|
Requires-Dist: tomli>=2.0; python_version < "3.11" and extra == "dev"
|
|
@@ -44,14 +44,128 @@ Dynamic: license-file
|
|
|
44
44
|
|
|
45
45
|
# AtMem
|
|
46
46
|
|
|
47
|
-
[](./docs/releases/v2.2.3.md)
|
|
48
48
|
[](https://github.com/aetna000/atmem/actions/workflows/ci.yml)
|
|
49
49
|
|
|
50
50
|
**AtMem is a host-neutral Agent Black Box and reversible memory control plane.**
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
Install AtMem once and give OpenClaw, Pydantic AI, LangChain/LangGraph, or a
|
|
53
|
+
custom agent governed long-term memory. **AtBot is installed automatically** as
|
|
54
|
+
AtMem's private intelligence companion: AtBot proposes and ranks; AtMem alone
|
|
55
|
+
authorizes, stores, scopes, injects, corrects, and deletes memory.
|
|
56
|
+
|
|
57
|
+
## Start here
|
|
58
|
+
|
|
59
|
+
### 1. Install AtMem and choose memory intelligence
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
python -m pip install --upgrade atmem==2.2.3
|
|
63
|
+
atmem atbot setup
|
|
64
|
+
atmem atbot doctor
|
|
65
|
+
atmem dashboard
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
That one Python installation includes the pinned `atmem-atbot` package and an
|
|
69
|
+
always-present local vector index. Do **not** install AtBot separately. During
|
|
70
|
+
`atmem atbot setup`, choose local Ollama, a local OpenAI-compatible model, a
|
|
71
|
+
hosted provider, or the safe deterministic fallback. API keys stay in
|
|
72
|
+
environment variables; AtMem does not save them.
|
|
73
|
+
|
|
74
|
+
### 2. Connect your agent
|
|
75
|
+
|
|
76
|
+
#### OpenClaw — fully managed
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
atmem openclaw install
|
|
80
|
+
atmem control verify
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
AtMem installs the matching npm bridge, discovers OpenClaw agents and
|
|
84
|
+
workspaces, starts in safe shadow mode, restarts the gateway, and verifies the
|
|
85
|
+
connection. Do not install the npm package yourself.
|
|
86
|
+
|
|
87
|
+
Already using AtMem 2.1 with OpenClaw? Upgrade in place:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
python -m pip install --upgrade atmem==2.2.3
|
|
91
|
+
atmem openclaw upgrade
|
|
92
|
+
atmem control verify
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
#### Pydantic AI — native capability
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
python -m pip install 'atmem[pydantic-ai]==2.2.3'
|
|
99
|
+
atmem control shadow --host generic --memory-db ~/.atmem/memories.db
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
```python
|
|
103
|
+
from pydantic_ai import Agent
|
|
104
|
+
from atmem.adapters import AtMemAdapterIdentity
|
|
105
|
+
from atmem.adapters.pydantic_ai import PydanticAIAtMemAdapter
|
|
106
|
+
from atmem.control import ControlPlaneManager
|
|
107
|
+
|
|
108
|
+
manager = ControlPlaneManager()
|
|
109
|
+
scope = manager.agent_topology()["agents"][0]
|
|
110
|
+
identity = AtMemAdapterIdentity(
|
|
111
|
+
agent_id=scope["agent_id"],
|
|
112
|
+
workspace_id=scope["workspace_id"],
|
|
113
|
+
subject_id=scope["subject_id"],
|
|
114
|
+
)
|
|
115
|
+
memory = PydanticAIAtMemAdapter(manager, identity).capability()
|
|
116
|
+
agent = Agent("openai:gpt-5-mini", capabilities=[memory])
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
#### LangChain/LangGraph — native middleware
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
python -m pip install 'atmem[langgraph]==2.2.3'
|
|
123
|
+
atmem control shadow --host generic --memory-db ~/.atmem/memories.db
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
```python
|
|
127
|
+
from langchain.agents import create_agent
|
|
128
|
+
from atmem.adapters import AtMemAdapterIdentity
|
|
129
|
+
from atmem.adapters.langgraph import create_langgraph_middleware
|
|
130
|
+
from atmem.control import ControlPlaneManager
|
|
131
|
+
|
|
132
|
+
manager = ControlPlaneManager()
|
|
133
|
+
scope = manager.agent_topology()["agents"][0]
|
|
134
|
+
identity = AtMemAdapterIdentity(
|
|
135
|
+
agent_id=scope["agent_id"],
|
|
136
|
+
workspace_id=scope["workspace_id"],
|
|
137
|
+
subject_id=scope["subject_id"],
|
|
138
|
+
)
|
|
139
|
+
memory = create_langgraph_middleware(manager, identity)
|
|
140
|
+
agent = create_agent(model="openai:gpt-5-mini", tools=[], middleware=[memory])
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
The framework hooks automate authenticated capture, governed retrieval,
|
|
144
|
+
context injection, exposure proof, and turn/tool evidence. They do not replace
|
|
145
|
+
your agent's model, tools, conversation history, or LangGraph checkpoints. See
|
|
146
|
+
the [complete framework adapter guide](docs/framework-adapters.md) for async,
|
|
147
|
+
multi-agent, and low-level `StateGraph` integration.
|
|
148
|
+
|
|
149
|
+
### 3. Review, then activate
|
|
150
|
+
|
|
151
|
+
Every integration starts in **shadow mode**: AtMem learns and shows what it
|
|
152
|
+
would retrieve, but cannot change model context. Review it in the dashboard,
|
|
153
|
+
then explicitly enable governed injection:
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
atmem dashboard
|
|
157
|
+
atmem control status
|
|
158
|
+
atmem control activate
|
|
159
|
+
atmem control verify
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
If AtBot or its selected model is unavailable, AtMem continues with safe local
|
|
163
|
+
capture and hybrid ranking. Memory authority and agent operation do not depend
|
|
164
|
+
on a hosted model.
|
|
165
|
+
|
|
166
|
+
> **Release status:** this repository describes **AtMem 2.2.3**. AtBot is a
|
|
167
|
+
> separately packaged, headless component installed and managed by AtMem; it is
|
|
168
|
+
> not an independent agent or a second memory authority.
|
|
55
169
|
|
|
56
170
|
It gives agent runtimes one governed memory source and one tamper-evident record
|
|
57
171
|
of what the host observed: memory considered and injected, model boundaries,
|
|
@@ -65,10 +179,10 @@ evidence, activate AtMem explicitly, and return to shadow at any time. The
|
|
|
65
179
|
OpenClaw adapter additionally copies native memory, freezes it during takeover,
|
|
66
180
|
and restores it exactly.
|
|
67
181
|
|
|
68
|
-
##
|
|
182
|
+
## Installation details
|
|
69
183
|
|
|
70
184
|
```bash
|
|
71
|
-
python -m pip install atmem==2.2.
|
|
185
|
+
python -m pip install atmem==2.2.3
|
|
72
186
|
atmem --version
|
|
73
187
|
```
|
|
74
188
|
|
|
@@ -76,11 +190,10 @@ AtMem requires Python 3.10 or newer. It always creates a dependency-free local
|
|
|
76
190
|
vector sidecar; the semantic extra adds an optional local embedding upgrade:
|
|
77
191
|
|
|
78
192
|
```bash
|
|
79
|
-
python -m pip install 'atmem[semantic]==2.2.
|
|
193
|
+
python -m pip install 'atmem[semantic]==2.2.3'
|
|
80
194
|
```
|
|
81
195
|
|
|
82
|
-
For repository development, install both packages
|
|
83
|
-
version is satisfied locally:
|
|
196
|
+
For repository development, install both workspace packages:
|
|
84
197
|
|
|
85
198
|
```bash
|
|
86
199
|
python -m pip install -e './packages/atbot[dev]' -e '.[dev]'
|
|
@@ -92,7 +205,7 @@ AtMem distribution requires the separately packaged, exactly pinned AtBot
|
|
|
92
205
|
companion. Consequently a complete 2.2 installation has AtBot's transitive
|
|
93
206
|
dependencies even when the user selects AtMem's deterministic fallback.
|
|
94
207
|
|
|
95
|
-
##
|
|
208
|
+
## Integration boundaries
|
|
96
209
|
|
|
97
210
|
| Runtime | Start command | What AtMem supplies | What the runtime supplies |
|
|
98
211
|
| --- | --- | --- | --- |
|
|
@@ -257,7 +370,7 @@ atmem control restore
|
|
|
257
370
|
Existing 2.1 installations upgrade without starting a new migration:
|
|
258
371
|
|
|
259
372
|
```bash
|
|
260
|
-
python -m pip install --upgrade atmem==2.2.
|
|
373
|
+
python -m pip install --upgrade atmem==2.2.3
|
|
261
374
|
atmem openclaw upgrade
|
|
262
375
|
atmem control verify
|
|
263
376
|
```
|
|
@@ -403,7 +516,7 @@ npm test
|
|
|
403
516
|
npm run smoke
|
|
404
517
|
```
|
|
405
518
|
|
|
406
|
-
Current repository metadata is version **2.2.
|
|
519
|
+
Current repository metadata is version **2.2.3**. Python and npm release
|
|
407
520
|
versions are intentionally kept equal because the OpenClaw installer pins the
|
|
408
521
|
matching bridge.
|
|
409
522
|
|
|
@@ -1,13 +1,127 @@
|
|
|
1
1
|
# AtMem
|
|
2
2
|
|
|
3
|
-
[](./docs/releases/v2.2.3.md)
|
|
4
4
|
[](https://github.com/aetna000/atmem/actions/workflows/ci.yml)
|
|
5
5
|
|
|
6
6
|
**AtMem is a host-neutral Agent Black Box and reversible memory control plane.**
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
Install AtMem once and give OpenClaw, Pydantic AI, LangChain/LangGraph, or a
|
|
9
|
+
custom agent governed long-term memory. **AtBot is installed automatically** as
|
|
10
|
+
AtMem's private intelligence companion: AtBot proposes and ranks; AtMem alone
|
|
11
|
+
authorizes, stores, scopes, injects, corrects, and deletes memory.
|
|
12
|
+
|
|
13
|
+
## Start here
|
|
14
|
+
|
|
15
|
+
### 1. Install AtMem and choose memory intelligence
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
python -m pip install --upgrade atmem==2.2.3
|
|
19
|
+
atmem atbot setup
|
|
20
|
+
atmem atbot doctor
|
|
21
|
+
atmem dashboard
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
That one Python installation includes the pinned `atmem-atbot` package and an
|
|
25
|
+
always-present local vector index. Do **not** install AtBot separately. During
|
|
26
|
+
`atmem atbot setup`, choose local Ollama, a local OpenAI-compatible model, a
|
|
27
|
+
hosted provider, or the safe deterministic fallback. API keys stay in
|
|
28
|
+
environment variables; AtMem does not save them.
|
|
29
|
+
|
|
30
|
+
### 2. Connect your agent
|
|
31
|
+
|
|
32
|
+
#### OpenClaw — fully managed
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
atmem openclaw install
|
|
36
|
+
atmem control verify
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
AtMem installs the matching npm bridge, discovers OpenClaw agents and
|
|
40
|
+
workspaces, starts in safe shadow mode, restarts the gateway, and verifies the
|
|
41
|
+
connection. Do not install the npm package yourself.
|
|
42
|
+
|
|
43
|
+
Already using AtMem 2.1 with OpenClaw? Upgrade in place:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
python -m pip install --upgrade atmem==2.2.3
|
|
47
|
+
atmem openclaw upgrade
|
|
48
|
+
atmem control verify
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
#### Pydantic AI — native capability
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
python -m pip install 'atmem[pydantic-ai]==2.2.3'
|
|
55
|
+
atmem control shadow --host generic --memory-db ~/.atmem/memories.db
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
```python
|
|
59
|
+
from pydantic_ai import Agent
|
|
60
|
+
from atmem.adapters import AtMemAdapterIdentity
|
|
61
|
+
from atmem.adapters.pydantic_ai import PydanticAIAtMemAdapter
|
|
62
|
+
from atmem.control import ControlPlaneManager
|
|
63
|
+
|
|
64
|
+
manager = ControlPlaneManager()
|
|
65
|
+
scope = manager.agent_topology()["agents"][0]
|
|
66
|
+
identity = AtMemAdapterIdentity(
|
|
67
|
+
agent_id=scope["agent_id"],
|
|
68
|
+
workspace_id=scope["workspace_id"],
|
|
69
|
+
subject_id=scope["subject_id"],
|
|
70
|
+
)
|
|
71
|
+
memory = PydanticAIAtMemAdapter(manager, identity).capability()
|
|
72
|
+
agent = Agent("openai:gpt-5-mini", capabilities=[memory])
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
#### LangChain/LangGraph — native middleware
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
python -m pip install 'atmem[langgraph]==2.2.3'
|
|
79
|
+
atmem control shadow --host generic --memory-db ~/.atmem/memories.db
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
```python
|
|
83
|
+
from langchain.agents import create_agent
|
|
84
|
+
from atmem.adapters import AtMemAdapterIdentity
|
|
85
|
+
from atmem.adapters.langgraph import create_langgraph_middleware
|
|
86
|
+
from atmem.control import ControlPlaneManager
|
|
87
|
+
|
|
88
|
+
manager = ControlPlaneManager()
|
|
89
|
+
scope = manager.agent_topology()["agents"][0]
|
|
90
|
+
identity = AtMemAdapterIdentity(
|
|
91
|
+
agent_id=scope["agent_id"],
|
|
92
|
+
workspace_id=scope["workspace_id"],
|
|
93
|
+
subject_id=scope["subject_id"],
|
|
94
|
+
)
|
|
95
|
+
memory = create_langgraph_middleware(manager, identity)
|
|
96
|
+
agent = create_agent(model="openai:gpt-5-mini", tools=[], middleware=[memory])
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
The framework hooks automate authenticated capture, governed retrieval,
|
|
100
|
+
context injection, exposure proof, and turn/tool evidence. They do not replace
|
|
101
|
+
your agent's model, tools, conversation history, or LangGraph checkpoints. See
|
|
102
|
+
the [complete framework adapter guide](docs/framework-adapters.md) for async,
|
|
103
|
+
multi-agent, and low-level `StateGraph` integration.
|
|
104
|
+
|
|
105
|
+
### 3. Review, then activate
|
|
106
|
+
|
|
107
|
+
Every integration starts in **shadow mode**: AtMem learns and shows what it
|
|
108
|
+
would retrieve, but cannot change model context. Review it in the dashboard,
|
|
109
|
+
then explicitly enable governed injection:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
atmem dashboard
|
|
113
|
+
atmem control status
|
|
114
|
+
atmem control activate
|
|
115
|
+
atmem control verify
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
If AtBot or its selected model is unavailable, AtMem continues with safe local
|
|
119
|
+
capture and hybrid ranking. Memory authority and agent operation do not depend
|
|
120
|
+
on a hosted model.
|
|
121
|
+
|
|
122
|
+
> **Release status:** this repository describes **AtMem 2.2.3**. AtBot is a
|
|
123
|
+
> separately packaged, headless component installed and managed by AtMem; it is
|
|
124
|
+
> not an independent agent or a second memory authority.
|
|
11
125
|
|
|
12
126
|
It gives agent runtimes one governed memory source and one tamper-evident record
|
|
13
127
|
of what the host observed: memory considered and injected, model boundaries,
|
|
@@ -21,10 +135,10 @@ evidence, activate AtMem explicitly, and return to shadow at any time. The
|
|
|
21
135
|
OpenClaw adapter additionally copies native memory, freezes it during takeover,
|
|
22
136
|
and restores it exactly.
|
|
23
137
|
|
|
24
|
-
##
|
|
138
|
+
## Installation details
|
|
25
139
|
|
|
26
140
|
```bash
|
|
27
|
-
python -m pip install atmem==2.2.
|
|
141
|
+
python -m pip install atmem==2.2.3
|
|
28
142
|
atmem --version
|
|
29
143
|
```
|
|
30
144
|
|
|
@@ -32,11 +146,10 @@ AtMem requires Python 3.10 or newer. It always creates a dependency-free local
|
|
|
32
146
|
vector sidecar; the semantic extra adds an optional local embedding upgrade:
|
|
33
147
|
|
|
34
148
|
```bash
|
|
35
|
-
python -m pip install 'atmem[semantic]==2.2.
|
|
149
|
+
python -m pip install 'atmem[semantic]==2.2.3'
|
|
36
150
|
```
|
|
37
151
|
|
|
38
|
-
For repository development, install both packages
|
|
39
|
-
version is satisfied locally:
|
|
152
|
+
For repository development, install both workspace packages:
|
|
40
153
|
|
|
41
154
|
```bash
|
|
42
155
|
python -m pip install -e './packages/atbot[dev]' -e '.[dev]'
|
|
@@ -48,7 +161,7 @@ AtMem distribution requires the separately packaged, exactly pinned AtBot
|
|
|
48
161
|
companion. Consequently a complete 2.2 installation has AtBot's transitive
|
|
49
162
|
dependencies even when the user selects AtMem's deterministic fallback.
|
|
50
163
|
|
|
51
|
-
##
|
|
164
|
+
## Integration boundaries
|
|
52
165
|
|
|
53
166
|
| Runtime | Start command | What AtMem supplies | What the runtime supplies |
|
|
54
167
|
| --- | --- | --- | --- |
|
|
@@ -213,7 +326,7 @@ atmem control restore
|
|
|
213
326
|
Existing 2.1 installations upgrade without starting a new migration:
|
|
214
327
|
|
|
215
328
|
```bash
|
|
216
|
-
python -m pip install --upgrade atmem==2.2.
|
|
329
|
+
python -m pip install --upgrade atmem==2.2.3
|
|
217
330
|
atmem openclaw upgrade
|
|
218
331
|
atmem control verify
|
|
219
332
|
```
|
|
@@ -359,7 +472,7 @@ npm test
|
|
|
359
472
|
npm run smoke
|
|
360
473
|
```
|
|
361
474
|
|
|
362
|
-
Current repository metadata is version **2.2.
|
|
475
|
+
Current repository metadata is version **2.2.3**. Python and npm release
|
|
363
476
|
versions are intentionally kept equal because the OpenClaw installer pins the
|
|
364
477
|
matching bridge.
|
|
365
478
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Pydantic AI
|
|
1
|
+
"""Pydantic AI Hooks adapter for automatic governed memory."""
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
@@ -54,7 +54,7 @@ class PydanticAIAtMemAdapter:
|
|
|
54
54
|
if governed:
|
|
55
55
|
messages.append(ModelRequest(parts=[UserPromptPart(governed)]))
|
|
56
56
|
model_name = str(
|
|
57
|
-
request_context
|
|
57
|
+
getattr(request_context, "model_id", None)
|
|
58
58
|
or getattr(request_context.model, "model_name", None)
|
|
59
59
|
or getattr(request_context.model, "model_id", None)
|
|
60
60
|
or "unknown"
|
|
@@ -16,7 +16,7 @@ from atmem.control.manager import DEFAULT_STATE_PATH, DEFAULT_CONTROL_ROOT
|
|
|
16
16
|
|
|
17
17
|
OPENCLAW_PLUGIN_ID = "memory-atmem"
|
|
18
18
|
OPENCLAW_PLUGIN_PACKAGE = "openclaw-memory-atmem"
|
|
19
|
-
OPENCLAW_PLUGIN_VERSION = "2.2.
|
|
19
|
+
OPENCLAW_PLUGIN_VERSION = "2.2.3"
|
|
20
20
|
_CONFIG_KEY = "plugins.entries.memory-atmem"
|
|
21
21
|
|
|
22
22
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atmem
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.3
|
|
4
4
|
Summary: Host-neutral Agent Black Box and reversible memory control plane.
|
|
5
5
|
Author-email: aetna000 <aetna000@gmail.com>
|
|
6
6
|
Maintainer-email: aetna000 <aetna000@gmail.com>
|
|
@@ -24,7 +24,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
24
24
|
Requires-Python: >=3.10
|
|
25
25
|
Description-Content-Type: text/markdown
|
|
26
26
|
License-File: LICENSE
|
|
27
|
-
Requires-Dist: atmem-atbot==0.1.
|
|
27
|
+
Requires-Dist: atmem-atbot==0.1.0a2
|
|
28
28
|
Provides-Extra: dev
|
|
29
29
|
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
30
30
|
Requires-Dist: tomli>=2.0; python_version < "3.11" and extra == "dev"
|
|
@@ -44,14 +44,128 @@ Dynamic: license-file
|
|
|
44
44
|
|
|
45
45
|
# AtMem
|
|
46
46
|
|
|
47
|
-
[](./docs/releases/v2.2.3.md)
|
|
48
48
|
[](https://github.com/aetna000/atmem/actions/workflows/ci.yml)
|
|
49
49
|
|
|
50
50
|
**AtMem is a host-neutral Agent Black Box and reversible memory control plane.**
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
Install AtMem once and give OpenClaw, Pydantic AI, LangChain/LangGraph, or a
|
|
53
|
+
custom agent governed long-term memory. **AtBot is installed automatically** as
|
|
54
|
+
AtMem's private intelligence companion: AtBot proposes and ranks; AtMem alone
|
|
55
|
+
authorizes, stores, scopes, injects, corrects, and deletes memory.
|
|
56
|
+
|
|
57
|
+
## Start here
|
|
58
|
+
|
|
59
|
+
### 1. Install AtMem and choose memory intelligence
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
python -m pip install --upgrade atmem==2.2.3
|
|
63
|
+
atmem atbot setup
|
|
64
|
+
atmem atbot doctor
|
|
65
|
+
atmem dashboard
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
That one Python installation includes the pinned `atmem-atbot` package and an
|
|
69
|
+
always-present local vector index. Do **not** install AtBot separately. During
|
|
70
|
+
`atmem atbot setup`, choose local Ollama, a local OpenAI-compatible model, a
|
|
71
|
+
hosted provider, or the safe deterministic fallback. API keys stay in
|
|
72
|
+
environment variables; AtMem does not save them.
|
|
73
|
+
|
|
74
|
+
### 2. Connect your agent
|
|
75
|
+
|
|
76
|
+
#### OpenClaw — fully managed
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
atmem openclaw install
|
|
80
|
+
atmem control verify
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
AtMem installs the matching npm bridge, discovers OpenClaw agents and
|
|
84
|
+
workspaces, starts in safe shadow mode, restarts the gateway, and verifies the
|
|
85
|
+
connection. Do not install the npm package yourself.
|
|
86
|
+
|
|
87
|
+
Already using AtMem 2.1 with OpenClaw? Upgrade in place:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
python -m pip install --upgrade atmem==2.2.3
|
|
91
|
+
atmem openclaw upgrade
|
|
92
|
+
atmem control verify
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
#### Pydantic AI — native capability
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
python -m pip install 'atmem[pydantic-ai]==2.2.3'
|
|
99
|
+
atmem control shadow --host generic --memory-db ~/.atmem/memories.db
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
```python
|
|
103
|
+
from pydantic_ai import Agent
|
|
104
|
+
from atmem.adapters import AtMemAdapterIdentity
|
|
105
|
+
from atmem.adapters.pydantic_ai import PydanticAIAtMemAdapter
|
|
106
|
+
from atmem.control import ControlPlaneManager
|
|
107
|
+
|
|
108
|
+
manager = ControlPlaneManager()
|
|
109
|
+
scope = manager.agent_topology()["agents"][0]
|
|
110
|
+
identity = AtMemAdapterIdentity(
|
|
111
|
+
agent_id=scope["agent_id"],
|
|
112
|
+
workspace_id=scope["workspace_id"],
|
|
113
|
+
subject_id=scope["subject_id"],
|
|
114
|
+
)
|
|
115
|
+
memory = PydanticAIAtMemAdapter(manager, identity).capability()
|
|
116
|
+
agent = Agent("openai:gpt-5-mini", capabilities=[memory])
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
#### LangChain/LangGraph — native middleware
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
python -m pip install 'atmem[langgraph]==2.2.3'
|
|
123
|
+
atmem control shadow --host generic --memory-db ~/.atmem/memories.db
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
```python
|
|
127
|
+
from langchain.agents import create_agent
|
|
128
|
+
from atmem.adapters import AtMemAdapterIdentity
|
|
129
|
+
from atmem.adapters.langgraph import create_langgraph_middleware
|
|
130
|
+
from atmem.control import ControlPlaneManager
|
|
131
|
+
|
|
132
|
+
manager = ControlPlaneManager()
|
|
133
|
+
scope = manager.agent_topology()["agents"][0]
|
|
134
|
+
identity = AtMemAdapterIdentity(
|
|
135
|
+
agent_id=scope["agent_id"],
|
|
136
|
+
workspace_id=scope["workspace_id"],
|
|
137
|
+
subject_id=scope["subject_id"],
|
|
138
|
+
)
|
|
139
|
+
memory = create_langgraph_middleware(manager, identity)
|
|
140
|
+
agent = create_agent(model="openai:gpt-5-mini", tools=[], middleware=[memory])
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
The framework hooks automate authenticated capture, governed retrieval,
|
|
144
|
+
context injection, exposure proof, and turn/tool evidence. They do not replace
|
|
145
|
+
your agent's model, tools, conversation history, or LangGraph checkpoints. See
|
|
146
|
+
the [complete framework adapter guide](docs/framework-adapters.md) for async,
|
|
147
|
+
multi-agent, and low-level `StateGraph` integration.
|
|
148
|
+
|
|
149
|
+
### 3. Review, then activate
|
|
150
|
+
|
|
151
|
+
Every integration starts in **shadow mode**: AtMem learns and shows what it
|
|
152
|
+
would retrieve, but cannot change model context. Review it in the dashboard,
|
|
153
|
+
then explicitly enable governed injection:
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
atmem dashboard
|
|
157
|
+
atmem control status
|
|
158
|
+
atmem control activate
|
|
159
|
+
atmem control verify
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
If AtBot or its selected model is unavailable, AtMem continues with safe local
|
|
163
|
+
capture and hybrid ranking. Memory authority and agent operation do not depend
|
|
164
|
+
on a hosted model.
|
|
165
|
+
|
|
166
|
+
> **Release status:** this repository describes **AtMem 2.2.3**. AtBot is a
|
|
167
|
+
> separately packaged, headless component installed and managed by AtMem; it is
|
|
168
|
+
> not an independent agent or a second memory authority.
|
|
55
169
|
|
|
56
170
|
It gives agent runtimes one governed memory source and one tamper-evident record
|
|
57
171
|
of what the host observed: memory considered and injected, model boundaries,
|
|
@@ -65,10 +179,10 @@ evidence, activate AtMem explicitly, and return to shadow at any time. The
|
|
|
65
179
|
OpenClaw adapter additionally copies native memory, freezes it during takeover,
|
|
66
180
|
and restores it exactly.
|
|
67
181
|
|
|
68
|
-
##
|
|
182
|
+
## Installation details
|
|
69
183
|
|
|
70
184
|
```bash
|
|
71
|
-
python -m pip install atmem==2.2.
|
|
185
|
+
python -m pip install atmem==2.2.3
|
|
72
186
|
atmem --version
|
|
73
187
|
```
|
|
74
188
|
|
|
@@ -76,11 +190,10 @@ AtMem requires Python 3.10 or newer. It always creates a dependency-free local
|
|
|
76
190
|
vector sidecar; the semantic extra adds an optional local embedding upgrade:
|
|
77
191
|
|
|
78
192
|
```bash
|
|
79
|
-
python -m pip install 'atmem[semantic]==2.2.
|
|
193
|
+
python -m pip install 'atmem[semantic]==2.2.3'
|
|
80
194
|
```
|
|
81
195
|
|
|
82
|
-
For repository development, install both packages
|
|
83
|
-
version is satisfied locally:
|
|
196
|
+
For repository development, install both workspace packages:
|
|
84
197
|
|
|
85
198
|
```bash
|
|
86
199
|
python -m pip install -e './packages/atbot[dev]' -e '.[dev]'
|
|
@@ -92,7 +205,7 @@ AtMem distribution requires the separately packaged, exactly pinned AtBot
|
|
|
92
205
|
companion. Consequently a complete 2.2 installation has AtBot's transitive
|
|
93
206
|
dependencies even when the user selects AtMem's deterministic fallback.
|
|
94
207
|
|
|
95
|
-
##
|
|
208
|
+
## Integration boundaries
|
|
96
209
|
|
|
97
210
|
| Runtime | Start command | What AtMem supplies | What the runtime supplies |
|
|
98
211
|
| --- | --- | --- | --- |
|
|
@@ -257,7 +370,7 @@ atmem control restore
|
|
|
257
370
|
Existing 2.1 installations upgrade without starting a new migration:
|
|
258
371
|
|
|
259
372
|
```bash
|
|
260
|
-
python -m pip install --upgrade atmem==2.2.
|
|
373
|
+
python -m pip install --upgrade atmem==2.2.3
|
|
261
374
|
atmem openclaw upgrade
|
|
262
375
|
atmem control verify
|
|
263
376
|
```
|
|
@@ -403,7 +516,7 @@ npm test
|
|
|
403
516
|
npm run smoke
|
|
404
517
|
```
|
|
405
518
|
|
|
406
|
-
Current repository metadata is version **2.2.
|
|
519
|
+
Current repository metadata is version **2.2.3**. Python and npm release
|
|
407
520
|
versions are intentionally kept equal because the OpenClaw installer pins the
|
|
408
521
|
matching bridge.
|
|
409
522
|
|
|
@@ -92,6 +92,9 @@ docs/releases/v2.0.0.md
|
|
|
92
92
|
docs/releases/v2.0.1.md
|
|
93
93
|
docs/releases/v2.1.0.md
|
|
94
94
|
docs/releases/v2.2.0.md
|
|
95
|
+
docs/releases/v2.2.1.md
|
|
96
|
+
docs/releases/v2.2.2.md
|
|
97
|
+
docs/releases/v2.2.3.md
|
|
95
98
|
integrations/openclaw/README.md
|
|
96
99
|
integrations/openclaw/index.ts
|
|
97
100
|
integrations/openclaw/openclaw.plugin.json
|
|
@@ -61,6 +61,11 @@ a small model charge.
|
|
|
61
61
|
A structurally complete flight has covered integrity, lifecycle, context, model,
|
|
62
62
|
tools, and response-binding components. In particular:
|
|
63
63
|
|
|
64
|
+
OpenClaw normally observes `turn.input` at `before_model_resolve`. Execution
|
|
65
|
+
paths such as `claude-cli` that omit that hook use `before_prompt_build` as an
|
|
66
|
+
idempotent fallback. If both hooks fire, the bridge records and stages the
|
|
67
|
+
authenticated input only once.
|
|
68
|
+
|
|
64
69
|
- the retained Black Box hash chain verifies;
|
|
65
70
|
- the run has `turn.input` and terminal `turn.ended` events;
|
|
66
71
|
- one explicit context disposition records what memory reached the model, or why none did;
|
|
@@ -31,7 +31,7 @@ stored in GitHub.
|
|
|
31
31
|
2. Run both Python suites and build both distributions locally.
|
|
32
32
|
3. Push the reviewed changes.
|
|
33
33
|
4. Create and push a tag matching `atbot-v<VERSION>`, for example
|
|
34
|
-
`atbot-v0.1.
|
|
34
|
+
`atbot-v0.1.0a2`.
|
|
35
35
|
5. Approve the protected `pypi-atbot` environment deployment.
|
|
36
36
|
6. Confirm `python -m pip install atmem-atbot==<VERSION>` installs an `atbot`
|
|
37
37
|
command with the same version.
|