@ateam-ai/mcp 0.4.22 → 0.4.24
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/package.json +1 -1
- package/src/http.js +9 -1
- package/src/tools.js +32 -18
package/package.json
CHANGED
package/src/http.js
CHANGED
|
@@ -257,7 +257,15 @@ export function startHttpServer(port = 3100) {
|
|
|
257
257
|
console.log(`[HTTP] Stale session ${sessionId} — auto-reinitializing transparently (${req.body?.method || "unknown"})`);
|
|
258
258
|
}
|
|
259
259
|
|
|
260
|
-
|
|
260
|
+
// Reuse the client's existing session id instead of rotating to a fresh
|
|
261
|
+
// one. Many MCP clients (Claude Code, desktop) cache their session id and
|
|
262
|
+
// keep resending it, ignoring a rotated id we hand back. If we minted a
|
|
263
|
+
// new id here, every subsequent call would look stale again → another new
|
|
264
|
+
// id → the id set by ateam_auth is abandoned by the next call → the agent
|
|
265
|
+
// must re-auth "every few calls" (OPEN-6). Reusing the incoming id keeps
|
|
266
|
+
// it stable, so credentials set under it survive across recovery. Only
|
|
267
|
+
// mint a fresh id for a truly new client that has none yet.
|
|
268
|
+
const newSessionId = sessionId || randomUUID();
|
|
261
269
|
|
|
262
270
|
// Seed credentials from OAuth Bearer token before server starts
|
|
263
271
|
seedCredentials(req, newSessionId);
|
package/src/tools.js
CHANGED
|
@@ -4179,18 +4179,26 @@ const handlers = {
|
|
|
4179
4179
|
return del(`/deploy/solutions/${solution_id}/connectors/${connector_id}`, sid);
|
|
4180
4180
|
},
|
|
4181
4181
|
|
|
4182
|
-
ateam_upload_connector: async ({ solution_id, connector_id, github, files, ref, replace }, sid) =>
|
|
4183
|
-
|
|
4184
|
-
|
|
4185
|
-
|
|
4186
|
-
|
|
4187
|
-
|
|
4188
|
-
|
|
4189
|
-
|
|
4190
|
-
},
|
|
4191
|
-
|
|
4192
|
-
|
|
4193
|
-
|
|
4182
|
+
ateam_upload_connector: async ({ solution_id, connector_id, github, files, ref, replace }, sid) => {
|
|
4183
|
+
// Async-first: this runs npm install + build in Core (up to ~7min) and is a
|
|
4184
|
+
// prime Cloudflare-524 culprit. Kick async → poll /deploy/jobs; fall back to
|
|
4185
|
+
// sync for older backends that don't honor async. Mirrors ateam_github_pull.
|
|
4186
|
+
const body = {
|
|
4187
|
+
github,
|
|
4188
|
+
files,
|
|
4189
|
+
...(ref ? { ref } : {}),
|
|
4190
|
+
...(replace === true ? { replace: true } : {}),
|
|
4191
|
+
};
|
|
4192
|
+
const url = `/deploy/solutions/${solution_id}/connectors/${connector_id}/upload`;
|
|
4193
|
+
let kicked;
|
|
4194
|
+
try {
|
|
4195
|
+
kicked = await post(url, { ...body, async: true }, sid, { timeoutMs: 30_000 });
|
|
4196
|
+
} catch (err) {
|
|
4197
|
+
return await post(url, body, sid, { timeoutMs: 300_000, retries: 1 });
|
|
4198
|
+
}
|
|
4199
|
+
if (!kicked?.async || !kicked.job_id) return kicked; // backend didn't honor async
|
|
4200
|
+
return await pollDeployJob(kicked.job_id, sid, { label: 'connector-upload', maxMs: 15 * 60_000, intervalMs: 2000 });
|
|
4201
|
+
},
|
|
4194
4202
|
|
|
4195
4203
|
// ── Phase 9 strip: focused minimal responses ────────────────────────
|
|
4196
4204
|
ateam_show_skill_minimal: async ({ solution_id, skill_id }, sid) => {
|
|
@@ -4303,12 +4311,18 @@ const handlers = {
|
|
|
4303
4311
|
pluginName: plugin_name,
|
|
4304
4312
|
kind: k,
|
|
4305
4313
|
});
|
|
4306
|
-
|
|
4307
|
-
|
|
4308
|
-
|
|
4309
|
-
|
|
4310
|
-
|
|
4311
|
-
|
|
4314
|
+
// Async-first upload — npm install+build can exceed Cloudflare's 100s → 524.
|
|
4315
|
+
// Kick async → poll /deploy/jobs; fall back to sync for older backends.
|
|
4316
|
+
const _uploadUrl = `/deploy/solutions/${solution_id}/connectors/${connector_id}/upload`;
|
|
4317
|
+
let result;
|
|
4318
|
+
try {
|
|
4319
|
+
const kicked = await post(_uploadUrl, { files, async: true }, sid, { timeoutMs: 30_000 });
|
|
4320
|
+
result = (kicked?.async && kicked.job_id)
|
|
4321
|
+
? await pollDeployJob(kicked.job_id, sid, { label: 'create-plugin', maxMs: 15 * 60_000, intervalMs: 2000 })
|
|
4322
|
+
: kicked;
|
|
4323
|
+
} catch (err) {
|
|
4324
|
+
result = await post(_uploadUrl, { files }, sid, { timeoutMs: 120_000, retries: 1 });
|
|
4325
|
+
}
|
|
4312
4326
|
|
|
4313
4327
|
// Verify the plugin actually became RENDERABLE — poll Core's live catalog
|
|
4314
4328
|
// (which calls the connector's ui.listPlugins) for this plugin id. The
|