@anchrd/colab-sdk 0.1.25 → 0.1.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mcps/mcps.d.ts +81 -0
- package/dist/mcps/mcps.js +96 -4
- package/dist/skills/skills.d.ts +20 -1
- package/dist/skills/skills.js +19 -2
- package/package.json +1 -1
package/dist/mcps/mcps.d.ts
CHANGED
|
@@ -87,6 +87,87 @@ export declare const mcpCatalog: readonly [{
|
|
|
87
87
|
readonly dynamicRegistration: true;
|
|
88
88
|
readonly color: "#111111";
|
|
89
89
|
readonly initials: "N";
|
|
90
|
+
}, {
|
|
91
|
+
readonly id: "linear";
|
|
92
|
+
readonly name: "Linear";
|
|
93
|
+
readonly url: "https://mcp.linear.app/mcp";
|
|
94
|
+
readonly auth: "oauth";
|
|
95
|
+
readonly signIn: "Linear";
|
|
96
|
+
readonly dynamicRegistration: true;
|
|
97
|
+
readonly color: "#5e6ad2";
|
|
98
|
+
readonly initials: "Li";
|
|
99
|
+
}, {
|
|
100
|
+
readonly id: "atlassian";
|
|
101
|
+
readonly name: "Atlassian";
|
|
102
|
+
readonly url: "https://mcp.atlassian.com/v1/mcp";
|
|
103
|
+
readonly auth: "oauth";
|
|
104
|
+
readonly signIn: "Atlassian";
|
|
105
|
+
readonly dynamicRegistration: true;
|
|
106
|
+
readonly color: "#0c66e4";
|
|
107
|
+
readonly initials: "At";
|
|
108
|
+
}, {
|
|
109
|
+
readonly id: "asana";
|
|
110
|
+
readonly name: "Asana";
|
|
111
|
+
readonly url: "https://mcp.asana.com/v2/mcp";
|
|
112
|
+
readonly auth: "oauth";
|
|
113
|
+
readonly signIn: "Asana";
|
|
114
|
+
readonly dynamicRegistration: true;
|
|
115
|
+
readonly color: "#e8384f";
|
|
116
|
+
readonly initials: "As";
|
|
117
|
+
}, {
|
|
118
|
+
readonly id: "sentry";
|
|
119
|
+
readonly name: "Sentry";
|
|
120
|
+
readonly url: "https://mcp.sentry.dev/mcp";
|
|
121
|
+
readonly auth: "oauth";
|
|
122
|
+
readonly signIn: "Sentry";
|
|
123
|
+
readonly dynamicRegistration: true;
|
|
124
|
+
readonly color: "#362d59";
|
|
125
|
+
readonly initials: "Se";
|
|
126
|
+
}, {
|
|
127
|
+
readonly id: "zapier";
|
|
128
|
+
readonly name: "Zapier";
|
|
129
|
+
readonly url: "https://mcp.zapier.com/api/mcp/mcp";
|
|
130
|
+
readonly auth: "oauth";
|
|
131
|
+
readonly signIn: "Zapier";
|
|
132
|
+
readonly dynamicRegistration: true;
|
|
133
|
+
readonly color: "#ff4a00";
|
|
134
|
+
readonly initials: "Z";
|
|
135
|
+
}, {
|
|
136
|
+
readonly id: "canva";
|
|
137
|
+
readonly name: "Canva";
|
|
138
|
+
readonly url: "https://mcp.canva.com/mcp";
|
|
139
|
+
readonly auth: "oauth";
|
|
140
|
+
readonly signIn: "Canva";
|
|
141
|
+
readonly dynamicRegistration: true;
|
|
142
|
+
readonly color: "#7d2ae8";
|
|
143
|
+
readonly initials: "Ca";
|
|
144
|
+
}, {
|
|
145
|
+
readonly id: "miro";
|
|
146
|
+
readonly name: "Miro";
|
|
147
|
+
readonly url: "https://mcp.miro.com/";
|
|
148
|
+
readonly auth: "oauth";
|
|
149
|
+
readonly signIn: "Miro";
|
|
150
|
+
readonly dynamicRegistration: true;
|
|
151
|
+
readonly color: "#b8860b";
|
|
152
|
+
readonly initials: "Mi";
|
|
153
|
+
}, {
|
|
154
|
+
readonly id: "clickup";
|
|
155
|
+
readonly name: "ClickUp";
|
|
156
|
+
readonly url: "https://mcp.clickup.com/mcp";
|
|
157
|
+
readonly auth: "oauth";
|
|
158
|
+
readonly signIn: "ClickUp";
|
|
159
|
+
readonly dynamicRegistration: true;
|
|
160
|
+
readonly color: "#7b68ee";
|
|
161
|
+
readonly initials: "Cu";
|
|
162
|
+
}, {
|
|
163
|
+
readonly id: "webflow";
|
|
164
|
+
readonly name: "Webflow";
|
|
165
|
+
readonly url: "https://mcp.webflow.com/mcp";
|
|
166
|
+
readonly auth: "oauth";
|
|
167
|
+
readonly signIn: "Webflow";
|
|
168
|
+
readonly dynamicRegistration: true;
|
|
169
|
+
readonly color: "#146ef5";
|
|
170
|
+
readonly initials: "W";
|
|
90
171
|
}];
|
|
91
172
|
export type McpCatalogEntry = (typeof mcpCatalog)[number];
|
|
92
173
|
export declare const McpCatalogId: z.ZodEnum<{
|
package/dist/mcps/mcps.js
CHANGED
|
@@ -26,9 +26,11 @@ export const McpState = z.enum(["running", "expired", "unreachable", "pending"])
|
|
|
26
26
|
//
|
|
27
27
|
// `dynamicRegistration`: the provider lets Colab register itself as an OAuth client at the sign-in
|
|
28
28
|
// (RFC 7591), so "Verbinden" works without an app registered at the provider. Checked against the
|
|
29
|
-
// providers on 2026-10-29 (#855):
|
|
30
|
-
//
|
|
31
|
-
//
|
|
29
|
+
// providers on 2026-10-29 (#855, #875): Notion, Linear, Atlassian, Asana, Sentry, Zapier, Canva, Miro,
|
|
30
|
+
// ClickUp and Webflow offer it (each answers 401 at its address and names a `registration_endpoint`).
|
|
31
|
+
// Google answers no OAuth metadata at all, and Slack, Microsoft and HubSpot name none; they need an
|
|
32
|
+
// app an admin sets up, with client id and secret, which Colab cannot hold yet. Such an entry is
|
|
33
|
+
// shown, not started.
|
|
32
34
|
export const mcpCatalog = [
|
|
33
35
|
{
|
|
34
36
|
id: "gmail",
|
|
@@ -110,6 +112,96 @@ export const mcpCatalog = [
|
|
|
110
112
|
color: "#111111",
|
|
111
113
|
initials: "N",
|
|
112
114
|
},
|
|
115
|
+
{
|
|
116
|
+
id: "linear",
|
|
117
|
+
name: "Linear",
|
|
118
|
+
url: "https://mcp.linear.app/mcp",
|
|
119
|
+
auth: "oauth",
|
|
120
|
+
signIn: "Linear",
|
|
121
|
+
dynamicRegistration: true,
|
|
122
|
+
color: "#5e6ad2",
|
|
123
|
+
initials: "Li",
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
id: "atlassian",
|
|
127
|
+
name: "Atlassian",
|
|
128
|
+
url: "https://mcp.atlassian.com/v1/mcp",
|
|
129
|
+
auth: "oauth",
|
|
130
|
+
signIn: "Atlassian",
|
|
131
|
+
dynamicRegistration: true,
|
|
132
|
+
color: "#0c66e4",
|
|
133
|
+
initials: "At",
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
id: "asana",
|
|
137
|
+
name: "Asana",
|
|
138
|
+
url: "https://mcp.asana.com/v2/mcp",
|
|
139
|
+
auth: "oauth",
|
|
140
|
+
signIn: "Asana",
|
|
141
|
+
dynamicRegistration: true,
|
|
142
|
+
color: "#e8384f",
|
|
143
|
+
initials: "As",
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
id: "sentry",
|
|
147
|
+
name: "Sentry",
|
|
148
|
+
url: "https://mcp.sentry.dev/mcp",
|
|
149
|
+
auth: "oauth",
|
|
150
|
+
signIn: "Sentry",
|
|
151
|
+
dynamicRegistration: true,
|
|
152
|
+
color: "#362d59",
|
|
153
|
+
initials: "Se",
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
id: "zapier",
|
|
157
|
+
name: "Zapier",
|
|
158
|
+
url: "https://mcp.zapier.com/api/mcp/mcp",
|
|
159
|
+
auth: "oauth",
|
|
160
|
+
signIn: "Zapier",
|
|
161
|
+
dynamicRegistration: true,
|
|
162
|
+
color: "#ff4a00",
|
|
163
|
+
initials: "Z",
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
id: "canva",
|
|
167
|
+
name: "Canva",
|
|
168
|
+
url: "https://mcp.canva.com/mcp",
|
|
169
|
+
auth: "oauth",
|
|
170
|
+
signIn: "Canva",
|
|
171
|
+
dynamicRegistration: true,
|
|
172
|
+
color: "#7d2ae8",
|
|
173
|
+
initials: "Ca",
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
id: "miro",
|
|
177
|
+
name: "Miro",
|
|
178
|
+
url: "https://mcp.miro.com/",
|
|
179
|
+
auth: "oauth",
|
|
180
|
+
signIn: "Miro",
|
|
181
|
+
dynamicRegistration: true,
|
|
182
|
+
color: "#b8860b",
|
|
183
|
+
initials: "Mi",
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
id: "clickup",
|
|
187
|
+
name: "ClickUp",
|
|
188
|
+
url: "https://mcp.clickup.com/mcp",
|
|
189
|
+
auth: "oauth",
|
|
190
|
+
signIn: "ClickUp",
|
|
191
|
+
dynamicRegistration: true,
|
|
192
|
+
color: "#7b68ee",
|
|
193
|
+
initials: "Cu",
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
id: "webflow",
|
|
197
|
+
name: "Webflow",
|
|
198
|
+
url: "https://mcp.webflow.com/mcp",
|
|
199
|
+
auth: "oauth",
|
|
200
|
+
signIn: "Webflow",
|
|
201
|
+
dynamicRegistration: true,
|
|
202
|
+
color: "#146ef5",
|
|
203
|
+
initials: "W",
|
|
204
|
+
},
|
|
113
205
|
];
|
|
114
206
|
export const McpCatalogId = z.enum(mcpCatalog.map((entry) => entry.id));
|
|
115
207
|
const McpName = z.string().trim().min(1).max(64);
|
|
@@ -147,7 +239,7 @@ export const McpGetInput = z.strictObject({ mcpId: McpId });
|
|
|
147
239
|
// the person signs in at (`authorizeUrl`).
|
|
148
240
|
export const McpCreateInput = z
|
|
149
241
|
.strictObject({
|
|
150
|
-
catalogId: McpCatalogId.optional().describe("A prepared MCP of the catalog (gmail, calendar, drive, slack, teams, outlook, hubspot, notion).
|
|
242
|
+
catalogId: McpCatalogId.optional().describe("A prepared MCP of the catalog (gmail, calendar, drive, slack, teams, outlook, hubspot, notion, linear, atlassian, asana, sentry, zapier, canva, miro, clickup, webflow). Notion, linear, atlassian, asana, sentry, zapier, canva, miro, clickup and webflow connect without an app; the others need an app registered at their provider and answer unavailable. Leave name, url and auth out then."),
|
|
151
243
|
name: McpName.optional(),
|
|
152
244
|
url: McpUrl.optional(),
|
|
153
245
|
auth: McpAuth.optional(),
|
package/dist/skills/skills.d.ts
CHANGED
|
@@ -61,7 +61,7 @@ export declare const SkillPoint: z.ZodObject<{
|
|
|
61
61
|
reason: z.ZodNullable<z.ZodString>;
|
|
62
62
|
}, z.core.$strip>;
|
|
63
63
|
export type SkillPoint = z.infer<typeof SkillPoint>;
|
|
64
|
-
export declare const skillCaseStatuses: readonly ["passed", "failed", "missing"];
|
|
64
|
+
export declare const skillCaseStatuses: readonly ["passed", "failed", "missing", "running"];
|
|
65
65
|
export declare const SkillTokens: z.ZodObject<{
|
|
66
66
|
input: z.ZodInt;
|
|
67
67
|
output: z.ZodInt;
|
|
@@ -71,6 +71,7 @@ export declare const SkillCaseResult: z.ZodObject<{
|
|
|
71
71
|
name: z.ZodString;
|
|
72
72
|
status: z.ZodEnum<{
|
|
73
73
|
failed: "failed";
|
|
74
|
+
running: "running";
|
|
74
75
|
passed: "passed";
|
|
75
76
|
missing: "missing";
|
|
76
77
|
}>;
|
|
@@ -99,6 +100,8 @@ export declare const SkillCaseResult: z.ZodObject<{
|
|
|
99
100
|
input: z.ZodInt;
|
|
100
101
|
output: z.ZodInt;
|
|
101
102
|
}, z.core.$strip>>;
|
|
103
|
+
durationMs: z.ZodOptional<z.ZodInt>;
|
|
104
|
+
problem: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
102
105
|
runId: z.ZodNullable<z.ZodTemplateLiteral<`run_${string}`>>;
|
|
103
106
|
}, z.core.$strip>;
|
|
104
107
|
export type SkillCaseResult = z.infer<typeof SkillCaseResult>;
|
|
@@ -113,6 +116,8 @@ export declare const SkillTriggerHit: z.ZodObject<{
|
|
|
113
116
|
}, z.core.$strip>;
|
|
114
117
|
export type SkillTriggerHit = z.infer<typeof SkillTriggerHit>;
|
|
115
118
|
export declare const SkillTestReport: z.ZodObject<{
|
|
119
|
+
testId: z.ZodOptional<z.ZodString>;
|
|
120
|
+
running: z.ZodOptional<z.ZodBoolean>;
|
|
116
121
|
version: z.ZodInt;
|
|
117
122
|
at: z.ZodISODateTime;
|
|
118
123
|
by: z.ZodObject<{
|
|
@@ -150,11 +155,15 @@ export declare const SkillTestReport: z.ZodObject<{
|
|
|
150
155
|
input: z.ZodInt;
|
|
151
156
|
output: z.ZodInt;
|
|
152
157
|
}, z.core.$strip>>;
|
|
158
|
+
running: z.ZodOptional<z.ZodBoolean>;
|
|
159
|
+
durationMs: z.ZodOptional<z.ZodInt>;
|
|
160
|
+
problem: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
153
161
|
}, z.core.$strip>>;
|
|
154
162
|
cases: z.ZodArray<z.ZodObject<{
|
|
155
163
|
name: z.ZodString;
|
|
156
164
|
status: z.ZodEnum<{
|
|
157
165
|
failed: "failed";
|
|
166
|
+
running: "running";
|
|
158
167
|
passed: "passed";
|
|
159
168
|
missing: "missing";
|
|
160
169
|
}>;
|
|
@@ -183,6 +192,8 @@ export declare const SkillTestReport: z.ZodObject<{
|
|
|
183
192
|
input: z.ZodInt;
|
|
184
193
|
output: z.ZodInt;
|
|
185
194
|
}, z.core.$strip>>;
|
|
195
|
+
durationMs: z.ZodOptional<z.ZodInt>;
|
|
196
|
+
problem: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
186
197
|
runId: z.ZodNullable<z.ZodTemplateLiteral<`run_${string}`>>;
|
|
187
198
|
}, z.core.$strip>>;
|
|
188
199
|
problem: z.ZodNullable<z.ZodString>;
|
|
@@ -216,6 +227,8 @@ export declare const SkillDetail: z.ZodObject<{
|
|
|
216
227
|
content: z.ZodString;
|
|
217
228
|
}, z.core.$strip>>>;
|
|
218
229
|
test: z.ZodNullable<z.ZodObject<{
|
|
230
|
+
testId: z.ZodOptional<z.ZodString>;
|
|
231
|
+
running: z.ZodOptional<z.ZodBoolean>;
|
|
219
232
|
version: z.ZodInt;
|
|
220
233
|
at: z.ZodISODateTime;
|
|
221
234
|
by: z.ZodObject<{
|
|
@@ -253,11 +266,15 @@ export declare const SkillDetail: z.ZodObject<{
|
|
|
253
266
|
input: z.ZodInt;
|
|
254
267
|
output: z.ZodInt;
|
|
255
268
|
}, z.core.$strip>>;
|
|
269
|
+
running: z.ZodOptional<z.ZodBoolean>;
|
|
270
|
+
durationMs: z.ZodOptional<z.ZodInt>;
|
|
271
|
+
problem: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
256
272
|
}, z.core.$strip>>;
|
|
257
273
|
cases: z.ZodArray<z.ZodObject<{
|
|
258
274
|
name: z.ZodString;
|
|
259
275
|
status: z.ZodEnum<{
|
|
260
276
|
failed: "failed";
|
|
277
|
+
running: "running";
|
|
261
278
|
passed: "passed";
|
|
262
279
|
missing: "missing";
|
|
263
280
|
}>;
|
|
@@ -286,6 +303,8 @@ export declare const SkillDetail: z.ZodObject<{
|
|
|
286
303
|
input: z.ZodInt;
|
|
287
304
|
output: z.ZodInt;
|
|
288
305
|
}, z.core.$strip>>;
|
|
306
|
+
durationMs: z.ZodOptional<z.ZodInt>;
|
|
307
|
+
problem: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
289
308
|
runId: z.ZodNullable<z.ZodTemplateLiteral<`run_${string}`>>;
|
|
290
309
|
}, z.core.$strip>>;
|
|
291
310
|
problem: z.ZodNullable<z.ZodString>;
|
package/dist/skills/skills.js
CHANGED
|
@@ -93,13 +93,16 @@ export const SkillPoint = z.object({
|
|
|
93
93
|
// Why it failed, as the grading model read the trace and the result; null when it passed.
|
|
94
94
|
reason: z.string().nullable(),
|
|
95
95
|
});
|
|
96
|
-
|
|
96
|
+
// `running` (#873): the case's probe runs of the Operator are under way; it turns into one of the
|
|
97
|
+
// other three once the last of them is graded. A report from before #873 knows only those three.
|
|
98
|
+
export const skillCaseStatuses = ["passed", "failed", "missing", "running"];
|
|
97
99
|
// What the model read and wrote in a step of the tests, in tokens (#835, E146).
|
|
98
100
|
export const SkillTokens = z.object({ input: z.int(), output: z.int() });
|
|
99
101
|
export const SkillCaseResult = z.object({
|
|
100
102
|
name: z.string(),
|
|
101
103
|
// passed: every run passed every point; failed: one did not; missing: a tool without a recording
|
|
102
|
-
// was called, so the case stopped before it ran it. Not a fault of the skill.
|
|
104
|
+
// was called, so the case stopped before it ran it. Not a fault of the skill. running: its probe
|
|
105
|
+
// runs are under way (#873).
|
|
103
106
|
status: z.enum(skillCaseStatuses),
|
|
104
107
|
// When the case's data was recorded, with which version; null where evals.yaml does not say.
|
|
105
108
|
recordedAt: z.string().nullable(),
|
|
@@ -114,6 +117,11 @@ export const SkillCaseResult = z.object({
|
|
|
114
117
|
costUsd: z.number(),
|
|
115
118
|
// The model's tokens over every run of the case (#835); absent in a report from before.
|
|
116
119
|
tokens: SkillTokens.optional(),
|
|
120
|
+
// How long its probe runs and their grading took together (#873); absent in a report from before.
|
|
121
|
+
durationMs: z.int().optional(),
|
|
122
|
+
// A probe run that ended without a result (the provider, the time, the container), a sentence; the
|
|
123
|
+
// case then fails without a fault of the skill (#873). Absent or null otherwise.
|
|
124
|
+
problem: z.string().nullable().optional(),
|
|
117
125
|
// The probe run of the case's last attempt, its trace in the log.
|
|
118
126
|
runId: RunId.nullable(),
|
|
119
127
|
});
|
|
@@ -125,6 +133,11 @@ export const SkillTriggerHit = z.object({
|
|
|
125
133
|
ok: z.boolean(),
|
|
126
134
|
});
|
|
127
135
|
export const SkillTestReport = z.object({
|
|
136
|
+
// The test run this report belongs to (#873): a probe run of an earlier one changes it no more.
|
|
137
|
+
// Absent in a report from before.
|
|
138
|
+
testId: z.string().optional(),
|
|
139
|
+
// Its probe runs are under way (#873): cases or the trigger still `running`. Absent means no.
|
|
140
|
+
running: z.boolean().optional(),
|
|
128
141
|
version: z.int(),
|
|
129
142
|
at: z.iso.datetime(),
|
|
130
143
|
by: NodePerson,
|
|
@@ -140,6 +153,10 @@ export const SkillTestReport = z.object({
|
|
|
140
153
|
hits: z.array(SkillTriggerHit),
|
|
141
154
|
costUsd: z.number(),
|
|
142
155
|
tokens: SkillTokens.optional(),
|
|
156
|
+
// Its probe run is under way (#873); the hits come with its end.
|
|
157
|
+
running: z.boolean().optional(),
|
|
158
|
+
durationMs: z.int().optional(),
|
|
159
|
+
problem: z.string().nullable().optional(),
|
|
143
160
|
})
|
|
144
161
|
.nullable(),
|
|
145
162
|
cases: z.array(SkillCaseResult),
|
package/package.json
CHANGED