@lobu/cli 3.0.7 → 3.0.8

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.
Files changed (47) hide show
  1. package/dist/api/credentials.d.ts +2 -1
  2. package/dist/api/credentials.d.ts.map +1 -1
  3. package/dist/api/credentials.js +30 -4
  4. package/dist/api/credentials.js.map +1 -1
  5. package/dist/commands/chat.d.ts +1 -0
  6. package/dist/commands/chat.d.ts.map +1 -1
  7. package/dist/commands/chat.js +16 -3
  8. package/dist/commands/chat.js.map +1 -1
  9. package/dist/commands/eval.d.ts +10 -0
  10. package/dist/commands/eval.d.ts.map +1 -0
  11. package/dist/commands/eval.js +194 -0
  12. package/dist/commands/eval.js.map +1 -0
  13. package/dist/commands/init.d.ts.map +1 -1
  14. package/dist/commands/init.js +24 -2
  15. package/dist/commands/init.js.map +1 -1
  16. package/dist/commands/login.d.ts +1 -0
  17. package/dist/commands/login.d.ts.map +1 -1
  18. package/dist/commands/login.js +51 -50
  19. package/dist/commands/login.js.map +1 -1
  20. package/dist/commands/logout.d.ts.map +1 -1
  21. package/dist/commands/logout.js +15 -1
  22. package/dist/commands/logout.js.map +1 -1
  23. package/dist/eval/client.d.ts +42 -0
  24. package/dist/eval/client.d.ts.map +1 -0
  25. package/dist/eval/client.js +166 -0
  26. package/dist/eval/client.js.map +1 -0
  27. package/dist/eval/grader.d.ts +14 -0
  28. package/dist/eval/grader.d.ts.map +1 -0
  29. package/dist/eval/grader.js +177 -0
  30. package/dist/eval/grader.js.map +1 -0
  31. package/dist/eval/reporter.d.ts +8 -0
  32. package/dist/eval/reporter.d.ts.map +1 -0
  33. package/dist/eval/reporter.js +242 -0
  34. package/dist/eval/reporter.js.map +1 -0
  35. package/dist/eval/runner.d.ts +11 -0
  36. package/dist/eval/runner.d.ts.map +1 -0
  37. package/dist/eval/runner.js +172 -0
  38. package/dist/eval/runner.js.map +1 -0
  39. package/dist/eval/types.d.ts +243 -0
  40. package/dist/eval/types.d.ts.map +1 -0
  41. package/dist/eval/types.js +31 -0
  42. package/dist/eval/types.js.map +1 -0
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +17 -0
  45. package/dist/index.js.map +1 -1
  46. package/dist/templates/.gitignore.tmpl +4 -0
  47. package/package.json +2 -1
@@ -3,7 +3,7 @@ import inquirer from "inquirer";
3
3
  import open from "open";
4
4
  import ora from "ora";
5
5
  import { resolveContext } from "../api/context.js";
6
- import { loadCredentials, saveCredentials } from "../api/credentials.js";
6
+ import { clearCredentials, loadCredentials, saveCredentials, } from "../api/credentials.js";
7
7
  function extractIdentity(payload) {
8
8
  if (!payload || typeof payload !== "object")
9
9
  return {};
@@ -36,40 +36,36 @@ function extractIdentity(payload) {
36
36
  return { email, name, userId, agentId };
37
37
  }
38
38
  async function validateToken(token, apiBaseUrl) {
39
- const endpoints = ["/auth/whoami", "/whoami", "/me"];
40
- for (const endpoint of endpoints) {
41
- try {
42
- const response = await fetch(`${apiBaseUrl}${endpoint}`, {
43
- headers: {
44
- Authorization: `Bearer ${token}`,
45
- "Content-Type": "application/json",
46
- "X-Lobu-Org": "default",
47
- },
48
- });
49
- if (response.status === 401 || response.status === 403) {
50
- return {
51
- status: "invalid",
52
- error: "Token was rejected by the API (unauthorized).",
53
- };
54
- }
55
- if (response.status === 404) {
56
- continue;
57
- }
58
- if (!response.ok) {
59
- continue;
60
- }
61
- const body = (await response.json().catch(() => ({})));
62
- const identity = extractIdentity(body);
63
- return { status: "valid", ...identity };
39
+ try {
40
+ const response = await fetch(`${apiBaseUrl}/auth/whoami`, {
41
+ headers: {
42
+ Authorization: `Bearer ${token}`,
43
+ "Content-Type": "application/json",
44
+ "X-Lobu-Org": "default",
45
+ },
46
+ });
47
+ if (response.status === 401 || response.status === 403) {
48
+ return {
49
+ status: "invalid",
50
+ error: "Token was rejected by the API (unauthorized).",
51
+ };
64
52
  }
65
- catch {
66
- // Try next endpoint.
53
+ if (!response.ok) {
54
+ return {
55
+ status: "unverified",
56
+ warning: "Could not validate token against API (non-200 response), but token was saved locally.",
57
+ };
67
58
  }
59
+ const body = (await response.json().catch(() => ({})));
60
+ const identity = extractIdentity(body);
61
+ return { status: "valid", ...identity };
62
+ }
63
+ catch {
64
+ return {
65
+ status: "unverified",
66
+ warning: "Could not reach API to validate token, but token was saved locally.",
67
+ };
68
68
  }
69
- return {
70
- status: "unverified",
71
- warning: "Could not validate token against API endpoints, but token was saved locally.",
72
- };
73
69
  }
74
70
  export async function loginCommand(options) {
75
71
  const target = await resolveContext(options.context);
@@ -77,18 +73,35 @@ export async function loginCommand(options) {
77
73
  console.log(chalk.red("\n Use either `--token` or `--admin-password`, not both.\n"));
78
74
  return;
79
75
  }
76
+ // Check existing session — block unless --force
77
+ const existing = await loadCredentials(target.name);
78
+ if (existing && !options.force) {
79
+ console.log(chalk.dim(`\n Already logged in to ${target.name} as ${existing.email ?? existing.name ?? "user"}.`));
80
+ console.log(chalk.dim(" Run `npx @lobu/cli logout` first, or use `--force` to re-authenticate.\n"));
81
+ return;
82
+ }
83
+ // Force: revoke existing session before proceeding
84
+ if (existing && options.force) {
85
+ if (existing.refreshToken) {
86
+ try {
87
+ await fetch(`${target.apiUrl}/auth/logout`, {
88
+ method: "POST",
89
+ headers: { "Content-Type": "application/json" },
90
+ body: JSON.stringify({ refreshToken: existing.refreshToken }),
91
+ });
92
+ }
93
+ catch {
94
+ // Best-effort revocation
95
+ }
96
+ }
97
+ await clearCredentials(target.name);
98
+ }
80
99
  if (options.token) {
81
100
  const token = options.token.trim();
82
101
  if (!token) {
83
102
  console.log(chalk.red("\n Token cannot be empty.\n"));
84
103
  return;
85
104
  }
86
- const existing = await loadCredentials(target.name);
87
- if (existing) {
88
- console.log(chalk.dim(`\n Already logged in to ${target.name} as ${existing.email ?? "user"}.`));
89
- console.log(chalk.dim(" Run `npx @lobu/cli logout` first to switch accounts.\n"));
90
- return;
91
- }
92
105
  const validation = await validateToken(token, target.apiUrl);
93
106
  if (validation.status === "invalid") {
94
107
  console.log(chalk.red(`\n ${validation.error}`));
@@ -112,12 +125,6 @@ export async function loginCommand(options) {
112
125
  return;
113
126
  }
114
127
  if (options.adminPassword) {
115
- const existing = await loadCredentials(target.name);
116
- if (existing) {
117
- console.log(chalk.dim(`\n Already logged in to ${target.name} as ${existing.email ?? existing.name ?? "user"}.`));
118
- console.log(chalk.dim(" Run `npx @lobu/cli logout` first to switch accounts.\n"));
119
- return;
120
- }
121
128
  const answers = await inquirer.prompt([
122
129
  {
123
130
  type: "password",
@@ -164,12 +171,6 @@ export async function loginCommand(options) {
164
171
  console.log(chalk.yellow(`\n Logged in to ${target.name} using the development admin password fallback.\n`));
165
172
  return;
166
173
  }
167
- const existing = await loadCredentials(target.name);
168
- if (existing) {
169
- console.log(chalk.dim(`\n Already logged in to ${target.name} as ${existing.email ?? "user"}.`));
170
- console.log(chalk.dim(" Run `npx @lobu/cli logout` first to switch accounts.\n"));
171
- return;
172
- }
173
174
  console.log(chalk.bold.cyan("\n Lobu Cloud is in early access.\n"));
174
175
  console.log(chalk.dim(` Context: ${target.name}`));
175
176
  console.log(chalk.dim(` API URL: ${target.apiUrl}`));
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAIA,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhB"}
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAIA,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhB"}
@@ -1,8 +1,22 @@
1
1
  import chalk from "chalk";
2
2
  import { resolveContext } from "../api/context.js";
3
- import { clearCredentials } from "../api/credentials.js";
3
+ import { clearCredentials, loadCredentials } from "../api/credentials.js";
4
4
  export async function logoutCommand(options) {
5
5
  const target = await resolveContext(options?.context);
6
+ const creds = await loadCredentials(target.name);
7
+ // Revoke session server-side if we have a refresh token
8
+ if (creds?.refreshToken) {
9
+ try {
10
+ await fetch(`${target.apiUrl}/auth/logout`, {
11
+ method: "POST",
12
+ headers: { "Content-Type": "application/json" },
13
+ body: JSON.stringify({ refreshToken: creds.refreshToken }),
14
+ });
15
+ }
16
+ catch {
17
+ // Best-effort — clear local creds regardless
18
+ }
19
+ }
6
20
  await clearCredentials(target.name);
7
21
  console.log(chalk.dim(`\n Logged out of ${target.name}.\n`));
8
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAEnC;IACC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;AAChE,CAAC"}
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE1E,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAEnC;IACC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEjD,wDAAwD;IACxD,IAAI,KAAK,EAAE,YAAY,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,cAAc,EAAE;gBAC1C,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;aAC3D,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,6CAA6C;QAC/C,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Lobu API client for eval runner.
3
+ * Extracted from chat.ts patterns — collects responses into buffers instead of streaming to stdout.
4
+ */
5
+ interface Session {
6
+ agentId: string;
7
+ token: string;
8
+ base: string;
9
+ }
10
+ export interface CollectedResponse {
11
+ text: string;
12
+ latencyMs: number;
13
+ error?: string;
14
+ tokens?: {
15
+ inputTokens?: number;
16
+ outputTokens?: number;
17
+ totalTokens?: number;
18
+ };
19
+ traceId?: string;
20
+ }
21
+ export declare function createSession(gatewayUrl: string, authToken: string, opts?: {
22
+ agentId?: string;
23
+ forceNew?: boolean;
24
+ dryRun?: boolean;
25
+ provider?: string;
26
+ model?: string;
27
+ }): Promise<Session>;
28
+ export declare function sendMessage(session: Session, content: string): Promise<{
29
+ traceId?: string;
30
+ }>;
31
+ /**
32
+ * Connect to SSE stream and collect the full response text.
33
+ * Accumulates 'output' deltas until 'complete' event.
34
+ */
35
+ export declare function collectResponse(session: Session, timeoutMs: number): Promise<CollectedResponse>;
36
+ export declare function deleteSession(session: Session): Promise<void>;
37
+ /**
38
+ * Send a message and collect the full response in one call.
39
+ */
40
+ export declare function sendAndCollect(session: Session, content: string, timeoutMs: number): Promise<CollectedResponse>;
41
+ export {};
42
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/eval/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,UAAU,OAAO;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;IACL,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,OAAO,CAAC,CA6BlB;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB/B;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,iBAAiB,CAAC,CA+E5B;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,iBAAiB,CAAC,CAO5B"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Lobu API client for eval runner.
3
+ * Extracted from chat.ts patterns — collects responses into buffers instead of streaming to stdout.
4
+ */
5
+ export async function createSession(gatewayUrl, authToken, opts) {
6
+ const body = {
7
+ forceNew: opts?.forceNew ?? true,
8
+ dryRun: opts?.dryRun ?? true,
9
+ };
10
+ if (opts?.agentId)
11
+ body.agentId = opts.agentId;
12
+ if (opts?.provider)
13
+ body.provider = opts.provider;
14
+ if (opts?.model)
15
+ body.model = opts.model;
16
+ const res = await fetch(`${gatewayUrl}/api/v1/agents`, {
17
+ method: "POST",
18
+ headers: {
19
+ "Content-Type": "application/json",
20
+ Authorization: `Bearer ${authToken}`,
21
+ },
22
+ body: JSON.stringify(body),
23
+ });
24
+ if (!res.ok) {
25
+ const text = await res.text().catch(() => "");
26
+ throw new Error(`Failed to create session (${res.status}): ${text}`);
27
+ }
28
+ const data = (await res.json());
29
+ return {
30
+ agentId: data.agentId,
31
+ token: data.token,
32
+ base: `${gatewayUrl}/api/v1/agents/${data.agentId}`,
33
+ };
34
+ }
35
+ export async function sendMessage(session, content) {
36
+ const res = await fetch(`${session.base}/messages`, {
37
+ method: "POST",
38
+ headers: {
39
+ "Content-Type": "application/json",
40
+ Authorization: `Bearer ${session.token}`,
41
+ },
42
+ body: JSON.stringify({ content }),
43
+ });
44
+ if (!res.ok) {
45
+ const text = await res.text().catch(() => "");
46
+ throw new Error(`Failed to send message (${res.status}): ${text}`);
47
+ }
48
+ const data = (await res.json());
49
+ // Extract trace ID from W3C traceparent: "00-{traceId}-{spanId}-01"
50
+ const traceId = data.traceparent?.split("-")[1];
51
+ return { traceId };
52
+ }
53
+ /**
54
+ * Connect to SSE stream and collect the full response text.
55
+ * Accumulates 'output' deltas until 'complete' event.
56
+ */
57
+ export async function collectResponse(session, timeoutMs) {
58
+ const controller = new AbortController();
59
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
60
+ const start = Date.now();
61
+ try {
62
+ const res = await fetch(`${session.base}/events`, {
63
+ headers: { Authorization: `Bearer ${session.token}` },
64
+ signal: controller.signal,
65
+ });
66
+ if (!res.ok || !res.body) {
67
+ throw new Error(`SSE connection failed (${res.status})`);
68
+ }
69
+ const reader = res.body.getReader();
70
+ const decoder = new TextDecoder();
71
+ let buffer = "";
72
+ let currentEvent = "";
73
+ let text = "";
74
+ while (true) {
75
+ const { done, value } = await reader.read();
76
+ if (done)
77
+ break;
78
+ buffer += decoder.decode(value, { stream: true });
79
+ const lines = buffer.split("\n");
80
+ buffer = lines.pop() ?? "";
81
+ for (const line of lines) {
82
+ if (line.startsWith("event: ")) {
83
+ currentEvent = line.slice(7).trim();
84
+ }
85
+ else if (line.startsWith("data: ") && currentEvent) {
86
+ const data = parseJSON(line.slice(6));
87
+ if (!data)
88
+ continue;
89
+ switch (currentEvent) {
90
+ case "output":
91
+ if (typeof data.content === "string")
92
+ text += data.content;
93
+ break;
94
+ case "complete": {
95
+ const usage = data.usage;
96
+ return {
97
+ text,
98
+ latencyMs: Date.now() - start,
99
+ tokens: usage
100
+ ? {
101
+ inputTokens: usage.input_tokens ?? usage.inputTokens,
102
+ outputTokens: usage.output_tokens ?? usage.outputTokens,
103
+ totalTokens: (usage.input_tokens ?? usage.inputTokens ?? 0) +
104
+ (usage.output_tokens ?? usage.outputTokens ?? 0),
105
+ }
106
+ : undefined,
107
+ };
108
+ }
109
+ case "error":
110
+ return {
111
+ text,
112
+ latencyMs: Date.now() - start,
113
+ error: String(data.error ?? "Unknown error"),
114
+ };
115
+ }
116
+ currentEvent = "";
117
+ }
118
+ else if (line === "") {
119
+ currentEvent = "";
120
+ }
121
+ }
122
+ }
123
+ return { text, latencyMs: Date.now() - start };
124
+ }
125
+ catch (err) {
126
+ if (err instanceof Error && err.name === "AbortError") {
127
+ return { text: "", latencyMs: Date.now() - start, error: "Timeout" };
128
+ }
129
+ throw err;
130
+ }
131
+ finally {
132
+ clearTimeout(timer);
133
+ }
134
+ }
135
+ export async function deleteSession(session) {
136
+ await fetch(`${session.base}`, {
137
+ method: "DELETE",
138
+ headers: { Authorization: `Bearer ${session.token}` },
139
+ }).catch(() => {
140
+ // Best-effort cleanup — ignore failures
141
+ });
142
+ }
143
+ /**
144
+ * Send a message and collect the full response in one call.
145
+ */
146
+ export async function sendAndCollect(session, content, timeoutMs) {
147
+ // Start SSE collection first, then send message
148
+ const collecting = collectResponse(session, timeoutMs);
149
+ const { traceId } = await sendMessage(session, content);
150
+ const response = await collecting;
151
+ response.traceId = traceId;
152
+ return response;
153
+ }
154
+ function parseJSON(str) {
155
+ try {
156
+ const parsed = JSON.parse(str);
157
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
158
+ return parsed;
159
+ }
160
+ return null;
161
+ }
162
+ catch {
163
+ return null;
164
+ }
165
+ }
166
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/eval/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * LLM-as-judge grader using the Lobu gateway.
3
+ *
4
+ * Borrows the Claude outcomes pattern: a separate evaluator context
5
+ * grades agent output against a markdown rubric with per-criterion scoring.
6
+ */
7
+ import type { RubricResult, TurnResult } from "./types.js";
8
+ export declare function gradeWithRubric(gatewayUrl: string, authToken: string, rubricContent: string, turns: TurnResult[], timeoutMs: number): Promise<RubricResult>;
9
+ export declare function gradeInline(gatewayUrl: string, authToken: string, criteria: string, agentResponse: string, timeoutMs: number): Promise<{
10
+ passed: boolean;
11
+ score: number;
12
+ reason: string;
13
+ }>;
14
+ //# sourceMappingURL=grader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grader.d.ts","sourceRoot":"","sources":["../../src/eval/grader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAmC3D,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,UAAU,EAAE,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC,CAqBvB;AAED,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAiB7D"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * LLM-as-judge grader using the Lobu gateway.
3
+ *
4
+ * Borrows the Claude outcomes pattern: a separate evaluator context
5
+ * grades agent output against a markdown rubric with per-criterion scoring.
6
+ */
7
+ import { createSession, deleteSession, sendAndCollect, } from "./client.js";
8
+ const INLINE_JUDGE_PROMPT = `You are a strict evaluator. You will be given an AI agent's response and a criteria to judge it against.
9
+
10
+ You MUST respond with ONLY a JSON object, no other text:
11
+ {"passed": true, "score": 0.85, "reason": "one sentence explanation"}
12
+
13
+ Rules:
14
+ - "passed": true if the response meets the criteria, false otherwise
15
+ - "score": a number between 0.0 and 1.0
16
+ - "reason": a brief explanation (one sentence)
17
+ - Return ONLY the JSON object, nothing else
18
+
19
+ ## Criteria
20
+ {{criteria}}
21
+
22
+ ## Agent Response
23
+ {{response}}`;
24
+ const RUBRIC_JUDGE_PROMPT = `You are a strict evaluator. Grade the agent's conversation against each criterion in the rubric.
25
+
26
+ You MUST respond with ONLY a JSON object, no other text:
27
+ {"criteria": [{"name": "criterion name", "passed": true, "explanation": "why"}], "score": 0.85}
28
+
29
+ Rules:
30
+ - Score each criterion independently
31
+ - "score" is the overall score 0.0-1.0
32
+ - Return ONLY the JSON object, nothing else
33
+
34
+ ## Rubric
35
+ {{rubric}}
36
+
37
+ ## Conversation
38
+ {{transcript}}`;
39
+ export async function gradeWithRubric(gatewayUrl, authToken, rubricContent, turns, timeoutMs) {
40
+ const transcript = turns
41
+ .map((t) => `User: ${t.user}\nAgent: ${t.agent}`)
42
+ .join("\n\n");
43
+ const prompt = RUBRIC_JUDGE_PROMPT.replace("{{rubric}}", rubricContent).replace("{{transcript}}", transcript);
44
+ const session = await createSession(gatewayUrl, authToken, {
45
+ forceNew: true,
46
+ dryRun: true,
47
+ });
48
+ try {
49
+ const response = await sendAndCollect(session, prompt, timeoutMs);
50
+ return parseGraderResponse(response);
51
+ }
52
+ finally {
53
+ await deleteSession(session);
54
+ }
55
+ }
56
+ export async function gradeInline(gatewayUrl, authToken, criteria, agentResponse, timeoutMs) {
57
+ const prompt = INLINE_JUDGE_PROMPT.replace("{{criteria}}", criteria).replace("{{response}}", agentResponse);
58
+ const session = await createSession(gatewayUrl, authToken, {
59
+ forceNew: true,
60
+ dryRun: true,
61
+ });
62
+ try {
63
+ const response = await sendAndCollect(session, prompt, timeoutMs);
64
+ return parseInlineResponse(response);
65
+ }
66
+ finally {
67
+ await deleteSession(session);
68
+ }
69
+ }
70
+ function parseGraderResponse(response) {
71
+ if (response.error) {
72
+ return {
73
+ score: 0,
74
+ criteria: [{ name: "error", passed: false, explanation: response.error }],
75
+ };
76
+ }
77
+ try {
78
+ const json = extractJSON(response.text);
79
+ const parsed = JSON.parse(json);
80
+ return {
81
+ score: typeof parsed.score === "number" ? parsed.score : 0,
82
+ criteria: Array.isArray(parsed.criteria)
83
+ ? parsed.criteria.map((c) => ({
84
+ name: String(c.name ?? ""),
85
+ passed: Boolean(c.passed),
86
+ explanation: String(c.explanation ?? ""),
87
+ }))
88
+ : [],
89
+ };
90
+ }
91
+ catch {
92
+ // Fallback: try to infer from prose response
93
+ return inferRubricFromText(response.text);
94
+ }
95
+ }
96
+ function parseInlineResponse(response) {
97
+ if (response.error) {
98
+ return { passed: false, score: 0, reason: response.error };
99
+ }
100
+ try {
101
+ const json = extractJSON(response.text);
102
+ const parsed = JSON.parse(json);
103
+ return {
104
+ passed: Boolean(parsed.passed),
105
+ score: typeof parsed.score === "number" ? parsed.score : parsed.passed ? 1 : 0,
106
+ reason: String(parsed.reason ?? ""),
107
+ };
108
+ }
109
+ catch {
110
+ // Fallback: infer pass/fail from prose
111
+ return inferInlineFromText(response.text);
112
+ }
113
+ }
114
+ /** Extract JSON from text that may contain markdown fences or surrounding prose. */
115
+ function extractJSON(text) {
116
+ // Try to find JSON in markdown code block
117
+ const fenced = text.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);
118
+ if (fenced?.[1])
119
+ return fenced[1].trim();
120
+ // Try to find raw JSON object
121
+ const braceMatch = text.match(/\{[\s\S]*\}/);
122
+ if (braceMatch)
123
+ return braceMatch[0];
124
+ return text.trim();
125
+ }
126
+ /** Fallback: infer pass/fail from prose when JSON parsing fails. */
127
+ function inferInlineFromText(text) {
128
+ const lower = text.toLowerCase();
129
+ const positiveSignals = [
130
+ "yes",
131
+ "pass",
132
+ "meets",
133
+ "satisfies",
134
+ "correct",
135
+ "appropriate",
136
+ "good",
137
+ "well",
138
+ ];
139
+ const negativeSignals = [
140
+ "no",
141
+ "fail",
142
+ "does not",
143
+ "doesn't",
144
+ "incorrect",
145
+ "missing",
146
+ "lacks",
147
+ "poor",
148
+ ];
149
+ const posCount = positiveSignals.filter((s) => lower.includes(s)).length;
150
+ const negCount = negativeSignals.filter((s) => lower.includes(s)).length;
151
+ const passed = posCount > negCount;
152
+ return {
153
+ passed,
154
+ score: passed ? 0.7 : 0.3,
155
+ reason: `Inferred from prose (pos=${posCount}, neg=${negCount}): ${text.slice(0, 100)}`,
156
+ };
157
+ }
158
+ /** Fallback: infer rubric result from prose when JSON parsing fails. */
159
+ function inferRubricFromText(text) {
160
+ const lower = text.toLowerCase();
161
+ const positiveSignals = ["pass", "meets", "satisfies", "good", "correct"];
162
+ const negativeSignals = ["fail", "does not", "doesn't", "missing", "poor"];
163
+ const posCount = positiveSignals.filter((s) => lower.includes(s)).length;
164
+ const negCount = negativeSignals.filter((s) => lower.includes(s)).length;
165
+ const passed = posCount > negCount;
166
+ return {
167
+ score: passed ? 0.7 : 0.3,
168
+ criteria: [
169
+ {
170
+ name: "overall",
171
+ passed,
172
+ explanation: `Inferred from prose: ${text.slice(0, 200)}`,
173
+ },
174
+ ],
175
+ };
176
+ }
177
+ //# sourceMappingURL=grader.js.map