@remixhq/mcp 0.1.5 → 0.1.7
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/cli.js +148 -3
- package/dist/cli.js.map +1 -1
- package/dist/index.js +148 -3
- package/dist/index.js.map +1 -1
- package/dist/server.js +148 -3
- package/dist/server.js.map +1 -1
- package/package.json +2 -2
package/dist/cli.js
CHANGED
|
@@ -416,6 +416,7 @@ var mergeRequestQueueSchema = z2.enum([
|
|
|
416
416
|
"app_related_visible"
|
|
417
417
|
]);
|
|
418
418
|
var appScopedMergeRequestQueueSchema = z2.enum(["app_reviewable", "app_outgoing", "app_related_visible"]);
|
|
419
|
+
var memberScopeSchema = z2.enum(["organization", "project", "app"]);
|
|
419
420
|
var statusInputSchema = {
|
|
420
421
|
...commonRequestFieldsSchema,
|
|
421
422
|
includeRemote: z2.boolean().optional()
|
|
@@ -436,6 +437,11 @@ var remixInputSchema = {
|
|
|
436
437
|
name: z2.string().trim().min(1).optional(),
|
|
437
438
|
outputDir: z2.string().trim().min(1).optional()
|
|
438
439
|
};
|
|
440
|
+
var checkoutInputSchema = {
|
|
441
|
+
...commonRequestFieldsSchema,
|
|
442
|
+
appId: z2.string().trim().min(1),
|
|
443
|
+
outputDir: z2.string().trim().min(1).optional()
|
|
444
|
+
};
|
|
439
445
|
var addInputSchema = {
|
|
440
446
|
...commonRequestFieldsSchema,
|
|
441
447
|
prompt: z2.string().trim().min(1),
|
|
@@ -508,6 +514,18 @@ var inviteInputSchema = {
|
|
|
508
514
|
role: z2.string().trim().min(1).optional(),
|
|
509
515
|
ttlDays: z2.number().int().positive().max(30).optional()
|
|
510
516
|
};
|
|
517
|
+
var listMembersInputSchema = {
|
|
518
|
+
...commonRequestFieldsSchema,
|
|
519
|
+
scope: memberScopeSchema,
|
|
520
|
+
targetId: z2.string().trim().min(1).optional()
|
|
521
|
+
};
|
|
522
|
+
var updateMemberRoleInputSchema = {
|
|
523
|
+
...commonRequestFieldsSchema,
|
|
524
|
+
scope: memberScopeSchema,
|
|
525
|
+
targetId: z2.string().trim().min(1).optional(),
|
|
526
|
+
userId: z2.string().trim().min(1),
|
|
527
|
+
role: z2.string().trim().min(1)
|
|
528
|
+
};
|
|
511
529
|
var statusDataSchema = z2.object({
|
|
512
530
|
status: genericRecordSchema,
|
|
513
531
|
riskLevel: z2.enum(["low", "medium", "high"])
|
|
@@ -516,6 +534,7 @@ var initDataSchema = z2.object({
|
|
|
516
534
|
reused: z2.boolean(),
|
|
517
535
|
projectId: z2.string(),
|
|
518
536
|
appId: z2.string(),
|
|
537
|
+
dashboardUrl: z2.string().url(),
|
|
519
538
|
upstreamAppId: z2.string(),
|
|
520
539
|
bindingPath: z2.string(),
|
|
521
540
|
repoRoot: z2.string()
|
|
@@ -525,6 +544,15 @@ var listDataSchema = z2.object({
|
|
|
525
544
|
});
|
|
526
545
|
var remixDataSchema = z2.object({
|
|
527
546
|
appId: z2.string(),
|
|
547
|
+
dashboardUrl: z2.string().url(),
|
|
548
|
+
projectId: z2.string(),
|
|
549
|
+
upstreamAppId: z2.string(),
|
|
550
|
+
bindingPath: z2.string(),
|
|
551
|
+
repoRoot: z2.string()
|
|
552
|
+
});
|
|
553
|
+
var checkoutDataSchema = z2.object({
|
|
554
|
+
appId: z2.string(),
|
|
555
|
+
dashboardUrl: z2.string().url(),
|
|
528
556
|
projectId: z2.string(),
|
|
529
557
|
upstreamAppId: z2.string(),
|
|
530
558
|
bindingPath: z2.string(),
|
|
@@ -548,10 +576,22 @@ var rejectDataSchema = genericRecordSchema;
|
|
|
548
576
|
var syncUpstreamDataSchema = genericRecordSchema;
|
|
549
577
|
var reconcileDataSchema = genericRecordSchema;
|
|
550
578
|
var inviteDataSchema = genericRecordSchema;
|
|
579
|
+
var memberRecordSchema = genericRecordSchema;
|
|
580
|
+
var listMembersDataSchema = z2.object({
|
|
581
|
+
scopeType: memberScopeSchema,
|
|
582
|
+
targetId: z2.string(),
|
|
583
|
+
members: z2.array(memberRecordSchema)
|
|
584
|
+
});
|
|
585
|
+
var updateMemberRoleDataSchema = z2.object({
|
|
586
|
+
scopeType: memberScopeSchema,
|
|
587
|
+
targetId: z2.string(),
|
|
588
|
+
member: memberRecordSchema
|
|
589
|
+
});
|
|
551
590
|
var statusSuccessSchema = makeSuccessSchema(statusDataSchema);
|
|
552
591
|
var initSuccessSchema = makeSuccessSchema(initDataSchema);
|
|
553
592
|
var listSuccessSchema = makeSuccessSchema(listDataSchema);
|
|
554
593
|
var remixSuccessSchema = makeSuccessSchema(remixDataSchema);
|
|
594
|
+
var checkoutSuccessSchema = makeSuccessSchema(checkoutDataSchema);
|
|
555
595
|
var addSuccessSchema = makeSuccessSchema(addDataSchema);
|
|
556
596
|
var recordTurnSuccessSchema = makeSuccessSchema(recordTurnDataSchema);
|
|
557
597
|
var syncSuccessSchema = makeSuccessSchema(syncDataSchema);
|
|
@@ -563,12 +603,17 @@ var rejectSuccessSchema = makeSuccessSchema(rejectDataSchema);
|
|
|
563
603
|
var syncUpstreamSuccessSchema = makeSuccessSchema(syncUpstreamDataSchema);
|
|
564
604
|
var reconcileSuccessSchema = makeSuccessSchema(reconcileDataSchema);
|
|
565
605
|
var inviteSuccessSchema = makeSuccessSchema(inviteDataSchema);
|
|
606
|
+
var listMembersSuccessSchema = makeSuccessSchema(listMembersDataSchema);
|
|
607
|
+
var updateMemberRoleSuccessSchema = makeSuccessSchema(updateMemberRoleDataSchema);
|
|
566
608
|
|
|
567
609
|
// src/domain/coreAdapter.ts
|
|
568
610
|
import {
|
|
611
|
+
collabListMembers as coreCollabListMembers,
|
|
612
|
+
collabUpdateMemberRole as coreCollabUpdateMemberRole,
|
|
569
613
|
collabAdd as coreCollabAdd,
|
|
570
614
|
collabRecordTurn as coreCollabRecordTurn,
|
|
571
615
|
collabApprove as coreCollabApprove,
|
|
616
|
+
collabCheckout as coreCollabCheckout,
|
|
572
617
|
collabListMergeRequests as coreCollabListMergeRequests,
|
|
573
618
|
collabInit as coreCollabInit,
|
|
574
619
|
collabInvite as coreCollabInvite,
|
|
@@ -704,6 +749,24 @@ async function remixCollab(params) {
|
|
|
704
749
|
}
|
|
705
750
|
};
|
|
706
751
|
}
|
|
752
|
+
async function checkoutCollab(params) {
|
|
753
|
+
const api = await createCollabApiClient();
|
|
754
|
+
const result = await coreCollabCheckout({
|
|
755
|
+
api,
|
|
756
|
+
cwd: params.cwd,
|
|
757
|
+
appId: params.appId,
|
|
758
|
+
outputDir: params.outputDir ?? null
|
|
759
|
+
});
|
|
760
|
+
return {
|
|
761
|
+
data: result,
|
|
762
|
+
warnings: collectResultWarnings(result),
|
|
763
|
+
recommendedNextActions: ["Run remix_collab_status inside the checked out repository before using Remix mutation tools there."],
|
|
764
|
+
logContext: {
|
|
765
|
+
repoRoot: result.repoRoot,
|
|
766
|
+
appId: result.appId
|
|
767
|
+
}
|
|
768
|
+
};
|
|
769
|
+
}
|
|
707
770
|
async function addCollabStep(params) {
|
|
708
771
|
const api = await createCollabApiClient();
|
|
709
772
|
const repoRoot = await findGitRoot(params.cwd);
|
|
@@ -977,6 +1040,38 @@ async function inviteCollaborator(params) {
|
|
|
977
1040
|
logContext: {}
|
|
978
1041
|
};
|
|
979
1042
|
}
|
|
1043
|
+
async function listMembers(params) {
|
|
1044
|
+
const api = await createCollabApiClient();
|
|
1045
|
+
const result = await coreCollabListMembers({
|
|
1046
|
+
api,
|
|
1047
|
+
cwd: params.cwd,
|
|
1048
|
+
scope: params.scope,
|
|
1049
|
+
targetId: params.targetId ?? null
|
|
1050
|
+
});
|
|
1051
|
+
return {
|
|
1052
|
+
data: result,
|
|
1053
|
+
warnings: [],
|
|
1054
|
+
recommendedNextActions: [],
|
|
1055
|
+
logContext: {}
|
|
1056
|
+
};
|
|
1057
|
+
}
|
|
1058
|
+
async function updateMemberRole(params) {
|
|
1059
|
+
const api = await createCollabApiClient();
|
|
1060
|
+
const result = await coreCollabUpdateMemberRole({
|
|
1061
|
+
api,
|
|
1062
|
+
cwd: params.cwd,
|
|
1063
|
+
scope: params.scope,
|
|
1064
|
+
targetId: params.targetId ?? null,
|
|
1065
|
+
userId: params.userId,
|
|
1066
|
+
role: params.role
|
|
1067
|
+
});
|
|
1068
|
+
return {
|
|
1069
|
+
data: result,
|
|
1070
|
+
warnings: [],
|
|
1071
|
+
recommendedNextActions: [],
|
|
1072
|
+
logContext: {}
|
|
1073
|
+
};
|
|
1074
|
+
}
|
|
980
1075
|
|
|
981
1076
|
// src/tools/collab/register.ts
|
|
982
1077
|
function getAnnotations(access) {
|
|
@@ -1144,6 +1239,22 @@ function registerCollabTools(server, context) {
|
|
|
1144
1239
|
});
|
|
1145
1240
|
}
|
|
1146
1241
|
});
|
|
1242
|
+
registerTool(server, context, {
|
|
1243
|
+
name: "remix_collab_checkout",
|
|
1244
|
+
description: "Materialize an existing Remix app as-is into a new local checkout without creating a new fork. Works for original apps and fork apps; the resulting binding preserves that lineage.",
|
|
1245
|
+
access: "remote_write",
|
|
1246
|
+
inputSchema: checkoutInputSchema,
|
|
1247
|
+
outputSchema: checkoutSuccessSchema,
|
|
1248
|
+
run: async (args) => {
|
|
1249
|
+
const input = z3.object(checkoutInputSchema).parse(args);
|
|
1250
|
+
const cwd = resolvePolicyCwd(context.policy, input.cwd);
|
|
1251
|
+
return checkoutCollab({
|
|
1252
|
+
cwd,
|
|
1253
|
+
appId: input.appId,
|
|
1254
|
+
outputDir: input.outputDir
|
|
1255
|
+
});
|
|
1256
|
+
}
|
|
1257
|
+
});
|
|
1147
1258
|
registerTool(server, context, {
|
|
1148
1259
|
name: "remix_collab_add",
|
|
1149
1260
|
description: "Authoritative way to record completed code changes for the current bound repository, using the live worktree diff by default instead of raw git commit or push.",
|
|
@@ -1261,7 +1372,7 @@ function registerCollabTools(server, context) {
|
|
|
1261
1372
|
});
|
|
1262
1373
|
registerTool(server, context, {
|
|
1263
1374
|
name: "remix_collab_request_merge",
|
|
1264
|
-
description: "Open a Remix merge request from the current bound repository to its upstream app instead of merging locally with raw git.",
|
|
1375
|
+
description: "Open a prompt-backed Remix merge request from the current bound repository to its upstream app instead of merging locally with raw git.",
|
|
1265
1376
|
access: "remote_write",
|
|
1266
1377
|
inputSchema: requestMergeInputSchema,
|
|
1267
1378
|
outputSchema: requestMergeSuccessSchema,
|
|
@@ -1313,7 +1424,7 @@ function registerCollabTools(server, context) {
|
|
|
1313
1424
|
});
|
|
1314
1425
|
registerTool(server, context, {
|
|
1315
1426
|
name: "remix_collab_view_merge_request",
|
|
1316
|
-
description: "View Remix merge request metadata,
|
|
1427
|
+
description: "View Remix merge request metadata, review groups, change steps, and optionally a bounded unified diff before approval or rejection.",
|
|
1317
1428
|
access: "read",
|
|
1318
1429
|
inputSchema: viewMergeRequestInputSchema,
|
|
1319
1430
|
outputSchema: viewMergeRequestSuccessSchema,
|
|
@@ -1328,7 +1439,7 @@ function registerCollabTools(server, context) {
|
|
|
1328
1439
|
});
|
|
1329
1440
|
registerTool(server, context, {
|
|
1330
1441
|
name: "remix_collab_approve_remote",
|
|
1331
|
-
description: "Approve a merge request remotely and wait for terminal completion without mutating the local repository, preserving Remix as the merge authority.",
|
|
1442
|
+
description: "Approve a merge request or upstream sync remotely and wait for terminal completion without mutating the local repository, preserving Remix as the merge authority.",
|
|
1332
1443
|
access: "remote_write",
|
|
1333
1444
|
inputSchema: approveInputSchema,
|
|
1334
1445
|
outputSchema: approveSuccessSchema,
|
|
@@ -1429,6 +1540,40 @@ function registerCollabTools(server, context) {
|
|
|
1429
1540
|
});
|
|
1430
1541
|
}
|
|
1431
1542
|
});
|
|
1543
|
+
registerTool(server, context, {
|
|
1544
|
+
name: "remix_collab_list_members",
|
|
1545
|
+
description: "List organization, project, or app members, using the current repository binding unless targetId is provided.",
|
|
1546
|
+
access: "read",
|
|
1547
|
+
inputSchema: listMembersInputSchema,
|
|
1548
|
+
outputSchema: listMembersSuccessSchema,
|
|
1549
|
+
run: async (args) => {
|
|
1550
|
+
const input = z3.object(listMembersInputSchema).parse(args);
|
|
1551
|
+
const cwd = resolvePolicyCwd(context.policy, input.cwd);
|
|
1552
|
+
return listMembers({
|
|
1553
|
+
cwd,
|
|
1554
|
+
scope: input.scope,
|
|
1555
|
+
targetId: input.targetId
|
|
1556
|
+
});
|
|
1557
|
+
}
|
|
1558
|
+
});
|
|
1559
|
+
registerTool(server, context, {
|
|
1560
|
+
name: "remix_collab_update_member_role",
|
|
1561
|
+
description: "Update an organization, project, or app member role, using the current repository binding unless targetId is provided.",
|
|
1562
|
+
access: "remote_write",
|
|
1563
|
+
inputSchema: updateMemberRoleInputSchema,
|
|
1564
|
+
outputSchema: updateMemberRoleSuccessSchema,
|
|
1565
|
+
run: async (args) => {
|
|
1566
|
+
const input = z3.object(updateMemberRoleInputSchema).parse(args);
|
|
1567
|
+
const cwd = resolvePolicyCwd(context.policy, input.cwd);
|
|
1568
|
+
return updateMemberRole({
|
|
1569
|
+
cwd,
|
|
1570
|
+
scope: input.scope,
|
|
1571
|
+
targetId: input.targetId,
|
|
1572
|
+
userId: input.userId,
|
|
1573
|
+
role: input.role
|
|
1574
|
+
});
|
|
1575
|
+
}
|
|
1576
|
+
});
|
|
1432
1577
|
}
|
|
1433
1578
|
|
|
1434
1579
|
// src/tools/memory/register.ts
|