blue-gardener 0.1.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 +88 -0
- package/agents/CATALOG.md +272 -0
- package/agents/blockchain/blue-blockchain-architecture-designer.md +518 -0
- package/agents/blockchain/blue-blockchain-backend-integrator.md +784 -0
- package/agents/blockchain/blue-blockchain-code-reviewer.md +523 -0
- package/agents/blockchain/blue-blockchain-defi-specialist.md +551 -0
- package/agents/blockchain/blue-blockchain-ethereum-developer.md +707 -0
- package/agents/blockchain/blue-blockchain-frontend-integrator.md +732 -0
- package/agents/blockchain/blue-blockchain-gas-optimizer.md +508 -0
- package/agents/blockchain/blue-blockchain-product-strategist.md +439 -0
- package/agents/blockchain/blue-blockchain-security-auditor.md +517 -0
- package/agents/blockchain/blue-blockchain-solana-developer.md +760 -0
- package/agents/blockchain/blue-blockchain-tokenomics-designer.md +412 -0
- package/agents/configuration/blue-ai-platform-configuration-specialist.md +587 -0
- package/agents/development/blue-animation-specialist.md +439 -0
- package/agents/development/blue-api-integration-expert.md +681 -0
- package/agents/development/blue-go-backend-implementation-specialist.md +702 -0
- package/agents/development/blue-node-backend-implementation-specialist.md +543 -0
- package/agents/development/blue-react-developer.md +425 -0
- package/agents/development/blue-state-management-expert.md +557 -0
- package/agents/development/blue-storybook-specialist.md +450 -0
- package/agents/development/blue-third-party-api-strategist.md +391 -0
- package/agents/development/blue-ui-styling-specialist.md +557 -0
- package/agents/infrastructure/blue-cron-job-implementation-specialist.md +589 -0
- package/agents/infrastructure/blue-database-architecture-specialist.md +515 -0
- package/agents/infrastructure/blue-docker-specialist.md +407 -0
- package/agents/infrastructure/blue-document-database-specialist.md +695 -0
- package/agents/infrastructure/blue-github-actions-specialist.md +148 -0
- package/agents/infrastructure/blue-keyvalue-database-specialist.md +678 -0
- package/agents/infrastructure/blue-monorepo-specialist.md +431 -0
- package/agents/infrastructure/blue-relational-database-specialist.md +557 -0
- package/agents/infrastructure/blue-typescript-cli-developer.md +310 -0
- package/agents/orchestrators/blue-app-quality-gate-keeper.md +299 -0
- package/agents/orchestrators/blue-architecture-designer.md +319 -0
- package/agents/orchestrators/blue-feature-specification-analyst.md +212 -0
- package/agents/orchestrators/blue-implementation-review-coordinator.md +497 -0
- package/agents/orchestrators/blue-refactoring-strategy-planner.md +307 -0
- package/agents/quality/blue-accessibility-specialist.md +588 -0
- package/agents/quality/blue-e2e-testing-specialist.md +613 -0
- package/agents/quality/blue-frontend-code-reviewer.md +528 -0
- package/agents/quality/blue-go-backend-code-reviewer.md +610 -0
- package/agents/quality/blue-node-backend-code-reviewer.md +486 -0
- package/agents/quality/blue-performance-specialist.md +595 -0
- package/agents/quality/blue-security-specialist.md +616 -0
- package/agents/quality/blue-seo-specialist.md +477 -0
- package/agents/quality/blue-unit-testing-specialist.md +560 -0
- package/dist/commands/add.d.ts +4 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +154 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/entrypoints.d.ts +2 -0
- package/dist/commands/entrypoints.d.ts.map +1 -0
- package/dist/commands/entrypoints.js +37 -0
- package/dist/commands/entrypoints.js.map +1 -0
- package/dist/commands/list.d.ts +2 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +28 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/profiles.d.ts +2 -0
- package/dist/commands/profiles.d.ts.map +1 -0
- package/dist/commands/profiles.js +12 -0
- package/dist/commands/profiles.js.map +1 -0
- package/dist/commands/remove.d.ts +2 -0
- package/dist/commands/remove.d.ts.map +1 -0
- package/dist/commands/remove.js +46 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/repair.d.ts +2 -0
- package/dist/commands/repair.d.ts.map +1 -0
- package/dist/commands/repair.js +38 -0
- package/dist/commands/repair.js.map +1 -0
- package/dist/commands/search.d.ts +2 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +85 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/sync.d.ts +6 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +31 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/adapters/base.d.ts +52 -0
- package/dist/lib/adapters/base.d.ts.map +1 -0
- package/dist/lib/adapters/base.js +100 -0
- package/dist/lib/adapters/base.js.map +1 -0
- package/dist/lib/adapters/claude-desktop.d.ts +14 -0
- package/dist/lib/adapters/claude-desktop.d.ts.map +1 -0
- package/dist/lib/adapters/claude-desktop.js +38 -0
- package/dist/lib/adapters/claude-desktop.js.map +1 -0
- package/dist/lib/adapters/codex.d.ts +19 -0
- package/dist/lib/adapters/codex.d.ts.map +1 -0
- package/dist/lib/adapters/codex.js +97 -0
- package/dist/lib/adapters/codex.js.map +1 -0
- package/dist/lib/adapters/cursor.d.ts +14 -0
- package/dist/lib/adapters/cursor.d.ts.map +1 -0
- package/dist/lib/adapters/cursor.js +38 -0
- package/dist/lib/adapters/cursor.js.map +1 -0
- package/dist/lib/adapters/github-copilot.d.ts +19 -0
- package/dist/lib/adapters/github-copilot.d.ts.map +1 -0
- package/dist/lib/adapters/github-copilot.js +107 -0
- package/dist/lib/adapters/github-copilot.js.map +1 -0
- package/dist/lib/adapters/index.d.ts +8 -0
- package/dist/lib/adapters/index.d.ts.map +1 -0
- package/dist/lib/adapters/index.js +29 -0
- package/dist/lib/adapters/index.js.map +1 -0
- package/dist/lib/adapters/opencode.d.ts +14 -0
- package/dist/lib/adapters/opencode.d.ts.map +1 -0
- package/dist/lib/adapters/opencode.js +38 -0
- package/dist/lib/adapters/opencode.js.map +1 -0
- package/dist/lib/adapters/windsurf.d.ts +16 -0
- package/dist/lib/adapters/windsurf.d.ts.map +1 -0
- package/dist/lib/adapters/windsurf.js +66 -0
- package/dist/lib/adapters/windsurf.js.map +1 -0
- package/dist/lib/agents.d.ts +58 -0
- package/dist/lib/agents.d.ts.map +1 -0
- package/dist/lib/agents.js +340 -0
- package/dist/lib/agents.js.map +1 -0
- package/dist/lib/entrypoints.d.ts +9 -0
- package/dist/lib/entrypoints.d.ts.map +1 -0
- package/dist/lib/entrypoints.js +72 -0
- package/dist/lib/entrypoints.js.map +1 -0
- package/dist/lib/manifest.d.ts +41 -0
- package/dist/lib/manifest.d.ts.map +1 -0
- package/dist/lib/manifest.js +84 -0
- package/dist/lib/manifest.js.map +1 -0
- package/dist/lib/paths.d.ts +23 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +64 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/lib/platform.d.ts +20 -0
- package/dist/lib/platform.d.ts.map +1 -0
- package/dist/lib/platform.js +86 -0
- package/dist/lib/platform.js.map +1 -0
- package/dist/lib/profiles.d.ts +14 -0
- package/dist/lib/profiles.d.ts.map +1 -0
- package/dist/lib/profiles.js +138 -0
- package/dist/lib/profiles.js.map +1 -0
- package/dist/ui/menu.d.ts +2 -0
- package/dist/ui/menu.d.ts.map +1 -0
- package/dist/ui/menu.js +88 -0
- package/dist/ui/menu.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Platform } from "./platform.js";
|
|
2
|
+
export interface AgentEntry {
|
|
3
|
+
version: string;
|
|
4
|
+
installedAt: string;
|
|
5
|
+
}
|
|
6
|
+
export interface Manifest {
|
|
7
|
+
_comment?: string;
|
|
8
|
+
version: string;
|
|
9
|
+
installedAt: string;
|
|
10
|
+
platform?: Platform;
|
|
11
|
+
agents: Record<string, AgentEntry>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Read the manifest file, returns null if it doesn't exist
|
|
15
|
+
*/
|
|
16
|
+
export declare function readManifest(): Manifest | null;
|
|
17
|
+
/**
|
|
18
|
+
* Write the manifest file
|
|
19
|
+
*/
|
|
20
|
+
export declare function writeManifest(manifest: Manifest): void;
|
|
21
|
+
/**
|
|
22
|
+
* Create a new empty manifest
|
|
23
|
+
*/
|
|
24
|
+
export declare function createManifest(version: string, platform?: Platform): Manifest;
|
|
25
|
+
/**
|
|
26
|
+
* Update platform in manifest
|
|
27
|
+
*/
|
|
28
|
+
export declare function updatePlatform(manifest: Manifest, platform: Platform): Manifest;
|
|
29
|
+
/**
|
|
30
|
+
* Add an agent to the manifest
|
|
31
|
+
*/
|
|
32
|
+
export declare function addAgentToManifest(manifest: Manifest, agentName: string, version: string): Manifest;
|
|
33
|
+
/**
|
|
34
|
+
* Remove an agent from the manifest
|
|
35
|
+
*/
|
|
36
|
+
export declare function removeAgentFromManifest(manifest: Manifest, agentName: string): Manifest;
|
|
37
|
+
/**
|
|
38
|
+
* Get list of installed agent names
|
|
39
|
+
*/
|
|
40
|
+
export declare function getInstalledAgentNames(): string[];
|
|
41
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/lib/manifest.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACpC;AAKD;;GAEG;AACH,wBAAgB,YAAY,IAAI,QAAQ,GAAG,IAAI,CAS9C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAYtD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAQ7E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,GACjB,QAAQ,CAKV;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,QAAQ,CAWV;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,GAChB,QAAQ,CAMV;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAMjD"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import { getManifestPath, ensureProjectAgentsDir } from "./paths.js";
|
|
3
|
+
const MANIFEST_COMMENT = "This file is auto-generated by blue-gardener. Do not edit manually. Run 'npx blue-gardener repair' if issues occur.";
|
|
4
|
+
/**
|
|
5
|
+
* Read the manifest file, returns null if it doesn't exist
|
|
6
|
+
*/
|
|
7
|
+
export function readManifest() {
|
|
8
|
+
const manifestPath = getManifestPath();
|
|
9
|
+
if (fs.existsSync(manifestPath)) {
|
|
10
|
+
const content = fs.readFileSync(manifestPath, "utf-8");
|
|
11
|
+
return JSON.parse(content);
|
|
12
|
+
}
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Write the manifest file
|
|
17
|
+
*/
|
|
18
|
+
export function writeManifest(manifest) {
|
|
19
|
+
ensureProjectAgentsDir();
|
|
20
|
+
const manifestPath = getManifestPath();
|
|
21
|
+
// Ensure comment is always present
|
|
22
|
+
const manifestWithComment = {
|
|
23
|
+
_comment: MANIFEST_COMMENT,
|
|
24
|
+
...manifest,
|
|
25
|
+
};
|
|
26
|
+
fs.writeFileSync(manifestPath, JSON.stringify(manifestWithComment, null, 2) + "\n");
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Create a new empty manifest
|
|
30
|
+
*/
|
|
31
|
+
export function createManifest(version, platform) {
|
|
32
|
+
return {
|
|
33
|
+
_comment: MANIFEST_COMMENT,
|
|
34
|
+
version,
|
|
35
|
+
installedAt: new Date().toISOString(),
|
|
36
|
+
platform,
|
|
37
|
+
agents: {},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Update platform in manifest
|
|
42
|
+
*/
|
|
43
|
+
export function updatePlatform(manifest, platform) {
|
|
44
|
+
return {
|
|
45
|
+
...manifest,
|
|
46
|
+
platform,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Add an agent to the manifest
|
|
51
|
+
*/
|
|
52
|
+
export function addAgentToManifest(manifest, agentName, version) {
|
|
53
|
+
return {
|
|
54
|
+
...manifest,
|
|
55
|
+
agents: {
|
|
56
|
+
...manifest.agents,
|
|
57
|
+
[agentName]: {
|
|
58
|
+
version,
|
|
59
|
+
installedAt: new Date().toISOString(),
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Remove an agent from the manifest
|
|
66
|
+
*/
|
|
67
|
+
export function removeAgentFromManifest(manifest, agentName) {
|
|
68
|
+
const { [agentName]: _, ...remainingAgents } = manifest.agents;
|
|
69
|
+
return {
|
|
70
|
+
...manifest,
|
|
71
|
+
agents: remainingAgents,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Get list of installed agent names
|
|
76
|
+
*/
|
|
77
|
+
export function getInstalledAgentNames() {
|
|
78
|
+
const manifest = readManifest();
|
|
79
|
+
if (!manifest) {
|
|
80
|
+
return [];
|
|
81
|
+
}
|
|
82
|
+
return Object.keys(manifest.agents);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/lib/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAgBrE,MAAM,gBAAgB,GACpB,qHAAqH,CAAC;AAExH;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IAEvC,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAa,CAAC;IACzC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,QAAkB;IAC9C,sBAAsB,EAAE,CAAC;IACzB,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,mCAAmC;IACnC,MAAM,mBAAmB,GAAG;QAC1B,QAAQ,EAAE,gBAAgB;QAC1B,GAAG,QAAQ;KACZ,CAAC;IACF,EAAE,CAAC,aAAa,CACd,YAAY,EACZ,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CACpD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,QAAmB;IACjE,OAAO;QACL,QAAQ,EAAE,gBAAgB;QAC1B,OAAO;QACP,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,QAAQ;QACR,MAAM,EAAE,EAAE;KACX,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,QAAkB,EAClB,QAAkB;IAElB,OAAO;QACL,GAAG,QAAQ;QACX,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAkB,EAClB,SAAiB,EACjB,OAAe;IAEf,OAAO;QACL,GAAG,QAAQ;QACX,MAAM,EAAE;YACN,GAAG,QAAQ,CAAC,MAAM;YAClB,CAAC,SAAS,CAAC,EAAE;gBACX,OAAO;gBACP,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACtC;SACF;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAkB,EAClB,SAAiB;IAEjB,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,GAAG,eAAe,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC/D,OAAO;QACL,GAAG,QAAQ;QACX,MAAM,EAAE,eAAe;KACxB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Platform } from "./platform.js";
|
|
2
|
+
/**
|
|
3
|
+
* Get the directory where the package is installed
|
|
4
|
+
*/
|
|
5
|
+
export declare function getPackageDir(): string;
|
|
6
|
+
/**
|
|
7
|
+
* Get the directory containing bundled agents
|
|
8
|
+
*/
|
|
9
|
+
export declare function getBundledAgentsDir(): string;
|
|
10
|
+
/**
|
|
11
|
+
* Get the project's agents directory based on platform
|
|
12
|
+
*/
|
|
13
|
+
export declare function getProjectAgentsDir(platform?: Platform): string;
|
|
14
|
+
/**
|
|
15
|
+
* Get the path to the manifest file
|
|
16
|
+
* For backward compatibility, always stored in .cursor/agents
|
|
17
|
+
*/
|
|
18
|
+
export declare function getManifestPath(): string;
|
|
19
|
+
/**
|
|
20
|
+
* Ensure the project's agents directory exists
|
|
21
|
+
*/
|
|
22
|
+
export declare function ensureProjectAgentsDir(platform?: Platform): void;
|
|
23
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/lib/paths.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAsB/D;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAWhE"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { fileURLToPath } from "url";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import fs from "fs";
|
|
4
|
+
/**
|
|
5
|
+
* Get the directory where the package is installed
|
|
6
|
+
*/
|
|
7
|
+
export function getPackageDir() {
|
|
8
|
+
const currentFile = fileURLToPath(import.meta.url);
|
|
9
|
+
// Go up from dist/lib/paths.js to package root
|
|
10
|
+
return path.resolve(path.dirname(currentFile), "..", "..");
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Get the directory containing bundled agents
|
|
14
|
+
*/
|
|
15
|
+
export function getBundledAgentsDir() {
|
|
16
|
+
return path.join(getPackageDir(), "agents");
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get the project's agents directory based on platform
|
|
20
|
+
*/
|
|
21
|
+
export function getProjectAgentsDir(platform) {
|
|
22
|
+
const cwd = process.cwd();
|
|
23
|
+
// Default to cursor for backward compatibility
|
|
24
|
+
const targetPlatform = platform || "cursor";
|
|
25
|
+
switch (targetPlatform) {
|
|
26
|
+
case "cursor":
|
|
27
|
+
return path.join(cwd, ".cursor", "agents");
|
|
28
|
+
case "claude-desktop":
|
|
29
|
+
return path.join(cwd, ".claude", "agents");
|
|
30
|
+
case "windsurf":
|
|
31
|
+
return path.join(cwd, ".windsurf", "rules");
|
|
32
|
+
case "opencode":
|
|
33
|
+
return path.join(cwd, ".opencode", "agents");
|
|
34
|
+
case "codex":
|
|
35
|
+
case "github-copilot":
|
|
36
|
+
// Single-file platforms don't have a directory
|
|
37
|
+
return cwd;
|
|
38
|
+
default:
|
|
39
|
+
return path.join(cwd, ".cursor", "agents");
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get the path to the manifest file
|
|
44
|
+
* For backward compatibility, always stored in .cursor/agents
|
|
45
|
+
*/
|
|
46
|
+
export function getManifestPath() {
|
|
47
|
+
const manifestDir = path.join(process.cwd(), ".cursor", "agents");
|
|
48
|
+
return path.join(manifestDir, ".blue-generated-manifest.json");
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Ensure the project's agents directory exists
|
|
52
|
+
*/
|
|
53
|
+
export function ensureProjectAgentsDir(platform) {
|
|
54
|
+
const dir = getProjectAgentsDir(platform);
|
|
55
|
+
if (!fs.existsSync(dir)) {
|
|
56
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
57
|
+
}
|
|
58
|
+
// Also ensure manifest directory exists
|
|
59
|
+
const manifestDir = path.dirname(getManifestPath());
|
|
60
|
+
if (!fs.existsSync(manifestDir)) {
|
|
61
|
+
fs.mkdirSync(manifestDir, { recursive: true });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/lib/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAGpB;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnD,+CAA+C;IAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAmB;IACrD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,+CAA+C;IAC/C,MAAM,cAAc,GAAG,QAAQ,IAAI,QAAQ,CAAC;IAE5C,QAAQ,cAAc,EAAE,CAAC;QACvB,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC7C,KAAK,gBAAgB;YACnB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC7C,KAAK,UAAU;YACb,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAC9C,KAAK,UAAU;YACb,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC/C,KAAK,OAAO,CAAC;QACb,KAAK,gBAAgB;YACnB,+CAA+C;YAC/C,OAAO,GAAG,CAAC;QACb;YACE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,+BAA+B,CAAC,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAmB;IACxD,MAAM,GAAG,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,wCAAwC;IACxC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type Platform = "cursor" | "claude-desktop" | "codex" | "github-copilot" | "windsurf" | "opencode";
|
|
2
|
+
export interface PlatformInfo {
|
|
3
|
+
id: Platform;
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const PLATFORMS: PlatformInfo[];
|
|
8
|
+
/**
|
|
9
|
+
* Auto-detect platform based on project structure
|
|
10
|
+
*/
|
|
11
|
+
export declare function detectPlatform(): Platform | null;
|
|
12
|
+
/**
|
|
13
|
+
* Prompt user to select a platform
|
|
14
|
+
*/
|
|
15
|
+
export declare function promptForPlatform(): Promise<Platform>;
|
|
16
|
+
/**
|
|
17
|
+
* Get platform info by ID
|
|
18
|
+
*/
|
|
19
|
+
export declare function getPlatformInfo(platform: Platform): PlatformInfo;
|
|
20
|
+
//# sourceMappingURL=platform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/lib/platform.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,QAAQ,GAChB,QAAQ,GACR,gBAAgB,GAChB,OAAO,GACP,gBAAgB,GAChB,UAAU,GACV,UAAU,CAAC;AAEf,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,QAAQ,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,SAAS,EAAE,YAAY,EA+BnC,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,IAAI,QAAQ,GAAG,IAAI,CA6BhD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,QAAQ,CAAC,CAW3D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAMhE"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { select } from "@inquirer/prompts";
|
|
4
|
+
export const PLATFORMS = [
|
|
5
|
+
{
|
|
6
|
+
id: "cursor",
|
|
7
|
+
name: "Cursor",
|
|
8
|
+
description: "Cursor IDE with native agent support",
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
id: "claude-desktop",
|
|
12
|
+
name: "Claude Desktop",
|
|
13
|
+
description: "Claude Desktop with MCP agents",
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "codex",
|
|
17
|
+
name: "Codex",
|
|
18
|
+
description: "OpenAI Codex with AGENTS.md file",
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
id: "github-copilot",
|
|
22
|
+
name: "GitHub Copilot",
|
|
23
|
+
description: "GitHub Copilot with custom instructions",
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
id: "windsurf",
|
|
27
|
+
name: "Windsurf",
|
|
28
|
+
description: "Windsurf IDE with Cascade rules",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
id: "opencode",
|
|
32
|
+
name: "OpenCode",
|
|
33
|
+
description: "OpenCode with custom agents",
|
|
34
|
+
},
|
|
35
|
+
];
|
|
36
|
+
/**
|
|
37
|
+
* Auto-detect platform based on project structure
|
|
38
|
+
*/
|
|
39
|
+
export function detectPlatform() {
|
|
40
|
+
const cwd = process.cwd();
|
|
41
|
+
// Check for platform-specific directories/files
|
|
42
|
+
if (fs.existsSync(path.join(cwd, ".cursor", "agents"))) {
|
|
43
|
+
return "cursor";
|
|
44
|
+
}
|
|
45
|
+
if (fs.existsSync(path.join(cwd, ".claude", "agents"))) {
|
|
46
|
+
return "claude-desktop";
|
|
47
|
+
}
|
|
48
|
+
if (fs.existsSync(path.join(cwd, ".windsurf"))) {
|
|
49
|
+
return "windsurf";
|
|
50
|
+
}
|
|
51
|
+
if (fs.existsSync(path.join(cwd, ".opencode", "agents"))) {
|
|
52
|
+
return "opencode";
|
|
53
|
+
}
|
|
54
|
+
if (fs.existsSync(path.join(cwd, ".github", "copilot-instructions.md"))) {
|
|
55
|
+
return "github-copilot";
|
|
56
|
+
}
|
|
57
|
+
if (fs.existsSync(path.join(cwd, "AGENTS.md"))) {
|
|
58
|
+
return "codex";
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Prompt user to select a platform
|
|
64
|
+
*/
|
|
65
|
+
export async function promptForPlatform() {
|
|
66
|
+
const platform = await select({
|
|
67
|
+
message: "Which platform are you using?",
|
|
68
|
+
choices: PLATFORMS.map((p) => ({
|
|
69
|
+
name: p.name,
|
|
70
|
+
value: p.id,
|
|
71
|
+
description: p.description,
|
|
72
|
+
})),
|
|
73
|
+
});
|
|
74
|
+
return platform;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get platform info by ID
|
|
78
|
+
*/
|
|
79
|
+
export function getPlatformInfo(platform) {
|
|
80
|
+
const info = PLATFORMS.find((p) => p.id === platform);
|
|
81
|
+
if (!info) {
|
|
82
|
+
throw new Error(`Unknown platform: ${platform}`);
|
|
83
|
+
}
|
|
84
|
+
return info;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/lib/platform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface AgentProfile {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
agentNames: string[];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Install profiles/presets help teams avoid installing 44 agents at once.
|
|
9
|
+
* Profiles are intentionally opinionated defaults. Teams can add/remove agents as needed.
|
|
10
|
+
*/
|
|
11
|
+
export declare const AGENT_PROFILES: AgentProfile[];
|
|
12
|
+
export declare function getProfiles(): AgentProfile[];
|
|
13
|
+
export declare function getProfile(profileId: string): AgentProfile | undefined;
|
|
14
|
+
//# sourceMappingURL=profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/lib/profiles.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,YAAY,EAmIxC,CAAC;AAEF,wBAAgB,WAAW,IAAI,YAAY,EAAE,CAE5C;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEtE"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Install profiles/presets help teams avoid installing 44 agents at once.
|
|
3
|
+
* Profiles are intentionally opinionated defaults. Teams can add/remove agents as needed.
|
|
4
|
+
*/
|
|
5
|
+
export const AGENT_PROFILES = [
|
|
6
|
+
{
|
|
7
|
+
id: "core",
|
|
8
|
+
name: "Core (full-stack default)",
|
|
9
|
+
description: "Broad default for most repos: orchestrators + common frontend/backend implementation specialists + reviews + tests.",
|
|
10
|
+
agentNames: [
|
|
11
|
+
// Orchestrators
|
|
12
|
+
"blue-feature-specification-analyst",
|
|
13
|
+
"blue-architecture-designer",
|
|
14
|
+
"blue-refactoring-strategy-planner",
|
|
15
|
+
"blue-app-quality-gate-keeper",
|
|
16
|
+
"blue-implementation-review-coordinator",
|
|
17
|
+
// Frontend implementation
|
|
18
|
+
"blue-react-developer",
|
|
19
|
+
"blue-state-management-expert",
|
|
20
|
+
"blue-ui-styling-specialist",
|
|
21
|
+
"blue-api-integration-expert",
|
|
22
|
+
// Backend implementation
|
|
23
|
+
"blue-node-backend-implementation-specialist",
|
|
24
|
+
"blue-database-architecture-specialist",
|
|
25
|
+
"blue-relational-database-specialist",
|
|
26
|
+
// Quality + tests
|
|
27
|
+
"blue-frontend-code-reviewer",
|
|
28
|
+
"blue-node-backend-code-reviewer",
|
|
29
|
+
"blue-accessibility-specialist",
|
|
30
|
+
"blue-security-specialist",
|
|
31
|
+
"blue-performance-specialist",
|
|
32
|
+
"blue-unit-testing-specialist",
|
|
33
|
+
"blue-e2e-testing-specialist",
|
|
34
|
+
],
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
id: "orchestration",
|
|
38
|
+
name: "Orchestration (planning + quality)",
|
|
39
|
+
description: "Lightweight baseline: orchestrators + essential quality specialists. Add implementation profiles for your stack.",
|
|
40
|
+
agentNames: [
|
|
41
|
+
// Orchestrators
|
|
42
|
+
"blue-feature-specification-analyst",
|
|
43
|
+
"blue-architecture-designer",
|
|
44
|
+
"blue-refactoring-strategy-planner",
|
|
45
|
+
"blue-app-quality-gate-keeper",
|
|
46
|
+
"blue-implementation-review-coordinator",
|
|
47
|
+
// Quality essentials
|
|
48
|
+
"blue-security-specialist",
|
|
49
|
+
"blue-performance-specialist",
|
|
50
|
+
"blue-unit-testing-specialist",
|
|
51
|
+
],
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
id: "frontend-react",
|
|
55
|
+
name: "Frontend (React)",
|
|
56
|
+
description: "React implementation + state/UI/data specialists with quality coverage.",
|
|
57
|
+
agentNames: [
|
|
58
|
+
// Orchestrators
|
|
59
|
+
"blue-feature-specification-analyst",
|
|
60
|
+
"blue-architecture-designer",
|
|
61
|
+
"blue-refactoring-strategy-planner",
|
|
62
|
+
"blue-app-quality-gate-keeper",
|
|
63
|
+
"blue-implementation-review-coordinator",
|
|
64
|
+
// Dev
|
|
65
|
+
"blue-react-developer",
|
|
66
|
+
"blue-state-management-expert",
|
|
67
|
+
"blue-ui-styling-specialist",
|
|
68
|
+
"blue-api-integration-expert",
|
|
69
|
+
// Quality
|
|
70
|
+
"blue-frontend-code-reviewer",
|
|
71
|
+
"blue-accessibility-specialist",
|
|
72
|
+
"blue-performance-specialist",
|
|
73
|
+
"blue-security-specialist",
|
|
74
|
+
"blue-unit-testing-specialist",
|
|
75
|
+
"blue-e2e-testing-specialist",
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
id: "backend-node",
|
|
80
|
+
name: "Backend (Node.js)",
|
|
81
|
+
description: "Node backend implementation + database architecture with quality coverage.",
|
|
82
|
+
agentNames: [
|
|
83
|
+
// Orchestrators
|
|
84
|
+
"blue-architecture-designer",
|
|
85
|
+
"blue-refactoring-strategy-planner",
|
|
86
|
+
"blue-app-quality-gate-keeper",
|
|
87
|
+
"blue-implementation-review-coordinator",
|
|
88
|
+
// Dev/Infra
|
|
89
|
+
"blue-node-backend-implementation-specialist",
|
|
90
|
+
"blue-database-architecture-specialist",
|
|
91
|
+
"blue-relational-database-specialist",
|
|
92
|
+
// Quality
|
|
93
|
+
"blue-node-backend-code-reviewer",
|
|
94
|
+
"blue-security-specialist",
|
|
95
|
+
"blue-unit-testing-specialist",
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
id: "infrastructure",
|
|
100
|
+
name: "Infrastructure / DevOps",
|
|
101
|
+
description: "CI/CD, containers, monorepo tooling, and ops fundamentals.",
|
|
102
|
+
agentNames: [
|
|
103
|
+
"blue-github-actions-specialist",
|
|
104
|
+
"blue-docker-specialist",
|
|
105
|
+
"blue-monorepo-specialist",
|
|
106
|
+
"blue-cron-job-implementation-specialist",
|
|
107
|
+
"blue-database-architecture-specialist",
|
|
108
|
+
],
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
id: "blockchain",
|
|
112
|
+
name: "Blockchain / Web3",
|
|
113
|
+
description: "Smart contract + dApp specialists (add chain-specific agents as needed).",
|
|
114
|
+
agentNames: [
|
|
115
|
+
// Orchestrators
|
|
116
|
+
"blue-architecture-designer",
|
|
117
|
+
"blue-refactoring-strategy-planner",
|
|
118
|
+
"blue-app-quality-gate-keeper",
|
|
119
|
+
"blue-implementation-review-coordinator",
|
|
120
|
+
// Blockchain (broad)
|
|
121
|
+
"blue-blockchain-product-strategist",
|
|
122
|
+
"blue-blockchain-architecture-designer",
|
|
123
|
+
"blue-blockchain-code-reviewer",
|
|
124
|
+
"blue-blockchain-security-auditor",
|
|
125
|
+
"blue-blockchain-frontend-integrator",
|
|
126
|
+
"blue-blockchain-backend-integrator",
|
|
127
|
+
// Cross-cutting
|
|
128
|
+
"blue-security-specialist",
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
];
|
|
132
|
+
export function getProfiles() {
|
|
133
|
+
return AGENT_PROFILES;
|
|
134
|
+
}
|
|
135
|
+
export function getProfile(profileId) {
|
|
136
|
+
return AGENT_PROFILES.find((p) => p.id === profileId);
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/lib/profiles.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C;QACE,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,2BAA2B;QACjC,WAAW,EACT,qHAAqH;QACvH,UAAU,EAAE;YACV,gBAAgB;YAChB,oCAAoC;YACpC,4BAA4B;YAC5B,mCAAmC;YACnC,8BAA8B;YAC9B,wCAAwC;YACxC,0BAA0B;YAC1B,sBAAsB;YACtB,8BAA8B;YAC9B,4BAA4B;YAC5B,6BAA6B;YAC7B,yBAAyB;YACzB,6CAA6C;YAC7C,uCAAuC;YACvC,qCAAqC;YACrC,kBAAkB;YAClB,6BAA6B;YAC7B,iCAAiC;YACjC,+BAA+B;YAC/B,0BAA0B;YAC1B,6BAA6B;YAC7B,8BAA8B;YAC9B,6BAA6B;SAC9B;KACF;IACD;QACE,EAAE,EAAE,eAAe;QACnB,IAAI,EAAE,oCAAoC;QAC1C,WAAW,EACT,kHAAkH;QACpH,UAAU,EAAE;YACV,gBAAgB;YAChB,oCAAoC;YACpC,4BAA4B;YAC5B,mCAAmC;YACnC,8BAA8B;YAC9B,wCAAwC;YACxC,qBAAqB;YACrB,0BAA0B;YAC1B,6BAA6B;YAC7B,8BAA8B;SAC/B;KACF;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,yEAAyE;QAC3E,UAAU,EAAE;YACV,gBAAgB;YAChB,oCAAoC;YACpC,4BAA4B;YAC5B,mCAAmC;YACnC,8BAA8B;YAC9B,wCAAwC;YACxC,MAAM;YACN,sBAAsB;YACtB,8BAA8B;YAC9B,4BAA4B;YAC5B,6BAA6B;YAC7B,UAAU;YACV,6BAA6B;YAC7B,+BAA+B;YAC/B,6BAA6B;YAC7B,0BAA0B;YAC1B,8BAA8B;YAC9B,6BAA6B;SAC9B;KACF;IACD;QACE,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,4EAA4E;QAC9E,UAAU,EAAE;YACV,gBAAgB;YAChB,4BAA4B;YAC5B,mCAAmC;YACnC,8BAA8B;YAC9B,wCAAwC;YACxC,YAAY;YACZ,6CAA6C;YAC7C,uCAAuC;YACvC,qCAAqC;YACrC,UAAU;YACV,iCAAiC;YACjC,0BAA0B;YAC1B,8BAA8B;SAC/B;KACF;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EAAE,4DAA4D;QACzE,UAAU,EAAE;YACV,gCAAgC;YAChC,wBAAwB;YACxB,0BAA0B;YAC1B,yCAAyC;YACzC,uCAAuC;SACxC;KACF;IACD;QACE,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,0EAA0E;QAC5E,UAAU,EAAE;YACV,gBAAgB;YAChB,4BAA4B;YAC5B,mCAAmC;YACnC,8BAA8B;YAC9B,wCAAwC;YACxC,qBAAqB;YACrB,oCAAoC;YACpC,uCAAuC;YACvC,+BAA+B;YAC/B,kCAAkC;YAClC,qCAAqC;YACrC,oCAAoC;YACpC,gBAAgB;YAChB,0BAA0B;SAC3B;KACF;CACF,CAAC;AAEF,MAAM,UAAU,WAAW;IACzB,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,SAAiB;IAC1C,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/ui/menu.ts"],"names":[],"mappings":"AAoBA,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAmFrD"}
|
package/dist/ui/menu.js
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { select } from "@inquirer/prompts";
|
|
3
|
+
import { addCommand } from "../commands/add.js";
|
|
4
|
+
import { removeCommand } from "../commands/remove.js";
|
|
5
|
+
import { listCommand } from "../commands/list.js";
|
|
6
|
+
import { searchCommand } from "../commands/search.js";
|
|
7
|
+
import { syncCommand } from "../commands/sync.js";
|
|
8
|
+
import { repairCommand } from "../commands/repair.js";
|
|
9
|
+
import { profilesCommand } from "../commands/profiles.js";
|
|
10
|
+
export async function interactiveMenu() {
|
|
11
|
+
console.log(chalk.blue.bold("\n🌱 Blue Gardener - Multi-Platform AI Agent Manager\n"));
|
|
12
|
+
while (true) {
|
|
13
|
+
const action = await select({
|
|
14
|
+
message: "What would you like to do?",
|
|
15
|
+
choices: [
|
|
16
|
+
{
|
|
17
|
+
name: "Add agents",
|
|
18
|
+
value: "add",
|
|
19
|
+
description: "Install new agents to your project",
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: "Remove agents",
|
|
23
|
+
value: "remove",
|
|
24
|
+
description: "Remove installed agents",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: "List agents",
|
|
28
|
+
value: "list",
|
|
29
|
+
description: "Show available and installed agents",
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: "List install profiles",
|
|
33
|
+
value: "profiles",
|
|
34
|
+
description: "Show curated presets for installing agents",
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: "Search agents",
|
|
38
|
+
value: "search",
|
|
39
|
+
description: "Search agents by name, description, or tags",
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: "Sync agents",
|
|
43
|
+
value: "sync",
|
|
44
|
+
description: "Update installed agents to latest version",
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: "Repair manifest",
|
|
48
|
+
value: "repair",
|
|
49
|
+
description: "Fix issues with manifest or orphaned agents",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: "Exit",
|
|
53
|
+
value: "exit",
|
|
54
|
+
description: "Exit Blue Gardener",
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
});
|
|
58
|
+
console.log();
|
|
59
|
+
switch (action) {
|
|
60
|
+
case "add":
|
|
61
|
+
await addCommand();
|
|
62
|
+
break;
|
|
63
|
+
case "remove":
|
|
64
|
+
await removeCommand();
|
|
65
|
+
break;
|
|
66
|
+
case "list":
|
|
67
|
+
await listCommand();
|
|
68
|
+
break;
|
|
69
|
+
case "profiles":
|
|
70
|
+
await profilesCommand();
|
|
71
|
+
break;
|
|
72
|
+
case "search":
|
|
73
|
+
await searchCommand();
|
|
74
|
+
break;
|
|
75
|
+
case "sync":
|
|
76
|
+
await syncCommand();
|
|
77
|
+
break;
|
|
78
|
+
case "repair":
|
|
79
|
+
await repairCommand();
|
|
80
|
+
break;
|
|
81
|
+
case "exit":
|
|
82
|
+
console.log(chalk.blue("Goodbye! 🌱\n"));
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
console.log();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.js","sourceRoot":"","sources":["../../src/ui/menu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAY1D,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAC1E,CAAC;IAEF,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,MAAM,MAAM,CAAa;YACtC,OAAO,EAAE,4BAA4B;YACrC,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,YAAY;oBAClB,KAAK,EAAE,KAAK;oBACZ,WAAW,EAAE,oCAAoC;iBAClD;gBACD;oBACE,IAAI,EAAE,eAAe;oBACrB,KAAK,EAAE,QAAQ;oBACf,WAAW,EAAE,yBAAyB;iBACvC;gBACD;oBACE,IAAI,EAAE,aAAa;oBACnB,KAAK,EAAE,MAAM;oBACb,WAAW,EAAE,qCAAqC;iBACnD;gBACD;oBACE,IAAI,EAAE,uBAAuB;oBAC7B,KAAK,EAAE,UAAU;oBACjB,WAAW,EAAE,4CAA4C;iBAC1D;gBACD;oBACE,IAAI,EAAE,eAAe;oBACrB,KAAK,EAAE,QAAQ;oBACf,WAAW,EAAE,6CAA6C;iBAC3D;gBACD;oBACE,IAAI,EAAE,aAAa;oBACnB,KAAK,EAAE,MAAM;oBACb,WAAW,EAAE,2CAA2C;iBACzD;gBACD;oBACE,IAAI,EAAE,iBAAiB;oBACvB,KAAK,EAAE,QAAQ;oBACf,WAAW,EAAE,6CAA6C;iBAC3D;gBACD;oBACE,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,MAAM;oBACb,WAAW,EAAE,oBAAoB;iBAClC;aACF;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,KAAK;gBACR,MAAM,UAAU,EAAE,CAAC;gBACnB,MAAM;YACR,KAAK,QAAQ;gBACX,MAAM,aAAa,EAAE,CAAC;gBACtB,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,WAAW,EAAE,CAAC;gBACpB,MAAM;YACR,KAAK,UAAU;gBACb,MAAM,eAAe,EAAE,CAAC;gBACxB,MAAM;YACR,KAAK,QAAQ;gBACX,MAAM,aAAa,EAAE,CAAC;gBACtB,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,WAAW,EAAE,CAAC;gBACpB,MAAM;YACR,KAAK,QAAQ;gBACX,MAAM,aAAa,EAAE,CAAC;gBACtB,MAAM;YACR,KAAK,MAAM;gBACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;gBACzC,OAAO;QACX,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;AACH,CAAC"}
|