@optimuslabs/runtime-staging 0.3.10 → 0.3.11
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/lib/client-event.d.ts.map +1 -1
- package/dist/lib/client-event.js +35 -25
- package/dist/lib/client-event.js.map +1 -1
- package/dist/lib/pii-scrub.d.ts +9 -0
- package/dist/lib/pii-scrub.d.ts.map +1 -0
- package/dist/lib/pii-scrub.js +17 -0
- package/dist/lib/pii-scrub.js.map +1 -0
- package/dist/lib/prompt-collection-policy.d.ts +10 -0
- package/dist/lib/prompt-collection-policy.d.ts.map +1 -1
- package/dist/lib/prompt-collection-policy.js +42 -6
- package/dist/lib/prompt-collection-policy.js.map +1 -1
- package/dist/lib/startup-sync.d.ts.map +1 -1
- package/dist/lib/startup-sync.js +78 -56
- package/dist/lib/startup-sync.js.map +1 -1
- package/dist/lib/telemetry/build-event.d.ts.map +1 -1
- package/dist/lib/telemetry/build-event.js +19 -2
- package/dist/lib/telemetry/build-event.js.map +1 -1
- package/dist/lib/telemetry/index.d.ts +1 -1
- package/dist/lib/telemetry/index.d.ts.map +1 -1
- package/dist/lib/telemetry/index.js +1 -1
- package/dist/lib/telemetry/index.js.map +1 -1
- package/dist/lib/telemetry/prompt-privacy.d.ts +7 -1
- package/dist/lib/telemetry/prompt-privacy.d.ts.map +1 -1
- package/dist/lib/telemetry/prompt-privacy.js +13 -3
- package/dist/lib/telemetry/prompt-privacy.js.map +1 -1
- package/dist/lib/telemetry/types.d.ts +11 -0
- package/dist/lib/telemetry/types.d.ts.map +1 -1
- package/dist/lib/telemetry/wire-metadata.d.ts +21 -6
- package/dist/lib/telemetry/wire-metadata.d.ts.map +1 -1
- package/dist/lib/telemetry/wire-metadata.js +50 -19
- package/dist/lib/telemetry/wire-metadata.js.map +1 -1
- package/dist/lib/tofu.d.ts +1 -0
- package/dist/lib/tofu.d.ts.map +1 -1
- package/dist/lib/tofu.js +1 -1
- package/dist/lib/tofu.js.map +1 -1
- package/dist/test/client-event-scrub.test.d.ts +2 -0
- package/dist/test/client-event-scrub.test.d.ts.map +1 -0
- package/dist/test/client-event-scrub.test.js +36 -0
- package/dist/test/client-event-scrub.test.js.map +1 -0
- package/dist/test/org-fingerprint-key.test.d.ts +2 -0
- package/dist/test/org-fingerprint-key.test.d.ts.map +1 -0
- package/dist/test/org-fingerprint-key.test.js +39 -0
- package/dist/test/org-fingerprint-key.test.js.map +1 -0
- package/dist/test/org-scrub-setting.test.d.ts +2 -0
- package/dist/test/org-scrub-setting.test.d.ts.map +1 -0
- package/dist/test/org-scrub-setting.test.js +42 -0
- package/dist/test/org-scrub-setting.test.js.map +1 -0
- package/dist/test/prompt-privacy.test.js +19 -2
- package/dist/test/prompt-privacy.test.js.map +1 -1
- package/dist/test/startup-sync-scrub.test.d.ts +2 -0
- package/dist/test/startup-sync-scrub.test.d.ts.map +1 -0
- package/dist/test/startup-sync-scrub.test.js +36 -0
- package/dist/test/startup-sync-scrub.test.js.map +1 -0
- package/dist/test/telemetry.test.js +6 -1
- package/dist/test/telemetry.test.js.map +1 -1
- package/dist/test/wire-metadata.test.d.ts +2 -0
- package/dist/test/wire-metadata.test.d.ts.map +1 -0
- package/dist/test/wire-metadata.test.js +105 -0
- package/dist/test/wire-metadata.test.js.map +1 -0
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-event.d.ts","sourceRoot":"","sources":["../../src/lib/client-event.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client-event.d.ts","sourceRoot":"","sources":["../../src/lib/client-event.ts"],"names":[],"mappings":"AAiEA,KAAK,iBAAiB,GAAG;IACvB,OAAO,EAAE,SAAS,GAAG,IAAI,GAAG,QAAQ,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AA2DF,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBhF"}
|
package/dist/lib/client-event.js
CHANGED
|
@@ -13,6 +13,7 @@ import { fileURLToPath } from "url";
|
|
|
13
13
|
import { loadEndpointBase, createSignature, readStoredAuthKey } from "./tofu.js";
|
|
14
14
|
import { resolveHardwareUuid } from "./hardware-uuid.js";
|
|
15
15
|
import { OPTIMUS_AUTH_KEY_RELATIVE_PATH } from "./machine-auth.js";
|
|
16
|
+
import { SCRUBBER_VERSION, scrubFields } from "./pii-scrub.js";
|
|
16
17
|
const SEND_TIMEOUT_MS = 4000;
|
|
17
18
|
/** This package's name + version as "<name>: <version>", read from its own package.json. */
|
|
18
19
|
function readPackageVersion() {
|
|
@@ -69,6 +70,7 @@ function metadata(agent) {
|
|
|
69
70
|
node: process.version,
|
|
70
71
|
pid: String(process.pid),
|
|
71
72
|
reporter_version: readPackageVersion(),
|
|
73
|
+
scrubber_version: SCRUBBER_VERSION,
|
|
72
74
|
source: "tool_call",
|
|
73
75
|
};
|
|
74
76
|
if (process.env.OPTIMUS_HOOK_SCRIPT_VERSION)
|
|
@@ -85,37 +87,45 @@ function resolveHookRunId(storyId) {
|
|
|
85
87
|
return fromEnv;
|
|
86
88
|
return `${storyId}::tool_call`;
|
|
87
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* The run record. Its command, message and detail are free text (a failure's log, a command
|
|
92
|
+
* line), so they are scrubbed like tool-call content before they leave the machine.
|
|
93
|
+
*/
|
|
94
|
+
function toolCallRunEvent(fields, storyId, agent) {
|
|
95
|
+
return scrubFields({
|
|
96
|
+
kind: "functional_run",
|
|
97
|
+
unit: "tool_call",
|
|
98
|
+
command: fields.command ?? "optimus-tool-call",
|
|
99
|
+
hook_name: "tool_call",
|
|
100
|
+
story_id: storyId,
|
|
101
|
+
hook_run_id: resolveHookRunId(storyId),
|
|
102
|
+
outcome: fields.outcome,
|
|
103
|
+
exit_code: fields.exit_code ?? null,
|
|
104
|
+
message: fields.message ?? "",
|
|
105
|
+
detail: fields.detail ?? "",
|
|
106
|
+
...(agent ? { agent } : {}),
|
|
107
|
+
metadata: metadata(agent),
|
|
108
|
+
}, ["command", "message", "detail"]);
|
|
109
|
+
}
|
|
110
|
+
/** The signature over `payload`, or "" when there is no machine key (the backend accepts unsigned). */
|
|
111
|
+
function signatureFor(payload) {
|
|
112
|
+
try {
|
|
113
|
+
const authKey = readStoredAuthKey({ authRelativePath: OPTIMUS_AUTH_KEY_RELATIVE_PATH });
|
|
114
|
+
return authKey?.key ? createSignature(payload, authKey.key) : "";
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
// unsigned is accepted by the backend (signature_valid=false)
|
|
118
|
+
return "";
|
|
119
|
+
}
|
|
120
|
+
}
|
|
88
121
|
export async function reportToolCallRun(fields) {
|
|
89
122
|
try {
|
|
90
123
|
const hardwareUuid = resolveHardwareUuid();
|
|
91
124
|
const storyId = resolveStoryId();
|
|
92
125
|
const agent = resolveReportingAgent(fields.agent);
|
|
93
|
-
const events = [
|
|
94
|
-
{
|
|
95
|
-
kind: "functional_run",
|
|
96
|
-
unit: "tool_call",
|
|
97
|
-
command: fields.command ?? "optimus-tool-call",
|
|
98
|
-
hook_name: "tool_call",
|
|
99
|
-
story_id: storyId,
|
|
100
|
-
hook_run_id: resolveHookRunId(storyId),
|
|
101
|
-
outcome: fields.outcome,
|
|
102
|
-
exit_code: fields.exit_code ?? null,
|
|
103
|
-
message: fields.message ?? "",
|
|
104
|
-
detail: fields.detail ?? "",
|
|
105
|
-
...(agent ? { agent } : {}),
|
|
106
|
-
metadata: metadata(agent),
|
|
107
|
-
},
|
|
108
|
-
];
|
|
126
|
+
const events = [toolCallRunEvent(fields, storyId, agent)];
|
|
109
127
|
const signingPayload = { hardware_uuid: hardwareUuid, events };
|
|
110
|
-
|
|
111
|
-
try {
|
|
112
|
-
const authKey = readStoredAuthKey({ authRelativePath: OPTIMUS_AUTH_KEY_RELATIVE_PATH });
|
|
113
|
-
if (authKey?.key)
|
|
114
|
-
signature = createSignature(signingPayload, authKey.key);
|
|
115
|
-
}
|
|
116
|
-
catch {
|
|
117
|
-
// unsigned is accepted by the backend (signature_valid=false)
|
|
118
|
-
}
|
|
128
|
+
const signature = signatureFor(signingPayload);
|
|
119
129
|
const endpoint = `${loadEndpointBase().replace(/\/+$/, "")}/endpoint_security/api/client-event/`;
|
|
120
130
|
if (typeof fetch === "undefined")
|
|
121
131
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-event.js","sourceRoot":"","sources":["../../src/lib/client-event.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"client-event.js","sourceRoot":"","sources":["../../src/lib/client-event.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pii-scrub shim: the one place that imports @optimuslabs/pii-scrub-staging.
|
|
3
|
+
*
|
|
4
|
+
* Loaded the way lib/tofu.ts loads tofu: the sibling local dist when environment=development,
|
|
5
|
+
* the published npm package otherwise.
|
|
6
|
+
*/
|
|
7
|
+
import type * as PiiScrubTypes from "@optimuslabs/pii-scrub-staging";
|
|
8
|
+
export declare const SCRUBBER_VERSION: string, scrubFields: typeof PiiScrubTypes.scrubFields, scrubText: typeof PiiScrubTypes.scrubText, scrubValue: typeof PiiScrubTypes.scrubValue;
|
|
9
|
+
//# sourceMappingURL=pii-scrub.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pii-scrub.d.ts","sourceRoot":"","sources":["../../src/lib/pii-scrub.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,KAAK,aAAa,MAAM,gCAAgC,CAAC;AAarE,eAAO,MAAQ,gBAAgB,UAAE,WAAW,oCAAE,SAAS,kCAAE,UAAU,iCAAa,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pii-scrub shim: the one place that imports @optimuslabs/pii-scrub-staging.
|
|
3
|
+
*
|
|
4
|
+
* Loaded the way lib/tofu.ts loads tofu: the sibling local dist when environment=development,
|
|
5
|
+
* the published npm package otherwise.
|
|
6
|
+
*/
|
|
7
|
+
import path from "path";
|
|
8
|
+
import { fileURLToPath } from "url";
|
|
9
|
+
import { isDevelopment } from "./tofu.js";
|
|
10
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
// dist/lib/pii-scrub.js → ../../.. → optimuslabs/pii-scrub/dist/index.js
|
|
12
|
+
const localPiiScrubPath = path.join(__dirname, "../../../pii-scrub/dist/index.js");
|
|
13
|
+
const piiScrub = (isDevelopment
|
|
14
|
+
? await import(localPiiScrubPath)
|
|
15
|
+
: await import("@optimuslabs/pii-scrub-staging"));
|
|
16
|
+
export const { SCRUBBER_VERSION, scrubFields, scrubText, scrubValue } = piiScrub;
|
|
17
|
+
//# sourceMappingURL=pii-scrub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pii-scrub.js","sourceRoot":"","sources":["../../src/lib/pii-scrub.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,yEAAyE;AACzE,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kCAAkC,CAAC,CAAC;AAEnF,MAAM,QAAQ,GAAG,CACf,aAAa;IACX,CAAC,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC;IACjC,CAAC,CAAC,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAC3B,CAAC;AAE1B,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC"}
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
export declare function orgConfigPath(): string;
|
|
2
2
|
export declare function readCollectPrompts(): boolean;
|
|
3
|
+
/**
|
|
4
|
+
* The org key the backend sends in the startup and inventory responses (`fingerprint_key`),
|
|
5
|
+
* or undefined until it has arrived: the prompt hash stays plain SHA-256 and secrets get no
|
|
6
|
+
* fingerprint until then.
|
|
7
|
+
*/
|
|
8
|
+
export declare function readFingerprintKey(): string | undefined;
|
|
3
9
|
export declare function persistCollectPrompts(value: unknown): void;
|
|
10
|
+
/**
|
|
11
|
+
* Store the org options a startup or inventory response carries: prompt collection, the org key
|
|
12
|
+
* and whether to scrub.
|
|
13
|
+
*/
|
|
4
14
|
export declare function persistCollectPromptsFromResponse(body: Record<string, unknown> | null | undefined): void;
|
|
5
15
|
//# sourceMappingURL=prompt-collection-policy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-collection-policy.d.ts","sourceRoot":"","sources":["../../src/lib/prompt-collection-policy.ts"],"names":[],"mappings":"AAOA,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAsBD,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;
|
|
1
|
+
{"version":3,"file":"prompt-collection-policy.d.ts","sourceRoot":"","sources":["../../src/lib/prompt-collection-policy.ts"],"names":[],"mappings":"AAOA,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAsBD,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAKD;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAGvD;AAYD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAO1D;AAgBD;;;GAGG;AACH,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAWxG"}
|
|
@@ -30,23 +30,59 @@ function collectPromptsFromConfig(cfg) {
|
|
|
30
30
|
export function readCollectPrompts() {
|
|
31
31
|
return collectPromptsFromConfig(readOrgConfig());
|
|
32
32
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
/** The org's fingerprint key: hex, at least 128 bits. Keys the prompt hash and secret fingerprints. */
|
|
34
|
+
const FINGERPRINT_KEY = /^(?:[0-9a-f]{2}){16,}$/i;
|
|
35
|
+
/**
|
|
36
|
+
* The org key the backend sends in the startup and inventory responses (`fingerprint_key`),
|
|
37
|
+
* or undefined until it has arrived: the prompt hash stays plain SHA-256 and secrets get no
|
|
38
|
+
* fingerprint until then.
|
|
39
|
+
*/
|
|
40
|
+
export function readFingerprintKey() {
|
|
41
|
+
const key = readOrgConfig().fingerprint_key;
|
|
42
|
+
return typeof key === "string" && FINGERPRINT_KEY.test(key) ? key : undefined;
|
|
43
|
+
}
|
|
44
|
+
function writeOrgConfig(update) {
|
|
36
45
|
const filePath = orgConfigPath();
|
|
37
46
|
try {
|
|
38
47
|
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
39
|
-
|
|
40
|
-
delete next.hash_tool_call_prompts;
|
|
41
|
-
fs.writeFileSync(filePath, `${JSON.stringify(next)}\n`, { encoding: "utf8", mode: 0o600 });
|
|
48
|
+
fs.writeFileSync(filePath, `${JSON.stringify(update(readOrgConfig()))}\n`, { encoding: "utf8", mode: 0o600 });
|
|
42
49
|
}
|
|
43
50
|
catch {
|
|
44
51
|
// Best-effort: next heartbeat can retry.
|
|
45
52
|
}
|
|
46
53
|
}
|
|
54
|
+
export function persistCollectPrompts(value) {
|
|
55
|
+
if (typeof value !== "boolean")
|
|
56
|
+
return;
|
|
57
|
+
writeOrgConfig((current) => {
|
|
58
|
+
const next = { ...current, collect_prompts: value };
|
|
59
|
+
delete next.hash_tool_call_prompts;
|
|
60
|
+
return next;
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
function persistFingerprintKey(value) {
|
|
64
|
+
if (typeof value !== "string" || !FINGERPRINT_KEY.test(value) || value === readFingerprintKey())
|
|
65
|
+
return;
|
|
66
|
+
writeOrgConfig((current) => ({ ...current, fingerprint_key: value }));
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Whether the organization scrubs what endpoints send (OPT-942), read by `@optimuslabs/pii-scrub`
|
|
70
|
+
* from this file: only an explicit `false` switches scrubbing off.
|
|
71
|
+
*/
|
|
72
|
+
function persistScrubPii(value) {
|
|
73
|
+
if (typeof value !== "boolean" || readOrgConfig().scrub_pii === value)
|
|
74
|
+
return;
|
|
75
|
+
writeOrgConfig((current) => ({ ...current, scrub_pii: value }));
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Store the org options a startup or inventory response carries: prompt collection, the org key
|
|
79
|
+
* and whether to scrub.
|
|
80
|
+
*/
|
|
47
81
|
export function persistCollectPromptsFromResponse(body) {
|
|
48
82
|
if (!body || typeof body !== "object")
|
|
49
83
|
return;
|
|
84
|
+
persistFingerprintKey(body.fingerprint_key);
|
|
85
|
+
persistScrubPii(body.scrub_pii);
|
|
50
86
|
if (typeof body.collect_prompts === "boolean") {
|
|
51
87
|
persistCollectPrompts(body.collect_prompts);
|
|
52
88
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-collection-policy.js","sourceRoot":"","sources":["../../src/lib/prompt-collection-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,2FAA2F;AAC3F,MAAM,wBAAwB,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;AAE/F,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,wBAAwB,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,aAAa;IACpB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,MAAM,CAAC,CAAY,CAAC;QAC/E,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,OAAO,MAAiC,CAAC;QAC3C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,wBAAwB,CAAC,GAA4B;IAC5D,IAAI,OAAO,GAAG,CAAC,eAAe,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,eAAe,CAAC;IACzE,mEAAmE;IACnE,IAAI,OAAO,GAAG,CAAC,sBAAsB,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,sBAAsB,KAAK,IAAI,CAAC;IAChG,4DAA4D;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,wBAAwB,CAAC,aAAa,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"prompt-collection-policy.js","sourceRoot":"","sources":["../../src/lib/prompt-collection-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startup-sync.d.ts","sourceRoot":"","sources":["../../src/lib/startup-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"startup-sync.d.ts","sourceRoot":"","sources":["../../src/lib/startup-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqLH,wBAAsB,2BAA2B,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBrF"}
|
package/dist/lib/startup-sync.js
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
import { buildStartupEndpointUrl, createSignature, loadEndpointBase, persistAuthKey, readStoredAuthKey, } from "./tofu.js";
|
|
13
13
|
import { OPTIMUS_AUTH_KEY_RELATIVE_PATH, resetToolCallAuthCache } from "./machine-auth.js";
|
|
14
14
|
import { persistCollectPromptsFromResponse } from "./prompt-collection-policy.js";
|
|
15
|
+
import { SCRUBBER_VERSION, scrubText } from "./pii-scrub.js";
|
|
15
16
|
import { resolveUserProfile } from "./user-profile.js";
|
|
16
17
|
import fs from "node:fs";
|
|
17
18
|
import os from "node:os";
|
|
@@ -65,52 +66,59 @@ function readOrganizationUuid() {
|
|
|
65
66
|
return "";
|
|
66
67
|
}
|
|
67
68
|
}
|
|
68
|
-
|
|
69
|
-
if (process.env.OPTIMUS_SKIP_STARTUP_SYNC === "1")
|
|
70
|
-
return;
|
|
69
|
+
function startupSyncIntervalMs() {
|
|
71
70
|
const rawInterval = process.env.OPTIMUS_STARTUP_SYNC_INTERVAL_MS;
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
const now = Date.now();
|
|
79
|
-
if (shouldSkipStartupSyncDueToCooldown(now, intervalMs)) {
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
const timestamp = new Date().toISOString();
|
|
83
|
-
const payloadSummary = {
|
|
84
|
-
timestamp,
|
|
85
|
-
directory: process.cwd(),
|
|
86
|
-
hardware_uuid: hardwareUuid,
|
|
87
|
-
};
|
|
88
|
-
let user_profile;
|
|
71
|
+
if (rawInterval === undefined || rawInterval === "")
|
|
72
|
+
return DEFAULT_STARTUP_SYNC_INTERVAL_MS;
|
|
73
|
+
const parsed = parseInt(rawInterval, 10);
|
|
74
|
+
return Number.isNaN(parsed) || parsed < 0 ? DEFAULT_STARTUP_SYNC_INTERVAL_MS : parsed;
|
|
75
|
+
}
|
|
76
|
+
function startupUserProfile() {
|
|
89
77
|
try {
|
|
90
|
-
|
|
78
|
+
return { ...resolveUserProfile() };
|
|
91
79
|
}
|
|
92
80
|
catch (err) {
|
|
93
81
|
console.error(`[optimus-tool-call] resolveUserProfile failed; continuing startup sync with empty profile: ${err instanceof Error ? err.message : String(err)}`);
|
|
94
|
-
|
|
82
|
+
return emptyUserProfile();
|
|
95
83
|
}
|
|
96
|
-
|
|
84
|
+
}
|
|
85
|
+
function githubUsername(profile) {
|
|
86
|
+
return ((typeof profile.github_username === "string" && profile.github_username.trim()) ||
|
|
97
87
|
process.env.GITHUB_USER ||
|
|
98
88
|
process.env.GH_USER ||
|
|
99
|
-
"";
|
|
100
|
-
|
|
101
|
-
|
|
89
|
+
"");
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* The machine's metadata for the startup request. The git remote in `repo_identifier` can embed a
|
|
93
|
+
* token (`https://user:token@host/owner/repo`), so it is scrubbed, and the scrubber's version is
|
|
94
|
+
* sent; `metadata` is not part of the signed summary.
|
|
95
|
+
*/
|
|
96
|
+
function startupMetadata() {
|
|
97
|
+
const user_profile = startupUserProfile();
|
|
98
|
+
return {
|
|
99
|
+
github_username: githubUsername(user_profile),
|
|
102
100
|
org_identifier: process.env.GITHUB_ORG || "",
|
|
103
101
|
organization_uuid: readOrganizationUuid(),
|
|
104
|
-
repo_identifier: process.env.GITHUB_REPOSITORY || "",
|
|
102
|
+
repo_identifier: scrubText(process.env.GITHUB_REPOSITORY || ""),
|
|
105
103
|
branch: process.env.GITHUB_REF_NAME || process.env.BRANCH_NAME || "",
|
|
106
104
|
commit_sha: process.env.GITHUB_SHA || "",
|
|
107
105
|
agent_name: process.env.OPTIMUS_AGENT || "",
|
|
108
106
|
user_profile,
|
|
107
|
+
scrubber_version: SCRUBBER_VERSION,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/** The startup request: the summary, signed with this machine's key when it has one, and the metadata. */
|
|
111
|
+
function buildStartupBody(hardwareUuid) {
|
|
112
|
+
const timestamp = new Date().toISOString();
|
|
113
|
+
const payloadSummary = {
|
|
114
|
+
timestamp,
|
|
115
|
+
directory: process.cwd(),
|
|
116
|
+
hardware_uuid: hardwareUuid,
|
|
109
117
|
};
|
|
110
118
|
const body = {
|
|
111
119
|
hardware_uuid: hardwareUuid,
|
|
112
120
|
payload: payloadSummary,
|
|
113
|
-
metadata,
|
|
121
|
+
metadata: startupMetadata(),
|
|
114
122
|
scan_timestamp: timestamp,
|
|
115
123
|
};
|
|
116
124
|
const storedKey = readStoredAuthKey({
|
|
@@ -121,42 +129,56 @@ export async function ensureStartupMetadataSynced(hardwareUuid) {
|
|
|
121
129
|
if (storedKey.key_id)
|
|
122
130
|
body.key_id = storedKey.key_id;
|
|
123
131
|
}
|
|
132
|
+
return body;
|
|
133
|
+
}
|
|
134
|
+
async function postStartupBody(url, body) {
|
|
135
|
+
const controller = new AbortController();
|
|
136
|
+
const timeoutId = setTimeout(() => controller.abort(), 5000);
|
|
137
|
+
try {
|
|
138
|
+
return await fetch(url, {
|
|
139
|
+
method: "POST",
|
|
140
|
+
headers: { "Content-Type": "application/json" },
|
|
141
|
+
body: JSON.stringify(body),
|
|
142
|
+
signal: controller.signal,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
finally {
|
|
146
|
+
clearTimeout(timeoutId);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/** Store what a successful startup response carries (a new key, the org's options); true when it parsed. */
|
|
150
|
+
function applyStartupResponse(text, hardwareUuid) {
|
|
151
|
+
let parsed;
|
|
152
|
+
try {
|
|
153
|
+
parsed = JSON.parse(text);
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
if (parsed.status === "key_issued" && typeof parsed.key === "string") {
|
|
159
|
+
persistAuthKey(parsed.key, typeof parsed.key_id === "string" ? parsed.key_id : null, hardwareUuid, { authRelativePath: OPTIMUS_AUTH_KEY_RELATIVE_PATH });
|
|
160
|
+
resetToolCallAuthCache();
|
|
161
|
+
}
|
|
162
|
+
persistCollectPromptsFromResponse(parsed);
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
export async function ensureStartupMetadataSynced(hardwareUuid) {
|
|
166
|
+
if (process.env.OPTIMUS_SKIP_STARTUP_SYNC === "1")
|
|
167
|
+
return;
|
|
168
|
+
if (shouldSkipStartupSyncDueToCooldown(Date.now(), startupSyncIntervalMs())) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const body = buildStartupBody(hardwareUuid);
|
|
124
172
|
const url = buildStartupEndpointUrl(loadEndpointBase());
|
|
125
173
|
try {
|
|
126
|
-
const
|
|
127
|
-
const timeoutId = setTimeout(() => controller.abort(), 5000);
|
|
128
|
-
let res;
|
|
129
|
-
try {
|
|
130
|
-
res = await fetch(url, {
|
|
131
|
-
method: "POST",
|
|
132
|
-
headers: { "Content-Type": "application/json" },
|
|
133
|
-
body: JSON.stringify(body),
|
|
134
|
-
signal: controller.signal,
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
finally {
|
|
138
|
-
clearTimeout(timeoutId);
|
|
139
|
-
}
|
|
174
|
+
const res = await postStartupBody(url, body);
|
|
140
175
|
const text = await res.text();
|
|
141
176
|
if (!res.ok) {
|
|
142
177
|
console.error(`[optimus-tool-call] startup metadata sync failed ${res.status}: ${text ? text.slice(0, 240) : res.statusText}`);
|
|
143
178
|
recordStartupSyncAttemptEnd(false);
|
|
144
179
|
return;
|
|
145
180
|
}
|
|
146
|
-
|
|
147
|
-
try {
|
|
148
|
-
parsed = JSON.parse(text);
|
|
149
|
-
}
|
|
150
|
-
catch {
|
|
151
|
-
recordStartupSyncAttemptEnd(false);
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
if (parsed.status === "key_issued" && typeof parsed.key === "string") {
|
|
155
|
-
persistAuthKey(parsed.key, typeof parsed.key_id === "string" ? parsed.key_id : null, hardwareUuid, { authRelativePath: OPTIMUS_AUTH_KEY_RELATIVE_PATH });
|
|
156
|
-
resetToolCallAuthCache();
|
|
157
|
-
}
|
|
158
|
-
persistCollectPromptsFromResponse(parsed);
|
|
159
|
-
recordStartupSyncAttemptEnd(true);
|
|
181
|
+
recordStartupSyncAttemptEnd(applyStartupResponse(text, hardwareUuid));
|
|
160
182
|
}
|
|
161
183
|
catch (err) {
|
|
162
184
|
console.error(`[optimus-tool-call] startup metadata sync error: ${err instanceof Error ? err.message : String(err)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startup-sync.js","sourceRoot":"","sources":["../../src/lib/startup-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,iBAAiB,GAClB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,8BAA8B,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAoB,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,gBAAgB,GAAG,GAAgB,EAAE,CAAC,CAAC;IAC3C,aAAa,EAAE,EAAE;IACjB,WAAW,EAAE,EAAE;IACf,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,EAAE;IAChB,eAAe,EAAE,EAAE;IACnB,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,EAAE;CACjB,CAAC,CAAC;AAEH,MAAM,gCAAgC,GAAG,OAAS,CAAC;AACnD,MAAM,oCAAoC,GAAG,IAAK,CAAC;AACnD,MAAM,mCAAmC,GAAG,MAAO,CAAC;AAEpD,IAAI,yBAAyB,GAAG,CAAC,CAAC;AAClC,8EAA8E;AAC9E,IAAI,oBAAoB,GAAG,IAAI,CAAC;AAChC,IAAI,wBAAwB,GAAG,CAAC,CAAC;AAEjC,SAAS,2BAA2B,CAAC,EAAW;IAC9C,yBAAyB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvC,oBAAoB,GAAG,EAAE,CAAC;IAC1B,IAAI,EAAE,EAAE,CAAC;QACP,wBAAwB,GAAG,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,wBAAwB,IAAI,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED,SAAS,kCAAkC,CAAC,GAAW,EAAE,UAAkB;IACzE,IAAI,yBAAyB,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACjD,MAAM,gBAAgB,GAAG,CAAC,oBAAoB;QAC5C,CAAC,CAAC,IAAI,CAAC,GAAG,CACN,mCAAmC,EACnC,oCAAoC;YAClC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,wBAAwB,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAC9D;QACH,CAAC,CAAC,CAAC,CAAC;IACN,MAAM,iBAAiB,GAAG,oBAAoB,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;IACjE,OAAO,UAAU,GAAG,CAAC,IAAI,GAAG,GAAG,yBAAyB,GAAG,UAAU,CAAC;AACxE,CAAC;AAED,SAAS,oBAAoB;IAC3B,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACtE,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,EAAE,uBAAuB,CAAC,CAAC;QAC1G,OAAO,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,
|
|
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":"build-event.d.ts","sourceRoot":"","sources":["../../../src/lib/telemetry/build-event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"build-event.d.ts","sourceRoot":"","sources":["../../../src/lib/telemetry/build-event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA2EjE;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,EACtC,aAAa,GAAE,MAAkB,EACjC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GACxB,cAAc,GAAG,IAAI,CA6BvB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { readCollectPrompts } from "../prompt-collection-policy.js";
|
|
1
|
+
import { readCollectPrompts, readFingerprintKey } from "../prompt-collection-policy.js";
|
|
2
2
|
import { applyPromptCollectionToMetadata } from "./prompt-privacy.js";
|
|
3
|
+
import os from "node:os";
|
|
3
4
|
import { readLogin } from "../login.js";
|
|
4
5
|
import { readAgentProduct, readCopilotProduct } from "../transcript.js";
|
|
5
6
|
/**
|
|
@@ -22,6 +23,20 @@ function hookManifest() {
|
|
|
22
23
|
return null;
|
|
23
24
|
}
|
|
24
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* The macOS account running the agent, read on every event: after a handover, or from a second
|
|
28
|
+
* account on the same Mac, the event carries who ran it rather than whoever last synced the
|
|
29
|
+
* machine's profile. Left out if the account cannot be looked up.
|
|
30
|
+
*/
|
|
31
|
+
function osUser() {
|
|
32
|
+
try {
|
|
33
|
+
const { uid, username } = os.userInfo();
|
|
34
|
+
return username ? { uid, username } : null;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
25
40
|
/**
|
|
26
41
|
* Which product of the agent's family ran the tool (OPT-1488). Codex's CLI, desktop app, ChatGPT
|
|
27
42
|
* Work and VS Code send identical hook fields, so it is read from the session file Codex names in
|
|
@@ -44,6 +59,7 @@ function optionalMetadata(inv, agentIdentity) {
|
|
|
44
59
|
const manifest = hookManifest();
|
|
45
60
|
// Tenant and email the agent is signed in with, read on every call; absent when unreadable.
|
|
46
61
|
const login = readLogin(agentIdentity);
|
|
62
|
+
const account = osUser();
|
|
47
63
|
return {
|
|
48
64
|
...(inv.user_prompt ? { user_prompt: inv.user_prompt } : {}),
|
|
49
65
|
...(inv.raw_event ? { raw_event: inv.raw_event } : {}),
|
|
@@ -51,6 +67,7 @@ function optionalMetadata(inv, agentIdentity) {
|
|
|
51
67
|
...(hookHash ? { hook_hash: hookHash } : {}),
|
|
52
68
|
...(manifest ? { hook_manifest: manifest } : {}),
|
|
53
69
|
...(login ? { login } : {}),
|
|
70
|
+
...(account ? { os_user: account } : {}),
|
|
54
71
|
};
|
|
55
72
|
}
|
|
56
73
|
/**
|
|
@@ -71,7 +88,7 @@ export function buildTelemetryEvent(inv, agentIdentity = "unknown", sessionId) {
|
|
|
71
88
|
tool_name: toolNameNorm || toolName,
|
|
72
89
|
tool_input: normalizedToolInput,
|
|
73
90
|
...optionalMetadata(inv, agentIdentity),
|
|
74
|
-
}, !readCollectPrompts());
|
|
91
|
+
}, !readCollectPrompts(), readFingerprintKey());
|
|
75
92
|
return {
|
|
76
93
|
timestamp: new Date().toISOString(),
|
|
77
94
|
agent_identity: agentIdentity,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-event.js","sourceRoot":"","sources":["../../../src/lib/telemetry/build-event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"build-event.js","sourceRoot":"","sources":["../../../src/lib/telemetry/build-event.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,5 +5,5 @@ export * from "./types.js";
|
|
|
5
5
|
export * from "./canonical.js";
|
|
6
6
|
export { eventToDict } from "./serialize.js";
|
|
7
7
|
export { buildTelemetryEvent } from "./build-event.js";
|
|
8
|
-
export { cloneToolCallMetadataForWire,
|
|
8
|
+
export { cloneToolCallMetadataForWire, WIRE_RAW_EVENT_KEYS, WIRE_TOOL_CALL_METADATA_KEYS, } from "./wire-metadata.js";
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/telemetry/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EACL,4BAA4B,EAC5B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/telemetry/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,oBAAoB,CAAC"}
|
|
@@ -5,5 +5,5 @@ export * from "./types.js";
|
|
|
5
5
|
export * from "./canonical.js";
|
|
6
6
|
export { eventToDict } from "./serialize.js";
|
|
7
7
|
export { buildTelemetryEvent } from "./build-event.js";
|
|
8
|
-
export { cloneToolCallMetadataForWire,
|
|
8
|
+
export { cloneToolCallMetadataForWire, WIRE_RAW_EVENT_KEYS, WIRE_TOOL_CALL_METADATA_KEYS, } from "./wire-metadata.js";
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/telemetry/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EACL,4BAA4B,EAC5B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/telemetry/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,oBAAoB,CAAC"}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
export declare const RAW_EVENT_PROMPT_KEYS: readonly ["user_prompt", "userPrompt", "prompt"];
|
|
2
2
|
export declare function sha256UserPrompt(text: string): string;
|
|
3
|
+
/**
|
|
4
|
+
* The prompt's grouping hash: HMAC-SHA256 under the org key once it has arrived, so a short prompt
|
|
5
|
+
* cannot be recovered by hashing guesses; plain SHA-256 before then (the first run after the
|
|
6
|
+
* upgrade), as before. Either is 64 hex characters, which the backend stores as sent.
|
|
7
|
+
*/
|
|
8
|
+
export declare function hashUserPrompt(text: string, orgKey?: string): string;
|
|
3
9
|
export declare function stripRawEventPromptFields(rawEvent: Record<string, unknown> | undefined | null): Record<string, unknown> | undefined;
|
|
4
|
-
export declare function applyPromptCollectionToMetadata(meta: Record<string, unknown>, hashPrompts: boolean): Record<string, unknown>;
|
|
10
|
+
export declare function applyPromptCollectionToMetadata(meta: Record<string, unknown>, hashPrompts: boolean, orgKey?: string): Record<string, unknown>;
|
|
5
11
|
//# sourceMappingURL=prompt-privacy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-privacy.d.ts","sourceRoot":"","sources":["../../../src/lib/telemetry/prompt-privacy.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB,kDAAmD,CAAC;AAEtF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,GACnD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CASrC;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,WAAW,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"prompt-privacy.d.ts","sourceRoot":"","sources":["../../../src/lib/telemetry/prompt-privacy.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB,kDAAmD,CAAC;AAEtF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAGpE;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,GACnD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CASrC;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,WAAW,EAAE,OAAO,EACpB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkBzB"}
|