@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/server.js CHANGED
@@ -405,6 +405,14 @@ function makeErrorResult(envelope) {
405
405
  // src/contracts/collab.ts
406
406
  var genericRecordSchema = z2.record(z2.string(), z2.unknown());
407
407
  var genericArraySchema = z2.array(genericRecordSchema);
408
+ var mergeRequestQueueSchema = z2.enum([
409
+ "reviewable",
410
+ "created_by_me",
411
+ "app_reviewable",
412
+ "app_outgoing",
413
+ "app_related_visible"
414
+ ]);
415
+ var appScopedMergeRequestQueueSchema = z2.enum(["app_reviewable", "app_outgoing", "app_related_visible"]);
408
416
  var statusInputSchema = {
409
417
  ...commonRequestFieldsSchema,
410
418
  includeRemote: z2.boolean().optional()
@@ -457,6 +465,25 @@ var inboxInputSchema = {
457
465
  outputMode: z2.enum(["summary", "full"]).optional(),
458
466
  status: z2.string().trim().min(1).optional()
459
467
  };
468
+ var reviewQueueInputSchema = {
469
+ requestId: z2.string().trim().min(1).optional(),
470
+ outputMode: z2.enum(["summary", "full"]).optional(),
471
+ status: z2.string().trim().min(1).optional(),
472
+ kind: z2.enum(["merge", "sync", "all"]).optional()
473
+ };
474
+ var myMergeRequestsInputSchema = {
475
+ requestId: z2.string().trim().min(1).optional(),
476
+ outputMode: z2.enum(["summary", "full"]).optional(),
477
+ status: z2.string().trim().min(1).optional(),
478
+ kind: z2.enum(["merge", "sync", "all"]).optional()
479
+ };
480
+ var appMergeRequestsInputSchema = {
481
+ ...commonRequestFieldsSchema,
482
+ queue: appScopedMergeRequestQueueSchema,
483
+ appId: z2.string().trim().min(1).optional(),
484
+ status: z2.string().trim().min(1).optional(),
485
+ kind: z2.enum(["merge", "sync", "all"]).optional()
486
+ };
460
487
  var viewMergeRequestInputSchema = {
461
488
  requestId: z2.string().trim().min(1).optional(),
462
489
  outputMode: z2.enum(["summary", "full"]).optional(),
@@ -515,6 +542,11 @@ var requestMergeDataSchema = genericRecordSchema;
515
542
  var inboxDataSchema = z2.object({
516
543
  mergeRequests: z2.array(genericRecordSchema)
517
544
  });
545
+ var mergeRequestQueueDataSchema = z2.object({
546
+ queue: mergeRequestQueueSchema,
547
+ appId: z2.string().nullable(),
548
+ mergeRequests: z2.array(genericRecordSchema)
549
+ });
518
550
  var viewMergeRequestDataSchema = genericRecordSchema;
519
551
  var approveDataSchema = genericRecordSchema;
520
552
  var rejectDataSchema = genericRecordSchema;
@@ -530,6 +562,7 @@ var recordTurnSuccessSchema = makeSuccessSchema(recordTurnDataSchema);
530
562
  var syncSuccessSchema = makeSuccessSchema(syncDataSchema);
531
563
  var requestMergeSuccessSchema = makeSuccessSchema(requestMergeDataSchema);
532
564
  var inboxSuccessSchema = makeSuccessSchema(inboxDataSchema);
565
+ var mergeRequestQueueSuccessSchema = makeSuccessSchema(mergeRequestQueueDataSchema);
533
566
  var viewMergeRequestSuccessSchema = makeSuccessSchema(viewMergeRequestDataSchema);
534
567
  var approveSuccessSchema = makeSuccessSchema(approveDataSchema);
535
568
  var rejectSuccessSchema = makeSuccessSchema(rejectDataSchema);
@@ -543,6 +576,7 @@ import {
543
576
  collabRecordTurn as coreCollabRecordTurn,
544
577
  collabApprove as coreCollabApprove,
545
578
  collabInbox as coreCollabInbox,
579
+ collabListMergeRequests as coreCollabListMergeRequests,
546
580
  collabInit as coreCollabInit,
547
581
  collabInvite as coreCollabInvite,
548
582
  collabReconcile as coreCollabReconcile,
@@ -578,18 +612,18 @@ function getRiskLevel(status) {
578
612
  function getRecommendedNextActions(status) {
579
613
  if (status.repo.branchMismatch) {
580
614
  return [
581
- `Switch to the preferred branch (${status.binding.preferredBranch ?? "configured in the binding"}) before mutating Remix state, or rerun with allowBranchMismatch=true if intentional.`
615
+ `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.`
582
616
  ];
583
617
  }
584
618
  switch (status.recommendedAction) {
585
619
  case "init":
586
- return ["Run remix_collab_init to bind the repository to Remix."];
620
+ return ["Run remix_collab_init to bind the repository to Remix before using any Remix collaboration mutation flow."];
587
621
  case "sync":
588
- return ["Run remix_collab_sync_preview, then remix_collab_sync_apply if the preview is acceptable."];
622
+ 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."];
589
623
  case "reconcile":
590
- return ["Run remix_collab_reconcile_preview before attempting remix_collab_reconcile_apply."];
591
- case "review_inbox":
592
- return ["Run remix_collab_inbox to inspect open merge requests."];
624
+ 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."];
625
+ case "review_queue":
626
+ return ["Run remix_collab_review_queue to inspect reviewable merge requests instead of using local git merge flows."];
593
627
  default:
594
628
  return [];
595
629
  }
@@ -647,7 +681,7 @@ async function initCollab(params) {
647
681
  return {
648
682
  data: result,
649
683
  warnings: collectResultWarnings(result),
650
- recommendedNextActions: ["Run remix_collab_status to inspect sync and merge readiness."],
684
+ recommendedNextActions: ["Run remix_collab_status to inspect sync, reconcile, and merge-request readiness before mutating bound-repo state."],
651
685
  logContext: {
652
686
  repoRoot: result.repoRoot,
653
687
  appId: result.appId
@@ -677,7 +711,7 @@ async function remixCollab(params) {
677
711
  return {
678
712
  data: result,
679
713
  warnings: collectResultWarnings(result),
680
- recommendedNextActions: ["Run remix_collab_status inside the remix checkout to inspect its state."],
714
+ recommendedNextActions: ["Run remix_collab_status inside the remix checkout before using Remix mutation tools there."],
681
715
  logContext: {
682
716
  repoRoot: result.repoRoot,
683
717
  appId: result.appId
@@ -762,7 +796,7 @@ async function syncCollab(params) {
762
796
  return {
763
797
  data: result,
764
798
  warnings: collectResultWarnings(result),
765
- recommendedNextActions: params.dryRun ? ["Run remix_collab_sync_apply with confirm=true to apply this fast-forward update."] : [],
799
+ 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."] : [],
766
800
  logContext: {
767
801
  repoRoot: result.repoRoot
768
802
  }
@@ -777,7 +811,7 @@ async function requestMerge(params) {
777
811
  return {
778
812
  data: result,
779
813
  warnings: [],
780
- recommendedNextActions: result.id ? [`Run remix_collab_view_merge_request with mrId=${String(result.id)} to inspect the request.`] : [],
814
+ 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.`] : [],
781
815
  logContext: {
782
816
  mrId: typeof result.id === "string" ? result.id : null
783
817
  }
@@ -796,6 +830,67 @@ async function inbox(params) {
796
830
  logContext: {}
797
831
  };
798
832
  }
833
+ async function reviewQueue(params) {
834
+ const api = await createCollabApiClient();
835
+ const result = await coreCollabListMergeRequests({
836
+ api,
837
+ queue: "reviewable",
838
+ status: params.status ?? "open",
839
+ kind: params.kind ?? "merge"
840
+ });
841
+ return {
842
+ data: {
843
+ queue: result.queue,
844
+ appId: result.appId,
845
+ mergeRequests: result.mergeRequests
846
+ },
847
+ warnings: [],
848
+ recommendedNextActions: [],
849
+ logContext: {}
850
+ };
851
+ }
852
+ async function myMergeRequests(params) {
853
+ const api = await createCollabApiClient();
854
+ const result = await coreCollabListMergeRequests({
855
+ api,
856
+ queue: "created_by_me",
857
+ status: params.status ?? "open",
858
+ kind: params.kind ?? "merge"
859
+ });
860
+ return {
861
+ data: {
862
+ queue: result.queue,
863
+ appId: result.appId,
864
+ mergeRequests: result.mergeRequests
865
+ },
866
+ warnings: [],
867
+ recommendedNextActions: [],
868
+ logContext: {}
869
+ };
870
+ }
871
+ async function listAppMergeRequests(params) {
872
+ const api = await createCollabApiClient();
873
+ const result = await coreCollabListMergeRequests({
874
+ api,
875
+ cwd: params.cwd,
876
+ appId: params.appId,
877
+ queue: params.queue,
878
+ status: params.status ?? "open",
879
+ kind: params.kind ?? "merge"
880
+ });
881
+ return {
882
+ data: {
883
+ queue: result.queue,
884
+ appId: result.appId,
885
+ mergeRequests: result.mergeRequests
886
+ },
887
+ warnings: [],
888
+ recommendedNextActions: [],
889
+ logContext: {
890
+ appId: result.appId
891
+ }
892
+ };
893
+ }
799
894
  async function viewMergeRequest(params) {
800
895
  const api = await createCollabApiClient();
801
896
  const review = await coreCollabView({
@@ -884,7 +979,7 @@ async function reconcile(params) {
884
979
  return {
885
980
  data: result,
886
981
  warnings: collectWarnings(result.warnings),
887
- recommendedNextActions: params.dryRun ? ["Run remix_collab_reconcile_apply with confirm=true only if the preview is acceptable."] : [],
982
+ 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."] : [],
888
983
  risks: params.dryRun ? ["Reconcile apply rewrites local history and creates a backup branch."] : [],
889
984
  logContext: {
890
985
  repoRoot: result.repoRoot ?? null
@@ -939,7 +1034,7 @@ function buildSuccessEnvelope(tool, requestId, result) {
939
1034
  };
940
1035
  }
941
1036
  function deriveErrorRisks(tool, normalized) {
942
- if (tool === "remix_collab_add" && normalized.message === "Change step succeeded remotely, but automatic local sync failed.") {
1037
+ if ((tool === "remix_collab_add" || tool === "remix_collab_add_change_step") && normalized.message === "Change step succeeded remotely, but automatic local sync failed.") {
943
1038
  return ["The change step succeeded remotely, but the local repository may need manual recovery or a follow-up sync."];
944
1039
  }
945
1040
  if (normalized.code === "DESTRUCTIVE_OPERATION_BLOCKED") {
@@ -1019,7 +1114,7 @@ function registerTool(server, context, params) {
1019
1114
  function registerCollabTools(server, context) {
1020
1115
  registerTool(server, context, {
1021
1116
  name: "remix_collab_status",
1022
- description: "Summarize repository binding, worktree state, merge request counts, and sync or reconcile readiness.",
1117
+ description: "Required first read for a bound repository: summarize binding, worktree state, merge request counts, and sync or reconcile readiness before Remix mutations.",
1023
1118
  access: "read",
1024
1119
  inputSchema: statusInputSchema,
1025
1120
  outputSchema: statusSuccessSchema,
@@ -1078,7 +1173,33 @@ function registerCollabTools(server, context) {
1078
1173
  });
1079
1174
  registerTool(server, context, {
1080
1175
  name: "remix_collab_add",
1081
- description: "Record one collaboration change step for the current bound repository, using the live worktree by default.",
1176
+ 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.",
1177
+ access: "local_write",
1178
+ inputSchema: addInputSchema,
1179
+ outputSchema: addSuccessSchema,
1180
+ run: async (args) => {
1181
+ const input = z3.object(addInputSchema).parse(args);
1182
+ const cwd = resolvePolicyCwd(context.policy, input.cwd);
1183
+ const diffSource = input.diffSource ?? "worktree";
1184
+ if (diffSource === "external") {
1185
+ const externalDiff = input.externalDiff ?? "";
1186
+ assertDiffWithinLimit(context.policy, externalDiff);
1187
+ }
1188
+ return addCollabStep({
1189
+ cwd,
1190
+ prompt: input.prompt,
1191
+ assistantResponse: input.assistantResponse,
1192
+ diffSource,
1193
+ externalDiff: input.externalDiff,
1194
+ allowBranchMismatch: input.allowBranchMismatch ?? false,
1195
+ idempotencyKey: input.idempotencyKey,
1196
+ agent: context.agentMetadata
1197
+ });
1198
+ }
1199
+ });
1200
+ registerTool(server, context, {
1201
+ name: "remix_collab_add_change_step",
1202
+ description: "Alias of remix_collab_add with a more explicit name: record a code-diff change step for the current bound repository.",
1082
1203
  access: "local_write",
1083
1204
  inputSchema: addInputSchema,
1084
1205
  outputSchema: addSuccessSchema,
@@ -1104,7 +1225,26 @@ function registerCollabTools(server, context) {
1104
1225
  });
1105
1226
  registerTool(server, context, {
1106
1227
  name: "remix_collab_record_turn",
1107
- description: "Record one no-diff collaboration turn for the current bound repository after a completed assistant response.",
1228
+ 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.",
1229
+ access: "remote_write",
1230
+ inputSchema: recordTurnInputSchema,
1231
+ outputSchema: recordTurnSuccessSchema,
1232
+ run: async (args) => {
1233
+ const input = z3.object(recordTurnInputSchema).parse(args);
1234
+ const cwd = resolvePolicyCwd(context.policy, input.cwd);
1235
+ return recordCollabTurn({
1236
+ cwd,
1237
+ prompt: input.prompt,
1238
+ assistantResponse: input.assistantResponse,
1239
+ allowBranchMismatch: input.allowBranchMismatch ?? false,
1240
+ idempotencyKey: input.idempotencyKey,
1241
+ agent: context.agentMetadata
1242
+ });
1243
+ }
1244
+ });
1245
+ registerTool(server, context, {
1246
+ name: "remix_collab_record_no_diff_turn",
1247
+ 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.",
1108
1248
  access: "remote_write",
1109
1249
  inputSchema: recordTurnInputSchema,
1110
1250
  outputSchema: recordTurnSuccessSchema,
@@ -1123,7 +1263,7 @@ function registerCollabTools(server, context) {
1123
1263
  });
1124
1264
  registerTool(server, context, {
1125
1265
  name: "remix_collab_sync_preview",
1126
- description: "Preview whether the current bound repository can be fast-forward synced to the Remix app state.",
1266
+ 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.",
1127
1267
  access: "read",
1128
1268
  inputSchema: previewInputSchema,
1129
1269
  outputSchema: syncSuccessSchema,
@@ -1135,7 +1275,7 @@ function registerCollabTools(server, context) {
1135
1275
  });
1136
1276
  registerTool(server, context, {
1137
1277
  name: "remix_collab_sync_apply",
1138
- description: "Fast-forward sync the current bound repository to the Remix app state.",
1278
+ 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.",
1139
1279
  access: "local_write",
1140
1280
  inputSchema: applyInputSchema,
1141
1281
  outputSchema: syncSuccessSchema,
@@ -1148,7 +1288,7 @@ function registerCollabTools(server, context) {
1148
1288
  });
1149
1289
  registerTool(server, context, {
1150
1290
  name: "remix_collab_request_merge",
1151
- description: "Open a merge request from the current bound repository to its upstream app.",
1291
+ description: "Open a Remix merge request from the current bound repository to its upstream app instead of merging locally with raw git.",
1152
1292
  access: "remote_write",
1153
1293
  inputSchema: requestMergeInputSchema,
1154
1294
  outputSchema: requestMergeSuccessSchema,
@@ -1158,9 +1298,49 @@ function registerCollabTools(server, context) {
1158
1298
  return requestMerge({ cwd });
1159
1299
  }
1160
1300
  });
1301
+ registerTool(server, context, {
1302
+ name: "remix_collab_review_queue",
1303
+ 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`.",
1304
+ access: "read",
1305
+ inputSchema: reviewQueueInputSchema,
1306
+ outputSchema: mergeRequestQueueSuccessSchema,
1307
+ run: async (args) => {
1308
+ const input = z3.object(reviewQueueInputSchema).parse(args);
1309
+ return reviewQueue({ status: input.status, kind: input.kind });
1310
+ }
1311
+ });
1312
+ registerTool(server, context, {
1313
+ name: "remix_collab_my_merge_requests",
1314
+ 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`.",
1315
+ access: "read",
1316
+ inputSchema: myMergeRequestsInputSchema,
1317
+ outputSchema: mergeRequestQueueSuccessSchema,
1318
+ run: async (args) => {
1319
+ const input = z3.object(myMergeRequestsInputSchema).parse(args);
1320
+ return myMergeRequests({ status: input.status, kind: input.kind });
1321
+ }
1322
+ });
1323
+ registerTool(server, context, {
1324
+ name: "remix_collab_list_app_merge_requests",
1325
+ 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`.",
1326
+ access: "read",
1327
+ inputSchema: appMergeRequestsInputSchema,
1328
+ outputSchema: mergeRequestQueueSuccessSchema,
1329
+ run: async (args) => {
1330
+ const input = z3.object(appMergeRequestsInputSchema).parse(args);
1331
+ const cwd = input.cwd ? resolvePolicyCwd(context.policy, input.cwd) : void 0;
1332
+ return listAppMergeRequests({
1333
+ cwd,
1334
+ appId: input.appId,
1335
+ queue: input.queue,
1336
+ status: input.status,
1337
+ kind: input.kind
1338
+ });
1339
+ }
1340
+ });
1161
1341
  registerTool(server, context, {
1162
1342
  name: "remix_collab_inbox",
1163
- description: "List merge requests available for review.",
1343
+ description: "Backwards-compatible alias of `remix_collab_review_queue`. Lists reviewable merge requests only, not a broad visible inbox. Optional `status` filters the results.",
1164
1344
  access: "read",
1165
1345
  inputSchema: inboxInputSchema,
1166
1346
  outputSchema: inboxSuccessSchema,
@@ -1171,7 +1351,7 @@ function registerCollabTools(server, context) {
1171
1351
  });
1172
1352
  registerTool(server, context, {
1173
1353
  name: "remix_collab_view_merge_request",
1174
- description: "View merge request metadata, prompts, change steps, and optionally a bounded unified diff.",
1354
+ description: "View Remix merge request metadata, prompts, change steps, and optionally a bounded unified diff before approval or rejection.",
1175
1355
  access: "read",
1176
1356
  inputSchema: viewMergeRequestInputSchema,
1177
1357
  outputSchema: viewMergeRequestSuccessSchema,
@@ -1186,7 +1366,7 @@ function registerCollabTools(server, context) {
1186
1366
  });
1187
1367
  registerTool(server, context, {
1188
1368
  name: "remix_collab_approve_remote",
1189
- description: "Approve a merge request remotely and wait for terminal completion without mutating the local repository.",
1369
+ description: "Approve a merge request remotely and wait for terminal completion without mutating the local repository, preserving Remix as the merge authority.",
1190
1370
  access: "remote_write",
1191
1371
  inputSchema: approveInputSchema,
1192
1372
  outputSchema: approveSuccessSchema,
@@ -1202,7 +1382,7 @@ function registerCollabTools(server, context) {
1202
1382
  });
1203
1383
  registerTool(server, context, {
1204
1384
  name: "remix_collab_approve_and_sync_target",
1205
- description: "Approve a merge request, wait for completion, and sync the target repository locally.",
1385
+ description: "Approve a merge request, wait for completion, and sync the target repository locally through Remix rather than a local git merge flow.",
1206
1386
  access: "local_write",
1207
1387
  inputSchema: approveInputSchema,
1208
1388
  outputSchema: approveSuccessSchema,
@@ -1232,7 +1412,7 @@ function registerCollabTools(server, context) {
1232
1412
  });
1233
1413
  registerTool(server, context, {
1234
1414
  name: "remix_collab_sync_upstream",
1235
- description: "Sync upstream changes into the current remix and update the local checkout.",
1415
+ 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.",
1236
1416
  access: "local_write",
1237
1417
  inputSchema: applyInputSchema,
1238
1418
  outputSchema: syncUpstreamSuccessSchema,
@@ -1245,7 +1425,7 @@ function registerCollabTools(server, context) {
1245
1425
  });
1246
1426
  registerTool(server, context, {
1247
1427
  name: "remix_collab_reconcile_preview",
1248
- description: "Preview reconcile readiness when the local repository cannot be fast-forward synced.",
1428
+ description: "Preview reconcile readiness when the local repository cannot be fast-forward synced. Use this before any explicit Remix history-repair workflow.",
1249
1429
  access: "read",
1250
1430
  inputSchema: previewInputSchema,
1251
1431
  outputSchema: reconcileSuccessSchema,
@@ -1257,7 +1437,7 @@ function registerCollabTools(server, context) {
1257
1437
  });
1258
1438
  registerTool(server, context, {
1259
1439
  name: "remix_collab_reconcile_apply",
1260
- description: "Reconcile divergent local history against the bound Remix app and update the local checkout.",
1440
+ 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.",
1261
1441
  access: "local_write",
1262
1442
  inputSchema: applyInputSchema,
1263
1443
  outputSchema: reconcileSuccessSchema,
@@ -1384,7 +1564,7 @@ function buildSearchNextActions(result) {
1384
1564
  ];
1385
1565
  }
1386
1566
  const actions = [
1387
- "Review the top matched memory items before falling back to raw git history so you keep the reasoning context in view."
1567
+ "Review the top matched memory items before reaching for raw git so the relevant Remix reasoning context stays in view."
1388
1568
  ];
1389
1569
  const changeStepId = getFirstChangeStepId(result.items);
1390
1570
  if (changeStepId) {
@@ -1419,7 +1599,7 @@ function buildTimelineNextActions(result) {
1419
1599
  }
1420
1600
  function buildChangeStepDiffNextActions(changeStepId) {
1421
1601
  return [
1422
- `Inspect the stored diff for \`changeStepId=${changeStepId}\`, then use raw git only if you still need exact repository-level commit or ancestry details.`
1602
+ `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.`
1423
1603
  ];
1424
1604
  }
1425
1605
  function unwrapResponseObject2(resp, label) {
@@ -1613,7 +1793,7 @@ function registerTool2(server, context, params) {
1613
1793
  function registerMemoryTools(server, context) {
1614
1794
  registerTool2(server, context, {
1615
1795
  name: "remix_collab_memory_summary",
1616
- description: "First read for a bound app's current collaboration state, recent reasoning context, and merge or reconcile history before deeper inspection.",
1796
+ 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.",
1617
1797
  access: "read",
1618
1798
  inputSchema: memorySummaryInputSchema,
1619
1799
  outputSchema: memorySummarySuccessSchema,
@@ -1628,7 +1808,7 @@ function registerMemoryTools(server, context) {
1628
1808
  });
1629
1809
  registerTool2(server, context, {
1630
1810
  name: "remix_collab_memory_search",
1631
- 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.",
1811
+ 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.",
1632
1812
  access: "read",
1633
1813
  inputSchema: memorySearchInputSchema,
1634
1814
  outputSchema: memorySearchSuccessSchema,
@@ -1649,7 +1829,7 @@ function registerMemoryTools(server, context) {
1649
1829
  });
1650
1830
  registerTool2(server, context, {
1651
1831
  name: "remix_collab_memory_timeline",
1652
- description: "Chronological view of collaboration memory for understanding what happened and in what order, with optional filters for bounded historical inspection.",
1832
+ 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.",
1653
1833
  access: "read",
1654
1834
  inputSchema: memoryTimelineInputSchema,
1655
1835
  outputSchema: memoryTimelineSuccessSchema,
@@ -1669,7 +1849,7 @@ function registerMemoryTools(server, context) {
1669
1849
  });
1670
1850
  registerTool2(server, context, {
1671
1851
  name: "remix_collab_memory_change_step_diff",
1672
- 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`.",
1852
+ 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.",
1673
1853
  access: "read",
1674
1854
  inputSchema: changeStepDiffInputSchema,
1675
1855
  outputSchema: changeStepDiffSuccessSchema,