edgegate-mcp 0.2.2 → 0.4.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 CHANGED
@@ -4,7 +4,7 @@ MCP server for [EdgeGate](https://edgegate.frozo.ai) — set up edge-AI regressi
4
4
 
5
5
  ## What does it do?
6
6
 
7
- EdgeGate runs AI model regression tests on real Snapdragon hardware via Qualcomm AI Hub, then produces signed evidence bundles you can attach to CI gates. This npm package exposes EdgeGate's REST API as 9 MCP tools, plus 4 bundled skills, so you can drive the whole flow from a prompt:
7
+ EdgeGate runs AI model regression tests on real Snapdragon hardware via Qualcomm AI Hub, then produces signed evidence bundles you can attach to CI gates. This npm package exposes EdgeGate's REST API as 12 MCP tools, plus bundled skills, so you can drive the whole flow from a prompt:
8
8
 
9
9
  ```
10
10
  > Use the edgegate MCP to set up a CI gate for my MobileNet ONNX model.
@@ -69,6 +69,9 @@ See [docs/tools.md](./docs/tools.md) for the full tool reference. Quick list:
69
69
  | `edgegate_setup_github_action` | Generate the GitHub Actions workflow + secret commands |
70
70
  | `edgegate_compare_runs` | Diff two runs — gate flips, metric deltas, per-device breakdown, REGRESSION / IMPROVEMENT / NEUTRAL verdict |
71
71
  | `edgegate_export_run_report` | Save a complete run report as a markdown file to disk (returns the file path + preview) |
72
+ | `edgegate_import_huggingface_model` | Import a public HuggingFace ONNX model — returns artifact_id ready for `edgegate_create_pipeline` |
73
+ | `edgegate_list_promptpacks` | List all promptpacks in a workspace (id, version, case count, published status) |
74
+ | `edgegate_create_promptpack` | Create a new promptpack with test cases (prompts, expected outputs, per-case overrides) |
72
75
 
73
76
  ## Skills
74
77
 
@@ -80,6 +83,8 @@ Slash commands you can invoke directly:
80
83
  - `/edgegate-audit` — fetch the evidence bundle for a run
81
84
  - `/edgegate-compare` — diff two runs (auto-baseline) with REGRESSION/IMPROVEMENT/NEUTRAL verdict
82
85
  - `/edgegate-export` — save a run report as a markdown file (for PR comments, Slack, compliance)
86
+ - `/edgegate-import` — import a public Hugging Face ONNX model and get an artifact_id
87
+ - `/edgegate-promptpacks` — list existing promptpacks or create a new one with generated test cases
83
88
 
84
89
  ## License
85
90
 
package/dist/client.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { APIKeyCreateResponse, Pipeline, RunBundle, RunComparison, RunDetail, RunSummary, Workspace, WorkflowTemplate } from "./types.js";
1
+ import type { APIKeyCreateResponse, HFImportJob, Pipeline, PromptPackCreateBody, PromptPackSummary, RunBundle, RunComparison, RunDetail, RunSummary, Workspace, WorkflowTemplate } from "./types.js";
2
2
  export interface EdgeGateClientOptions {
3
3
  apiUrl: string;
4
4
  apiKey: string;
@@ -64,5 +64,13 @@ export declare class EdgeGateClient {
64
64
  getRunDiff(workspaceId: string, runId: string): Promise<RunComparison>;
65
65
  getRunBundle(workspaceId: string, runId: string): Promise<RunBundle>;
66
66
  getWorkflowTemplate(workspaceId: string): Promise<WorkflowTemplate>;
67
+ startHuggingFaceImport(workspaceId: string, body: {
68
+ hf_repo_id: string;
69
+ revision?: string;
70
+ filename?: string;
71
+ }): Promise<HFImportJob>;
72
+ getHuggingFaceImportJob(workspaceId: string, jobId: string): Promise<HFImportJob>;
73
+ listPromptPacks(workspaceId: string): Promise<PromptPackSummary[]>;
74
+ createPromptPack(workspaceId: string, body: PromptPackCreateBody): Promise<PromptPackSummary>;
67
75
  private request;
68
76
  }
package/dist/client.js CHANGED
@@ -60,6 +60,18 @@ export class EdgeGateClient {
60
60
  async getWorkflowTemplate(workspaceId) {
61
61
  return this.request("GET", `/v1/workspaces/${workspaceId}/github-action/template`);
62
62
  }
63
+ async startHuggingFaceImport(workspaceId, body) {
64
+ return this.request("POST", `/v1/workspaces/${workspaceId}/artifacts/import-huggingface`, body);
65
+ }
66
+ async getHuggingFaceImportJob(workspaceId, jobId) {
67
+ return this.request("GET", `/v1/workspaces/${workspaceId}/artifacts/import-huggingface/${jobId}`);
68
+ }
69
+ async listPromptPacks(workspaceId) {
70
+ return this.request("GET", `/v1/workspaces/${workspaceId}/promptpacks`);
71
+ }
72
+ async createPromptPack(workspaceId, body) {
73
+ return this.request("POST", `/v1/workspaces/${workspaceId}/promptpacks`, body);
74
+ }
63
75
  async request(method, path, body) {
64
76
  const url = `${this.apiUrl}${path}`;
65
77
  const isIdempotent = method === "GET";
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -13,6 +13,9 @@ import { getAuditReportHandler, getAuditReportInputSchema } from "./tools/get_au
13
13
  import { setupGithubActionHandler, setupGithubActionInputSchema, } from "./tools/setup_github_action.js";
14
14
  import { compareRunsHandler, compareRunsInputSchema, } from "./tools/compare_runs.js";
15
15
  import { exportRunReportHandler, exportRunReportInputSchema, } from "./tools/export_run_report.js";
16
+ import { importHuggingfaceModelHandler, importHuggingfaceModelInputSchema, } from "./tools/import_huggingface_model.js";
17
+ import { listPromptpacksHandler, listPromptpacksInputSchema, } from "./tools/list_promptpacks.js";
18
+ import { createPromptpackHandler, createPromptpackInputSchema, } from "./tools/create_promptpack.js";
16
19
  const TOOLS = [
17
20
  {
18
21
  name: "edgegate_setup_workspace",
@@ -79,6 +82,32 @@ const TOOLS = [
79
82
  schema: exportRunReportInputSchema,
80
83
  handler: exportRunReportHandler,
81
84
  },
85
+ {
86
+ name: "edgegate_import_huggingface_model",
87
+ description: "Import a public Hugging Face model that contains a pre-built ONNX file. EdgeGate " +
88
+ "downloads the file and registers it as an Artifact. Returns the artifact_id you can " +
89
+ "pass directly to edgegate_create_pipeline. Polls until the import completes by default " +
90
+ "(poll_for_completion=true); set to false to return immediately with the job id.",
91
+ schema: importHuggingfaceModelInputSchema,
92
+ handler: importHuggingfaceModelHandler,
93
+ },
94
+ {
95
+ name: "edgegate_list_promptpacks",
96
+ description: "List all promptpacks in an EdgeGate workspace. Returns a markdown table with " +
97
+ "promptpack_id, version, case count, published status, and creation date. " +
98
+ "Use include_unpublished=false to hide draft packs.",
99
+ schema: listPromptpacksInputSchema,
100
+ handler: listPromptpacksHandler,
101
+ },
102
+ {
103
+ name: "edgegate_create_promptpack",
104
+ description: "Create a new promptpack in an EdgeGate workspace. A promptpack defines the test " +
105
+ "cases (prompts, expected outputs, per-case overrides) that regression pipelines " +
106
+ "evaluate. Requires admin role on the workspace. Packs are immutable after creation — " +
107
+ "bump the version to update.",
108
+ schema: createPromptpackInputSchema,
109
+ handler: createPromptpackHandler,
110
+ },
82
111
  ];
83
112
  function getClient() {
84
113
  const apiUrl = process.env.EDGEGATE_API_URL ?? "https://edgegateapi.frozo.ai";
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAC/F,OAAO,EACL,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,6BAA6B,EAC7B,iCAAiC,GAClC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,8BAA8B,CAAC;AAEtC,MAAM,KAAK,GAAG;IACZ;QACE,IAAI,EAAE,0BAA0B;QAChC,WAAW,EACT,6EAA6E;YAC7E,mFAAmF;QACrF,MAAM,EAAE,yBAAyB;QACjC,OAAO,EAAE,qBAAqB;KAC/B;IACD;QACE,IAAI,EAAE,0BAA0B;QAChC,WAAW,EACT,qFAAqF;YACrF,0EAA0E;QAC5E,MAAM,EAAE,yBAAyB;QACjC,OAAO,EAAE,qBAAqB;KAC/B;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,iFAAiF;YACjF,wBAAwB;QAC1B,MAAM,EAAE,kBAAkB;QAC1B,OAAO,EAAE,cAAc;KACxB;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,8EAA8E;YAC9E,+BAA+B;QACjC,MAAM,EAAE,sBAAsB;QAC9B,OAAO,EAAE,kBAAkB;KAC5B;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,8EAA8E;QAC3F,MAAM,EAAE,oBAAoB;QAC5B,OAAO,EAAE,gBAAgB;KAC1B;IACD;QACE,IAAI,EAAE,2BAA2B;QACjC,WAAW,EACT,6EAA6E;YAC7E,qBAAqB;QACvB,MAAM,EAAE,yBAAyB;QACjC,OAAO,EAAE,qBAAqB;KAC/B;IACD;QACE,IAAI,EAAE,8BAA8B;QACpC,WAAW,EACT,kFAAkF;YAClF,wBAAwB;QAC1B,MAAM,EAAE,4BAA4B;QACpC,OAAO,EAAE,wBAAwB;KAClC;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,2FAA2F;YAC3F,gGAAgG;YAChG,wFAAwF;YACxF,oDAAoD;QACtD,MAAM,EAAE,sBAAsB;QAC9B,OAAO,EAAE,kBAAkB;KAC5B;IACD;QACE,IAAI,EAAE,4BAA4B;QAClC,WAAW,EACT,qFAAqF;YACrF,uEAAuE;YACvE,yEAAyE;QAC3E,MAAM,EAAE,0BAA0B;QAClC,OAAO,EAAE,sBAAsB;KAChC;IACD;QACE,IAAI,EAAE,mCAAmC;QACzC,WAAW,EACT,mFAAmF;YACnF,sFAAsF;YACtF,yFAAyF;YACzF,iFAAiF;QACnF,MAAM,EAAE,iCAAiC;QACzC,OAAO,EAAE,6BAA6B;KACvC;IACD;QACE,IAAI,EAAE,2BAA2B;QACjC,WAAW,EACT,+EAA+E;YAC/E,2EAA2E;YAC3E,oDAAoD;QACtD,MAAM,EAAE,0BAA0B;QAClC,OAAO,EAAE,sBAAsB;KAChC;IACD;QACE,IAAI,EAAE,4BAA4B;QAClC,WAAW,EACT,kFAAkF;YAClF,kFAAkF;YAClF,uFAAuF;YACvF,6BAA6B;QAC/B,MAAM,EAAE,2BAA2B;QACnC,OAAO,EAAE,uBAAuB;KACjC;CACO,CAAC;AAEX,SAAS,SAAS;IAChB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,8BAA8B,CAAC;IAC9E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,4EAA4E;YAC1E,oEAAoE,CACvE,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,cAAc,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,EAC1C,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAC;IAEF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5D,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,MAAM,CAA4B;SAClE,CAAC,CAAC;KACJ,CAAC,CAAC,CAAC;IAEJ,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;aACtE,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;iBACtF;aACF,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,8DAA8D;QAC9D,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,IAAW,CAAQ,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,sCAAsC;IACtC,OAAO,CAAC,KAAK,CAAC,gBAAgB,OAAO,qBAAqB,CAAC,CAAC;AAC9D,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,sCAAsC;IACtC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,200 @@
1
+ import { z } from "zod";
2
+ import { EdgeGateClient } from "../client.js";
3
+ import type { ToolResult } from "./setup_workspace.js";
4
+ export declare const createPromptpackInputSchema: z.ZodObject<{
5
+ workspace_id: z.ZodString;
6
+ promptpack_id: z.ZodString;
7
+ version: z.ZodString;
8
+ name: z.ZodString;
9
+ description: z.ZodOptional<z.ZodString>;
10
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
11
+ defaults: z.ZodOptional<z.ZodObject<{
12
+ max_new_tokens: z.ZodOptional<z.ZodNumber>;
13
+ temperature: z.ZodOptional<z.ZodNumber>;
14
+ top_p: z.ZodOptional<z.ZodNumber>;
15
+ seed: z.ZodOptional<z.ZodNumber>;
16
+ }, "strict", z.ZodTypeAny, {
17
+ max_new_tokens?: number | undefined;
18
+ temperature?: number | undefined;
19
+ top_p?: number | undefined;
20
+ seed?: number | undefined;
21
+ }, {
22
+ max_new_tokens?: number | undefined;
23
+ temperature?: number | undefined;
24
+ top_p?: number | undefined;
25
+ seed?: number | undefined;
26
+ }>>;
27
+ cases: z.ZodArray<z.ZodObject<{
28
+ case_id: z.ZodString;
29
+ name: z.ZodString;
30
+ prompt: z.ZodString;
31
+ expected: z.ZodOptional<z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
32
+ type: z.ZodLiteral<"none">;
33
+ }, "strict", z.ZodTypeAny, {
34
+ type: "none";
35
+ }, {
36
+ type: "none";
37
+ }>, z.ZodObject<{
38
+ type: z.ZodLiteral<"exact">;
39
+ text: z.ZodString;
40
+ }, "strict", z.ZodTypeAny, {
41
+ type: "exact";
42
+ text: string;
43
+ }, {
44
+ type: "exact";
45
+ text: string;
46
+ }>, z.ZodObject<{
47
+ type: z.ZodLiteral<"regex">;
48
+ pattern: z.ZodString;
49
+ }, "strict", z.ZodTypeAny, {
50
+ type: "regex";
51
+ pattern: string;
52
+ }, {
53
+ type: "regex";
54
+ pattern: string;
55
+ }>, z.ZodObject<{
56
+ type: z.ZodLiteral<"json_schema">;
57
+ schema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
58
+ }, "strict", z.ZodTypeAny, {
59
+ type: "json_schema";
60
+ schema: Record<string, unknown>;
61
+ }, {
62
+ type: "json_schema";
63
+ schema: Record<string, unknown>;
64
+ }>]>>;
65
+ overrides: z.ZodOptional<z.ZodObject<{
66
+ max_new_tokens: z.ZodOptional<z.ZodNumber>;
67
+ temperature: z.ZodOptional<z.ZodNumber>;
68
+ top_p: z.ZodOptional<z.ZodNumber>;
69
+ seed: z.ZodOptional<z.ZodNumber>;
70
+ }, "strict", z.ZodTypeAny, {
71
+ max_new_tokens?: number | undefined;
72
+ temperature?: number | undefined;
73
+ top_p?: number | undefined;
74
+ seed?: number | undefined;
75
+ }, {
76
+ max_new_tokens?: number | undefined;
77
+ temperature?: number | undefined;
78
+ top_p?: number | undefined;
79
+ seed?: number | undefined;
80
+ }>>;
81
+ }, "strict", z.ZodTypeAny, {
82
+ prompt: string;
83
+ name: string;
84
+ case_id: string;
85
+ expected?: {
86
+ type: "none";
87
+ } | {
88
+ type: "exact";
89
+ text: string;
90
+ } | {
91
+ type: "regex";
92
+ pattern: string;
93
+ } | {
94
+ type: "json_schema";
95
+ schema: Record<string, unknown>;
96
+ } | undefined;
97
+ overrides?: {
98
+ max_new_tokens?: number | undefined;
99
+ temperature?: number | undefined;
100
+ top_p?: number | undefined;
101
+ seed?: number | undefined;
102
+ } | undefined;
103
+ }, {
104
+ prompt: string;
105
+ name: string;
106
+ case_id: string;
107
+ expected?: {
108
+ type: "none";
109
+ } | {
110
+ type: "exact";
111
+ text: string;
112
+ } | {
113
+ type: "regex";
114
+ pattern: string;
115
+ } | {
116
+ type: "json_schema";
117
+ schema: Record<string, unknown>;
118
+ } | undefined;
119
+ overrides?: {
120
+ max_new_tokens?: number | undefined;
121
+ temperature?: number | undefined;
122
+ top_p?: number | undefined;
123
+ seed?: number | undefined;
124
+ } | undefined;
125
+ }>, "many">;
126
+ }, "strict", z.ZodTypeAny, {
127
+ workspace_id: string;
128
+ name: string;
129
+ promptpack_id: string;
130
+ version: string;
131
+ cases: {
132
+ prompt: string;
133
+ name: string;
134
+ case_id: string;
135
+ expected?: {
136
+ type: "none";
137
+ } | {
138
+ type: "exact";
139
+ text: string;
140
+ } | {
141
+ type: "regex";
142
+ pattern: string;
143
+ } | {
144
+ type: "json_schema";
145
+ schema: Record<string, unknown>;
146
+ } | undefined;
147
+ overrides?: {
148
+ max_new_tokens?: number | undefined;
149
+ temperature?: number | undefined;
150
+ top_p?: number | undefined;
151
+ seed?: number | undefined;
152
+ } | undefined;
153
+ }[];
154
+ description?: string | undefined;
155
+ tags?: string[] | undefined;
156
+ defaults?: {
157
+ max_new_tokens?: number | undefined;
158
+ temperature?: number | undefined;
159
+ top_p?: number | undefined;
160
+ seed?: number | undefined;
161
+ } | undefined;
162
+ }, {
163
+ workspace_id: string;
164
+ name: string;
165
+ promptpack_id: string;
166
+ version: string;
167
+ cases: {
168
+ prompt: string;
169
+ name: string;
170
+ case_id: string;
171
+ expected?: {
172
+ type: "none";
173
+ } | {
174
+ type: "exact";
175
+ text: string;
176
+ } | {
177
+ type: "regex";
178
+ pattern: string;
179
+ } | {
180
+ type: "json_schema";
181
+ schema: Record<string, unknown>;
182
+ } | undefined;
183
+ overrides?: {
184
+ max_new_tokens?: number | undefined;
185
+ temperature?: number | undefined;
186
+ top_p?: number | undefined;
187
+ seed?: number | undefined;
188
+ } | undefined;
189
+ }[];
190
+ description?: string | undefined;
191
+ tags?: string[] | undefined;
192
+ defaults?: {
193
+ max_new_tokens?: number | undefined;
194
+ temperature?: number | undefined;
195
+ top_p?: number | undefined;
196
+ seed?: number | undefined;
197
+ } | undefined;
198
+ }>;
199
+ export type CreatePromptpackInput = z.infer<typeof createPromptpackInputSchema>;
200
+ export declare function createPromptpackHandler(client: EdgeGateClient, input: CreatePromptpackInput): Promise<ToolResult>;
@@ -0,0 +1,178 @@
1
+ import { z } from "zod";
2
+ import { EdgeGateError } from "../client.js";
3
+ const promptpackIdRegex = /^[a-zA-Z0-9_-]{1,64}$/;
4
+ const caseIdRegex = /^[a-zA-Z0-9_-]{1,64}$/;
5
+ const semverRegex = /^\d+\.\d+\.\d+$/;
6
+ const defaultsSchema = z
7
+ .object({
8
+ max_new_tokens: z.number().int().min(1).max(256).optional(),
9
+ temperature: z.number().min(0).max(2).optional(),
10
+ top_p: z.number().min(0).max(1).optional(),
11
+ seed: z.number().int().min(0).optional(),
12
+ })
13
+ .strict();
14
+ const expectedSchema = z.discriminatedUnion("type", [
15
+ z.object({ type: z.literal("none") }).strict(),
16
+ z.object({ type: z.literal("exact"), text: z.string() }).strict(),
17
+ z.object({ type: z.literal("regex"), pattern: z.string() }).strict(),
18
+ z.object({
19
+ type: z.literal("json_schema"),
20
+ schema: z.record(z.unknown()),
21
+ }).strict(),
22
+ ]);
23
+ const caseSchema = z
24
+ .object({
25
+ case_id: z
26
+ .string()
27
+ .regex(caseIdRegex, "case_id must match ^[a-zA-Z0-9_-]{1,64}$"),
28
+ name: z.string().min(1).max(255),
29
+ prompt: z.string().min(1).max(32000),
30
+ expected: expectedSchema.optional(),
31
+ overrides: defaultsSchema.optional(),
32
+ })
33
+ .strict();
34
+ export const createPromptpackInputSchema = z
35
+ .object({
36
+ workspace_id: z.string().uuid(),
37
+ promptpack_id: z
38
+ .string()
39
+ .regex(promptpackIdRegex, "promptpack_id must match ^[a-zA-Z0-9_-]{1,64}$"),
40
+ version: z
41
+ .string()
42
+ .regex(semverRegex, "version must be semver (e.g. 1.0.0)"),
43
+ name: z.string().min(1).max(255),
44
+ description: z.string().max(2000).optional(),
45
+ tags: z
46
+ .array(z.string().min(1).max(64))
47
+ .max(20)
48
+ .optional(),
49
+ defaults: defaultsSchema.optional(),
50
+ cases: z
51
+ .array(caseSchema)
52
+ .min(1, "At least one case is required")
53
+ .max(50, "Maximum 50 cases per promptpack"),
54
+ })
55
+ .strict();
56
+ export async function createPromptpackHandler(client, input) {
57
+ try {
58
+ const content = {
59
+ promptpack_id: input.promptpack_id,
60
+ version: input.version,
61
+ name: input.name,
62
+ ...(input.description !== undefined && { description: input.description }),
63
+ ...(input.tags !== undefined && { tags: input.tags }),
64
+ ...(input.defaults !== undefined && { defaults: input.defaults }),
65
+ cases: input.cases,
66
+ };
67
+ const pack = await client.createPromptPack(input.workspace_id, {
68
+ promptpack_id: input.promptpack_id,
69
+ version: input.version,
70
+ content,
71
+ });
72
+ return {
73
+ content: [
74
+ {
75
+ type: "text",
76
+ text: [
77
+ `Created promptpack **${pack.promptpack_id}@${pack.version}**`,
78
+ ``,
79
+ `- id: ${pack.id}`,
80
+ `- ${pack.case_count} case(s)`,
81
+ `- published: false (newly created — call the publish endpoint or set published=true in the dashboard to make it usable in pipelines)`,
82
+ `- sha256: ${pack.sha256}`,
83
+ ``,
84
+ `Use it in a pipeline:`,
85
+ ` edgegate_create_pipeline({`,
86
+ ` ...,`,
87
+ ` promptpack_id: "${pack.promptpack_id}",`,
88
+ ` promptpack_version: "${pack.version}",`,
89
+ ` ...`,
90
+ ` })`,
91
+ ].join("\n"),
92
+ },
93
+ ],
94
+ };
95
+ }
96
+ catch (err) {
97
+ if (err instanceof EdgeGateError) {
98
+ if (err.status === 409) {
99
+ return {
100
+ isError: true,
101
+ content: [
102
+ {
103
+ type: "text",
104
+ text: `A pack with id="${input.promptpack_id}" and version="${input.version}" already exists. ` +
105
+ `Packs are immutable — bump the version (e.g. ${bumpPatch(input.version)}) and retry.`,
106
+ },
107
+ ],
108
+ };
109
+ }
110
+ if (err.status === 403) {
111
+ return {
112
+ isError: true,
113
+ content: [
114
+ {
115
+ type: "text",
116
+ text: "You need admin role on this workspace to create promptpacks.",
117
+ },
118
+ ],
119
+ };
120
+ }
121
+ if (err.status === 400 || err.status === 422) {
122
+ // Try to surface the issues array if present in detail
123
+ let issuesText = err.detail;
124
+ try {
125
+ const parsed = JSON.parse(err.detail);
126
+ if (parsed && typeof parsed === "object" && Array.isArray(parsed.issues)) {
127
+ issuesText =
128
+ `Validation failed with ${parsed.issues.length} issue(s):\n` +
129
+ parsed.issues.map((iss) => ` - ${JSON.stringify(iss)}`).join("\n");
130
+ }
131
+ else if (parsed && typeof parsed === "object" && parsed.detail) {
132
+ issuesText = String(parsed.detail);
133
+ }
134
+ }
135
+ catch {
136
+ // detail was plain text — keep as-is
137
+ }
138
+ return {
139
+ isError: true,
140
+ content: [
141
+ {
142
+ type: "text",
143
+ text: `EdgeGate rejected the promptpack (${err.status}):\n\n${issuesText}`,
144
+ },
145
+ ],
146
+ };
147
+ }
148
+ if (err.status === 401) {
149
+ return {
150
+ isError: true,
151
+ content: [
152
+ {
153
+ type: "text",
154
+ text: "EDGEGATE_API_KEY is missing, expired, or revoked. Generate a fresh key at " +
155
+ "https://edgegate.frozo.ai/workspace/<id>/settings#api-keys and retry.",
156
+ },
157
+ ],
158
+ };
159
+ }
160
+ return {
161
+ isError: true,
162
+ content: [
163
+ { type: "text", text: `EdgeGate returned ${err.status}: ${err.detail}` },
164
+ ],
165
+ };
166
+ }
167
+ throw err;
168
+ }
169
+ }
170
+ /** Increment the patch segment of a semver string, e.g. "1.0.0" → "1.0.1". */
171
+ function bumpPatch(version) {
172
+ const parts = version.split(".");
173
+ if (parts.length !== 3)
174
+ return version;
175
+ const patch = parseInt(parts[2], 10);
176
+ return `${parts[0]}.${parts[1]}.${isNaN(patch) ? 1 : patch + 1}`;
177
+ }
178
+ //# sourceMappingURL=create_promptpack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_promptpack.js","sourceRoot":"","sources":["../../src/tools/create_promptpack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { z } from "zod";
2
+ import { EdgeGateClient } from "../client.js";
3
+ import type { ToolResult } from "./setup_workspace.js";
4
+ export declare const importHuggingfaceModelInputSchema: z.ZodObject<{
5
+ workspace_id: z.ZodString;
6
+ hf_repo_id: z.ZodString;
7
+ revision: z.ZodDefault<z.ZodOptional<z.ZodString>>;
8
+ filename: z.ZodOptional<z.ZodString>;
9
+ poll_for_completion: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
10
+ max_poll_seconds: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ workspace_id: string;
13
+ hf_repo_id: string;
14
+ revision: string;
15
+ poll_for_completion: boolean;
16
+ max_poll_seconds: number;
17
+ filename?: string | undefined;
18
+ }, {
19
+ workspace_id: string;
20
+ hf_repo_id: string;
21
+ revision?: string | undefined;
22
+ filename?: string | undefined;
23
+ poll_for_completion?: boolean | undefined;
24
+ max_poll_seconds?: number | undefined;
25
+ }>;
26
+ export type ImportHuggingfaceModelInput = z.infer<typeof importHuggingfaceModelInputSchema>;
27
+ export declare function importHuggingfaceModelHandler(client: EdgeGateClient, input: ImportHuggingfaceModelInput): Promise<ToolResult>;
@@ -0,0 +1,141 @@
1
+ import { z } from "zod";
2
+ import { EdgeGateError } from "../client.js";
3
+ export const importHuggingfaceModelInputSchema = z.object({
4
+ workspace_id: z.string().uuid(),
5
+ hf_repo_id: z
6
+ .string()
7
+ .regex(/^[^/]+\/[^/]+$/, 'hf_repo_id must be in "<owner>/<name>" format, e.g. "microsoft/resnet-50"'),
8
+ revision: z.string().optional().default("main"),
9
+ filename: z.string().optional(),
10
+ poll_for_completion: z.boolean().optional().default(true),
11
+ max_poll_seconds: z
12
+ .number()
13
+ .int()
14
+ .min(1)
15
+ .max(900)
16
+ .optional()
17
+ .default(300),
18
+ });
19
+ const POLL_INTERVAL_MS = 5_000;
20
+ export async function importHuggingfaceModelHandler(client, input) {
21
+ try {
22
+ const body = {
23
+ hf_repo_id: input.hf_repo_id,
24
+ revision: input.revision,
25
+ };
26
+ if (input.filename !== undefined) {
27
+ body.filename = input.filename;
28
+ }
29
+ const job = await client.startHuggingFaceImport(input.workspace_id, body);
30
+ if (!input.poll_for_completion) {
31
+ return {
32
+ content: [
33
+ {
34
+ type: "text",
35
+ text: [
36
+ `Import started for **${input.hf_repo_id}**.`,
37
+ ``,
38
+ `- import_job_id: ${job.import_job_id}`,
39
+ `- status: ${job.status}`,
40
+ ``,
41
+ `To check progress, call:`,
42
+ ` \`edgegate_import_huggingface_model({ workspace_id: "${input.workspace_id}", hf_repo_id: "${input.hf_repo_id}", poll_for_completion: true })\``,
43
+ ``,
44
+ `Or wait and re-run with the same arguments — polling will pick up where it left off.`,
45
+ ].join("\n"),
46
+ },
47
+ ],
48
+ };
49
+ }
50
+ // Poll until done / failed / timeout
51
+ const deadlineMs = Date.now() + input.max_poll_seconds * 1_000;
52
+ let latest = job;
53
+ while (latest.status !== "done" && latest.status !== "failed") {
54
+ if (Date.now() >= deadlineMs) {
55
+ return {
56
+ content: [
57
+ {
58
+ type: "text",
59
+ text: [
60
+ `Import of **${input.hf_repo_id}** is still running after ${input.max_poll_seconds}s.`,
61
+ ``,
62
+ `- import_job_id: ${latest.import_job_id}`,
63
+ `- current status: ${latest.status}`,
64
+ ``,
65
+ `The import is continuing in the background. Check back in a minute by calling this`,
66
+ `tool again with the same arguments (poll_for_completion: true).`,
67
+ ].join("\n"),
68
+ },
69
+ ],
70
+ };
71
+ }
72
+ await sleep(POLL_INTERVAL_MS);
73
+ latest = await client.getHuggingFaceImportJob(input.workspace_id, latest.import_job_id);
74
+ }
75
+ if (latest.status === "failed") {
76
+ return {
77
+ isError: true,
78
+ content: [
79
+ {
80
+ type: "text",
81
+ text: [
82
+ `Import of **${input.hf_repo_id}** failed.`,
83
+ ``,
84
+ `- import_job_id: ${latest.import_job_id}`,
85
+ `- error: ${latest.error_detail ?? "unknown error"}`,
86
+ ``,
87
+ `Common causes:`,
88
+ `- The repository does not contain an ONNX file (EdgeGate v1 requires pre-built ONNX)`,
89
+ `- The repository is private (only public repos are supported in v1)`,
90
+ `- The revision or filename you specified does not exist`,
91
+ ].join("\n"),
92
+ },
93
+ ],
94
+ };
95
+ }
96
+ // status === "done"
97
+ const sizeLabel = latest.size_bytes !== null
98
+ ? `${(latest.size_bytes / 1_048_576).toFixed(1)} MB`
99
+ : "unknown size";
100
+ return {
101
+ content: [
102
+ {
103
+ type: "text",
104
+ text: [
105
+ `Import complete: **${input.hf_repo_id}**`,
106
+ ``,
107
+ `- artifact_id: ${latest.artifact_id}`,
108
+ `- filename: ${latest.filename ?? "(unknown)"}`,
109
+ `- size: ${sizeLabel}`,
110
+ ``,
111
+ `Use this artifact_id in \`edgegate_create_pipeline\` to gate this model:`,
112
+ ` models: [{ name: "${input.hf_repo_id}", artifact_id: "${latest.artifact_id}" }]`,
113
+ ].join("\n"),
114
+ },
115
+ ],
116
+ };
117
+ }
118
+ catch (err) {
119
+ if (err instanceof EdgeGateError) {
120
+ return {
121
+ isError: true,
122
+ content: [
123
+ {
124
+ type: "text",
125
+ text: err.status === 402
126
+ ? `Your plan does not allow Hugging Face imports. Upgrade at https://edgegate.frozo.ai/pricing.\n\nDetail: ${err.detail}`
127
+ : err.status === 401
128
+ ? "EDGEGATE_API_KEY is missing, expired, or revoked. Generate a fresh key at " +
129
+ "https://edgegate.frozo.ai/workspace/<id>/settings#api-keys and retry."
130
+ : `EdgeGate returned ${err.status}: ${err.detail}`,
131
+ },
132
+ ],
133
+ };
134
+ }
135
+ throw err;
136
+ }
137
+ }
138
+ function sleep(ms) {
139
+ return new Promise((r) => setTimeout(r, ms));
140
+ }
141
+ //# sourceMappingURL=import_huggingface_model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import_huggingface_model.js","sourceRoot":"","sources":["../../src/tools/import_huggingface_model.ts"],"names":[],"mappings":"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"}
@@ -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 listPromptpacksInputSchema: z.ZodObject<{
5
+ workspace_id: z.ZodString;
6
+ include_unpublished: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ workspace_id: string;
9
+ include_unpublished: boolean;
10
+ }, {
11
+ workspace_id: string;
12
+ include_unpublished?: boolean | undefined;
13
+ }>;
14
+ export type ListPromptpacksInput = z.infer<typeof listPromptpacksInputSchema>;
15
+ export declare function listPromptpacksHandler(client: EdgeGateClient, input: ListPromptpacksInput): Promise<ToolResult>;
@@ -0,0 +1,66 @@
1
+ import { z } from "zod";
2
+ import { EdgeGateError } from "../client.js";
3
+ export const listPromptpacksInputSchema = z.object({
4
+ workspace_id: z.string().uuid(),
5
+ include_unpublished: z
6
+ .boolean()
7
+ .optional()
8
+ .default(true)
9
+ .describe("When false, hides packs with published=false (client-side filter). Default: true."),
10
+ });
11
+ export async function listPromptpacksHandler(client, input) {
12
+ try {
13
+ const packs = await client.listPromptPacks(input.workspace_id);
14
+ const filtered = input.include_unpublished
15
+ ? packs
16
+ : packs.filter((p) => p.published);
17
+ if (filtered.length === 0) {
18
+ const suffix = !input.include_unpublished && packs.length > 0
19
+ ? ` (${packs.length} unpublished pack(s) hidden — set include_unpublished=true to see them)`
20
+ : "";
21
+ return {
22
+ content: [
23
+ {
24
+ type: "text",
25
+ text: `No promptpacks yet in this workspace${suffix}.\n\n` +
26
+ `Create one with \`edgegate_create_promptpack\` or upload via the dashboard at ` +
27
+ `https://edgegate.frozo.ai/workspace/${input.workspace_id}/promptpacks.`,
28
+ },
29
+ ],
30
+ };
31
+ }
32
+ const header = `Found ${filtered.length} promptpack(s) in this workspace:\n\n` +
33
+ `| promptpack_id | version | cases | published | created |\n` +
34
+ `|---|---|---|---|---|\n`;
35
+ const rows = filtered
36
+ .map((p) => {
37
+ const date = p.created_at.slice(0, 10);
38
+ const pub = p.published ? "yes" : "no";
39
+ return `| ${p.promptpack_id} | ${p.version} | ${p.case_count} | ${pub} | ${date} |`;
40
+ })
41
+ .join("\n");
42
+ const footer = `\n\nUse the \`promptpack_id\` (string column) in \`edgegate_create_pipeline\`'s ` +
43
+ `\`promptpack_id\` field. The \`version\` defaults to "1.0.0" but can be overridden.`;
44
+ return {
45
+ content: [{ type: "text", text: header + rows + footer }],
46
+ };
47
+ }
48
+ catch (err) {
49
+ if (err instanceof EdgeGateError) {
50
+ return {
51
+ isError: true,
52
+ content: [
53
+ {
54
+ type: "text",
55
+ text: err.status === 401
56
+ ? "EDGEGATE_API_KEY is missing, expired, or revoked. Generate a fresh key at " +
57
+ "https://edgegate.frozo.ai/workspace/<id>/settings#api-keys and retry."
58
+ : `EdgeGate returned ${err.status}: ${err.detail}`,
59
+ },
60
+ ],
61
+ };
62
+ }
63
+ throw err;
64
+ }
65
+ }
66
+ //# sourceMappingURL=list_promptpacks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list_promptpacks.js","sourceRoot":"","sources":["../../src/tools/list_promptpacks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAkB,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7D,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IAC/B,mBAAmB,EAAE,CAAC;SACnB,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,mFAAmF,CAAC;CACjG,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAAsB,EACtB,KAA2B;IAE3B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAE/D,MAAM,QAAQ,GAAG,KAAK,CAAC,mBAAmB;YACxC,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAErC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,mBAAmB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAC3D,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,yEAAyE;gBAC5F,CAAC,CAAC,EAAE,CAAC;YACP,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EACF,uCAAuC,MAAM,OAAO;4BACpD,gFAAgF;4BAChF,uCAAuC,KAAK,CAAC,YAAY,eAAe;qBAC3E;iBACF;aACF,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GACV,SAAS,QAAQ,CAAC,MAAM,uCAAuC;YAC/D,6DAA6D;YAC7D,yBAAyB,CAAC;QAE5B,MAAM,IAAI,GAAG,QAAQ;aAClB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvC,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YACvC,OAAO,KAAK,CAAC,CAAC,aAAa,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,UAAU,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC;QACtF,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,MAAM,GACV,kFAAkF;YAClF,qFAAqF,CAAC;QAExF,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC;SAC1D,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;YACjC,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EACF,GAAG,CAAC,MAAM,KAAK,GAAG;4BAChB,CAAC,CAAC,4EAA4E;gCAC5E,uEAAuE;4BACzE,CAAC,CAAC,qBAAqB,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE;qBACvD;iBACF;aACF,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
package/dist/types.d.ts CHANGED
@@ -89,6 +89,17 @@ export interface AuditReport {
89
89
  url?: string;
90
90
  generated_at?: string;
91
91
  }
92
+ export type HFImportStatus = "queued" | "downloading" | "uploading_to_hub" | "done" | "failed";
93
+ export interface HFImportJob {
94
+ import_job_id: string;
95
+ status: HFImportStatus;
96
+ hf_repo_id?: string;
97
+ revision?: string;
98
+ artifact_id: string | null;
99
+ size_bytes: number | null;
100
+ filename: string | null;
101
+ error_detail: string | null;
102
+ }
92
103
  export interface MetricDelta {
93
104
  current: number | null;
94
105
  previous: number | null;
@@ -132,3 +143,45 @@ export interface RunComparison {
132
143
  diff: RunDiffPayload;
133
144
  created_at: string;
134
145
  }
146
+ export interface PromptPackSummary {
147
+ id: UUID;
148
+ promptpack_id: string;
149
+ version: string;
150
+ sha256: string;
151
+ case_count: number;
152
+ published: boolean;
153
+ created_at: string;
154
+ }
155
+ export interface PromptPackExpected {
156
+ type: "none" | "exact" | "regex" | "json_schema";
157
+ text?: string;
158
+ pattern?: string;
159
+ schema?: Record<string, unknown>;
160
+ }
161
+ export interface PromptPackDefaults {
162
+ max_new_tokens?: number;
163
+ temperature?: number;
164
+ top_p?: number;
165
+ seed?: number;
166
+ }
167
+ export interface PromptPackCase {
168
+ case_id: string;
169
+ name: string;
170
+ prompt: string;
171
+ expected?: PromptPackExpected;
172
+ overrides?: PromptPackDefaults;
173
+ }
174
+ export interface PromptPackContent {
175
+ promptpack_id: string;
176
+ version: string;
177
+ name: string;
178
+ description?: string;
179
+ tags?: string[];
180
+ defaults?: PromptPackDefaults;
181
+ cases: PromptPackCase[];
182
+ }
183
+ export interface PromptPackCreateBody {
184
+ promptpack_id: string;
185
+ version: string;
186
+ content: PromptPackContent;
187
+ }
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.2.2";
2
- export declare const USER_AGENT = "edgegate-mcp/0.2.2";
1
+ export declare const VERSION = "0.4.0";
2
+ export declare const USER_AGENT = "edgegate-mcp/0.4.0";
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
- export const VERSION = "0.2.2";
1
+ export const VERSION = "0.4.0";
2
2
  export const USER_AGENT = `edgegate-mcp/${VERSION}`;
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "edgegate-mcp",
3
- "version": "0.2.2",
3
+ "version": "0.4.0",
4
4
  "description": "MCP server for EdgeGate — set up edge-AI regression gates from Claude Code, Cursor, or Claude Desktop.",
5
5
  "license": "MIT",
6
6
  "type": "module",
package/plugin.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "edgegate",
3
- "version": "0.2.2",
3
+ "version": "0.4.0",
4
4
  "description": "Edge-AI regression gates from Claude Code — set up CI, run benchmarks, compare runs, export reports, and fetch audit bundles from any prompt.",
5
5
  "author": "Frozo / EdgeGate",
6
6
  "homepage": "https://edgegate.frozo.ai",
@@ -23,6 +23,8 @@
23
23
  "skills/edgegate-status.md",
24
24
  "skills/edgegate-audit.md",
25
25
  "skills/edgegate-compare.md",
26
- "skills/edgegate-export.md"
26
+ "skills/edgegate-export.md",
27
+ "skills/edgegate-import.md",
28
+ "skills/edgegate-promptpacks.md"
27
29
  ]
28
30
  }
@@ -0,0 +1,49 @@
1
+ ---
2
+ name: edgegate-import
3
+ description: Import a public Hugging Face model (ONNX) into EdgeGate. Use when the user says "import model from huggingface", "pull this HF model", or references an "<owner>/<name>" repo they want to gate.
4
+ ---
5
+
6
+ # /edgegate-import
7
+
8
+ The user wants to import a model from Hugging Face into EdgeGate so it can be used in a regression pipeline.
9
+
10
+ ## Triggers
11
+
12
+ Use this skill when the user says any of:
13
+ - "import the microsoft/resnet-50 model from Hugging Face"
14
+ - "pull this HF model: owner/name"
15
+ - "I have a model on HuggingFace at owner/name"
16
+ - "use owner/name from HF for my gate"
17
+
18
+ ## Steps
19
+
20
+ 1. **Confirm workspace.** If you don't have a `workspace_id`, call `edgegate_setup_workspace` with no args and ask the user which workspace to use.
21
+
22
+ 2. **Identify the repo.** The repo id must be `"<owner>/<name>"` (e.g. `"microsoft/resnet-50"`). If the user gives a full URL like `https://huggingface.co/owner/name`, extract just `owner/name`. Ask if unclear.
23
+
24
+ 3. **Optional: revision and filename.** If the user doesn't mention a specific branch/tag, omit `revision` (defaults to `"main"`). If they don't mention a specific file, omit `filename` (EdgeGate will autodetect the ONNX file).
25
+
26
+ 4. **Call the tool.** Default to `poll_for_completion: true` so the import finishes before you continue. Use `poll_for_completion: false` only if the user explicitly says they want to kick it off and come back later.
27
+
28
+ ```
29
+ edgegate_import_huggingface_model({
30
+ workspace_id: "<id>",
31
+ hf_repo_id: "microsoft/resnet-50",
32
+ revision: "main", // omit to use default
33
+ filename: "model.onnx", // omit to autodetect
34
+ poll_for_completion: true,
35
+ })
36
+ ```
37
+
38
+ 5. **On success.** The tool returns the `artifact_id`. Tell the user:
39
+ - The model has been imported and is registered as an artifact.
40
+ - They can now create a pipeline with it using `edgegate_create_pipeline` and pass `artifact_id` in the `models` array.
41
+ - Offer to set up the pipeline immediately if they give you their target devices and gates.
42
+
43
+ 6. **On timeout.** The import is still running in the background. Ask the user to run `/edgegate-import` again in a minute — the tool will resume polling.
44
+
45
+ ## Failure modes
46
+
47
+ - **"no ONNX file found"** — The repo doesn't contain a pre-built ONNX. EdgeGate v1 only supports repos with a pre-built ONNX file. Point the user to the dashboard upload flow for converting their own model: `https://edgegate.frozo.ai/workspace/<id>/models`.
48
+ - **"private repo"** — EdgeGate v1 only imports public HuggingFace repos. Ask the user to make the repo public or use the direct upload flow instead.
49
+ - **402 — plan limit** — Direct the user to `https://edgegate.frozo.ai/pricing` to upgrade.
@@ -0,0 +1,80 @@
1
+ ---
2
+ name: edgegate-promptpacks
3
+ description: List or create EdgeGate promptpacks. Use when the user says "list my promptpacks", "what packs do I have", "create a promptpack", "make a new pack", "I need a text embedding pack", or any variation on viewing or authoring test-case packs for EdgeGate pipelines.
4
+ ---
5
+
6
+ # /edgegate-promptpacks
7
+
8
+ The user wants to list existing promptpacks in their workspace, or create a new one.
9
+
10
+ ## Triggers
11
+
12
+ Use this skill when the user says any of:
13
+ - "list my promptpacks" / "what packs do I have" / "show my packs"
14
+ - "create a promptpack" / "make a new pack" / "add test cases"
15
+ - "I need a text embedding pack" / "create an LLM completion benchmark"
16
+ - "set up test cases for my image classification model"
17
+
18
+ ## Decision tree
19
+
20
+ 1. **Confirm workspace.** If you don't have a `workspace_id`, call `edgegate_setup_workspace` with no args and ask which workspace to use.
21
+
22
+ 2. **List first if no specific pack mentioned.**
23
+ - Call `edgegate_list_promptpacks({ workspace_id, include_unpublished: true })`
24
+ - Show the user what already exists — they may be able to reuse an existing pack.
25
+
26
+ 3. **If creating:**
27
+ a. Ask the user what kind of model the pack is for if not clear:
28
+ - Text/LLM completion (prompt → generated text)
29
+ - Text embedding (prompt → vector; validation typically `type: "none"`)
30
+ - Image classification (structured output; validate with `json_schema`)
31
+ b. Suggest 3–5 sensible test cases based on use case (Claude can generate them — see templates below).
32
+ c. Confirm `promptpack_id` (slug, no spaces), `version` (start at `1.0.0` unless user says otherwise), and `name`.
33
+ d. Call `edgegate_create_promptpack(...)`.
34
+
35
+ ## Case templates by model type
36
+
37
+ ### Text embedding / similarity
38
+ ```json
39
+ [
40
+ { "case_id": "short-greeting", "name": "Short greeting", "prompt": "hello world", "expected": { "type": "none" } },
41
+ { "case_id": "sentence-pair", "name": "Sentence pair", "prompt": "The quick brown fox jumps.", "expected": { "type": "none" } },
42
+ { "case_id": "long-paragraph", "name": "Long paragraph", "prompt": "Embeddings capture semantic meaning...", "expected": { "type": "none" } }
43
+ ]
44
+ ```
45
+
46
+ ### LLM completion (exact or regex validation)
47
+ ```json
48
+ [
49
+ { "case_id": "capital-france", "name": "Capital of France", "prompt": "What is the capital of France?", "expected": { "type": "exact", "text": "Paris" } },
50
+ { "case_id": "hello-response", "name": "Hello response", "prompt": "Say hello.", "expected": { "type": "regex", "pattern": "(?i)hello" } },
51
+ { "case_id": "add-numbers", "name": "Add two numbers", "prompt": "What is 3 + 4?", "expected": { "type": "exact", "text": "7" } }
52
+ ]
53
+ ```
54
+
55
+ ### Structured / JSON output
56
+ ```json
57
+ [
58
+ {
59
+ "case_id": "classify-cat",
60
+ "name": "Classify cat image description",
61
+ "prompt": "Classify: a furry four-legged animal with whiskers.",
62
+ "expected": {
63
+ "type": "json_schema",
64
+ "schema": { "type": "object", "properties": { "label": { "type": "string" } }, "required": ["label"] }
65
+ }
66
+ }
67
+ ]
68
+ ```
69
+
70
+ ## Versioning rules
71
+
72
+ - Start at `1.0.0` unless the user specifies otherwise.
73
+ - Packs are **immutable** — to update, bump the patch (e.g. `1.0.0` → `1.0.1`) and create a new pack.
74
+ - Only published packs can be referenced in pipelines. Newly created packs are `published: false` — remind the user to publish via the dashboard.
75
+
76
+ ## Failure modes
77
+
78
+ - **409 conflict** — (promptpack_id, version) already exists. Bump the version and retry.
79
+ - **403 forbidden** — user needs admin role on the workspace.
80
+ - **400 / schema error** — surface the `issues` array to the user; common causes are `case_id` with spaces or special characters, `max_new_tokens` > 256, or more than 50 cases.