openclaw-memory-atmem 2.2.6-beta.1 → 2.2.6-beta.3
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.
- package/README.md +8 -1
- package/dist/index.js +48 -2
- package/dist/src/rpc-client.js +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@ This npm package is the host bridge for AtMem. It is not a standalone memory eng
|
|
|
5
5
|
Use the Python-owned installer:
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
python -m pip install --pre --upgrade atmem==2.2.
|
|
8
|
+
python -m pip install --pre --upgrade atmem==2.2.6b5
|
|
9
9
|
atmem openclaw install
|
|
10
10
|
```
|
|
11
11
|
|
|
@@ -22,6 +22,13 @@ Existing AtMem 2.1 users run `atmem openclaw upgrade` after upgrading the Python
|
|
|
22
22
|
package. This preserves the current memory mode and migration, verifies the new
|
|
23
23
|
bridge with a self-test flight, and rolls back the bridge on failure.
|
|
24
24
|
|
|
25
|
+
Bridge `2.2.6-beta.3` adds Spec 007 exact task-context delivery. When the host
|
|
26
|
+
supplies `taskId` in hook context, the bridge requests only that governed task,
|
|
27
|
+
checks its byte digest, contributes it separately from recalled memory, and
|
|
28
|
+
confirms exposure. With no `taskId`, task delivery stays off and existing
|
|
29
|
+
memory-only behavior is unchanged. Guard detection is available, but this
|
|
30
|
+
bridge does not claim it can block OpenClaw execution.
|
|
31
|
+
|
|
25
32
|
In shadow mode the bridge observes native-memory changes without injecting AtMem context. In active mode it exposes compatible memory search/get tools, model-semantic capture, bounded recall and native-path protection. `atmem control restore` restores the saved OpenClaw configuration and native memory.
|
|
26
33
|
|
|
27
34
|
The bridge also supplies Agent Black Box hooks. It records model/tool lifecycle digests and bounded metadata—not raw prompts, responses, parameters or results—so `atmem blackbox verify RUN_ID` can check timeline integrity and observed tool-hook closure. See the [Agent Black Box guide](../../docs/agent-blackbox.md) for the exact boundary.
|
package/dist/index.js
CHANGED
|
@@ -747,6 +747,20 @@ function register(api) {
|
|
|
747
747
|
user_id: delegatedUserIdFor(ctx),
|
|
748
748
|
workspace_id: workspaceIdFor(ctx),
|
|
749
749
|
}, cfg.recall.timeoutMs));
|
|
750
|
+
const taskPrepared = ctx.taskId
|
|
751
|
+
? (await callFor(ctx, "control_prepare_task_context", {
|
|
752
|
+
task_id: ctx.taskId,
|
|
753
|
+
session_id: sessionKey,
|
|
754
|
+
host_run_id: ctx.runId,
|
|
755
|
+
agent_id: agentIdFor(ctx),
|
|
756
|
+
workspace_id: workspaceIdFor(ctx),
|
|
757
|
+
}, cfg.recall.timeoutMs))
|
|
758
|
+
: undefined;
|
|
759
|
+
if (taskPrepared?.disposition === "injected" &&
|
|
760
|
+
(!taskPrepared.context || !taskPrepared.context_sha256 ||
|
|
761
|
+
`sha256:${digestText(taskPrepared.context)}` !== taskPrepared.context_sha256)) {
|
|
762
|
+
throw new Error("governed task context failed exact handoff digest validation");
|
|
763
|
+
}
|
|
750
764
|
pendingPrompts.set(sessionKey, {
|
|
751
765
|
text: userText,
|
|
752
766
|
ts: Date.now(),
|
|
@@ -758,7 +772,18 @@ function register(api) {
|
|
|
758
772
|
delegatedContextSha256: prepared.authority === "delegated" ? prepared.context_sha256 : undefined,
|
|
759
773
|
delegatedAuthority: prepared.authority,
|
|
760
774
|
delegatedResultSha256: prepared.result_sha256,
|
|
775
|
+
taskDeliveryId: taskPrepared?.delivery_id,
|
|
776
|
+
taskContextSha256: taskPrepared?.context_sha256,
|
|
761
777
|
});
|
|
778
|
+
if (ctx.taskId) {
|
|
779
|
+
await recordBlackbox("task.context.prepared", undefined, ctx, {
|
|
780
|
+
task_id: ctx.taskId,
|
|
781
|
+
task_disposition: taskPrepared?.disposition ?? "withheld",
|
|
782
|
+
task_revision: taskPrepared?.revision,
|
|
783
|
+
task_context_sha256: taskPrepared?.context_sha256?.replace(/^sha256:/, ""),
|
|
784
|
+
task_reason_codes: taskPrepared?.reason_codes ?? [],
|
|
785
|
+
});
|
|
786
|
+
}
|
|
762
787
|
if (prepared.authority === "delegated" &&
|
|
763
788
|
prepared.inject &&
|
|
764
789
|
(!prepared.context ||
|
|
@@ -805,8 +830,21 @@ function register(api) {
|
|
|
805
830
|
if (prepared.inject && prepared.context) {
|
|
806
831
|
api.logger.info(`${TAG} memory control plane ${prepared.mode ?? "active"} context exposed`);
|
|
807
832
|
return prepared.authority === "delegated"
|
|
808
|
-
? {
|
|
809
|
-
|
|
833
|
+
? {
|
|
834
|
+
prependContext: prepared.context,
|
|
835
|
+
appendContext: taskPrepared?.disposition === "injected"
|
|
836
|
+
? taskPrepared.context
|
|
837
|
+
: undefined,
|
|
838
|
+
}
|
|
839
|
+
: {
|
|
840
|
+
appendContext: [
|
|
841
|
+
prepared.context,
|
|
842
|
+
taskPrepared?.disposition === "injected" ? taskPrepared.context : "",
|
|
843
|
+
].filter(Boolean).join("\n\n"),
|
|
844
|
+
};
|
|
845
|
+
}
|
|
846
|
+
if (taskPrepared?.disposition === "injected" && taskPrepared.context) {
|
|
847
|
+
return { appendContext: taskPrepared.context };
|
|
810
848
|
}
|
|
811
849
|
return;
|
|
812
850
|
}
|
|
@@ -1007,6 +1045,14 @@ function register(api) {
|
|
|
1007
1045
|
if (cached?.exposureId) {
|
|
1008
1046
|
await callFor(ctx, "control_exposure_shown", { exposure_id: cached.exposureId }, cfg.recall.timeoutMs);
|
|
1009
1047
|
}
|
|
1048
|
+
if (cached?.taskDeliveryId) {
|
|
1049
|
+
await callFor(ctx, "control_task_exposure_shown", { delivery_id: cached.taskDeliveryId }, cfg.recall.timeoutMs);
|
|
1050
|
+
await recordBlackbox("task.context.exposed", event.runId, ctx, {
|
|
1051
|
+
task_id: ctx.taskId,
|
|
1052
|
+
task_disposition: "injected",
|
|
1053
|
+
task_context_sha256: cached.taskContextSha256?.replace(/^sha256:/, ""),
|
|
1054
|
+
});
|
|
1055
|
+
}
|
|
1010
1056
|
if (event.success !== false) {
|
|
1011
1057
|
await callFor(ctx, "control_sync_openclaw_memory", {}, cfg.recall.timeoutMs);
|
|
1012
1058
|
}
|
package/dist/src/rpc-client.js
CHANGED
package/openclaw.plugin.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "memory-atmem",
|
|
3
3
|
"name": "Memory (atmem)",
|
|
4
4
|
"description": "OpenClaw bridge installed and managed by the AtMem memory control plane.",
|
|
5
|
-
"version": "2.2.6-beta.
|
|
5
|
+
"version": "2.2.6-beta.3",
|
|
6
6
|
"commandAliases": ["memory-atmem"],
|
|
7
7
|
"activation": {
|
|
8
8
|
"onStartup": true,
|