@remixhq/mcp 0.1.2 → 0.1.4

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 CHANGED
@@ -408,6 +408,14 @@ function makeErrorResult(envelope) {
408
408
  // src/contracts/collab.ts
409
409
  var genericRecordSchema = z2.record(z2.string(), z2.unknown());
410
410
  var genericArraySchema = z2.array(genericRecordSchema);
411
+ var mergeRequestQueueSchema = z2.enum([
412
+ "reviewable",
413
+ "created_by_me",
414
+ "app_reviewable",
415
+ "app_outgoing",
416
+ "app_related_visible"
417
+ ]);
418
+ var appScopedMergeRequestQueueSchema = z2.enum(["app_reviewable", "app_outgoing", "app_related_visible"]);
411
419
  var statusInputSchema = {
412
420
  ...commonRequestFieldsSchema,
413
421
  includeRemote: z2.boolean().optional()
@@ -460,6 +468,25 @@ var inboxInputSchema = {
460
468
  outputMode: z2.enum(["summary", "full"]).optional(),
461
469
  status: z2.string().trim().min(1).optional()
462
470
  };
471
+ var reviewQueueInputSchema = {
472
+ requestId: z2.string().trim().min(1).optional(),
473
+ outputMode: z2.enum(["summary", "full"]).optional(),
474
+ status: z2.string().trim().min(1).optional(),
475
+ kind: z2.enum(["merge", "sync", "all"]).optional()
476
+ };
477
+ var myMergeRequestsInputSchema = {
478
+ requestId: z2.string().trim().min(1).optional(),
479
+ outputMode: z2.enum(["summary", "full"]).optional(),
480
+ status: z2.string().trim().min(1).optional(),
481
+ kind: z2.enum(["merge", "sync", "all"]).optional()
482
+ };
483
+ var appMergeRequestsInputSchema = {
484
+ ...commonRequestFieldsSchema,
485
+ queue: appScopedMergeRequestQueueSchema,
486
+ appId: z2.string().trim().min(1).optional(),
487
+ status: z2.string().trim().min(1).optional(),
488
+ kind: z2.enum(["merge", "sync", "all"]).optional()
489
+ };
463
490
  var viewMergeRequestInputSchema = {
464
491
  requestId: z2.string().trim().min(1).optional(),
465
492
  outputMode: z2.enum(["summary", "full"]).optional(),
@@ -518,6 +545,11 @@ var requestMergeDataSchema = genericRecordSchema;
518
545
  var inboxDataSchema = z2.object({
519
546
  mergeRequests: z2.array(genericRecordSchema)
520
547
  });
548
+ var mergeRequestQueueDataSchema = z2.object({
549
+ queue: mergeRequestQueueSchema,
550
+ appId: z2.string().nullable(),
551
+ mergeRequests: z2.array(genericRecordSchema)
552
+ });
521
553
  var viewMergeRequestDataSchema = genericRecordSchema;
522
554
  var approveDataSchema = genericRecordSchema;
523
555
  var rejectDataSchema = genericRecordSchema;
@@ -533,6 +565,7 @@ var recordTurnSuccessSchema = makeSuccessSchema(recordTurnDataSchema);
533
565
  var syncSuccessSchema = makeSuccessSchema(syncDataSchema);
534
566
  var requestMergeSuccessSchema = makeSuccessSchema(requestMergeDataSchema);
535
567
  var inboxSuccessSchema = makeSuccessSchema(inboxDataSchema);
568
+ var mergeRequestQueueSuccessSchema = makeSuccessSchema(mergeRequestQueueDataSchema);
536
569
  var viewMergeRequestSuccessSchema = makeSuccessSchema(viewMergeRequestDataSchema);
537
570
  var approveSuccessSchema = makeSuccessSchema(approveDataSchema);
538
571
  var rejectSuccessSchema = makeSuccessSchema(rejectDataSchema);
@@ -546,6 +579,7 @@ import {
546
579
  collabRecordTurn as coreCollabRecordTurn,
547
580
  collabApprove as coreCollabApprove,
548
581
  collabInbox as coreCollabInbox,
582
+ collabListMergeRequests as coreCollabListMergeRequests,
549
583
  collabInit as coreCollabInit,
550
584
  collabInvite as coreCollabInvite,
551
585
  collabReconcile as coreCollabReconcile,
@@ -581,18 +615,18 @@ function getRiskLevel(status) {
581
615
  function getRecommendedNextActions(status) {
582
616
  if (status.repo.branchMismatch) {
583
617
  return [
584
- `Switch to the preferred branch (${status.binding.preferredBranch ?? "configured in the binding"}) before mutating Remix state, or rerun with allowBranchMismatch=true if intentional.`
618
+ `Switch to the preferred branch (${status.binding.preferredBranch ?? "configured in the binding"}) before using Remix mutation tools, or rerun with allowBranchMismatch=true if this deviation is intentional.`
585
619
  ];
586
620
  }
587
621
  switch (status.recommendedAction) {
588
622
  case "init":
589
- return ["Run remix_collab_init to bind the repository to Remix."];
623
+ return ["Run remix_collab_init to bind the repository to Remix before using any Remix collaboration mutation flow."];
590
624
  case "sync":
591
- return ["Run remix_collab_sync_preview, then remix_collab_sync_apply if the preview is acceptable."];
625
+ return ["Run remix_collab_sync_preview, then remix_collab_sync_apply if the preview is acceptable. Use this instead of raw git pull or rebase for bound-repo alignment."];
592
626
  case "reconcile":
593
- return ["Run remix_collab_reconcile_preview before attempting remix_collab_reconcile_apply."];
594
- case "review_inbox":
595
- return ["Run remix_collab_inbox to inspect open merge requests."];
627
+ return ["Run remix_collab_reconcile_preview before attempting remix_collab_reconcile_apply. Reconcile is the explicit Remix recovery path when fast-forward sync is no longer possible."];
628
+ case "review_queue":
629
+ return ["Run remix_collab_review_queue to inspect reviewable merge requests instead of using local git merge flows."];
596
630
  default:
597
631
  return [];
598
632
  }
@@ -650,7 +684,7 @@ async function initCollab(params) {
650
684
  return {
651
685
  data: result,
652
686
  warnings: collectResultWarnings(result),
653
- recommendedNextActions: ["Run remix_collab_status to inspect sync and merge readiness."],
687
+ recommendedNextActions: ["Run remix_collab_status to inspect sync, reconcile, and merge-request readiness before mutating bound-repo state."],
654
688
  logContext: {
655
689
  repoRoot: result.repoRoot,
656
690
  appId: result.appId
@@ -680,7 +714,7 @@ async function remixCollab(params) {
680
714
  return {
681
715
  data: result,
682
716
  warnings: collectResultWarnings(result),
683
- recommendedNextActions: ["Run remix_collab_status inside the remix checkout to inspect its state."],
717
+ recommendedNextActions: ["Run remix_collab_status inside the remix checkout before using Remix mutation tools there."],
684
718
  logContext: {
685
719
  repoRoot: result.repoRoot,
686
720
  appId: result.appId
@@ -765,7 +799,7 @@ async function syncCollab(params) {
765
799
  return {
766
800
  data: result,
767
801
  warnings: collectResultWarnings(result),
768
- recommendedNextActions: params.dryRun ? ["Run remix_collab_sync_apply with confirm=true to apply this fast-forward update."] : [],
802
+ recommendedNextActions: params.dryRun ? ["Run remix_collab_sync_apply with confirm=true to apply this fast-forward update instead of using raw git pull or rebase."] : [],
769
803
  logContext: {
770
804
  repoRoot: result.repoRoot
771
805
  }
@@ -780,7 +814,7 @@ async function requestMerge(params) {
780
814
  return {
781
815
  data: result,
782
816
  warnings: [],
783
- recommendedNextActions: result.id ? [`Run remix_collab_view_merge_request with mrId=${String(result.id)} to inspect the request.`] : [],
817
+ recommendedNextActions: result.id ? [`Run remix_collab_view_merge_request with mrId=${String(result.id)} to inspect the request before deciding whether to approve or reject it.`] : [],
784
818
  logContext: {
785
819
  mrId: typeof result.id === "string" ? result.id : null
786
820
  }
@@ -799,6 +833,67 @@ async function inbox(params) {
799
833
  logContext: {}
800
834
  };
801
835
  }
836
+ async function reviewQueue(params) {
837
+ const api = await createCollabApiClient();
838
+ const result = await coreCollabListMergeRequests({
839
+ api,
840
+ queue: "reviewable",
841
+ status: params.status ?? "open",
842
+ kind: params.kind ?? "merge"
843
+ });
844
+ return {
845
+ data: {
846
+ queue: result.queue,
847
+ appId: result.appId,
848
+ mergeRequests: result.mergeRequests
849
+ },
850
+ warnings: [],
851
+ recommendedNextActions: [],
852
+ logContext: {}
853
+ };
854
+ }
855
+ async function myMergeRequests(params) {
856
+ const api = await createCollabApiClient();
857
+ const result = await coreCollabListMergeRequests({
858
+ api,
859
+ queue: "created_by_me",
860
+ status: params.status ?? "open",
861
+ kind: params.kind ?? "merge"
862
+ });
863
+ return {
864
+ data: {
865
+ queue: result.queue,
866
+ appId: result.appId,
867
+ mergeRequests: result.mergeRequests
868
+ },
869
+ warnings: [],
870
+ recommendedNextActions: [],
871
+ logContext: {}
872
+ };
873
+ }
874
+ async function listAppMergeRequests(params) {
875
+ const api = await createCollabApiClient();
876
+ const result = await coreCollabListMergeRequests({
877
+ api,
878
+ cwd: params.cwd,
879
+ appId: params.appId,
880
+ queue: params.queue,
881
+ status: params.status ?? "open",
882
+ kind: params.kind ?? "merge"
883
+ });
884
+ return {
885
+ data: {
886
+ queue: result.queue,
887
+ appId: result.appId,
888
+ mergeRequests: result.mergeRequests
889
+ },
890
+ warnings: [],
891
+ recommendedNextActions: [],
892
+ logContext: {
893
+ appId: result.appId
894
+ }
895
+ };
896
+ }
802
897
  async function viewMergeRequest(params) {
803
898
  const api = await createCollabApiClient();
804
899
  const review = await coreCollabView({
@@ -887,7 +982,7 @@ async function reconcile(params) {
887
982
  return {
888
983
  data: result,
889
984
  warnings: collectWarnings(result.warnings),
890
- recommendedNextActions: params.dryRun ? ["Run remix_collab_reconcile_apply with confirm=true only if the preview is acceptable."] : [],
985
+ recommendedNextActions: params.dryRun ? ["Run remix_collab_reconcile_apply with confirm=true only if the preview is acceptable. Do not replace this with raw git history-rewrite commands."] : [],
891
986
  risks: params.dryRun ? ["Reconcile apply rewrites local history and creates a backup branch."] : [],
892
987
  logContext: {
893
988
  repoRoot: result.repoRoot ?? null
@@ -942,7 +1037,7 @@ function buildSuccessEnvelope(tool, requestId, result) {
942
1037
  };
943
1038
  }
944
1039
  function deriveErrorRisks(tool, normalized) {
945
- if (tool === "remix_collab_add" && normalized.message === "Change step succeeded remotely, but automatic local sync failed.") {
1040
+ if ((tool === "remix_collab_add" || tool === "remix_collab_add_change_step") && normalized.message === "Change step succeeded remotely, but automatic local sync failed.") {
946
1041
  return ["The change step succeeded remotely, but the local repository may need manual recovery or a follow-up sync."];
947
1042
  }
948
1043
  if (normalized.code === "DESTRUCTIVE_OPERATION_BLOCKED") {
@@ -1022,7 +1117,7 @@ function registerTool(server, context, params) {
1022
1117
  function registerCollabTools(server, context) {
1023
1118
  registerTool(server, context, {
1024
1119
  name: "remix_collab_status",
1025
- description: "Summarize repository binding, worktree state, merge request counts, and sync or reconcile readiness.",
1120
+ description: "Required first read for a bound repository: summarize binding, worktree state, merge request counts, and sync or reconcile readiness before Remix mutations.",
1026
1121
  access: "read",
1027
1122
  inputSchema: statusInputSchema,
1028
1123
  outputSchema: statusSuccessSchema,
@@ -1081,7 +1176,33 @@ function registerCollabTools(server, context) {
1081
1176
  });
1082
1177
  registerTool(server, context, {
1083
1178
  name: "remix_collab_add",
1084
- description: "Record one collaboration change step for the current bound repository, using the live worktree by default.",
1179
+ 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.",
1180
+ access: "local_write",
1181
+ inputSchema: addInputSchema,
1182
+ outputSchema: addSuccessSchema,
1183
+ run: async (args) => {
1184
+ const input = z3.object(addInputSchema).parse(args);
1185
+ const cwd = resolvePolicyCwd(context.policy, input.cwd);
1186
+ const diffSource = input.diffSource ?? "worktree";
1187
+ if (diffSource === "external") {
1188
+ const externalDiff = input.externalDiff ?? "";
1189
+ assertDiffWithinLimit(context.policy, externalDiff);
1190
+ }
1191
+ return addCollabStep({
1192
+ cwd,
1193
+ prompt: input.prompt,
1194
+ assistantResponse: input.assistantResponse,
1195
+ diffSource,
1196
+ externalDiff: input.externalDiff,
1197
+ allowBranchMismatch: input.allowBranchMismatch ?? false,
1198
+ idempotencyKey: input.idempotencyKey,
1199
+ agent: context.agentMetadata
1200
+ });
1201
+ }
1202
+ });
1203
+ registerTool(server, context, {
1204
+ name: "remix_collab_add_change_step",
1205
+ description: "Alias of remix_collab_add with a more explicit name: record a code-diff change step for the current bound repository.",
1085
1206
  access: "local_write",
1086
1207
  inputSchema: addInputSchema,
1087
1208
  outputSchema: addSuccessSchema,
@@ -1107,7 +1228,26 @@ function registerCollabTools(server, context) {
1107
1228
  });
1108
1229
  registerTool(server, context, {
1109
1230
  name: "remix_collab_record_turn",
1110
- description: "Record one no-diff collaboration turn for the current bound repository after a completed assistant response.",
1231
+ description: "Record one no-diff collaboration turn for the current bound repository after a completed assistant response. This is for prompt/response history only and will fail if the worktree has code changes.",
1232
+ access: "remote_write",
1233
+ inputSchema: recordTurnInputSchema,
1234
+ outputSchema: recordTurnSuccessSchema,
1235
+ run: async (args) => {
1236
+ const input = z3.object(recordTurnInputSchema).parse(args);
1237
+ const cwd = resolvePolicyCwd(context.policy, input.cwd);
1238
+ return recordCollabTurn({
1239
+ cwd,
1240
+ prompt: input.prompt,
1241
+ assistantResponse: input.assistantResponse,
1242
+ allowBranchMismatch: input.allowBranchMismatch ?? false,
1243
+ idempotencyKey: input.idempotencyKey,
1244
+ agent: context.agentMetadata
1245
+ });
1246
+ }
1247
+ });
1248
+ registerTool(server, context, {
1249
+ name: "remix_collab_record_no_diff_turn",
1250
+ description: "Alias of remix_collab_record_turn with a more explicit name: record a prompt/response turn only when the worktree has no code diff.",
1111
1251
  access: "remote_write",
1112
1252
  inputSchema: recordTurnInputSchema,
1113
1253
  outputSchema: recordTurnSuccessSchema,
@@ -1126,7 +1266,7 @@ function registerCollabTools(server, context) {
1126
1266
  });
1127
1267
  registerTool(server, context, {
1128
1268
  name: "remix_collab_sync_preview",
1129
- description: "Preview whether the current bound repository can be fast-forward synced to the Remix app state.",
1269
+ description: "Preview whether the current bound repository can be fast-forward synced to the Remix app state. Use this instead of raw git pull or rebase for bound-repo alignment.",
1130
1270
  access: "read",
1131
1271
  inputSchema: previewInputSchema,
1132
1272
  outputSchema: syncSuccessSchema,
@@ -1138,7 +1278,7 @@ function registerCollabTools(server, context) {
1138
1278
  });
1139
1279
  registerTool(server, context, {
1140
1280
  name: "remix_collab_sync_apply",
1141
- description: "Fast-forward sync the current bound repository to the Remix app state.",
1281
+ description: "Fast-forward sync the current bound repository to the Remix app state. This is the Remix-native replacement for raw git pull or rebase in a bound repo.",
1142
1282
  access: "local_write",
1143
1283
  inputSchema: applyInputSchema,
1144
1284
  outputSchema: syncSuccessSchema,
@@ -1151,7 +1291,7 @@ function registerCollabTools(server, context) {
1151
1291
  });
1152
1292
  registerTool(server, context, {
1153
1293
  name: "remix_collab_request_merge",
1154
- description: "Open a merge request from the current bound repository to its upstream app.",
1294
+ description: "Open a Remix merge request from the current bound repository to its upstream app instead of merging locally with raw git.",
1155
1295
  access: "remote_write",
1156
1296
  inputSchema: requestMergeInputSchema,
1157
1297
  outputSchema: requestMergeSuccessSchema,
@@ -1161,9 +1301,49 @@ function registerCollabTools(server, context) {
1161
1301
  return requestMerge({ cwd });
1162
1302
  }
1163
1303
  });
1304
+ registerTool(server, context, {
1305
+ name: "remix_collab_review_queue",
1306
+ description: "List reviewable merge requests: open requests the current user can actively approve or reject on target apps they administer or maintain. Optional `status` filters the results; optional `kind` defaults to `merge`.",
1307
+ access: "read",
1308
+ inputSchema: reviewQueueInputSchema,
1309
+ outputSchema: mergeRequestQueueSuccessSchema,
1310
+ run: async (args) => {
1311
+ const input = z3.object(reviewQueueInputSchema).parse(args);
1312
+ return reviewQueue({ status: input.status, kind: input.kind });
1313
+ }
1314
+ });
1315
+ registerTool(server, context, {
1316
+ name: "remix_collab_my_merge_requests",
1317
+ description: "List merge requests created by the current user across all apps visible to that user, not just the current bound checkout. This still works even when the user is not a reviewer on the target app. Optional `status` filters the results; optional `kind` defaults to `merge`.",
1318
+ access: "read",
1319
+ inputSchema: myMergeRequestsInputSchema,
1320
+ outputSchema: mergeRequestQueueSuccessSchema,
1321
+ run: async (args) => {
1322
+ const input = z3.object(myMergeRequestsInputSchema).parse(args);
1323
+ return myMergeRequests({ status: input.status, kind: input.kind });
1324
+ }
1325
+ });
1326
+ registerTool(server, context, {
1327
+ name: "remix_collab_list_app_merge_requests",
1328
+ description: "List app-scoped merge requests for the current bound checkout or an explicit `appId`. Required `queue` must be one of: `app_reviewable` (incoming requests this app can review), `app_outgoing` (requests created from this app), or `app_related_visible` (all open visible requests where this app is either source or target). Optional `status` filters the results; optional `kind` defaults to `merge`.",
1329
+ access: "read",
1330
+ inputSchema: appMergeRequestsInputSchema,
1331
+ outputSchema: mergeRequestQueueSuccessSchema,
1332
+ run: async (args) => {
1333
+ const input = z3.object(appMergeRequestsInputSchema).parse(args);
1334
+ const cwd = input.cwd ? resolvePolicyCwd(context.policy, input.cwd) : void 0;
1335
+ return listAppMergeRequests({
1336
+ cwd,
1337
+ appId: input.appId,
1338
+ queue: input.queue,
1339
+ status: input.status,
1340
+ kind: input.kind
1341
+ });
1342
+ }
1343
+ });
1164
1344
  registerTool(server, context, {
1165
1345
  name: "remix_collab_inbox",
1166
- description: "List merge requests available for review.",
1346
+ description: "Backwards-compatible alias of `remix_collab_review_queue`. Lists reviewable merge requests only, not a broad visible inbox. Optional `status` filters the results.",
1167
1347
  access: "read",
1168
1348
  inputSchema: inboxInputSchema,
1169
1349
  outputSchema: inboxSuccessSchema,
@@ -1174,7 +1354,7 @@ function registerCollabTools(server, context) {
1174
1354
  });
1175
1355
  registerTool(server, context, {
1176
1356
  name: "remix_collab_view_merge_request",
1177
- description: "View merge request metadata, prompts, change steps, and optionally a bounded unified diff.",
1357
+ description: "View Remix merge request metadata, prompts, change steps, and optionally a bounded unified diff before approval or rejection.",
1178
1358
  access: "read",
1179
1359
  inputSchema: viewMergeRequestInputSchema,
1180
1360
  outputSchema: viewMergeRequestSuccessSchema,
@@ -1189,7 +1369,7 @@ function registerCollabTools(server, context) {
1189
1369
  });
1190
1370
  registerTool(server, context, {
1191
1371
  name: "remix_collab_approve_remote",
1192
- description: "Approve a merge request remotely and wait for terminal completion without mutating the local repository.",
1372
+ description: "Approve a merge request remotely and wait for terminal completion without mutating the local repository, preserving Remix as the merge authority.",
1193
1373
  access: "remote_write",
1194
1374
  inputSchema: approveInputSchema,
1195
1375
  outputSchema: approveSuccessSchema,
@@ -1205,7 +1385,7 @@ function registerCollabTools(server, context) {
1205
1385
  });
1206
1386
  registerTool(server, context, {
1207
1387
  name: "remix_collab_approve_and_sync_target",
1208
- description: "Approve a merge request, wait for completion, and sync the target repository locally.",
1388
+ description: "Approve a merge request, wait for completion, and sync the target repository locally through Remix rather than a local git merge flow.",
1209
1389
  access: "local_write",
1210
1390
  inputSchema: approveInputSchema,
1211
1391
  outputSchema: approveSuccessSchema,
@@ -1235,7 +1415,7 @@ function registerCollabTools(server, context) {
1235
1415
  });
1236
1416
  registerTool(server, context, {
1237
1417
  name: "remix_collab_sync_upstream",
1238
- description: "Sync upstream changes into the current remix and update the local checkout.",
1418
+ description: "Sync upstream changes into the current remix and update the local checkout through Remix-native lineage management rather than raw git pull or merge.",
1239
1419
  access: "local_write",
1240
1420
  inputSchema: applyInputSchema,
1241
1421
  outputSchema: syncUpstreamSuccessSchema,
@@ -1248,7 +1428,7 @@ function registerCollabTools(server, context) {
1248
1428
  });
1249
1429
  registerTool(server, context, {
1250
1430
  name: "remix_collab_reconcile_preview",
1251
- description: "Preview reconcile readiness when the local repository cannot be fast-forward synced.",
1431
+ description: "Preview reconcile readiness when the local repository cannot be fast-forward synced. Use this before any explicit Remix history-repair workflow.",
1252
1432
  access: "read",
1253
1433
  inputSchema: previewInputSchema,
1254
1434
  outputSchema: reconcileSuccessSchema,
@@ -1260,7 +1440,7 @@ function registerCollabTools(server, context) {
1260
1440
  });
1261
1441
  registerTool(server, context, {
1262
1442
  name: "remix_collab_reconcile_apply",
1263
- description: "Reconcile divergent local history against the bound Remix app and update the local checkout.",
1443
+ description: "Reconcile divergent local history against the bound Remix app and update the local checkout. This is the explicit Remix recovery path for divergent history.",
1264
1444
  access: "local_write",
1265
1445
  inputSchema: applyInputSchema,
1266
1446
  outputSchema: reconcileSuccessSchema,
@@ -1387,7 +1567,7 @@ function buildSearchNextActions(result) {
1387
1567
  ];
1388
1568
  }
1389
1569
  const actions = [
1390
- "Review the top matched memory items before falling back to raw git history so you keep the reasoning context in view."
1570
+ "Review the top matched memory items before reaching for raw git so the relevant Remix reasoning context stays in view."
1391
1571
  ];
1392
1572
  const changeStepId = getFirstChangeStepId(result.items);
1393
1573
  if (changeStepId) {
@@ -1422,7 +1602,7 @@ function buildTimelineNextActions(result) {
1422
1602
  }
1423
1603
  function buildChangeStepDiffNextActions(changeStepId) {
1424
1604
  return [
1425
- `Inspect the stored diff for \`changeStepId=${changeStepId}\`, then use raw git only if you still need exact repository-level commit or ancestry details.`
1605
+ `Inspect the stored diff for \`changeStepId=${changeStepId}\`, then use raw git only if you still need exact repository-level commit, blame, ancestry, or raw patch details.`
1426
1606
  ];
1427
1607
  }
1428
1608
  function unwrapResponseObject2(resp, label) {
@@ -1616,7 +1796,7 @@ function registerTool2(server, context, params) {
1616
1796
  function registerMemoryTools(server, context) {
1617
1797
  registerTool2(server, context, {
1618
1798
  name: "remix_collab_memory_summary",
1619
- description: "First read for a bound app's current collaboration state, recent reasoning context, and merge or reconcile history before deeper inspection.",
1799
+ description: "First read for a bound app's current collaboration state, recent reasoning context, and merge or reconcile history before deeper inspection or any raw git history lookup.",
1620
1800
  access: "read",
1621
1801
  inputSchema: memorySummaryInputSchema,
1622
1802
  outputSchema: memorySummarySuccessSchema,
@@ -1631,7 +1811,7 @@ function registerMemoryTools(server, context) {
1631
1811
  });
1632
1812
  registerTool2(server, context, {
1633
1813
  name: "remix_collab_memory_search",
1634
- description: "Default tool for why/history/failed-attempt/user-intent questions. Search prompts, diffs, merge activity, reconciles, and other historical context before using raw git history.",
1814
+ description: "Default tool for why/history/failed-attempt/user-intent questions. Search prompts, diffs, merge activity, reconciles, and other historical context before using raw git for exact repository facts.",
1635
1815
  access: "read",
1636
1816
  inputSchema: memorySearchInputSchema,
1637
1817
  outputSchema: memorySearchSuccessSchema,
@@ -1652,7 +1832,7 @@ function registerMemoryTools(server, context) {
1652
1832
  });
1653
1833
  registerTool2(server, context, {
1654
1834
  name: "remix_collab_memory_timeline",
1655
- description: "Chronological view of collaboration memory for understanding what happened and in what order, with optional filters for bounded historical inspection.",
1835
+ description: "Chronological view of collaboration memory for understanding what happened and in what order, with optional filters for bounded historical inspection before any exact-facts raw git follow-up.",
1656
1836
  access: "read",
1657
1837
  inputSchema: memoryTimelineInputSchema,
1658
1838
  outputSchema: memoryTimelineSuccessSchema,
@@ -1672,7 +1852,7 @@ function registerMemoryTools(server, context) {
1672
1852
  });
1673
1853
  registerTool2(server, context, {
1674
1854
  name: "remix_collab_memory_change_step_diff",
1675
- description: "Second-hop expansion tool that fetches the full stored diff for a specific change step after memory search, timeline, or review work has identified the relevant `changeStepId`.",
1855
+ description: "Second-hop expansion tool that fetches the full stored diff for a specific change step after memory search, timeline, or review work has identified the relevant `changeStepId`, keeping historical inspection inside Remix before raw git fallback.",
1676
1856
  access: "read",
1677
1857
  inputSchema: changeStepDiffInputSchema,
1678
1858
  outputSchema: changeStepDiffSuccessSchema,