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.
- package/dist/index.js +248 -32
- 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
|
-
|
|
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.
|
|
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: "
|
|
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
|
-
|
|
44577
|
+
const labels = [plugin.kind];
|
|
44562
44578
|
if (plugin.type === "marketplace") {
|
|
44563
|
-
|
|
44579
|
+
if (!plugin.available)
|
|
44580
|
+
labels.push("not synced");
|
|
44564
44581
|
} else if (plugin.type === "github") {
|
|
44565
|
-
|
|
44582
|
+
labels.push(plugin.available ? "cached" : "not cached");
|
|
44566
44583
|
} else {
|
|
44567
|
-
|
|
44584
|
+
labels.push("local");
|
|
44568
44585
|
}
|
|
44569
|
-
|
|
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
|
|
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: "
|
|
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)
|
|
45743
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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(`${
|
|
59227
|
+
const matches = allCommands.filter((c) => c.command.startsWith(`${resolved} `));
|
|
59013
59228
|
if (matches.length > 0) {
|
|
59014
59229
|
const group = {
|
|
59015
|
-
name:
|
|
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