edgegate-mcp 0.3.0 → 0.4.1

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 10 MCP tools, plus 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 13 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.
@@ -70,6 +70,9 @@ See [docs/tools.md](./docs/tools.md) for the full tool reference. Quick list:
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
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) |
75
+ | `edgegate_publish_promptpack` | Publish a promptpack version so it is usable in pipelines (completes the create → publish → use lifecycle) |
73
76
 
74
77
  ## Skills
75
78
 
@@ -82,6 +85,7 @@ Slash commands you can invoke directly:
82
85
  - `/edgegate-compare` — diff two runs (auto-baseline) with REGRESSION/IMPROVEMENT/NEUTRAL verdict
83
86
  - `/edgegate-export` — save a run report as a markdown file (for PR comments, Slack, compliance)
84
87
  - `/edgegate-import` — import a public Hugging Face ONNX model and get an artifact_id
88
+ - `/edgegate-promptpacks` — list existing promptpacks or create a new one with generated test cases
85
89
 
86
90
  ## License
87
91
 
package/dist/client.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { APIKeyCreateResponse, HFImportJob, 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;
@@ -70,5 +70,8 @@ export declare class EdgeGateClient {
70
70
  filename?: string;
71
71
  }): Promise<HFImportJob>;
72
72
  getHuggingFaceImportJob(workspaceId: string, jobId: string): Promise<HFImportJob>;
73
+ listPromptPacks(workspaceId: string): Promise<PromptPackSummary[]>;
74
+ createPromptPack(workspaceId: string, body: PromptPackCreateBody): Promise<PromptPackSummary>;
75
+ publishPromptPack(workspaceId: string, promptpackId: string, version: string): Promise<PromptPackSummary>;
73
76
  private request;
74
77
  }
package/dist/client.js CHANGED
@@ -66,6 +66,15 @@ export class EdgeGateClient {
66
66
  async getHuggingFaceImportJob(workspaceId, jobId) {
67
67
  return this.request("GET", `/v1/workspaces/${workspaceId}/artifacts/import-huggingface/${jobId}`);
68
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
+ }
75
+ async publishPromptPack(workspaceId, promptpackId, version) {
76
+ return this.request("PUT", `/v1/workspaces/${workspaceId}/promptpacks/${promptpackId}/${version}/publish`);
77
+ }
69
78
  async request(method, path, body) {
70
79
  const url = `${this.apiUrl}${path}`;
71
80
  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
@@ -14,6 +14,9 @@ import { setupGithubActionHandler, setupGithubActionInputSchema, } from "./tools
14
14
  import { compareRunsHandler, compareRunsInputSchema, } from "./tools/compare_runs.js";
15
15
  import { exportRunReportHandler, exportRunReportInputSchema, } from "./tools/export_run_report.js";
16
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";
19
+ import { publishPromptpackHandler, publishPromptpackInputSchema, } from "./tools/publish_promptpack.js";
17
20
  const TOOLS = [
18
21
  {
19
22
  name: "edgegate_setup_workspace",
@@ -89,6 +92,32 @@ const TOOLS = [
89
92
  schema: importHuggingfaceModelInputSchema,
90
93
  handler: importHuggingfaceModelHandler,
91
94
  },
95
+ {
96
+ name: "edgegate_list_promptpacks",
97
+ description: "List all promptpacks in an EdgeGate workspace. Returns a markdown table with " +
98
+ "promptpack_id, version, case count, published status, and creation date. " +
99
+ "Use include_unpublished=false to hide draft packs.",
100
+ schema: listPromptpacksInputSchema,
101
+ handler: listPromptpacksHandler,
102
+ },
103
+ {
104
+ name: "edgegate_create_promptpack",
105
+ description: "Create a new promptpack in an EdgeGate workspace. A promptpack defines the test " +
106
+ "cases (prompts, expected outputs, per-case overrides) that regression pipelines " +
107
+ "evaluate. Requires admin role on the workspace. Packs are immutable after creation — " +
108
+ "bump the version to update.",
109
+ schema: createPromptpackInputSchema,
110
+ handler: createPromptpackHandler,
111
+ },
112
+ {
113
+ name: "edgegate_publish_promptpack",
114
+ description: "Publish a promptpack version in an EdgeGate workspace so it can be referenced in " +
115
+ "pipelines. Newly created packs start as unpublished — call this after " +
116
+ "edgegate_create_promptpack to complete the create → publish → use lifecycle. " +
117
+ "Requires admin role on the workspace. The operation is idempotent.",
118
+ schema: publishPromptpackInputSchema,
119
+ handler: publishPromptpackHandler,
120
+ },
92
121
  ];
93
122
  function getClient() {
94
123
  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":"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"}
@@ -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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAkB,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7D,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAClD,MAAM,WAAW,GAAG,uBAAuB,CAAC;AAC5C,MAAM,WAAW,GAAG,iBAAiB,CAAC;AAEtC,MAAM,cAAc,GAAG,CAAC;KACrB,MAAM,CAAC;IACN,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAC3D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAChD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACzC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,cAAc,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAClD,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;IAC9C,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACjE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACpE,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;QAC9B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;KAC9B,CAAC,CAAC,MAAM,EAAE;CACZ,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,CAAC;IACN,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,KAAK,CAAC,WAAW,EAAE,0CAA0C,CAAC;IACjE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;IACpC,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE;IACnC,SAAS,EAAE,cAAc,CAAC,QAAQ,EAAE;CACrC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC;KACzC,MAAM,CAAC;IACN,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IAC/B,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,KAAK,CACJ,iBAAiB,EACjB,gDAAgD,CACjD;IACH,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,KAAK,CAAC,WAAW,EAAE,qCAAqC,CAAC;IAC5D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IAC5C,IAAI,EAAE,CAAC;SACJ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SAChC,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,EAAE;IACb,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE;IACnC,KAAK,EAAE,CAAC;SACL,KAAK,CAAC,UAAU,CAAC;SACjB,GAAG,CAAC,CAAC,EAAE,+BAA+B,CAAC;SACvC,GAAG,CAAC,EAAE,EAAE,iCAAiC,CAAC;CAC9C,CAAC;KACD,MAAM,EAAE,CAAC;AAIZ,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAsB,EACtB,KAA4B;IAE5B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG;YACd,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;YAC1E,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;YACrD,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjE,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,YAAY,EAAE;YAC7D,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO;SACR,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE;wBACJ,wBAAwB,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,IAAI;wBAC9D,EAAE;wBACF,SAAS,IAAI,CAAC,EAAE,EAAE;wBAClB,KAAK,IAAI,CAAC,UAAU,UAAU;wBAC9B,sIAAsI;wBACtI,aAAa,IAAI,CAAC,MAAM,EAAE;wBAC1B,EAAE;wBACF,uBAAuB;wBACvB,8BAA8B;wBAC9B,UAAU;wBACV,uBAAuB,IAAI,CAAC,aAAa,IAAI;wBAC7C,4BAA4B,IAAI,CAAC,OAAO,IAAI;wBAC5C,SAAS;wBACT,MAAM;qBACP,CAAC,IAAI,CAAC,IAAI,CAAC;iBACb;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;YACjC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EACF,mBAAmB,KAAK,CAAC,aAAa,kBAAkB,KAAK,CAAC,OAAO,oBAAoB;gCACzF,gDAAgD,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc;yBACzF;qBACF;iBACF,CAAC;YACJ,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,8DAA8D;yBACrE;qBACF;iBACF,CAAC;YACJ,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC7C,uDAAuD;gBACvD,IAAI,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC;gBAC5B,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBACtC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;wBACzE,UAAU;4BACR,0BAA0B,MAAM,CAAC,MAAM,CAAC,MAAM,cAAc;gCAC3D,MAAM,CAAC,MAAoB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACvF,CAAC;yBAAM,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;wBACjE,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACrC,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,qCAAqC;gBACvC,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,qCAAqC,GAAG,CAAC,MAAM,SAAS,UAAU,EAAE;yBAC3E;qBACF;iBACF,CAAC;YACJ,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EACF,4EAA4E;gCAC5E,uEAAuE;yBAC1E;qBACF;iBACF,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,EAAE;iBACzE;aACF,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,SAAS,SAAS,CAAC,OAAe;IAChC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;AACnE,CAAC"}
@@ -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"}
@@ -0,0 +1,18 @@
1
+ import { z } from "zod";
2
+ import { EdgeGateClient } from "../client.js";
3
+ import type { ToolResult } from "./setup_workspace.js";
4
+ export declare const publishPromptpackInputSchema: z.ZodObject<{
5
+ workspace_id: z.ZodString;
6
+ promptpack_id: z.ZodString;
7
+ version: z.ZodString;
8
+ }, "strict", z.ZodTypeAny, {
9
+ workspace_id: string;
10
+ promptpack_id: string;
11
+ version: string;
12
+ }, {
13
+ workspace_id: string;
14
+ promptpack_id: string;
15
+ version: string;
16
+ }>;
17
+ export type PublishPromptpackInput = z.infer<typeof publishPromptpackInputSchema>;
18
+ export declare function publishPromptpackHandler(client: EdgeGateClient, input: PublishPromptpackInput): Promise<ToolResult>;
@@ -0,0 +1,108 @@
1
+ import { z } from "zod";
2
+ import { EdgeGateError } from "../client.js";
3
+ const promptpackIdRegex = /^[a-zA-Z0-9_-]{1,64}$/;
4
+ const semverRegex = /^\d+\.\d+\.\d+$/;
5
+ export const publishPromptpackInputSchema = z
6
+ .object({
7
+ workspace_id: z.string().uuid(),
8
+ promptpack_id: z
9
+ .string()
10
+ .regex(promptpackIdRegex, "promptpack_id must match ^[a-zA-Z0-9_-]{1,64}$"),
11
+ version: z
12
+ .string()
13
+ .regex(semverRegex, "version must be semver (e.g. 1.0.0)"),
14
+ })
15
+ .strict();
16
+ export async function publishPromptpackHandler(client, input) {
17
+ try {
18
+ const pack = await client.publishPromptPack(input.workspace_id, input.promptpack_id, input.version);
19
+ return {
20
+ content: [
21
+ {
22
+ type: "text",
23
+ text: [
24
+ `Published **${pack.promptpack_id}@${pack.version}**`,
25
+ ``,
26
+ `- id: ${pack.id}`,
27
+ `- ${pack.case_count} case(s)`,
28
+ `- published: ${pack.published}`,
29
+ `- sha256: ${pack.sha256}`,
30
+ ``,
31
+ `The pack is now usable as \`promptpack_id\` in edgegate_create_pipeline.`,
32
+ ].join("\n"),
33
+ },
34
+ ],
35
+ };
36
+ }
37
+ catch (err) {
38
+ if (err instanceof EdgeGateError) {
39
+ if (err.status === 404) {
40
+ return {
41
+ isError: true,
42
+ content: [
43
+ {
44
+ type: "text",
45
+ text: `Promptpack ${input.promptpack_id}@${input.version} not found in this workspace. ` +
46
+ `List your packs with edgegate_list_promptpacks.`,
47
+ },
48
+ ],
49
+ };
50
+ }
51
+ if (err.status === 403) {
52
+ return {
53
+ isError: true,
54
+ content: [
55
+ {
56
+ type: "text",
57
+ text: "You need admin role on this workspace to publish promptpacks.",
58
+ },
59
+ ],
60
+ };
61
+ }
62
+ // 409 or any response indicating "already published" — treat as idempotent success
63
+ if (err.status === 409) {
64
+ const lowerDetail = err.detail.toLowerCase();
65
+ if (lowerDetail.includes("already published") || lowerDetail.includes("already")) {
66
+ return {
67
+ content: [
68
+ {
69
+ type: "text",
70
+ text: [
71
+ `**${input.promptpack_id}@${input.version}** is already published (idempotent).`,
72
+ ``,
73
+ `The pack is usable as \`promptpack_id\` in edgegate_create_pipeline.`,
74
+ ].join("\n"),
75
+ },
76
+ ],
77
+ };
78
+ }
79
+ return {
80
+ isError: true,
81
+ content: [
82
+ { type: "text", text: `EdgeGate returned ${err.status}: ${err.detail}` },
83
+ ],
84
+ };
85
+ }
86
+ if (err.status === 401) {
87
+ return {
88
+ isError: true,
89
+ content: [
90
+ {
91
+ type: "text",
92
+ text: "EDGEGATE_API_KEY is missing, expired, or revoked. Generate a fresh key at " +
93
+ "https://edgegate.frozo.ai/workspace/<id>/settings#api-keys and retry.",
94
+ },
95
+ ],
96
+ };
97
+ }
98
+ return {
99
+ isError: true,
100
+ content: [
101
+ { type: "text", text: `EdgeGate returned ${err.status}: ${err.detail}` },
102
+ ],
103
+ };
104
+ }
105
+ throw err;
106
+ }
107
+ }
108
+ //# sourceMappingURL=publish_promptpack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish_promptpack.js","sourceRoot":"","sources":["../../src/tools/publish_promptpack.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -143,3 +143,45 @@ export interface RunComparison {
143
143
  diff: RunDiffPayload;
144
144
  created_at: string;
145
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.3.0";
2
- export declare const USER_AGENT = "edgegate-mcp/0.3.0";
1
+ export declare const VERSION = "0.4.1";
2
+ export declare const USER_AGENT = "edgegate-mcp/0.4.1";
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
- export const VERSION = "0.3.0";
1
+ export const VERSION = "0.4.1";
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.3.0",
3
+ "version": "0.4.1",
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.3.0",
3
+ "version": "0.4.1",
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",
@@ -24,6 +24,7 @@
24
24
  "skills/edgegate-audit.md",
25
25
  "skills/edgegate-compare.md",
26
26
  "skills/edgegate-export.md",
27
- "skills/edgegate-import.md"
27
+ "skills/edgegate-import.md",
28
+ "skills/edgegate-promptpacks.md"
28
29
  ]
29
30
  }
@@ -0,0 +1,97 @@
1
+ ---
2
+ name: edgegate-promptpacks
3
+ description: List, create, or publish EdgeGate promptpacks. Use when the user says "list my promptpacks", "what packs do I have", "create a promptpack", "make a new pack", "publish a pack", "I need a text embedding pack", or any variation on viewing, authoring, or activating test-case packs for EdgeGate pipelines.
4
+ ---
5
+
6
+ # /edgegate-promptpacks
7
+
8
+ The user wants to list existing promptpacks in their workspace, create a new one, or publish one so it is usable in pipelines.
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
+ - "publish a promptpack" / "activate a pack" / "make this pack usable"
16
+ - "I need a text embedding pack" / "create an LLM completion benchmark"
17
+ - "set up test cases for my image classification model"
18
+
19
+ ## Decision tree
20
+
21
+ 1. **Confirm workspace.** If you don't have a `workspace_id`, call `edgegate_setup_workspace` with no args and ask which workspace to use.
22
+
23
+ 2. **List first if no specific pack mentioned.**
24
+ - Call `edgegate_list_promptpacks({ workspace_id, include_unpublished: true })`
25
+ - Show the user what already exists — they may be able to reuse an existing pack.
26
+
27
+ 3. **If creating:**
28
+ a. Ask the user what kind of model the pack is for if not clear:
29
+ - Text/LLM completion (prompt → generated text)
30
+ - Text embedding (prompt → vector; validation typically `type: "none"`)
31
+ - Image classification (structured output; validate with `json_schema`)
32
+ b. Suggest 3–5 sensible test cases based on use case (Claude can generate them — see templates below).
33
+ c. Confirm `promptpack_id` (slug, no spaces), `version` (start at `1.0.0` unless user says otherwise), and `name`.
34
+ d. Call `edgegate_create_promptpack(...)`.
35
+ e. **Immediately publish** — call `edgegate_publish_promptpack({ workspace_id, promptpack_id, version })` right after creation. Do NOT wait for the user to ask. Packs start as `published: false` and are unusable in pipelines until published.
36
+
37
+ 4. **If publishing an existing pack:**
38
+ - Confirm `promptpack_id` and `version` (use `edgegate_list_promptpacks` if unsure).
39
+ - Call `edgegate_publish_promptpack({ workspace_id, promptpack_id, version })`.
40
+ - The operation is idempotent — safe to call even if already published.
41
+
42
+ ## Case templates by model type
43
+
44
+ ### Text embedding / similarity
45
+ ```json
46
+ [
47
+ { "case_id": "short-greeting", "name": "Short greeting", "prompt": "hello world", "expected": { "type": "none" } },
48
+ { "case_id": "sentence-pair", "name": "Sentence pair", "prompt": "The quick brown fox jumps.", "expected": { "type": "none" } },
49
+ { "case_id": "long-paragraph", "name": "Long paragraph", "prompt": "Embeddings capture semantic meaning...", "expected": { "type": "none" } }
50
+ ]
51
+ ```
52
+
53
+ ### LLM completion (exact or regex validation)
54
+ ```json
55
+ [
56
+ { "case_id": "capital-france", "name": "Capital of France", "prompt": "What is the capital of France?", "expected": { "type": "exact", "text": "Paris" } },
57
+ { "case_id": "hello-response", "name": "Hello response", "prompt": "Say hello.", "expected": { "type": "regex", "pattern": "(?i)hello" } },
58
+ { "case_id": "add-numbers", "name": "Add two numbers", "prompt": "What is 3 + 4?", "expected": { "type": "exact", "text": "7" } }
59
+ ]
60
+ ```
61
+
62
+ ### Structured / JSON output
63
+ ```json
64
+ [
65
+ {
66
+ "case_id": "classify-cat",
67
+ "name": "Classify cat image description",
68
+ "prompt": "Classify: a furry four-legged animal with whiskers.",
69
+ "expected": {
70
+ "type": "json_schema",
71
+ "schema": { "type": "object", "properties": { "label": { "type": "string" } }, "required": ["label"] }
72
+ }
73
+ }
74
+ ]
75
+ ```
76
+
77
+ ## Versioning rules
78
+
79
+ - Start at `1.0.0` unless the user specifies otherwise.
80
+ - Packs are **immutable** — to update, bump the patch (e.g. `1.0.0` → `1.0.1`) and create a new pack.
81
+ - Only published packs can be referenced in pipelines. Always call `edgegate_publish_promptpack` immediately after `edgegate_create_promptpack` — do not make the user do this manually.
82
+
83
+ ## Full lifecycle (always follow this sequence)
84
+
85
+ ```
86
+ edgegate_create_promptpack(...) # creates pack with published=false
87
+ edgegate_publish_promptpack(...) # publishes it — now usable in pipelines
88
+ edgegate_create_pipeline(...) # can now reference the promptpack_id
89
+ ```
90
+
91
+ ## Failure modes
92
+
93
+ - **409 conflict on create** — (promptpack_id, version) already exists. Bump the version and retry.
94
+ - **409 "already published" on publish** — treated as success (idempotent); the pack is already live.
95
+ - **403 forbidden** — user needs admin role on the workspace.
96
+ - **404 on publish** — promptpack_id or version not found; confirm with `edgegate_list_promptpacks`.
97
+ - **400 / schema error on create** — 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.