@koda-sl/baker-bridge 0.162.0 → 0.163.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/hono/bridge-job.d.ts +2 -0
- package/dist/hono/bridge-job.d.ts.map +1 -1
- package/dist/hono/bridge-job.js +21 -2
- package/dist/hono/bridge-job.js.map +1 -1
- package/dist/hono/bridge-job.test.js +28 -1
- package/dist/hono/bridge-job.test.js.map +1 -1
- package/dist/hono/jev.d.ts +4 -1
- package/dist/hono/jev.d.ts.map +1 -1
- package/dist/hono/jev.js +5 -2
- package/dist/hono/jev.js.map +1 -1
- package/dist/hono/jev.test.js +2 -1
- package/dist/hono/jev.test.js.map +1 -1
- package/dist/hono/openrouter-attribution.d.ts +31 -0
- package/dist/hono/openrouter-attribution.d.ts.map +1 -0
- package/dist/hono/openrouter-attribution.js +70 -0
- package/dist/hono/openrouter-attribution.js.map +1 -0
- package/dist/hono/openrouter-attribution.test.d.ts +2 -0
- package/dist/hono/openrouter-attribution.test.d.ts.map +1 -0
- package/dist/hono/openrouter-attribution.test.js +48 -0
- package/dist/hono/openrouter-attribution.test.js.map +1 -0
- package/dist/hono/openrouter-session.d.ts +11 -5
- package/dist/hono/openrouter-session.d.ts.map +1 -1
- package/dist/hono/openrouter-session.js +9 -5
- package/dist/hono/openrouter-session.js.map +1 -1
- package/dist/hono/openrouter-session.test.js +9 -0
- package/dist/hono/openrouter-session.test.js.map +1 -1
- package/package.json +1 -1
package/dist/hono/jev.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { RuntimeOpenRouterTags } from "./openrouter-attribution.ts";
|
|
1
2
|
/** Pinned: the thresholds its callers act on were measured against this version. */
|
|
2
3
|
export declare const JEV_MODEL = "typesafe/jev-1.13";
|
|
3
4
|
/** Asks each statement as a yes/no question; the probability of yes for each, or null when unanswered. */
|
|
@@ -12,5 +13,7 @@ export declare function readNouls(body: unknown, ids: readonly string[]): number
|
|
|
12
13
|
* request), or null when Jev could not answer: no key, a timeout, an outage. There is no
|
|
13
14
|
* route to fall back to, so the caller decides what null means.
|
|
14
15
|
*/
|
|
15
|
-
export declare const jevJudge: (key: string | undefined
|
|
16
|
+
export declare const jevJudge: (key: string | undefined,
|
|
17
|
+
/** Where the call comes from, for OpenRouter (`openrouter-attribution.ts`). */
|
|
18
|
+
openRouterTags: RuntimeOpenRouterTags) => Judge;
|
|
16
19
|
//# sourceMappingURL=jev.d.ts.map
|
package/dist/hono/jev.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jev.d.ts","sourceRoot":"","sources":["../../src/hono/jev.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jev.d.ts","sourceRoot":"","sources":["../../src/hono/jev.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEzE,oFAAoF;AACpF,eAAO,MAAM,SAAS,sBAAsB,CAAC;AAK7C,0GAA0G;AAC1G,MAAM,MAAM,KAAK,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;AACxF,MAAM,MAAM,WAAW,GAAG;IAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC;AAInE,iGAAiG;AACjG,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,CAUhF;AAED;;;;GAIG;AACH,eAAO,MAAM,QAAQ,QAEZ,MAAM,GAAG,SAAS;AACvB,+EAA+E;gBAC/D,qBAAqB,KACpC,KAwBF,CAAC"}
|
package/dist/hono/jev.js
CHANGED
|
@@ -32,7 +32,9 @@ export function readNouls(body, ids) {
|
|
|
32
32
|
* request), or null when Jev could not answer: no key, a timeout, an outage. There is no
|
|
33
33
|
* route to fall back to, so the caller decides what null means.
|
|
34
34
|
*/
|
|
35
|
-
export const jevJudge = (key
|
|
35
|
+
export const jevJudge = (key,
|
|
36
|
+
/** Where the call comes from, for OpenRouter (`openrouter-attribution.ts`). */
|
|
37
|
+
openRouterTags) => async (questions) => {
|
|
36
38
|
if (questions.length === 0)
|
|
37
39
|
return [];
|
|
38
40
|
if (!key)
|
|
@@ -41,8 +43,9 @@ export const jevJudge = (key) => async (questions) => {
|
|
|
41
43
|
try {
|
|
42
44
|
const response = await fetch(ENDPOINT, {
|
|
43
45
|
method: "POST",
|
|
44
|
-
headers: { authorization: `Bearer ${key}`, "content-type": "application/json" },
|
|
46
|
+
headers: { ...openRouterTags.headers, authorization: `Bearer ${key}`, "content-type": "application/json" },
|
|
45
47
|
body: JSON.stringify({
|
|
48
|
+
...openRouterTags.fields,
|
|
46
49
|
model: JEV_MODEL,
|
|
47
50
|
state: {},
|
|
48
51
|
questions: Object.fromEntries(questions.map((q, i) => [ids[i], { type: "noul", instructions: q.instructions }])),
|
package/dist/hono/jev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jev.js","sourceRoot":"","sources":["../../src/hono/jev.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"jev.js","sourceRoot":"","sources":["../../src/hono/jev.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,oFAAoF;AACpF,MAAM,CAAC,MAAM,SAAS,GAAG,mBAAmB,CAAC;AAC7C,MAAM,QAAQ,GAAG,wCAAwC,CAAC;AAC1D,sGAAsG;AACtG,MAAM,UAAU,GAAG,KAAK,CAAC;AAMzB,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAE1F,iGAAiG;AACjG,MAAM,UAAU,SAAS,CAAC,IAAa,EAAE,GAAsB;IAC7D,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;QAC3C,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GACnB,CACE,GAAuB;AACvB,+EAA+E;AAC/E,cAAqC,EAC9B,EAAE,CACX,KAAK,EAAE,SAAS,EAAE,EAAE;IAClB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACtC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YACrC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,GAAG,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC1G,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,GAAG,cAAc,CAAC,MAAM;gBACxB,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,EAAE;gBACT,SAAS,EAAE,MAAM,CAAC,WAAW,CAC3B,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAClF;aACF,CAAC;YACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC;SACxC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAC9B,OAAO,SAAS,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC"}
|
package/dist/hono/jev.test.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
2
|
import { jevJudge, readNouls } from "./jev.js";
|
|
3
|
+
import { runtimeOpenRouterTags } from "./openrouter-attribution.js";
|
|
3
4
|
describe("readNouls", () => {
|
|
4
5
|
it("reads each yes/no answer asked, in order; null for a reply that does not answer them all", () => {
|
|
5
6
|
expect(readNouls({ answers: { q0: { noul: 0.93 }, q1: { noul: 0.02 } } }, ["q0", "q1"])).toEqual([0.93, 0.02]);
|
|
@@ -9,7 +10,7 @@ describe("readNouls", () => {
|
|
|
9
10
|
});
|
|
10
11
|
describe("jevJudge", () => {
|
|
11
12
|
it("answers nothing without a key, so the caller's fallback decides", async () => {
|
|
12
|
-
expect(await jevJudge("")([{ instructions: { question: "Is this a question?" } }])).toBeNull();
|
|
13
|
+
expect(await jevJudge("", runtimeOpenRouterTags({}, { service: "bridge", feature: "bridge.toolCallGuard" }))([{ instructions: { question: "Is this a question?" } }])).toBeNull();
|
|
13
14
|
});
|
|
14
15
|
});
|
|
15
16
|
//# sourceMappingURL=jev.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jev.test.js","sourceRoot":"","sources":["../../src/hono/jev.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"jev.test.js","sourceRoot":"","sources":["../../src/hono/jev.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,0FAA0F,EAAE,GAAG,EAAE;QAClG,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC/G,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAChF,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,CACJ,MAAM,QAAQ,CACZ,EAAE,EACF,qBAAqB,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC,CAClF,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,qBAAqB,EAAE,EAAE,CAAC,CAAC,CAC3D,CAAC,QAAQ,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The tag on every OpenRouter request made from the Runtime by the bridge and by the
|
|
3
|
+
* agent it runs: which part of Baker sent it, from which environment, for which
|
|
4
|
+
* company, Session and person. A request without it did not come from Baker.
|
|
5
|
+
*
|
|
6
|
+
* A copy of `@baker/openrouter-attribution`'s shape, because the bridge is published
|
|
7
|
+
* on its own and imports no workspace package; keep the two in step. The backend puts
|
|
8
|
+
* the Runtime's facts in its environment (`BAKER_ENVIRONMENT`, `BAKER_DEPLOYMENT`,
|
|
9
|
+
* `BAKER_RUNTIME_COMPANY_ID`, `BAKER_ORGANIZATION_ID`, `BAKER_CHAT_ID`).
|
|
10
|
+
*/
|
|
11
|
+
type RuntimeEnv = Readonly<Record<string, string | undefined>>;
|
|
12
|
+
export type RuntimeOpenRouterService = "agent" | "bridge";
|
|
13
|
+
export interface RuntimeOpenRouterTags {
|
|
14
|
+
headers: Record<string, string>;
|
|
15
|
+
fields: {
|
|
16
|
+
user: string;
|
|
17
|
+
session_id?: string;
|
|
18
|
+
trace: Record<string, string>;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/** Pure. `sessionId` groups the calls in OpenRouter: the thread for the agent, the chat otherwise. */
|
|
22
|
+
export declare function runtimeOpenRouterTags(env: RuntimeEnv, call: {
|
|
23
|
+
service: RuntimeOpenRouterService;
|
|
24
|
+
feature: string;
|
|
25
|
+
sessionId?: string;
|
|
26
|
+
userId?: string;
|
|
27
|
+
}): RuntimeOpenRouterTags;
|
|
28
|
+
/** `ANTHROPIC_CUSTOM_HEADERS` for the Claude Code CLI: one `Name: value` per line. */
|
|
29
|
+
export declare function anthropicCustomHeaders(headers: Readonly<Record<string, string>>): string;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=openrouter-attribution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouter-attribution.d.ts","sourceRoot":"","sources":["../../src/hono/openrouter-attribution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,KAAK,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;AAE/D,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE1D,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;CAC9E;AASD,sGAAsG;AACtG,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,UAAU,EACf,IAAI,EAAE;IAAE,OAAO,EAAE,wBAAwB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAChG,qBAAqB,CA6CvB;AAED,sFAAsF;AACtF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAIxF"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The tag on every OpenRouter request made from the Runtime by the bridge and by the
|
|
3
|
+
* agent it runs: which part of Baker sent it, from which environment, for which
|
|
4
|
+
* company, Session and person. A request without it did not come from Baker.
|
|
5
|
+
*
|
|
6
|
+
* A copy of `@baker/openrouter-attribution`'s shape, because the bridge is published
|
|
7
|
+
* on its own and imports no workspace package; keep the two in step. The backend puts
|
|
8
|
+
* the Runtime's facts in its environment (`BAKER_ENVIRONMENT`, `BAKER_DEPLOYMENT`,
|
|
9
|
+
* `BAKER_RUNTIME_COMPANY_ID`, `BAKER_ORGANIZATION_ID`, `BAKER_CHAT_ID`).
|
|
10
|
+
*/
|
|
11
|
+
const KNOWN_ENVIRONMENTS = ["production", "preview", "development", "test", "local"];
|
|
12
|
+
function environmentOf(env) {
|
|
13
|
+
const value = env.BAKER_ENVIRONMENT?.trim().toLowerCase();
|
|
14
|
+
return value && KNOWN_ENVIRONMENTS.includes(value) ? value : "unknown";
|
|
15
|
+
}
|
|
16
|
+
/** Pure. `sessionId` groups the calls in OpenRouter: the thread for the agent, the chat otherwise. */
|
|
17
|
+
export function runtimeOpenRouterTags(env, call) {
|
|
18
|
+
const environment = environmentOf(env);
|
|
19
|
+
const title = `Baker ${call.service} (${environment})`;
|
|
20
|
+
const sessionId = call.sessionId ?? env.BAKER_CHAT_ID;
|
|
21
|
+
const companyId = env.BAKER_RUNTIME_COMPANY_ID;
|
|
22
|
+
const optional = {
|
|
23
|
+
deployment: env.BAKER_DEPLOYMENT,
|
|
24
|
+
company_id: companyId,
|
|
25
|
+
organization_id: env.BAKER_ORGANIZATION_ID,
|
|
26
|
+
chat_id: env.BAKER_CHAT_ID,
|
|
27
|
+
user_id: call.userId,
|
|
28
|
+
};
|
|
29
|
+
const trace = {
|
|
30
|
+
trace_name: call.feature,
|
|
31
|
+
generation_name: call.feature,
|
|
32
|
+
feature: call.feature,
|
|
33
|
+
service: call.service,
|
|
34
|
+
environment,
|
|
35
|
+
};
|
|
36
|
+
for (const [key, value] of Object.entries(optional)) {
|
|
37
|
+
if (value)
|
|
38
|
+
trace[key] = value;
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
headers: {
|
|
42
|
+
"HTTP-Referer": `https://${call.service}.${environment}.withbaker.com`,
|
|
43
|
+
"X-OpenRouter-Title": title,
|
|
44
|
+
"X-Title": title,
|
|
45
|
+
...(sessionId ? { "x-session-id": sessionId } : {}),
|
|
46
|
+
},
|
|
47
|
+
fields: {
|
|
48
|
+
// The one field OpenRouter keeps beside the app and session: what, for which company and
|
|
49
|
+
// chat, by whom. The chat is here because the agent's session is its thread, not the chat.
|
|
50
|
+
user: [
|
|
51
|
+
call.feature,
|
|
52
|
+
companyId && `company:${companyId}`,
|
|
53
|
+
env.BAKER_CHAT_ID && `chat:${env.BAKER_CHAT_ID}`,
|
|
54
|
+
call.userId && `user:${call.userId}`,
|
|
55
|
+
]
|
|
56
|
+
.filter(Boolean)
|
|
57
|
+
.join(" | ")
|
|
58
|
+
.slice(0, 256),
|
|
59
|
+
...(sessionId ? { session_id: sessionId } : {}),
|
|
60
|
+
trace,
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/** `ANTHROPIC_CUSTOM_HEADERS` for the Claude Code CLI: one `Name: value` per line. */
|
|
65
|
+
export function anthropicCustomHeaders(headers) {
|
|
66
|
+
return Object.entries(headers)
|
|
67
|
+
.map(([name, value]) => `${name}: ${value}`)
|
|
68
|
+
.join("\n");
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=openrouter-attribution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouter-attribution.js","sourceRoot":"","sources":["../../src/hono/openrouter-attribution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,MAAM,kBAAkB,GAAG,CAAC,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAErF,SAAS,aAAa,CAAC,GAAe;IACpC,MAAM,KAAK,GAAG,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1D,OAAO,KAAK,IAAI,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACzE,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,qBAAqB,CACnC,GAAe,EACf,IAAiG;IAEjG,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,SAAS,IAAI,CAAC,OAAO,KAAK,WAAW,GAAG,CAAC;IACvD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC,aAAa,CAAC;IACtD,MAAM,SAAS,GAAG,GAAG,CAAC,wBAAwB,CAAC;IAC/C,MAAM,QAAQ,GAAuC;QACnD,UAAU,EAAE,GAAG,CAAC,gBAAgB;QAChC,UAAU,EAAE,SAAS;QACrB,eAAe,EAAE,GAAG,CAAC,qBAAqB;QAC1C,OAAO,EAAE,GAAG,CAAC,aAAa;QAC1B,OAAO,EAAE,IAAI,CAAC,MAAM;KACrB,CAAC;IACF,MAAM,KAAK,GAA2B;QACpC,UAAU,EAAE,IAAI,CAAC,OAAO;QACxB,eAAe,EAAE,IAAI,CAAC,OAAO;QAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,WAAW;KACZ,CAAC;IACF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,IAAI,KAAK;YAAE,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAChC,CAAC;IACD,OAAO;QACL,OAAO,EAAE;YACP,cAAc,EAAE,WAAW,IAAI,CAAC,OAAO,IAAI,WAAW,gBAAgB;YACtE,oBAAoB,EAAE,KAAK;YAC3B,SAAS,EAAE,KAAK;YAChB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpD;QACD,MAAM,EAAE;YACN,yFAAyF;YACzF,2FAA2F;YAC3F,IAAI,EAAE;gBACJ,IAAI,CAAC,OAAO;gBACZ,SAAS,IAAI,WAAW,SAAS,EAAE;gBACnC,GAAG,CAAC,aAAa,IAAI,QAAQ,GAAG,CAAC,aAAa,EAAE;gBAChD,IAAI,CAAC,MAAM,IAAI,QAAQ,IAAI,CAAC,MAAM,EAAE;aACrC;iBACE,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,KAAK,CAAC;iBACX,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAChB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,KAAK;SACN;KACF,CAAC;AACJ,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,sBAAsB,CAAC,OAAyC;IAC9E,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;SAC3B,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,KAAK,EAAE,CAAC;SAC3C,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouter-attribution.test.d.ts","sourceRoot":"","sources":["../../src/hono/openrouter-attribution.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { anthropicCustomHeaders, runtimeOpenRouterTags } from "./openrouter-attribution.js";
|
|
3
|
+
const env = {
|
|
4
|
+
BAKER_ENVIRONMENT: "production",
|
|
5
|
+
BAKER_DEPLOYMENT: "happy-otter-123",
|
|
6
|
+
BAKER_RUNTIME_COMPANY_ID: "c1",
|
|
7
|
+
BAKER_ORGANIZATION_ID: "o1",
|
|
8
|
+
BAKER_CHAT_ID: "chat1",
|
|
9
|
+
};
|
|
10
|
+
describe("runtimeOpenRouterTags", () => {
|
|
11
|
+
it("tags the agent's model calls with the Runtime's environment, company, Session and person", () => {
|
|
12
|
+
const tags = runtimeOpenRouterTags(env, { service: "agent", feature: "agent.turn", sessionId: "t1", userId: "u1" });
|
|
13
|
+
expect(tags.headers).toEqual({
|
|
14
|
+
"HTTP-Referer": "https://agent.production.withbaker.com",
|
|
15
|
+
"X-OpenRouter-Title": "Baker agent (production)",
|
|
16
|
+
"X-Title": "Baker agent (production)",
|
|
17
|
+
"x-session-id": "t1",
|
|
18
|
+
});
|
|
19
|
+
expect(tags.fields).toEqual({
|
|
20
|
+
user: "agent.turn | company:c1 | chat:chat1 | user:u1",
|
|
21
|
+
session_id: "t1",
|
|
22
|
+
trace: {
|
|
23
|
+
trace_name: "agent.turn",
|
|
24
|
+
generation_name: "agent.turn",
|
|
25
|
+
feature: "agent.turn",
|
|
26
|
+
service: "agent",
|
|
27
|
+
environment: "production",
|
|
28
|
+
deployment: "happy-otter-123",
|
|
29
|
+
company_id: "c1",
|
|
30
|
+
organization_id: "o1",
|
|
31
|
+
chat_id: "chat1",
|
|
32
|
+
user_id: "u1",
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
it("names the company without a person, and calls the environment unknown when the Runtime does not say its environment", () => {
|
|
37
|
+
const tags = runtimeOpenRouterTags({ BAKER_RUNTIME_COMPANY_ID: "c1" }, { service: "bridge", feature: "jev" });
|
|
38
|
+
expect(tags.fields.user).toBe("jev | company:c1");
|
|
39
|
+
expect(tags.fields.trace.environment).toBe("unknown");
|
|
40
|
+
expect(tags.headers["HTTP-Referer"]).toBe("https://bridge.unknown.withbaker.com");
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe("anthropicCustomHeaders", () => {
|
|
44
|
+
it("writes headers the way Claude Code reads ANTHROPIC_CUSTOM_HEADERS: one `Name: value` per line", () => {
|
|
45
|
+
expect(anthropicCustomHeaders({ "X-Title": "Baker agent (production)", "x-session-id": "t1" })).toBe("X-Title: Baker agent (production)\nx-session-id: t1");
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=openrouter-attribution.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouter-attribution.test.js","sourceRoot":"","sources":["../../src/hono/openrouter-attribution.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAE5F,MAAM,GAAG,GAAG;IACV,iBAAiB,EAAE,YAAY;IAC/B,gBAAgB,EAAE,iBAAiB;IACnC,wBAAwB,EAAE,IAAI;IAC9B,qBAAqB,EAAE,IAAI;IAC3B,aAAa,EAAE,OAAO;CACvB,CAAC;AAEF,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,0FAA0F,EAAE,GAAG,EAAE;QAClG,MAAM,IAAI,GAAG,qBAAqB,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACpH,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;YAC3B,cAAc,EAAE,wCAAwC;YACxD,oBAAoB,EAAE,0BAA0B;YAChD,SAAS,EAAE,0BAA0B;YACrC,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YAC1B,IAAI,EAAE,gDAAgD;YACtD,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE;gBACL,UAAU,EAAE,YAAY;gBACxB,eAAe,EAAE,YAAY;gBAC7B,OAAO,EAAE,YAAY;gBACrB,OAAO,EAAE,OAAO;gBAChB,WAAW,EAAE,YAAY;gBACzB,UAAU,EAAE,iBAAiB;gBAC7B,UAAU,EAAE,IAAI;gBAChB,eAAe,EAAE,IAAI;gBACrB,OAAO,EAAE,OAAO;gBAChB,OAAO,EAAE,IAAI;aACd;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qHAAqH,EAAE,GAAG,EAAE;QAC7H,MAAM,IAAI,GAAG,qBAAqB,CAAC,EAAE,wBAAwB,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9G,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,+FAA+F,EAAE,GAAG,EAAE;QACvG,MAAM,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAClG,qDAAqD,CACtD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -40,10 +40,16 @@ export declare const MODEL_CAPABILITIES_ENV = "CLAUDE_CODE_MODEL_CAPABILITIES";
|
|
|
40
40
|
export declare const BEDROCK_SERVABLE_CAPABILITIES = "-per_turn_effort";
|
|
41
41
|
/**
|
|
42
42
|
* Build the `CLAUDE_CODE_EXTRA_BODY` JSON that pins this conversation to one
|
|
43
|
-
* OpenRouter provider instance, prefers Bedrock,
|
|
44
|
-
* plugin off
|
|
45
|
-
*
|
|
46
|
-
* (including `provider`)
|
|
43
|
+
* OpenRouter provider instance, prefers Bedrock, keeps OpenRouter's `web`
|
|
44
|
+
* plugin off, and tags every request with whom and where it came from. Our
|
|
45
|
+
* per-thread `session_id`, the tag and the plugin opt-out are authoritative and
|
|
46
|
+
* override any inherited ones; other inherited fields (including `provider`)
|
|
47
|
+
* are kept.
|
|
47
48
|
*/
|
|
48
|
-
export declare function buildAgentExtraBody(threadId: string, inherited?: string
|
|
49
|
+
export declare function buildAgentExtraBody(threadId: string, inherited?: string,
|
|
50
|
+
/** Who the turn runs for and from where (`openrouter-attribution.ts`); ours wins over an inherited one. */
|
|
51
|
+
attribution?: {
|
|
52
|
+
user: string;
|
|
53
|
+
trace: Record<string, string>;
|
|
54
|
+
}): string;
|
|
49
55
|
//# sourceMappingURL=openrouter-session.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openrouter-session.d.ts","sourceRoot":"","sources":["../../src/hono/openrouter-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,cAAc,2BAA2B,CAAC;AA8BvD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,sBAAsB,mCAAmC,CAAC;AACvE,eAAO,MAAM,6BAA6B,qBAAqB,CAAC;AAwDhE
|
|
1
|
+
{"version":3,"file":"openrouter-session.d.ts","sourceRoot":"","sources":["../../src/hono/openrouter-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,cAAc,2BAA2B,CAAC;AA8BvD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,sBAAsB,mCAAmC,CAAC;AACvE,eAAO,MAAM,6BAA6B,qBAAqB,CAAC;AAwDhE;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM;AAClB,2GAA2G;AAC3G,WAAW,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC5D,MAAM,CASR"}
|
|
@@ -116,16 +116,20 @@ function parseInheritedExtraBody(inherited) {
|
|
|
116
116
|
}
|
|
117
117
|
/**
|
|
118
118
|
* Build the `CLAUDE_CODE_EXTRA_BODY` JSON that pins this conversation to one
|
|
119
|
-
* OpenRouter provider instance, prefers Bedrock,
|
|
120
|
-
* plugin off
|
|
121
|
-
*
|
|
122
|
-
* (including `provider`)
|
|
119
|
+
* OpenRouter provider instance, prefers Bedrock, keeps OpenRouter's `web`
|
|
120
|
+
* plugin off, and tags every request with whom and where it came from. Our
|
|
121
|
+
* per-thread `session_id`, the tag and the plugin opt-out are authoritative and
|
|
122
|
+
* override any inherited ones; other inherited fields (including `provider`)
|
|
123
|
+
* are kept.
|
|
123
124
|
*/
|
|
124
|
-
export function buildAgentExtraBody(threadId, inherited
|
|
125
|
+
export function buildAgentExtraBody(threadId, inherited,
|
|
126
|
+
/** Who the turn runs for and from where (`openrouter-attribution.ts`); ours wins over an inherited one. */
|
|
127
|
+
attribution) {
|
|
125
128
|
const parsed = parseInheritedExtraBody(inherited);
|
|
126
129
|
return JSON.stringify({
|
|
127
130
|
provider: PREFERRED_PROVIDER,
|
|
128
131
|
...parsed,
|
|
132
|
+
...(attribution ? { user: attribution.user, trace: attribution.trace } : {}),
|
|
129
133
|
session_id: threadId,
|
|
130
134
|
plugins: [...inheritedPluginsWithoutWeb(parsed), WEB_PLUGIN_DISABLED],
|
|
131
135
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openrouter-session.js","sourceRoot":"","sources":["../../src/hono/openrouter-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,wBAAwB,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,kBAAkB,GAAG;IACzB,KAAK,EAAE,CAAC,gBAAgB,EAAE,0BAA0B,EAAE,0BAA0B,CAAC;IACjF,eAAe,EAAE,IAAI;CACtB,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,gCAAgC,CAAC;AACvE,MAAM,CAAC,MAAM,6BAA6B,GAAG,kBAAkB,CAAC;AAEhE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,mBAAmB,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAE1D;;;;GAIG;AACH,SAAS,0BAA0B,CAAC,SAAkC;IACpE,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;IAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAQ,OAAqB,CAAC,MAAM,CAClC,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,KAAK,IAAI;QACf,OAAO,MAAM,KAAK,QAAQ;QAC1B,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACtB,CAAC,CAAC,IAAI,IAAI,MAAM,IAAI,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,CAC3C,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,SAA6B;IAC5D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9C,yEAAyE;QACzE,kEAAkE;QAClE,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,4EAA4E;IAC9E,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"openrouter-session.js","sourceRoot":"","sources":["../../src/hono/openrouter-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,wBAAwB,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,kBAAkB,GAAG;IACzB,KAAK,EAAE,CAAC,gBAAgB,EAAE,0BAA0B,EAAE,0BAA0B,CAAC;IACjF,eAAe,EAAE,IAAI;CACtB,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,gCAAgC,CAAC;AACvE,MAAM,CAAC,MAAM,6BAA6B,GAAG,kBAAkB,CAAC;AAEhE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,mBAAmB,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAE1D;;;;GAIG;AACH,SAAS,0BAA0B,CAAC,SAAkC;IACpE,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;IAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAQ,OAAqB,CAAC,MAAM,CAClC,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,KAAK,IAAI;QACf,OAAO,MAAM,KAAK,QAAQ;QAC1B,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACtB,CAAC,CAAC,IAAI,IAAI,MAAM,IAAI,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,CAC3C,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,SAA6B;IAC5D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9C,yEAAyE;QACzE,kEAAkE;QAClE,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,4EAA4E;IAC9E,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAgB,EAChB,SAAkB;AAClB,2GAA2G;AAC3G,WAA6D;IAE7D,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,QAAQ,EAAE,kBAAkB;QAC5B,GAAG,MAAM;QACT,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE,CAAC,GAAG,0BAA0B,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC;KACtE,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -67,4 +67,13 @@ describe("buildAgentExtraBody", () => {
|
|
|
67
67
|
expect(EXTRA_BODY_ENV).toBe("CLAUDE_CODE_EXTRA_BODY");
|
|
68
68
|
});
|
|
69
69
|
});
|
|
70
|
+
describe("buildAgentExtraBody attribution", () => {
|
|
71
|
+
it("carries who the turn runs for and from where, without moving the session pin", () => {
|
|
72
|
+
const tag = { user: "user:u1", trace: { feature: "agent.turn", service: "agent" } };
|
|
73
|
+
const body = JSON.parse(buildAgentExtraBody("thread_abc123", JSON.stringify({ user: "stale" }), tag));
|
|
74
|
+
expect(body.user).toBe("user:u1");
|
|
75
|
+
expect(body.trace).toEqual({ feature: "agent.turn", service: "agent" });
|
|
76
|
+
expect(body.session_id).toBe("thread_abc123");
|
|
77
|
+
});
|
|
78
|
+
});
|
|
70
79
|
//# sourceMappingURL=openrouter-session.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openrouter-session.test.js","sourceRoot":"","sources":["../../src/hono/openrouter-session.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"openrouter-session.test.js","sourceRoot":"","sources":["../../src/hono/openrouter-session.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED