allagents 0.22.2 → 0.22.3
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/README.md +17 -13
- package/dist/index.js +229 -84
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -298,18 +298,19 @@ These marketplace names auto-resolve to their GitHub repos:
|
|
|
298
298
|
|
|
299
299
|
### Supported Clients
|
|
300
300
|
|
|
301
|
-
| Client | Skills | Agent File | Hooks | Commands |
|
|
302
|
-
|
|
303
|
-
| claude | `.claude/skills/` | `CLAUDE.md` | `.claude/hooks/` | `.claude/commands/` |
|
|
304
|
-
| copilot | `.agents/skills/` | `AGENTS.md` | No | No |
|
|
305
|
-
| codex | `.agents/skills/` | `AGENTS.md` | No | No |
|
|
306
|
-
| cursor | `.cursor/skills/` | `AGENTS.md` | No | No |
|
|
307
|
-
| opencode | `.agents/skills/` | `AGENTS.md` | No | No |
|
|
308
|
-
| gemini | `.agents/skills/` | `GEMINI.md` | No | No |
|
|
309
|
-
| factory | `.factory/skills/` | `AGENTS.md` | `.factory/hooks/` | No |
|
|
310
|
-
| ampcode | `.agents/skills/` | `AGENTS.md` | No | No |
|
|
311
|
-
|
|
312
|
-
|
|
301
|
+
| Client | Skills | Agent File | Hooks | Commands | GitHub Overrides |
|
|
302
|
+
|--------|--------|------------|-------|----------|------------------|
|
|
303
|
+
| claude | `.claude/skills/` | `CLAUDE.md` | `.claude/hooks/` | `.claude/commands/` | No |
|
|
304
|
+
| copilot | `.agents/skills/` | `AGENTS.md` | No | No | `.github/` |
|
|
305
|
+
| codex | `.agents/skills/` | `AGENTS.md` | No | No | No |
|
|
306
|
+
| cursor | `.cursor/skills/` | `AGENTS.md` | No | No | No |
|
|
307
|
+
| opencode | `.agents/skills/` | `AGENTS.md` | No | `.opencode/commands/` | No |
|
|
308
|
+
| gemini | `.agents/skills/` | `GEMINI.md` | No | No | No |
|
|
309
|
+
| factory | `.factory/skills/` | `AGENTS.md` | `.factory/hooks/` | No | No |
|
|
310
|
+
| ampcode | `.agents/skills/` | `AGENTS.md` | No | No | No |
|
|
311
|
+
| vscode | `.agents/skills/` | `AGENTS.md` | No | No | `.github/` |
|
|
312
|
+
|
|
313
|
+
> **Note:** Clients supporting the universal `.agents/` folder (copilot, codex, opencode, gemini, ampcode, vscode) share the same skills directory. GitHub overrides (`.github/prompts/`, `copilot-instructions.md`) are copied to Copilot/VSCode's `.github/` folder.
|
|
313
314
|
|
|
314
315
|
## Marketplace Structure
|
|
315
316
|
|
|
@@ -337,9 +338,12 @@ my-plugin/
|
|
|
337
338
|
├── skills/ # Skill directories with SKILL.md (all clients)
|
|
338
339
|
│ └── debugging/
|
|
339
340
|
│ └── SKILL.md
|
|
340
|
-
├── commands/ # Command files (.md) - Claude
|
|
341
|
+
├── commands/ # Command files (.md) - Claude, OpenCode
|
|
341
342
|
│ ├── build.md
|
|
342
343
|
│ └── deploy.md
|
|
344
|
+
├── .github/ # GitHub overrides (Copilot, VSCode)
|
|
345
|
+
│ └── prompts/
|
|
346
|
+
│ └── review.md
|
|
343
347
|
├── hooks/ # Hook files (Claude/Factory only)
|
|
344
348
|
│ └── pre-commit.md
|
|
345
349
|
└── AGENTS.md # Agent configuration (optional)
|
package/dist/index.js
CHANGED
|
@@ -16000,7 +16000,8 @@ async function updatePlugin(pluginSpec, deps) {
|
|
|
16000
16000
|
action: "skipped"
|
|
16001
16001
|
};
|
|
16002
16002
|
}
|
|
16003
|
-
const
|
|
16003
|
+
const sourceLocation = parsed.owner && parsed.repo ? `${parsed.owner}/${parsed.repo}` : undefined;
|
|
16004
|
+
const marketplace = await deps.getMarketplace(parsed.marketplaceName, sourceLocation);
|
|
16004
16005
|
if (!marketplace) {
|
|
16005
16006
|
return {
|
|
16006
16007
|
plugin: pluginSpec,
|
|
@@ -16009,9 +16010,10 @@ async function updatePlugin(pluginSpec, deps) {
|
|
|
16009
16010
|
error: `Marketplace not found: ${parsed.marketplaceName}`
|
|
16010
16011
|
};
|
|
16011
16012
|
}
|
|
16013
|
+
const marketplaceName = marketplace.name;
|
|
16012
16014
|
const manifestResult = await deps.parseMarketplaceManifest(marketplace.path);
|
|
16013
16015
|
if (!manifestResult.success || !manifestResult.data) {
|
|
16014
|
-
const updateResults = await deps.updateMarketplace(
|
|
16016
|
+
const updateResults = await deps.updateMarketplace(marketplaceName);
|
|
16015
16017
|
const result = updateResults[0];
|
|
16016
16018
|
return {
|
|
16017
16019
|
plugin: pluginSpec,
|
|
@@ -16022,7 +16024,7 @@ async function updatePlugin(pluginSpec, deps) {
|
|
|
16022
16024
|
}
|
|
16023
16025
|
const pluginEntry = manifestResult.data.plugins.find((p) => p.name === parsed.plugin);
|
|
16024
16026
|
if (!pluginEntry) {
|
|
16025
|
-
const updateResults = await deps.updateMarketplace(
|
|
16027
|
+
const updateResults = await deps.updateMarketplace(marketplaceName);
|
|
16026
16028
|
const result = updateResults[0];
|
|
16027
16029
|
return {
|
|
16028
16030
|
plugin: pluginSpec,
|
|
@@ -16032,7 +16034,7 @@ async function updatePlugin(pluginSpec, deps) {
|
|
|
16032
16034
|
};
|
|
16033
16035
|
}
|
|
16034
16036
|
if (typeof pluginEntry.source === "string") {
|
|
16035
|
-
const updateResults = await deps.updateMarketplace(
|
|
16037
|
+
const updateResults = await deps.updateMarketplace(marketplaceName);
|
|
16036
16038
|
const result = updateResults[0];
|
|
16037
16039
|
return {
|
|
16038
16040
|
plugin: pluginSpec,
|
|
@@ -16043,7 +16045,7 @@ async function updatePlugin(pluginSpec, deps) {
|
|
|
16043
16045
|
}
|
|
16044
16046
|
const url = pluginEntry.source.url;
|
|
16045
16047
|
if (marketplace.source.type === "github") {
|
|
16046
|
-
await deps.updateMarketplace(
|
|
16048
|
+
await deps.updateMarketplace(marketplaceName);
|
|
16047
16049
|
}
|
|
16048
16050
|
const fetchResult = await fetchFn(url);
|
|
16049
16051
|
return {
|
|
@@ -21397,6 +21399,7 @@ var init_client_mapping = __esm(() => {
|
|
|
21397
21399
|
agentFile: "AGENTS.md"
|
|
21398
21400
|
},
|
|
21399
21401
|
opencode: {
|
|
21402
|
+
commandsPath: ".opencode/commands/",
|
|
21400
21403
|
skillsPath: ".agents/skills/",
|
|
21401
21404
|
agentFile: "AGENTS.md"
|
|
21402
21405
|
},
|
|
@@ -21443,6 +21446,7 @@ var init_client_mapping = __esm(() => {
|
|
|
21443
21446
|
agentFile: "AGENTS.md"
|
|
21444
21447
|
},
|
|
21445
21448
|
opencode: {
|
|
21449
|
+
commandsPath: ".opencode/commands/",
|
|
21446
21450
|
skillsPath: ".agents/skills/",
|
|
21447
21451
|
agentFile: "AGENTS.md"
|
|
21448
21452
|
},
|
|
@@ -29472,7 +29476,7 @@ var package_default;
|
|
|
29472
29476
|
var init_package = __esm(() => {
|
|
29473
29477
|
package_default = {
|
|
29474
29478
|
name: "allagents",
|
|
29475
|
-
version: "0.22.
|
|
29479
|
+
version: "0.22.3",
|
|
29476
29480
|
description: "CLI tool for managing multi-repo AI agent workspaces with plugin synchronization",
|
|
29477
29481
|
type: "module",
|
|
29478
29482
|
bin: {
|
|
@@ -31601,78 +31605,25 @@ var init_init2 = __esm(() => {
|
|
|
31601
31605
|
({ text, multiselect } = exports_dist);
|
|
31602
31606
|
});
|
|
31603
31607
|
|
|
31604
|
-
// src/cli/tui/actions/
|
|
31605
|
-
|
|
31606
|
-
|
|
31607
|
-
|
|
31608
|
-
|
|
31609
|
-
|
|
31610
|
-
|
|
31611
|
-
|
|
31612
|
-
|
|
31613
|
-
|
|
31614
|
-
return;
|
|
31615
|
-
}
|
|
31616
|
-
const lines = [];
|
|
31617
|
-
if (context.hasWorkspace) {
|
|
31618
|
-
lines.push(`Workspace: ${context.workspacePath}`);
|
|
31619
|
-
} else {
|
|
31620
|
-
lines.push("No workspace detected");
|
|
31621
|
-
}
|
|
31622
|
-
lines.push("");
|
|
31623
|
-
const userPlugins = status.userPlugins ?? [];
|
|
31624
|
-
const hasProjectPlugins = status.plugins.length > 0;
|
|
31625
|
-
const hasUserPlugins = userPlugins.length > 0;
|
|
31626
|
-
if (!hasProjectPlugins && !hasUserPlugins) {
|
|
31627
|
-
lines.push("No plugins configured");
|
|
31628
|
-
}
|
|
31629
|
-
if (hasProjectPlugins) {
|
|
31630
|
-
lines.push("Project plugins:");
|
|
31631
|
-
for (const plugin of status.plugins) {
|
|
31632
|
-
const icon = plugin.available ? "✓" : "✗";
|
|
31633
|
-
lines.push(` ${icon} ${plugin.source} (${plugin.type})`);
|
|
31608
|
+
// src/cli/tui/actions/plugins.ts
|
|
31609
|
+
function createUpdateDeps() {
|
|
31610
|
+
const updatedMarketplaces = new Set;
|
|
31611
|
+
return {
|
|
31612
|
+
parsePluginSpec,
|
|
31613
|
+
getMarketplace: (name, sourceLocation) => findMarketplace(name, sourceLocation),
|
|
31614
|
+
parseMarketplaceManifest,
|
|
31615
|
+
updateMarketplace: async (name) => {
|
|
31616
|
+
if (updatedMarketplaces.has(name)) {
|
|
31617
|
+
return [{ name, success: true }];
|
|
31634
31618
|
}
|
|
31635
|
-
|
|
31636
|
-
|
|
31637
|
-
|
|
31638
|
-
lines.push("");
|
|
31639
|
-
lines.push("User plugins:");
|
|
31640
|
-
for (const plugin of userPlugins) {
|
|
31641
|
-
const icon = plugin.available ? "✓" : "✗";
|
|
31642
|
-
lines.push(` ${icon} ${plugin.source} (${plugin.type})`);
|
|
31643
|
-
}
|
|
31644
|
-
}
|
|
31645
|
-
lines.push("");
|
|
31646
|
-
lines.push(`Clients: ${status.clients.length > 0 ? status.clients.join(", ") : "none"}`);
|
|
31647
|
-
kt2(lines.join(`
|
|
31648
|
-
`), "Status");
|
|
31649
|
-
if (!context.hasWorkspace) {
|
|
31650
|
-
const action = await select({
|
|
31651
|
-
message: "Options",
|
|
31652
|
-
options: [
|
|
31653
|
-
{ label: "Add workspace", value: "init" },
|
|
31654
|
-
{ label: "Back", value: "back" }
|
|
31655
|
-
]
|
|
31656
|
-
});
|
|
31657
|
-
if (!Ct(action) && action === "init") {
|
|
31658
|
-
await runInit();
|
|
31659
|
-
cache2?.invalidate();
|
|
31619
|
+
const result = await updateMarketplace(name);
|
|
31620
|
+
if (result[0]?.success) {
|
|
31621
|
+
updatedMarketplaces.add(name);
|
|
31660
31622
|
}
|
|
31623
|
+
return result;
|
|
31661
31624
|
}
|
|
31662
|
-
}
|
|
31663
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
31664
|
-
kt2(message, "Error");
|
|
31665
|
-
}
|
|
31625
|
+
};
|
|
31666
31626
|
}
|
|
31667
|
-
var select;
|
|
31668
|
-
var init_status3 = __esm(() => {
|
|
31669
|
-
init_dist2();
|
|
31670
|
-
init_status2();
|
|
31671
|
-
init_init2();
|
|
31672
|
-
({ select } = exports_dist);
|
|
31673
|
-
});
|
|
31674
|
-
|
|
31675
|
-
// src/cli/tui/actions/plugins.ts
|
|
31676
31627
|
async function getCachedMarketplaces(cache2) {
|
|
31677
31628
|
const cached = cache2?.getMarketplaces();
|
|
31678
31629
|
if (cached)
|
|
@@ -31690,7 +31641,7 @@ async function getCachedMarketplacePlugins(name, cache2) {
|
|
|
31690
31641
|
return result;
|
|
31691
31642
|
}
|
|
31692
31643
|
async function installSelectedPlugin(pluginRef, context, cache2) {
|
|
31693
|
-
const scopeChoice = await
|
|
31644
|
+
const scopeChoice = await select({
|
|
31694
31645
|
message: "Install scope",
|
|
31695
31646
|
options: [
|
|
31696
31647
|
{ label: "Project (this workspace)", value: "project" },
|
|
@@ -31733,6 +31684,102 @@ async function installSelectedPlugin(pluginRef, context, cache2) {
|
|
|
31733
31684
|
kt2(`Installed: ${pluginRef}`, "Success");
|
|
31734
31685
|
return true;
|
|
31735
31686
|
}
|
|
31687
|
+
async function runUpdatePlugin(pluginSource, scope, context, cache2) {
|
|
31688
|
+
const s = Ie();
|
|
31689
|
+
s.start("Updating plugin...");
|
|
31690
|
+
const result = await updatePlugin(pluginSource, createUpdateDeps());
|
|
31691
|
+
if (!result.success) {
|
|
31692
|
+
s.stop("Update failed");
|
|
31693
|
+
kt2(result.error ?? "Unknown error", "Error");
|
|
31694
|
+
return;
|
|
31695
|
+
}
|
|
31696
|
+
s.stop(result.action === "updated" ? "Plugin updated" : "Already up to date");
|
|
31697
|
+
if (result.action === "updated") {
|
|
31698
|
+
const syncS = Ie();
|
|
31699
|
+
syncS.start("Syncing...");
|
|
31700
|
+
if (scope === "project" && context.workspacePath) {
|
|
31701
|
+
await syncWorkspace(context.workspacePath);
|
|
31702
|
+
} else {
|
|
31703
|
+
await syncUserWorkspace();
|
|
31704
|
+
}
|
|
31705
|
+
syncS.stop("Sync complete");
|
|
31706
|
+
cache2?.invalidate();
|
|
31707
|
+
}
|
|
31708
|
+
const icon = result.action === "updated" ? "✓" : "-";
|
|
31709
|
+
kt2(`${icon} ${pluginSource} (${result.action})`, "Update");
|
|
31710
|
+
}
|
|
31711
|
+
async function runUpdateAllPlugins(context, cache2) {
|
|
31712
|
+
const s = Ie();
|
|
31713
|
+
s.start("Gathering plugins...");
|
|
31714
|
+
const pluginsToUpdate = [];
|
|
31715
|
+
if (context.workspacePath) {
|
|
31716
|
+
const projectPlugins = await getInstalledProjectPlugins(context.workspacePath);
|
|
31717
|
+
for (const plugin of projectPlugins) {
|
|
31718
|
+
pluginsToUpdate.push({ spec: plugin.spec, scope: "project" });
|
|
31719
|
+
}
|
|
31720
|
+
}
|
|
31721
|
+
const userPlugins = await getInstalledUserPlugins();
|
|
31722
|
+
for (const plugin of userPlugins) {
|
|
31723
|
+
if (!pluginsToUpdate.some((existing) => existing.spec === plugin.spec)) {
|
|
31724
|
+
pluginsToUpdate.push({ spec: plugin.spec, scope: "user" });
|
|
31725
|
+
}
|
|
31726
|
+
}
|
|
31727
|
+
if (pluginsToUpdate.length === 0) {
|
|
31728
|
+
s.stop("No plugins to update");
|
|
31729
|
+
return;
|
|
31730
|
+
}
|
|
31731
|
+
s.stop(`Found ${pluginsToUpdate.length} plugin(s)`);
|
|
31732
|
+
const deps = createUpdateDeps();
|
|
31733
|
+
const updateS = Ie();
|
|
31734
|
+
updateS.start("Updating plugins...");
|
|
31735
|
+
const results = [];
|
|
31736
|
+
let needsProjectSync = false;
|
|
31737
|
+
let needsUserSync = false;
|
|
31738
|
+
for (const { spec, scope } of pluginsToUpdate) {
|
|
31739
|
+
const result = await updatePlugin(spec, deps);
|
|
31740
|
+
const entry = {
|
|
31741
|
+
plugin: spec,
|
|
31742
|
+
action: result.action
|
|
31743
|
+
};
|
|
31744
|
+
if (result.error) {
|
|
31745
|
+
entry.error = result.error;
|
|
31746
|
+
}
|
|
31747
|
+
results.push(entry);
|
|
31748
|
+
if (result.action === "updated") {
|
|
31749
|
+
if (scope === "project")
|
|
31750
|
+
needsProjectSync = true;
|
|
31751
|
+
else
|
|
31752
|
+
needsUserSync = true;
|
|
31753
|
+
}
|
|
31754
|
+
}
|
|
31755
|
+
updateS.stop("Update complete");
|
|
31756
|
+
if (needsProjectSync && context.workspacePath) {
|
|
31757
|
+
const syncS = Ie();
|
|
31758
|
+
syncS.start("Syncing project...");
|
|
31759
|
+
await syncWorkspace(context.workspacePath);
|
|
31760
|
+
syncS.stop("Project sync complete");
|
|
31761
|
+
}
|
|
31762
|
+
if (needsUserSync) {
|
|
31763
|
+
const syncS = Ie();
|
|
31764
|
+
syncS.start("Syncing user...");
|
|
31765
|
+
await syncUserWorkspace();
|
|
31766
|
+
syncS.stop("User sync complete");
|
|
31767
|
+
}
|
|
31768
|
+
if (needsProjectSync || needsUserSync) {
|
|
31769
|
+
cache2?.invalidate();
|
|
31770
|
+
}
|
|
31771
|
+
const updated = results.filter((r) => r.action === "updated").length;
|
|
31772
|
+
const skipped = results.filter((r) => r.action === "skipped").length;
|
|
31773
|
+
const failed = results.filter((r) => r.action === "failed").length;
|
|
31774
|
+
const lines = results.map((r) => {
|
|
31775
|
+
const icon = r.action === "updated" ? "✓" : r.action === "skipped" ? "-" : "✗";
|
|
31776
|
+
return `${icon} ${r.plugin} (${r.action})${r.error ? ` - ${r.error}` : ""}`;
|
|
31777
|
+
});
|
|
31778
|
+
lines.push("");
|
|
31779
|
+
lines.push(`Updated: ${updated} Skipped: ${skipped} Failed: ${failed}`);
|
|
31780
|
+
kt2(lines.join(`
|
|
31781
|
+
`), "Update Results");
|
|
31782
|
+
}
|
|
31736
31783
|
async function runPlugins(context, cache2) {
|
|
31737
31784
|
try {
|
|
31738
31785
|
while (true) {
|
|
@@ -31744,6 +31791,10 @@ async function runPlugins(context, cache2) {
|
|
|
31744
31791
|
status = await getWorkspaceStatus(context.workspacePath ?? undefined);
|
|
31745
31792
|
cache2?.setStatus(status);
|
|
31746
31793
|
}
|
|
31794
|
+
const hasPlugins = status.success && ((status.plugins?.length ?? 0) > 0 || (status.userPlugins?.length ?? 0) > 0);
|
|
31795
|
+
if (hasPlugins) {
|
|
31796
|
+
options2.push({ label: "Update all", value: "__update_all__" });
|
|
31797
|
+
}
|
|
31747
31798
|
if (status.success) {
|
|
31748
31799
|
for (const plugin of status.plugins) {
|
|
31749
31800
|
const key = `project:${plugin.source}`;
|
|
@@ -31761,7 +31812,7 @@ async function runPlugins(context, cache2) {
|
|
|
31761
31812
|
}
|
|
31762
31813
|
}
|
|
31763
31814
|
options2.push({ label: "Back", value: "__back__" });
|
|
31764
|
-
const selected = await
|
|
31815
|
+
const selected = await select({
|
|
31765
31816
|
message: "Plugins",
|
|
31766
31817
|
options: options2
|
|
31767
31818
|
});
|
|
@@ -31772,6 +31823,10 @@ async function runPlugins(context, cache2) {
|
|
|
31772
31823
|
await runInstallPlugin(context, cache2);
|
|
31773
31824
|
continue;
|
|
31774
31825
|
}
|
|
31826
|
+
if (selected === "__update_all__") {
|
|
31827
|
+
await runUpdateAllPlugins(context, cache2);
|
|
31828
|
+
continue;
|
|
31829
|
+
}
|
|
31775
31830
|
await runPluginDetail(selected, context, cache2);
|
|
31776
31831
|
}
|
|
31777
31832
|
} catch (error) {
|
|
@@ -31783,10 +31838,11 @@ async function runPluginDetail(pluginKey, context, cache2) {
|
|
|
31783
31838
|
const scope = pluginKey.startsWith("project:") ? "project" : "user";
|
|
31784
31839
|
const pluginSource = pluginKey.replace(/^(project|user):/, "");
|
|
31785
31840
|
while (true) {
|
|
31786
|
-
const action = await
|
|
31841
|
+
const action = await select({
|
|
31787
31842
|
message: `Plugin: ${pluginSource} [${scope}]`,
|
|
31788
31843
|
options: [
|
|
31789
31844
|
{ label: "Browse skills", value: "browse" },
|
|
31845
|
+
{ label: "Update", value: "update" },
|
|
31790
31846
|
{ label: "Remove", value: "remove" },
|
|
31791
31847
|
{ label: "Back", value: "back" }
|
|
31792
31848
|
]
|
|
@@ -31798,6 +31854,10 @@ async function runPluginDetail(pluginKey, context, cache2) {
|
|
|
31798
31854
|
await runBrowsePluginSkills(pluginSource, scope, context, cache2);
|
|
31799
31855
|
continue;
|
|
31800
31856
|
}
|
|
31857
|
+
if (action === "update") {
|
|
31858
|
+
await runUpdatePlugin(pluginSource, scope, context, cache2);
|
|
31859
|
+
continue;
|
|
31860
|
+
}
|
|
31801
31861
|
if (action === "remove") {
|
|
31802
31862
|
const confirmed = await confirm({
|
|
31803
31863
|
message: `Remove plugin "${pluginSource}"?`
|
|
@@ -31934,7 +31994,7 @@ Use "Manage marketplaces" to add one first.`, "Marketplace");
|
|
|
31934
31994
|
return;
|
|
31935
31995
|
}
|
|
31936
31996
|
allPlugins.push({ label: "Back", value: "__back__" });
|
|
31937
|
-
const selected = await
|
|
31997
|
+
const selected = await select({
|
|
31938
31998
|
message: "Select a plugin to install",
|
|
31939
31999
|
options: allPlugins
|
|
31940
32000
|
});
|
|
@@ -31959,7 +32019,7 @@ async function runBrowseMarketplaces(context, cache2) {
|
|
|
31959
32019
|
})),
|
|
31960
32020
|
{ label: "Back", value: "__back__" }
|
|
31961
32021
|
];
|
|
31962
|
-
const selected = await
|
|
32022
|
+
const selected = await select({
|
|
31963
32023
|
message: "Marketplaces",
|
|
31964
32024
|
options: options2
|
|
31965
32025
|
});
|
|
@@ -31994,7 +32054,7 @@ async function runBrowseMarketplaces(context, cache2) {
|
|
|
31994
32054
|
}
|
|
31995
32055
|
async function runMarketplaceDetail(marketplaceName, context, cache2) {
|
|
31996
32056
|
while (true) {
|
|
31997
|
-
const action = await
|
|
32057
|
+
const action = await select({
|
|
31998
32058
|
message: `Marketplace: ${marketplaceName}`,
|
|
31999
32059
|
options: [
|
|
32000
32060
|
{ label: "Browse plugins", value: "browse" },
|
|
@@ -32018,7 +32078,7 @@ async function runMarketplaceDetail(marketplaceName, context, cache2) {
|
|
|
32018
32078
|
return { label, value: plugin.name };
|
|
32019
32079
|
});
|
|
32020
32080
|
pluginOptions.push({ label: "Back", value: "__back__" });
|
|
32021
|
-
const selectedPlugin = await
|
|
32081
|
+
const selectedPlugin = await select({
|
|
32022
32082
|
message: "Select a plugin to install",
|
|
32023
32083
|
options: pluginOptions
|
|
32024
32084
|
});
|
|
@@ -32074,17 +32134,102 @@ async function runMarketplaceDetail(marketplaceName, context, cache2) {
|
|
|
32074
32134
|
}
|
|
32075
32135
|
}
|
|
32076
32136
|
}
|
|
32077
|
-
var
|
|
32137
|
+
var select, text2, confirm, multiselect2;
|
|
32078
32138
|
var init_plugins = __esm(() => {
|
|
32079
32139
|
init_dist2();
|
|
32080
32140
|
init_workspace_modify();
|
|
32081
32141
|
init_user_workspace();
|
|
32082
32142
|
init_sync();
|
|
32083
32143
|
init_marketplace();
|
|
32144
|
+
init_plugin();
|
|
32145
|
+
init_marketplace_manifest_parser();
|
|
32084
32146
|
init_status2();
|
|
32085
32147
|
init_skills();
|
|
32086
32148
|
init_constants();
|
|
32087
|
-
({ select
|
|
32149
|
+
({ select, text: text2, confirm, multiselect: multiselect2 } = exports_dist);
|
|
32150
|
+
});
|
|
32151
|
+
|
|
32152
|
+
// src/cli/tui/actions/status.ts
|
|
32153
|
+
async function runStatus(context, cache2) {
|
|
32154
|
+
try {
|
|
32155
|
+
let status = cache2?.getStatus();
|
|
32156
|
+
if (!status) {
|
|
32157
|
+
status = await getWorkspaceStatus(context.workspacePath ?? undefined);
|
|
32158
|
+
cache2?.setStatus(status);
|
|
32159
|
+
}
|
|
32160
|
+
if (!status.success) {
|
|
32161
|
+
kt2(status.error ?? "Unknown error", "Status Error");
|
|
32162
|
+
return;
|
|
32163
|
+
}
|
|
32164
|
+
const lines = [];
|
|
32165
|
+
if (context.hasWorkspace) {
|
|
32166
|
+
lines.push(`Workspace: ${context.workspacePath}`);
|
|
32167
|
+
} else {
|
|
32168
|
+
lines.push("No workspace detected");
|
|
32169
|
+
}
|
|
32170
|
+
lines.push("");
|
|
32171
|
+
const userPlugins = status.userPlugins ?? [];
|
|
32172
|
+
const hasProjectPlugins = status.plugins.length > 0;
|
|
32173
|
+
const hasUserPlugins = userPlugins.length > 0;
|
|
32174
|
+
if (!hasProjectPlugins && !hasUserPlugins) {
|
|
32175
|
+
lines.push("No plugins configured");
|
|
32176
|
+
}
|
|
32177
|
+
if (hasProjectPlugins) {
|
|
32178
|
+
lines.push("Project plugins:");
|
|
32179
|
+
for (const plugin of status.plugins) {
|
|
32180
|
+
const icon = plugin.available ? "✓" : "✗";
|
|
32181
|
+
lines.push(` ${icon} ${plugin.source} (${plugin.type})`);
|
|
32182
|
+
}
|
|
32183
|
+
}
|
|
32184
|
+
if (hasUserPlugins) {
|
|
32185
|
+
if (hasProjectPlugins)
|
|
32186
|
+
lines.push("");
|
|
32187
|
+
lines.push("User plugins:");
|
|
32188
|
+
for (const plugin of userPlugins) {
|
|
32189
|
+
const icon = plugin.available ? "✓" : "✗";
|
|
32190
|
+
lines.push(` ${icon} ${plugin.source} (${plugin.type})`);
|
|
32191
|
+
}
|
|
32192
|
+
}
|
|
32193
|
+
lines.push("");
|
|
32194
|
+
lines.push(`Clients: ${status.clients.length > 0 ? status.clients.join(", ") : "none"}`);
|
|
32195
|
+
kt2(lines.join(`
|
|
32196
|
+
`), "Status");
|
|
32197
|
+
const hasPlugins = context.projectPluginCount > 0 || context.userPluginCount > 0;
|
|
32198
|
+
const options2 = [];
|
|
32199
|
+
if (hasPlugins) {
|
|
32200
|
+
options2.push({ label: "Update all", value: "update_all" });
|
|
32201
|
+
}
|
|
32202
|
+
if (context.hasWorkspace) {
|
|
32203
|
+
options2.push({ label: "Add workspace", value: "init", hint: "in subdirectory" });
|
|
32204
|
+
} else {
|
|
32205
|
+
options2.push({ label: "Add workspace", value: "init" });
|
|
32206
|
+
}
|
|
32207
|
+
options2.push({ label: "Back", value: "back" });
|
|
32208
|
+
const action = await select2({
|
|
32209
|
+
message: "Options",
|
|
32210
|
+
options: options2
|
|
32211
|
+
});
|
|
32212
|
+
if (Ct(action) || action === "back") {
|
|
32213
|
+
return;
|
|
32214
|
+
}
|
|
32215
|
+
if (action === "update_all") {
|
|
32216
|
+
await runUpdateAllPlugins(context, cache2);
|
|
32217
|
+
} else if (action === "init") {
|
|
32218
|
+
await runInit();
|
|
32219
|
+
cache2?.invalidate();
|
|
32220
|
+
}
|
|
32221
|
+
} catch (error) {
|
|
32222
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
32223
|
+
kt2(message, "Error");
|
|
32224
|
+
}
|
|
32225
|
+
}
|
|
32226
|
+
var select2;
|
|
32227
|
+
var init_status3 = __esm(() => {
|
|
32228
|
+
init_dist2();
|
|
32229
|
+
init_status2();
|
|
32230
|
+
init_init2();
|
|
32231
|
+
init_plugins();
|
|
32232
|
+
({ select: select2 } = exports_dist);
|
|
32088
32233
|
});
|
|
32089
32234
|
|
|
32090
32235
|
// src/cli/tui/actions/clients.ts
|
|
@@ -34587,7 +34732,7 @@ var pluginUpdateCmd = import_cmd_ts4.command({
|
|
|
34587
34732
|
const updatedMarketplaces = new Set;
|
|
34588
34733
|
const deps = {
|
|
34589
34734
|
parsePluginSpec,
|
|
34590
|
-
getMarketplace,
|
|
34735
|
+
getMarketplace: (name, sourceLocation) => findMarketplace(name, sourceLocation),
|
|
34591
34736
|
parseMarketplaceManifest,
|
|
34592
34737
|
updateMarketplace: async (name) => {
|
|
34593
34738
|
if (updatedMarketplaces.has(name)) {
|