allagents 0.22.2 → 0.23.0
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 +36 -9
- package/dist/index.js +356 -85
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@ CLI tool for managing multi-repo AI agent workspaces with plugin synchronization
|
|
|
11
11
|
| Feature | Claude Code Plugins | AllAgents |
|
|
12
12
|
|---------|--------------------|-----------|
|
|
13
13
|
| Scope | Single project | Multi-repo workspace |
|
|
14
|
-
| Client support | Claude only |
|
|
14
|
+
| Client support | Claude only | 23 AI clients |
|
|
15
15
|
| File location | Runtime lookup from cache | Copied to workspace (git-versioned) |
|
|
16
16
|
| Project structure | AI config mixed with code | Separate workspace repo |
|
|
17
17
|
|
|
@@ -298,18 +298,42 @@ These marketplace names auto-resolve to their GitHub repos:
|
|
|
298
298
|
|
|
299
299
|
### Supported Clients
|
|
300
300
|
|
|
301
|
+
AllAgents supports 23 AI coding assistants:
|
|
302
|
+
|
|
303
|
+
#### Universal Clients (share `.agents/skills/`)
|
|
304
|
+
|
|
305
|
+
| Client | Skills | Agent File | Hooks | Commands | GitHub Overrides |
|
|
306
|
+
|--------|--------|------------|-------|----------|------------------|
|
|
307
|
+
| copilot | `.agents/skills/` | `AGENTS.md` | No | No | `.github/` |
|
|
308
|
+
| codex | `.agents/skills/` | `AGENTS.md` | No | No | No |
|
|
309
|
+
| opencode | `.agents/skills/` | `AGENTS.md` | No | `.opencode/commands/` | No |
|
|
310
|
+
| gemini | `.agents/skills/` | `GEMINI.md` | No | No | No |
|
|
311
|
+
| ampcode | `.agents/skills/` | `AGENTS.md` | No | No | No |
|
|
312
|
+
| vscode | `.agents/skills/` | `AGENTS.md` | No | No | `.github/` |
|
|
313
|
+
| replit | `.agents/skills/` | `AGENTS.md` | No | No | No |
|
|
314
|
+
| kimi | `.agents/skills/` | `AGENTS.md` | No | No | No |
|
|
315
|
+
|
|
316
|
+
#### Provider-Specific Clients
|
|
317
|
+
|
|
301
318
|
| Client | Skills | Agent File | Hooks | Commands |
|
|
302
319
|
|--------|--------|------------|-------|----------|
|
|
303
320
|
| 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
321
|
| cursor | `.cursor/skills/` | `AGENTS.md` | No | No |
|
|
307
|
-
| opencode | `.agents/skills/` | `AGENTS.md` | No | No |
|
|
308
|
-
| gemini | `.agents/skills/` | `GEMINI.md` | No | No |
|
|
309
322
|
| factory | `.factory/skills/` | `AGENTS.md` | `.factory/hooks/` | No |
|
|
310
|
-
|
|
|
311
|
-
|
|
312
|
-
|
|
323
|
+
| openclaw | `skills/` | `AGENTS.md` | No | No |
|
|
324
|
+
| windsurf | `.windsurf/skills/` | `AGENTS.md` | No | No |
|
|
325
|
+
| cline | `.cline/skills/` | `AGENTS.md` | No | No |
|
|
326
|
+
| continue | `.continue/skills/` | `AGENTS.md` | No | No |
|
|
327
|
+
| roo | `.roo/skills/` | `AGENTS.md` | No | No |
|
|
328
|
+
| kilo | `.kilocode/skills/` | `AGENTS.md` | No | No |
|
|
329
|
+
| trae | `.trae/skills/` | `AGENTS.md` | No | No |
|
|
330
|
+
| augment | `.augment/skills/` | `AGENTS.md` | No | No |
|
|
331
|
+
| zencoder | `.zencoder/skills/` | `AGENTS.md` | No | No |
|
|
332
|
+
| junie | `.junie/skills/` | `AGENTS.md` | No | No |
|
|
333
|
+
| openhands | `.openhands/skills/` | `AGENTS.md` | No | No |
|
|
334
|
+
| kiro | `.kiro/skills/` | `AGENTS.md` | No | No |
|
|
335
|
+
|
|
336
|
+
> **Note:** Universal clients share the same `.agents/skills/` directory. GitHub overrides (`.github/prompts/`, `copilot-instructions.md`) are copied to Copilot/VSCode's `.github/` folder.
|
|
313
337
|
|
|
314
338
|
## Marketplace Structure
|
|
315
339
|
|
|
@@ -337,9 +361,12 @@ my-plugin/
|
|
|
337
361
|
├── skills/ # Skill directories with SKILL.md (all clients)
|
|
338
362
|
│ └── debugging/
|
|
339
363
|
│ └── SKILL.md
|
|
340
|
-
├── commands/ # Command files (.md) - Claude
|
|
364
|
+
├── commands/ # Command files (.md) - Claude, OpenCode
|
|
341
365
|
│ ├── build.md
|
|
342
366
|
│ └── deploy.md
|
|
367
|
+
├── .github/ # GitHub overrides (Copilot, VSCode)
|
|
368
|
+
│ └── prompts/
|
|
369
|
+
│ └── review.md
|
|
343
370
|
├── hooks/ # Hook files (Claude/Factory only)
|
|
344
371
|
│ └── pre-commit.md
|
|
345
372
|
└── AGENTS.md # Agent configuration (optional)
|
package/dist/index.js
CHANGED
|
@@ -11483,7 +11483,21 @@ var init_workspace_config = __esm(() => {
|
|
|
11483
11483
|
"gemini",
|
|
11484
11484
|
"factory",
|
|
11485
11485
|
"ampcode",
|
|
11486
|
-
"vscode"
|
|
11486
|
+
"vscode",
|
|
11487
|
+
"openclaw",
|
|
11488
|
+
"windsurf",
|
|
11489
|
+
"cline",
|
|
11490
|
+
"continue",
|
|
11491
|
+
"roo",
|
|
11492
|
+
"kilo",
|
|
11493
|
+
"trae",
|
|
11494
|
+
"augment",
|
|
11495
|
+
"zencoder",
|
|
11496
|
+
"junie",
|
|
11497
|
+
"openhands",
|
|
11498
|
+
"kiro",
|
|
11499
|
+
"replit",
|
|
11500
|
+
"kimi"
|
|
11487
11501
|
]);
|
|
11488
11502
|
VscodeConfigSchema = exports_external.object({
|
|
11489
11503
|
output: exports_external.string().optional()
|
|
@@ -16000,7 +16014,8 @@ async function updatePlugin(pluginSpec, deps) {
|
|
|
16000
16014
|
action: "skipped"
|
|
16001
16015
|
};
|
|
16002
16016
|
}
|
|
16003
|
-
const
|
|
16017
|
+
const sourceLocation = parsed.owner && parsed.repo ? `${parsed.owner}/${parsed.repo}` : undefined;
|
|
16018
|
+
const marketplace = await deps.getMarketplace(parsed.marketplaceName, sourceLocation);
|
|
16004
16019
|
if (!marketplace) {
|
|
16005
16020
|
return {
|
|
16006
16021
|
plugin: pluginSpec,
|
|
@@ -16009,9 +16024,10 @@ async function updatePlugin(pluginSpec, deps) {
|
|
|
16009
16024
|
error: `Marketplace not found: ${parsed.marketplaceName}`
|
|
16010
16025
|
};
|
|
16011
16026
|
}
|
|
16027
|
+
const marketplaceName = marketplace.name;
|
|
16012
16028
|
const manifestResult = await deps.parseMarketplaceManifest(marketplace.path);
|
|
16013
16029
|
if (!manifestResult.success || !manifestResult.data) {
|
|
16014
|
-
const updateResults = await deps.updateMarketplace(
|
|
16030
|
+
const updateResults = await deps.updateMarketplace(marketplaceName);
|
|
16015
16031
|
const result = updateResults[0];
|
|
16016
16032
|
return {
|
|
16017
16033
|
plugin: pluginSpec,
|
|
@@ -16022,7 +16038,7 @@ async function updatePlugin(pluginSpec, deps) {
|
|
|
16022
16038
|
}
|
|
16023
16039
|
const pluginEntry = manifestResult.data.plugins.find((p) => p.name === parsed.plugin);
|
|
16024
16040
|
if (!pluginEntry) {
|
|
16025
|
-
const updateResults = await deps.updateMarketplace(
|
|
16041
|
+
const updateResults = await deps.updateMarketplace(marketplaceName);
|
|
16026
16042
|
const result = updateResults[0];
|
|
16027
16043
|
return {
|
|
16028
16044
|
plugin: pluginSpec,
|
|
@@ -16032,7 +16048,7 @@ async function updatePlugin(pluginSpec, deps) {
|
|
|
16032
16048
|
};
|
|
16033
16049
|
}
|
|
16034
16050
|
if (typeof pluginEntry.source === "string") {
|
|
16035
|
-
const updateResults = await deps.updateMarketplace(
|
|
16051
|
+
const updateResults = await deps.updateMarketplace(marketplaceName);
|
|
16036
16052
|
const result = updateResults[0];
|
|
16037
16053
|
return {
|
|
16038
16054
|
plugin: pluginSpec,
|
|
@@ -16043,7 +16059,7 @@ async function updatePlugin(pluginSpec, deps) {
|
|
|
16043
16059
|
}
|
|
16044
16060
|
const url = pluginEntry.source.url;
|
|
16045
16061
|
if (marketplace.source.type === "github") {
|
|
16046
|
-
await deps.updateMarketplace(
|
|
16062
|
+
await deps.updateMarketplace(marketplaceName);
|
|
16047
16063
|
}
|
|
16048
16064
|
const fetchResult = await fetchFn(url);
|
|
16049
16065
|
return {
|
|
@@ -21397,6 +21413,7 @@ var init_client_mapping = __esm(() => {
|
|
|
21397
21413
|
agentFile: "AGENTS.md"
|
|
21398
21414
|
},
|
|
21399
21415
|
opencode: {
|
|
21416
|
+
commandsPath: ".opencode/commands/",
|
|
21400
21417
|
skillsPath: ".agents/skills/",
|
|
21401
21418
|
agentFile: "AGENTS.md"
|
|
21402
21419
|
},
|
|
@@ -21418,6 +21435,62 @@ var init_client_mapping = __esm(() => {
|
|
|
21418
21435
|
skillsPath: ".agents/skills/",
|
|
21419
21436
|
agentFile: "AGENTS.md",
|
|
21420
21437
|
githubPath: ".github/"
|
|
21438
|
+
},
|
|
21439
|
+
openclaw: {
|
|
21440
|
+
skillsPath: "skills/",
|
|
21441
|
+
agentFile: "AGENTS.md"
|
|
21442
|
+
},
|
|
21443
|
+
windsurf: {
|
|
21444
|
+
skillsPath: ".windsurf/skills/",
|
|
21445
|
+
agentFile: "AGENTS.md"
|
|
21446
|
+
},
|
|
21447
|
+
cline: {
|
|
21448
|
+
skillsPath: ".cline/skills/",
|
|
21449
|
+
agentFile: "AGENTS.md"
|
|
21450
|
+
},
|
|
21451
|
+
continue: {
|
|
21452
|
+
skillsPath: ".continue/skills/",
|
|
21453
|
+
agentFile: "AGENTS.md"
|
|
21454
|
+
},
|
|
21455
|
+
roo: {
|
|
21456
|
+
skillsPath: ".roo/skills/",
|
|
21457
|
+
agentFile: "AGENTS.md"
|
|
21458
|
+
},
|
|
21459
|
+
kilo: {
|
|
21460
|
+
skillsPath: ".kilocode/skills/",
|
|
21461
|
+
agentFile: "AGENTS.md"
|
|
21462
|
+
},
|
|
21463
|
+
trae: {
|
|
21464
|
+
skillsPath: ".trae/skills/",
|
|
21465
|
+
agentFile: "AGENTS.md"
|
|
21466
|
+
},
|
|
21467
|
+
augment: {
|
|
21468
|
+
skillsPath: ".augment/skills/",
|
|
21469
|
+
agentFile: "AGENTS.md"
|
|
21470
|
+
},
|
|
21471
|
+
zencoder: {
|
|
21472
|
+
skillsPath: ".zencoder/skills/",
|
|
21473
|
+
agentFile: "AGENTS.md"
|
|
21474
|
+
},
|
|
21475
|
+
junie: {
|
|
21476
|
+
skillsPath: ".junie/skills/",
|
|
21477
|
+
agentFile: "AGENTS.md"
|
|
21478
|
+
},
|
|
21479
|
+
openhands: {
|
|
21480
|
+
skillsPath: ".openhands/skills/",
|
|
21481
|
+
agentFile: "AGENTS.md"
|
|
21482
|
+
},
|
|
21483
|
+
kiro: {
|
|
21484
|
+
skillsPath: ".kiro/skills/",
|
|
21485
|
+
agentFile: "AGENTS.md"
|
|
21486
|
+
},
|
|
21487
|
+
replit: {
|
|
21488
|
+
skillsPath: ".agents/skills/",
|
|
21489
|
+
agentFile: "AGENTS.md"
|
|
21490
|
+
},
|
|
21491
|
+
kimi: {
|
|
21492
|
+
skillsPath: ".agents/skills/",
|
|
21493
|
+
agentFile: "AGENTS.md"
|
|
21421
21494
|
}
|
|
21422
21495
|
};
|
|
21423
21496
|
USER_CLIENT_MAPPINGS = {
|
|
@@ -21443,6 +21516,7 @@ var init_client_mapping = __esm(() => {
|
|
|
21443
21516
|
agentFile: "AGENTS.md"
|
|
21444
21517
|
},
|
|
21445
21518
|
opencode: {
|
|
21519
|
+
commandsPath: ".opencode/commands/",
|
|
21446
21520
|
skillsPath: ".agents/skills/",
|
|
21447
21521
|
agentFile: "AGENTS.md"
|
|
21448
21522
|
},
|
|
@@ -21464,6 +21538,62 @@ var init_client_mapping = __esm(() => {
|
|
|
21464
21538
|
skillsPath: ".agents/skills/",
|
|
21465
21539
|
agentFile: "AGENTS.md",
|
|
21466
21540
|
githubPath: ".copilot/"
|
|
21541
|
+
},
|
|
21542
|
+
openclaw: {
|
|
21543
|
+
skillsPath: "skills/",
|
|
21544
|
+
agentFile: "AGENTS.md"
|
|
21545
|
+
},
|
|
21546
|
+
windsurf: {
|
|
21547
|
+
skillsPath: ".codeium/windsurf/skills/",
|
|
21548
|
+
agentFile: "AGENTS.md"
|
|
21549
|
+
},
|
|
21550
|
+
cline: {
|
|
21551
|
+
skillsPath: ".cline/skills/",
|
|
21552
|
+
agentFile: "AGENTS.md"
|
|
21553
|
+
},
|
|
21554
|
+
continue: {
|
|
21555
|
+
skillsPath: ".continue/skills/",
|
|
21556
|
+
agentFile: "AGENTS.md"
|
|
21557
|
+
},
|
|
21558
|
+
roo: {
|
|
21559
|
+
skillsPath: ".roo/skills/",
|
|
21560
|
+
agentFile: "AGENTS.md"
|
|
21561
|
+
},
|
|
21562
|
+
kilo: {
|
|
21563
|
+
skillsPath: ".kilocode/skills/",
|
|
21564
|
+
agentFile: "AGENTS.md"
|
|
21565
|
+
},
|
|
21566
|
+
trae: {
|
|
21567
|
+
skillsPath: ".trae/skills/",
|
|
21568
|
+
agentFile: "AGENTS.md"
|
|
21569
|
+
},
|
|
21570
|
+
augment: {
|
|
21571
|
+
skillsPath: ".augment/skills/",
|
|
21572
|
+
agentFile: "AGENTS.md"
|
|
21573
|
+
},
|
|
21574
|
+
zencoder: {
|
|
21575
|
+
skillsPath: ".zencoder/skills/",
|
|
21576
|
+
agentFile: "AGENTS.md"
|
|
21577
|
+
},
|
|
21578
|
+
junie: {
|
|
21579
|
+
skillsPath: ".junie/skills/",
|
|
21580
|
+
agentFile: "AGENTS.md"
|
|
21581
|
+
},
|
|
21582
|
+
openhands: {
|
|
21583
|
+
skillsPath: ".openhands/skills/",
|
|
21584
|
+
agentFile: "AGENTS.md"
|
|
21585
|
+
},
|
|
21586
|
+
kiro: {
|
|
21587
|
+
skillsPath: ".kiro/skills/",
|
|
21588
|
+
agentFile: "AGENTS.md"
|
|
21589
|
+
},
|
|
21590
|
+
replit: {
|
|
21591
|
+
skillsPath: ".agents/skills/",
|
|
21592
|
+
agentFile: "AGENTS.md"
|
|
21593
|
+
},
|
|
21594
|
+
kimi: {
|
|
21595
|
+
skillsPath: ".agents/skills/",
|
|
21596
|
+
agentFile: "AGENTS.md"
|
|
21467
21597
|
}
|
|
21468
21598
|
};
|
|
21469
21599
|
});
|
|
@@ -29472,7 +29602,7 @@ var package_default;
|
|
|
29472
29602
|
var init_package = __esm(() => {
|
|
29473
29603
|
package_default = {
|
|
29474
29604
|
name: "allagents",
|
|
29475
|
-
version: "0.
|
|
29605
|
+
version: "0.23.0",
|
|
29476
29606
|
description: "CLI tool for managing multi-repo AI agent workspaces with plugin synchronization",
|
|
29477
29607
|
type: "module",
|
|
29478
29608
|
bin: {
|
|
@@ -31601,78 +31731,25 @@ var init_init2 = __esm(() => {
|
|
|
31601
31731
|
({ text, multiselect } = exports_dist);
|
|
31602
31732
|
});
|
|
31603
31733
|
|
|
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})`);
|
|
31634
|
-
}
|
|
31635
|
-
}
|
|
31636
|
-
if (hasUserPlugins) {
|
|
31637
|
-
if (hasProjectPlugins)
|
|
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})`);
|
|
31734
|
+
// src/cli/tui/actions/plugins.ts
|
|
31735
|
+
function createUpdateDeps() {
|
|
31736
|
+
const updatedMarketplaces = new Set;
|
|
31737
|
+
return {
|
|
31738
|
+
parsePluginSpec,
|
|
31739
|
+
getMarketplace: (name, sourceLocation) => findMarketplace(name, sourceLocation),
|
|
31740
|
+
parseMarketplaceManifest,
|
|
31741
|
+
updateMarketplace: async (name) => {
|
|
31742
|
+
if (updatedMarketplaces.has(name)) {
|
|
31743
|
+
return [{ name, success: true }];
|
|
31643
31744
|
}
|
|
31644
|
-
|
|
31645
|
-
|
|
31646
|
-
|
|
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();
|
|
31745
|
+
const result = await updateMarketplace(name);
|
|
31746
|
+
if (result[0]?.success) {
|
|
31747
|
+
updatedMarketplaces.add(name);
|
|
31660
31748
|
}
|
|
31749
|
+
return result;
|
|
31661
31750
|
}
|
|
31662
|
-
}
|
|
31663
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
31664
|
-
kt2(message, "Error");
|
|
31665
|
-
}
|
|
31751
|
+
};
|
|
31666
31752
|
}
|
|
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
31753
|
async function getCachedMarketplaces(cache2) {
|
|
31677
31754
|
const cached = cache2?.getMarketplaces();
|
|
31678
31755
|
if (cached)
|
|
@@ -31690,7 +31767,7 @@ async function getCachedMarketplacePlugins(name, cache2) {
|
|
|
31690
31767
|
return result;
|
|
31691
31768
|
}
|
|
31692
31769
|
async function installSelectedPlugin(pluginRef, context, cache2) {
|
|
31693
|
-
const scopeChoice = await
|
|
31770
|
+
const scopeChoice = await select({
|
|
31694
31771
|
message: "Install scope",
|
|
31695
31772
|
options: [
|
|
31696
31773
|
{ label: "Project (this workspace)", value: "project" },
|
|
@@ -31733,6 +31810,102 @@ async function installSelectedPlugin(pluginRef, context, cache2) {
|
|
|
31733
31810
|
kt2(`Installed: ${pluginRef}`, "Success");
|
|
31734
31811
|
return true;
|
|
31735
31812
|
}
|
|
31813
|
+
async function runUpdatePlugin(pluginSource, scope, context, cache2) {
|
|
31814
|
+
const s = Ie();
|
|
31815
|
+
s.start("Updating plugin...");
|
|
31816
|
+
const result = await updatePlugin(pluginSource, createUpdateDeps());
|
|
31817
|
+
if (!result.success) {
|
|
31818
|
+
s.stop("Update failed");
|
|
31819
|
+
kt2(result.error ?? "Unknown error", "Error");
|
|
31820
|
+
return;
|
|
31821
|
+
}
|
|
31822
|
+
s.stop(result.action === "updated" ? "Plugin updated" : "Already up to date");
|
|
31823
|
+
if (result.action === "updated") {
|
|
31824
|
+
const syncS = Ie();
|
|
31825
|
+
syncS.start("Syncing...");
|
|
31826
|
+
if (scope === "project" && context.workspacePath) {
|
|
31827
|
+
await syncWorkspace(context.workspacePath);
|
|
31828
|
+
} else {
|
|
31829
|
+
await syncUserWorkspace();
|
|
31830
|
+
}
|
|
31831
|
+
syncS.stop("Sync complete");
|
|
31832
|
+
cache2?.invalidate();
|
|
31833
|
+
}
|
|
31834
|
+
const icon = result.action === "updated" ? "✓" : "-";
|
|
31835
|
+
kt2(`${icon} ${pluginSource} (${result.action})`, "Update");
|
|
31836
|
+
}
|
|
31837
|
+
async function runUpdateAllPlugins(context, cache2) {
|
|
31838
|
+
const s = Ie();
|
|
31839
|
+
s.start("Gathering plugins...");
|
|
31840
|
+
const pluginsToUpdate = [];
|
|
31841
|
+
if (context.workspacePath) {
|
|
31842
|
+
const projectPlugins = await getInstalledProjectPlugins(context.workspacePath);
|
|
31843
|
+
for (const plugin of projectPlugins) {
|
|
31844
|
+
pluginsToUpdate.push({ spec: plugin.spec, scope: "project" });
|
|
31845
|
+
}
|
|
31846
|
+
}
|
|
31847
|
+
const userPlugins = await getInstalledUserPlugins();
|
|
31848
|
+
for (const plugin of userPlugins) {
|
|
31849
|
+
if (!pluginsToUpdate.some((existing) => existing.spec === plugin.spec)) {
|
|
31850
|
+
pluginsToUpdate.push({ spec: plugin.spec, scope: "user" });
|
|
31851
|
+
}
|
|
31852
|
+
}
|
|
31853
|
+
if (pluginsToUpdate.length === 0) {
|
|
31854
|
+
s.stop("No plugins to update");
|
|
31855
|
+
return;
|
|
31856
|
+
}
|
|
31857
|
+
s.stop(`Found ${pluginsToUpdate.length} plugin(s)`);
|
|
31858
|
+
const deps = createUpdateDeps();
|
|
31859
|
+
const updateS = Ie();
|
|
31860
|
+
updateS.start("Updating plugins...");
|
|
31861
|
+
const results = [];
|
|
31862
|
+
let needsProjectSync = false;
|
|
31863
|
+
let needsUserSync = false;
|
|
31864
|
+
for (const { spec, scope } of pluginsToUpdate) {
|
|
31865
|
+
const result = await updatePlugin(spec, deps);
|
|
31866
|
+
const entry = {
|
|
31867
|
+
plugin: spec,
|
|
31868
|
+
action: result.action
|
|
31869
|
+
};
|
|
31870
|
+
if (result.error) {
|
|
31871
|
+
entry.error = result.error;
|
|
31872
|
+
}
|
|
31873
|
+
results.push(entry);
|
|
31874
|
+
if (result.action === "updated") {
|
|
31875
|
+
if (scope === "project")
|
|
31876
|
+
needsProjectSync = true;
|
|
31877
|
+
else
|
|
31878
|
+
needsUserSync = true;
|
|
31879
|
+
}
|
|
31880
|
+
}
|
|
31881
|
+
updateS.stop("Update complete");
|
|
31882
|
+
if (needsProjectSync && context.workspacePath) {
|
|
31883
|
+
const syncS = Ie();
|
|
31884
|
+
syncS.start("Syncing project...");
|
|
31885
|
+
await syncWorkspace(context.workspacePath);
|
|
31886
|
+
syncS.stop("Project sync complete");
|
|
31887
|
+
}
|
|
31888
|
+
if (needsUserSync) {
|
|
31889
|
+
const syncS = Ie();
|
|
31890
|
+
syncS.start("Syncing user...");
|
|
31891
|
+
await syncUserWorkspace();
|
|
31892
|
+
syncS.stop("User sync complete");
|
|
31893
|
+
}
|
|
31894
|
+
if (needsProjectSync || needsUserSync) {
|
|
31895
|
+
cache2?.invalidate();
|
|
31896
|
+
}
|
|
31897
|
+
const updated = results.filter((r) => r.action === "updated").length;
|
|
31898
|
+
const skipped = results.filter((r) => r.action === "skipped").length;
|
|
31899
|
+
const failed = results.filter((r) => r.action === "failed").length;
|
|
31900
|
+
const lines = results.map((r) => {
|
|
31901
|
+
const icon = r.action === "updated" ? "✓" : r.action === "skipped" ? "-" : "✗";
|
|
31902
|
+
return `${icon} ${r.plugin} (${r.action})${r.error ? ` - ${r.error}` : ""}`;
|
|
31903
|
+
});
|
|
31904
|
+
lines.push("");
|
|
31905
|
+
lines.push(`Updated: ${updated} Skipped: ${skipped} Failed: ${failed}`);
|
|
31906
|
+
kt2(lines.join(`
|
|
31907
|
+
`), "Update Results");
|
|
31908
|
+
}
|
|
31736
31909
|
async function runPlugins(context, cache2) {
|
|
31737
31910
|
try {
|
|
31738
31911
|
while (true) {
|
|
@@ -31744,6 +31917,10 @@ async function runPlugins(context, cache2) {
|
|
|
31744
31917
|
status = await getWorkspaceStatus(context.workspacePath ?? undefined);
|
|
31745
31918
|
cache2?.setStatus(status);
|
|
31746
31919
|
}
|
|
31920
|
+
const hasPlugins = status.success && ((status.plugins?.length ?? 0) > 0 || (status.userPlugins?.length ?? 0) > 0);
|
|
31921
|
+
if (hasPlugins) {
|
|
31922
|
+
options2.push({ label: "Update all", value: "__update_all__" });
|
|
31923
|
+
}
|
|
31747
31924
|
if (status.success) {
|
|
31748
31925
|
for (const plugin of status.plugins) {
|
|
31749
31926
|
const key = `project:${plugin.source}`;
|
|
@@ -31761,7 +31938,7 @@ async function runPlugins(context, cache2) {
|
|
|
31761
31938
|
}
|
|
31762
31939
|
}
|
|
31763
31940
|
options2.push({ label: "Back", value: "__back__" });
|
|
31764
|
-
const selected = await
|
|
31941
|
+
const selected = await select({
|
|
31765
31942
|
message: "Plugins",
|
|
31766
31943
|
options: options2
|
|
31767
31944
|
});
|
|
@@ -31772,6 +31949,10 @@ async function runPlugins(context, cache2) {
|
|
|
31772
31949
|
await runInstallPlugin(context, cache2);
|
|
31773
31950
|
continue;
|
|
31774
31951
|
}
|
|
31952
|
+
if (selected === "__update_all__") {
|
|
31953
|
+
await runUpdateAllPlugins(context, cache2);
|
|
31954
|
+
continue;
|
|
31955
|
+
}
|
|
31775
31956
|
await runPluginDetail(selected, context, cache2);
|
|
31776
31957
|
}
|
|
31777
31958
|
} catch (error) {
|
|
@@ -31783,10 +31964,11 @@ async function runPluginDetail(pluginKey, context, cache2) {
|
|
|
31783
31964
|
const scope = pluginKey.startsWith("project:") ? "project" : "user";
|
|
31784
31965
|
const pluginSource = pluginKey.replace(/^(project|user):/, "");
|
|
31785
31966
|
while (true) {
|
|
31786
|
-
const action = await
|
|
31967
|
+
const action = await select({
|
|
31787
31968
|
message: `Plugin: ${pluginSource} [${scope}]`,
|
|
31788
31969
|
options: [
|
|
31789
31970
|
{ label: "Browse skills", value: "browse" },
|
|
31971
|
+
{ label: "Update", value: "update" },
|
|
31790
31972
|
{ label: "Remove", value: "remove" },
|
|
31791
31973
|
{ label: "Back", value: "back" }
|
|
31792
31974
|
]
|
|
@@ -31798,6 +31980,10 @@ async function runPluginDetail(pluginKey, context, cache2) {
|
|
|
31798
31980
|
await runBrowsePluginSkills(pluginSource, scope, context, cache2);
|
|
31799
31981
|
continue;
|
|
31800
31982
|
}
|
|
31983
|
+
if (action === "update") {
|
|
31984
|
+
await runUpdatePlugin(pluginSource, scope, context, cache2);
|
|
31985
|
+
continue;
|
|
31986
|
+
}
|
|
31801
31987
|
if (action === "remove") {
|
|
31802
31988
|
const confirmed = await confirm({
|
|
31803
31989
|
message: `Remove plugin "${pluginSource}"?`
|
|
@@ -31934,7 +32120,7 @@ Use "Manage marketplaces" to add one first.`, "Marketplace");
|
|
|
31934
32120
|
return;
|
|
31935
32121
|
}
|
|
31936
32122
|
allPlugins.push({ label: "Back", value: "__back__" });
|
|
31937
|
-
const selected = await
|
|
32123
|
+
const selected = await select({
|
|
31938
32124
|
message: "Select a plugin to install",
|
|
31939
32125
|
options: allPlugins
|
|
31940
32126
|
});
|
|
@@ -31959,7 +32145,7 @@ async function runBrowseMarketplaces(context, cache2) {
|
|
|
31959
32145
|
})),
|
|
31960
32146
|
{ label: "Back", value: "__back__" }
|
|
31961
32147
|
];
|
|
31962
|
-
const selected = await
|
|
32148
|
+
const selected = await select({
|
|
31963
32149
|
message: "Marketplaces",
|
|
31964
32150
|
options: options2
|
|
31965
32151
|
});
|
|
@@ -31994,7 +32180,7 @@ async function runBrowseMarketplaces(context, cache2) {
|
|
|
31994
32180
|
}
|
|
31995
32181
|
async function runMarketplaceDetail(marketplaceName, context, cache2) {
|
|
31996
32182
|
while (true) {
|
|
31997
|
-
const action = await
|
|
32183
|
+
const action = await select({
|
|
31998
32184
|
message: `Marketplace: ${marketplaceName}`,
|
|
31999
32185
|
options: [
|
|
32000
32186
|
{ label: "Browse plugins", value: "browse" },
|
|
@@ -32018,7 +32204,7 @@ async function runMarketplaceDetail(marketplaceName, context, cache2) {
|
|
|
32018
32204
|
return { label, value: plugin.name };
|
|
32019
32205
|
});
|
|
32020
32206
|
pluginOptions.push({ label: "Back", value: "__back__" });
|
|
32021
|
-
const selectedPlugin = await
|
|
32207
|
+
const selectedPlugin = await select({
|
|
32022
32208
|
message: "Select a plugin to install",
|
|
32023
32209
|
options: pluginOptions
|
|
32024
32210
|
});
|
|
@@ -32074,17 +32260,102 @@ async function runMarketplaceDetail(marketplaceName, context, cache2) {
|
|
|
32074
32260
|
}
|
|
32075
32261
|
}
|
|
32076
32262
|
}
|
|
32077
|
-
var
|
|
32263
|
+
var select, text2, confirm, multiselect2;
|
|
32078
32264
|
var init_plugins = __esm(() => {
|
|
32079
32265
|
init_dist2();
|
|
32080
32266
|
init_workspace_modify();
|
|
32081
32267
|
init_user_workspace();
|
|
32082
32268
|
init_sync();
|
|
32083
32269
|
init_marketplace();
|
|
32270
|
+
init_plugin();
|
|
32271
|
+
init_marketplace_manifest_parser();
|
|
32084
32272
|
init_status2();
|
|
32085
32273
|
init_skills();
|
|
32086
32274
|
init_constants();
|
|
32087
|
-
({ select
|
|
32275
|
+
({ select, text: text2, confirm, multiselect: multiselect2 } = exports_dist);
|
|
32276
|
+
});
|
|
32277
|
+
|
|
32278
|
+
// src/cli/tui/actions/status.ts
|
|
32279
|
+
async function runStatus(context, cache2) {
|
|
32280
|
+
try {
|
|
32281
|
+
let status = cache2?.getStatus();
|
|
32282
|
+
if (!status) {
|
|
32283
|
+
status = await getWorkspaceStatus(context.workspacePath ?? undefined);
|
|
32284
|
+
cache2?.setStatus(status);
|
|
32285
|
+
}
|
|
32286
|
+
if (!status.success) {
|
|
32287
|
+
kt2(status.error ?? "Unknown error", "Status Error");
|
|
32288
|
+
return;
|
|
32289
|
+
}
|
|
32290
|
+
const lines = [];
|
|
32291
|
+
if (context.hasWorkspace) {
|
|
32292
|
+
lines.push(`Workspace: ${context.workspacePath}`);
|
|
32293
|
+
} else {
|
|
32294
|
+
lines.push("No workspace detected");
|
|
32295
|
+
}
|
|
32296
|
+
lines.push("");
|
|
32297
|
+
const userPlugins = status.userPlugins ?? [];
|
|
32298
|
+
const hasProjectPlugins = status.plugins.length > 0;
|
|
32299
|
+
const hasUserPlugins = userPlugins.length > 0;
|
|
32300
|
+
if (!hasProjectPlugins && !hasUserPlugins) {
|
|
32301
|
+
lines.push("No plugins configured");
|
|
32302
|
+
}
|
|
32303
|
+
if (hasProjectPlugins) {
|
|
32304
|
+
lines.push("Project plugins:");
|
|
32305
|
+
for (const plugin of status.plugins) {
|
|
32306
|
+
const icon = plugin.available ? "✓" : "✗";
|
|
32307
|
+
lines.push(` ${icon} ${plugin.source} (${plugin.type})`);
|
|
32308
|
+
}
|
|
32309
|
+
}
|
|
32310
|
+
if (hasUserPlugins) {
|
|
32311
|
+
if (hasProjectPlugins)
|
|
32312
|
+
lines.push("");
|
|
32313
|
+
lines.push("User plugins:");
|
|
32314
|
+
for (const plugin of userPlugins) {
|
|
32315
|
+
const icon = plugin.available ? "✓" : "✗";
|
|
32316
|
+
lines.push(` ${icon} ${plugin.source} (${plugin.type})`);
|
|
32317
|
+
}
|
|
32318
|
+
}
|
|
32319
|
+
lines.push("");
|
|
32320
|
+
lines.push(`Clients: ${status.clients.length > 0 ? status.clients.join(", ") : "none"}`);
|
|
32321
|
+
kt2(lines.join(`
|
|
32322
|
+
`), "Status");
|
|
32323
|
+
const hasPlugins = context.projectPluginCount > 0 || context.userPluginCount > 0;
|
|
32324
|
+
const options2 = [];
|
|
32325
|
+
if (hasPlugins) {
|
|
32326
|
+
options2.push({ label: "Update all", value: "update_all" });
|
|
32327
|
+
}
|
|
32328
|
+
if (context.hasWorkspace) {
|
|
32329
|
+
options2.push({ label: "Add workspace", value: "init", hint: "in subdirectory" });
|
|
32330
|
+
} else {
|
|
32331
|
+
options2.push({ label: "Add workspace", value: "init" });
|
|
32332
|
+
}
|
|
32333
|
+
options2.push({ label: "Back", value: "back" });
|
|
32334
|
+
const action = await select2({
|
|
32335
|
+
message: "Options",
|
|
32336
|
+
options: options2
|
|
32337
|
+
});
|
|
32338
|
+
if (Ct(action) || action === "back") {
|
|
32339
|
+
return;
|
|
32340
|
+
}
|
|
32341
|
+
if (action === "update_all") {
|
|
32342
|
+
await runUpdateAllPlugins(context, cache2);
|
|
32343
|
+
} else if (action === "init") {
|
|
32344
|
+
await runInit();
|
|
32345
|
+
cache2?.invalidate();
|
|
32346
|
+
}
|
|
32347
|
+
} catch (error) {
|
|
32348
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
32349
|
+
kt2(message, "Error");
|
|
32350
|
+
}
|
|
32351
|
+
}
|
|
32352
|
+
var select2;
|
|
32353
|
+
var init_status3 = __esm(() => {
|
|
32354
|
+
init_dist2();
|
|
32355
|
+
init_status2();
|
|
32356
|
+
init_init2();
|
|
32357
|
+
init_plugins();
|
|
32358
|
+
({ select: select2 } = exports_dist);
|
|
32088
32359
|
});
|
|
32089
32360
|
|
|
32090
32361
|
// src/cli/tui/actions/clients.ts
|
|
@@ -34587,7 +34858,7 @@ var pluginUpdateCmd = import_cmd_ts4.command({
|
|
|
34587
34858
|
const updatedMarketplaces = new Set;
|
|
34588
34859
|
const deps = {
|
|
34589
34860
|
parsePluginSpec,
|
|
34590
|
-
getMarketplace,
|
|
34861
|
+
getMarketplace: (name, sourceLocation) => findMarketplace(name, sourceLocation),
|
|
34591
34862
|
parseMarketplaceManifest,
|
|
34592
34863
|
updateMarketplace: async (name) => {
|
|
34593
34864
|
if (updatedMarketplaces.has(name)) {
|