optimus-tool-call 0.1.13 → 0.1.15
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 +5 -2
- package/dist/lib/endpoint-config.d.ts +1 -11
- package/dist/lib/endpoint-config.d.ts.map +1 -1
- package/dist/lib/endpoint-config.js +1 -65
- package/dist/lib/endpoint-config.js.map +1 -1
- package/dist/lib/hardware-uuid.d.ts +2 -0
- package/dist/lib/hardware-uuid.d.ts.map +1 -1
- package/dist/lib/hardware-uuid.js +3 -2
- package/dist/lib/hardware-uuid.js.map +1 -1
- package/dist/lib/machine-auth.d.ts +2 -0
- package/dist/lib/machine-auth.d.ts.map +1 -1
- package/dist/lib/machine-auth.js +3 -2
- package/dist/lib/machine-auth.js.map +1 -1
- package/dist/lib/startup-sync.d.ts +9 -0
- package/dist/lib/startup-sync.d.ts.map +1 -0
- package/dist/lib/startup-sync.js +66 -0
- package/dist/lib/startup-sync.js.map +1 -0
- package/dist/lib/streaming.d.ts.map +1 -1
- package/dist/lib/streaming.js +38 -19
- package/dist/lib/streaming.js.map +1 -1
- package/dist/lib/user-profile.d.ts +16 -0
- package/dist/lib/user-profile.d.ts.map +1 -0
- package/dist/lib/user-profile.js +173 -0
- package/dist/lib/user-profile.js.map +1 -0
- package/dist/test/streaming.test.js +5 -1
- package/dist/test/streaming.test.js.map +1 -1
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -108,11 +108,14 @@ And 30+ more...
|
|
|
108
108
|
Environment variables (optional):
|
|
109
109
|
|
|
110
110
|
```bash
|
|
111
|
-
OPTIMUS_API_URL=
|
|
112
|
-
|
|
111
|
+
OPTIMUS_API_URL=https://your-host/ # Backend base URL (same as log-llm-config; see optimus-tofu)
|
|
112
|
+
OPTIMUS_ENDPOINT=... # Alternative to OPTIMUS_API_URL
|
|
113
|
+
OPTIMUS_HARDWARE_UUID=... # Override when no stable hardware UUID (e.g. Linux CI)
|
|
113
114
|
OPTIMUS_BATCH_SIZE=50 # Batch size before flush (default: 1 for testing, 50 for prod)
|
|
114
115
|
```
|
|
115
116
|
|
|
117
|
+
Ingestion uses the same machine auth as `log-llm-config`: keys under `~/opt-ai-sec/management/auth_key.txt`, handshake against `/endpoint_security/auth/`, and HMAC signatures on each batch (see backend `batch_create`).
|
|
118
|
+
|
|
116
119
|
## Architecture
|
|
117
120
|
|
|
118
121
|
```
|
|
@@ -1,12 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* Endpoint resolution order:
|
|
3
|
-
* 1) OPTIMUS_API_URL (legacy optimus-tool-call override)
|
|
4
|
-
* 2) OPTIMUS_ENDPOINT (shared with log-llm-config)
|
|
5
|
-
* 3) optimus_dev.env upward search (OPTIMUS_ENDPOINT)
|
|
6
|
-
* 4) default https://demo.optimuslabs.io/
|
|
7
|
-
*/
|
|
8
|
-
export declare function loadEndpointBase(options?: {
|
|
9
|
-
cwd?: string;
|
|
10
|
-
env?: NodeJS.ProcessEnv;
|
|
11
|
-
}): string;
|
|
1
|
+
export { loadEndpointBase } from "optimus-tofu";
|
|
12
2
|
//# sourceMappingURL=endpoint-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoint-config.d.ts","sourceRoot":"","sources":["../../src/lib/endpoint-config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"endpoint-config.d.ts","sourceRoot":"","sources":["../../src/lib/endpoint-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -1,66 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
const DEFAULT_ENDPOINT = "https://demo.optimuslabs.io/";
|
|
4
|
-
function normalizeBaseUrl(value) {
|
|
5
|
-
return value.replace(/\/+$/, "") + "/";
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Walk up from `dir` looking for `optimus_dev.env`, stopping at filesystem root.
|
|
9
|
-
*/
|
|
10
|
-
function findEnvFileUpward(dir) {
|
|
11
|
-
let current = dir;
|
|
12
|
-
while (true) {
|
|
13
|
-
const candidate = path.join(current, "optimus_dev.env");
|
|
14
|
-
if (existsSync(candidate))
|
|
15
|
-
return candidate;
|
|
16
|
-
const parent = path.dirname(current);
|
|
17
|
-
if (parent === current)
|
|
18
|
-
return null;
|
|
19
|
-
current = parent;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
function parseEndpointFromFile(filePath) {
|
|
23
|
-
try {
|
|
24
|
-
const envContent = readFileSync(filePath, "utf8");
|
|
25
|
-
for (const line of envContent.split(/\r?\n/)) {
|
|
26
|
-
const trimmed = line.trim();
|
|
27
|
-
if (!trimmed || trimmed.startsWith("#"))
|
|
28
|
-
continue;
|
|
29
|
-
const [key, ...rest] = trimmed.split("=");
|
|
30
|
-
if (key === "OPTIMUS_ENDPOINT") {
|
|
31
|
-
const value = rest.join("=").trim();
|
|
32
|
-
if (value)
|
|
33
|
-
return normalizeBaseUrl(value);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
catch {
|
|
38
|
-
// ignore
|
|
39
|
-
}
|
|
40
|
-
return null;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Endpoint resolution order:
|
|
44
|
-
* 1) OPTIMUS_API_URL (legacy optimus-tool-call override)
|
|
45
|
-
* 2) OPTIMUS_ENDPOINT (shared with log-llm-config)
|
|
46
|
-
* 3) optimus_dev.env upward search (OPTIMUS_ENDPOINT)
|
|
47
|
-
* 4) default https://demo.optimuslabs.io/
|
|
48
|
-
*/
|
|
49
|
-
export function loadEndpointBase(options) {
|
|
50
|
-
const cwd = options?.cwd ?? process.cwd();
|
|
51
|
-
const env = options?.env ?? process.env;
|
|
52
|
-
const fromApiUrl = env.OPTIMUS_API_URL?.trim();
|
|
53
|
-
if (fromApiUrl)
|
|
54
|
-
return normalizeBaseUrl(fromApiUrl);
|
|
55
|
-
const fromEndpoint = env.OPTIMUS_ENDPOINT?.trim();
|
|
56
|
-
if (fromEndpoint)
|
|
57
|
-
return normalizeBaseUrl(fromEndpoint);
|
|
58
|
-
const found = findEnvFileUpward(cwd);
|
|
59
|
-
if (found) {
|
|
60
|
-
const fromFile = parseEndpointFromFile(found);
|
|
61
|
-
if (fromFile)
|
|
62
|
-
return fromFile;
|
|
63
|
-
}
|
|
64
|
-
return DEFAULT_ENDPOINT;
|
|
65
|
-
}
|
|
1
|
+
export { loadEndpointBase } from "optimus-tofu";
|
|
66
2
|
//# sourceMappingURL=endpoint-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoint-config.js","sourceRoot":"","sources":["../../src/lib/endpoint-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"endpoint-config.js","sourceRoot":"","sources":["../../src/lib/endpoint-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
* Hardware UUID resolution — same probe order as log-llm-config
|
|
3
3
|
* `src/log_uuid/hardware_uuid.ts` (see design_notes/user_profile_field_sources.md).
|
|
4
4
|
*/
|
|
5
|
+
/** Shared shell one-liner helper (also used by `user-profile.ts`, same as log-llm-config). */
|
|
6
|
+
export declare function readCommandOutput(command: string): string;
|
|
5
7
|
/** Prefer `OPTIMUS_HARDWARE_UUID`, then macOS probes (matches log-llm-config). */
|
|
6
8
|
export declare function resolveHardwareUuid(): string;
|
|
7
9
|
/** Same as {@link resolveHardwareUuid} but returns null on failure (e.g. Linux CI). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hardware-uuid.d.ts","sourceRoot":"","sources":["../../src/lib/hardware-uuid.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"hardware-uuid.d.ts","sourceRoot":"","sources":["../../src/lib/hardware-uuid.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,8FAA8F;AAC9F,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CASzD;AAuBD,kFAAkF;AAClF,wBAAgB,mBAAmB,IAAI,MAAM,CAI5C;AAED,uFAAuF;AACvF,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAMtD"}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* `src/log_uuid/hardware_uuid.ts` (see design_notes/user_profile_field_sources.md).
|
|
4
4
|
*/
|
|
5
5
|
import { execSync } from "node:child_process";
|
|
6
|
-
|
|
6
|
+
/** Shared shell one-liner helper (also used by `user-profile.ts`, same as log-llm-config). */
|
|
7
|
+
export function readCommandOutput(command) {
|
|
7
8
|
try {
|
|
8
9
|
return execSync(command, {
|
|
9
10
|
encoding: "utf8",
|
|
@@ -13,7 +14,7 @@ const readCommandOutput = (command) => {
|
|
|
13
14
|
catch {
|
|
14
15
|
return "";
|
|
15
16
|
}
|
|
16
|
-
}
|
|
17
|
+
}
|
|
17
18
|
const readHardwareUuidFromCommands = () => {
|
|
18
19
|
const ioregOutput = readCommandOutput("ioreg -rd1 -c IOPlatformExpertDevice");
|
|
19
20
|
const ioregMatch = ioregOutput.match(/"IOPlatformUUID"\s*=\s*"([^"]+)"/i);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hardware-uuid.js","sourceRoot":"","sources":["../../src/lib/hardware-uuid.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"hardware-uuid.js","sourceRoot":"","sources":["../../src/lib/hardware-uuid.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,8FAA8F;AAC9F,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,OAAO,EAAE;YACvB,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACpC,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,4BAA4B,GAAG,GAAW,EAAE;IAChD,MAAM,WAAW,GAAG,iBAAiB,CAAC,sCAAsC,CAAC,CAAC;IAC9E,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAC1E,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;IAE1C,MAAM,cAAc,GAAG,iBAAiB,CAAC,oCAAoC,CAAC,CAAC;IAC/E,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC7E,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;IAEhD,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;AACrF,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,GAAW,EAAU,EAAE;IACpD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CACzB,6EAA6E,CAC9E,CAAC;IACF,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,kFAAkF;AAClF,MAAM,UAAU,mBAAmB;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC;IAC1D,IAAI,OAAO;QAAE,OAAO,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACnD,OAAO,qBAAqB,CAAC,4BAA4B,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,sBAAsB;IACpC,IAAI,CAAC;QACH,OAAO,mBAAmB,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { type StoredAuthKey } from "optimus-tofu";
|
|
2
|
+
/** Same path as log-llm-config: `~/opt-ai-sec/management/auth_key.txt` under `$HOME`. */
|
|
3
|
+
export declare const OPTIMUS_AUTH_KEY_RELATIVE_PATH: string;
|
|
2
4
|
/**
|
|
3
5
|
* Same TOFU + machine key flow as log-llm-config: verify stored key against
|
|
4
6
|
* `/endpoint_security/auth/` or request a new key and persist under HOME.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"machine-auth.d.ts","sourceRoot":"","sources":["../../src/lib/machine-auth.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"machine-auth.d.ts","sourceRoot":"","sources":["../../src/lib/machine-auth.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AAEtB,yFAAyF;AACzF,eAAO,MAAM,8BAA8B,QAI1C,CAAC;AAuBF;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC,CAUxB;AAED,sEAAsE;AACtE,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C"}
|
package/dist/lib/machine-auth.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { ensureAuthentication, loadEndpointBase, } from "optimus-tofu";
|
|
3
|
-
|
|
3
|
+
/** Same path as log-llm-config: `~/opt-ai-sec/management/auth_key.txt` under `$HOME`. */
|
|
4
|
+
export const OPTIMUS_AUTH_KEY_RELATIVE_PATH = path.join("opt-ai-sec", "management", "auth_key.txt");
|
|
4
5
|
let cached = null;
|
|
5
6
|
async function postJsonForAuth(endpointUrl, body) {
|
|
6
7
|
const res = await fetch(endpointUrl, {
|
|
@@ -26,7 +27,7 @@ export async function ensureToolCallAuth(hardwareUuid) {
|
|
|
26
27
|
const key = await ensureAuthentication({
|
|
27
28
|
hardwareUuid,
|
|
28
29
|
endpointBase: loadEndpointBase(),
|
|
29
|
-
authRelativePath:
|
|
30
|
+
authRelativePath: OPTIMUS_AUTH_KEY_RELATIVE_PATH,
|
|
30
31
|
postJson: postJsonForAuth,
|
|
31
32
|
});
|
|
32
33
|
cached = { hardwareUuid, key };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"machine-auth.js","sourceRoot":"","sources":["../../src/lib/machine-auth.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,oBAAoB,EACpB,gBAAgB,GAGjB,MAAM,cAAc,CAAC;AAEtB,MAAM,
|
|
1
|
+
{"version":3,"file":"machine-auth.js","sourceRoot":"","sources":["../../src/lib/machine-auth.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,oBAAoB,EACpB,gBAAgB,GAGjB,MAAM,cAAc,CAAC;AAEtB,yFAAyF;AACzF,MAAM,CAAC,MAAM,8BAA8B,GAAG,IAAI,CAAC,IAAI,CACrD,YAAY,EACZ,YAAY,EACZ,cAAc,CACf,CAAC;AAEF,IAAI,MAAM,GAAwD,IAAI,CAAC;AAEvE,KAAK,UAAU,eAAe,CAC5B,WAAmB,EACnB,IAA6B;IAE7B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE;QACnC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,QAAQ,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CACpE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC/D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAqB,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,YAAoB;IAEpB,IAAI,MAAM,EAAE,YAAY,KAAK,YAAY;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;IAC7D,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC;QACrC,YAAY;QACZ,YAAY,EAAE,gBAAgB,EAAE;QAChC,gBAAgB,EAAE,8BAA8B;QAChD,QAAQ,EAAE,eAAe;KAC1B,CAAC,CAAC;IACH,MAAM,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC;IAC/B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,sBAAsB;IACpC,MAAM,GAAG,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* When no auth key is on disk for this hardware UUID, POST startup like `log-llm-config` `log_uuid`
|
|
3
|
+
* so `EndpointMachine` + `user_profile` are populated before tool-call batches.
|
|
4
|
+
*
|
|
5
|
+
* If `~/opt-ai-sec/management/auth_key.txt` already has a key for this machine, skip (assume
|
|
6
|
+
* `log_uuid` / log-llm-config already ran).
|
|
7
|
+
*/
|
|
8
|
+
export declare function ensureStartupIfNoAuthKey(hardwareUuid: string): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=startup-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup-sync.d.ts","sourceRoot":"","sources":["../../src/lib/startup-sync.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,wBAAsB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8DlF"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* When no auth key is on disk for this hardware UUID, POST startup like `log-llm-config` `log_uuid`
|
|
3
|
+
* so `EndpointMachine` + `user_profile` are populated before tool-call batches.
|
|
4
|
+
*
|
|
5
|
+
* If `~/opt-ai-sec/management/auth_key.txt` already has a key for this machine, skip (assume
|
|
6
|
+
* `log_uuid` / log-llm-config already ran).
|
|
7
|
+
*/
|
|
8
|
+
import { buildStartupEndpointUrl, loadEndpointBase, persistAuthKey, readStoredAuthKey, } from "optimus-tofu";
|
|
9
|
+
import { OPTIMUS_AUTH_KEY_RELATIVE_PATH, resetToolCallAuthCache } from "./machine-auth.js";
|
|
10
|
+
import { resolveUserProfile } from "./user-profile.js";
|
|
11
|
+
export async function ensureStartupIfNoAuthKey(hardwareUuid) {
|
|
12
|
+
if (process.env.OPTIMUS_SKIP_STARTUP_SYNC === "1")
|
|
13
|
+
return;
|
|
14
|
+
const stored = readStoredAuthKey({ authRelativePath: OPTIMUS_AUTH_KEY_RELATIVE_PATH });
|
|
15
|
+
if (stored?.key && stored.hardware_uuid === hardwareUuid)
|
|
16
|
+
return;
|
|
17
|
+
const timestamp = new Date().toISOString();
|
|
18
|
+
const payloadSummary = {
|
|
19
|
+
timestamp,
|
|
20
|
+
directory: process.cwd(),
|
|
21
|
+
hardware_uuid: hardwareUuid,
|
|
22
|
+
};
|
|
23
|
+
const metadata = {
|
|
24
|
+
github_username: process.env.GITHUB_USER || process.env.GH_USER || "",
|
|
25
|
+
org_identifier: process.env.GITHUB_ORG || "",
|
|
26
|
+
repo_identifier: process.env.GITHUB_REPOSITORY || "",
|
|
27
|
+
branch: process.env.GITHUB_REF_NAME || process.env.BRANCH_NAME || "",
|
|
28
|
+
commit_sha: process.env.GITHUB_SHA || "",
|
|
29
|
+
agent_name: process.env.OPTIMUS_AGENT || "",
|
|
30
|
+
user_profile: { ...resolveUserProfile() },
|
|
31
|
+
};
|
|
32
|
+
const body = {
|
|
33
|
+
hardware_uuid: hardwareUuid,
|
|
34
|
+
payload: payloadSummary,
|
|
35
|
+
metadata,
|
|
36
|
+
scan_timestamp: timestamp,
|
|
37
|
+
};
|
|
38
|
+
const url = buildStartupEndpointUrl(loadEndpointBase());
|
|
39
|
+
try {
|
|
40
|
+
const res = await fetch(url, {
|
|
41
|
+
method: "POST",
|
|
42
|
+
headers: { "Content-Type": "application/json" },
|
|
43
|
+
body: JSON.stringify(body),
|
|
44
|
+
});
|
|
45
|
+
const text = await res.text();
|
|
46
|
+
if (!res.ok) {
|
|
47
|
+
console.error(`[optimus-tool-call] startup sync failed ${res.status}: ${text ? text.slice(0, 240) : res.statusText}`);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
let parsed = {};
|
|
51
|
+
try {
|
|
52
|
+
parsed = JSON.parse(text);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (parsed.status === "key_issued" && typeof parsed.key === "string") {
|
|
58
|
+
persistAuthKey(parsed.key, typeof parsed.key_id === "string" ? parsed.key_id : null, hardwareUuid, { authRelativePath: OPTIMUS_AUTH_KEY_RELATIVE_PATH });
|
|
59
|
+
resetToolCallAuthCache();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
console.error(`[optimus-tool-call] startup sync error: ${err instanceof Error ? err.message : String(err)}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=startup-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup-sync.js","sourceRoot":"","sources":["../../src/lib/startup-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../../src/lib/streaming.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../../src/lib/streaming.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAahD;;GAEG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBrE;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAyBjD;AA4JD;;;GAGG;AACH,wBAAgB,cAAc,IAAI,IAAI,CA0BrC"}
|
package/dist/lib/streaming.js
CHANGED
|
@@ -1,22 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Telemetry streaming — batch and send events to Optimus backend.
|
|
3
3
|
*/
|
|
4
|
+
import { createSignature } from "optimus-tofu";
|
|
5
|
+
import { ensureToolCallAuth } from "./machine-auth.js";
|
|
6
|
+
import { ensureStartupIfNoAuthKey } from "./startup-sync.js";
|
|
4
7
|
import { tryResolveHardwareUuid } from "./hardware-uuid.js";
|
|
5
8
|
import { loadEndpointBase } from "./endpoint-config.js";
|
|
6
|
-
/** Must match ``EndpointMachine.hardware_uuid`` (env or ioreg/system_profiler; see design_notes). */
|
|
7
|
-
function requireHardwareUuidForBatch() {
|
|
8
|
-
const hw = tryResolveHardwareUuid();
|
|
9
|
-
if (hw)
|
|
10
|
-
return hw;
|
|
11
|
-
throw new Error("Cannot resolve hardware UUID for tool-call batch: set OPTIMUS_HARDWARE_UUID " +
|
|
12
|
-
"or run on macOS with ioreg/system_profiler (same rules as log-llm-config log_uuid).");
|
|
13
|
-
}
|
|
14
|
-
function eventsWireForApi(events) {
|
|
15
|
-
return events.map((e) => JSON.parse(JSON.stringify(e)));
|
|
16
|
-
}
|
|
17
9
|
// Backend configuration
|
|
18
10
|
const OPTIMUS_API_BASE = loadEndpointBase();
|
|
19
|
-
const OPTIMUS_API_TOKEN = process.env.OPTIMUS_API_TOKEN || "";
|
|
20
11
|
const BATCH_SIZE = parseInt(process.env.OPTIMUS_BATCH_SIZE || "1", 10); // Default to 1 for testing
|
|
21
12
|
const BATCH_TIMEOUT_MS = 5000; // 5 seconds
|
|
22
13
|
// In-memory event queue
|
|
@@ -68,6 +59,24 @@ export async function flushEvents() {
|
|
|
68
59
|
// eventQueue.unshift(...eventsToSend);
|
|
69
60
|
}
|
|
70
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Wire shape for HMAC signing: machine identity comes from batch `hardware_uuid` only;
|
|
64
|
+
* strip client `user_profile` / `hardware_uuid` from nested metadata so the backend links
|
|
65
|
+
* via `EndpointMachine` (populated by log-llm-config startup or our cold-start sync).
|
|
66
|
+
*/
|
|
67
|
+
function eventsWireFromTelemetry(events) {
|
|
68
|
+
return events.map((e) => {
|
|
69
|
+
const raw = JSON.parse(JSON.stringify(e));
|
|
70
|
+
const meta = raw.tool_call_metadata;
|
|
71
|
+
if (meta && typeof meta === "object" && !Array.isArray(meta)) {
|
|
72
|
+
const m = { ...meta };
|
|
73
|
+
delete m.user_profile;
|
|
74
|
+
delete m.hardware_uuid;
|
|
75
|
+
raw.tool_call_metadata = m;
|
|
76
|
+
}
|
|
77
|
+
return raw;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
71
80
|
/**
|
|
72
81
|
* Send batch of events to Django backend.
|
|
73
82
|
*/
|
|
@@ -75,18 +84,28 @@ async function sendBatch(events) {
|
|
|
75
84
|
if (events.length === 0) {
|
|
76
85
|
return;
|
|
77
86
|
}
|
|
78
|
-
const
|
|
87
|
+
const hardwareUuid = tryResolveHardwareUuid();
|
|
88
|
+
if (!hardwareUuid) {
|
|
89
|
+
throw new Error("Cannot send tool-call telemetry: set OPTIMUS_HARDWARE_UUID or run on a host " +
|
|
90
|
+
"where ioreg/system_profiler can resolve the hardware UUID (same rules as log-llm-config).");
|
|
91
|
+
}
|
|
92
|
+
await ensureStartupIfNoAuthKey(hardwareUuid);
|
|
93
|
+
const auth = await ensureToolCallAuth(hardwareUuid);
|
|
94
|
+
const eventsWire = eventsWireFromTelemetry(events);
|
|
95
|
+
const signingPayload = {
|
|
96
|
+
hardware_uuid: hardwareUuid,
|
|
97
|
+
events: eventsWire,
|
|
98
|
+
};
|
|
99
|
+
const signature = createSignature(signingPayload, auth.key);
|
|
79
100
|
const payload = {
|
|
80
|
-
|
|
81
|
-
|
|
101
|
+
...signingPayload,
|
|
102
|
+
signature,
|
|
103
|
+
key_id: auth.key_id || "",
|
|
82
104
|
};
|
|
105
|
+
const endpoint = new URL("api/tool-calls/events/batch_create/", OPTIMUS_API_BASE).toString();
|
|
83
106
|
const headers = {
|
|
84
107
|
"Content-Type": "application/json",
|
|
85
108
|
};
|
|
86
|
-
// Add auth token if available
|
|
87
|
-
if (OPTIMUS_API_TOKEN) {
|
|
88
|
-
headers["Authorization"] = `Bearer ${OPTIMUS_API_TOKEN}`;
|
|
89
|
-
}
|
|
90
109
|
try {
|
|
91
110
|
// Use fetch if available (Node 18+), fall back to node:http
|
|
92
111
|
if (typeof fetch !== "undefined") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../src/lib/streaming.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../src/lib/streaming.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local `user_profile` for startup POST — same probes as `log-llm-config` `resolveUserProfile`
|
|
3
|
+
* (`design_notes/user_profile_field_sources.md`).
|
|
4
|
+
*/
|
|
5
|
+
type UserProfile = {
|
|
6
|
+
generateduuid: string;
|
|
7
|
+
machineuuid: string;
|
|
8
|
+
mac_username: string;
|
|
9
|
+
github_username: string;
|
|
10
|
+
claude_email: string;
|
|
11
|
+
cursor_email: string;
|
|
12
|
+
};
|
|
13
|
+
/** Same as `log-llm-config` `resolveUserProfile` (design_notes). */
|
|
14
|
+
export declare function resolveUserProfile(): UserProfile;
|
|
15
|
+
export type { UserProfile };
|
|
16
|
+
//# sourceMappingURL=user-profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-profile.d.ts","sourceRoot":"","sources":["../../src/lib/user-profile.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,KAAK,WAAW,GAAG;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AA4KF,oEAAoE;AACpE,wBAAgB,kBAAkB,IAAI,WAAW,CAEhD;AAED,YAAY,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local `user_profile` for startup POST — same probes as `log-llm-config` `resolveUserProfile`
|
|
3
|
+
* (`design_notes/user_profile_field_sources.md`).
|
|
4
|
+
*/
|
|
5
|
+
import { execFileSync } from "node:child_process";
|
|
6
|
+
import crypto from "node:crypto";
|
|
7
|
+
import fs from "node:fs";
|
|
8
|
+
import os from "node:os";
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
import { readCommandOutput, resolveHardwareUuid } from "./hardware-uuid.js";
|
|
11
|
+
const safeJsonParse = (raw) => {
|
|
12
|
+
try {
|
|
13
|
+
return JSON.parse(raw);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const readCursorCachedEmailFromVscdb = () => {
|
|
20
|
+
const dbPath = path.join(os.homedir(), "Library/Application Support/Cursor/User/globalStorage/state.vscdb");
|
|
21
|
+
if (!fs.existsSync(dbPath))
|
|
22
|
+
return "";
|
|
23
|
+
try {
|
|
24
|
+
const out = execFileSync("sqlite3", [dbPath, "select value from ItemTable where key='cursorAuth/cachedEmail';"], { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
|
|
25
|
+
return out;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return "";
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const readCursorCachedEmailFromStorageJson = () => {
|
|
32
|
+
const fp = path.join(os.homedir(), "Library/Application Support/Cursor/User/globalStorage/storage.json");
|
|
33
|
+
if (!fs.existsSync(fp))
|
|
34
|
+
return "";
|
|
35
|
+
try {
|
|
36
|
+
const parsed = safeJsonParse(fs.readFileSync(fp, { encoding: "utf8" }));
|
|
37
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
|
|
38
|
+
return "";
|
|
39
|
+
const root = parsed;
|
|
40
|
+
const cursor = root.cursor;
|
|
41
|
+
if (!cursor || typeof cursor !== "object" || Array.isArray(cursor))
|
|
42
|
+
return "";
|
|
43
|
+
const auth = cursor.auth;
|
|
44
|
+
if (!auth || typeof auth !== "object" || Array.isArray(auth))
|
|
45
|
+
return "";
|
|
46
|
+
const email = auth.email;
|
|
47
|
+
return typeof email === "string" ? email.trim() : "";
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return "";
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
const readCursorCachedEmail = () => readCursorCachedEmailFromVscdb() || readCursorCachedEmailFromStorageJson();
|
|
54
|
+
const readClaudeAuthEmailFromCli = () => {
|
|
55
|
+
try {
|
|
56
|
+
const out = execFileSync("claude", ["auth", "status"], {
|
|
57
|
+
encoding: "utf8",
|
|
58
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
59
|
+
}).trim();
|
|
60
|
+
if (!out)
|
|
61
|
+
return "";
|
|
62
|
+
const parsed = safeJsonParse(out);
|
|
63
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
64
|
+
const email = parsed.email;
|
|
65
|
+
return typeof email === "string" ? email.trim() : "";
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return "";
|
|
70
|
+
}
|
|
71
|
+
return "";
|
|
72
|
+
};
|
|
73
|
+
const readClaudeEmailFromHomeFiles = () => {
|
|
74
|
+
const candidates = [
|
|
75
|
+
path.join(os.homedir(), ".claude/.credentials.json"),
|
|
76
|
+
path.join(os.homedir(), ".claude/.claude.json"),
|
|
77
|
+
];
|
|
78
|
+
for (const fp of candidates) {
|
|
79
|
+
if (!fs.existsSync(fp))
|
|
80
|
+
continue;
|
|
81
|
+
try {
|
|
82
|
+
const parsed = safeJsonParse(fs.readFileSync(fp, { encoding: "utf8" }));
|
|
83
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
|
|
84
|
+
continue;
|
|
85
|
+
const email = parsed.email;
|
|
86
|
+
if (typeof email === "string" && email.includes("@"))
|
|
87
|
+
return email.trim();
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
/* try next */
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return "";
|
|
94
|
+
};
|
|
95
|
+
const readClaudeAuthEmail = () => readClaudeAuthEmailFromCli().trim() || readClaudeEmailFromHomeFiles();
|
|
96
|
+
const readMacUsername = () => {
|
|
97
|
+
const fromEnv = process.env.OPTIMUS_MAC_USERNAME?.trim() ||
|
|
98
|
+
process.env.USER?.trim() ||
|
|
99
|
+
process.env.LOGNAME?.trim() ||
|
|
100
|
+
"";
|
|
101
|
+
if (fromEnv)
|
|
102
|
+
return fromEnv;
|
|
103
|
+
return readCommandOutput("id -un");
|
|
104
|
+
};
|
|
105
|
+
const readGithubUsername = () => {
|
|
106
|
+
try {
|
|
107
|
+
const out = execFileSync("gh", ["api", "user", "--jq", ".login"], {
|
|
108
|
+
encoding: "utf8",
|
|
109
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
110
|
+
maxBuffer: 1024 * 1024,
|
|
111
|
+
}).trim();
|
|
112
|
+
if (out)
|
|
113
|
+
return out;
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
/* gh missing or not authenticated */
|
|
117
|
+
}
|
|
118
|
+
return (process.env.GITHUB_USER?.trim() ||
|
|
119
|
+
process.env.GH_USER?.trim() ||
|
|
120
|
+
readCommandOutput("git config user.name"));
|
|
121
|
+
};
|
|
122
|
+
const readUserProfileFromEnvOrFile = () => {
|
|
123
|
+
const inline = process.env.OPTIMUS_USER_PROFILE_JSON?.trim();
|
|
124
|
+
if (inline) {
|
|
125
|
+
const parsed = safeJsonParse(inline);
|
|
126
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed))
|
|
127
|
+
return parsed;
|
|
128
|
+
}
|
|
129
|
+
const filePath = process.env.OPTIMUS_USER_PROFILE_FILE?.trim();
|
|
130
|
+
if (filePath && fs.existsSync(filePath)) {
|
|
131
|
+
const parsed = safeJsonParse(fs.readFileSync(filePath, { encoding: "utf8" }));
|
|
132
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed))
|
|
133
|
+
return parsed;
|
|
134
|
+
}
|
|
135
|
+
return null;
|
|
136
|
+
};
|
|
137
|
+
const isPlausibleUuid = (s) => /^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/i.test(s.trim());
|
|
138
|
+
const readMacAccountGeneratedUid = () => {
|
|
139
|
+
const env = process.env.OPTIMUS_MAC_GENERATED_UID?.trim();
|
|
140
|
+
if (env && isPlausibleUuid(env))
|
|
141
|
+
return env.trim().toLowerCase();
|
|
142
|
+
if (process.platform !== "darwin")
|
|
143
|
+
return "";
|
|
144
|
+
const user = readMacUsername();
|
|
145
|
+
if (!user || !/^[a-zA-Z0-9._-]+$/.test(user))
|
|
146
|
+
return "";
|
|
147
|
+
try {
|
|
148
|
+
const out = execFileSync("dscl", [".", "-read", `/Users/${user}`, "GeneratedUID"], {
|
|
149
|
+
encoding: "utf8",
|
|
150
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
151
|
+
});
|
|
152
|
+
const m = out.match(/GeneratedUID:\s*([0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12})/);
|
|
153
|
+
if (m?.[1] && isPlausibleUuid(m[1]))
|
|
154
|
+
return m[1].toLowerCase();
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
return "";
|
|
158
|
+
}
|
|
159
|
+
return "";
|
|
160
|
+
};
|
|
161
|
+
const buildDefaultUserProfile = () => ({
|
|
162
|
+
generateduuid: readMacAccountGeneratedUid() || crypto.randomUUID(),
|
|
163
|
+
machineuuid: resolveHardwareUuid(),
|
|
164
|
+
mac_username: readMacUsername(),
|
|
165
|
+
github_username: readGithubUsername(),
|
|
166
|
+
claude_email: readClaudeAuthEmail(),
|
|
167
|
+
cursor_email: readCursorCachedEmail(),
|
|
168
|
+
});
|
|
169
|
+
/** Same as `log-llm-config` `resolveUserProfile` (design_notes). */
|
|
170
|
+
export function resolveUserProfile() {
|
|
171
|
+
return readUserProfileFromEnvOrFile() ?? buildDefaultUserProfile();
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=user-profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-profile.js","sourceRoot":"","sources":["../../src/lib/user-profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import { test } from "node:test";
|
|
1
|
+
import { before, test } from "node:test";
|
|
2
2
|
import assert from "node:assert";
|
|
3
3
|
import { queueEvent, flushEvents, ensureShutdown } from "../lib/streaming.js";
|
|
4
|
+
before(() => {
|
|
5
|
+
process.env.OPTIMUS_SKIP_STARTUP_SYNC = "1";
|
|
6
|
+
process.env.OPTIMUS_HARDWARE_UUID = "11111111-1111-1111-1111-111111111111";
|
|
7
|
+
});
|
|
4
8
|
// Note: These tests are basic structure tests. Full integration tests with actual HTTP
|
|
5
9
|
// would require mocking fetch/http, which is done in integration tests.
|
|
6
10
|
// Helper to create a mock event
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streaming.test.js","sourceRoot":"","sources":["../../src/test/streaming.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"streaming.test.js","sourceRoot":"","sources":["../../src/test/streaming.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "optimus-tool-call",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.15",
|
|
4
4
|
"description": "Agentic audit sensor — classifies and streams tool call events to Optimus backend",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -43,5 +43,8 @@
|
|
|
43
43
|
"@types/node": "^20.19.39",
|
|
44
44
|
"tsx": "^4.0.0",
|
|
45
45
|
"typescript": "^5.0.0"
|
|
46
|
+
},
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"optimus-tofu": "^0.1.0"
|
|
46
49
|
}
|
|
47
50
|
}
|