allagents 0.26.2 → 0.26.5

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 (2) hide show
  1. package/dist/index.js +49 -13
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -23337,6 +23337,16 @@ async function resolvePluginSpecWithAutoRegister(spec, options = {}) {
23337
23337
  error: `Marketplace '${marketplaceName}' not found`
23338
23338
  };
23339
23339
  }
23340
+ if (!didAutoRegister && !options.offline && marketplace.source.type === "github" && !updatedMarketplaceCache.has(marketplace.name)) {
23341
+ const results = await updateMarketplace(marketplace.name);
23342
+ const result = results[0];
23343
+ if (result?.success) {
23344
+ updatedMarketplaceCache.add(marketplace.name);
23345
+ }
23346
+ }
23347
+ if (didAutoRegister) {
23348
+ updatedMarketplaceCache.add(marketplace.name);
23349
+ }
23340
23350
  const expectedSubpath = subpath ?? "plugins";
23341
23351
  const resolveOpts = {
23342
23352
  ...subpath && { subpath },
@@ -23429,7 +23439,7 @@ async function ensureMarketplacesRegistered(plugins) {
23429
23439
  }
23430
23440
  return results;
23431
23441
  }
23432
- var registeredSourceCache;
23442
+ var registeredSourceCache, updatedMarketplaceCache;
23433
23443
  var init_marketplace = __esm(() => {
23434
23444
  init_esm();
23435
23445
  init_constants();
@@ -23438,6 +23448,7 @@ var init_marketplace = __esm(() => {
23438
23448
  init_git();
23439
23449
  init_plugin();
23440
23450
  registeredSourceCache = new Map;
23451
+ updatedMarketplaceCache = new Set;
23441
23452
  });
23442
23453
 
23443
23454
  // src/core/workspace-modify.ts
@@ -24541,9 +24552,11 @@ class CopilotNativeClient {
24541
24552
  if (installResult.success) {
24542
24553
  result.pluginsInstalled.push(spec);
24543
24554
  } else {
24555
+ const rawError = installResult.error ?? "Unknown error";
24556
+ const error = rawError.includes("Plugin path escapes marketplace directory") ? `${rawError} (Copilot rejected a plugin path from this marketplace manifest. Use file install for copilot to avoid native install for this plugin.)` : rawError;
24544
24557
  result.pluginsFailed.push({
24545
24558
  plugin: spec,
24546
- error: installResult.error ?? "Unknown error"
24559
+ error
24547
24560
  });
24548
24561
  }
24549
24562
  }
@@ -24604,6 +24617,7 @@ function deduplicateClientsByPath(clients, clientMappings = CLIENT_MAPPINGS) {
24604
24617
  }
24605
24618
  function mergeSyncResults(a, b) {
24606
24619
  const warnings = [...a.warnings || [], ...b.warnings || []];
24620
+ const messages = [...a.messages || [], ...b.messages || []];
24607
24621
  const purgedPaths = [...a.purgedPaths || [], ...b.purgedPaths || []];
24608
24622
  const mcpResult = a.mcpResult ?? b.mcpResult;
24609
24623
  const nativeResult = a.nativeResult && b.nativeResult ? {
@@ -24620,6 +24634,7 @@ function mergeSyncResults(a, b) {
24620
24634
  totalSkipped: a.totalSkipped + b.totalSkipped,
24621
24635
  totalGenerated: a.totalGenerated + b.totalGenerated,
24622
24636
  ...warnings.length > 0 && { warnings },
24637
+ ...messages.length > 0 && { messages },
24623
24638
  ...purgedPaths.length > 0 && { purgedPaths },
24624
24639
  ...mcpResult && { mcpResult },
24625
24640
  ...nativeResult && { nativeResult }
@@ -24655,6 +24670,12 @@ function collectNativePluginSources(validPlugins) {
24655
24670
  }
24656
24671
  return { pluginsByClient, marketplaceSourcesByClient };
24657
24672
  }
24673
+ function attachNativeClientContext(result, clientType) {
24674
+ return {
24675
+ ...result,
24676
+ pluginsFailed: result.pluginsFailed.map((failure) => ({ ...failure, client: clientType }))
24677
+ };
24678
+ }
24658
24679
  function collectSyncClients(clientEntries, plans) {
24659
24680
  const workspaceClientTypes = getClientTypes(clientEntries);
24660
24681
  return [...new Set([...workspaceClientTypes, ...plans.flatMap((plan) => [...plan.clients, ...plan.nativeClients])])];
@@ -25157,6 +25178,7 @@ async function syncWorkspace(workspacePath = process.cwd(), options = {}) {
25157
25178
  ...planWarnings,
25158
25179
  ...failedValidations.map((v) => `${v.plugin}: ${v.error} (skipped)`)
25159
25180
  ];
25181
+ const messages = [];
25160
25182
  if (validPlugins.length === 0 && filteredPlans.length > 0) {
25161
25183
  return {
25162
25184
  success: false,
@@ -25212,7 +25234,7 @@ ${failedValidations.map((v) => ` - ${v.plugin}: ${v.error}`).join(`
25212
25234
  if (!cliAvailable) {
25213
25235
  const sources = nativePluginsByClient.get(clientType);
25214
25236
  if (sources && sources.length > 0) {
25215
- warnings.push(`Native install: ${clientType} CLI not found, skipping native plugin installation`);
25237
+ messages.push(`Native install: ${clientType} CLI not found, skipping native plugin installation`);
25216
25238
  }
25217
25239
  continue;
25218
25240
  }
@@ -25234,7 +25256,7 @@ ${failedValidations.map((v) => ` - ${v.plugin}: ${v.error}`).join(`
25234
25256
  }
25235
25257
  }
25236
25258
  if (currentSources.length > 0) {
25237
- perClientResults.push(await nativeClient.syncPlugins(currentSources, "project", { cwd: workspacePath }));
25259
+ perClientResults.push(attachNativeClientContext(await nativeClient.syncPlugins(currentSources, "project", { cwd: workspacePath }), clientType));
25238
25260
  }
25239
25261
  }
25240
25262
  if (perClientResults.length > 0) {
@@ -25245,7 +25267,7 @@ ${failedValidations.map((v) => ` - ${v.plugin}: ${v.error}`).join(`
25245
25267
  for (const [clientType, sources] of nativePluginsByClient) {
25246
25268
  const nativeClient = getNativeClient(clientType);
25247
25269
  if (nativeClient && sources.length > 0) {
25248
- perClientResults.push(await nativeClient.syncPlugins(sources, "project", { cwd: workspacePath, dryRun: true }));
25270
+ perClientResults.push(attachNativeClientContext(await nativeClient.syncPlugins(sources, "project", { cwd: workspacePath, dryRun: true }), clientType));
25249
25271
  }
25250
25272
  }
25251
25273
  if (perClientResults.length > 0) {
@@ -25394,6 +25416,7 @@ ${fileValidationErrors.map((e) => ` - ${e}`).join(`
25394
25416
  totalGenerated,
25395
25417
  purgedPaths,
25396
25418
  ...warnings.length > 0 && { warnings },
25419
+ ...messages.length > 0 && { messages },
25397
25420
  ...nativeResult && { nativeResult }
25398
25421
  };
25399
25422
  }
@@ -25423,6 +25446,7 @@ async function syncUserWorkspace(options = {}) {
25423
25446
  ...planWarnings,
25424
25447
  ...failedValidations.map((v) => `${v.plugin}: ${v.error} (skipped)`)
25425
25448
  ];
25449
+ const messages = [];
25426
25450
  if (validPlugins.length === 0 && pluginPlans.length > 0) {
25427
25451
  return {
25428
25452
  success: false,
@@ -25502,7 +25526,7 @@ ${failedValidations.map((v) => ` - ${v.plugin}: ${v.error}`).join(`
25502
25526
  if (!cliAvailable) {
25503
25527
  const sources = nativePluginsByClient.get(clientType);
25504
25528
  if (sources && sources.length > 0) {
25505
- warnings.push(`Native install: ${clientType} CLI not found, skipping native plugin installation`);
25529
+ messages.push(`Native install: ${clientType} CLI not found, skipping native plugin installation`);
25506
25530
  }
25507
25531
  continue;
25508
25532
  }
@@ -25524,7 +25548,7 @@ ${failedValidations.map((v) => ` - ${v.plugin}: ${v.error}`).join(`
25524
25548
  }
25525
25549
  }
25526
25550
  if (currentSources.length > 0) {
25527
- perClientResults.push(await nativeClient.syncPlugins(currentSources, "user"));
25551
+ perClientResults.push(attachNativeClientContext(await nativeClient.syncPlugins(currentSources, "user"), clientType));
25528
25552
  }
25529
25553
  }
25530
25554
  if (perClientResults.length > 0) {
@@ -25535,7 +25559,7 @@ ${failedValidations.map((v) => ` - ${v.plugin}: ${v.error}`).join(`
25535
25559
  for (const [clientType, sources] of nativePluginsByClient) {
25536
25560
  const nativeClient = getNativeClient(clientType);
25537
25561
  if (nativeClient && sources.length > 0) {
25538
- perClientResults.push(await nativeClient.syncPlugins(sources, "user", { dryRun: true }));
25562
+ perClientResults.push(attachNativeClientContext(await nativeClient.syncPlugins(sources, "user", { dryRun: true }), clientType));
25539
25563
  }
25540
25564
  }
25541
25565
  if (perClientResults.length > 0) {
@@ -25570,6 +25594,7 @@ ${failedValidations.map((v) => ` - ${v.plugin}: ${v.error}`).join(`
25570
25594
  totalSkipped,
25571
25595
  totalGenerated,
25572
25596
  ...warnings.length > 0 && { warnings },
25597
+ ...messages.length > 0 && { messages },
25573
25598
  ...mcpResult && { mcpResult },
25574
25599
  ...nativeResult && { nativeResult }
25575
25600
  };
@@ -26057,8 +26082,9 @@ function formatNativeResult(nativeResult) {
26057
26082
  for (const plugin of nativeResult.pluginsInstalled) {
26058
26083
  lines.push(` + ${plugin} (installed via native CLI)`);
26059
26084
  }
26060
- for (const { plugin, error } of nativeResult.pluginsFailed) {
26061
- lines.push(`${plugin}: ${error}`);
26085
+ for (const { client, plugin, error } of nativeResult.pluginsFailed) {
26086
+ const provider = client ? `[${client}] ` : "";
26087
+ lines.push(` ✗ ${provider}${plugin}: ${error}`);
26062
26088
  }
26063
26089
  for (const plugin of nativeResult.skipped) {
26064
26090
  lines.push(` ⊘ ${plugin} (skipped — not a marketplace plugin)`);
@@ -26071,6 +26097,7 @@ function buildSyncData(result) {
26071
26097
  generated: result.totalGenerated,
26072
26098
  failed: result.totalFailed,
26073
26099
  skipped: result.totalSkipped,
26100
+ ...result.messages && result.messages.length > 0 && { messages: result.messages },
26074
26101
  plugins: result.pluginResults.map((pr) => ({
26075
26102
  plugin: pr.plugin,
26076
26103
  success: pr.success,
@@ -26673,7 +26700,7 @@ var package_default;
26673
26700
  var init_package = __esm(() => {
26674
26701
  package_default = {
26675
26702
  name: "allagents",
26676
- version: "0.26.2",
26703
+ version: "0.26.5",
26677
26704
  description: "CLI tool for managing multi-repo AI agent workspaces with plugin synchronization",
26678
26705
  type: "module",
26679
26706
  bin: {
@@ -29937,12 +29964,14 @@ var syncMeta = {
29937
29964
  "allagents workspace sync",
29938
29965
  "allagents workspace sync --dry-run",
29939
29966
  "allagents workspace sync --client claude",
29940
- "allagents workspace sync --offline"
29967
+ "allagents workspace sync --offline",
29968
+ "allagents workspace sync --verbose"
29941
29969
  ],
29942
29970
  expectedOutput: "Lists synced files with status per plugin. Exit 0 on success, exit 1 if any files failed.",
29943
29971
  options: [
29944
29972
  { flag: "--offline", type: "boolean", description: "Use cached plugins without fetching latest from remote" },
29945
29973
  { flag: "--dry-run", short: "-n", type: "boolean", description: "Simulate sync without making changes" },
29974
+ { flag: "--verbose", short: "-v", type: "boolean", description: "Show informational sync messages" },
29946
29975
  { flag: "--client", short: "-c", type: "string", description: "Sync only the specified client (e.g., opencode, claude)" }
29947
29976
  ],
29948
29977
  outputSchema: {
@@ -30108,9 +30137,10 @@ var syncCmd = import_cmd_ts2.command({
30108
30137
  offline: import_cmd_ts2.flag({ long: "offline", description: "Use cached plugins without fetching latest from remote" }),
30109
30138
  dryRun: import_cmd_ts2.flag({ long: "dry-run", short: "n", description: "Simulate sync without making changes" }),
30110
30139
  force: import_cmd_ts2.flag({ long: "force", short: "f", description: "Overwrite existing MCP server entries that differ from plugin config" }),
30140
+ verbose: import_cmd_ts2.flag({ long: "verbose", short: "v", description: "Show informational sync messages" }),
30111
30141
  client: import_cmd_ts2.option({ type: import_cmd_ts2.optional(import_cmd_ts2.string), long: "client", short: "c", description: "Sync only the specified client (e.g., opencode, claude)" })
30112
30142
  },
30113
- handler: async ({ offline, dryRun, force, client }) => {
30143
+ handler: async ({ offline, dryRun, force, verbose, client }) => {
30114
30144
  try {
30115
30145
  if (!isJsonMode() && dryRun) {
30116
30146
  console.log(`Dry run mode - no changes will be made
@@ -30205,6 +30235,12 @@ Warnings:`);
30205
30235
  console.log(` ⚠ ${warning}`);
30206
30236
  }
30207
30237
  }
30238
+ if (verbose && result.messages && result.messages.length > 0) {
30239
+ console.log("");
30240
+ for (const message of result.messages) {
30241
+ console.log(` ${message}`);
30242
+ }
30243
+ }
30208
30244
  if (result.mcpResult) {
30209
30245
  const mcpLines = formatMcpResult(result.mcpResult);
30210
30246
  if (mcpLines.length > 0) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "allagents",
3
- "version": "0.26.2",
3
+ "version": "0.26.5",
4
4
  "description": "CLI tool for managing multi-repo AI agent workspaces with plugin synchronization",
5
5
  "type": "module",
6
6
  "bin": {