gogcli-mcp-classroom 2.19.0 → 2.19.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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/dist/index.js +63 -1
- package/manifest.json +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
- package/src/index.ts +5 -1
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
},
|
|
8
8
|
"metadata": {
|
|
9
9
|
"description": "Extended Google Classroom for Claude via gogcli — auth + full Classroom support (courses, rosters, coursework, submissions, announcements, topics, invitations)",
|
|
10
|
-
"version": "2.19.
|
|
10
|
+
"version": "2.19.1"
|
|
11
11
|
},
|
|
12
12
|
"plugins": [
|
|
13
13
|
{
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"displayName": "gogcli (Classroom)",
|
|
16
16
|
"source": "./",
|
|
17
17
|
"description": "Extended Google Classroom for Claude via gogcli — auth + full Classroom support (courses, rosters, coursework, submissions, announcements, topics, invitations)",
|
|
18
|
-
"version": "2.19.
|
|
18
|
+
"version": "2.19.1",
|
|
19
19
|
"author": {
|
|
20
20
|
"name": "Chris Hall"
|
|
21
21
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gogcli-mcp-classroom",
|
|
3
3
|
"displayName": "gogcli (Classroom)",
|
|
4
|
-
"version": "2.19.
|
|
4
|
+
"version": "2.19.1",
|
|
5
5
|
"description": "Extended Google Classroom for Claude via gogcli — auth + full Classroom support (courses, rosters, coursework, submissions, announcements, topics, invitations)",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Chris Hall",
|
package/dist/index.js
CHANGED
|
@@ -32131,7 +32131,68 @@ var failIfNotEmptyParam = external_exports.boolean().optional().describe(
|
|
|
32131
32131
|
);
|
|
32132
32132
|
|
|
32133
32133
|
// ../gogcli-mcp/src/server.ts
|
|
32134
|
-
var VERSION = true ? "2.19.
|
|
32134
|
+
var VERSION = true ? "2.19.1" : "0.0.0";
|
|
32135
|
+
|
|
32136
|
+
// ../gogcli-mcp/src/connector-runtime.ts
|
|
32137
|
+
var DEFAULT_TIMEOUT_MS = 3e4;
|
|
32138
|
+
var DEADLINE_GRACE_MS = 5e3;
|
|
32139
|
+
var RUNNER_GOG_FAILED = 422;
|
|
32140
|
+
var RUNNER_DRAINING = 503;
|
|
32141
|
+
function makeFlyExecutor(endpoint, key) {
|
|
32142
|
+
return async (args, opts) => {
|
|
32143
|
+
const deadlineMs = (opts?.timeout ?? DEFAULT_TIMEOUT_MS) + DEADLINE_GRACE_MS;
|
|
32144
|
+
let res;
|
|
32145
|
+
try {
|
|
32146
|
+
res = await fetch(endpoint + "/run", {
|
|
32147
|
+
method: "POST",
|
|
32148
|
+
headers: {
|
|
32149
|
+
Authorization: "Bearer " + key,
|
|
32150
|
+
"Content-Type": "application/json"
|
|
32151
|
+
},
|
|
32152
|
+
body: JSON.stringify({ args }),
|
|
32153
|
+
signal: AbortSignal.timeout(deadlineMs)
|
|
32154
|
+
});
|
|
32155
|
+
} catch (err) {
|
|
32156
|
+
const name = err instanceof Error ? err.name : "";
|
|
32157
|
+
if (name === "TimeoutError" || name === "AbortError") {
|
|
32158
|
+
throw new Error(
|
|
32159
|
+
`gog-runner did not respond within ${deadlineMs}ms (${endpoint}) \u2014 the Fly backend may be cold or wedged`
|
|
32160
|
+
);
|
|
32161
|
+
}
|
|
32162
|
+
throw err;
|
|
32163
|
+
}
|
|
32164
|
+
if (!res.ok) {
|
|
32165
|
+
const body = await res.json().catch(() => null);
|
|
32166
|
+
const detail = body && typeof body.error === "string" ? body.stderr && body.stderr.trim() && body.stderr.trim() !== body.error.trim() ? `${body.error}
|
|
32167
|
+
${body.stderr}` : body.error : "";
|
|
32168
|
+
if (res.status === RUNNER_GOG_FAILED) {
|
|
32169
|
+
throw new Error(detail || "gog failed on the runner (no detail supplied)");
|
|
32170
|
+
}
|
|
32171
|
+
if (res.status === RUNNER_DRAINING || body?.retryable === true) {
|
|
32172
|
+
throw new Error(
|
|
32173
|
+
`gog-runner is restarting; retry this call.${detail ? ` ${detail}` : ""}`
|
|
32174
|
+
);
|
|
32175
|
+
}
|
|
32176
|
+
if (detail) {
|
|
32177
|
+
throw new Error(detail);
|
|
32178
|
+
}
|
|
32179
|
+
throw new Error(
|
|
32180
|
+
`gog-runner HTTP ${res.status}: the response did not come from the runner, so the request never reached gog. The backend Machine was most likely starting or shutting down \u2014 this is transient, retry the same call.`
|
|
32181
|
+
);
|
|
32182
|
+
}
|
|
32183
|
+
const { stdout } = await res.json();
|
|
32184
|
+
return stdout;
|
|
32185
|
+
};
|
|
32186
|
+
}
|
|
32187
|
+
|
|
32188
|
+
// ../gogcli-mcp/src/remote-runner.ts
|
|
32189
|
+
function useRemoteGogRunner(env = process.env) {
|
|
32190
|
+
const endpoint = readEnvVar("GOG_RUNNER_URL", { env });
|
|
32191
|
+
const key = readEnvVar("GOG_RUNNER_KEY", { env });
|
|
32192
|
+
if (!endpoint || !key) return false;
|
|
32193
|
+
runExecutor.enterWith({ executor: makeFlyExecutor(endpoint.replace(/\/+$/, ""), key) });
|
|
32194
|
+
return true;
|
|
32195
|
+
}
|
|
32135
32196
|
|
|
32136
32197
|
// src/tools/classroom-extra.ts
|
|
32137
32198
|
var courseState = external_exports.enum(["ACTIVE", "ARCHIVED", "PROVISIONED", "DECLINED", "SUSPENDED"]);
|
|
@@ -32410,6 +32471,7 @@ function registerExtraClassroomTools(server) {
|
|
|
32410
32471
|
}
|
|
32411
32472
|
|
|
32412
32473
|
// src/index.ts
|
|
32474
|
+
useRemoteGogRunner();
|
|
32413
32475
|
await runMcp({
|
|
32414
32476
|
name: "gogcli-classroom",
|
|
32415
32477
|
version: VERSION,
|
package/manifest.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"manifest_version": "0.3",
|
|
4
4
|
"name": "gogcli-mcp-classroom",
|
|
5
5
|
"display_name": "gogcli (Classroom)",
|
|
6
|
-
"version": "2.19.
|
|
6
|
+
"version": "2.19.1",
|
|
7
7
|
"description": "Extended Google Classroom for Claude via gogcli — auth + full Classroom support (courses, rosters, coursework, submissions, announcements, topics, invitations)",
|
|
8
8
|
"author": {
|
|
9
9
|
"name": "Chris Hall",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gogcli-mcp-classroom",
|
|
3
|
-
"version": "2.19.
|
|
3
|
+
"version": "2.19.1",
|
|
4
4
|
"mcpName": "io.github.chrischall/gogcli-mcp-classroom",
|
|
5
5
|
"description": "Extended Google Classroom MCP server via gogcli — auth + full Classroom support",
|
|
6
6
|
"author": "Claude Code (AI) <https://www.anthropic.com/claude>",
|
package/server.json
CHANGED
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
"source": "github",
|
|
8
8
|
"subfolder": "packages/gogcli-mcp-classroom"
|
|
9
9
|
},
|
|
10
|
-
"version": "2.19.
|
|
10
|
+
"version": "2.19.1",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "npm",
|
|
14
14
|
"identifier": "gogcli-mcp-classroom",
|
|
15
|
-
"version": "2.19.
|
|
15
|
+
"version": "2.19.1",
|
|
16
16
|
"transport": {
|
|
17
17
|
"type": "stdio"
|
|
18
18
|
},
|
package/src/index.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { runMcp } from '@chrischall/mcp-utils';
|
|
3
|
-
import { VERSION, authToolsFor, registerClassroomTools } from '../../gogcli-mcp/src/lib.js';
|
|
3
|
+
import { VERSION, authToolsFor, registerClassroomTools, useRemoteGogRunner } from '../../gogcli-mcp/src/lib.js';
|
|
4
4
|
import { registerExtraClassroomTools } from './tools/classroom-extra.js';
|
|
5
5
|
|
|
6
|
+
// Execute `gog` on the Fly backend when the host points us at one; without
|
|
7
|
+
// it, nothing changes and we spawn the local binary as before.
|
|
8
|
+
useRemoteGogRunner();
|
|
9
|
+
|
|
6
10
|
await runMcp({
|
|
7
11
|
name: 'gogcli-classroom',
|
|
8
12
|
version: VERSION,
|