@optimuslabs/runtime 0.3.4 → 0.3.12
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.js +36 -70
- package/dist/index.js.map +1 -1
- 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/login.d.ts +15 -0
- package/dist/lib/login.d.ts.map +1 -0
- package/dist/lib/login.js +109 -0
- package/dist/lib/login.js.map +1 -0
- 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 +73 -6
- package/dist/lib/telemetry/build-event.js.map +1 -1
- package/dist/lib/telemetry/canonical.d.ts +1 -1
- package/dist/lib/telemetry/canonical.d.ts.map +1 -1
- package/dist/lib/telemetry/canonical.js +23 -14
- package/dist/lib/telemetry/canonical.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 +18 -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 +51 -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/lib/transcript.d.ts +33 -0
- package/dist/lib/transcript.d.ts.map +1 -0
- package/dist/lib/transcript.js +217 -0
- package/dist/lib/transcript.js.map +1 -0
- package/dist/test/canonical.test.js +40 -0
- package/dist/test/canonical.test.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/login.test.d.ts +2 -0
- package/dist/test/login.test.d.ts.map +1 -0
- package/dist/test/login.test.js +60 -0
- package/dist/test/login.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 +62 -0
- package/dist/test/telemetry.test.js.map +1 -1
- package/dist/test/transcript.test.d.ts +2 -0
- package/dist/test/transcript.test.d.ts.map +1 -0
- package/dist/test/transcript.test.js +162 -0
- package/dist/test/transcript.test.js.map +1 -0
- 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 +110 -0
- package/dist/test/wire-metadata.test.js.map +1 -0
- package/package.json +3 -2
package/dist/index.js
CHANGED
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
* Reads hook JSON from stdin, builds a raw telemetry event, streams it to the
|
|
6
6
|
* backend (server classifies), returns allow response.
|
|
7
7
|
*/
|
|
8
|
-
import fs from "fs";
|
|
9
8
|
import { buildTelemetryEvent, eventToDict } from "./lib/telemetry.js";
|
|
10
9
|
import { queueEvent, ensureShutdown } from "./lib/streaming.js";
|
|
11
10
|
import { normalizeToCanonical } from "./lib/telemetry/canonical.js";
|
|
11
|
+
import { copilotSessionEventsPath, readLastUserPrompt } from "./lib/transcript.js";
|
|
12
12
|
const dbg = (...args) => { if (process.env.OPTIMUS_DEBUG)
|
|
13
13
|
console.error(...args); };
|
|
14
14
|
/** FunctionalRun.command — tool name plus primary path/target when present. */
|
|
@@ -37,49 +37,58 @@ function reportClientEventOk(canonical) {
|
|
|
37
37
|
}))
|
|
38
38
|
.catch(() => { });
|
|
39
39
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
dbg("[optimus-tool-call] stdin preview:", stdinData.slice(0, 300));
|
|
52
|
-
// Parse and normalize to canonical format
|
|
53
|
-
let canonical;
|
|
40
|
+
/**
|
|
41
|
+
* The transcript holding the person's prompts: the hook's `transcript_path`, or for the Copilot CLI
|
|
42
|
+
* and app, which send none, the session's events file. Null when there is neither.
|
|
43
|
+
*/
|
|
44
|
+
function promptTranscriptPath(raw, canonical) {
|
|
45
|
+
if (typeof raw.transcript_path === "string")
|
|
46
|
+
return raw.transcript_path;
|
|
47
|
+
return canonical.agent === "copilot" ? copilotSessionEventsPath(canonical.session_id) : null;
|
|
48
|
+
}
|
|
49
|
+
/** The hook input in canonical form, with the user prompt read from the transcript; null when it is not JSON. */
|
|
50
|
+
function parseHookInput(stdinData) {
|
|
54
51
|
try {
|
|
55
52
|
const raw = JSON.parse(stdinData);
|
|
56
53
|
dbg("[optimus-tool-call] Parsed JSON successfully");
|
|
57
54
|
dbg("[optimus-tool-call] Raw keys:", Object.keys(raw));
|
|
58
55
|
// Normalize to canonical format (works for both Claude and Cursor)
|
|
59
|
-
canonical = normalizeToCanonical(raw);
|
|
56
|
+
let canonical = normalizeToCanonical(raw);
|
|
60
57
|
dbg("[optimus-tool-call] Detected agent:", canonical.agent);
|
|
61
58
|
dbg("[optimus-tool-call] Hook event name:", canonical.hook_event_name);
|
|
62
59
|
dbg("[optimus-tool-call] Tool name:", canonical.tool_name);
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
const userPrompt = readLastUserPrompt(transcriptPath);
|
|
68
|
-
if (userPrompt) {
|
|
69
|
-
canonical = { ...canonical, user_prompt: userPrompt };
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
60
|
+
const transcriptPath = canonical.user_prompt ? null : promptTranscriptPath(raw, canonical);
|
|
61
|
+
const userPrompt = transcriptPath ? readLastUserPrompt(transcriptPath) : null;
|
|
62
|
+
if (userPrompt)
|
|
63
|
+
canonical = { ...canonical, user_prompt: userPrompt };
|
|
73
64
|
dbg("[optimus-tool-call] Canonical event:", {
|
|
74
65
|
agent: canonical.agent,
|
|
75
66
|
hook_event_name: canonical.hook_event_name,
|
|
76
67
|
tool_name: canonical.tool_name,
|
|
77
68
|
user_prompt_preview: canonical.user_prompt?.slice(0, 100),
|
|
78
69
|
});
|
|
70
|
+
return canonical;
|
|
79
71
|
}
|
|
80
72
|
catch (error) {
|
|
81
|
-
// Invalid JSON or parse error — allow and return
|
|
82
73
|
console.error("[optimus-tool-call] ERROR: Failed to parse:", error);
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function main() {
|
|
78
|
+
dbg("[optimus-tool-call] ===== HOOK STARTED =====");
|
|
79
|
+
dbg("[optimus-tool-call] NODE_ENV:", process.env.NODE_ENV);
|
|
80
|
+
dbg("[optimus-tool-call] CURSOR:", process.env.CURSOR);
|
|
81
|
+
dbg("[optimus-tool-call] CURSOR_SESSION_ID:", process.env.CURSOR_SESSION_ID);
|
|
82
|
+
dbg("[optimus-tool-call] CLAUDE_CODE_SESSION_ID:", process.env.CLAUDE_CODE_SESSION_ID);
|
|
83
|
+
// Setup shutdown handling
|
|
84
|
+
ensureShutdown();
|
|
85
|
+
// Read stdin
|
|
86
|
+
const stdinData = await readStdin();
|
|
87
|
+
dbg("[optimus-tool-call] stdin length:", stdinData.length);
|
|
88
|
+
dbg("[optimus-tool-call] stdin preview:", stdinData.slice(0, 300));
|
|
89
|
+
const canonical = parseHookInput(stdinData);
|
|
90
|
+
if (!canonical) {
|
|
91
|
+
// Invalid JSON or parse error — allow and return
|
|
83
92
|
const response = { continue: true, permission: "allow" };
|
|
84
93
|
console.log(JSON.stringify(response));
|
|
85
94
|
return;
|
|
@@ -138,49 +147,6 @@ async function readStdin() {
|
|
|
138
147
|
* {"type":"user","message":{"role":"user","content":"<text>"},...}
|
|
139
148
|
* Failures are non-fatal — returns null if the file is missing or unreadable.
|
|
140
149
|
*/
|
|
141
|
-
function readLastUserPrompt(transcriptPath) {
|
|
142
|
-
try {
|
|
143
|
-
const raw = fs.readFileSync(transcriptPath, "utf-8");
|
|
144
|
-
const lines = raw.split("\n");
|
|
145
|
-
for (let i = lines.length - 1; i >= 0; i--) {
|
|
146
|
-
const line = lines[i].trim();
|
|
147
|
-
if (!line)
|
|
148
|
-
continue;
|
|
149
|
-
try {
|
|
150
|
-
const entry = JSON.parse(line);
|
|
151
|
-
if (entry.type !== "user")
|
|
152
|
-
continue;
|
|
153
|
-
const msg = entry.message;
|
|
154
|
-
if (!msg || msg.role !== "user")
|
|
155
|
-
continue;
|
|
156
|
-
const content = msg.content;
|
|
157
|
-
if (typeof content === "string" && content.trim()) {
|
|
158
|
-
return content.trim();
|
|
159
|
-
}
|
|
160
|
-
if (Array.isArray(content)) {
|
|
161
|
-
const blocks = content;
|
|
162
|
-
// Skip tool_result turns — those are API feedback, not user-typed messages
|
|
163
|
-
if (blocks.some((c) => c.type === "tool_result"))
|
|
164
|
-
continue;
|
|
165
|
-
const text = blocks
|
|
166
|
-
.filter((c) => c.type === "text" && typeof c.text === "string")
|
|
167
|
-
.map((c) => c.text)
|
|
168
|
-
.join("\n")
|
|
169
|
-
.trim();
|
|
170
|
-
if (text)
|
|
171
|
-
return text;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
catch {
|
|
175
|
-
// skip malformed lines
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
catch {
|
|
180
|
-
// file missing or unreadable — non-fatal
|
|
181
|
-
}
|
|
182
|
-
return null;
|
|
183
|
-
}
|
|
184
150
|
// Run
|
|
185
151
|
main().catch(async (err) => {
|
|
186
152
|
console.error("[optimus-tool-call] Fatal error:", err);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"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;AACnE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE/D,MAAM,eAAe,GAAG,IAAI,CAAC;AAE7B,4FAA4F;AAC5F,SAAS,kBAAkB;IACzB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAA0C,CAAC;QACrG,MAAM,IAAI,GAAG,OAAO,MAAM,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,MAAM,OAAO,GAAG,OAAO,MAAM,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,IAAI,IAAI,IAAI,OAAO;YAAE,OAAO,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC;QAClD,OAAO,OAAO,IAAI,IAAI,IAAI,SAAS,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,qBAAqB,GAAG,MAAO,CAAC;AAEtC,SAAS,cAAc;IACrB,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5D,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACzD,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;YACzF,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,IAAI,qBAAqB,EAAE,CAAC;gBACrD,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;gBACnD,IAAI,QAAQ;oBAAE,OAAO,QAAQ,CAAC;YAChC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,kCAAkC;QACpC,CAAC;IACH,CAAC;IACD,OAAO,YAAY,IAAI,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;AAEnF,0FAA0F;AAC1F,SAAS,qBAAqB,CAAC,QAAiB;IAC9C,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACxG,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAC9C,MAAM,YAAY,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3D,IAAI,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC;QAAE,OAAO,YAAY,CAAC;IACxD,OAAO,IAAI,CAAC;AACd,CAAC;AAYD,SAAS,QAAQ,CAAC,KAAoB;IACpC,MAAM,GAAG,GAA2B;QAClC,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE;QACnB,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE;QAC/C,IAAI,EAAE,OAAO,CAAC,OAAO;QACrB,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;QACxB,gBAAgB,EAAE,kBAAkB,EAAE;QACtC,gBAAgB,EAAE,gBAAgB;QAClC,MAAM,EAAE,WAAW;KACpB,CAAC;IACF,IAAI,OAAO,CAAC,GAAG,CAAC,2BAA2B;QAAE,GAAG,CAAC,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IAC/G,IAAI,KAAK;QAAE,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;IACjC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB;QAAE,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAC9E,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/D,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,OAAO,GAAG,OAAO,aAAa,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,MAAyB,EAAE,OAAe,EAAE,KAAoB;IACxF,OAAO,WAAW,CAChB;QACE,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,mBAAmB;QAC9C,SAAS,EAAE,WAAW;QACtB,QAAQ,EAAE,OAAO;QACjB,WAAW,EAAE,gBAAgB,CAAC,OAAO,CAAC;QACtC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI;QACnC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;QAC3B,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC;KAC1B,EACD,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CACjC,CAAC;AACJ,CAAC;AAED,uGAAuG;AACvG,SAAS,YAAY,CAAC,OAAgC;IACpD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,8BAA8B,EAAE,CAAC,CAAC;QACxF,OAAO,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,8DAA8D;QAC9D,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAyB;IAC/D,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,mBAAmB,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAC1D,MAAM,cAAc,GAAG,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;QAC/D,MAAM,SAAS,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,GAAG,gBAAgB,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,sCAAsC,CAAC;QACjG,IAAI,OAAO,KAAK,KAAK,WAAW;YAAE,OAAO;QACzC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,eAAe,CAAC,CAAC;QACpE,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,QAAQ,EAAE;gBACpB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,cAAc,EAAE,SAAS,EAAE,CAAC;gBACtD,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;IAC9D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The login the agent behind a tool call is signed in with: its vendor tenant and email, read
|
|
3
|
+
* fresh on every tool call so a switch shows on the very next one. Every field is optional: an
|
|
4
|
+
* agent or situation that does not say (an API key, a logged-out session, an unknown agent) just
|
|
5
|
+
* leaves it out. Same sources as log-llm-config's tenant gate; tokens are never sent, only the
|
|
6
|
+
* identity claims and ids read from them.
|
|
7
|
+
*/
|
|
8
|
+
export type Login = {
|
|
9
|
+
tenant_id?: string;
|
|
10
|
+
tenant_name?: string;
|
|
11
|
+
email?: string;
|
|
12
|
+
};
|
|
13
|
+
/** The login for this agent, or null when it has none we can read. Never throws. */
|
|
14
|
+
export declare function readLogin(agent: string): Login | null;
|
|
15
|
+
//# sourceMappingURL=login.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/lib/login.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,MAAM,MAAM,KAAK,GAAG;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AA0FF,oFAAoF;AACpF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAerD"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The login the agent behind a tool call is signed in with: its vendor tenant and email, read
|
|
3
|
+
* fresh on every tool call so a switch shows on the very next one. Every field is optional: an
|
|
4
|
+
* agent or situation that does not say (an API key, a logged-out session, an unknown agent) just
|
|
5
|
+
* leaves it out. Same sources as log-llm-config's tenant gate; tokens are never sent, only the
|
|
6
|
+
* identity claims and ids read from them.
|
|
7
|
+
*/
|
|
8
|
+
import { execFileSync } from "node:child_process";
|
|
9
|
+
import fs from "node:fs";
|
|
10
|
+
import os from "node:os";
|
|
11
|
+
import path from "node:path";
|
|
12
|
+
const text = (value) => (typeof value === "string" ? value.trim() : "");
|
|
13
|
+
const readJson = (file) => {
|
|
14
|
+
try {
|
|
15
|
+
const parsed = JSON.parse(fs.readFileSync(file, "utf8"));
|
|
16
|
+
return parsed && typeof parsed === "object" && !Array.isArray(parsed)
|
|
17
|
+
? parsed
|
|
18
|
+
: null;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const compact = (login) => {
|
|
25
|
+
const out = Object.fromEntries(Object.entries(login).filter(([, v]) => v));
|
|
26
|
+
return Object.keys(out).length ? out : null;
|
|
27
|
+
};
|
|
28
|
+
/** Claude Code: `oauthAccount` in .claude.json (under CLAUDE_CONFIG_DIR when set). */
|
|
29
|
+
function readClaudeLogin() {
|
|
30
|
+
const dir = text(process.env.CLAUDE_CONFIG_DIR);
|
|
31
|
+
const parsed = readJson(dir ? path.join(dir, ".claude.json") : path.join(os.homedir(), ".claude.json"));
|
|
32
|
+
const account = parsed?.oauthAccount;
|
|
33
|
+
if (!account || typeof account !== "object")
|
|
34
|
+
return null;
|
|
35
|
+
return compact({
|
|
36
|
+
tenant_id: text(account.organizationUuid),
|
|
37
|
+
tenant_name: text(account.organizationName),
|
|
38
|
+
email: text(account.emailAddress),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/** Codex: the ID token's claims in ~/.codex/auth.json -- its ChatGPT workspace and email. */
|
|
42
|
+
function readCodexLogin() {
|
|
43
|
+
const auth = readJson(path.join(os.homedir(), ".codex", "auth.json"));
|
|
44
|
+
const tokens = auth?.tokens;
|
|
45
|
+
const idToken = text(tokens?.id_token);
|
|
46
|
+
const payload = idToken.split(".")[1];
|
|
47
|
+
if (!payload)
|
|
48
|
+
return null;
|
|
49
|
+
let claims;
|
|
50
|
+
try {
|
|
51
|
+
claims = JSON.parse(Buffer.from(payload, "base64url").toString("utf8"));
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
const openai = (claims["https://api.openai.com/auth"] ?? {});
|
|
57
|
+
return compact({ tenant_id: text(openai.chatgpt_account_id), email: text(claims.email) });
|
|
58
|
+
}
|
|
59
|
+
const CURSOR_DB = path.join(os.homedir(), "Library/Application Support/Cursor/User/globalStorage/state.vscdb");
|
|
60
|
+
const CURSOR_APP_USER_KEY = "src.vs.platform.reactivestorage.browser.reactiveStorageServiceImpl.persistentStorage.applicationUser";
|
|
61
|
+
const cursorQuery = (sql) => {
|
|
62
|
+
try {
|
|
63
|
+
// Fixed binary, no shell; the path and both queries are constants in this file.
|
|
64
|
+
return execFileSync("sqlite3", ["-readonly", CURSOR_DB, sql], {
|
|
65
|
+
encoding: "utf8",
|
|
66
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
67
|
+
timeout: 2000,
|
|
68
|
+
}).trim();
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return "";
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
/** Cursor: its first team (none on a personal account) and cached email, from state.vscdb. */
|
|
75
|
+
function readCursorLogin() {
|
|
76
|
+
if (!fs.existsSync(CURSOR_DB))
|
|
77
|
+
return null;
|
|
78
|
+
let teams = [];
|
|
79
|
+
try {
|
|
80
|
+
teams = JSON.parse(cursorQuery(`SELECT json_extract(value, '$.aiSettings.teamIds') FROM ItemTable WHERE key = '${CURSOR_APP_USER_KEY}';`) || "[]");
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
teams = [];
|
|
84
|
+
}
|
|
85
|
+
const team = Array.isArray(teams) && teams.length ? String(teams[0]) : "";
|
|
86
|
+
return compact({
|
|
87
|
+
tenant_id: team,
|
|
88
|
+
email: cursorQuery("SELECT value FROM ItemTable WHERE key = 'cursorAuth/cachedEmail';"),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/** The login for this agent, or null when it has none we can read. Never throws. */
|
|
92
|
+
export function readLogin(agent) {
|
|
93
|
+
try {
|
|
94
|
+
switch ((agent || "").toLowerCase()) {
|
|
95
|
+
case "claude":
|
|
96
|
+
return readClaudeLogin();
|
|
97
|
+
case "codex":
|
|
98
|
+
return readCodexLogin();
|
|
99
|
+
case "cursor":
|
|
100
|
+
return readCursorLogin();
|
|
101
|
+
default:
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/lib/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pii-scrub shim: the one place that imports @optimuslabs/pii-scrub.
|
|
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";
|
|
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,wBAAwB,CAAC;AAa7D,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.
|
|
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"));
|
|
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,wBAAwB,CAAC,CACnB,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"}
|