@agent-native/core 0.49.2 → 0.49.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.
Files changed (107) hide show
  1. package/dist/agent/engine/builder-engine.d.ts +1 -1
  2. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  3. package/dist/agent/engine/index.d.ts +1 -1
  4. package/dist/agent/engine/index.d.ts.map +1 -1
  5. package/dist/agent/engine/index.js +1 -1
  6. package/dist/agent/engine/index.js.map +1 -1
  7. package/dist/agent/engine/registry.d.ts +1 -0
  8. package/dist/agent/engine/registry.d.ts.map +1 -1
  9. package/dist/agent/engine/registry.js +11 -0
  10. package/dist/agent/engine/registry.js.map +1 -1
  11. package/dist/agent/model-config.d.ts +2 -2
  12. package/dist/agent/model-config.d.ts.map +1 -1
  13. package/dist/agent/model-config.js +2 -6
  14. package/dist/agent/model-config.js.map +1 -1
  15. package/dist/agent/production-agent.d.ts.map +1 -1
  16. package/dist/agent/production-agent.js +3 -2
  17. package/dist/agent/production-agent.js.map +1 -1
  18. package/dist/cli/code-agent-executor.d.ts.map +1 -1
  19. package/dist/cli/code-agent-executor.js +3 -2
  20. package/dist/cli/code-agent-executor.js.map +1 -1
  21. package/dist/cli/connect.d.ts.map +1 -1
  22. package/dist/cli/connect.js +117 -33
  23. package/dist/cli/connect.js.map +1 -1
  24. package/dist/cli/pr-visual-recap-workflow.d.ts +1 -1
  25. package/dist/cli/pr-visual-recap-workflow.d.ts.map +1 -1
  26. package/dist/cli/pr-visual-recap-workflow.js +1 -1
  27. package/dist/cli/pr-visual-recap-workflow.js.map +1 -1
  28. package/dist/cli/recap.d.ts +20 -0
  29. package/dist/cli/recap.d.ts.map +1 -1
  30. package/dist/cli/recap.js +256 -40
  31. package/dist/cli/recap.js.map +1 -1
  32. package/dist/cli/skills.d.ts +2 -2
  33. package/dist/cli/skills.d.ts.map +1 -1
  34. package/dist/cli/skills.js +5 -5
  35. package/dist/cli/skills.js.map +1 -1
  36. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  37. package/dist/client/MultiTabAssistantChat.js +0 -7
  38. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  39. package/dist/client/blocks/library/annotation-rail.d.ts +14 -0
  40. package/dist/client/blocks/library/annotation-rail.d.ts.map +1 -1
  41. package/dist/client/blocks/library/annotation-rail.js +64 -2
  42. package/dist/client/blocks/library/annotation-rail.js.map +1 -1
  43. package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
  44. package/dist/client/extensions/EmbeddedExtension.js +14 -6
  45. package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
  46. package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
  47. package/dist/client/extensions/ExtensionViewer.js +16 -7
  48. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  49. package/dist/client/extensions/extension-load-error.d.ts +7 -0
  50. package/dist/client/extensions/extension-load-error.d.ts.map +1 -0
  51. package/dist/client/extensions/extension-load-error.js +19 -0
  52. package/dist/client/extensions/extension-load-error.js.map +1 -0
  53. package/dist/client/use-chat-models.d.ts.map +1 -1
  54. package/dist/client/use-chat-models.js +0 -5
  55. package/dist/client/use-chat-models.js.map +1 -1
  56. package/dist/extensions/routes.d.ts.map +1 -1
  57. package/dist/extensions/routes.js +7 -3
  58. package/dist/extensions/routes.js.map +1 -1
  59. package/dist/file-upload/actions/upload-image.js +1 -1
  60. package/dist/file-upload/actions/upload-image.js.map +1 -1
  61. package/dist/file-upload/pre-upload-attachments.js +1 -1
  62. package/dist/file-upload/pre-upload-attachments.js.map +1 -1
  63. package/dist/file-upload/registry.js +1 -1
  64. package/dist/file-upload/registry.js.map +1 -1
  65. package/dist/integrations/webhook-handler.d.ts.map +1 -1
  66. package/dist/integrations/webhook-handler.js +3 -2
  67. package/dist/integrations/webhook-handler.js.map +1 -1
  68. package/dist/jobs/scheduler.d.ts.map +1 -1
  69. package/dist/jobs/scheduler.js +3 -2
  70. package/dist/jobs/scheduler.js.map +1 -1
  71. package/dist/mcp/connect-route.d.ts +2 -0
  72. package/dist/mcp/connect-route.d.ts.map +1 -1
  73. package/dist/mcp/connect-route.js +3 -0
  74. package/dist/mcp/connect-route.js.map +1 -1
  75. package/dist/mcp/server.js +1 -1
  76. package/dist/mcp/server.js.map +1 -1
  77. package/dist/observability/evals.d.ts.map +1 -1
  78. package/dist/observability/evals.js +5 -3
  79. package/dist/observability/evals.js.map +1 -1
  80. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  81. package/dist/scripts/agent-engines/list-agent-engines.js +6 -3
  82. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  83. package/dist/scripts/agent-engines/manage-agent-engine.d.ts.map +1 -1
  84. package/dist/scripts/agent-engines/manage-agent-engine.js +5 -1
  85. package/dist/scripts/agent-engines/manage-agent-engine.js.map +1 -1
  86. package/dist/scripts/agent-engines/set-agent-engine.d.ts.map +1 -1
  87. package/dist/scripts/agent-engines/set-agent-engine.js +7 -2
  88. package/dist/scripts/agent-engines/set-agent-engine.js.map +1 -1
  89. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  90. package/dist/server/agent-chat-plugin.js +14 -4
  91. package/dist/server/agent-chat-plugin.js.map +1 -1
  92. package/dist/server/complete-text.d.ts.map +1 -1
  93. package/dist/server/complete-text.js +3 -2
  94. package/dist/server/complete-text.js.map +1 -1
  95. package/dist/server/core-routes-plugin.d.ts +2 -0
  96. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  97. package/dist/server/core-routes-plugin.js +1 -0
  98. package/dist/server/core-routes-plugin.js.map +1 -1
  99. package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +7 -6
  100. package/dist/triggers/dispatcher.d.ts.map +1 -1
  101. package/dist/triggers/dispatcher.js +3 -2
  102. package/dist/triggers/dispatcher.js.map +1 -1
  103. package/docs/content/external-agents.md +1 -1
  104. package/docs/content/plan-plugin.md +2 -2
  105. package/docs/content/pr-visual-recap.md +12 -4
  106. package/package.json +1 -1
  107. package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +7 -6
@@ -52,6 +52,13 @@ const CANONICAL_SERVER_NAME_BY_MCP_URL = {
52
52
  "https://design.agent-native.com/_agent-native/mcp": "agent-native-design",
53
53
  "https://context-xray.agent-native.com/_agent-native/mcp": "agent-native-context-xray",
54
54
  };
55
+ const LEGACY_SERVER_NAMES_BY_MCP_URL = {
56
+ "https://plan.agent-native.com/_agent-native/mcp": [
57
+ "agent-native-plan",
58
+ "agent-native-plans",
59
+ "agent-native-visual-plans",
60
+ ],
61
+ };
55
62
  const CONNECT_PROFILES_VERSION = 1;
56
63
  const DEFAULT_DEV_GATEWAY = "http://127.0.0.1:8080";
57
64
  const MCP_FULL_CATALOG_HEADER = "X-Agent-Native-MCP-Full-Catalog";
@@ -360,8 +367,25 @@ function appSlugFromUrl(url) {
360
367
  }
361
368
  }
362
369
  function defaultServerName(url) {
370
+ const canonical = canonicalServerNameForMcpUrl(mcpUrlForBaseUrl(url));
371
+ if (canonical)
372
+ return canonical;
363
373
  return `${SERVER_NAME_PREFIX}-${appSlugFromUrl(url)}`;
364
374
  }
375
+ function canonicalServerNameForMcpUrl(mcpUrl) {
376
+ const key = canonicalMcpUrl(mcpUrl);
377
+ return key ? CANONICAL_SERVER_NAME_BY_MCP_URL[key] : undefined;
378
+ }
379
+ function reconnectServerNameForMcpUrl(mcpUrl, serverName) {
380
+ const key = canonicalMcpUrl(mcpUrl);
381
+ if (!key || !serverName)
382
+ return serverName;
383
+ const canonical = CANONICAL_SERVER_NAME_BY_MCP_URL[key];
384
+ if (!canonical || serverName === canonical)
385
+ return serverName;
386
+ const legacyNames = LEGACY_SERVER_NAMES_BY_MCP_URL[key] ?? [];
387
+ return legacyNames.includes(serverName) ? canonical : serverName;
388
+ }
365
389
  // ---------------------------------------------------------------------------
366
390
  // Browser open (mirrors workspace-dev.ts openBrowser)
367
391
  // ---------------------------------------------------------------------------
@@ -1167,8 +1191,16 @@ function distinctReconnectEntries(entries) {
1167
1191
  }
1168
1192
  return out;
1169
1193
  }
1170
- function describeReconnectEntry(entry) {
1171
- return `${entry.serverName} (${entry.url}) in ${entry.client}`;
1194
+ function uniqueClients(entries) {
1195
+ return [...new Set(entries.map((entry) => entry.client))];
1196
+ }
1197
+ function preferredReconnectEntry(url, entries) {
1198
+ const canonicalName = CANONICAL_SERVER_NAME_BY_MCP_URL[url];
1199
+ return ((canonicalName
1200
+ ? entries.find((entry) => entry.serverName === canonicalName)
1201
+ : undefined) ??
1202
+ entries.find((entry) => !entry.serverName.startsWith("agent-native-")) ??
1203
+ entries[0]);
1172
1204
  }
1173
1205
  /**
1174
1206
  * Return true when `url` is an agent-native MCP endpoint.
@@ -1193,20 +1225,51 @@ async function resolveReconnectTarget(parsed, clients, deps) {
1193
1225
  if (parsed.url) {
1194
1226
  const normalizedUrl = normalizeUrl(parsed.url);
1195
1227
  const mcpUrl = mcpUrlForBaseUrl(normalizedUrl);
1228
+ const matches = distinctReconnectEntries(entries.filter((entry) => sameMcpUrl(entry.url, mcpUrl)));
1229
+ if (matches.length === 0) {
1230
+ logErr(` No existing Agent Native MCP entry found for ${mcpUrl}.`);
1231
+ logErr(" First-time setup still uses: npx @agent-native/core@latest connect <url> --client <client>");
1232
+ return null;
1233
+ }
1196
1234
  if (parsed.name) {
1197
- return { rawUrl: parsed.url, serverName: parsed.name };
1235
+ const namedMatches = matches.filter((entry) => entry.serverName === parsed.name);
1236
+ if (namedMatches.length === 0) {
1237
+ logErr(` No existing MCP entry named "${parsed.name}" found for ${mcpUrl}.`);
1238
+ logErr(" Re-run without --name to use the existing entry name.");
1239
+ return null;
1240
+ }
1241
+ return {
1242
+ rawUrl: parsed.url,
1243
+ serverName: parsed.name,
1244
+ clients: uniqueClients(namedMatches),
1245
+ };
1198
1246
  }
1199
- const matches = distinctReconnectEntries(entries.filter((entry) => sameMcpUrl(entry.url, mcpUrl)));
1200
- const names = [...new Set(matches.map((entry) => entry.serverName))];
1201
- if (names.length === 1) {
1202
- return { rawUrl: parsed.url, serverName: names[0] };
1247
+ const key = canonicalMcpUrl(mcpUrl) ?? mcpUrl;
1248
+ const preferred = preferredReconnectEntry(key, matches);
1249
+ if (preferred) {
1250
+ const names = [...new Set(matches.map((entry) => entry.serverName))];
1251
+ if (names.length > 1) {
1252
+ logOut(` Found duplicate MCP entries for ${mcpUrl}: ${names.join(", ")}.`);
1253
+ logOut(` Reconnecting "${preferred.serverName}" and removing the duplicate names.`);
1254
+ }
1255
+ return {
1256
+ rawUrl: parsed.url,
1257
+ serverName: reconnectServerNameForMcpUrl(mcpUrl, preferred.serverName) ??
1258
+ preferred.serverName,
1259
+ clients: uniqueClients(matches),
1260
+ };
1203
1261
  }
1262
+ const names = [...new Set(matches.map((entry) => entry.serverName))];
1204
1263
  if (names.length > 1) {
1205
1264
  logErr(` Found multiple MCP entries for ${mcpUrl}: ${names.join(", ")}.`);
1206
1265
  logErr(" Re-run with --name <serverName> to choose one.");
1207
1266
  return null;
1208
1267
  }
1209
- return { rawUrl: parsed.url };
1268
+ return {
1269
+ rawUrl: parsed.url,
1270
+ serverName: names[0],
1271
+ clients: uniqueClients(matches),
1272
+ };
1210
1273
  }
1211
1274
  // No URL provided: scan all configs for agent-native MCP entries by URL
1212
1275
  // pattern, not by server name prefix. This finds the canonical "plan" entry
@@ -1234,13 +1297,13 @@ async function resolveReconnectTarget(parsed, clients, deps) {
1234
1297
  // Fall back to any entry whose name doesn't start with "agent-native-"
1235
1298
  // (short canonical names like "plan"), then bucket[0].
1236
1299
  const [url, bucket] = [...byUrl.entries()][0];
1237
- const canonicalName = CANONICAL_SERVER_NAME_BY_MCP_URL[url];
1238
- const preferred = (canonicalName
1239
- ? bucket.find((e) => e.serverName === canonicalName)
1240
- : undefined) ??
1241
- bucket.find((e) => !e.serverName.startsWith("agent-native-")) ??
1242
- bucket[0];
1243
- return { rawUrl: preferred.url, serverName: preferred.serverName };
1300
+ const preferred = preferredReconnectEntry(url, bucket) ?? bucket[0];
1301
+ return {
1302
+ rawUrl: preferred.url,
1303
+ serverName: reconnectServerNameForMcpUrl(preferred.url, preferred.serverName) ??
1304
+ preferred.serverName,
1305
+ clients: uniqueClients(bucket),
1306
+ };
1244
1307
  }
1245
1308
  // Multiple distinct URLs: pick interactively when TTY, else list with hints.
1246
1309
  const urlList = [...byUrl.keys()];
@@ -1261,10 +1324,18 @@ async function resolveReconnectTarget(parsed, clients, deps) {
1261
1324
  clack.cancel("Cancelled.");
1262
1325
  return null;
1263
1326
  }
1264
- const chosen = byUrl.get(result)?.[0];
1265
- if (!chosen)
1327
+ const bucket = byUrl.get(result);
1328
+ const chosen = bucket
1329
+ ? (preferredReconnectEntry(result, bucket) ?? bucket[0])
1330
+ : undefined;
1331
+ if (!chosen || !bucket)
1266
1332
  return null;
1267
- return { rawUrl: chosen.url, serverName: chosen.serverName };
1333
+ return {
1334
+ rawUrl: chosen.url,
1335
+ serverName: reconnectServerNameForMcpUrl(chosen.url, chosen.serverName) ??
1336
+ chosen.serverName,
1337
+ clients: uniqueClients(bucket),
1338
+ };
1268
1339
  }
1269
1340
  logErr(" Found multiple Agent Native MCP entries:");
1270
1341
  for (const [u, bucket] of byUrl) {
@@ -1274,7 +1345,7 @@ async function resolveReconnectTarget(parsed, clients, deps) {
1274
1345
  for (const u of urlList) {
1275
1346
  // Strip the MCP path suffix for a cleaner reconnect URL suggestion.
1276
1347
  const baseUrl = u.replace(/\/_agent-native\/mcp$/, "");
1277
- logErr(` npx @agent-native/core@latest reconnect ${baseUrl}`);
1348
+ logErr(` npx -y @agent-native/core@latest reconnect ${baseUrl}`);
1278
1349
  }
1279
1350
  return null;
1280
1351
  }
@@ -1287,9 +1358,10 @@ async function reconnectOne(parsed, clients, deps) {
1287
1358
  url: target.rawUrl,
1288
1359
  name: target.serverName ?? parsed.name,
1289
1360
  };
1361
+ const effectiveClients = target.clients?.length ? target.clients : clients;
1290
1362
  logOut("");
1291
1363
  logOut(` Reconnecting${effectiveParsed.name ? ` "${effectiveParsed.name}"` : ""}...`);
1292
- const res = await connectOne(target.rawUrl, effectiveParsed, clients, deps);
1364
+ const res = await connectOne(target.rawUrl, effectiveParsed, effectiveClients, deps);
1293
1365
  return res.ok;
1294
1366
  }
1295
1367
  async function connectOne(rawUrl, parsed, clients, deps) {
@@ -1330,7 +1402,11 @@ async function connectOne(rawUrl, parsed, clients, deps) {
1330
1402
  return { ok: false };
1331
1403
  token = grant.token;
1332
1404
  mcpUrl = grant.mcpUrl;
1333
- serverName = parsed.name ?? grant.serverName ?? defaultServerName(baseUrl);
1405
+ serverName =
1406
+ parsed.name ??
1407
+ reconnectServerNameForMcpUrl(grant.mcpUrl, grant.serverName) ??
1408
+ grant.serverName ??
1409
+ defaultServerName(baseUrl);
1334
1410
  headers = grant.headers;
1335
1411
  }
1336
1412
  if (oauthClients.length > 0 && !parsed.token) {
@@ -1625,12 +1701,14 @@ Usage:
1625
1701
  org-visible. Org owner/admin only. Printed once; nothing is written
1626
1702
  to local MCP configs.
1627
1703
 
1628
- npx @agent-native/core@latest reconnect [<url>] [--client <c>] [--scope user|project]
1629
- npx @agent-native/core@latest connect reconnect [<url>] [--client <c>] [--scope user|project]
1704
+ npx -y @agent-native/core@latest reconnect [<url>] [--client <c>] [--scope user|project]
1705
+ npx -y @agent-native/core@latest connect reconnect [<url>] [--client <c>] [--scope user|project]
1630
1706
  Re-authenticate an existing MCP entry without reinstalling apps/skills.
1631
1707
  With a URL, it reuses the existing server name for that MCP URL when
1632
- possible. Without a URL, it reconnects the only matching Agent Native
1633
- entry in the selected client config. Use --name for custom server names.
1708
+ possible, reconnecting only clients that already have that entry. Pass
1709
+ --client to limit which configs it searches. Without a URL, it reconnects
1710
+ the only matching Agent Native entry in local client configs. Use --name
1711
+ for custom server names.
1634
1712
 
1635
1713
  npx @agent-native/core@latest connect --all [--client <c>] [--scope user|project]
1636
1714
  Connect every first-party hosted app as separate MCP resources.
@@ -1661,14 +1739,20 @@ export async function runConnect(args, deps = {}) {
1661
1739
  const parsed = parseConnectArgs(args);
1662
1740
  try {
1663
1741
  if (parsed.mode) {
1664
- const clients = await resolveConnectClients(parsed, deps);
1665
- if (!clients)
1666
- return;
1667
- const ok = parsed.mode === "dev"
1668
- ? await connectDevProfile(parsed, clients, deps)
1669
- : parsed.mode === "prod"
1670
- ? await connectProdProfile(parsed, clients, deps)
1671
- : await reconnectOne(parsed, clients, deps);
1742
+ let ok;
1743
+ if (parsed.mode === "reconnect" || parsed.mode === "reauth") {
1744
+ const clients = resolveClients(parsed.client);
1745
+ ok = await reconnectOne(parsed, clients, deps);
1746
+ }
1747
+ else {
1748
+ const clients = await resolveConnectClients(parsed, deps);
1749
+ if (!clients)
1750
+ return;
1751
+ ok =
1752
+ parsed.mode === "dev"
1753
+ ? await connectDevProfile(parsed, clients, deps)
1754
+ : await connectProdProfile(parsed, clients, deps);
1755
+ }
1672
1756
  if (!ok)
1673
1757
  process.exitCode = 1;
1674
1758
  return;