agents-united 0.5.0 â 0.6.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 +8 -4
- package/dist/cli.js +159 -72
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ Curated teams of orchestrators, sub-agents, skills, and workflows â installed
|
|
|
17
17
|
|
|
18
18
|
- **ðŠķ Essentials-First & On-Demand Growth**: Every department installs as a lean **Essentials bundle** by default. When a task requires specialized capabilities, the Lead Orchestrator automatically detects the gap, recommends the exact addon, and can auto-install it directly into your project scope.
|
|
19
19
|
- **ð One Library, Every Assistant**: Author in `.agents/` as your single source of truth. Agents United automatically projects and translates compatible configurations to **Google Antigravity 2.0 / Gemini**, **Anthropic Claude Code**, **Cursor**, **Cline**, **OpenCode**, and **Codex / AGENTS.md**.
|
|
20
|
-
- **ð Cline Native Activation**:
|
|
20
|
+
- **ð Cline Native Activation**: Bundles activate **automatically** in any Cline CLI session â skills discovered natively from `.agents/skills/`, configured-agent roles (`.cline/agents/*.yml`) exposed as spawnable `subagent_*` tools, coordinator rules (`.cline/rules/`), slash-command workflows (`.cline/workflows/`), and spec-conformant Agent Plugin packages (`plugin.json`, agent-plugins.org) in `.agents/plugins/<bundle>/`. No install step required; `agents start` remains available as an optional pre-seeded team-session launcher.
|
|
21
21
|
- **ðïļ 8 Department Domains & 26 Bundles**: Complete coverage across Software Engineering, System Architecture, Product Design, Growth & Marketing, Security, Deep Research, Business Strategy, and Universal Meta-Skills.
|
|
22
22
|
- **ðĪ 58 Specialized Agents, 91 Skills & 69 Workflows**: 8 Lead Orchestrators coordinating 50 domain sub-agents, backed by 91 production-grade runbooks and 69 deterministic workflows.
|
|
23
23
|
- **⥠Modern Cloud & AI Tooling**: First-class runbooks for Modal.com, Replicate, RunPod, local LLMs/vLLM, LangChain, LlamaIndex, Qdrant, Vercel, Supabase, Turso, and Azure Bicep.
|
|
@@ -297,9 +297,13 @@ agents remove mobile-development -g -y
|
|
|
297
297
|
---
|
|
298
298
|
|
|
299
299
|
### `agents start <bundle> [prompt]`
|
|
300
|
-
|
|
300
|
+
Launches an **optional pre-seeded team session** in the Cline CLI. Activation itself is automatic (ADR 0013 native discovery): after `agents add`, *any* `cline` session in the workspace already sees the bundle's skills, `subagent_*` agent tools, rules, and workflow commands. What `agents start` adds on top:
|
|
301
301
|
|
|
302
|
-
|
|
302
|
+
1. **Coordinator persona bootstrap** â the session starts *as* the bundle's Lead Orchestrator (reads the Team Manifest and coordinator role prompt).
|
|
303
|
+
2. **Persistent team state** â `--team-name au-<bundle>-<hash>` gives a resumable team board (`~/.cline/data/teams/`).
|
|
304
|
+
3. **Addon pre-authorization** â `--allow-addons` skips per-addon consent prompts for the session.
|
|
305
|
+
|
|
306
|
+
**By design, this command currently targets the Cline CLI** because Cline provides an open, programmatic CLI (`cline "prompt"`) that allows us to inject a team context directly from the terminal (unlike other editors which do not yet expose this). It automatically resolves project vs. global installations, probes for the `cline` executable on your system (Windows node-wrapper, `cmd.exe` shim bridge, or POSIX binary), constructs safe non-shell evaluated arguments, and launches the session.
|
|
303
307
|
|
|
304
308
|
```bash
|
|
305
309
|
# Start an installed team in Cline
|
|
@@ -363,7 +367,7 @@ Audits workspace agent directories, verifies frontmatter schema validity, valida
|
|
|
363
367
|
# General workspace health audit
|
|
364
368
|
agents doctor
|
|
365
369
|
|
|
366
|
-
# Audit Cline runtime installation, capability probe, and
|
|
370
|
+
# Audit Cline runtime installation, capability probe, and native discovery projection integrity
|
|
367
371
|
agents doctor --host cline
|
|
368
372
|
```
|
|
369
373
|
|
package/dist/cli.js
CHANGED
|
@@ -342,47 +342,115 @@ import path4 from "path";
|
|
|
342
342
|
import fs2 from "fs-extra";
|
|
343
343
|
var ClineProjector = class {
|
|
344
344
|
/**
|
|
345
|
-
*
|
|
345
|
+
* Managed marker inserted after YAML frontmatter in every rendered artifact.
|
|
346
346
|
*/
|
|
347
|
-
static
|
|
347
|
+
static marker(canonicalRelPath) {
|
|
348
348
|
const normCanonical = canonicalRelPath.replace(/\\/g, "/");
|
|
349
|
-
|
|
350
|
-
|
|
349
|
+
return `<!-- managed-by: agents-united | profile: cline | canonical: ${normCanonical} | do not edit -->`;
|
|
350
|
+
}
|
|
351
|
+
static runtimeNote = `## Cline runtime note
|
|
351
352
|
|
|
352
353
|
Use the equivalent capabilities available in this Cline session. Canonical tool names describe
|
|
353
|
-
intent and may differ from Cline's runtime tool names. For delegation, prefer
|
|
354
|
-
|
|
354
|
+
intent and may differ from Cline's runtime tool names. For delegation, prefer the configured
|
|
355
|
+
subagent_* agent tools (projected under .cline/agents/), then session subagents; otherwise
|
|
356
|
+
complete the role in the main session.`;
|
|
357
|
+
/**
|
|
358
|
+
* Strip the canonical `subagent-` prefix. Cline prefixes configured-agent tool
|
|
359
|
+
* names with `subagent_` itself, so keeping the prefix would produce names like
|
|
360
|
+
* `subagent_subagent_marketing_growth_strategist`.
|
|
361
|
+
*/
|
|
362
|
+
static stripSubagentPrefix(name) {
|
|
363
|
+
return name.trim().replace(/^subagent-/, "");
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Slugify a workflow display name into a usable slash-command name
|
|
367
|
+
* (e.g. "Digital Agency Full-Funnel Campaign Orchestration" -> "digital-agency-full-funnel-campaign-orchestration").
|
|
368
|
+
*/
|
|
369
|
+
static slugifyWorkflowName(name) {
|
|
370
|
+
return name.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Render a Cline Configured Agent definition (.cline/agents/<role>.yml) from
|
|
374
|
+
* canonical agent markdown content. Cline 3.x consumes YAML files with
|
|
375
|
+
* frontmatter (name, description) and treats the body as the agent system prompt.
|
|
376
|
+
*/
|
|
377
|
+
static renderConfiguredAgent(canonicalContent, canonicalRelPath) {
|
|
355
378
|
const match = canonicalContent.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)$/);
|
|
356
379
|
if (!match) {
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
${preamble}
|
|
360
|
-
|
|
361
|
-
${canonicalContent.trim()}`;
|
|
380
|
+
throw new Error(`Canonical agent ${canonicalRelPath} is missing YAML frontmatter.`);
|
|
362
381
|
}
|
|
363
|
-
const rawYaml = match[1];
|
|
364
|
-
const rawBody = match[2];
|
|
365
382
|
let parsed = {};
|
|
366
383
|
try {
|
|
367
|
-
parsed = yaml.parse(
|
|
384
|
+
parsed = yaml.parse(match[1]) || {};
|
|
368
385
|
} catch {
|
|
369
386
|
parsed = {};
|
|
370
387
|
}
|
|
371
|
-
const
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
if (parsed.
|
|
377
|
-
|
|
388
|
+
const baseName = canonicalRelPath.replace(/\\/g, "/").split("/").pop() ?? "";
|
|
389
|
+
const rawName = typeof parsed.name === "string" && parsed.name.trim().length > 0 ? parsed.name.trim() : baseName.replace(/\.md$/i, "");
|
|
390
|
+
const cleanFrontmatter = {
|
|
391
|
+
name: this.stripSubagentPrefix(rawName)
|
|
392
|
+
};
|
|
393
|
+
if (typeof parsed.description === "string" && parsed.description.trim().length > 0) {
|
|
394
|
+
cleanFrontmatter.description = parsed.description.trim();
|
|
395
|
+
}
|
|
378
396
|
const frontmatterStr = yaml.stringify(cleanFrontmatter).trim();
|
|
379
|
-
const bodyStr =
|
|
397
|
+
const bodyStr = match[2].trim();
|
|
380
398
|
return `---
|
|
381
399
|
${frontmatterStr}
|
|
382
400
|
---
|
|
383
|
-
${marker}
|
|
401
|
+
${this.marker(canonicalRelPath)}
|
|
402
|
+
|
|
403
|
+
${this.runtimeNote}
|
|
384
404
|
|
|
385
|
-
${
|
|
405
|
+
${bodyStr}
|
|
406
|
+
`;
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Derive the slash-command slug for a workflow from its frontmatter name,
|
|
410
|
+
* falling back to the canonical filename. Kept separate from the renderer so the
|
|
411
|
+
* projection filename and the frontmatter `name` are guaranteed to match.
|
|
412
|
+
*/
|
|
413
|
+
static workflowSlug(canonicalContent, canonicalRelPath) {
|
|
414
|
+
const match = canonicalContent.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)$/);
|
|
415
|
+
let humanName;
|
|
416
|
+
if (match) {
|
|
417
|
+
try {
|
|
418
|
+
const parsed = yaml.parse(match[1]) || {};
|
|
419
|
+
if (typeof parsed.name === "string" && parsed.name.trim().length > 0) {
|
|
420
|
+
humanName = parsed.name.trim();
|
|
421
|
+
}
|
|
422
|
+
} catch {
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
const baseName = canonicalRelPath.replace(/\\/g, "/").split("/").pop() ?? "";
|
|
426
|
+
return this.slugifyWorkflowName(humanName ?? baseName.replace(/\.md$/i, ""));
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Render a Cline workflow projection (.cline/workflows/<slug>.md). The frontmatter
|
|
430
|
+
* `name` is slugified so the workflow surfaces as a usable /<slug> command; the
|
|
431
|
+
* human-readable title stays in `description` and the untouched body.
|
|
432
|
+
*/
|
|
433
|
+
static renderWorkflowProjection(canonicalContent, canonicalRelPath) {
|
|
434
|
+
const slug = this.workflowSlug(canonicalContent, canonicalRelPath);
|
|
435
|
+
const match = canonicalContent.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)$/);
|
|
436
|
+
let description;
|
|
437
|
+
if (match) {
|
|
438
|
+
try {
|
|
439
|
+
const parsed = yaml.parse(match[1]) || {};
|
|
440
|
+
if (typeof parsed.description === "string" && parsed.description.trim().length > 0) {
|
|
441
|
+
description = parsed.description.trim();
|
|
442
|
+
}
|
|
443
|
+
} catch {
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
const cleanFrontmatter = { name: slug };
|
|
447
|
+
if (description) cleanFrontmatter.description = description;
|
|
448
|
+
const frontmatterStr = yaml.stringify(cleanFrontmatter).trim();
|
|
449
|
+
const bodyStr = match ? match[2].trim() : canonicalContent.trim();
|
|
450
|
+
return `---
|
|
451
|
+
${frontmatterStr}
|
|
452
|
+
---
|
|
453
|
+
${this.marker(canonicalRelPath)}
|
|
386
454
|
|
|
387
455
|
${bodyStr}
|
|
388
456
|
`;
|
|
@@ -480,7 +548,7 @@ ${marker}
|
|
|
480
548
|
|
|
481
549
|
## Activation Protocol
|
|
482
550
|
1. At session start, read the Team Manifest (\`${manifestRelPath}\`) and coordinator role prompt (\`.agents/${coordinatorCanonical}\`).
|
|
483
|
-
2. Delegate specialist tasks using
|
|
551
|
+
2. Delegate specialist tasks using the configured \`subagent_*\` agent tools (projected under \`.cline/agents/\`) when available, assigning non-overlapping scopes; fall back to Agent Teams (\`team_spawn_teammate\`) or session subagents as needed.
|
|
484
552
|
3. For lightweight read-only research, use session subagents.
|
|
485
553
|
4. Only specialist roles declared in the Team Manifest are active in this workspace.
|
|
486
554
|
${specialistLines.length > 0 ? `
|
|
@@ -497,23 +565,16 @@ ${addonSection}
|
|
|
497
565
|
static async planCompoundProjection(bundle, scope, resolved, registryDir, excludeAddons = []) {
|
|
498
566
|
const artifacts = [];
|
|
499
567
|
const baseDir = `.agents/plugins/${bundle.name}`;
|
|
500
|
-
const
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
plugins: [
|
|
506
|
-
{
|
|
507
|
-
capabilities: ["skills", "tools", "workflows"],
|
|
508
|
-
skills: ["./skills"]
|
|
509
|
-
}
|
|
510
|
-
]
|
|
511
|
-
}
|
|
568
|
+
const agentPluginManifest = {
|
|
569
|
+
$schema: "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
|
|
570
|
+
name: bundle.name,
|
|
571
|
+
version: bundle.version || "1.0.0",
|
|
572
|
+
description: bundle.description || ""
|
|
512
573
|
};
|
|
513
574
|
artifacts.push({
|
|
514
575
|
kind: "plugin-manifest",
|
|
515
|
-
relPath: `${baseDir}/
|
|
516
|
-
content: JSON.stringify(
|
|
576
|
+
relPath: `${baseDir}/plugin.json`.replace(/\\/g, "/"),
|
|
577
|
+
content: JSON.stringify(agentPluginManifest, null, 2),
|
|
517
578
|
managedMarker: false
|
|
518
579
|
});
|
|
519
580
|
for (const agentFile of resolved.agents) {
|
|
@@ -521,11 +582,12 @@ ${addonSection}
|
|
|
521
582
|
const srcPath = path4.join(registryDir, "agents", agentFile);
|
|
522
583
|
if (await fs2.pathExists(srcPath)) {
|
|
523
584
|
const content = await fs2.readFile(srcPath, "utf8");
|
|
524
|
-
const rendered = this.
|
|
585
|
+
const rendered = this.renderConfiguredAgent(content, canonicalRel);
|
|
586
|
+
const roleName = this.stripSubagentPrefix(agentFile.replace(/\.md$/i, ""));
|
|
525
587
|
artifacts.push({
|
|
526
588
|
kind: "role",
|
|
527
589
|
canonical: canonicalRel,
|
|
528
|
-
relPath:
|
|
590
|
+
relPath: `.cline/agents/${roleName}.yml`.replace(/\\/g, "/"),
|
|
529
591
|
content: rendered,
|
|
530
592
|
managedMarker: true
|
|
531
593
|
});
|
|
@@ -564,10 +626,26 @@ ${addonSection}
|
|
|
564
626
|
}
|
|
565
627
|
}
|
|
566
628
|
}
|
|
629
|
+
for (const workflowFile of resolved.workflows) {
|
|
630
|
+
const canonicalRel = `workflows/${workflowFile}`;
|
|
631
|
+
const srcPath = path4.join(registryDir, "workflows", workflowFile);
|
|
632
|
+
if (await fs2.pathExists(srcPath)) {
|
|
633
|
+
const content = await fs2.readFile(srcPath, "utf8");
|
|
634
|
+
const slug = this.workflowSlug(content, canonicalRel);
|
|
635
|
+
const rendered = this.renderWorkflowProjection(content, canonicalRel);
|
|
636
|
+
artifacts.push({
|
|
637
|
+
kind: "workflow",
|
|
638
|
+
canonical: canonicalRel,
|
|
639
|
+
relPath: `.cline/workflows/${slug}.md`.replace(/\\/g, "/"),
|
|
640
|
+
content: rendered,
|
|
641
|
+
managedMarker: true
|
|
642
|
+
});
|
|
643
|
+
}
|
|
644
|
+
}
|
|
567
645
|
const ruleContent = this.renderCoordinatorRule(bundle, scope, excludeAddons);
|
|
568
646
|
artifacts.push({
|
|
569
647
|
kind: "rule",
|
|
570
|
-
relPath:
|
|
648
|
+
relPath: `.cline/rules/agents-united-${bundle.name}.md`.replace(/\\/g, "/"),
|
|
571
649
|
content: ruleContent,
|
|
572
650
|
managedMarker: true
|
|
573
651
|
});
|
|
@@ -675,7 +753,7 @@ var HostProjector = class _HostProjector {
|
|
|
675
753
|
return { content: content2, warnings };
|
|
676
754
|
}
|
|
677
755
|
if (profile === "cline") {
|
|
678
|
-
const content2 = ClineProjector.
|
|
756
|
+
const content2 = ClineProjector.renderConfiguredAgent(md, canonicalRelPath);
|
|
679
757
|
return { content: content2, warnings };
|
|
680
758
|
}
|
|
681
759
|
const out = {};
|
|
@@ -1014,21 +1092,6 @@ var InstallEngine = class _InstallEngine {
|
|
|
1014
1092
|
}
|
|
1015
1093
|
}
|
|
1016
1094
|
}
|
|
1017
|
-
if (lockfile.files) {
|
|
1018
|
-
for (const [canonKey, fileMeta] of Object.entries(lockfile.files)) {
|
|
1019
|
-
if (fileMeta.projectedTo) {
|
|
1020
|
-
const staleClinePaths = fileMeta.projectedTo.filter((p) => p.startsWith(".cline/"));
|
|
1021
|
-
for (const stalePath of staleClinePaths) {
|
|
1022
|
-
const absPath = path5.join(root, stalePath);
|
|
1023
|
-
if (await fs3.pathExists(absPath)) {
|
|
1024
|
-
await fs3.remove(absPath);
|
|
1025
|
-
await this.removeEmptyProjectionDirs(root, stalePath);
|
|
1026
|
-
}
|
|
1027
|
-
this.removeProjectedTo(lockfile, canonKey, stalePath);
|
|
1028
|
-
}
|
|
1029
|
-
}
|
|
1030
|
-
}
|
|
1031
|
-
}
|
|
1032
1095
|
for (const artifact of artifacts) {
|
|
1033
1096
|
const dest = path5.join(root, artifact.relPath);
|
|
1034
1097
|
if (await fs3.pathExists(dest) && !options.force) {
|
|
@@ -1116,7 +1179,8 @@ var InstallEngine = class _InstallEngine {
|
|
|
1116
1179
|
const content = await fs3.readFile(path5.join(registryDir, "agents", agentFile), "utf8");
|
|
1117
1180
|
const canonicalRel = this.canonicalRelAgent(agentFile);
|
|
1118
1181
|
const res = HostProjector.projectAgent(content, HOST_REGISTRY[host].profile, canonicalRel);
|
|
1119
|
-
const
|
|
1182
|
+
const projName = host === "cline" ? `${agentFile.replace(/\.md$/i, "").replace(/^subagent-/, "")}.yml` : agentFile;
|
|
1183
|
+
const dest = path5.join(base, subdir, projName);
|
|
1120
1184
|
if (await fs3.pathExists(dest) && !options.force) {
|
|
1121
1185
|
const existing = await fs3.readFile(dest, "utf8");
|
|
1122
1186
|
if (!HostProjector.hasManagedMarker(existing)) {
|
|
@@ -2030,6 +2094,14 @@ var ClineCapabilityProbe = class {
|
|
|
2030
2094
|
source: "node-wrapper"
|
|
2031
2095
|
};
|
|
2032
2096
|
}
|
|
2097
|
+
const ext = path9.extname(fullPath).toLowerCase();
|
|
2098
|
+
if (ext === ".cmd" || ext === ".bat") {
|
|
2099
|
+
return {
|
|
2100
|
+
executable: "cmd.exe",
|
|
2101
|
+
prefixArgs: ["/c", fullPath],
|
|
2102
|
+
source: "path-executable"
|
|
2103
|
+
};
|
|
2104
|
+
}
|
|
2033
2105
|
return {
|
|
2034
2106
|
executable: fullPath,
|
|
2035
2107
|
prefixArgs: [],
|
|
@@ -2202,7 +2274,7 @@ var DoctorEngine = class {
|
|
|
2202
2274
|
for (const [projRelPath, proj] of Object.entries(manifest.projections)) {
|
|
2203
2275
|
const absPath = path10.join(workspaceRoot, projRelPath);
|
|
2204
2276
|
if (!await fs8.pathExists(absPath)) {
|
|
2205
|
-
warnings.push(`Missing
|
|
2277
|
+
warnings.push(`Missing Cline projection ${projRelPath} (owners: ${proj.owners.join(", ")}).`);
|
|
2206
2278
|
continue;
|
|
2207
2279
|
}
|
|
2208
2280
|
if (proj.managedMarker) {
|
|
@@ -2373,14 +2445,14 @@ var ClineLauncher = class _ClineLauncher {
|
|
|
2373
2445
|
const coordinatorFile = (orchestrator || "orchestrator-engineering.md").replace(/\.md$/, "");
|
|
2374
2446
|
const coordinatorCanonical = `.agents/agents/${coordinatorFile}.md`;
|
|
2375
2447
|
const addonPolicyText = allowAddons ? "Addon auto-installation is pre-authorized for this session." : `Before installing any recommended addon, explain the requirement to the user and request explicit confirmation to run: agents add <addon> -t cline ${scope === "global" ? "-g " : ""}-y.`;
|
|
2376
|
-
const
|
|
2448
|
+
const deploymentNoteText = `Deployment note: this bundle is already projected natively for this workspace (skills, rules, workflows, and configured subagent roles) - no "cline plugin install" step is needed.`;
|
|
2377
2449
|
const taskText = prompt && prompt.trim().length > 0 ? `User task: ${prompt.trim()}` : "Please introduce your coordinator role to the user and ask for their first task.";
|
|
2378
2450
|
const bootstrapPrompt = [
|
|
2379
2451
|
`You are coordinating the "${bundleName}" team in Agents United.`,
|
|
2380
2452
|
`Read the Team Manifest at "${manifestRel}" and your coordinator role definition at "${coordinatorCanonical}" before acting.`,
|
|
2381
2453
|
`Use specialist roles only when necessary.`,
|
|
2382
2454
|
addonPolicyText,
|
|
2383
|
-
|
|
2455
|
+
deploymentNoteText,
|
|
2384
2456
|
taskText
|
|
2385
2457
|
].join("\n\n");
|
|
2386
2458
|
const argv = [...command.prefixArgs];
|
|
@@ -3344,7 +3416,7 @@ cli.command("add [identifier]", "Add a bundle, agent, skill, or workflow to proj
|
|
|
3344
3416
|
{
|
|
3345
3417
|
value: "cline",
|
|
3346
3418
|
label: HOST_REGISTRY.cline.label,
|
|
3347
|
-
hint: detectedHosts.includes("cline") ? "found in this project" : "
|
|
3419
|
+
hint: detectedHosts.includes("cline") ? "found in this project" : "configured agents, skills, rules, workflows & team manifests for Cline"
|
|
3348
3420
|
},
|
|
3349
3421
|
{
|
|
3350
3422
|
value: "opencode",
|
|
@@ -3699,6 +3771,12 @@ ${renderProjections(result.projections)}` : ""),
|
|
|
3699
3771
|
"Installation Success"
|
|
3700
3772
|
);
|
|
3701
3773
|
const hasClineProjection = result.projections.some((p) => p.host === "cline");
|
|
3774
|
+
if (hasClineProjection && !options.dryRun) {
|
|
3775
|
+
note(
|
|
3776
|
+
pc.green(`Already active: any Cline session in this workspace now sees this bundle's skills, subagent_* agent tools, rules & workflow commands (ADR 0013 native discovery).`),
|
|
3777
|
+
"Native Activation"
|
|
3778
|
+
);
|
|
3779
|
+
}
|
|
3702
3780
|
if (options.start && !hasClineProjection) {
|
|
3703
3781
|
throw new Error("--start requires Cline projection. Add -t cline or --fanout cline.");
|
|
3704
3782
|
}
|
|
@@ -3762,8 +3840,10 @@ ${renderProjections(result.projections)}` : ""),
|
|
|
3762
3840
|
if (!options.dryRun && hosts.includes("agents") && result.projections.length === 0) {
|
|
3763
3841
|
note(
|
|
3764
3842
|
pc.yellow(
|
|
3765
|
-
`Tip:
|
|
3766
|
-
|
|
3843
|
+
`Tip: Antigravity reads the main library (.agents/) directly, and Cline natively
|
|
3844
|
+
discovers skills from .agents/skills/ (ADR 0013). For Cline configured agents,
|
|
3845
|
+
rules & workflows run: agents update ${identifier} --fanout cline
|
|
3846
|
+
(add claude, cursor, opencode, codex for other assistants)`
|
|
3767
3847
|
),
|
|
3768
3848
|
"One library, every assistant"
|
|
3769
3849
|
);
|
|
@@ -3974,8 +4054,8 @@ Updates Available: ${report.outdatedCount > 0 ? pc.yellow(pc.bold(`${report.outd
|
|
|
3974
4054
|
if (unprojected.length > 0) {
|
|
3975
4055
|
note(
|
|
3976
4056
|
pc.yellow(
|
|
3977
|
-
`Tip: not synced to other assistants yet (
|
|
3978
|
-
|
|
4057
|
+
`Tip: not fully synced to other assistants yet (Antigravity reads .agents/ directly; Cline natively discovers .agents/skills/).
|
|
4058
|
+
For Cline configured agents, rules & workflows: agents update ${unprojected[0]} --fanout cline`
|
|
3979
4059
|
),
|
|
3980
4060
|
"One library, every assistant"
|
|
3981
4061
|
);
|
|
@@ -4398,6 +4478,12 @@ Projections:
|
|
|
4398
4478
|
${renderProjections(result.projections)}` : ""),
|
|
4399
4479
|
"Installation Success"
|
|
4400
4480
|
);
|
|
4481
|
+
if (result.projections.some((p) => p.host === "cline")) {
|
|
4482
|
+
note(
|
|
4483
|
+
pc.green(`Already active: any Cline session in this workspace now sees this bundle's skills, subagent_* agent tools, rules & workflow commands (ADR 0013 native discovery). Use "agents start ${bundle.name}" for a pre-seeded team session.`),
|
|
4484
|
+
"Native Activation"
|
|
4485
|
+
);
|
|
4486
|
+
}
|
|
4401
4487
|
outro(pc.green(`\u2728 Installation of "${bundle.name}" complete!`));
|
|
4402
4488
|
} catch (err) {
|
|
4403
4489
|
installSpinner.stop(pc.red("Installation failed"));
|
|
@@ -4453,7 +4539,7 @@ cli.command("list", "List available bundles grouped by department domain").alias
|
|
|
4453
4539
|
domainOptions.push({
|
|
4454
4540
|
value: "__full_tree__",
|
|
4455
4541
|
label: "\u{1F333} View Full Static Catalog Tree",
|
|
4456
|
-
hint:
|
|
4542
|
+
hint: `expand all ${bundles.length} bundles and ${new Set(bundles.map((b) => b.domain).filter(Boolean)).size} departments at once`
|
|
4457
4543
|
});
|
|
4458
4544
|
const selectedDomain = await select({
|
|
4459
4545
|
message: "Select Department Domain to explore:",
|
|
@@ -4730,10 +4816,11 @@ cli.command("doctor", "Verify health of installed agents, frontmatter schemas, a
|
|
|
4730
4816
|
console.log(pc.bold(pc.cyan("\u{1F4A1} Get Started:")));
|
|
4731
4817
|
console.log(` \u{1F449} ${pc.bold("agents add")} Launch the interactive installation wizard`);
|
|
4732
4818
|
console.log(` \u{1F449} ${pc.bold("agents add software-engineering")} Install the engineering essentials team`);
|
|
4733
|
-
|
|
4819
|
+
const bundleCount = (await registry.listBundles()).length;
|
|
4820
|
+
console.log(` \u{1F449} ${pc.bold("agents list")} Browse all ${bundleCount} bundles by department
|
|
4734
4821
|
`);
|
|
4735
4822
|
if (report.clineCapability) {
|
|
4736
|
-
console.log(pc.bold(pc.cyan("Cline Runtime &
|
|
4823
|
+
console.log(pc.bold(pc.cyan("Cline Runtime & Native Discovery Audit:")));
|
|
4737
4824
|
console.log(` Installed: ${report.clineCapability.installed ? pc.green("\u2714 Detected") : pc.yellow("\u2716 Not Found")}`);
|
|
4738
4825
|
if (report.clineCapability.version) {
|
|
4739
4826
|
console.log(` Version: ${report.clineCapability.version}`);
|
|
@@ -4754,13 +4841,13 @@ cli.command("doctor", "Verify health of installed agents, frontmatter schemas, a
|
|
|
4754
4841
|
console.log(` \u{1F504} Installed Workflows: ${pc.bold(report.workflowsCount.toString())}
|
|
4755
4842
|
`);
|
|
4756
4843
|
if (report.clineCapability) {
|
|
4757
|
-
console.log(pc.bold(pc.cyan("Cline Runtime &
|
|
4844
|
+
console.log(pc.bold(pc.cyan("Cline Runtime & Native Discovery Audit:")));
|
|
4758
4845
|
console.log(` Installed: ${report.clineCapability.installed ? pc.green("\u2714 Detected") : pc.yellow("\u2716 Not Found")}`);
|
|
4759
4846
|
if (report.clineCapability.version) {
|
|
4760
4847
|
console.log(` Version: ${report.clineCapability.version}`);
|
|
4761
4848
|
}
|
|
4762
4849
|
console.log(` Named Teams: ${report.clineCapability.namedTeams ? pc.green("\u2714 Supported") : pc.yellow("\u2716 Unsupported (Adaptive fallback)")}`);
|
|
4763
|
-
console.log(`
|
|
4850
|
+
console.log(` Configured Agents: ${report.agentsCount} active natively in any Cline session ("agents start" = optional team-session launcher)
|
|
4764
4851
|
`);
|
|
4765
4852
|
}
|
|
4766
4853
|
if (report.issues.length > 0) {
|