jetty-mcp-server 1.0.0 → 1.0.3

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
@@ -14,15 +14,14 @@ Set your API token:
14
14
  export JETTY_API_TOKEN="mlc_your_token_here"
15
15
  ```
16
16
 
17
- Get a token at [flows.jetty.io](https://flows.jetty.io) → Settings → API Tokens.
17
+ Get a token at [jetty.io](https://jetty.io) → Settings → API Tokens.
18
18
 
19
19
  ## Environment Variables
20
20
 
21
21
  | Variable | Required | Default | Description |
22
22
  |----------|----------|---------|-------------|
23
23
  | `JETTY_API_TOKEN` | Yes | — | Your Jetty API token (`mlc_...`) |
24
- | `JETTY_DOCK_URL` | No | `https://dock.jetty.io` | Dock API base URL |
25
- | `JETTY_FLOWS_URL` | No | `https://flows-api.jetty.io` | Flows API base URL |
24
+ | `JETTY_API_URL` | No | `https://flows-api.jetty.io` | API base URL |
26
25
 
27
26
  ## Configuration
28
27
 
package/dist/client.d.ts CHANGED
@@ -1,11 +1,10 @@
1
1
  export declare class JettyClient {
2
2
  private token;
3
- private dockUrl;
4
- private flowsUrl;
3
+ private apiUrl;
5
4
  constructor();
5
+ private requireToken;
6
6
  private request;
7
- private dock;
8
- private flows;
7
+ private api;
9
8
  listCollections(): Promise<unknown>;
10
9
  getCollection(collection: string): Promise<unknown>;
11
10
  listTasks(collection: string): Promise<unknown>;
@@ -16,8 +15,11 @@ export declare class JettyClient {
16
15
  description?: string;
17
16
  }): Promise<unknown>;
18
17
  deleteTask(collection: string, task: string): Promise<unknown>;
19
- runWorkflow(collection: string, task: string, initParams?: Record<string, unknown>): Promise<unknown>;
20
- runWorkflowSync(collection: string, task: string, initParams?: Record<string, unknown>): Promise<unknown>;
18
+ getTrialStatus(collection: string): Promise<unknown>;
19
+ activateTrial(collection: string): Promise<unknown>;
20
+ getCollectionEnvironment(collection: string): Promise<unknown>;
21
+ runWorkflow(collection: string, task: string, initParams?: Record<string, unknown>, useTrialKeys?: boolean): Promise<unknown>;
22
+ runWorkflowSync(collection: string, task: string, initParams?: Record<string, unknown>, useTrialKeys?: boolean): Promise<unknown>;
21
23
  listTrajectories(collection: string, task: string, limit?: number, page?: number): Promise<unknown>;
22
24
  getTrajectory(collection: string, task: string, trajectoryId: string): Promise<unknown>;
23
25
  getStats(collection: string, task: string): Promise<unknown>;
@@ -26,5 +28,14 @@ export declare class JettyClient {
26
28
  listStepTemplates(): Promise<unknown>;
27
29
  getStepTemplate(name: string): Promise<unknown>;
28
30
  setEnvironmentVars(collection: string, vars: Record<string, string>): Promise<unknown>;
31
+ listRoutines(collection: string, task?: string): Promise<unknown>;
32
+ getRoutine(collection: string, task: string, name: string): Promise<unknown>;
33
+ createRoutine(collection: string, task: string, body: Record<string, unknown>): Promise<unknown>;
34
+ updateRoutine(collection: string, task: string, name: string, patch: Record<string, unknown>): Promise<unknown>;
35
+ deleteRoutine(collection: string, task: string, name: string): Promise<unknown>;
36
+ pauseRoutine(collection: string, task: string, name: string): Promise<unknown>;
37
+ resumeRoutine(collection: string, task: string, name: string): Promise<unknown>;
38
+ runRoutineNow(collection: string, task: string, name: string): Promise<unknown>;
39
+ listRoutineRuns(collection: string, task: string, name: string, limit?: number): Promise<unknown>;
29
40
  }
30
41
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAGA,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;;YAeX,OAAO;IAyBrB,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,KAAK;IAKP,eAAe;IAIf,aAAa,CAAC,UAAU,EAAE,MAAM;IAKhC,SAAS,CAAC,UAAU,EAAE,MAAM;IAI5B,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAIxC,UAAU,CACd,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,EACjB,WAAW,CAAC,EAAE,MAAM;IAShB,UAAU,CACd,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE;IASjD,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAO3C,WAAW,CACf,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAYhC,eAAe,CACnB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAahC,gBAAgB,CACpB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,KAAK,SAAK,EACV,IAAI,SAAI;IAOJ,aAAa,CACjB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM;IAQhB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAKzC,QAAQ,CACZ,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM;IAaV,eAAe,CAAC,UAAU,EAAE,MAAM;IAKlC,iBAAiB;IAIjB,eAAe,CAAC,IAAI,EAAE,MAAM;IAK5B,kBAAkB,CACtB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAQ/B"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -1,23 +1,33 @@
1
- const DOCK_URL = process.env.JETTY_DOCK_URL || "https://dock.jetty.io";
2
- const FLOWS_URL = process.env.JETTY_FLOWS_URL || "https://flows-api.jetty.io";
1
+ import { readFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { join } from "node:path";
4
+ const DEFAULT_API_URL = "https://flows-api.jetty.io";
5
+ // The `jetty` CLI / Claude Code skill writes the collection-scoped `mlc_` key
6
+ // here on `jetty login`. We fall back to it so an already-logged-in user does
7
+ // not also have to plumb JETTY_API_TOKEN into the MCP server's env. Resolved
8
+ // lazily (not memoized at module load) so HOME changes are honoured.
9
+ function tokenFilePath() {
10
+ return join(homedir(), ".config", "jetty", "token");
11
+ }
3
12
  export class JettyClient {
4
13
  token;
5
- dockUrl;
6
- flowsUrl;
14
+ apiUrl;
7
15
  constructor() {
8
- const token = process.env.JETTY_API_TOKEN;
9
- if (!token) {
10
- throw new Error("JETTY_API_TOKEN environment variable is required. " +
11
- "Get your token at https://flows.jetty.io → Settings → API Tokens");
16
+ this.token = resolveToken();
17
+ this.apiUrl = process.env.JETTY_API_URL || DEFAULT_API_URL;
18
+ }
19
+ requireToken() {
20
+ if (!this.token) {
21
+ throw new Error("No Jetty token found. Set JETTY_API_TOKEN, or run `jetty login` " +
22
+ `(writes ${tokenFilePath()}). ` +
23
+ "Get a token at https://jetty.io → Settings → API Tokens");
12
24
  }
13
- this.token = token;
14
- this.dockUrl = DOCK_URL;
15
- this.flowsUrl = FLOWS_URL;
25
+ return this.token;
16
26
  }
17
- async request(baseUrl, path, options = {}) {
18
- const url = `${baseUrl}${path}`;
27
+ async request(path, options = {}) {
28
+ const url = `${this.apiUrl}${path}`;
19
29
  const headers = {
20
- Authorization: `Bearer ${this.token}`,
30
+ Authorization: `Bearer ${this.requireToken()}`,
21
31
  ...(options.headers || {}),
22
32
  };
23
33
  const res = await fetch(url, { ...options, headers });
@@ -31,78 +41,92 @@ export class JettyClient {
31
41
  }
32
42
  return res.text();
33
43
  }
34
- dock(path, options) {
35
- return this.request(this.dockUrl, path, options);
36
- }
37
- flows(path, options) {
38
- return this.request(this.flowsUrl, path, options);
44
+ api(path, options) {
45
+ return this.request(path, options);
39
46
  }
40
47
  // Collections
41
48
  async listCollections() {
42
- return this.dock("/api/v1/collections/");
49
+ return this.api("/api/v1/collections/");
43
50
  }
44
51
  async getCollection(collection) {
45
- return this.dock(`/api/v1/collections/${collection}`);
52
+ return this.api(`/api/v1/collections/${collection}`);
46
53
  }
47
54
  // Tasks
48
55
  async listTasks(collection) {
49
- return this.dock(`/api/v1/tasks/${collection}/`);
56
+ return this.api(`/api/v1/tasks/${collection}/`);
50
57
  }
51
58
  async getTask(collection, task) {
52
- return this.dock(`/api/v1/tasks/${collection}/${task}`);
59
+ return this.api(`/api/v1/tasks/${collection}/${task}`);
53
60
  }
54
61
  async createTask(collection, name, workflow, description) {
55
- return this.dock(`/api/v1/tasks/${collection}`, {
62
+ return this.api(`/api/v1/tasks/${collection}`, {
56
63
  method: "POST",
57
64
  headers: { "Content-Type": "application/json" },
58
65
  body: JSON.stringify({ name, description: description || "", workflow }),
59
66
  });
60
67
  }
61
68
  async updateTask(collection, task, updates) {
62
- return this.dock(`/api/v1/tasks/${collection}/${task}`, {
69
+ return this.api(`/api/v1/tasks/${collection}/${task}`, {
63
70
  method: "PUT",
64
71
  headers: { "Content-Type": "application/json" },
65
72
  body: JSON.stringify(updates),
66
73
  });
67
74
  }
68
75
  async deleteTask(collection, task) {
69
- return this.dock(`/api/v1/tasks/${collection}/${task}`, {
76
+ return this.api(`/api/v1/tasks/${collection}/${task}`, {
70
77
  method: "DELETE",
71
78
  });
72
79
  }
80
+ // Trial keys
81
+ async getTrialStatus(collection) {
82
+ return this.api(`/api/v1/trial/${collection}`);
83
+ }
84
+ async activateTrial(collection) {
85
+ return this.api(`/api/v1/trial/${collection}/activate`, {
86
+ method: "POST",
87
+ });
88
+ }
89
+ // Collection environment
90
+ async getCollectionEnvironment(collection) {
91
+ return this.api(`/api/v1/collections/${collection}/environment`);
92
+ }
73
93
  // Run workflows
74
- async runWorkflow(collection, task, initParams) {
94
+ async runWorkflow(collection, task, initParams, useTrialKeys) {
75
95
  const formData = new FormData();
76
- formData.append("bakery_host", this.dockUrl);
77
96
  formData.append("init_params", JSON.stringify(initParams || {}));
78
- return this.flows(`/api/v1/run/${collection}/${task}`, {
97
+ if (useTrialKeys) {
98
+ formData.append("use_trial_keys", "true");
99
+ }
100
+ return this.api(`/api/v1/run/${collection}/${task}`, {
79
101
  method: "POST",
80
102
  body: formData,
81
103
  });
82
104
  }
83
- async runWorkflowSync(collection, task, initParams) {
105
+ async runWorkflowSync(collection, task, initParams, useTrialKeys) {
84
106
  const formData = new FormData();
85
- formData.append("bakery_host", this.dockUrl);
86
107
  formData.append("init_params", JSON.stringify(initParams || {}));
87
- return this.flows(`/api/v1/run-sync/${collection}/${task}`, {
108
+ if (useTrialKeys) {
109
+ formData.append("use_trial_keys", "true");
110
+ }
111
+ return this.api(`/api/v1/run-sync/${collection}/${task}`, {
88
112
  method: "POST",
89
113
  body: formData,
90
114
  });
91
115
  }
92
116
  // Trajectories
93
117
  async listTrajectories(collection, task, limit = 10, page = 1) {
94
- return this.flows(`/api/v1/db/trajectories/${collection}/${task}?limit=${limit}&page=${page}`);
118
+ return this.api(`/api/v1/db/trajectories/${collection}/${task}?limit=${limit}&page=${page}`);
95
119
  }
96
120
  async getTrajectory(collection, task, trajectoryId) {
97
- return this.flows(`/api/v1/db/trajectory/${collection}/${task}/${trajectoryId}`);
121
+ return this.api(`/api/v1/db/trajectory/${collection}/${task}/${trajectoryId}`);
98
122
  }
99
123
  // Stats
100
124
  async getStats(collection, task) {
101
- return this.flows(`/api/v1/db/stats/${collection}/${task}`);
125
+ return this.api(`/api/v1/db/stats/${collection}/${task}`);
102
126
  }
103
127
  // Labels
104
128
  async addLabel(collection, task, trajectoryId, key, value, author) {
105
- return this.flows(`/api/v1/trajectory/${collection}/${task}/${trajectoryId}/labels`, {
129
+ return this.api(`/api/v1/trajectory/${collection}/${task}/${trajectoryId}/labels`, {
106
130
  method: "POST",
107
131
  headers: { "Content-Type": "application/json" },
108
132
  body: JSON.stringify({ key, value, author }),
@@ -110,22 +134,84 @@ export class JettyClient {
110
134
  }
111
135
  // Workflow logs
112
136
  async getWorkflowLogs(workflowId) {
113
- return this.flows(`/api/v1/workflows-logs/${workflowId}`);
137
+ return this.api(`/api/v1/workflows-logs/${workflowId}`);
114
138
  }
115
139
  // Step templates
116
140
  async listStepTemplates() {
117
- return this.request(this.flowsUrl, "/api/v1/step-templates");
141
+ return this.request("/api/v1/step-templates");
118
142
  }
119
143
  async getStepTemplate(name) {
120
- return this.request(this.flowsUrl, `/api/v1/step-templates/${name}`);
144
+ return this.request(`/api/v1/step-templates/${name}`);
121
145
  }
122
146
  // Environment variables
123
147
  async setEnvironmentVars(collection, vars) {
124
- return this.dock(`/api/v1/collections/${collection}/environment`, {
148
+ return this.api(`/api/v1/collections/${collection}/environment`, {
125
149
  method: "PATCH",
126
150
  headers: { "Content-Type": "application/json" },
127
151
  body: JSON.stringify({ environment_variables: vars }),
128
152
  });
129
153
  }
154
+ // Routines (scheduled runs)
155
+ async listRoutines(collection, task) {
156
+ const path = task
157
+ ? `/api/v1/routines/${collection}/${task}`
158
+ : `/api/v1/routines/${collection}`;
159
+ return this.api(path);
160
+ }
161
+ async getRoutine(collection, task, name) {
162
+ return this.api(`/api/v1/routines/${collection}/${task}/${name}`);
163
+ }
164
+ async createRoutine(collection, task, body) {
165
+ return this.api(`/api/v1/routines/${collection}/${task}`, {
166
+ method: "POST",
167
+ headers: { "Content-Type": "application/json" },
168
+ body: JSON.stringify(body),
169
+ });
170
+ }
171
+ async updateRoutine(collection, task, name, patch) {
172
+ return this.api(`/api/v1/routines/${collection}/${task}/${name}`, {
173
+ method: "PATCH",
174
+ headers: { "Content-Type": "application/json" },
175
+ body: JSON.stringify(patch),
176
+ });
177
+ }
178
+ async deleteRoutine(collection, task, name) {
179
+ return this.api(`/api/v1/routines/${collection}/${task}/${name}`, {
180
+ method: "DELETE",
181
+ });
182
+ }
183
+ async pauseRoutine(collection, task, name) {
184
+ return this.api(`/api/v1/routines/${collection}/${task}/${name}/pause`, { method: "POST" });
185
+ }
186
+ async resumeRoutine(collection, task, name) {
187
+ return this.api(`/api/v1/routines/${collection}/${task}/${name}/resume`, { method: "POST" });
188
+ }
189
+ async runRoutineNow(collection, task, name) {
190
+ return this.api(`/api/v1/routines/${collection}/${task}/${name}/run-now`, { method: "POST" });
191
+ }
192
+ async listRoutineRuns(collection, task, name, limit) {
193
+ const qs = typeof limit === "number" ? `?limit=${limit}` : "";
194
+ return this.api(`/api/v1/routines/${collection}/${task}/${name}/runs${qs}`);
195
+ }
196
+ }
197
+ /**
198
+ * Resolve the API token: prefer JETTY_API_TOKEN (trimmed, non-empty), then the
199
+ * token file written by `jetty login`. The env var is checked for emptiness
200
+ * because the plugin's .mcp.json may pass it through as "" — which must not
201
+ * count as "set" and must not block the file fallback.
202
+ */
203
+ function resolveToken() {
204
+ const fromEnv = process.env.JETTY_API_TOKEN?.trim();
205
+ if (fromEnv)
206
+ return fromEnv;
207
+ try {
208
+ const fromFile = readFileSync(tokenFilePath(), "utf8").trim();
209
+ if (fromFile)
210
+ return fromFile;
211
+ }
212
+ catch {
213
+ // file absent / unreadable — fall through to undefined
214
+ }
215
+ return undefined;
130
216
  }
131
217
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,uBAAuB,CAAC;AACvE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,4BAA4B,CAAC;AAE9E,MAAM,OAAO,WAAW;IACd,KAAK,CAAS;IACd,OAAO,CAAS;IAChB,QAAQ,CAAS;IAEzB;QACE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,oDAAoD;gBAClD,kEAAkE,CACrE,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,OAAe,EACf,IAAY,EACZ,UAAuB,EAAE;QAEzB,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,IAAI,EAAE,CAAC;QAChC,MAAM,OAAO,GAA2B;YACtC,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;YACrC,GAAG,CAAE,OAAO,CAAC,OAAkC,IAAI,EAAE,CAAC;SACvD,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAEtD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC1D,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC7C,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAEO,IAAI,CAAC,IAAY,EAAE,OAAqB;QAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAEO,KAAK,CAAC,IAAY,EAAE,OAAqB;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,cAAc;IACd,KAAK,CAAC,eAAe;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,UAAkB;QACpC,OAAO,IAAI,CAAC,IAAI,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,QAAQ;IACR,KAAK,CAAC,SAAS,CAAC,UAAkB;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,UAAU,GAAG,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAkB,EAAE,IAAY;QAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,UAAU,IAAI,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,UAAU,CACd,UAAkB,EAClB,IAAY,EACZ,QAAiB,EACjB,WAAoB;QAEpB,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,UAAU,EAAE,EAAE;YAC9C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC;SACzE,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CACd,UAAkB,EAClB,IAAY,EACZ,OAAqD;QAErD,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,UAAU,IAAI,IAAI,EAAE,EAAE;YACtD,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAAkB,EAAE,IAAY;QAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,UAAU,IAAI,IAAI,EAAE,EAAE;YACtD,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB;IAChB,KAAK,CAAC,WAAW,CACf,UAAkB,EAClB,IAAY,EACZ,UAAoC;QAEpC,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;QAChC,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;QAEjE,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,UAAU,IAAI,IAAI,EAAE,EAAE;YACrD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,UAAkB,EAClB,IAAY,EACZ,UAAoC;QAEpC,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;QAChC,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;QAEjE,OAAO,IAAI,CAAC,KAAK,CAAC,oBAAoB,UAAU,IAAI,IAAI,EAAE,EAAE;YAC1D,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC;IAED,eAAe;IACf,KAAK,CAAC,gBAAgB,CACpB,UAAkB,EAClB,IAAY,EACZ,KAAK,GAAG,EAAE,EACV,IAAI,GAAG,CAAC;QAER,OAAO,IAAI,CAAC,KAAK,CACf,2BAA2B,UAAU,IAAI,IAAI,UAAU,KAAK,SAAS,IAAI,EAAE,CAC5E,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,UAAkB,EAClB,IAAY,EACZ,YAAoB;QAEpB,OAAO,IAAI,CAAC,KAAK,CACf,yBAAyB,UAAU,IAAI,IAAI,IAAI,YAAY,EAAE,CAC9D,CAAC;IACJ,CAAC;IAED,QAAQ;IACR,KAAK,CAAC,QAAQ,CAAC,UAAkB,EAAE,IAAY;QAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,oBAAoB,UAAU,IAAI,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,SAAS;IACT,KAAK,CAAC,QAAQ,CACZ,UAAkB,EAClB,IAAY,EACZ,YAAoB,EACpB,GAAW,EACX,KAAa,EACb,MAAc;QAEd,OAAO,IAAI,CAAC,KAAK,CACf,sBAAsB,UAAU,IAAI,IAAI,IAAI,YAAY,SAAS,EACjE;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;SAC7C,CACF,CAAC;IACJ,CAAC;IAED,gBAAgB;IAChB,KAAK,CAAC,eAAe,CAAC,UAAkB;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,iBAAiB;IACjB,KAAK,CAAC,iBAAiB;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAAY;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,0BAA0B,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,wBAAwB;IACxB,KAAK,CAAC,kBAAkB,CACtB,UAAkB,EAClB,IAA4B;QAE5B,OAAO,IAAI,CAAC,IAAI,CAAC,uBAAuB,UAAU,cAAc,EAAE;YAChE,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC;SACtD,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAQ1C,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,QAmNnE"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA8D1C,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,QAwgBnE"}
package/dist/tools.js CHANGED
@@ -4,6 +4,46 @@ function jsonResult(data) {
4
4
  content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
5
5
  };
6
6
  }
7
+ const PROVIDER_KEYS = [
8
+ "OPENAI_API_KEY",
9
+ "ANTHROPIC_API_KEY",
10
+ "GEMINI_API_KEY",
11
+ "REPLICATE_API_TOKEN",
12
+ ];
13
+ async function detectTrialEligibility(client, collection) {
14
+ try {
15
+ const trialStatus = (await client.getTrialStatus(collection));
16
+ if (!trialStatus.active) {
17
+ return {
18
+ useTrialKeys: false,
19
+ trialInfo: { trial_active: false },
20
+ };
21
+ }
22
+ const env = (await client.getCollectionEnvironment(collection));
23
+ const envKeys = Object.keys(env);
24
+ const hasProviderKeys = PROVIDER_KEYS.some((k) => envKeys.includes(k));
25
+ if (hasProviderKeys) {
26
+ return {
27
+ useTrialKeys: false,
28
+ trialInfo: {
29
+ trial_active: true,
30
+ using_trial_keys: false,
31
+ reason: "Collection has its own provider keys",
32
+ },
33
+ };
34
+ }
35
+ return {
36
+ useTrialKeys: true,
37
+ trialInfo: {
38
+ trial_active: true,
39
+ using_trial_keys: true,
40
+ },
41
+ };
42
+ }
43
+ catch {
44
+ return { useTrialKeys: false, trialInfo: {} };
45
+ }
46
+ }
7
47
  export function registerTools(server, client) {
8
48
  // ── Collections ──────────────────────────────────────────────
9
49
  server.tool("list-collections", "List all collections", {}, async () => {
@@ -48,8 +88,15 @@ export function registerTools(server, client) {
48
88
  updates.description = description;
49
89
  return jsonResult(await client.updateTask(collection, task, updates));
50
90
  });
91
+ // ── Trial Keys ────────────────────────────────────────────────
92
+ server.tool("get-trial-status", "Get trial key status for a collection", { collection: z.string().describe("Collection name") }, async ({ collection }) => {
93
+ return jsonResult(await client.getTrialStatus(collection));
94
+ });
95
+ server.tool("activate-trial", "Activate trial keys for a collection", { collection: z.string().describe("Collection name") }, async ({ collection }) => {
96
+ return jsonResult(await client.activateTrial(collection));
97
+ });
51
98
  // ── Run Workflows ────────────────────────────────────────────
52
- server.tool("run-workflow", "Run a workflow asynchronously (returns immediately with workflow_id)", {
99
+ server.tool("run-workflow", "Run a workflow asynchronously (returns immediately with workflow_id). Auto-detects trial key eligibility.", {
53
100
  collection: z.string().describe("Collection name"),
54
101
  task: z.string().describe("Task name"),
55
102
  init_params: z
@@ -57,9 +104,11 @@ export function registerTools(server, client) {
57
104
  .optional()
58
105
  .describe("Input parameters for the workflow"),
59
106
  }, async ({ collection, task, init_params }) => {
60
- return jsonResult(await client.runWorkflow(collection, task, init_params));
107
+ const { useTrialKeys, trialInfo } = await detectTrialEligibility(client, collection);
108
+ const result = await client.runWorkflow(collection, task, init_params, useTrialKeys);
109
+ return jsonResult({ ...trialInfo, result });
61
110
  });
62
- server.tool("run-workflow-sync", "Run a workflow synchronously (blocks until completion, may take 30-60s)", {
111
+ server.tool("run-workflow-sync", "Run a workflow synchronously (blocks until completion, may take 30-60s). Auto-detects trial key eligibility.", {
63
112
  collection: z.string().describe("Collection name"),
64
113
  task: z.string().describe("Task name"),
65
114
  init_params: z
@@ -67,7 +116,9 @@ export function registerTools(server, client) {
67
116
  .optional()
68
117
  .describe("Input parameters for the workflow"),
69
118
  }, async ({ collection, task, init_params }) => {
70
- return jsonResult(await client.runWorkflowSync(collection, task, init_params));
119
+ const { useTrialKeys, trialInfo } = await detectTrialEligibility(client, collection);
120
+ const result = await client.runWorkflowSync(collection, task, init_params, useTrialKeys);
121
+ return jsonResult({ ...trialInfo, result });
71
122
  });
72
123
  // ── Trajectories ─────────────────────────────────────────────
73
124
  server.tool("list-trajectories", "List recent workflow runs (trajectories) for a task", {
@@ -110,5 +161,182 @@ export function registerTools(server, client) {
110
161
  server.tool("get-step-template", "Get details and schema for a step template", { name: z.string().describe("Step template activity name") }, async ({ name }) => {
111
162
  return jsonResult(await client.getStepTemplate(name));
112
163
  });
164
+ // ── Environment Variables ─────────────────────────────────────
165
+ server.tool("check-secrets", "Check which environment variables a collection has configured vs. what a runbook needs", {
166
+ collection: z.string().describe("Collection name"),
167
+ required_keys: z
168
+ .array(z.string())
169
+ .describe("Environment variable names the runbook requires"),
170
+ }, async ({ collection, required_keys }) => {
171
+ const col = (await client.getCollectionEnvironment(collection));
172
+ const envVars = (col.environment_variables || {});
173
+ const configured = Object.keys(envVars);
174
+ const missing = required_keys.filter((k) => !configured.includes(k));
175
+ return jsonResult({
176
+ configured,
177
+ missing,
178
+ ready: missing.length === 0,
179
+ });
180
+ });
181
+ server.tool("set-environment-vars", "Set environment variables on a collection (merge semantics, pass null to delete a key)", {
182
+ collection: z.string().describe("Collection name"),
183
+ variables: z
184
+ .record(z.string().nullable())
185
+ .describe("Key-value pairs to set (null to delete)"),
186
+ }, async ({ collection, variables }) => {
187
+ return jsonResult(await client.setEnvironmentVars(collection, variables));
188
+ });
189
+ // ── Routines (Scheduled Runs) ─────────────────────────────────
190
+ const cadenceSchema = z
191
+ .object({
192
+ type: z
193
+ .enum(["manual", "hourly", "daily", "weekdays", "weekly"])
194
+ .describe("Cadence type. 'manual' creates a saved invocation preset (no schedule); the others register a Temporal schedule."),
195
+ hour_utc: z
196
+ .number()
197
+ .int()
198
+ .min(0)
199
+ .max(23)
200
+ .optional()
201
+ .describe("Hour of day in UTC (0-23). Required for daily/weekdays/weekly."),
202
+ minute_utc: z
203
+ .number()
204
+ .int()
205
+ .min(0)
206
+ .max(59)
207
+ .optional()
208
+ .describe("Minute of the hour in UTC (0-59). Defaults to 0."),
209
+ day_of_week: z
210
+ .enum(["mon", "tue", "wed", "thu", "fri", "sat", "sun"])
211
+ .optional()
212
+ .describe("Day of week. Required for weekly cadence."),
213
+ })
214
+ .describe("Cadence config. Examples: {type:'hourly', minute_utc:15}, {type:'daily', hour_utc:9}, {type:'weekly', day_of_week:'mon', hour_utc:9}.");
215
+ server.tool("list-routines", "List scheduled routines for a collection (optionally scoped to a task)", {
216
+ collection: z.string().describe("Collection name"),
217
+ task: z
218
+ .string()
219
+ .optional()
220
+ .describe("Task name (omit to list all routines in the collection)"),
221
+ }, async ({ collection, task }) => {
222
+ return jsonResult(await client.listRoutines(collection, task));
223
+ });
224
+ server.tool("get-routine", "Get a single routine including resolved next_run_at from Temporal", {
225
+ collection: z.string().describe("Collection name"),
226
+ task: z.string().describe("Task name"),
227
+ name: z.string().describe("Routine name (unique per collection+task)"),
228
+ }, async ({ collection, task, name }) => {
229
+ return jsonResult(await client.getRoutine(collection, task, name));
230
+ });
231
+ server.tool("create-routine", "Create a scheduled routine for an existing task. init_params_overrides keys must be a subset of task.workflow.init_params.", {
232
+ collection: z.string().describe("Collection name"),
233
+ task: z.string().describe("Task name"),
234
+ name: z.string().describe("Routine name (slug, unique per task)"),
235
+ cadence: cadenceSchema,
236
+ init_params_overrides: z
237
+ .record(z.unknown())
238
+ .optional()
239
+ .describe("Init param overrides. Keys must be a subset of task.workflow.init_params; unknown keys return 400."),
240
+ secret_params: z
241
+ .record(z.unknown())
242
+ .optional()
243
+ .describe("Secrets injected at fire time (encrypted at rest, never logged)."),
244
+ paused: z
245
+ .boolean()
246
+ .optional()
247
+ .describe("Create the routine in paused state"),
248
+ webhook_url: z
249
+ .string()
250
+ .optional()
251
+ .describe("Optional webhook to notify on each run"),
252
+ webhook_secret: z
253
+ .string()
254
+ .optional()
255
+ .describe("Optional shared secret for webhook signing"),
256
+ }, async ({ collection, task, name, cadence, init_params_overrides, secret_params, paused, webhook_url, webhook_secret, }) => {
257
+ const body = { name, cadence };
258
+ if (init_params_overrides !== undefined)
259
+ body.init_params_overrides = init_params_overrides;
260
+ if (secret_params !== undefined)
261
+ body.secret_params = secret_params;
262
+ if (paused !== undefined)
263
+ body.paused = paused;
264
+ if (webhook_url !== undefined)
265
+ body.webhook_url = webhook_url;
266
+ if (webhook_secret !== undefined)
267
+ body.webhook_secret = webhook_secret;
268
+ return jsonResult(await client.createRoutine(collection, task, body));
269
+ });
270
+ server.tool("update-routine", "Patch a routine — provide any subset of cadence/overrides/secrets/paused/webhook fields", {
271
+ collection: z.string().describe("Collection name"),
272
+ task: z.string().describe("Task name"),
273
+ name: z.string().describe("Routine name"),
274
+ cadence: cadenceSchema.optional(),
275
+ init_params_overrides: z
276
+ .record(z.unknown())
277
+ .optional()
278
+ .describe("Replace init param overrides"),
279
+ secret_params: z
280
+ .record(z.unknown())
281
+ .optional()
282
+ .describe("Replace secret params"),
283
+ paused: z.boolean().optional().describe("Pause/resume the routine"),
284
+ webhook_url: z.string().optional().describe("Update webhook URL"),
285
+ webhook_secret: z
286
+ .string()
287
+ .optional()
288
+ .describe("Update webhook signing secret"),
289
+ }, async ({ collection, task, name, cadence, init_params_overrides, secret_params, paused, webhook_url, webhook_secret, }) => {
290
+ const patch = {};
291
+ if (cadence !== undefined)
292
+ patch.cadence = cadence;
293
+ if (init_params_overrides !== undefined)
294
+ patch.init_params_overrides = init_params_overrides;
295
+ if (secret_params !== undefined)
296
+ patch.secret_params = secret_params;
297
+ if (paused !== undefined)
298
+ patch.paused = paused;
299
+ if (webhook_url !== undefined)
300
+ patch.webhook_url = webhook_url;
301
+ if (webhook_secret !== undefined)
302
+ patch.webhook_secret = webhook_secret;
303
+ return jsonResult(await client.updateRoutine(collection, task, name, patch));
304
+ });
305
+ server.tool("delete-routine", "Delete a routine and unregister its Temporal schedule", {
306
+ collection: z.string().describe("Collection name"),
307
+ task: z.string().describe("Task name"),
308
+ name: z.string().describe("Routine name"),
309
+ }, async ({ collection, task, name }) => {
310
+ return jsonResult(await client.deleteRoutine(collection, task, name));
311
+ });
312
+ server.tool("pause-routine", "Pause a routine (stops future fires until resumed)", {
313
+ collection: z.string().describe("Collection name"),
314
+ task: z.string().describe("Task name"),
315
+ name: z.string().describe("Routine name"),
316
+ }, async ({ collection, task, name }) => {
317
+ return jsonResult(await client.pauseRoutine(collection, task, name));
318
+ });
319
+ server.tool("resume-routine", "Resume a paused routine", {
320
+ collection: z.string().describe("Collection name"),
321
+ task: z.string().describe("Task name"),
322
+ name: z.string().describe("Routine name"),
323
+ }, async ({ collection, task, name }) => {
324
+ return jsonResult(await client.resumeRoutine(collection, task, name));
325
+ });
326
+ server.tool("run-routine-now", "Fire a routine immediately, bypassing the schedule. Returns workflow_id (parity with run-workflow).", {
327
+ collection: z.string().describe("Collection name"),
328
+ task: z.string().describe("Task name"),
329
+ name: z.string().describe("Routine name"),
330
+ }, async ({ collection, task, name }) => {
331
+ return jsonResult(await client.runRoutineNow(collection, task, name));
332
+ });
333
+ server.tool("list-routine-runs", "List recent trajectories triggered by this routine (filtered by triggered_by_routine_id)", {
334
+ collection: z.string().describe("Collection name"),
335
+ task: z.string().describe("Task name"),
336
+ name: z.string().describe("Routine name"),
337
+ limit: z.number().optional().describe("Max results"),
338
+ }, async ({ collection, task, name, limit }) => {
339
+ return jsonResult(await client.listRoutineRuns(collection, task, name, limit));
340
+ });
113
341
  }
114
342
  //# sourceMappingURL=tools.js.map