allagents 0.26.1 → 0.26.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 (2) hide show
  1. package/dist/index.js +37 -12
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -24541,9 +24541,11 @@ class CopilotNativeClient {
24541
24541
  if (installResult.success) {
24542
24542
  result.pluginsInstalled.push(spec);
24543
24543
  } else {
24544
+ const rawError = installResult.error ?? "Unknown error";
24545
+ 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
24546
  result.pluginsFailed.push({
24545
24547
  plugin: spec,
24546
- error: installResult.error ?? "Unknown error"
24548
+ error
24547
24549
  });
24548
24550
  }
24549
24551
  }
@@ -24604,6 +24606,7 @@ function deduplicateClientsByPath(clients, clientMappings = CLIENT_MAPPINGS) {
24604
24606
  }
24605
24607
  function mergeSyncResults(a, b) {
24606
24608
  const warnings = [...a.warnings || [], ...b.warnings || []];
24609
+ const messages = [...a.messages || [], ...b.messages || []];
24607
24610
  const purgedPaths = [...a.purgedPaths || [], ...b.purgedPaths || []];
24608
24611
  const mcpResult = a.mcpResult ?? b.mcpResult;
24609
24612
  const nativeResult = a.nativeResult && b.nativeResult ? {
@@ -24620,6 +24623,7 @@ function mergeSyncResults(a, b) {
24620
24623
  totalSkipped: a.totalSkipped + b.totalSkipped,
24621
24624
  totalGenerated: a.totalGenerated + b.totalGenerated,
24622
24625
  ...warnings.length > 0 && { warnings },
24626
+ ...messages.length > 0 && { messages },
24623
24627
  ...purgedPaths.length > 0 && { purgedPaths },
24624
24628
  ...mcpResult && { mcpResult },
24625
24629
  ...nativeResult && { nativeResult }
@@ -24655,6 +24659,12 @@ function collectNativePluginSources(validPlugins) {
24655
24659
  }
24656
24660
  return { pluginsByClient, marketplaceSourcesByClient };
24657
24661
  }
24662
+ function attachNativeClientContext(result, clientType) {
24663
+ return {
24664
+ ...result,
24665
+ pluginsFailed: result.pluginsFailed.map((failure) => ({ ...failure, client: clientType }))
24666
+ };
24667
+ }
24658
24668
  function collectSyncClients(clientEntries, plans) {
24659
24669
  const workspaceClientTypes = getClientTypes(clientEntries);
24660
24670
  return [...new Set([...workspaceClientTypes, ...plans.flatMap((plan) => [...plan.clients, ...plan.nativeClients])])];
@@ -25157,6 +25167,7 @@ async function syncWorkspace(workspacePath = process.cwd(), options = {}) {
25157
25167
  ...planWarnings,
25158
25168
  ...failedValidations.map((v) => `${v.plugin}: ${v.error} (skipped)`)
25159
25169
  ];
25170
+ const messages = [];
25160
25171
  if (validPlugins.length === 0 && filteredPlans.length > 0) {
25161
25172
  return {
25162
25173
  success: false,
@@ -25212,7 +25223,7 @@ ${failedValidations.map((v) => ` - ${v.plugin}: ${v.error}`).join(`
25212
25223
  if (!cliAvailable) {
25213
25224
  const sources = nativePluginsByClient.get(clientType);
25214
25225
  if (sources && sources.length > 0) {
25215
- warnings.push(`Native install: ${clientType} CLI not found, skipping native plugin installation`);
25226
+ messages.push(`Native install: ${clientType} CLI not found, skipping native plugin installation`);
25216
25227
  }
25217
25228
  continue;
25218
25229
  }
@@ -25234,7 +25245,7 @@ ${failedValidations.map((v) => ` - ${v.plugin}: ${v.error}`).join(`
25234
25245
  }
25235
25246
  }
25236
25247
  if (currentSources.length > 0) {
25237
- perClientResults.push(await nativeClient.syncPlugins(currentSources, "project", { cwd: workspacePath }));
25248
+ perClientResults.push(attachNativeClientContext(await nativeClient.syncPlugins(currentSources, "project", { cwd: workspacePath }), clientType));
25238
25249
  }
25239
25250
  }
25240
25251
  if (perClientResults.length > 0) {
@@ -25245,7 +25256,7 @@ ${failedValidations.map((v) => ` - ${v.plugin}: ${v.error}`).join(`
25245
25256
  for (const [clientType, sources] of nativePluginsByClient) {
25246
25257
  const nativeClient = getNativeClient(clientType);
25247
25258
  if (nativeClient && sources.length > 0) {
25248
- perClientResults.push(await nativeClient.syncPlugins(sources, "project", { cwd: workspacePath, dryRun: true }));
25259
+ perClientResults.push(attachNativeClientContext(await nativeClient.syncPlugins(sources, "project", { cwd: workspacePath, dryRun: true }), clientType));
25249
25260
  }
25250
25261
  }
25251
25262
  if (perClientResults.length > 0) {
@@ -25394,6 +25405,7 @@ ${fileValidationErrors.map((e) => ` - ${e}`).join(`
25394
25405
  totalGenerated,
25395
25406
  purgedPaths,
25396
25407
  ...warnings.length > 0 && { warnings },
25408
+ ...messages.length > 0 && { messages },
25397
25409
  ...nativeResult && { nativeResult }
25398
25410
  };
25399
25411
  }
@@ -25423,6 +25435,7 @@ async function syncUserWorkspace(options = {}) {
25423
25435
  ...planWarnings,
25424
25436
  ...failedValidations.map((v) => `${v.plugin}: ${v.error} (skipped)`)
25425
25437
  ];
25438
+ const messages = [];
25426
25439
  if (validPlugins.length === 0 && pluginPlans.length > 0) {
25427
25440
  return {
25428
25441
  success: false,
@@ -25502,7 +25515,7 @@ ${failedValidations.map((v) => ` - ${v.plugin}: ${v.error}`).join(`
25502
25515
  if (!cliAvailable) {
25503
25516
  const sources = nativePluginsByClient.get(clientType);
25504
25517
  if (sources && sources.length > 0) {
25505
- warnings.push(`Native install: ${clientType} CLI not found, skipping native plugin installation`);
25518
+ messages.push(`Native install: ${clientType} CLI not found, skipping native plugin installation`);
25506
25519
  }
25507
25520
  continue;
25508
25521
  }
@@ -25524,7 +25537,7 @@ ${failedValidations.map((v) => ` - ${v.plugin}: ${v.error}`).join(`
25524
25537
  }
25525
25538
  }
25526
25539
  if (currentSources.length > 0) {
25527
- perClientResults.push(await nativeClient.syncPlugins(currentSources, "user"));
25540
+ perClientResults.push(attachNativeClientContext(await nativeClient.syncPlugins(currentSources, "user"), clientType));
25528
25541
  }
25529
25542
  }
25530
25543
  if (perClientResults.length > 0) {
@@ -25535,7 +25548,7 @@ ${failedValidations.map((v) => ` - ${v.plugin}: ${v.error}`).join(`
25535
25548
  for (const [clientType, sources] of nativePluginsByClient) {
25536
25549
  const nativeClient = getNativeClient(clientType);
25537
25550
  if (nativeClient && sources.length > 0) {
25538
- perClientResults.push(await nativeClient.syncPlugins(sources, "user", { dryRun: true }));
25551
+ perClientResults.push(attachNativeClientContext(await nativeClient.syncPlugins(sources, "user", { dryRun: true }), clientType));
25539
25552
  }
25540
25553
  }
25541
25554
  if (perClientResults.length > 0) {
@@ -25570,6 +25583,7 @@ ${failedValidations.map((v) => ` - ${v.plugin}: ${v.error}`).join(`
25570
25583
  totalSkipped,
25571
25584
  totalGenerated,
25572
25585
  ...warnings.length > 0 && { warnings },
25586
+ ...messages.length > 0 && { messages },
25573
25587
  ...mcpResult && { mcpResult },
25574
25588
  ...nativeResult && { nativeResult }
25575
25589
  };
@@ -26057,8 +26071,9 @@ function formatNativeResult(nativeResult) {
26057
26071
  for (const plugin of nativeResult.pluginsInstalled) {
26058
26072
  lines.push(` + ${plugin} (installed via native CLI)`);
26059
26073
  }
26060
- for (const { plugin, error } of nativeResult.pluginsFailed) {
26061
- lines.push(`${plugin}: ${error}`);
26074
+ for (const { client, plugin, error } of nativeResult.pluginsFailed) {
26075
+ const provider = client ? `[${client}] ` : "";
26076
+ lines.push(` ✗ ${provider}${plugin}: ${error}`);
26062
26077
  }
26063
26078
  for (const plugin of nativeResult.skipped) {
26064
26079
  lines.push(` ⊘ ${plugin} (skipped — not a marketplace plugin)`);
@@ -26071,6 +26086,7 @@ function buildSyncData(result) {
26071
26086
  generated: result.totalGenerated,
26072
26087
  failed: result.totalFailed,
26073
26088
  skipped: result.totalSkipped,
26089
+ ...result.messages && result.messages.length > 0 && { messages: result.messages },
26074
26090
  plugins: result.pluginResults.map((pr) => ({
26075
26091
  plugin: pr.plugin,
26076
26092
  success: pr.success,
@@ -26673,7 +26689,7 @@ var package_default;
26673
26689
  var init_package = __esm(() => {
26674
26690
  package_default = {
26675
26691
  name: "allagents",
26676
- version: "0.26.1",
26692
+ version: "0.26.4",
26677
26693
  description: "CLI tool for managing multi-repo AI agent workspaces with plugin synchronization",
26678
26694
  type: "module",
26679
26695
  bin: {
@@ -29937,12 +29953,14 @@ var syncMeta = {
29937
29953
  "allagents workspace sync",
29938
29954
  "allagents workspace sync --dry-run",
29939
29955
  "allagents workspace sync --client claude",
29940
- "allagents workspace sync --offline"
29956
+ "allagents workspace sync --offline",
29957
+ "allagents workspace sync --verbose"
29941
29958
  ],
29942
29959
  expectedOutput: "Lists synced files with status per plugin. Exit 0 on success, exit 1 if any files failed.",
29943
29960
  options: [
29944
29961
  { flag: "--offline", type: "boolean", description: "Use cached plugins without fetching latest from remote" },
29945
29962
  { flag: "--dry-run", short: "-n", type: "boolean", description: "Simulate sync without making changes" },
29963
+ { flag: "--verbose", short: "-v", type: "boolean", description: "Show informational sync messages" },
29946
29964
  { flag: "--client", short: "-c", type: "string", description: "Sync only the specified client (e.g., opencode, claude)" }
29947
29965
  ],
29948
29966
  outputSchema: {
@@ -30108,9 +30126,10 @@ var syncCmd = import_cmd_ts2.command({
30108
30126
  offline: import_cmd_ts2.flag({ long: "offline", description: "Use cached plugins without fetching latest from remote" }),
30109
30127
  dryRun: import_cmd_ts2.flag({ long: "dry-run", short: "n", description: "Simulate sync without making changes" }),
30110
30128
  force: import_cmd_ts2.flag({ long: "force", short: "f", description: "Overwrite existing MCP server entries that differ from plugin config" }),
30129
+ verbose: import_cmd_ts2.flag({ long: "verbose", short: "v", description: "Show informational sync messages" }),
30111
30130
  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
30131
  },
30113
- handler: async ({ offline, dryRun, force, client }) => {
30132
+ handler: async ({ offline, dryRun, force, verbose, client }) => {
30114
30133
  try {
30115
30134
  if (!isJsonMode() && dryRun) {
30116
30135
  console.log(`Dry run mode - no changes will be made
@@ -30205,6 +30224,12 @@ Warnings:`);
30205
30224
  console.log(` ⚠ ${warning}`);
30206
30225
  }
30207
30226
  }
30227
+ if (verbose && result.messages && result.messages.length > 0) {
30228
+ console.log("");
30229
+ for (const message of result.messages) {
30230
+ console.log(` ${message}`);
30231
+ }
30232
+ }
30208
30233
  if (result.mcpResult) {
30209
30234
  const mcpLines = formatMcpResult(result.mcpResult);
30210
30235
  if (mcpLines.length > 0) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "allagents",
3
- "version": "0.26.1",
3
+ "version": "0.26.4",
4
4
  "description": "CLI tool for managing multi-repo AI agent workspaces with plugin synchronization",
5
5
  "type": "module",
6
6
  "bin": {