entroly-openclaw 1.0.78 → 1.0.81

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 CHANGED
@@ -22,12 +22,33 @@ Install the Python engine, then install the publicly verifiable OpenClaw plugin
22
22
  package from npm:
23
23
 
24
24
  ```bash
25
- pip install "entroly>=1.0.78"
25
+ pip install "entroly>=1.0.81"
26
26
  openclaw plugins install npm:entroly-openclaw
27
27
  openclaw plugins enable entroly
28
28
  openclaw gateway restart
29
29
  ```
30
30
 
31
+ The plugin starts a local Python subprocess for context assembly. That child
32
+ receives only the operating-system paths and Entroly-local settings it needs;
33
+ provider API keys, cloud credentials, registry tokens, and unrelated host
34
+ environment variables are not inherited. OpenClaw remains the sole owner of
35
+ provider authentication.
36
+
37
+ Local receipts are enabled by default because they make context decisions
38
+ auditable. They contain hashes, counts, estimates, warnings, and decision
39
+ metadata rather than conversation text, and are bounded by file-count and byte
40
+ quotas. To opt out of persistence, set:
41
+
42
+ ```json5
43
+ {
44
+ plugins: {
45
+ entries: {
46
+ entroly: { config: { writeReceipts: false } }
47
+ }
48
+ }
49
+ }
50
+ ```
51
+
31
52
  ClawHub is an optional registry source. Use it only when
32
53
  `openclaw plugins search "entroly"` returns a current public package and its
33
54
  install hint. Do not guess a ClawHub slug or treat unpublished metadata as an
@@ -36,7 +57,7 @@ installable release.
36
57
  From an Entroly source checkout:
37
58
 
38
59
  ```bash
39
- pip install "entroly>=1.0.78"
60
+ pip install "entroly>=1.0.81"
40
61
  openclaw plugins install ./integrations/openclaw
41
62
  openclaw plugins enable entroly
42
63
  openclaw gateway restart
@@ -65,8 +86,28 @@ After the first agent turn, run `/entroly-context` in any connected channel to
65
86
  see the estimated before/after context size, reduction, warnings, and receipt.
66
87
  Run `/entroly-context doctor` to verify the configured Python executable and
67
88
  local JSONL bridge before inviting users onto the Gateway. The plugin requires
68
- the Entroly 1.0.64 bridge v2 protocol; doctor reports an actionable upgrade
69
- instead of accepting an older, incompatible Python installation.
89
+ the `entroly.openclaw.bridge.v2` protocol, which shipped in Entroly 1.0.57;
90
+ doctor reports an actionable upgrade instead of accepting an older,
91
+ incompatible Python installation.
92
+
93
+ ## Tool output
94
+
95
+ In a long session the tool logs are usually the largest thing in the context: a
96
+ single test, build, or linter run can outweigh every message written around it.
97
+ When the transcript exceeds the budget, Entroly compresses the payload of
98
+ `tool_result` blocks that sit behind the preserved recent turns, using the same
99
+ codecs the proxy applies — specialized codecs first, then the pattern rules,
100
+ then the entropic shell codec — so failures, summaries, and identifiers survive
101
+ while repeated passing lines do not.
102
+
103
+ A block's `tool_use_id` and `is_error` are never rewritten, and any
104
+ `tool_result` carrying a key Entroly does not recognize is passed through
105
+ untouched. Within budget nothing is compressed at all, including tool output.
106
+ The assemble response reports `tool_output_tokens_saved` separately from
107
+ `tokens_saved`, so a receipt reader can tell reduction that came from
108
+ discarding tool noise from reduction that came from compressing what a person
109
+ or the model actually wrote. Set `compress_tool_results: false` on the assemble
110
+ request to disable it.
70
111
 
71
112
  OpenClaw's resolved prompt token budget is authoritative. When an older or
72
113
  degraded host cannot provide one, Entroly automatically resolves a conservative
@@ -77,8 +118,10 @@ digest, native window, output reserve, safety reserve, and source.
77
118
 
78
119
  Context-budget discovery is local and enabled by default. It does not enable
79
120
  remote provider discovery or send credentials anywhere. Local Ollama/LM Studio
80
- and remote OpenRouter discovery remain separate operator opt-ins through
81
- Entroly's model-registry environment controls. Disable this fallback with
121
+ discovery and a local `ENTROLY_MODEL_REGISTRY` override remain explicit
122
+ operator controls. Remote OpenRouter discovery is deliberately unavailable
123
+ inside the OpenClaw bridge because provider credentials do not cross the
124
+ subprocess boundary. Disable local fallback with
82
125
  `autoDiscoverContextBudget: false`.
83
126
 
84
127
  For a custom model that neither OpenClaw nor trusted registry metadata can
@@ -191,6 +234,8 @@ archive receipts or raise `receiptMaxFiles` / `receiptMaxBytes` explicitly.
191
234
 
192
235
  ## Safety contract
193
236
 
237
+ - Provider API keys and unrelated host secrets are removed from the local
238
+ Python bridge environment before it starts.
194
239
  - System and developer messages are never modified.
195
240
  - Signed text, thinking/reasoning, images, tool calls, tool-result metadata,
196
241
  opaque provider signatures, and unknown content blocks are never modified.
package/bridge-client.js CHANGED
@@ -3,6 +3,51 @@ import readline from "node:readline";
3
3
 
4
4
  export const ENTROLY_BRIDGE_SCHEMA = "entroly.openclaw.bridge.v2";
5
5
 
6
+ const BRIDGE_ENVIRONMENT_ALLOWLIST = new Set([
7
+ "APPDATA",
8
+ "COMSPEC",
9
+ "ENTROLY_AIR_GAP",
10
+ "ENTROLY_DISABLE_TELEMETRY",
11
+ "ENTROLY_DISCOVER_LOCAL_MODELS",
12
+ "ENTROLY_LMSTUDIO_BASE",
13
+ "ENTROLY_MODEL_DISCOVERY_MAX",
14
+ "ENTROLY_MODEL_DISCOVERY_TIMEOUT",
15
+ "ENTROLY_MODEL_REGISTRY",
16
+ "ENTROLY_OLLAMA_BASE",
17
+ "ENTROLY_OLLAMA_INSPECT_CONTEXT",
18
+ "ENTROLY_OPENCLAW_RECEIPT_KEY_FILE",
19
+ "ENTROLY_UNKNOWN_MODEL_CONTEXT",
20
+ "HOME",
21
+ "HOMEDRIVE",
22
+ "HOMEPATH",
23
+ "LANG",
24
+ "LC_ALL",
25
+ "LC_CTYPE",
26
+ "LOCALAPPDATA",
27
+ "PATH",
28
+ "PATHEXT",
29
+ "SYSTEMDRIVE",
30
+ "SYSTEMROOT",
31
+ "TEMP",
32
+ "TMP",
33
+ "TMPDIR",
34
+ "TZ",
35
+ "USERPROFILE",
36
+ "WINDIR",
37
+ "XDG_STATE_HOME",
38
+ ]);
39
+
40
+ export function buildBridgeEnvironment(source = {}) {
41
+ return Object.fromEntries(
42
+ Object.entries(source).filter(
43
+ ([name, value]) =>
44
+ value !== undefined &&
45
+ value !== null &&
46
+ BRIDGE_ENVIRONMENT_ALLOWLIST.has(name.toUpperCase()),
47
+ ),
48
+ );
49
+ }
50
+
6
51
  export function validateBridgeHealth(result) {
7
52
  if (
8
53
  !result ||
@@ -30,7 +75,7 @@ export class EntrolyBridgeClient {
30
75
  this.timeoutMs = timeoutMs;
31
76
  this.logger = logger;
32
77
  this.spawnProcess = spawnProcess;
33
- this.environment = environment;
78
+ this.environment = buildBridgeEnvironment(environment);
34
79
  this.nextId = 1;
35
80
  this.pending = new Map();
36
81
  this.process = undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "entroly-openclaw",
3
- "version": "1.0.78",
3
+ "version": "1.0.81",
4
4
  "description": "Provider-independent, auditable context engineering for every OpenClaw model route",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",