usertrust-openclaw 1.4.0 → 2.0.0
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/dist/index.d.ts +33 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -32
- package/dist/index.js.map +1 -1
- package/dist/stream-governor.d.ts.map +1 -1
- package/dist/stream-governor.js +4 -0
- package/dist/stream-governor.js.map +1 -1
- package/dist/token-extractor.d.ts +25 -0
- package/dist/token-extractor.d.ts.map +1 -1
- package/dist/token-extractor.js +86 -2
- package/dist/token-extractor.js.map +1 -1
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +15 -3
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @usertrust/openclaw — usertrust governance plugin for OpenClaw
|
|
3
|
+
*
|
|
4
|
+
* Adds budget enforcement, policy gates, and hash-chained audit trails
|
|
5
|
+
* to every LLM call in OpenClaw. Zero code changes required — install
|
|
6
|
+
* the plugin and every call is governed.
|
|
7
|
+
*
|
|
8
|
+
* Installation:
|
|
9
|
+
* openclaw plugins install @usertrust/openclaw
|
|
10
|
+
*
|
|
11
|
+
* Or manual setup in openclaw.json:
|
|
12
|
+
* {
|
|
13
|
+
* "plugins": {
|
|
14
|
+
* "entries": {
|
|
15
|
+
* "usertrust": {
|
|
16
|
+
* "enabled": true,
|
|
17
|
+
* "config": { "budget": 100000, "dryRun": true }
|
|
18
|
+
* }
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
*
|
|
23
|
+
* How it works:
|
|
24
|
+
* User's LLM call → OpenClaw → wrapStreamFn (usertrust) →
|
|
25
|
+
* 1. Check budget (PENDING hold)
|
|
26
|
+
* 2. Forward to real stream
|
|
27
|
+
* 3. Accumulate token usage from stream
|
|
28
|
+
* 4. POST settle with actual cost
|
|
29
|
+
* 5. Return governed stream to OpenClaw
|
|
30
|
+
*/
|
|
1
31
|
import type { Governor } from "usertrust";
|
|
2
32
|
import type { OpenClawPluginApi, ProviderPlugin, StreamFn, UsertrustPluginConfig } from "./types.js";
|
|
3
|
-
export {
|
|
4
|
-
export { createAccumulator, extractUsageFromEvent, extractUsageFromProviderChunk,
|
|
5
|
-
export type {
|
|
33
|
+
export { wrapCompleteWithGovernance, wrapStreamWithGovernance } from "./stream-governor.js";
|
|
34
|
+
export { createAccumulator, extractTextDeltaLength, extractUsageFromEvent, extractUsageFromProviderChunk, } from "./token-extractor.js";
|
|
35
|
+
export type { GovernedStreamMeta, ProviderPlugin, StreamContext, StreamEvent, StreamFn, StreamUsage, UsertrustPluginConfig, } from "./types.js";
|
|
6
36
|
/**
|
|
7
37
|
* OpenClaw plugin entry point.
|
|
8
38
|
*
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,KAAK,EACX,iBAAiB,EACjB,cAAc,EAGd,QAAQ,EACR,qBAAqB,EACrB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EACN,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,6BAA6B,GAC7B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACX,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,WAAW,EACX,QAAQ,EACR,WAAW,EACX,qBAAqB,GACrB,MAAM,YAAY,CAAC;AAKpB;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CA0B7D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,cAAc,CAWnF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,sBAAsB,CAC3C,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,qBAAqB,GAC3B,OAAO,CAAC;IAAE,gBAAgB,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC,CAI7D;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,QAAQ,GAAG,IAAI,CAE7C;AAED;;;GAGG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAM9C"}
|
package/dist/index.js
CHANGED
|
@@ -1,40 +1,10 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
// Copyright 2026 Usertools, Inc.
|
|
3
|
-
/**
|
|
4
|
-
* @usertrust/openclaw — usertrust governance plugin for OpenClaw
|
|
5
|
-
*
|
|
6
|
-
* Adds budget enforcement, policy gates, and hash-chained audit trails
|
|
7
|
-
* to every LLM call in OpenClaw. Zero code changes required — install
|
|
8
|
-
* the plugin and every call is governed.
|
|
9
|
-
*
|
|
10
|
-
* Installation:
|
|
11
|
-
* openclaw plugins install @usertrust/openclaw
|
|
12
|
-
*
|
|
13
|
-
* Or manual setup in openclaw.json:
|
|
14
|
-
* {
|
|
15
|
-
* "plugins": {
|
|
16
|
-
* "entries": {
|
|
17
|
-
* "usertrust": {
|
|
18
|
-
* "enabled": true,
|
|
19
|
-
* "config": { "budget": 100000, "dryRun": true }
|
|
20
|
-
* }
|
|
21
|
-
* }
|
|
22
|
-
* }
|
|
23
|
-
* }
|
|
24
|
-
*
|
|
25
|
-
* How it works:
|
|
26
|
-
* User's LLM call → OpenClaw → wrapStreamFn (usertrust) →
|
|
27
|
-
* 1. Check budget (PENDING hold)
|
|
28
|
-
* 2. Forward to real stream
|
|
29
|
-
* 3. Accumulate token usage from stream
|
|
30
|
-
* 4. POST settle with actual cost
|
|
31
|
-
* 5. Return governed stream to OpenClaw
|
|
32
|
-
*/
|
|
33
3
|
import { createGovernor } from "usertrust";
|
|
34
4
|
import { wrapStreamWithGovernance } from "./stream-governor.js";
|
|
35
5
|
// Re-export for consumers
|
|
36
|
-
export {
|
|
37
|
-
export { createAccumulator, extractUsageFromEvent, extractUsageFromProviderChunk,
|
|
6
|
+
export { wrapCompleteWithGovernance, wrapStreamWithGovernance } from "./stream-governor.js";
|
|
7
|
+
export { createAccumulator, extractTextDeltaLength, extractUsageFromEvent, extractUsageFromProviderChunk, } from "./token-extractor.js";
|
|
38
8
|
/** Active governor instance — singleton per plugin lifecycle. */
|
|
39
9
|
let governor = null;
|
|
40
10
|
/**
|
|
@@ -155,6 +125,22 @@ function initGovernor(config) {
|
|
|
155
125
|
...(config.proxy != null ? { proxy: config.proxy } : {}),
|
|
156
126
|
...(config.proxyKey != null ? { key: config.proxyKey } : {}),
|
|
157
127
|
...(config.vaultBase != null ? { vaultBase: config.vaultBase } : {}),
|
|
128
|
+
// M2: forward the operator's endpoint declaration into the headless
|
|
129
|
+
// governor (GovernorOpts.endpoint). Without this, every OpenClaw call
|
|
130
|
+
// defaults to cloud scope — local models would meter at frontier
|
|
131
|
+
// fallback and inherit strict cloud anomaly thresholds. runtime defaults
|
|
132
|
+
// to "unknown"; baseURL is omitted (never undefined) when absent.
|
|
133
|
+
...(config.endpoint != null
|
|
134
|
+
? {
|
|
135
|
+
endpoint: {
|
|
136
|
+
class: config.endpoint.class,
|
|
137
|
+
runtime: config.endpoint.runtime ?? "unknown",
|
|
138
|
+
...(config.endpoint.baseURL !== undefined
|
|
139
|
+
? { baseURL: config.endpoint.baseURL }
|
|
140
|
+
: {}),
|
|
141
|
+
},
|
|
142
|
+
}
|
|
143
|
+
: {}),
|
|
158
144
|
}).then((gov) => {
|
|
159
145
|
governor = gov;
|
|
160
146
|
return gov;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-governor.d.ts","sourceRoot":"","sources":["../src/stream-governor.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAiB,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAe,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEvE;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAQzF;
|
|
1
|
+
{"version":3,"file":"stream-governor.d.ts","sourceRoot":"","sources":["../src/stream-governor.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAiB,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAe,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEvE;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAQzF;AA6DD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACzC,CAAC,SAAS;IAAE,KAAK,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EAEnE,UAAU,EAAE,CACX,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,OAAO,CAAC,CAAC,CAAC,EACf,QAAQ,EAAE,QAAQ,GAChB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CA6C1F"}
|
package/dist/stream-governor.js
CHANGED
|
@@ -51,6 +51,10 @@ async function* governedStream(streamFn, governor, model, context, options) {
|
|
|
51
51
|
: {}),
|
|
52
52
|
chunksDelivered: usage.chunksDelivered,
|
|
53
53
|
usageSource: usage.usageReported ? "provider" : "estimated",
|
|
54
|
+
// Ollama-native eval_duration (when the stream carried it) flows to
|
|
55
|
+
// receipt.meter.computeMs. Spread keeps the key OMITTED when absent —
|
|
56
|
+
// never `computeMs: undefined` (plan A6).
|
|
57
|
+
...(usage.computeMs != null ? { computeMs: usage.computeMs } : {}),
|
|
54
58
|
});
|
|
55
59
|
}
|
|
56
60
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-governor.js","sourceRoot":"","sources":["../src/stream-governor.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAgBjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAAkB,EAAE,QAAkB;IAC9E,OAAO,CACN,KAAa,EACb,OAAsB,EACtB,OAAiC,EACJ,EAAE;QAC/B,OAAO,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC,CAAC;AACH,CAAC;AAED,KAAK,SAAS,CAAC,CAAC,cAAc,CAC7B,QAAkB,EAClB,QAAkB,EAClB,KAAa,EACb,OAAsB,EACtB,OAAiC;IAEjC,+BAA+B;IAC/B,sEAAsE;IACtE,wEAAwE;IACxE,4EAA4E;IAC5E,IAAI,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACd,gCAAgC,QAAQ,CAAC,eAAe,EAAE,0BAA0B,CACpF,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,MAAM,IAAI,GAAkB,MAAM,QAAQ,CAAC,SAAS,CAAC;QACpD,KAAK;QACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,MAAM,EAAE;YACP,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5E;KACD,CAAC,CAAC;IAEH,oCAAoC;IACpC,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;IAExC,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAEjD,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAClC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC;QACb,CAAC;QAED,+BAA+B;QAC/B,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;QAEnC,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE;YAC3B,GAAG,CAAC,KAAK,CAAC,aAAa;gBACtB,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE;gBACtE,CAAC,CAAC,EAAE,CAAC;YACN,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW;
|
|
1
|
+
{"version":3,"file":"stream-governor.js","sourceRoot":"","sources":["../src/stream-governor.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,12 @@ export interface AccumulatedUsage {
|
|
|
14
14
|
outputTokens: number;
|
|
15
15
|
chunksDelivered: number;
|
|
16
16
|
usageReported: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Generation wall time in ms, from an Ollama-native final chunk's
|
|
19
|
+
* eval_duration. Omitted (never `undefined`-valued) when the stream
|
|
20
|
+
* carried no native duration.
|
|
21
|
+
*/
|
|
22
|
+
computeMs?: number | undefined;
|
|
17
23
|
}
|
|
18
24
|
/**
|
|
19
25
|
* Duck-type chunks from raw provider streams. We support:
|
|
@@ -29,9 +35,27 @@ export interface AccumulatedUsage {
|
|
|
29
35
|
* Gemini:
|
|
30
36
|
* { candidates: [{ content: { parts: [...] } }], usageMetadata: { promptTokenCount, candidatesTokenCount } }
|
|
31
37
|
*
|
|
38
|
+
* Ollama native (/api/chat, /api/generate final chunk):
|
|
39
|
+
* { done: true, prompt_eval_count, eval_count, eval_duration }
|
|
40
|
+
*
|
|
32
41
|
* Returns null if the chunk is not a recognized usage-bearing shape.
|
|
33
42
|
*/
|
|
34
43
|
export declare function extractUsageFromProviderChunk(chunk: unknown): StreamUsage | null;
|
|
44
|
+
/**
|
|
45
|
+
* Extract generation compute time (ms) from an Ollama-native final chunk.
|
|
46
|
+
*
|
|
47
|
+
* Ollama reports `eval_duration` in NANOSECONDS on the `done: true` chunk.
|
|
48
|
+
* Converted to whole milliseconds and clamped to [0, 86_400_000] (24h) to
|
|
49
|
+
* guard absurd or hostile values (plan A8).
|
|
50
|
+
*
|
|
51
|
+
* `prompt_eval_duration` is explicitly IGNORED in M2 (plan A8): computeMs
|
|
52
|
+
* meters generation (eval) wall time only; prompt-processing time is a
|
|
53
|
+
* future enrichment once its KV-cache interaction semantics are pinned.
|
|
54
|
+
*
|
|
55
|
+
* Returns undefined for non-final chunks, non-Ollama shapes, or
|
|
56
|
+
* missing/non-finite durations.
|
|
57
|
+
*/
|
|
58
|
+
export declare function extractComputeMs(chunk: unknown): number | undefined;
|
|
35
59
|
/**
|
|
36
60
|
* Estimate output tokens from a streaming chunk's text delta.
|
|
37
61
|
* Used as a fallback when usage isn't reported. ~4 chars per token.
|
|
@@ -40,6 +64,7 @@ export declare function extractUsageFromProviderChunk(chunk: unknown): StreamUsa
|
|
|
40
64
|
* Anthropic: chunk.delta.text (content_block_delta)
|
|
41
65
|
* OpenAI: chunk.choices[0].delta.content
|
|
42
66
|
* Gemini: chunk.candidates[0].content.parts[0].text
|
|
67
|
+
* Ollama: chunk.message.content (native /api/chat, non-final only)
|
|
43
68
|
* pi-ai: chunk.text (text_delta event)
|
|
44
69
|
*/
|
|
45
70
|
export declare function extractTextDeltaLength(chunk: unknown): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-extractor.d.ts","sourceRoot":"","sources":["../src/token-extractor.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE3D,6CAA6C;AAC7C,MAAM,WAAW,gBAAgB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"token-extractor.d.ts","sourceRoot":"","sources":["../src/token-extractor.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE3D,6CAA6C;AAC7C,MAAM,WAAW,gBAAgB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAaD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CAyEhF;AAqBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAQnE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAgD7D;AAMD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,GAAG,IAAI,CAgB5E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI;IACpC,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,MAAM,IAAI,gBAAgB,CAAC;CAC3B,CAwCA"}
|
package/dist/token-extractor.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
// Copyright 2026 Usertools, Inc.
|
|
3
3
|
/** Max tokens to accept from a provider (prevents Infinity/overflow in cost math). */
|
|
4
4
|
const MAX_TOKENS = 2_000_000;
|
|
5
|
+
/** Max computeMs to accept — 24h; guards absurd/hostile eval_duration values (plan A8). */
|
|
6
|
+
const MAX_COMPUTE_MS = 86_400_000;
|
|
5
7
|
function clampTokens(n) {
|
|
6
8
|
if (!Number.isFinite(n))
|
|
7
9
|
return 0;
|
|
@@ -21,6 +23,9 @@ function clampTokens(n) {
|
|
|
21
23
|
* Gemini:
|
|
22
24
|
* { candidates: [{ content: { parts: [...] } }], usageMetadata: { promptTokenCount, candidatesTokenCount } }
|
|
23
25
|
*
|
|
26
|
+
* Ollama native (/api/chat, /api/generate final chunk):
|
|
27
|
+
* { done: true, prompt_eval_count, eval_count, eval_duration }
|
|
28
|
+
*
|
|
24
29
|
* Returns null if the chunk is not a recognized usage-bearing shape.
|
|
25
30
|
*/
|
|
26
31
|
export function extractUsageFromProviderChunk(chunk) {
|
|
@@ -87,8 +92,59 @@ export function extractUsageFromProviderChunk(chunk) {
|
|
|
87
92
|
};
|
|
88
93
|
}
|
|
89
94
|
}
|
|
95
|
+
// ── Ollama native final chunk (done: true + eval counts) ──
|
|
96
|
+
const ollama = extractOllamaUsage(c);
|
|
97
|
+
if (ollama != null)
|
|
98
|
+
return ollama;
|
|
90
99
|
return null;
|
|
91
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* Ollama-native final chunk (/api/chat, /api/generate): `done === true` with
|
|
103
|
+
* numeric prompt_eval_count / eval_count token counts. OpenAI chunks carry
|
|
104
|
+
* neither field (they report prompt_tokens/completion_tokens under `usage`),
|
|
105
|
+
* so OpenAI-compat streams cannot misfire into this family.
|
|
106
|
+
*/
|
|
107
|
+
function extractOllamaUsage(chunk) {
|
|
108
|
+
if (chunk == null || typeof chunk !== "object")
|
|
109
|
+
return null;
|
|
110
|
+
const c = chunk;
|
|
111
|
+
if (c.done !== true)
|
|
112
|
+
return null;
|
|
113
|
+
const input = readNum(c.prompt_eval_count);
|
|
114
|
+
const output = readNum(c.eval_count);
|
|
115
|
+
if (input == null && output == null)
|
|
116
|
+
return null;
|
|
117
|
+
return {
|
|
118
|
+
inputTokens: clampTokens(input ?? 0),
|
|
119
|
+
outputTokens: clampTokens(output ?? 0),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Extract generation compute time (ms) from an Ollama-native final chunk.
|
|
124
|
+
*
|
|
125
|
+
* Ollama reports `eval_duration` in NANOSECONDS on the `done: true` chunk.
|
|
126
|
+
* Converted to whole milliseconds and clamped to [0, 86_400_000] (24h) to
|
|
127
|
+
* guard absurd or hostile values (plan A8).
|
|
128
|
+
*
|
|
129
|
+
* `prompt_eval_duration` is explicitly IGNORED in M2 (plan A8): computeMs
|
|
130
|
+
* meters generation (eval) wall time only; prompt-processing time is a
|
|
131
|
+
* future enrichment once its KV-cache interaction semantics are pinned.
|
|
132
|
+
*
|
|
133
|
+
* Returns undefined for non-final chunks, non-Ollama shapes, or
|
|
134
|
+
* missing/non-finite durations.
|
|
135
|
+
*/
|
|
136
|
+
export function extractComputeMs(chunk) {
|
|
137
|
+
if (chunk == null || typeof chunk !== "object")
|
|
138
|
+
return undefined;
|
|
139
|
+
const c = chunk;
|
|
140
|
+
if (c.done !== true)
|
|
141
|
+
return undefined;
|
|
142
|
+
const ns = Number(c.eval_duration);
|
|
143
|
+
if (!Number.isFinite(ns))
|
|
144
|
+
return undefined;
|
|
145
|
+
const ms = Math.round(ns / 1e6);
|
|
146
|
+
return Math.min(Math.max(0, ms), MAX_COMPUTE_MS);
|
|
147
|
+
}
|
|
92
148
|
/**
|
|
93
149
|
* Estimate output tokens from a streaming chunk's text delta.
|
|
94
150
|
* Used as a fallback when usage isn't reported. ~4 chars per token.
|
|
@@ -97,6 +153,7 @@ export function extractUsageFromProviderChunk(chunk) {
|
|
|
97
153
|
* Anthropic: chunk.delta.text (content_block_delta)
|
|
98
154
|
* OpenAI: chunk.choices[0].delta.content
|
|
99
155
|
* Gemini: chunk.candidates[0].content.parts[0].text
|
|
156
|
+
* Ollama: chunk.message.content (native /api/chat, non-final only)
|
|
100
157
|
* pi-ai: chunk.text (text_delta event)
|
|
101
158
|
*/
|
|
102
159
|
export function extractTextDeltaLength(chunk) {
|
|
@@ -135,6 +192,16 @@ export function extractTextDeltaLength(chunk) {
|
|
|
135
192
|
return len;
|
|
136
193
|
}
|
|
137
194
|
}
|
|
195
|
+
// Ollama native /api/chat delta: { message: { content }, done: false }.
|
|
196
|
+
// Only NON-final chunks are deltas — the done chunk repeats an empty
|
|
197
|
+
// content alongside the usage totals, so it must not count as text.
|
|
198
|
+
// (Anthropic message_start also carries `message`, but its content is an
|
|
199
|
+
// array, so the string check keeps it at 0 as before.)
|
|
200
|
+
if (c.done !== true && typeof c.message === "object" && c.message != null) {
|
|
201
|
+
const msg = c.message;
|
|
202
|
+
if (typeof msg.content === "string")
|
|
203
|
+
return msg.content.length;
|
|
204
|
+
}
|
|
138
205
|
return 0;
|
|
139
206
|
}
|
|
140
207
|
function readNum(v) {
|
|
@@ -170,18 +237,35 @@ export function createAccumulator() {
|
|
|
170
237
|
let outputTokens = 0;
|
|
171
238
|
let chunksDelivered = 0;
|
|
172
239
|
let usageReported = false;
|
|
240
|
+
let computeMs;
|
|
173
241
|
return {
|
|
174
242
|
update(event) {
|
|
175
243
|
chunksDelivered++;
|
|
176
|
-
|
|
244
|
+
// pi-ai events are the primary shape. Ollama-native chunks are the one
|
|
245
|
+
// raw-provider family the accumulator also understands (OpenClaw can hand
|
|
246
|
+
// /api/chat NDJSON through un-normalized); other raw provider shapes stay
|
|
247
|
+
// with extractUsageFromProviderChunk consumers, so e.g. raw Anthropic
|
|
248
|
+
// message_start/message_delta pairs can't half-replace each other here.
|
|
249
|
+
const usage = extractUsageFromEvent(event) ?? extractOllamaUsage(event);
|
|
177
250
|
if (usage != null) {
|
|
178
251
|
inputTokens = usage.inputTokens;
|
|
179
252
|
outputTokens = usage.outputTokens;
|
|
180
253
|
usageReported = true;
|
|
181
254
|
}
|
|
255
|
+
const ms = extractComputeMs(event);
|
|
256
|
+
if (ms != null) {
|
|
257
|
+
computeMs = ms;
|
|
258
|
+
}
|
|
182
259
|
},
|
|
183
260
|
result() {
|
|
184
|
-
return {
|
|
261
|
+
return {
|
|
262
|
+
inputTokens,
|
|
263
|
+
outputTokens,
|
|
264
|
+
chunksDelivered,
|
|
265
|
+
usageReported,
|
|
266
|
+
// Omitted entirely when absent — never `computeMs: undefined` (plan A6).
|
|
267
|
+
...(computeMs != null ? { computeMs } : {}),
|
|
268
|
+
};
|
|
185
269
|
},
|
|
186
270
|
};
|
|
187
271
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-extractor.js","sourceRoot":"","sources":["../src/token-extractor.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;
|
|
1
|
+
{"version":3,"file":"token-extractor.js","sourceRoot":"","sources":["../src/token-extractor.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* events. These mirror the OpenClaw/pi-ai interfaces without requiring
|
|
6
6
|
* the packages at compile time.
|
|
7
7
|
*/
|
|
8
|
+
import type { EndpointClass, LocalRuntime } from "usertrust";
|
|
8
9
|
export interface StreamUsage {
|
|
9
10
|
inputTokens: number;
|
|
10
11
|
outputTokens: number;
|
|
@@ -73,6 +74,18 @@ export interface UsertrustPluginConfig {
|
|
|
73
74
|
proxyKey?: string;
|
|
74
75
|
/** Vault directory (audit chain, spend ledger). Defaults to cwd. */
|
|
75
76
|
vaultBase?: string;
|
|
77
|
+
/**
|
|
78
|
+
* Explicit endpoint scope for this OpenClaw runtime (M2). TRUSTED-OPERATOR
|
|
79
|
+
* declaration: the headless/OpenClaw path has no client baseURL to sniff, so
|
|
80
|
+
* core's config.endpoints[] URL matchers do NOT apply here (design decision 6)
|
|
81
|
+
* — declare `{ class: "local" }` yourself or every call meters as cloud
|
|
82
|
+
* (frontier fallback pricing for local models + strict cloud anomaly thresholds).
|
|
83
|
+
*/
|
|
84
|
+
endpoint?: {
|
|
85
|
+
class: EndpointClass;
|
|
86
|
+
runtime?: LocalRuntime;
|
|
87
|
+
baseURL?: string;
|
|
88
|
+
};
|
|
76
89
|
}
|
|
77
90
|
export interface StreamContext {
|
|
78
91
|
messages: unknown[];
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "usertrust-openclaw",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "usertrust governance plugin for OpenClaw. Budget enforcement, audit trails, and policy gates for every LLM call — zero code changes.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Usertools, Inc. <hello@usertools.ai> (https://usertrust.ai)",
|
|
@@ -11,7 +11,16 @@
|
|
|
11
11
|
"directory": "packages/openclaw"
|
|
12
12
|
},
|
|
13
13
|
"bugs": "https://github.com/usertools-ai/usertrust/issues",
|
|
14
|
-
"keywords": [
|
|
14
|
+
"keywords": [
|
|
15
|
+
"openclaw",
|
|
16
|
+
"usertrust",
|
|
17
|
+
"ai",
|
|
18
|
+
"governance",
|
|
19
|
+
"budget",
|
|
20
|
+
"audit",
|
|
21
|
+
"llm",
|
|
22
|
+
"plugin"
|
|
23
|
+
],
|
|
15
24
|
"type": "module",
|
|
16
25
|
"main": "dist/index.js",
|
|
17
26
|
"types": "dist/index.d.ts",
|
|
@@ -26,7 +35,10 @@
|
|
|
26
35
|
"prepublishOnly": "tsc",
|
|
27
36
|
"demo": "tsx demo/runaway-agent.ts"
|
|
28
37
|
},
|
|
29
|
-
"files": [
|
|
38
|
+
"files": [
|
|
39
|
+
"dist",
|
|
40
|
+
"openclaw.plugin.json"
|
|
41
|
+
],
|
|
30
42
|
"dependencies": {
|
|
31
43
|
"usertrust": "*"
|
|
32
44
|
},
|