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,52 @@
|
|
|
1
|
+
import { Platform } from "../platform.js";
|
|
2
|
+
import { AgentInfo } from "../agents.js";
|
|
3
|
+
export interface ParsedAgent {
|
|
4
|
+
frontmatter: Record<string, any>;
|
|
5
|
+
systemPrompt: string;
|
|
6
|
+
sections: AgentSection[];
|
|
7
|
+
}
|
|
8
|
+
export interface AgentSection {
|
|
9
|
+
header: string;
|
|
10
|
+
level: number;
|
|
11
|
+
content: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Base adapter interface for platform-specific agent installation
|
|
15
|
+
*/
|
|
16
|
+
export declare abstract class PlatformAdapter {
|
|
17
|
+
abstract readonly platform: Platform;
|
|
18
|
+
abstract readonly isSingleFile: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Install a single agent
|
|
21
|
+
*/
|
|
22
|
+
abstract installAgent(agentName: string, agentInfo: AgentInfo): void;
|
|
23
|
+
/**
|
|
24
|
+
* Remove a single agent
|
|
25
|
+
*/
|
|
26
|
+
abstract removeAgent(agentName: string, agentInfo: AgentInfo): void;
|
|
27
|
+
/**
|
|
28
|
+
* Sync all installed agents
|
|
29
|
+
*/
|
|
30
|
+
abstract syncAgents(installedAgents: AgentInfo[]): void;
|
|
31
|
+
/**
|
|
32
|
+
* Get output path for this platform
|
|
33
|
+
*/
|
|
34
|
+
abstract getOutputPath(): string;
|
|
35
|
+
/**
|
|
36
|
+
* Load agent content from bundled source
|
|
37
|
+
*/
|
|
38
|
+
protected loadAgentContent(agentInfo: AgentInfo): string;
|
|
39
|
+
/**
|
|
40
|
+
* Parse agent markdown into structured format
|
|
41
|
+
*/
|
|
42
|
+
protected parseAgentMarkdown(content: string): ParsedAgent;
|
|
43
|
+
/**
|
|
44
|
+
* Remove agent delegation references for platforms that don't support it
|
|
45
|
+
*/
|
|
46
|
+
protected removeAgentReferences(content: string): string;
|
|
47
|
+
/**
|
|
48
|
+
* Transform header text based on platform conventions
|
|
49
|
+
*/
|
|
50
|
+
protected transformHeader(header: string, mappings: Record<string, string | null>): string | null;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/lib/adapters/base.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,8BAAsB,eAAe;IACnC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAExC;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAEpE;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAEnE;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,eAAe,EAAE,SAAS,EAAE,GAAG,IAAI;IAEvD;;OAEG;IACH,QAAQ,CAAC,aAAa,IAAI,MAAM;IAEhC;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM;IAKxD;;OAEG;IACH,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW;IA6E1D;;OAEG;IACH,SAAS,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAKxD;;OAEG;IACH,SAAS,CAAC,eAAe,CACvB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GACtC,MAAM,GAAG,IAAI;CAOjB"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { getBundledAgentsDir } from "../paths.js";
|
|
4
|
+
/**
|
|
5
|
+
* Base adapter interface for platform-specific agent installation
|
|
6
|
+
*/
|
|
7
|
+
export class PlatformAdapter {
|
|
8
|
+
/**
|
|
9
|
+
* Load agent content from bundled source
|
|
10
|
+
*/
|
|
11
|
+
loadAgentContent(agentInfo) {
|
|
12
|
+
const sourcePath = path.join(getBundledAgentsDir(), agentInfo.sourcePath);
|
|
13
|
+
return fs.readFileSync(sourcePath, "utf-8");
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Parse agent markdown into structured format
|
|
17
|
+
*/
|
|
18
|
+
parseAgentMarkdown(content) {
|
|
19
|
+
// Extract frontmatter
|
|
20
|
+
const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---\n/);
|
|
21
|
+
let remainingContent = content;
|
|
22
|
+
let frontmatter = {};
|
|
23
|
+
if (frontmatterMatch) {
|
|
24
|
+
const frontmatterText = frontmatterMatch[1];
|
|
25
|
+
remainingContent = content.substring(frontmatterMatch[0].length);
|
|
26
|
+
// Parse YAML frontmatter (simple parser)
|
|
27
|
+
const lines = frontmatterText.split("\n");
|
|
28
|
+
for (const line of lines) {
|
|
29
|
+
const match = line.match(/^(\w+):\s*(.+)$/);
|
|
30
|
+
if (match) {
|
|
31
|
+
const [, key, value] = match;
|
|
32
|
+
// Handle arrays: tags: [tag1, tag2]
|
|
33
|
+
if (value.startsWith("[") && value.endsWith("]")) {
|
|
34
|
+
frontmatter[key] = value
|
|
35
|
+
.slice(1, -1)
|
|
36
|
+
.split(",")
|
|
37
|
+
.map((v) => v.trim());
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
frontmatter[key] = value.trim();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Extract system prompt (first paragraph before first header)
|
|
46
|
+
const firstHeaderMatch = remainingContent.match(/\n##\s+/);
|
|
47
|
+
const systemPrompt = firstHeaderMatch
|
|
48
|
+
? remainingContent.substring(0, firstHeaderMatch.index).trim()
|
|
49
|
+
: remainingContent.trim();
|
|
50
|
+
// Parse sections
|
|
51
|
+
const sections = [];
|
|
52
|
+
const sectionRegex = /^(#{2,})\s+(.+)$/gm;
|
|
53
|
+
let match;
|
|
54
|
+
const headerPositions = [];
|
|
55
|
+
while ((match = sectionRegex.exec(remainingContent)) !== null) {
|
|
56
|
+
headerPositions.push({
|
|
57
|
+
level: match[1].length,
|
|
58
|
+
header: match[2],
|
|
59
|
+
pos: match.index,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
for (let i = 0; i < headerPositions.length; i++) {
|
|
63
|
+
const current = headerPositions[i];
|
|
64
|
+
const next = headerPositions[i + 1];
|
|
65
|
+
const contentStart = current.pos + current.header.length + current.level + 1;
|
|
66
|
+
const contentEnd = next ? next.pos : remainingContent.length;
|
|
67
|
+
const sectionContent = remainingContent
|
|
68
|
+
.substring(contentStart, contentEnd)
|
|
69
|
+
.trim();
|
|
70
|
+
sections.push({
|
|
71
|
+
header: current.header,
|
|
72
|
+
level: current.level,
|
|
73
|
+
content: sectionContent,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
frontmatter,
|
|
78
|
+
systemPrompt,
|
|
79
|
+
sections,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Remove agent delegation references for platforms that don't support it
|
|
84
|
+
*/
|
|
85
|
+
removeAgentReferences(content) {
|
|
86
|
+
// Remove @blue-agent-name references
|
|
87
|
+
return content.replace(/@blue-[\w-]+/g, "the appropriate specialist");
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Transform header text based on platform conventions
|
|
91
|
+
*/
|
|
92
|
+
transformHeader(header, mappings) {
|
|
93
|
+
const mapping = mappings[header];
|
|
94
|
+
if (mapping === null) {
|
|
95
|
+
return null; // Skip this section
|
|
96
|
+
}
|
|
97
|
+
return mapping || header; // Use mapping or keep original
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/lib/adapters/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAclD;;GAEG;AACH,MAAM,OAAgB,eAAe;IAwBnC;;OAEG;IACO,gBAAgB,CAAC,SAAoB;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;QAC1E,OAAO,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACO,kBAAkB,CAAC,OAAe;QAC1C,sBAAsB;QACtB,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAClE,IAAI,gBAAgB,GAAG,OAAO,CAAC;QAC/B,IAAI,WAAW,GAAwB,EAAE,CAAC;QAE1C,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,eAAe,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAC5C,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAEjE,yCAAyC;YACzC,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBAC5C,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;oBAC7B,oCAAoC;oBACpC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;wBACjD,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK;6BACrB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;6BACZ,KAAK,CAAC,GAAG,CAAC;6BACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC1B,CAAC;yBAAM,CAAC;wBACN,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;oBAClC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,8DAA8D;QAC9D,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC3D,MAAM,YAAY,GAAG,gBAAgB;YACnC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;YAC9D,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;QAE5B,iBAAiB;QACjB,MAAM,QAAQ,GAAmB,EAAE,CAAC;QACpC,MAAM,YAAY,GAAG,oBAAoB,CAAC;QAC1C,IAAI,KAAK,CAAC;QACV,MAAM,eAAe,GAIhB,EAAE,CAAC;QAER,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC9D,eAAe,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;gBACtB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;gBAChB,GAAG,EAAE,KAAK,CAAC,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpC,MAAM,YAAY,GAChB,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;YAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC;YAC7D,MAAM,cAAc,GAAG,gBAAgB;iBACpC,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC;iBACnC,IAAI,EAAE,CAAC;YAEV,QAAQ,CAAC,IAAI,CAAC;gBACZ,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,OAAO,EAAE,cAAc;aACxB,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,WAAW;YACX,YAAY;YACZ,QAAQ;SACT,CAAC;IACJ,CAAC;IAED;;OAEG;IACO,qBAAqB,CAAC,OAAe;QAC7C,qCAAqC;QACrC,OAAO,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,4BAA4B,CAAC,CAAC;IACxE,CAAC;IAED;;OAEG;IACO,eAAe,CACvB,MAAc,EACd,QAAuC;QAEvC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,CAAC,oBAAoB;QACnC,CAAC;QACD,OAAO,OAAO,IAAI,MAAM,CAAC,CAAC,+BAA+B;IAC3D,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { PlatformAdapter } from "./base.js";
|
|
2
|
+
import { AgentInfo } from "../agents.js";
|
|
3
|
+
/**
|
|
4
|
+
* Claude Desktop adapter - nearly identical to Cursor
|
|
5
|
+
*/
|
|
6
|
+
export declare class ClaudeDesktopAdapter extends PlatformAdapter {
|
|
7
|
+
readonly platform: "claude-desktop";
|
|
8
|
+
readonly isSingleFile = false;
|
|
9
|
+
getOutputPath(): string;
|
|
10
|
+
installAgent(agentName: string, agentInfo: AgentInfo): void;
|
|
11
|
+
removeAgent(agentName: string, agentInfo: AgentInfo): void;
|
|
12
|
+
syncAgents(installedAgents: AgentInfo[]): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=claude-desktop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-desktop.d.ts","sourceRoot":"","sources":["../../../src/lib/adapters/claude-desktop.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,eAAe;IACvD,QAAQ,CAAC,QAAQ,EAAG,gBAAgB,CAAU;IAC9C,QAAQ,CAAC,YAAY,SAAS;IAE9B,aAAa,IAAI,MAAM;IAIvB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAc3D,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAO1D,UAAU,CAAC,eAAe,EAAE,SAAS,EAAE,GAAG,IAAI;CAM/C"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { PlatformAdapter } from "./base.js";
|
|
4
|
+
import { getProjectAgentsDir } from "../paths.js";
|
|
5
|
+
/**
|
|
6
|
+
* Claude Desktop adapter - nearly identical to Cursor
|
|
7
|
+
*/
|
|
8
|
+
export class ClaudeDesktopAdapter extends PlatformAdapter {
|
|
9
|
+
platform = "claude-desktop";
|
|
10
|
+
isSingleFile = false;
|
|
11
|
+
getOutputPath() {
|
|
12
|
+
return getProjectAgentsDir("claude-desktop");
|
|
13
|
+
}
|
|
14
|
+
installAgent(agentName, agentInfo) {
|
|
15
|
+
const content = this.loadAgentContent(agentInfo);
|
|
16
|
+
const outputDir = this.getOutputPath();
|
|
17
|
+
const outputPath = path.join(outputDir, agentInfo.filename);
|
|
18
|
+
// Ensure directory exists
|
|
19
|
+
if (!fs.existsSync(outputDir)) {
|
|
20
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
21
|
+
}
|
|
22
|
+
// Claude Desktop uses same format as Cursor
|
|
23
|
+
fs.writeFileSync(outputPath, content);
|
|
24
|
+
}
|
|
25
|
+
removeAgent(agentName, agentInfo) {
|
|
26
|
+
const outputPath = path.join(this.getOutputPath(), agentInfo.filename);
|
|
27
|
+
if (fs.existsSync(outputPath)) {
|
|
28
|
+
fs.unlinkSync(outputPath);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
syncAgents(installedAgents) {
|
|
32
|
+
// Update each file individually
|
|
33
|
+
for (const agent of installedAgents) {
|
|
34
|
+
this.installAgent(agent.name, agent);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=claude-desktop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-desktop.js","sourceRoot":"","sources":["../../../src/lib/adapters/claude-desktop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,eAAe;IAC9C,QAAQ,GAAG,gBAAyB,CAAC;IACrC,YAAY,GAAG,KAAK,CAAC;IAE9B,aAAa;QACX,OAAO,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IAC/C,CAAC;IAED,YAAY,CAAC,SAAiB,EAAE,SAAoB;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QAE5D,0BAA0B;QAC1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,4CAA4C;QAC5C,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,WAAW,CAAC,SAAiB,EAAE,SAAoB;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QACvE,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,UAAU,CAAC,eAA4B;QACrC,gCAAgC;QAChC,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { PlatformAdapter } from "./base.js";
|
|
2
|
+
import { AgentInfo } from "../agents.js";
|
|
3
|
+
/**
|
|
4
|
+
* Codex adapter - combines agents into single AGENTS.md file
|
|
5
|
+
*/
|
|
6
|
+
export declare class CodexAdapter extends PlatformAdapter {
|
|
7
|
+
readonly platform: "codex";
|
|
8
|
+
readonly isSingleFile = true;
|
|
9
|
+
private readonly AGENTS_FILE;
|
|
10
|
+
private readonly HEADER_MAPPINGS;
|
|
11
|
+
getOutputPath(): string;
|
|
12
|
+
installAgent(agentName: string, agentInfo: AgentInfo): void;
|
|
13
|
+
removeAgent(agentName: string, agentInfo: AgentInfo): void;
|
|
14
|
+
syncAgents(installedAgents: AgentInfo[]): void;
|
|
15
|
+
private transformAgent;
|
|
16
|
+
private parseSections;
|
|
17
|
+
private rebuildFile;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=codex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/lib/adapters/codex.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC;;GAEG;AACH,qBAAa,YAAa,SAAQ,eAAe;IAC/C,QAAQ,CAAC,QAAQ,EAAG,OAAO,CAAU;IACrC,QAAQ,CAAC,YAAY,QAAQ;IAE7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAC3C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAK9B;IAEF,aAAa,IAAI,MAAM;IAIvB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAc3D,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAmB1D,UAAU,CAAC,eAAe,EAAE,SAAS,EAAE,GAAG,IAAI;IAW9C,OAAO,CAAC,cAAc;IAyBtB,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,WAAW;CAQpB"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { PlatformAdapter } from "./base.js";
|
|
4
|
+
/**
|
|
5
|
+
* Codex adapter - combines agents into single AGENTS.md file
|
|
6
|
+
*/
|
|
7
|
+
export class CodexAdapter extends PlatformAdapter {
|
|
8
|
+
platform = "codex";
|
|
9
|
+
isSingleFile = true;
|
|
10
|
+
AGENTS_FILE = "AGENTS.md";
|
|
11
|
+
HEADER_MAPPINGS = {
|
|
12
|
+
"When Invoked": "Guidelines",
|
|
13
|
+
"Core Responsibilities": "Overview",
|
|
14
|
+
"Delegation Guidelines": null, // Skip - Codex doesn't have delegation
|
|
15
|
+
"Output Format": "Expected Output",
|
|
16
|
+
};
|
|
17
|
+
getOutputPath() {
|
|
18
|
+
return path.join(process.cwd(), this.AGENTS_FILE);
|
|
19
|
+
}
|
|
20
|
+
installAgent(agentName, agentInfo) {
|
|
21
|
+
const agentContent = this.transformAgent(agentInfo);
|
|
22
|
+
const agentsFilePath = this.getOutputPath();
|
|
23
|
+
if (!fs.existsSync(agentsFilePath)) {
|
|
24
|
+
// First agent - create file with header
|
|
25
|
+
const header = "# Blue Gardener AI Agents\n\n";
|
|
26
|
+
fs.writeFileSync(agentsFilePath, header + agentContent);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
// Append to existing file
|
|
30
|
+
fs.appendFileSync(agentsFilePath, "\n\n---\n\n" + agentContent);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
removeAgent(agentName, agentInfo) {
|
|
34
|
+
const agentsFilePath = this.getOutputPath();
|
|
35
|
+
if (!fs.existsSync(agentsFilePath))
|
|
36
|
+
return;
|
|
37
|
+
const content = fs.readFileSync(agentsFilePath, "utf-8");
|
|
38
|
+
const sections = this.parseSections(content);
|
|
39
|
+
// Filter out the agent section
|
|
40
|
+
const filtered = sections.filter((s) => s.agentName !== agentName);
|
|
41
|
+
if (filtered.length === 0) {
|
|
42
|
+
// No agents left - remove file
|
|
43
|
+
fs.unlinkSync(agentsFilePath);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
// Rebuild file with remaining sections
|
|
47
|
+
this.rebuildFile(agentsFilePath, filtered);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
syncAgents(installedAgents) {
|
|
51
|
+
const agentsFilePath = this.getOutputPath();
|
|
52
|
+
// Regenerate entire file from scratch
|
|
53
|
+
const header = "# Blue Gardener AI Agents\n\n";
|
|
54
|
+
const sections = installedAgents.map((agent) => this.transformAgent(agent));
|
|
55
|
+
const content = header + sections.join("\n\n---\n\n");
|
|
56
|
+
fs.writeFileSync(agentsFilePath, content);
|
|
57
|
+
}
|
|
58
|
+
transformAgent(agentInfo) {
|
|
59
|
+
const content = this.loadAgentContent(agentInfo);
|
|
60
|
+
const parsed = this.parseAgentMarkdown(content);
|
|
61
|
+
let output = `## ${parsed.frontmatter.description || agentInfo.description}\n\n`;
|
|
62
|
+
output += this.removeAgentReferences(parsed.systemPrompt) + "\n\n";
|
|
63
|
+
// Transform and add sections
|
|
64
|
+
for (const section of parsed.sections) {
|
|
65
|
+
const newHeader = this.transformHeader(section.header, this.HEADER_MAPPINGS);
|
|
66
|
+
if (newHeader === null) {
|
|
67
|
+
continue; // Skip this section
|
|
68
|
+
}
|
|
69
|
+
output += `### ${newHeader}\n\n`;
|
|
70
|
+
output += this.removeAgentReferences(section.content) + "\n\n";
|
|
71
|
+
}
|
|
72
|
+
return output.trim();
|
|
73
|
+
}
|
|
74
|
+
parseSections(content) {
|
|
75
|
+
const parts = content.split(/\n---\n/);
|
|
76
|
+
const sections = [];
|
|
77
|
+
for (const part of parts) {
|
|
78
|
+
const trimmed = part.trim();
|
|
79
|
+
if (!trimmed || trimmed.startsWith("# Blue Gardener"))
|
|
80
|
+
continue;
|
|
81
|
+
// Try to extract agent name from first header
|
|
82
|
+
const headerMatch = trimmed.match(/^##\s+(.+?)$/m);
|
|
83
|
+
const agentName = headerMatch ? headerMatch[1] : "unknown";
|
|
84
|
+
sections.push({
|
|
85
|
+
agentName,
|
|
86
|
+
content: trimmed,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
return sections;
|
|
90
|
+
}
|
|
91
|
+
rebuildFile(filePath, sections) {
|
|
92
|
+
const header = "# Blue Gardener AI Agents\n\n";
|
|
93
|
+
const content = header + sections.map((s) => s.content).join("\n\n---\n\n");
|
|
94
|
+
fs.writeFileSync(filePath, content);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/lib/adapters/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { PlatformAdapter } from "./base.js";
|
|
2
|
+
import { AgentInfo } from "../agents.js";
|
|
3
|
+
/**
|
|
4
|
+
* Cursor adapter - minimal transformation, current format
|
|
5
|
+
*/
|
|
6
|
+
export declare class CursorAdapter extends PlatformAdapter {
|
|
7
|
+
readonly platform: "cursor";
|
|
8
|
+
readonly isSingleFile = false;
|
|
9
|
+
getOutputPath(): string;
|
|
10
|
+
installAgent(agentName: string, agentInfo: AgentInfo): void;
|
|
11
|
+
removeAgent(agentName: string, agentInfo: AgentInfo): void;
|
|
12
|
+
syncAgents(installedAgents: AgentInfo[]): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=cursor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../src/lib/adapters/cursor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC;;GAEG;AACH,qBAAa,aAAc,SAAQ,eAAe;IAChD,QAAQ,CAAC,QAAQ,EAAG,QAAQ,CAAU;IACtC,QAAQ,CAAC,YAAY,SAAS;IAE9B,aAAa,IAAI,MAAM;IAIvB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAc3D,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAO1D,UAAU,CAAC,eAAe,EAAE,SAAS,EAAE,GAAG,IAAI;CAM/C"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { PlatformAdapter } from "./base.js";
|
|
4
|
+
import { getProjectAgentsDir } from "../paths.js";
|
|
5
|
+
/**
|
|
6
|
+
* Cursor adapter - minimal transformation, current format
|
|
7
|
+
*/
|
|
8
|
+
export class CursorAdapter extends PlatformAdapter {
|
|
9
|
+
platform = "cursor";
|
|
10
|
+
isSingleFile = false;
|
|
11
|
+
getOutputPath() {
|
|
12
|
+
return getProjectAgentsDir("cursor");
|
|
13
|
+
}
|
|
14
|
+
installAgent(agentName, agentInfo) {
|
|
15
|
+
const content = this.loadAgentContent(agentInfo);
|
|
16
|
+
const outputDir = this.getOutputPath();
|
|
17
|
+
const outputPath = path.join(outputDir, agentInfo.filename);
|
|
18
|
+
// Ensure directory exists
|
|
19
|
+
if (!fs.existsSync(outputDir)) {
|
|
20
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
21
|
+
}
|
|
22
|
+
// Cursor format is the source format - just copy
|
|
23
|
+
fs.writeFileSync(outputPath, content);
|
|
24
|
+
}
|
|
25
|
+
removeAgent(agentName, agentInfo) {
|
|
26
|
+
const outputPath = path.join(this.getOutputPath(), agentInfo.filename);
|
|
27
|
+
if (fs.existsSync(outputPath)) {
|
|
28
|
+
fs.unlinkSync(outputPath);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
syncAgents(installedAgents) {
|
|
32
|
+
// Update each file individually
|
|
33
|
+
for (const agent of installedAgents) {
|
|
34
|
+
this.installAgent(agent.name, agent);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=cursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../../src/lib/adapters/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,eAAe;IACvC,QAAQ,GAAG,QAAiB,CAAC;IAC7B,YAAY,GAAG,KAAK,CAAC;IAE9B,aAAa;QACX,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,YAAY,CAAC,SAAiB,EAAE,SAAoB;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QAE5D,0BAA0B;QAC1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,iDAAiD;QACjD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,WAAW,CAAC,SAAiB,EAAE,SAAoB;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QACvE,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,UAAU,CAAC,eAA4B;QACrC,gCAAgC;QAChC,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { PlatformAdapter } from "./base.js";
|
|
2
|
+
import { AgentInfo } from "../agents.js";
|
|
3
|
+
/**
|
|
4
|
+
* GitHub Copilot adapter - combines agents into single .github/copilot-instructions.md file
|
|
5
|
+
*/
|
|
6
|
+
export declare class GitHubCopilotAdapter extends PlatformAdapter {
|
|
7
|
+
readonly platform: "github-copilot";
|
|
8
|
+
readonly isSingleFile = true;
|
|
9
|
+
private readonly COPILOT_FILE;
|
|
10
|
+
private readonly HEADER_MAPPINGS;
|
|
11
|
+
getOutputPath(): string;
|
|
12
|
+
installAgent(agentName: string, agentInfo: AgentInfo): void;
|
|
13
|
+
removeAgent(agentName: string, agentInfo: AgentInfo): void;
|
|
14
|
+
syncAgents(installedAgents: AgentInfo[]): void;
|
|
15
|
+
private transformAgent;
|
|
16
|
+
private parseSections;
|
|
17
|
+
private rebuildFile;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=github-copilot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-copilot.d.ts","sourceRoot":"","sources":["../../../src/lib/adapters/github-copilot.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,eAAe;IACvD,QAAQ,CAAC,QAAQ,EAAG,gBAAgB,CAAU;IAC9C,QAAQ,CAAC,YAAY,QAAQ;IAE7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqC;IAClE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAK9B;IAEF,aAAa,IAAI,MAAM;IAIvB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAqB3D,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAmB1D,UAAU,CAAC,eAAe,EAAE,SAAS,EAAE,GAAG,IAAI;IAkB9C,OAAO,CAAC,cAAc;IAyBtB,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,WAAW;CASpB"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { PlatformAdapter } from "./base.js";
|
|
4
|
+
/**
|
|
5
|
+
* GitHub Copilot adapter - combines agents into single .github/copilot-instructions.md file
|
|
6
|
+
*/
|
|
7
|
+
export class GitHubCopilotAdapter extends PlatformAdapter {
|
|
8
|
+
platform = "github-copilot";
|
|
9
|
+
isSingleFile = true;
|
|
10
|
+
COPILOT_FILE = ".github/copilot-instructions.md";
|
|
11
|
+
HEADER_MAPPINGS = {
|
|
12
|
+
"When Invoked": "Guidelines",
|
|
13
|
+
"Core Responsibilities": "Overview",
|
|
14
|
+
"Delegation Guidelines": null, // Skip - Copilot doesn't have delegation
|
|
15
|
+
"Output Format": "Expected Output",
|
|
16
|
+
};
|
|
17
|
+
getOutputPath() {
|
|
18
|
+
return path.join(process.cwd(), this.COPILOT_FILE);
|
|
19
|
+
}
|
|
20
|
+
installAgent(agentName, agentInfo) {
|
|
21
|
+
const agentContent = this.transformAgent(agentInfo);
|
|
22
|
+
const copilotFilePath = this.getOutputPath();
|
|
23
|
+
const copilotDir = path.dirname(copilotFilePath);
|
|
24
|
+
// Ensure .github directory exists
|
|
25
|
+
if (!fs.existsSync(copilotDir)) {
|
|
26
|
+
fs.mkdirSync(copilotDir, { recursive: true });
|
|
27
|
+
}
|
|
28
|
+
if (!fs.existsSync(copilotFilePath)) {
|
|
29
|
+
// First agent - create file with header
|
|
30
|
+
const header = "# Blue Gardener AI Agents\n\nThis project uses specialized AI agents from Blue Gardener.\n\n";
|
|
31
|
+
fs.writeFileSync(copilotFilePath, header + agentContent);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
// Append to existing file
|
|
35
|
+
fs.appendFileSync(copilotFilePath, "\n\n---\n\n" + agentContent);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
removeAgent(agentName, agentInfo) {
|
|
39
|
+
const copilotFilePath = this.getOutputPath();
|
|
40
|
+
if (!fs.existsSync(copilotFilePath))
|
|
41
|
+
return;
|
|
42
|
+
const content = fs.readFileSync(copilotFilePath, "utf-8");
|
|
43
|
+
const sections = this.parseSections(content);
|
|
44
|
+
// Filter out the agent section
|
|
45
|
+
const filtered = sections.filter((s) => s.agentName !== agentName);
|
|
46
|
+
if (filtered.length === 0) {
|
|
47
|
+
// No agents left - remove file
|
|
48
|
+
fs.unlinkSync(copilotFilePath);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
// Rebuild file with remaining sections
|
|
52
|
+
this.rebuildFile(copilotFilePath, filtered);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
syncAgents(installedAgents) {
|
|
56
|
+
const copilotFilePath = this.getOutputPath();
|
|
57
|
+
const copilotDir = path.dirname(copilotFilePath);
|
|
58
|
+
// Ensure .github directory exists
|
|
59
|
+
if (!fs.existsSync(copilotDir)) {
|
|
60
|
+
fs.mkdirSync(copilotDir, { recursive: true });
|
|
61
|
+
}
|
|
62
|
+
// Regenerate entire file from scratch
|
|
63
|
+
const header = "# Blue Gardener AI Agents\n\nThis project uses specialized AI agents from Blue Gardener.\n\n";
|
|
64
|
+
const sections = installedAgents.map((agent) => this.transformAgent(agent));
|
|
65
|
+
const content = header + sections.join("\n\n---\n\n");
|
|
66
|
+
fs.writeFileSync(copilotFilePath, content);
|
|
67
|
+
}
|
|
68
|
+
transformAgent(agentInfo) {
|
|
69
|
+
const content = this.loadAgentContent(agentInfo);
|
|
70
|
+
const parsed = this.parseAgentMarkdown(content);
|
|
71
|
+
let output = `## ${parsed.frontmatter.description || agentInfo.description}\n\n`;
|
|
72
|
+
output += this.removeAgentReferences(parsed.systemPrompt) + "\n\n";
|
|
73
|
+
// Transform and add sections
|
|
74
|
+
for (const section of parsed.sections) {
|
|
75
|
+
const newHeader = this.transformHeader(section.header, this.HEADER_MAPPINGS);
|
|
76
|
+
if (newHeader === null) {
|
|
77
|
+
continue; // Skip this section
|
|
78
|
+
}
|
|
79
|
+
output += `### ${newHeader}\n\n`;
|
|
80
|
+
output += this.removeAgentReferences(section.content) + "\n\n";
|
|
81
|
+
}
|
|
82
|
+
return output.trim();
|
|
83
|
+
}
|
|
84
|
+
parseSections(content) {
|
|
85
|
+
const parts = content.split(/\n---\n/);
|
|
86
|
+
const sections = [];
|
|
87
|
+
for (const part of parts) {
|
|
88
|
+
const trimmed = part.trim();
|
|
89
|
+
if (!trimmed || trimmed.startsWith("# Blue Gardener"))
|
|
90
|
+
continue;
|
|
91
|
+
// Try to extract agent name from first header
|
|
92
|
+
const headerMatch = trimmed.match(/^##\s+(.+?)$/m);
|
|
93
|
+
const agentName = headerMatch ? headerMatch[1] : "unknown";
|
|
94
|
+
sections.push({
|
|
95
|
+
agentName,
|
|
96
|
+
content: trimmed,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return sections;
|
|
100
|
+
}
|
|
101
|
+
rebuildFile(filePath, sections) {
|
|
102
|
+
const header = "# Blue Gardener AI Agents\n\nThis project uses specialized AI agents from Blue Gardener.\n\n";
|
|
103
|
+
const content = header + sections.map((s) => s.content).join("\n\n---\n\n");
|
|
104
|
+
fs.writeFileSync(filePath, content);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=github-copilot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-copilot.js","sourceRoot":"","sources":["../../../src/lib/adapters/github-copilot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG5C;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,eAAe;IAC9C,QAAQ,GAAG,gBAAyB,CAAC;IACrC,YAAY,GAAG,IAAI,CAAC;IAEZ,YAAY,GAAG,iCAAiC,CAAC;IACjD,eAAe,GAAkC;QAChE,cAAc,EAAE,YAAY;QAC5B,uBAAuB,EAAE,UAAU;QACnC,uBAAuB,EAAE,IAAI,EAAE,yCAAyC;QACxE,eAAe,EAAE,iBAAiB;KACnC,CAAC;IAEF,aAAa;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACrD,CAAC;IAED,YAAY,CAAC,SAAiB,EAAE,SAAoB;QAClD,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAEjD,kCAAkC;QAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACpC,wCAAwC;YACxC,MAAM,MAAM,GACV,8FAA8F,CAAC;YACjG,EAAE,CAAC,aAAa,CAAC,eAAe,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,0BAA0B;YAC1B,EAAE,CAAC,cAAc,CAAC,eAAe,EAAE,aAAa,GAAG,YAAY,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,WAAW,CAAC,SAAiB,EAAE,SAAoB;QACjD,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;YAAE,OAAO;QAE5C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAE7C,+BAA+B;QAC/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QAEnE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,+BAA+B;YAC/B,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,uCAAuC;YACvC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,UAAU,CAAC,eAA4B;QACrC,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAEjD,kCAAkC;QAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,sCAAsC;QACtC,MAAM,MAAM,GACV,8FAA8F,CAAC;QACjG,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QAE5E,MAAM,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACtD,EAAE,CAAC,aAAa,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAEO,cAAc,CAAC,SAAoB;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAEhD,IAAI,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,WAAW,IAAI,SAAS,CAAC,WAAW,MAAM,CAAC;QACjF,MAAM,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;QAEnE,6BAA6B;QAC7B,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CACpC,OAAO,CAAC,MAAM,EACd,IAAI,CAAC,eAAe,CACrB,CAAC;YAEF,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACvB,SAAS,CAAC,oBAAoB;YAChC,CAAC;YAED,MAAM,IAAI,OAAO,SAAS,MAAM,CAAC;YACjC,MAAM,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;QACjE,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAEO,aAAa,CACnB,OAAe;QAEf,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAkD,EAAE,CAAC;QAEnE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC;gBAAE,SAAS;YAEhE,8CAA8C;YAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YACnD,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAE3D,QAAQ,CAAC,IAAI,CAAC;gBACZ,SAAS;gBACT,OAAO,EAAE,OAAO;aACjB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,WAAW,CACjB,QAAgB,EAChB,QAAuD;QAEvD,MAAM,MAAM,GACV,8FAA8F,CAAC;QACjG,MAAM,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5E,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Platform } from "../platform.js";
|
|
2
|
+
import { PlatformAdapter } from "./base.js";
|
|
3
|
+
/**
|
|
4
|
+
* Factory to get the appropriate adapter for a platform
|
|
5
|
+
*/
|
|
6
|
+
export declare function getAdapter(platform: Platform): PlatformAdapter;
|
|
7
|
+
export * from "./base.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAQ5C;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,eAAe,CAiB9D;AAED,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { CursorAdapter } from "./cursor.js";
|
|
2
|
+
import { ClaudeDesktopAdapter } from "./claude-desktop.js";
|
|
3
|
+
import { CodexAdapter } from "./codex.js";
|
|
4
|
+
import { GitHubCopilotAdapter } from "./github-copilot.js";
|
|
5
|
+
import { WindsurfAdapter } from "./windsurf.js";
|
|
6
|
+
import { OpenCodeAdapter } from "./opencode.js";
|
|
7
|
+
/**
|
|
8
|
+
* Factory to get the appropriate adapter for a platform
|
|
9
|
+
*/
|
|
10
|
+
export function getAdapter(platform) {
|
|
11
|
+
switch (platform) {
|
|
12
|
+
case "cursor":
|
|
13
|
+
return new CursorAdapter();
|
|
14
|
+
case "claude-desktop":
|
|
15
|
+
return new ClaudeDesktopAdapter();
|
|
16
|
+
case "codex":
|
|
17
|
+
return new CodexAdapter();
|
|
18
|
+
case "github-copilot":
|
|
19
|
+
return new GitHubCopilotAdapter();
|
|
20
|
+
case "windsurf":
|
|
21
|
+
return new WindsurfAdapter();
|
|
22
|
+
case "opencode":
|
|
23
|
+
return new OpenCodeAdapter();
|
|
24
|
+
default:
|
|
25
|
+
throw new Error(`Unknown platform: ${platform}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export * from "./base.js";
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/adapters/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAkB;IAC3C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,IAAI,aAAa,EAAE,CAAC;QAC7B,KAAK,gBAAgB;YACnB,OAAO,IAAI,oBAAoB,EAAE,CAAC;QACpC,KAAK,OAAO;YACV,OAAO,IAAI,YAAY,EAAE,CAAC;QAC5B,KAAK,gBAAgB;YACnB,OAAO,IAAI,oBAAoB,EAAE,CAAC;QACpC,KAAK,UAAU;YACb,OAAO,IAAI,eAAe,EAAE,CAAC;QAC/B,KAAK,UAAU;YACb,OAAO,IAAI,eAAe,EAAE,CAAC;QAC/B;YACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { PlatformAdapter } from "./base.js";
|
|
2
|
+
import { AgentInfo } from "../agents.js";
|
|
3
|
+
/**
|
|
4
|
+
* OpenCode adapter - similar to Cursor with minor frontmatter adjustments
|
|
5
|
+
*/
|
|
6
|
+
export declare class OpenCodeAdapter extends PlatformAdapter {
|
|
7
|
+
readonly platform: "opencode";
|
|
8
|
+
readonly isSingleFile = false;
|
|
9
|
+
getOutputPath(): string;
|
|
10
|
+
installAgent(agentName: string, agentInfo: AgentInfo): void;
|
|
11
|
+
removeAgent(agentName: string, agentInfo: AgentInfo): void;
|
|
12
|
+
syncAgents(installedAgents: AgentInfo[]): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=opencode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../src/lib/adapters/opencode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC;;GAEG;AACH,qBAAa,eAAgB,SAAQ,eAAe;IAClD,QAAQ,CAAC,QAAQ,EAAG,UAAU,CAAU;IACxC,QAAQ,CAAC,YAAY,SAAS;IAE9B,aAAa,IAAI,MAAM;IAIvB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAc3D,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAO1D,UAAU,CAAC,eAAe,EAAE,SAAS,EAAE,GAAG,IAAI;CAM/C"}
|