allagents 1.11.10-next.1 → 1.12.0-next.1

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 +248 -32
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -17667,6 +17667,16 @@ var init_workspace_parser = __esm(() => {
17667
17667
  // src/core/status.ts
17668
17668
  import { existsSync as existsSync8 } from "node:fs";
17669
17669
  import { join as join9 } from "node:path";
17670
+ function classifyKind(path) {
17671
+ if (!path)
17672
+ return "plugin";
17673
+ try {
17674
+ if (existsSync8(join9(path, "SKILL.md")) && !existsSync8(join9(path, "skills"))) {
17675
+ return "skill";
17676
+ }
17677
+ } catch {}
17678
+ return "plugin";
17679
+ }
17670
17680
  async function getWorkspaceStatus(workspacePath = process.cwd()) {
17671
17681
  const configPath = join9(workspacePath, CONFIG_DIR, WORKSPACE_CONFIG_FILE);
17672
17682
  if (!existsSync8(configPath) || isUserConfigPath(workspacePath)) {
@@ -17712,9 +17722,12 @@ function getPluginStatus(parsed) {
17712
17722
  if (parsed.type === "github") {
17713
17723
  const cachePath = parsed.owner && parsed.repo ? getPluginCachePath(parsed.owner, parsed.repo, parsed.branch) : "";
17714
17724
  const available2 = cachePath ? existsSync8(cachePath) : false;
17725
+ const subpath = parseGitHubUrl(parsed.original)?.subpath;
17726
+ const classifyPath = available2 && cachePath ? subpath ? join9(cachePath, subpath) : cachePath : "";
17715
17727
  return {
17716
17728
  source: parsed.original,
17717
17729
  type: "github",
17730
+ kind: classifyKind(classifyPath),
17718
17731
  available: available2,
17719
17732
  path: cachePath,
17720
17733
  ...parsed.owner && { owner: parsed.owner },
@@ -17725,6 +17738,7 @@ function getPluginStatus(parsed) {
17725
17738
  return {
17726
17739
  source: parsed.original,
17727
17740
  type: "local",
17741
+ kind: classifyKind(available ? parsed.normalized : ""),
17728
17742
  available,
17729
17743
  path: parsed.normalized
17730
17744
  };
@@ -17750,6 +17764,7 @@ async function getMarketplacePluginStatus(spec) {
17750
17764
  return {
17751
17765
  source: spec,
17752
17766
  type: "marketplace",
17767
+ kind: classifyKind(resolved.success ? resolved.path ?? "" : ""),
17753
17768
  available: resolved.success,
17754
17769
  path: resolved.path ?? ""
17755
17770
  };
@@ -32688,7 +32703,7 @@ async function initWorkspace(targetPath = ".", options2 = {}) {
32688
32703
  }
32689
32704
  console.log(`✓ Workspace created at: ${absoluteTarget}`);
32690
32705
  console.log(`
32691
- Syncing plugins...`);
32706
+ Updating plugins...`);
32692
32707
  const syncResult = await syncWorkspace(absoluteTarget, {
32693
32708
  ...sourceDir && { workspaceSourceBase: sourceDir }
32694
32709
  });
@@ -42241,7 +42256,7 @@ var package_default;
42241
42256
  var init_package = __esm(() => {
42242
42257
  package_default = {
42243
42258
  name: "allagents",
42244
- version: "1.11.10-next.1",
42259
+ version: "1.12.0-next.1",
42245
42260
  packageManager: "bun@1.3.12",
42246
42261
  description: "CLI tool for managing multi-repo AI agent workspaces with plugin synchronization",
42247
42262
  type: "module",
@@ -42837,7 +42852,7 @@ async function runPlugins(context, cache2) {
42837
42852
  options2.push({
42838
42853
  label: plugin.source,
42839
42854
  value: key,
42840
- hint: `${plugin.type} · project`
42855
+ hint: `${plugin.kind} · ${plugin.type} · project`
42841
42856
  });
42842
42857
  }
42843
42858
  for (const plugin of status.userPlugins ?? []) {
@@ -42845,7 +42860,7 @@ async function runPlugins(context, cache2) {
42845
42860
  options2.push({
42846
42861
  label: plugin.source,
42847
42862
  value: key,
42848
- hint: `${plugin.type} · user`
42863
+ hint: `${plugin.kind} · ${plugin.type} · user`
42849
42864
  });
42850
42865
  }
42851
42866
  }
@@ -43307,7 +43322,7 @@ async function runStatus(context, cache2) {
43307
43322
  lines.push("Project plugins:");
43308
43323
  for (const plugin of status.plugins) {
43309
43324
  const icon = plugin.available ? "✓" : "✗";
43310
- lines.push(` ${icon} ${plugin.source} (${plugin.type})`);
43325
+ lines.push(` ${icon} ${plugin.source} (${plugin.kind}, ${plugin.type})`);
43311
43326
  }
43312
43327
  }
43313
43328
  if (hasUserPlugins) {
@@ -43316,7 +43331,7 @@ async function runStatus(context, cache2) {
43316
43331
  lines.push("User plugins:");
43317
43332
  for (const plugin of userPlugins) {
43318
43333
  const icon = plugin.available ? "✓" : "✗";
43319
- lines.push(` ${icon} ${plugin.source} (${plugin.type})`);
43334
+ lines.push(` ${icon} ${plugin.source} (${plugin.kind}, ${plugin.type})`);
43320
43335
  }
43321
43336
  }
43322
43337
  lines.push("");
@@ -44229,15 +44244,16 @@ var pruneMeta = {
44229
44244
  }
44230
44245
  };
44231
44246
  var statusMeta = {
44232
- command: "workspace status",
44247
+ command: "status",
44233
44248
  description: "Show sync status of plugins",
44234
- whenToUse: "To check which plugins are configured and whether they are available locally",
44249
+ whenToUse: "To check which plugins and skills are configured and whether they are available locally",
44235
44250
  examples: [
44251
+ "allagents status",
44236
44252
  "allagents workspace status"
44237
44253
  ],
44238
- expectedOutput: "Lists all configured plugins with availability status and configured clients. Exit 0 on success, exit 1 if workspace is not initialized.",
44254
+ expectedOutput: "Lists all configured plugins/skills with availability status and configured clients. Exit 0 on success, exit 1 if workspace is not initialized.",
44239
44255
  outputSchema: {
44240
- plugins: [{ source: "string", type: "string", available: "boolean" }],
44256
+ plugins: [{ source: "string", type: "string", kind: "string", available: "boolean" }],
44241
44257
  clients: ["string"]
44242
44258
  }
44243
44259
  };
@@ -44558,16 +44574,16 @@ function formatTimingMs(ms) {
44558
44574
  }
44559
44575
  function formatPluginStatusLine(plugin) {
44560
44576
  const status = plugin.available ? "✓" : "✗";
44561
- let typeLabel;
44577
+ const labels = [plugin.kind];
44562
44578
  if (plugin.type === "marketplace") {
44563
- typeLabel = plugin.available ? undefined : "not synced";
44579
+ if (!plugin.available)
44580
+ labels.push("not synced");
44564
44581
  } else if (plugin.type === "github") {
44565
- typeLabel = plugin.available ? "cached" : "not cached";
44582
+ labels.push(plugin.available ? "cached" : "not cached");
44566
44583
  } else {
44567
- typeLabel = "local";
44584
+ labels.push("local");
44568
44585
  }
44569
- const suffix = typeLabel ? ` (${typeLabel})` : "";
44570
- return `${status} ${formatPluginSource(plugin.source)}${suffix}`;
44586
+ return `${status} ${formatPluginSource(plugin.source)} (${labels.join(", ")})`;
44571
44587
  }
44572
44588
  var statusCmd = import_cmd_ts2.command({
44573
44589
  name: "status",
@@ -44890,6 +44906,7 @@ init_workspace_modify();
44890
44906
  init_user_workspace();
44891
44907
  init_plugin();
44892
44908
  init_skills();
44909
+ init_status2();
44893
44910
  init_marketplace_manifest_parser();
44894
44911
  var import_cmd_ts4 = __toESM(require_cjs(), 1);
44895
44912
 
@@ -44986,14 +45003,14 @@ var marketplaceBrowseMeta = {
44986
45003
  };
44987
45004
  var pluginListMeta = {
44988
45005
  command: "plugin list",
44989
- description: "List installed plugins",
44990
- whenToUse: "To see which plugins are currently installed in your workspace",
45006
+ description: "List installed plugins and standalone skills",
45007
+ whenToUse: "To see which plugins and skills are currently installed in your workspace",
44991
45008
  examples: [
44992
45009
  "allagents plugin list"
44993
45010
  ],
44994
- expectedOutput: "Lists installed plugins with their marketplace and scope. If none installed, suggests using marketplace browse.",
45011
+ expectedOutput: "Lists installed items with type (plugin or skill), marketplace, and scope. If none installed, suggests using marketplace browse.",
44995
45012
  outputSchema: {
44996
- plugins: [{ name: "string", marketplace: "string", scope: "string" }],
45013
+ plugins: [{ name: "string", marketplace: "string", scope: "string", kind: "string" }],
44997
45014
  total: "number"
44998
45015
  }
44999
45016
  };
@@ -45247,6 +45264,7 @@ var skillsAddMeta = {
45247
45264
  description: "Add a skill from a plugin, or re-enable a previously disabled skill",
45248
45265
  whenToUse: "To add a skill from a GitHub repo or marketplace plugin, or to re-enable a skill that was previously disabled",
45249
45266
  examples: [
45267
+ "allagents skill add ReScienceLab/opc-skills",
45250
45268
  "allagents skill add reddit --from ReScienceLab/opc-skills",
45251
45269
  "allagents skill add NousResearch/hermes-agent --skill llm-wiki",
45252
45270
  "allagents skill add NousResearch/hermes-agent --skill llm-wiki,dogfood",
@@ -45264,7 +45282,7 @@ var skillsAddMeta = {
45264
45282
  name: "skill-or-source",
45265
45283
  type: "string",
45266
45284
  required: false,
45267
- description: "Either a skill name (paired with --from) or a plugin source (owner/repo, gh:..., or a GitHub URL paired with --skill, --list, or --all)."
45285
+ description: "A skill name (re-enable an installed skill, or pair with --from to install from a source); " + "a plugin source without subpath (owner/repo, gh:owner/repo, or https://github.com/owner/repo — " + "installs all skills from that repo without needing any flags); " + "or a deep GitHub URL with a subpath pointing to a specific skill file."
45268
45286
  }
45269
45287
  ],
45270
45288
  options: [
@@ -45739,8 +45757,11 @@ function classifySkillAddPositional(positional3, skillFlag, list, all) {
45739
45757
  return { shape: "none" };
45740
45758
  const skills = skillFlag ? skillFlag.split(",").map((s) => s.trim()).filter(Boolean) : [];
45741
45759
  const hasSelector = skills.length > 0 || list || all;
45742
- if (isGitHubUrl(positional3) && hasSelector) {
45743
- return { shape: "source", skills };
45760
+ if (isGitHubUrl(positional3)) {
45761
+ if (hasSelector)
45762
+ return { shape: "source", skills };
45763
+ if (!parseGitHubUrl(positional3)?.subpath)
45764
+ return { shape: "source-auto" };
45744
45765
  }
45745
45766
  return { shape: "skill-name" };
45746
45767
  }
@@ -45941,6 +45962,160 @@ async function discoverSkillsFromSource(from) {
45941
45962
  const skills = await discoverSkillsWithMetadata(sourcePath);
45942
45963
  return { success: true, skills, isMarketplace: false };
45943
45964
  }
45965
+ async function selectAndInstallSkillsFromSource(opts) {
45966
+ const { from, isUser, workspacePath } = opts;
45967
+ const isTTY = process.stdout.isTTY && process.stdin.isTTY;
45968
+ if (!isTTY || isJsonMode()) {
45969
+ return installAllSkillsFromSource(opts);
45970
+ }
45971
+ const discovered = await discoverSkillsFromSource(from);
45972
+ if (!discovered.success)
45973
+ return { success: false, error: discovered.error };
45974
+ if (discovered.skills.length === 0) {
45975
+ return { success: false, error: `No skills found in '${from}'.` };
45976
+ }
45977
+ if (discovered.skills.length === 1) {
45978
+ return installAllSkillsFromSource(opts);
45979
+ }
45980
+ const p = await Promise.resolve().then(() => (init_dist2(), exports_dist));
45981
+ if (discovered.isMarketplace) {
45982
+ const allSkillNames = discovered.skills.map((s) => s.name);
45983
+ const groups = {};
45984
+ for (const skill of discovered.skills) {
45985
+ const group = skill.pluginName ?? "Other";
45986
+ if (!groups[group])
45987
+ groups[group] = [];
45988
+ groups[group].push({
45989
+ label: skill.name,
45990
+ value: skill.name,
45991
+ ...skill.description ? { hint: skill.description } : {}
45992
+ });
45993
+ }
45994
+ const selected2 = await p.groupMultiselect({
45995
+ message: `Select skills to install from ${source_default.bold(from)}`,
45996
+ options: groups,
45997
+ initialValues: allSkillNames,
45998
+ required: false
45999
+ });
46000
+ if (p.isCancel(selected2) || selected2.length === 0) {
46001
+ return { success: "cancelled" };
46002
+ }
46003
+ const selectedNames2 = selected2;
46004
+ if (selectedNames2.length === allSkillNames.length) {
46005
+ return installAllSkillsFromSource(opts);
46006
+ }
46007
+ const parsed2 = isGitHubUrl(from) ? parseGitHubUrl(from) : null;
46008
+ const sourceLocation = parsed2 ? `${parsed2.owner}/${parsed2.repo}` : undefined;
46009
+ let marketplaceName;
46010
+ const existingAnyScope = await findMarketplace(parsed2?.repo ?? from, sourceLocation, isUser ? undefined : workspacePath);
46011
+ if (existingAnyScope) {
46012
+ marketplaceName = existingAnyScope.name;
46013
+ await updateMarketplace(marketplaceName, isUser ? undefined : workspacePath);
46014
+ } else {
46015
+ const scopeOptions = isUser ? undefined : { scope: "project", workspacePath };
46016
+ const mktResult = await addMarketplace(from, parsed2?.branch ? `${parsed2.repo}-${parsed2.branch}` : undefined, parsed2?.branch ?? undefined, undefined, scopeOptions);
46017
+ if (mktResult.success) {
46018
+ marketplaceName = mktResult.marketplace?.name;
46019
+ }
46020
+ }
46021
+ if (!marketplaceName) {
46022
+ return { success: false, error: `Failed to register marketplace from '${from}'` };
46023
+ }
46024
+ const mktPlugins = await listMarketplacePlugins(marketplaceName, isUser ? undefined : workspacePath);
46025
+ if (mktPlugins.plugins.length === 0) {
46026
+ return { success: false, error: `No plugins found in marketplace '${marketplaceName}'.` };
46027
+ }
46028
+ const installed = [];
46029
+ for (const mktPlugin of mktPlugins.plugins) {
46030
+ const allPluginSkillNames = mktPlugin.skills ? mktPlugin.skills.map((s) => s.split("/").pop() ?? "").filter(Boolean) : await discoverSkillNames(mktPlugin.path);
46031
+ const pluginSelectedSkills = allPluginSkillNames.filter((n) => selectedNames2.includes(n));
46032
+ if (pluginSelectedSkills.length === 0)
46033
+ continue;
46034
+ const pluginSpec = `${mktPlugin.name}@${marketplaceName}`;
46035
+ const installResult = isUser ? await addUserPlugin(pluginSpec) : await addPlugin(pluginSpec, workspacePath);
46036
+ if (!installResult.success) {
46037
+ if (!installResult.error?.includes("already exists") && !installResult.error?.includes("duplicates existing")) {
46038
+ return {
46039
+ success: false,
46040
+ error: `Failed to install plugin '${pluginSpec}': ${installResult.error ?? "Unknown error"}`
46041
+ };
46042
+ }
46043
+ }
46044
+ const setModeResult = isUser ? await setUserPluginSkillsMode(mktPlugin.name, "allowlist", pluginSelectedSkills) : await setPluginSkillsMode(mktPlugin.name, "allowlist", pluginSelectedSkills, workspacePath);
46045
+ if (!setModeResult.success) {
46046
+ return {
46047
+ success: false,
46048
+ error: `Failed to configure skill allowlist for '${mktPlugin.name}': ${setModeResult.error ?? "Unknown error"}`
46049
+ };
46050
+ }
46051
+ installed.push({ pluginName: mktPlugin.name, skills: pluginSelectedSkills });
46052
+ }
46053
+ if (installed.length === 0) {
46054
+ return { success: false, error: "No matching skills found in marketplace plugins." };
46055
+ }
46056
+ if (!isJsonMode()) {
46057
+ const total = installed.reduce((sum, i2) => sum + i2.skills.length, 0);
46058
+ console.log(`✓ Enabled ${total} skill(s) across ${installed.length} plugin(s)`);
46059
+ }
46060
+ const syncResult2 = isUser ? await syncUserWorkspace() : await syncWorkspace(workspacePath);
46061
+ if (!syncResult2.success)
46062
+ return { success: false, error: "Sync failed" };
46063
+ return { success: true, installed, syncResult: syncResult2 };
46064
+ }
46065
+ const allNames = discovered.skills.map((s) => s.name);
46066
+ const options2 = discovered.skills.map((s) => ({
46067
+ label: s.name,
46068
+ value: s.name,
46069
+ ...s.description ? { hint: s.description } : {}
46070
+ }));
46071
+ const selected = await p.autocompleteMultiselect({
46072
+ message: `Select skills to install from ${source_default.bold(from)}`,
46073
+ options: options2,
46074
+ initialValues: allNames,
46075
+ placeholder: "Type to filter · Space to toggle · Enter to confirm",
46076
+ required: false
46077
+ });
46078
+ if (p.isCancel(selected) || selected.length === 0) {
46079
+ return { success: "cancelled" };
46080
+ }
46081
+ const selectedNames = selected;
46082
+ if (selectedNames.length === allNames.length) {
46083
+ return installAllSkillsFromSource(opts);
46084
+ }
46085
+ const parsed = isGitHubUrl(from) ? parseGitHubUrl(from) : null;
46086
+ const fetchResult = await fetchPlugin(from, {
46087
+ ...parsed?.branch && { branch: parsed.branch }
46088
+ });
46089
+ if (!fetchResult.success) {
46090
+ return {
46091
+ success: false,
46092
+ error: `Failed to fetch '${from}': ${fetchResult.error ?? "Unknown error"}`
46093
+ };
46094
+ }
46095
+ const existingEnabled = await getEnabledSkillsForGitHubSource(from, workspacePath);
46096
+ const desiredSkills = [...existingEnabled];
46097
+ for (const name of selectedNames) {
46098
+ if (!desiredSkills.includes(name))
46099
+ desiredSkills.push(name);
46100
+ }
46101
+ const updateResult = isUser ? await upsertUserGitHubPluginSourceAllowlist(from, desiredSkills) : await upsertGitHubPluginSourceAllowlist(from, desiredSkills, workspacePath);
46102
+ if (!updateResult.success) {
46103
+ return {
46104
+ success: false,
46105
+ error: `Failed to configure skill allowlist: ${updateResult.error ?? "Unknown error"}`
46106
+ };
46107
+ }
46108
+ const pluginName = extractPrimaryPluginName(updateResult.normalizedPlugin ?? from);
46109
+ console.log(`✓ Enabled ${selectedNames.length} skill(s) from ${pluginName}: ${selectedNames.join(", ")}`);
46110
+ const syncResult = isUser ? await syncUserWorkspace() : await syncWorkspace(workspacePath);
46111
+ if (!syncResult.success)
46112
+ return { success: false, error: "Sync failed" };
46113
+ return {
46114
+ success: true,
46115
+ installed: [{ pluginName, skills: desiredSkills }],
46116
+ syncResult
46117
+ };
46118
+ }
45944
46119
  async function installAllSkillsFromSource(opts) {
45945
46120
  const { from, isUser, workspacePath } = opts;
45946
46121
  if (!isJsonMode()) {
@@ -46165,7 +46340,8 @@ var addCmd = import_cmd_ts3.command({
46165
46340
  try {
46166
46341
  const classified = classifySkillAddPositional(skillArg, skillFlag, list, all);
46167
46342
  let skillsFromFlag = [];
46168
- if (classified.shape === "source") {
46343
+ let autoAll = false;
46344
+ if (classified.shape === "source" || classified.shape === "source-auto") {
46169
46345
  if (fromArg) {
46170
46346
  const error = "Cannot use --from when the positional argument is already a plugin source.";
46171
46347
  if (isJsonMode()) {
@@ -46177,7 +46353,11 @@ var addCmd = import_cmd_ts3.command({
46177
46353
  }
46178
46354
  fromArg = skillArg;
46179
46355
  skillArg = undefined;
46180
- skillsFromFlag = classified.skills;
46356
+ if (classified.shape === "source") {
46357
+ skillsFromFlag = classified.skills;
46358
+ } else {
46359
+ autoAll = true;
46360
+ }
46181
46361
  } else if (skillFlag) {
46182
46362
  const error = "--skill requires the positional argument to be a plugin source (e.g., `skill add owner/repo --skill foo`). To install a known skill, pass the skill name as the positional.";
46183
46363
  if (isJsonMode()) {
@@ -46289,7 +46469,7 @@ Available skills in ${fromArg}:
46289
46469
  }
46290
46470
  return;
46291
46471
  }
46292
- if (all) {
46472
+ if (all || autoAll) {
46293
46473
  if (!fromArg) {
46294
46474
  const error = "--all requires --from to specify a plugin source.";
46295
46475
  if (isJsonMode()) {
@@ -46310,11 +46490,18 @@ Available skills in ${fromArg}:
46310
46490
  }
46311
46491
  const isUserAll = scope === "user";
46312
46492
  const workspacePathAll = isUserAll ? getHomeDir() : process.cwd();
46313
- const installResult = await installAllSkillsFromSource({
46493
+ const installResult = autoAll ? await selectAndInstallSkillsFromSource({
46494
+ from: fromArg,
46495
+ isUser: isUserAll,
46496
+ workspacePath: workspacePathAll
46497
+ }) : await installAllSkillsFromSource({
46314
46498
  from: fromArg,
46315
46499
  isUser: isUserAll,
46316
46500
  workspacePath: workspacePathAll
46317
46501
  });
46502
+ if (installResult.success === "cancelled") {
46503
+ return;
46504
+ }
46318
46505
  if (!installResult.success) {
46319
46506
  if (isJsonMode()) {
46320
46507
  jsonOutput({
@@ -47425,6 +47612,16 @@ var pluginListCmd = import_cmd_ts4.command({
47425
47612
  const userPlugins = await getInstalledUserPlugins();
47426
47613
  const projectPlugins = await getInstalledProjectPlugins(process.cwd());
47427
47614
  const allInstalled = [...userPlugins, ...projectPlugins];
47615
+ const kindBySource = new Map;
47616
+ try {
47617
+ const status = await getWorkspaceStatus(process.cwd());
47618
+ for (const p of [
47619
+ ...status.plugins,
47620
+ ...status.userPlugins ?? []
47621
+ ]) {
47622
+ kindBySource.set(p.source, p.kind);
47623
+ }
47624
+ } catch {}
47428
47625
  const userSyncState = await loadSyncState(getAllagentsDir());
47429
47626
  const projectSyncState = cwdIsHome ? null : await loadSyncState(process.cwd());
47430
47627
  const merged = new Map;
@@ -47435,6 +47632,7 @@ var pluginListCmd = import_cmd_ts4.command({
47435
47632
  name: p.name,
47436
47633
  marketplace: p.marketplace,
47437
47634
  scope: p.scope,
47635
+ kind: kindBySource.get(p.spec) ?? "plugin",
47438
47636
  fileClients: pluginClients.get(`${p.spec}:${p.scope}`) ?? [],
47439
47637
  nativeClients: []
47440
47638
  });
@@ -47458,6 +47656,7 @@ var pluginListCmd = import_cmd_ts4.command({
47458
47656
  name: parsed?.plugin ?? spec,
47459
47657
  marketplace: parsed?.marketplaceName ?? "",
47460
47658
  scope,
47659
+ kind: kindBySource.get(spec) ?? "plugin",
47461
47660
  fileClients: [],
47462
47661
  nativeClients: [client]
47463
47662
  });
@@ -47475,6 +47674,7 @@ var pluginListCmd = import_cmd_ts4.command({
47475
47674
  name: p.name,
47476
47675
  marketplace: p.marketplace,
47477
47676
  scope: p.scope,
47677
+ kind: p.kind,
47478
47678
  ...p.fileClients.length > 0 && { clients: p.fileClients },
47479
47679
  ...p.nativeClients.length > 0 && { nativeClients: p.nativeClients }
47480
47680
  })),
@@ -47493,10 +47693,13 @@ var pluginListCmd = import_cmd_ts4.command({
47493
47693
  console.log(" allagents plugin marketplace list");
47494
47694
  return;
47495
47695
  }
47696
+ const skillCount = plugins.filter((p) => p.kind === "skill").length;
47697
+ const pluginCount = plugins.length - skillCount;
47496
47698
  console.log(`Installed plugins:
47497
47699
  `);
47498
47700
  for (const p of plugins) {
47499
47701
  console.log(` ❯ ${p.spec}`);
47702
+ console.log(` Type: ${p.kind}`);
47500
47703
  console.log(` Scope: ${p.scope}`);
47501
47704
  const hasClients = p.fileClients.length > 0 || p.nativeClients.length > 0;
47502
47705
  if (hasClients) {
@@ -47508,7 +47711,12 @@ var pluginListCmd = import_cmd_ts4.command({
47508
47711
  }
47509
47712
  console.log("");
47510
47713
  }
47511
- console.log(`Total: ${plugins.length} installed`);
47714
+ const summaryParts = [];
47715
+ if (pluginCount > 0)
47716
+ summaryParts.push(`${pluginCount} plugin${pluginCount === 1 ? "" : "s"}`);
47717
+ if (skillCount > 0)
47718
+ summaryParts.push(`${skillCount} skill${skillCount === 1 ? "" : "s"}`);
47719
+ console.log(`Total: ${summaryParts.join(", ")}`);
47512
47720
  } catch (error) {
47513
47721
  if (error instanceof Error) {
47514
47722
  if (isJsonMode()) {
@@ -58987,10 +59195,16 @@ function formatForAgent(meta) {
58987
59195
  }
58988
59196
  return result;
58989
59197
  }
59198
+ var commandAliases = {
59199
+ "workspace status": "status"
59200
+ };
59201
+ function resolveAlias(commandPath) {
59202
+ return commandAliases[commandPath] ?? commandPath;
59203
+ }
58990
59204
  function findMetaByCommand(commandPath) {
58991
59205
  if (!commandPath)
58992
59206
  return;
58993
- return allCommands.find((c) => c.command === commandPath);
59207
+ return allCommands.find((c) => c.command === resolveAlias(commandPath));
58994
59208
  }
58995
59209
  function printAgentHelp(args, version2) {
58996
59210
  const positional5 = args.filter((a) => !a.startsWith("-"));
@@ -59005,14 +59219,15 @@ function printAgentHelp(args, version2) {
59005
59219
  };
59006
59220
  console.log(JSON.stringify(tree, null, 2));
59007
59221
  } else {
59008
- const match = allCommands.find((c) => c.command === commandPath);
59222
+ const resolved = resolveAlias(commandPath);
59223
+ const match = allCommands.find((c) => c.command === resolved);
59009
59224
  if (match) {
59010
59225
  console.log(JSON.stringify(formatForAgent(match), null, 2));
59011
59226
  } else {
59012
- const matches = allCommands.filter((c) => c.command.startsWith(`${commandPath} `));
59227
+ const matches = allCommands.filter((c) => c.command.startsWith(`${resolved} `));
59013
59228
  if (matches.length > 0) {
59014
59229
  const group = {
59015
- name: commandPath,
59230
+ name: resolved,
59016
59231
  commands: matches.map(formatForAgent)
59017
59232
  };
59018
59233
  console.log(JSON.stringify(group, null, 2));
@@ -59037,6 +59252,7 @@ var app = conciseSubcommands({
59037
59252
  cmds: {
59038
59253
  init: initCmd,
59039
59254
  update: syncCmd,
59255
+ status: statusCmd,
59040
59256
  workspace: workspaceCmd,
59041
59257
  plugin: pluginCmd,
59042
59258
  mcp: mcpCmd,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "allagents",
3
- "version": "1.11.10-next.1",
3
+ "version": "1.12.0-next.1",
4
4
  "packageManager": "bun@1.3.12",
5
5
  "description": "CLI tool for managing multi-repo AI agent workspaces with plugin synchronization",
6
6
  "type": "module",