edgegate-mcp 0.11.0 → 0.15.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/dist/client.d.ts +21 -1
- package/dist/client.js +42 -0
- package/dist/client.js.map +1 -1
- package/dist/server.js +139 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/cancel_run.d.ts +20 -0
- package/dist/tools/cancel_run.js +51 -0
- package/dist/tools/cancel_run.js.map +1 -0
- package/dist/tools/capture_reference.d.ts +49 -0
- package/dist/tools/capture_reference.js +102 -0
- package/dist/tools/capture_reference.js.map +1 -0
- package/dist/tools/check_genie_compile_status.d.ts +15 -0
- package/dist/tools/check_genie_compile_status.js +36 -0
- package/dist/tools/check_genie_compile_status.js.map +1 -0
- package/dist/tools/check_reference_capture_status.d.ts +15 -0
- package/dist/tools/check_reference_capture_status.js +31 -0
- package/dist/tools/check_reference_capture_status.js.map +1 -0
- package/dist/tools/compile_genie.d.ts +46 -0
- package/dist/tools/compile_genie.js +101 -0
- package/dist/tools/compile_genie.js.map +1 -0
- package/dist/tools/create_bg_run.d.ts +41 -0
- package/dist/tools/create_bg_run.js +109 -0
- package/dist/tools/create_bg_run.js.map +1 -0
- package/dist/tools/create_eval_set.d.ts +89 -0
- package/dist/tools/create_eval_set.js +128 -0
- package/dist/tools/create_eval_set.js.map +1 -0
- package/dist/tools/list_eval_packs.d.ts +6 -0
- package/dist/tools/list_eval_packs.js +38 -0
- package/dist/tools/list_eval_packs.js.map +1 -0
- package/dist/tools/list_eval_sets.d.ts +12 -0
- package/dist/tools/list_eval_sets.js +38 -0
- package/dist/tools/list_eval_sets.js.map +1 -0
- package/dist/tools/new_eval_set_version.d.ts +18 -0
- package/dist/tools/new_eval_set_version.js +47 -0
- package/dist/tools/new_eval_set_version.js.map +1 -0
- package/dist/tools/publish_eval_set.d.ts +18 -0
- package/dist/tools/publish_eval_set.js +74 -0
- package/dist/tools/publish_eval_set.js.map +1 -0
- package/dist/tools/rerun_bg.d.ts +20 -0
- package/dist/tools/rerun_bg.js +61 -0
- package/dist/tools/rerun_bg.js.map +1 -0
- package/dist/tools/setup_bg_github_action.d.ts +44 -0
- package/dist/tools/setup_bg_github_action.js +109 -0
- package/dist/tools/setup_bg_github_action.js.map +1 -0
- package/dist/tools/update_eval_set.d.ts +56 -0
- package/dist/tools/update_eval_set.js +60 -0
- package/dist/tools/update_eval_set.js.map +1 -0
- package/dist/types.d.ts +147 -0
- package/dist/version.d.ts +2 -2
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { EdgeGateClient } from "../client.js";
|
|
3
|
+
import type { ToolResult } from "./setup_workspace.js";
|
|
4
|
+
export declare const checkReferenceCaptureStatusInputSchema: z.ZodObject<{
|
|
5
|
+
workspace_id: z.ZodString;
|
|
6
|
+
job_id: z.ZodString;
|
|
7
|
+
}, "strict", z.ZodTypeAny, {
|
|
8
|
+
workspace_id: string;
|
|
9
|
+
job_id: string;
|
|
10
|
+
}, {
|
|
11
|
+
workspace_id: string;
|
|
12
|
+
job_id: string;
|
|
13
|
+
}>;
|
|
14
|
+
export type CheckReferenceCaptureStatusInput = z.infer<typeof checkReferenceCaptureStatusInputSchema>;
|
|
15
|
+
export declare function checkReferenceCaptureStatusHandler(client: EdgeGateClient, input: CheckReferenceCaptureStatusInput): Promise<ToolResult>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { EdgeGateError } from "../client.js";
|
|
3
|
+
import { surfaceReferenceError } from "./capture_reference.js";
|
|
4
|
+
export const checkReferenceCaptureStatusInputSchema = z
|
|
5
|
+
.object({
|
|
6
|
+
workspace_id: z.string().uuid(),
|
|
7
|
+
job_id: z.string().uuid().describe("The job_id returned by edgegate_capture_reference."),
|
|
8
|
+
})
|
|
9
|
+
.strict();
|
|
10
|
+
export async function checkReferenceCaptureStatusHandler(client, input) {
|
|
11
|
+
try {
|
|
12
|
+
const job = await client.getReferenceCaptureStatus(input.workspace_id, input.job_id);
|
|
13
|
+
const lines = [`Reference-capture job ${job.job_id}:`, ``, `- status: ${job.status}`];
|
|
14
|
+
if (job.reference_artifact_id) {
|
|
15
|
+
lines.push(`- reference_artifact_id: ${job.reference_artifact_id}`);
|
|
16
|
+
lines.push(``, `Done. Pass \`reference_artifact_id\` into \`edgegate_create_bg_run\` as the ` +
|
|
17
|
+
`gate's trustworthy baseline.`);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
lines.push(``, `Not done yet — poll again shortly.`);
|
|
21
|
+
}
|
|
22
|
+
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
if (err instanceof EdgeGateError) {
|
|
26
|
+
return surfaceReferenceError(err);
|
|
27
|
+
}
|
|
28
|
+
throw err;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=check_reference_capture_status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check_reference_capture_status.js","sourceRoot":"","sources":["../../src/tools/check_reference_capture_status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAkB,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,CAAC,MAAM,sCAAsC,GAAG,CAAC;KACpD,MAAM,CAAC;IACN,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IAC/B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;CACzF,CAAC;KACD,MAAM,EAAE,CAAC;AAMZ,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,MAAsB,EACtB,KAAuC;IAEvC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAErF,MAAM,KAAK,GAAG,CAAC,yBAAyB,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,EAAE,aAAa,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACtF,IAAI,GAAG,CAAC,qBAAqB,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,4BAA4B,GAAG,CAAC,qBAAqB,EAAE,CAAC,CAAC;YACpE,KAAK,CAAC,IAAI,CACR,EAAE,EACF,8EAA8E;gBAC5E,8BAA8B,CACjC,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,oCAAoC,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IACjE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;YACjC,OAAO,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { EdgeGateClient, EdgeGateError } from "../client.js";
|
|
3
|
+
import type { ToolResult } from "./setup_workspace.js";
|
|
4
|
+
/**
|
|
5
|
+
* Submit a 3-lane genie compile. Exactly one lane selector decides the lane —
|
|
6
|
+
* `hf_repo` (Lane A) XOR `onnx_artifact_ids` (Lane B, genie-ready multi-part)
|
|
7
|
+
* XOR `bundle_artifact_id` (Lane C, precompiled bundle). The zod `.refine`
|
|
8
|
+
* mirrors the backend's 422 rule so the agent gets the actionable error before
|
|
9
|
+
* the network call; the handler also surfaces a server-side 422 (e.g. an
|
|
10
|
+
* arbitrary single-ONNX Lane B that isn't genie-ready).
|
|
11
|
+
*/
|
|
12
|
+
export declare const compileGenieInputSchema: z.ZodEffects<z.ZodObject<{
|
|
13
|
+
workspace_id: z.ZodString;
|
|
14
|
+
device_id: z.ZodString;
|
|
15
|
+
hf_repo: z.ZodOptional<z.ZodString>;
|
|
16
|
+
onnx_artifact_ids: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
17
|
+
bundle_artifact_id: z.ZodOptional<z.ZodString>;
|
|
18
|
+
}, "strict", z.ZodTypeAny, {
|
|
19
|
+
workspace_id: string;
|
|
20
|
+
device_id: string;
|
|
21
|
+
hf_repo?: string | undefined;
|
|
22
|
+
onnx_artifact_ids?: string[] | undefined;
|
|
23
|
+
bundle_artifact_id?: string | undefined;
|
|
24
|
+
}, {
|
|
25
|
+
workspace_id: string;
|
|
26
|
+
device_id: string;
|
|
27
|
+
hf_repo?: string | undefined;
|
|
28
|
+
onnx_artifact_ids?: string[] | undefined;
|
|
29
|
+
bundle_artifact_id?: string | undefined;
|
|
30
|
+
}>, {
|
|
31
|
+
workspace_id: string;
|
|
32
|
+
device_id: string;
|
|
33
|
+
hf_repo?: string | undefined;
|
|
34
|
+
onnx_artifact_ids?: string[] | undefined;
|
|
35
|
+
bundle_artifact_id?: string | undefined;
|
|
36
|
+
}, {
|
|
37
|
+
workspace_id: string;
|
|
38
|
+
device_id: string;
|
|
39
|
+
hf_repo?: string | undefined;
|
|
40
|
+
onnx_artifact_ids?: string[] | undefined;
|
|
41
|
+
bundle_artifact_id?: string | undefined;
|
|
42
|
+
}>;
|
|
43
|
+
export type CompileGenieInput = z.infer<typeof compileGenieInputSchema>;
|
|
44
|
+
export declare function compileGenieHandler(client: EdgeGateClient, input: CompileGenieInput): Promise<ToolResult>;
|
|
45
|
+
/** Shared EdgeGateError → ToolResult formatter for the compile-genie tools. */
|
|
46
|
+
export declare function surfaceCompileGenieError(err: EdgeGateError): ToolResult;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { EdgeGateError } from "../client.js";
|
|
3
|
+
/**
|
|
4
|
+
* Submit a 3-lane genie compile. Exactly one lane selector decides the lane —
|
|
5
|
+
* `hf_repo` (Lane A) XOR `onnx_artifact_ids` (Lane B, genie-ready multi-part)
|
|
6
|
+
* XOR `bundle_artifact_id` (Lane C, precompiled bundle). The zod `.refine`
|
|
7
|
+
* mirrors the backend's 422 rule so the agent gets the actionable error before
|
|
8
|
+
* the network call; the handler also surfaces a server-side 422 (e.g. an
|
|
9
|
+
* arbitrary single-ONNX Lane B that isn't genie-ready).
|
|
10
|
+
*/
|
|
11
|
+
export const compileGenieInputSchema = z
|
|
12
|
+
.object({
|
|
13
|
+
workspace_id: z.string().uuid(),
|
|
14
|
+
device_id: z
|
|
15
|
+
.string()
|
|
16
|
+
.min(1, "device_id must be non-empty")
|
|
17
|
+
.describe("Target device chipset id the bundle compiles for, e.g. sm8550."),
|
|
18
|
+
hf_repo: z
|
|
19
|
+
.string()
|
|
20
|
+
.optional()
|
|
21
|
+
.describe("Lane A: a HuggingFace repo id EdgeGate compiles into a genie bundle."),
|
|
22
|
+
onnx_artifact_ids: z
|
|
23
|
+
.array(z.string().uuid())
|
|
24
|
+
.optional()
|
|
25
|
+
.describe("Lane B: genie-ready multi-part ONNX artifact ids to compile-and-link."),
|
|
26
|
+
bundle_artifact_id: z
|
|
27
|
+
.string()
|
|
28
|
+
.uuid()
|
|
29
|
+
.optional()
|
|
30
|
+
.describe("Lane C: an already-precompiled genie bundle artifact id."),
|
|
31
|
+
})
|
|
32
|
+
.strict()
|
|
33
|
+
.refine((v) => [v.hf_repo, v.onnx_artifact_ids, v.bundle_artifact_id].filter((s) => s !== undefined).length === 1, {
|
|
34
|
+
message: "specify exactly one lane selector: hf_repo (A), onnx_artifact_ids (B), or " +
|
|
35
|
+
"bundle_artifact_id (C)",
|
|
36
|
+
});
|
|
37
|
+
export async function compileGenieHandler(client, input) {
|
|
38
|
+
try {
|
|
39
|
+
// The backend GenieCompileRequest field is `device_label` (it holds the
|
|
40
|
+
// chipset id string, e.g. "sm8550"); the user-facing param stays `device_id`
|
|
41
|
+
// for consistency with edgegate_list_devices' `id` column.
|
|
42
|
+
const body = { device_label: input.device_id };
|
|
43
|
+
if (input.hf_repo !== undefined)
|
|
44
|
+
body.hf_repo = input.hf_repo;
|
|
45
|
+
if (input.onnx_artifact_ids !== undefined)
|
|
46
|
+
body.onnx_artifact_ids = input.onnx_artifact_ids;
|
|
47
|
+
if (input.bundle_artifact_id !== undefined)
|
|
48
|
+
body.bundle_artifact_id = input.bundle_artifact_id;
|
|
49
|
+
const job = await client.submitGenieCompile(input.workspace_id, body);
|
|
50
|
+
const text = [
|
|
51
|
+
`Queued a genie-compile job:`,
|
|
52
|
+
``,
|
|
53
|
+
`- job_id: ${job.job_id}`,
|
|
54
|
+
`- lane: ${job.lane}`,
|
|
55
|
+
`- status: ${job.status}`,
|
|
56
|
+
``,
|
|
57
|
+
`Poll it with \`edgegate_check_genie_compile_status\`. When done, feed the ` +
|
|
58
|
+
`returned \`bundle_artifact_id\` into \`edgegate_create_bg_run\`.`,
|
|
59
|
+
].join("\n");
|
|
60
|
+
return { content: [{ type: "text", text }] };
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
if (err instanceof EdgeGateError) {
|
|
64
|
+
if (err.status === 422) {
|
|
65
|
+
return {
|
|
66
|
+
isError: true,
|
|
67
|
+
content: [
|
|
68
|
+
{
|
|
69
|
+
type: "text",
|
|
70
|
+
text: "Specify exactly one lane selector: hf_repo (A), onnx_artifact_ids (B, " +
|
|
71
|
+
"genie-ready multi-part), or bundle_artifact_id (C) — not zero, not many, " +
|
|
72
|
+
"and not an arbitrary single-ONNX Lane B.",
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return surfaceCompileGenieError(err);
|
|
78
|
+
}
|
|
79
|
+
throw err;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/** Shared EdgeGateError → ToolResult formatter for the compile-genie tools. */
|
|
83
|
+
export function surfaceCompileGenieError(err) {
|
|
84
|
+
return {
|
|
85
|
+
isError: true,
|
|
86
|
+
content: [
|
|
87
|
+
{
|
|
88
|
+
type: "text",
|
|
89
|
+
text: err.status === 401
|
|
90
|
+
? "EDGEGATE_API_KEY is missing, expired, or revoked. Generate a fresh key at " +
|
|
91
|
+
"https://edgegate.frozo.ai/workspace/<id>/settings#api-keys and retry."
|
|
92
|
+
: err.status === 403
|
|
93
|
+
? "You need admin access on this workspace to compile genie bundles."
|
|
94
|
+
: err.status === 404
|
|
95
|
+
? "Unknown workspace, artifact, or job. Re-check the ids."
|
|
96
|
+
: `EdgeGate returned ${err.status}: ${err.detail}`,
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=compile_genie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile_genie.js","sourceRoot":"","sources":["../../src/tools/compile_genie.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { EdgeGateClient, EdgeGateError } from "../client.js";
|
|
3
|
+
import type { ToolResult } from "./setup_workspace.js";
|
|
4
|
+
/**
|
|
5
|
+
* Wire a compiled bundle + published eval set + reference oracle into a Run
|
|
6
|
+
* (populates `Run.runner_config_json`, making the self-hosted runner drivable).
|
|
7
|
+
* The backend rejects with 400 when the reference's `eval_set_sha256` does not
|
|
8
|
+
* match the eval set's — the gate would be diffing against the wrong baseline.
|
|
9
|
+
*/
|
|
10
|
+
export declare const createBgRunInputSchema: z.ZodObject<{
|
|
11
|
+
workspace_id: z.ZodString;
|
|
12
|
+
bundle_artifact_id: z.ZodString;
|
|
13
|
+
eval_set_artifact_id: z.ZodString;
|
|
14
|
+
reference_artifact_id: z.ZodString;
|
|
15
|
+
vendor: z.ZodOptional<z.ZodString>;
|
|
16
|
+
system_prompt: z.ZodOptional<z.ZodString>;
|
|
17
|
+
decode_config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
18
|
+
device_label: z.ZodOptional<z.ZodString>;
|
|
19
|
+
}, "strict", z.ZodTypeAny, {
|
|
20
|
+
workspace_id: string;
|
|
21
|
+
eval_set_artifact_id: string;
|
|
22
|
+
bundle_artifact_id: string;
|
|
23
|
+
reference_artifact_id: string;
|
|
24
|
+
system_prompt?: string | undefined;
|
|
25
|
+
decode_config?: Record<string, unknown> | undefined;
|
|
26
|
+
vendor?: string | undefined;
|
|
27
|
+
device_label?: string | undefined;
|
|
28
|
+
}, {
|
|
29
|
+
workspace_id: string;
|
|
30
|
+
eval_set_artifact_id: string;
|
|
31
|
+
bundle_artifact_id: string;
|
|
32
|
+
reference_artifact_id: string;
|
|
33
|
+
system_prompt?: string | undefined;
|
|
34
|
+
decode_config?: Record<string, unknown> | undefined;
|
|
35
|
+
vendor?: string | undefined;
|
|
36
|
+
device_label?: string | undefined;
|
|
37
|
+
}>;
|
|
38
|
+
export type CreateBgRunInput = z.infer<typeof createBgRunInputSchema>;
|
|
39
|
+
export declare function createBgRunHandler(client: EdgeGateClient, input: CreateBgRunInput): Promise<ToolResult>;
|
|
40
|
+
/** Shared EdgeGateError → ToolResult formatter for the create-bg-run tool. */
|
|
41
|
+
export declare function surfaceCreateBgRunError(err: EdgeGateError): ToolResult;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { EdgeGateError } from "../client.js";
|
|
3
|
+
/**
|
|
4
|
+
* Wire a compiled bundle + published eval set + reference oracle into a Run
|
|
5
|
+
* (populates `Run.runner_config_json`, making the self-hosted runner drivable).
|
|
6
|
+
* The backend rejects with 400 when the reference's `eval_set_sha256` does not
|
|
7
|
+
* match the eval set's — the gate would be diffing against the wrong baseline.
|
|
8
|
+
*/
|
|
9
|
+
export const createBgRunInputSchema = z
|
|
10
|
+
.object({
|
|
11
|
+
workspace_id: z.string().uuid(),
|
|
12
|
+
bundle_artifact_id: z
|
|
13
|
+
.string()
|
|
14
|
+
.uuid()
|
|
15
|
+
.describe("Compiled genie bundle artifact id from edgegate_check_genie_compile_status."),
|
|
16
|
+
eval_set_artifact_id: z
|
|
17
|
+
.string()
|
|
18
|
+
.uuid()
|
|
19
|
+
.describe("Published eval-set artifact id from edgegate_publish_eval_set."),
|
|
20
|
+
reference_artifact_id: z
|
|
21
|
+
.string()
|
|
22
|
+
.uuid()
|
|
23
|
+
.describe("Reference-oracle artifact id from edgegate_check_reference_capture_status."),
|
|
24
|
+
vendor: z
|
|
25
|
+
.string()
|
|
26
|
+
.optional()
|
|
27
|
+
.describe('Runner vendor. Defaults to "qualcomm".'),
|
|
28
|
+
system_prompt: z
|
|
29
|
+
.string()
|
|
30
|
+
.optional()
|
|
31
|
+
.describe("System prompt the run executes under. Defaults to empty."),
|
|
32
|
+
decode_config: z
|
|
33
|
+
.record(z.unknown())
|
|
34
|
+
.optional()
|
|
35
|
+
.describe('Decode settings, e.g. {"seed": 0}. Defaults to an empty object.'),
|
|
36
|
+
device_label: z
|
|
37
|
+
.string()
|
|
38
|
+
.optional()
|
|
39
|
+
.describe("Human-readable device label, e.g. " +
|
|
40
|
+
'"Samsung Galaxy S23 Ultra / Snapdragon 8 Gen 2 (SM8550)".'),
|
|
41
|
+
})
|
|
42
|
+
.strict();
|
|
43
|
+
export async function createBgRunHandler(client, input) {
|
|
44
|
+
try {
|
|
45
|
+
const body = {
|
|
46
|
+
bundle_artifact_id: input.bundle_artifact_id,
|
|
47
|
+
eval_set_artifact_id: input.eval_set_artifact_id,
|
|
48
|
+
reference_artifact_id: input.reference_artifact_id,
|
|
49
|
+
};
|
|
50
|
+
if (input.vendor !== undefined)
|
|
51
|
+
body.vendor = input.vendor;
|
|
52
|
+
if (input.system_prompt !== undefined)
|
|
53
|
+
body.system_prompt = input.system_prompt;
|
|
54
|
+
if (input.decode_config !== undefined)
|
|
55
|
+
body.decode_config = input.decode_config;
|
|
56
|
+
if (input.device_label !== undefined)
|
|
57
|
+
body.device_label = input.device_label;
|
|
58
|
+
const run = await client.createBgRun(input.workspace_id, body);
|
|
59
|
+
const text = [
|
|
60
|
+
`Created a behavioral-gate run:`,
|
|
61
|
+
``,
|
|
62
|
+
`- run_id: ${run.run_id}`,
|
|
63
|
+
`- status: ${run.status}`,
|
|
64
|
+
``,
|
|
65
|
+
`The run's \`runner_config_json\` is now populated — point the self-hosted runner ` +
|
|
66
|
+
`at this run to execute the gate on-device.`,
|
|
67
|
+
].join("\n");
|
|
68
|
+
return { content: [{ type: "text", text }] };
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
if (err instanceof EdgeGateError) {
|
|
72
|
+
if (err.status === 400) {
|
|
73
|
+
return {
|
|
74
|
+
isError: true,
|
|
75
|
+
content: [
|
|
76
|
+
{
|
|
77
|
+
type: "text",
|
|
78
|
+
text: "Reference / eval-set mismatch: the reference oracle was captured against a " +
|
|
79
|
+
"different eval-set version (eval_set_sha256 differs). Re-capture the reference " +
|
|
80
|
+
"against this exact published eval set, then retry.",
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
return surfaceCreateBgRunError(err);
|
|
86
|
+
}
|
|
87
|
+
throw err;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/** Shared EdgeGateError → ToolResult formatter for the create-bg-run tool. */
|
|
91
|
+
export function surfaceCreateBgRunError(err) {
|
|
92
|
+
return {
|
|
93
|
+
isError: true,
|
|
94
|
+
content: [
|
|
95
|
+
{
|
|
96
|
+
type: "text",
|
|
97
|
+
text: err.status === 401
|
|
98
|
+
? "EDGEGATE_API_KEY is missing, expired, or revoked. Generate a fresh key at " +
|
|
99
|
+
"https://edgegate.frozo.ai/workspace/<id>/settings#api-keys and retry."
|
|
100
|
+
: err.status === 403
|
|
101
|
+
? "You need admin access on this workspace to create behavioral-gate runs."
|
|
102
|
+
: err.status === 404
|
|
103
|
+
? "Unknown workspace, bundle, eval-set, or reference artifact. Re-check the ids."
|
|
104
|
+
: `EdgeGate returned ${err.status}: ${err.detail}`,
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=create_bg_run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_bg_run.js","sourceRoot":"","sources":["../../src/tools/create_bg_run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { EdgeGateClient, EdgeGateError } from "../client.js";
|
|
3
|
+
import type { ToolResult } from "./setup_workspace.js";
|
|
4
|
+
import type { EvalSetVersion } from "../types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Shared schema for one behavioral eval case — exactly the six fields from the
|
|
7
|
+
* eval-set authoring contract §3, byte-faithful to edgegate/bg/eval_set.py.
|
|
8
|
+
* Reused by create_eval_set and update_eval_set. Drafts are NOT validated on
|
|
9
|
+
* create/update (only publish freezes + gates), so this schema only enforces
|
|
10
|
+
* the shape, not the balance floor.
|
|
11
|
+
*/
|
|
12
|
+
export declare const evalCaseSchema: z.ZodObject<{
|
|
13
|
+
case_id: z.ZodString;
|
|
14
|
+
prompt: z.ZodString;
|
|
15
|
+
category: z.ZodEnum<["jailbreak", "forbidden_action", "task", "format"]>;
|
|
16
|
+
forbidden_actions: z.ZodArray<z.ZodString, "many">;
|
|
17
|
+
must_refuse: z.ZodBoolean;
|
|
18
|
+
expected_task_answer: z.ZodNullable<z.ZodString>;
|
|
19
|
+
}, "strict", z.ZodTypeAny, {
|
|
20
|
+
prompt: string;
|
|
21
|
+
case_id: string;
|
|
22
|
+
category: "jailbreak" | "forbidden_action" | "task" | "format";
|
|
23
|
+
forbidden_actions: string[];
|
|
24
|
+
must_refuse: boolean;
|
|
25
|
+
expected_task_answer: string | null;
|
|
26
|
+
}, {
|
|
27
|
+
prompt: string;
|
|
28
|
+
case_id: string;
|
|
29
|
+
category: "jailbreak" | "forbidden_action" | "task" | "format";
|
|
30
|
+
forbidden_actions: string[];
|
|
31
|
+
must_refuse: boolean;
|
|
32
|
+
expected_task_answer: string | null;
|
|
33
|
+
}>;
|
|
34
|
+
export declare const createEvalSetInputSchema: z.ZodObject<{
|
|
35
|
+
workspace_id: z.ZodString;
|
|
36
|
+
name: z.ZodString;
|
|
37
|
+
clone_from: z.ZodOptional<z.ZodString>;
|
|
38
|
+
cases: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
39
|
+
case_id: z.ZodString;
|
|
40
|
+
prompt: z.ZodString;
|
|
41
|
+
category: z.ZodEnum<["jailbreak", "forbidden_action", "task", "format"]>;
|
|
42
|
+
forbidden_actions: z.ZodArray<z.ZodString, "many">;
|
|
43
|
+
must_refuse: z.ZodBoolean;
|
|
44
|
+
expected_task_answer: z.ZodNullable<z.ZodString>;
|
|
45
|
+
}, "strict", z.ZodTypeAny, {
|
|
46
|
+
prompt: string;
|
|
47
|
+
case_id: string;
|
|
48
|
+
category: "jailbreak" | "forbidden_action" | "task" | "format";
|
|
49
|
+
forbidden_actions: string[];
|
|
50
|
+
must_refuse: boolean;
|
|
51
|
+
expected_task_answer: string | null;
|
|
52
|
+
}, {
|
|
53
|
+
prompt: string;
|
|
54
|
+
case_id: string;
|
|
55
|
+
category: "jailbreak" | "forbidden_action" | "task" | "format";
|
|
56
|
+
forbidden_actions: string[];
|
|
57
|
+
must_refuse: boolean;
|
|
58
|
+
expected_task_answer: string | null;
|
|
59
|
+
}>, "many">>;
|
|
60
|
+
}, "strict", z.ZodTypeAny, {
|
|
61
|
+
workspace_id: string;
|
|
62
|
+
name: string;
|
|
63
|
+
cases?: {
|
|
64
|
+
prompt: string;
|
|
65
|
+
case_id: string;
|
|
66
|
+
category: "jailbreak" | "forbidden_action" | "task" | "format";
|
|
67
|
+
forbidden_actions: string[];
|
|
68
|
+
must_refuse: boolean;
|
|
69
|
+
expected_task_answer: string | null;
|
|
70
|
+
}[] | undefined;
|
|
71
|
+
clone_from?: string | undefined;
|
|
72
|
+
}, {
|
|
73
|
+
workspace_id: string;
|
|
74
|
+
name: string;
|
|
75
|
+
cases?: {
|
|
76
|
+
prompt: string;
|
|
77
|
+
case_id: string;
|
|
78
|
+
category: "jailbreak" | "forbidden_action" | "task" | "format";
|
|
79
|
+
forbidden_actions: string[];
|
|
80
|
+
must_refuse: boolean;
|
|
81
|
+
expected_task_answer: string | null;
|
|
82
|
+
}[] | undefined;
|
|
83
|
+
clone_from?: string | undefined;
|
|
84
|
+
}>;
|
|
85
|
+
export type CreateEvalSetInput = z.infer<typeof createEvalSetInputSchema>;
|
|
86
|
+
export declare function formatVersion(v: EvalSetVersion, heading: string): string;
|
|
87
|
+
export declare function createEvalSetHandler(client: EdgeGateClient, input: CreateEvalSetInput): Promise<ToolResult>;
|
|
88
|
+
/** Shared EdgeGateError → ToolResult formatter for the eval-set tools. */
|
|
89
|
+
export declare function surfaceEvalError(err: EdgeGateError): ToolResult;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { EdgeGateError } from "../client.js";
|
|
3
|
+
/**
|
|
4
|
+
* Shared schema for one behavioral eval case — exactly the six fields from the
|
|
5
|
+
* eval-set authoring contract §3, byte-faithful to edgegate/bg/eval_set.py.
|
|
6
|
+
* Reused by create_eval_set and update_eval_set. Drafts are NOT validated on
|
|
7
|
+
* create/update (only publish freezes + gates), so this schema only enforces
|
|
8
|
+
* the shape, not the balance floor.
|
|
9
|
+
*/
|
|
10
|
+
export const evalCaseSchema = z
|
|
11
|
+
.object({
|
|
12
|
+
case_id: z.string().min(1, "case_id must be non-empty"),
|
|
13
|
+
prompt: z.string().min(1, "prompt must be non-empty"),
|
|
14
|
+
category: z.enum(["jailbreak", "forbidden_action", "task", "format"]),
|
|
15
|
+
forbidden_actions: z.array(z.string()),
|
|
16
|
+
must_refuse: z.boolean(),
|
|
17
|
+
expected_task_answer: z.string().nullable(),
|
|
18
|
+
})
|
|
19
|
+
.strict();
|
|
20
|
+
export const createEvalSetInputSchema = z
|
|
21
|
+
.object({
|
|
22
|
+
workspace_id: z.string().uuid(),
|
|
23
|
+
name: z.string().min(1).max(255),
|
|
24
|
+
clone_from: z
|
|
25
|
+
.string()
|
|
26
|
+
.optional()
|
|
27
|
+
.describe("A pack id from edgegate_list_eval_packs; seeds the draft with that pack's cases."),
|
|
28
|
+
cases: z
|
|
29
|
+
.array(evalCaseSchema)
|
|
30
|
+
.optional()
|
|
31
|
+
.describe("Explicit list of case dicts. May be combined with clone_from or used " +
|
|
32
|
+
"instead. Omit both to start with an empty draft."),
|
|
33
|
+
})
|
|
34
|
+
.strict();
|
|
35
|
+
export function formatVersion(v, heading) {
|
|
36
|
+
const lines = [
|
|
37
|
+
heading,
|
|
38
|
+
``,
|
|
39
|
+
`- eval_set_id: ${v.eval_set_id}`,
|
|
40
|
+
`- version_id: ${v.id}`,
|
|
41
|
+
`- version: ${v.version}`,
|
|
42
|
+
`- status: ${v.status}`,
|
|
43
|
+
`- cases: ${v.cases.length}`,
|
|
44
|
+
];
|
|
45
|
+
if (v.status === "published") {
|
|
46
|
+
lines.push(`- eval_set_sha256: ${v.eval_set_sha256}`);
|
|
47
|
+
lines.push(`- artifact_id: ${v.artifact_id}`);
|
|
48
|
+
if (v.balance) {
|
|
49
|
+
lines.push(`- balance: must_refuse=${v.balance.must_refuse}, ` +
|
|
50
|
+
`must_refuse_with_forbidden=${v.balance.must_refuse_with_forbidden}, ` +
|
|
51
|
+
`task=${v.balance.task}, benign=${v.balance.benign}, total=${v.balance.total}`);
|
|
52
|
+
}
|
|
53
|
+
if (v.published_at)
|
|
54
|
+
lines.push(`- published_at: ${v.published_at}`);
|
|
55
|
+
}
|
|
56
|
+
return lines.join("\n");
|
|
57
|
+
}
|
|
58
|
+
export async function createEvalSetHandler(client, input) {
|
|
59
|
+
try {
|
|
60
|
+
const body = {
|
|
61
|
+
name: input.name,
|
|
62
|
+
};
|
|
63
|
+
if (input.clone_from !== undefined)
|
|
64
|
+
body.clone_from = input.clone_from;
|
|
65
|
+
if (input.cases !== undefined)
|
|
66
|
+
body.cases = input.cases;
|
|
67
|
+
const version = await client.createEvalSet(input.workspace_id, body);
|
|
68
|
+
const next = `\nEdit cases with \`edgegate_update_eval_set\` (full replacement list), ` +
|
|
69
|
+
`then \`edgegate_publish_eval_set\` to validate, hash, sign, and freeze the version.`;
|
|
70
|
+
return {
|
|
71
|
+
content: [
|
|
72
|
+
{
|
|
73
|
+
type: "text",
|
|
74
|
+
text: formatVersion(version, `Created eval set **${input.name}** with its first draft version:`) +
|
|
75
|
+
`\n${next}`,
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
if (err instanceof EdgeGateError) {
|
|
82
|
+
if (err.status === 409) {
|
|
83
|
+
return {
|
|
84
|
+
isError: true,
|
|
85
|
+
content: [
|
|
86
|
+
{
|
|
87
|
+
type: "text",
|
|
88
|
+
text: `An eval set with name="${input.name}" already exists in this workspace. ` +
|
|
89
|
+
`Pick a different name, or list existing sets with \`edgegate_list_eval_sets\`.`,
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
if (err.status === 404) {
|
|
95
|
+
return {
|
|
96
|
+
isError: true,
|
|
97
|
+
content: [
|
|
98
|
+
{
|
|
99
|
+
type: "text",
|
|
100
|
+
text: `clone_from="${input.clone_from}" is not a known bundled pack. ` +
|
|
101
|
+
`List the available packs with \`edgegate_list_eval_packs\`.`,
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
return surfaceEvalError(err);
|
|
107
|
+
}
|
|
108
|
+
throw err;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/** Shared EdgeGateError → ToolResult formatter for the eval-set tools. */
|
|
112
|
+
export function surfaceEvalError(err) {
|
|
113
|
+
return {
|
|
114
|
+
isError: true,
|
|
115
|
+
content: [
|
|
116
|
+
{
|
|
117
|
+
type: "text",
|
|
118
|
+
text: err.status === 401
|
|
119
|
+
? "EDGEGATE_API_KEY is missing, expired, or revoked. Generate a fresh key at " +
|
|
120
|
+
"https://edgegate.frozo.ai/workspace/<id>/settings#api-keys and retry."
|
|
121
|
+
: err.status === 403
|
|
122
|
+
? "You need write access on this workspace to author eval sets."
|
|
123
|
+
: `EdgeGate returned ${err.status}: ${err.detail}`,
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=create_eval_set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_eval_set.js","sourceRoot":"","sources":["../../src/tools/create_eval_set.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { EdgeGateClient } from "../client.js";
|
|
3
|
+
import type { ToolResult } from "./setup_workspace.js";
|
|
4
|
+
export declare const listEvalPacksInputSchema: z.ZodObject<{}, "strict", z.ZodTypeAny, {}, {}>;
|
|
5
|
+
export type ListEvalPacksInput = z.infer<typeof listEvalPacksInputSchema>;
|
|
6
|
+
export declare function listEvalPacksHandler(client: EdgeGateClient, _input: ListEvalPacksInput): Promise<ToolResult>;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { EdgeGateError } from "../client.js";
|
|
3
|
+
import { surfaceEvalError } from "./create_eval_set.js";
|
|
4
|
+
export const listEvalPacksInputSchema = z.object({}).strict();
|
|
5
|
+
export async function listEvalPacksHandler(client, _input) {
|
|
6
|
+
try {
|
|
7
|
+
const packs = await client.listEvalPacks();
|
|
8
|
+
if (packs.length === 0) {
|
|
9
|
+
return {
|
|
10
|
+
content: [
|
|
11
|
+
{
|
|
12
|
+
type: "text",
|
|
13
|
+
text: "No bundled eval packs available. You can still create an eval set " +
|
|
14
|
+
"from scratch with `edgegate_create_eval_set` (pass explicit cases).",
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const header = `Found ${packs.length} bundled eval pack(s) you can clone from:\n\n` +
|
|
20
|
+
`| id | name | cases | must_refuse(+forbidden) | task |\n` +
|
|
21
|
+
`|---|---|---|---|---|\n`;
|
|
22
|
+
const rows = packs
|
|
23
|
+
.map((p) => {
|
|
24
|
+
const b = p.balance;
|
|
25
|
+
return `| ${p.id} | ${p.name} | ${p.case_count} | ${b.must_refuse} (${b.must_refuse_with_forbidden}) | ${b.task} |`;
|
|
26
|
+
})
|
|
27
|
+
.join("\n");
|
|
28
|
+
const footer = `\n\nClone one into a new eval set with ` +
|
|
29
|
+
`\`edgegate_create_eval_set({ workspace_id, name, clone_from: "<id>" })\`.`;
|
|
30
|
+
return { content: [{ type: "text", text: header + rows + footer }] };
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
if (err instanceof EdgeGateError)
|
|
34
|
+
return surfaceEvalError(err);
|
|
35
|
+
throw err;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=list_eval_packs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list_eval_packs.js","sourceRoot":"","sources":["../../src/tools/list_eval_packs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAkB,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAI9D,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAsB,EACtB,MAA0B;IAE1B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;QAE3C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EACF,oEAAoE;4BACpE,qEAAqE;qBACxE;iBACF;aACF,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GACV,SAAS,KAAK,CAAC,MAAM,+CAA+C;YACpE,0DAA0D;YAC1D,yBAAyB,CAAC;QAE5B,MAAM,IAAI,GAAG,KAAK;aACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;YACpB,OAAO,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,UAAU,MAAM,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,0BAA0B,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC;QACtH,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,MAAM,GACV,yCAAyC;YACzC,2EAA2E,CAAC;QAE9E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC;IACvE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,aAAa;YAAE,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC/D,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { EdgeGateClient } from "../client.js";
|
|
3
|
+
import type { ToolResult } from "./setup_workspace.js";
|
|
4
|
+
export declare const listEvalSetsInputSchema: z.ZodObject<{
|
|
5
|
+
workspace_id: z.ZodString;
|
|
6
|
+
}, "strict", z.ZodTypeAny, {
|
|
7
|
+
workspace_id: string;
|
|
8
|
+
}, {
|
|
9
|
+
workspace_id: string;
|
|
10
|
+
}>;
|
|
11
|
+
export type ListEvalSetsInput = z.infer<typeof listEvalSetsInputSchema>;
|
|
12
|
+
export declare function listEvalSetsHandler(client: EdgeGateClient, input: ListEvalSetsInput): Promise<ToolResult>;
|