@ateam-ai/mcp 0.3.38 → 0.3.40
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/tools.js +25 -1
package/package.json
CHANGED
package/src/tools.js
CHANGED
|
@@ -32,10 +32,17 @@ import { renderAgentDocHeader, mergeAgentDoc, AGENT_DOC_SENTINEL } from "./agent
|
|
|
32
32
|
async function pollDeployJob(jobId, sid, { label = 'deploy', maxMs = 15 * 60_000, intervalMs = 2000 } = {}) {
|
|
33
33
|
const start = Date.now();
|
|
34
34
|
let lastStatus = null;
|
|
35
|
+
// URL-encode jobId — older skill-validators returned composite job IDs
|
|
36
|
+
// with literal `/` (e.g. `redeploy-skill-personal-adas/pa-orchestrator-...`)
|
|
37
|
+
// which broke the Express route /deploy/jobs/:jobId. Polling silently
|
|
38
|
+
// 404'd every iteration until the MCP host's stdio idle timeout fired
|
|
39
|
+
// (~30s) and dropped the connection. Encoding here is defense-in-depth
|
|
40
|
+
// even after the server-side fix that replaced `/` with `--`.
|
|
41
|
+
const encodedJobId = encodeURIComponent(jobId);
|
|
35
42
|
while (Date.now() - start < maxMs) {
|
|
36
43
|
await new Promise(r => setTimeout(r, intervalMs));
|
|
37
44
|
try {
|
|
38
|
-
const job = await get(`/deploy/jobs/${
|
|
45
|
+
const job = await get(`/deploy/jobs/${encodedJobId}`, sid);
|
|
39
46
|
lastStatus = job?.status;
|
|
40
47
|
if (job?.status === 'done' || job?.status === 'failed') {
|
|
41
48
|
return job; // job entry has the full result merged in
|
|
@@ -887,6 +894,19 @@ export const tools = [
|
|
|
887
894
|
required: ["solution_id"],
|
|
888
895
|
},
|
|
889
896
|
},
|
|
897
|
+
{
|
|
898
|
+
name: "ateam_verify_consistency",
|
|
899
|
+
core: false,
|
|
900
|
+
description:
|
|
901
|
+
"Read-only: do Builder FS and the GitHub repo agree for this solution? Returns { consistent: bool, drifts: [{path, kind}] } where kind ∈ fs_missing | content_differs | gh_missing | gh_read_error | repo_unreachable. Comparison strips ephemeral fields (timestamps, runtime/deploy-state, resolved-on-load flags) so only REAL content drift surfaces. Use this any time you're unsure whether a recent change landed on GitHub or whether your local view of the solution matches what's deployed — much faster than scrolling ateam_github_log manually. No deploy is triggered.",
|
|
902
|
+
inputSchema: {
|
|
903
|
+
type: "object",
|
|
904
|
+
properties: {
|
|
905
|
+
solution_id: { type: "string", description: "The solution ID" },
|
|
906
|
+
},
|
|
907
|
+
required: ["solution_id"],
|
|
908
|
+
},
|
|
909
|
+
},
|
|
890
910
|
|
|
891
911
|
// ═══════════════════════════════════════════════════════════════════
|
|
892
912
|
// GITHUB TOOLS — version control for solutions
|
|
@@ -1245,6 +1265,7 @@ const TENANT_TOOLS = new Set([
|
|
|
1245
1265
|
"ateam_get_connector_source",
|
|
1246
1266
|
"ateam_get_metrics",
|
|
1247
1267
|
"ateam_diff",
|
|
1268
|
+
"ateam_verify_consistency",
|
|
1248
1269
|
// GitHub operations
|
|
1249
1270
|
"ateam_github_push",
|
|
1250
1271
|
"ateam_github_pull",
|
|
@@ -2316,6 +2337,9 @@ const handlers = {
|
|
|
2316
2337
|
return get(`/deploy/solutions/${solution_id}/metrics${qsStr}`, sid);
|
|
2317
2338
|
},
|
|
2318
2339
|
|
|
2340
|
+
ateam_verify_consistency: async ({ solution_id }, sid) =>
|
|
2341
|
+
get(`/deploy/solutions/${solution_id}/verify`, sid),
|
|
2342
|
+
|
|
2319
2343
|
ateam_diff: async ({ solution_id, skill_id }, sid) => {
|
|
2320
2344
|
const qs = skill_id ? `?skill_id=${encodeURIComponent(skill_id)}` : "";
|
|
2321
2345
|
return get(`/deploy/solutions/${solution_id}/diff${qs}`, sid);
|