@remixhq/mcp 0.1.6 → 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 +145 -0
- package/dist/cli.js.map +1 -1
- package/dist/index.js +145 -0
- package/dist/index.js.map +1 -1
- package/dist/server.js +145 -0
- package/dist/server.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -413,6 +413,7 @@ var mergeRequestQueueSchema = z2.enum([
|
|
|
413
413
|
"app_related_visible"
|
|
414
414
|
]);
|
|
415
415
|
var appScopedMergeRequestQueueSchema = z2.enum(["app_reviewable", "app_outgoing", "app_related_visible"]);
|
|
416
|
+
var memberScopeSchema = z2.enum(["organization", "project", "app"]);
|
|
416
417
|
var statusInputSchema = {
|
|
417
418
|
...commonRequestFieldsSchema,
|
|
418
419
|
includeRemote: z2.boolean().optional()
|
|
@@ -433,6 +434,11 @@ var remixInputSchema = {
|
|
|
433
434
|
name: z2.string().trim().min(1).optional(),
|
|
434
435
|
outputDir: z2.string().trim().min(1).optional()
|
|
435
436
|
};
|
|
437
|
+
var checkoutInputSchema = {
|
|
438
|
+
...commonRequestFieldsSchema,
|
|
439
|
+
appId: z2.string().trim().min(1),
|
|
440
|
+
outputDir: z2.string().trim().min(1).optional()
|
|
441
|
+
};
|
|
436
442
|
var addInputSchema = {
|
|
437
443
|
...commonRequestFieldsSchema,
|
|
438
444
|
prompt: z2.string().trim().min(1),
|
|
@@ -505,6 +511,18 @@ var inviteInputSchema = {
|
|
|
505
511
|
role: z2.string().trim().min(1).optional(),
|
|
506
512
|
ttlDays: z2.number().int().positive().max(30).optional()
|
|
507
513
|
};
|
|
514
|
+
var listMembersInputSchema = {
|
|
515
|
+
...commonRequestFieldsSchema,
|
|
516
|
+
scope: memberScopeSchema,
|
|
517
|
+
targetId: z2.string().trim().min(1).optional()
|
|
518
|
+
};
|
|
519
|
+
var updateMemberRoleInputSchema = {
|
|
520
|
+
...commonRequestFieldsSchema,
|
|
521
|
+
scope: memberScopeSchema,
|
|
522
|
+
targetId: z2.string().trim().min(1).optional(),
|
|
523
|
+
userId: z2.string().trim().min(1),
|
|
524
|
+
role: z2.string().trim().min(1)
|
|
525
|
+
};
|
|
508
526
|
var statusDataSchema = z2.object({
|
|
509
527
|
status: genericRecordSchema,
|
|
510
528
|
riskLevel: z2.enum(["low", "medium", "high"])
|
|
@@ -513,6 +531,7 @@ var initDataSchema = z2.object({
|
|
|
513
531
|
reused: z2.boolean(),
|
|
514
532
|
projectId: z2.string(),
|
|
515
533
|
appId: z2.string(),
|
|
534
|
+
dashboardUrl: z2.string().url(),
|
|
516
535
|
upstreamAppId: z2.string(),
|
|
517
536
|
bindingPath: z2.string(),
|
|
518
537
|
repoRoot: z2.string()
|
|
@@ -522,6 +541,15 @@ var listDataSchema = z2.object({
|
|
|
522
541
|
});
|
|
523
542
|
var remixDataSchema = z2.object({
|
|
524
543
|
appId: z2.string(),
|
|
544
|
+
dashboardUrl: z2.string().url(),
|
|
545
|
+
projectId: z2.string(),
|
|
546
|
+
upstreamAppId: z2.string(),
|
|
547
|
+
bindingPath: z2.string(),
|
|
548
|
+
repoRoot: z2.string()
|
|
549
|
+
});
|
|
550
|
+
var checkoutDataSchema = z2.object({
|
|
551
|
+
appId: z2.string(),
|
|
552
|
+
dashboardUrl: z2.string().url(),
|
|
525
553
|
projectId: z2.string(),
|
|
526
554
|
upstreamAppId: z2.string(),
|
|
527
555
|
bindingPath: z2.string(),
|
|
@@ -545,10 +573,22 @@ var rejectDataSchema = genericRecordSchema;
|
|
|
545
573
|
var syncUpstreamDataSchema = genericRecordSchema;
|
|
546
574
|
var reconcileDataSchema = genericRecordSchema;
|
|
547
575
|
var inviteDataSchema = genericRecordSchema;
|
|
576
|
+
var memberRecordSchema = genericRecordSchema;
|
|
577
|
+
var listMembersDataSchema = z2.object({
|
|
578
|
+
scopeType: memberScopeSchema,
|
|
579
|
+
targetId: z2.string(),
|
|
580
|
+
members: z2.array(memberRecordSchema)
|
|
581
|
+
});
|
|
582
|
+
var updateMemberRoleDataSchema = z2.object({
|
|
583
|
+
scopeType: memberScopeSchema,
|
|
584
|
+
targetId: z2.string(),
|
|
585
|
+
member: memberRecordSchema
|
|
586
|
+
});
|
|
548
587
|
var statusSuccessSchema = makeSuccessSchema(statusDataSchema);
|
|
549
588
|
var initSuccessSchema = makeSuccessSchema(initDataSchema);
|
|
550
589
|
var listSuccessSchema = makeSuccessSchema(listDataSchema);
|
|
551
590
|
var remixSuccessSchema = makeSuccessSchema(remixDataSchema);
|
|
591
|
+
var checkoutSuccessSchema = makeSuccessSchema(checkoutDataSchema);
|
|
552
592
|
var addSuccessSchema = makeSuccessSchema(addDataSchema);
|
|
553
593
|
var recordTurnSuccessSchema = makeSuccessSchema(recordTurnDataSchema);
|
|
554
594
|
var syncSuccessSchema = makeSuccessSchema(syncDataSchema);
|
|
@@ -560,12 +600,17 @@ var rejectSuccessSchema = makeSuccessSchema(rejectDataSchema);
|
|
|
560
600
|
var syncUpstreamSuccessSchema = makeSuccessSchema(syncUpstreamDataSchema);
|
|
561
601
|
var reconcileSuccessSchema = makeSuccessSchema(reconcileDataSchema);
|
|
562
602
|
var inviteSuccessSchema = makeSuccessSchema(inviteDataSchema);
|
|
603
|
+
var listMembersSuccessSchema = makeSuccessSchema(listMembersDataSchema);
|
|
604
|
+
var updateMemberRoleSuccessSchema = makeSuccessSchema(updateMemberRoleDataSchema);
|
|
563
605
|
|
|
564
606
|
// src/domain/coreAdapter.ts
|
|
565
607
|
import {
|
|
608
|
+
collabListMembers as coreCollabListMembers,
|
|
609
|
+
collabUpdateMemberRole as coreCollabUpdateMemberRole,
|
|
566
610
|
collabAdd as coreCollabAdd,
|
|
567
611
|
collabRecordTurn as coreCollabRecordTurn,
|
|
568
612
|
collabApprove as coreCollabApprove,
|
|
613
|
+
collabCheckout as coreCollabCheckout,
|
|
569
614
|
collabListMergeRequests as coreCollabListMergeRequests,
|
|
570
615
|
collabInit as coreCollabInit,
|
|
571
616
|
collabInvite as coreCollabInvite,
|
|
@@ -701,6 +746,24 @@ async function remixCollab(params) {
|
|
|
701
746
|
}
|
|
702
747
|
};
|
|
703
748
|
}
|
|
749
|
+
async function checkoutCollab(params) {
|
|
750
|
+
const api = await createCollabApiClient();
|
|
751
|
+
const result = await coreCollabCheckout({
|
|
752
|
+
api,
|
|
753
|
+
cwd: params.cwd,
|
|
754
|
+
appId: params.appId,
|
|
755
|
+
outputDir: params.outputDir ?? null
|
|
756
|
+
});
|
|
757
|
+
return {
|
|
758
|
+
data: result,
|
|
759
|
+
warnings: collectResultWarnings(result),
|
|
760
|
+
recommendedNextActions: ["Run remix_collab_status inside the checked out repository before using Remix mutation tools there."],
|
|
761
|
+
logContext: {
|
|
762
|
+
repoRoot: result.repoRoot,
|
|
763
|
+
appId: result.appId
|
|
764
|
+
}
|
|
765
|
+
};
|
|
766
|
+
}
|
|
704
767
|
async function addCollabStep(params) {
|
|
705
768
|
const api = await createCollabApiClient();
|
|
706
769
|
const repoRoot = await findGitRoot(params.cwd);
|
|
@@ -974,6 +1037,38 @@ async function inviteCollaborator(params) {
|
|
|
974
1037
|
logContext: {}
|
|
975
1038
|
};
|
|
976
1039
|
}
|
|
1040
|
+
async function listMembers(params) {
|
|
1041
|
+
const api = await createCollabApiClient();
|
|
1042
|
+
const result = await coreCollabListMembers({
|
|
1043
|
+
api,
|
|
1044
|
+
cwd: params.cwd,
|
|
1045
|
+
scope: params.scope,
|
|
1046
|
+
targetId: params.targetId ?? null
|
|
1047
|
+
});
|
|
1048
|
+
return {
|
|
1049
|
+
data: result,
|
|
1050
|
+
warnings: [],
|
|
1051
|
+
recommendedNextActions: [],
|
|
1052
|
+
logContext: {}
|
|
1053
|
+
};
|
|
1054
|
+
}
|
|
1055
|
+
async function updateMemberRole(params) {
|
|
1056
|
+
const api = await createCollabApiClient();
|
|
1057
|
+
const result = await coreCollabUpdateMemberRole({
|
|
1058
|
+
api,
|
|
1059
|
+
cwd: params.cwd,
|
|
1060
|
+
scope: params.scope,
|
|
1061
|
+
targetId: params.targetId ?? null,
|
|
1062
|
+
userId: params.userId,
|
|
1063
|
+
role: params.role
|
|
1064
|
+
});
|
|
1065
|
+
return {
|
|
1066
|
+
data: result,
|
|
1067
|
+
warnings: [],
|
|
1068
|
+
recommendedNextActions: [],
|
|
1069
|
+
logContext: {}
|
|
1070
|
+
};
|
|
1071
|
+
}
|
|
977
1072
|
|
|
978
1073
|
// src/tools/collab/register.ts
|
|
979
1074
|
function getAnnotations(access) {
|
|
@@ -1141,6 +1236,22 @@ function registerCollabTools(server, context) {
|
|
|
1141
1236
|
});
|
|
1142
1237
|
}
|
|
1143
1238
|
});
|
|
1239
|
+
registerTool(server, context, {
|
|
1240
|
+
name: "remix_collab_checkout",
|
|
1241
|
+
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.",
|
|
1242
|
+
access: "remote_write",
|
|
1243
|
+
inputSchema: checkoutInputSchema,
|
|
1244
|
+
outputSchema: checkoutSuccessSchema,
|
|
1245
|
+
run: async (args) => {
|
|
1246
|
+
const input = z3.object(checkoutInputSchema).parse(args);
|
|
1247
|
+
const cwd = resolvePolicyCwd(context.policy, input.cwd);
|
|
1248
|
+
return checkoutCollab({
|
|
1249
|
+
cwd,
|
|
1250
|
+
appId: input.appId,
|
|
1251
|
+
outputDir: input.outputDir
|
|
1252
|
+
});
|
|
1253
|
+
}
|
|
1254
|
+
});
|
|
1144
1255
|
registerTool(server, context, {
|
|
1145
1256
|
name: "remix_collab_add",
|
|
1146
1257
|
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.",
|
|
@@ -1426,6 +1537,40 @@ function registerCollabTools(server, context) {
|
|
|
1426
1537
|
});
|
|
1427
1538
|
}
|
|
1428
1539
|
});
|
|
1540
|
+
registerTool(server, context, {
|
|
1541
|
+
name: "remix_collab_list_members",
|
|
1542
|
+
description: "List organization, project, or app members, using the current repository binding unless targetId is provided.",
|
|
1543
|
+
access: "read",
|
|
1544
|
+
inputSchema: listMembersInputSchema,
|
|
1545
|
+
outputSchema: listMembersSuccessSchema,
|
|
1546
|
+
run: async (args) => {
|
|
1547
|
+
const input = z3.object(listMembersInputSchema).parse(args);
|
|
1548
|
+
const cwd = resolvePolicyCwd(context.policy, input.cwd);
|
|
1549
|
+
return listMembers({
|
|
1550
|
+
cwd,
|
|
1551
|
+
scope: input.scope,
|
|
1552
|
+
targetId: input.targetId
|
|
1553
|
+
});
|
|
1554
|
+
}
|
|
1555
|
+
});
|
|
1556
|
+
registerTool(server, context, {
|
|
1557
|
+
name: "remix_collab_update_member_role",
|
|
1558
|
+
description: "Update an organization, project, or app member role, using the current repository binding unless targetId is provided.",
|
|
1559
|
+
access: "remote_write",
|
|
1560
|
+
inputSchema: updateMemberRoleInputSchema,
|
|
1561
|
+
outputSchema: updateMemberRoleSuccessSchema,
|
|
1562
|
+
run: async (args) => {
|
|
1563
|
+
const input = z3.object(updateMemberRoleInputSchema).parse(args);
|
|
1564
|
+
const cwd = resolvePolicyCwd(context.policy, input.cwd);
|
|
1565
|
+
return updateMemberRole({
|
|
1566
|
+
cwd,
|
|
1567
|
+
scope: input.scope,
|
|
1568
|
+
targetId: input.targetId,
|
|
1569
|
+
userId: input.userId,
|
|
1570
|
+
role: input.role
|
|
1571
|
+
});
|
|
1572
|
+
}
|
|
1573
|
+
});
|
|
1429
1574
|
}
|
|
1430
1575
|
|
|
1431
1576
|
// src/tools/memory/register.ts
|